[{"data":1,"prerenderedAt":174483},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch14-html5-yu-css3-xin-te-xing":3,"wiki-doc-nav":1805},{"id":4,"title":5,"body":6,"description":1797,"extension":1798,"meta":1799,"navigation":1800,"path":1801,"seo":1802,"stem":1803,"__hash__":1804},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":8,"toc":1786},"minimark",[9,13,18,23,27,35,38,41,82,87,90,104,108,119,124,130,133,136,139,191,197,200,230,233,239,242,245,281,284,356,359,363,368,380,383,387,417,420,425,428,458,461,465,482,486,490,493,531,534,538,541,544,547,550,553,670,673,676,679,781,784,788,792,796,799,846,849,851,868,872,875,880,962,965,968,1105,1110,1113,1121,1124,1129,1214,1217,1221,1224,1227,1231,1251,1256,1340,1343,1348,1351,1354,1436,1439,1442,1445,1448,1451,1456,1459,1462,1534,1537,1542,1545,1647,1650,1658,1661,1664,1667,1670,1673,1676,1679,1682,1686,1691,1694,1730,1735,1738,1779,1782],[10,11,5],"h1",{"id":12},"_14-html5与css3新特性",[14,15,17],"h2",{"id":16},"_141-html5的新特性","14.1 HTML5的新特性",[19,20,22],"h3",{"id":21},"_1411-基本标签","14.1.1 基本标签",[24,25,26],"p",{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[24,28,29,30,34],{},"这些新特性都有兼容性问题，基本是 ",[31,32,33],"strong",{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[24,36,37],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[24,39,40],{},"现在使用的是新特性：",[42,43,44,52,58,64,70,76],"ul",{},[45,46,47,51],"li",{},[48,49,50],"code",{},"\u003Cheader>"," 头部标签",[45,53,54,57],{},[48,55,56],{},"\u003Cnav>"," 导航标签",[45,59,60,63],{},[48,61,62],{},"\u003Carticle>"," 内容标签",[45,65,66,69],{},[48,67,68],{},"\u003Csection>"," 定义文档某个区域",[45,71,72,75],{},[48,73,74],{},"\u003Caside>"," 侧边栏标签",[45,77,78,81],{},[48,79,80],{},"\u003Cfooter>"," 尾部标签",[83,84],"img",{"style":85,"src":86},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[24,88,89],{},"注意点：",[42,91,92,95,98,101],{},[45,93,94],{},"这种语义化标准主要是针对搜索引擎的",[45,96,97],{},"这些标签页面中可以经常使用",[45,99,100],{},"在IE9中，需要把这些元素转换为块级元素",[45,102,103],{},"移动端更喜欢使用这些标签",[19,105,107],{"id":106},"_1412-多媒体标签","14.1.2 多媒体标签",[24,109,110,111,114,115,118],{},"音频 ",[31,112,113],{},"audio"," 和视频 ",[31,116,117],{},"video"," 两个标签",[120,121,123],"h4",{"id":122},"_14121-视频标签-video","14.1.2.1 视频标签- video",[125,126,127],"ol",{},[45,128,129],{},"支持格式：",[83,131],{"style":85,"src":132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[24,134,135],{},"尽量使用MP4，兼容性好",[24,137,138],{},"用MP4就可以",[140,141,146],"pre",{"className":142,"code":143,"language":144,"meta":145,"style":145},"language-Html shiki shiki-themes github-light github-dark","\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n","Html","",[48,147,148],{"__ignoreMap":145},[149,150,153,157,160,164,167,171,174,177,180,183,186,188],"span",{"class":151,"line":152},"line",1,[149,154,156],{"class":155},"sVt8B","\u003C",[149,158,117],{"class":159},"s9eBZ",[149,161,163],{"class":162},"sScJk"," src",[149,165,166],{"class":155},"=",[149,168,170],{"class":169},"sZZnC","\"movie.mp4\"",[149,172,173],{"class":162}," controls",[149,175,176],{"class":162}," autoplay",[149,178,179],{"class":162}," muted",[149,181,182],{"class":162}," loop",[149,184,185],{"class":155},">\u003C\u002F",[149,187,117],{"class":159},[149,189,190],{"class":155},">\n",[125,192,194],{"start":193},2,[45,195,196],{},"兼容写法",[24,198,199],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[140,201,202],{"className":142,"code":143,"language":144,"meta":145,"style":145},[48,203,204],{"__ignoreMap":145},[149,205,206,208,210,212,214,216,218,220,222,224,226,228],{"class":151,"line":152},[149,207,156],{"class":155},[149,209,117],{"class":159},[149,211,163],{"class":162},[149,213,166],{"class":155},[149,215,170],{"class":169},[149,217,173],{"class":162},[149,219,176],{"class":162},[149,221,179],{"class":162},[149,223,182],{"class":162},[149,225,185],{"class":155},[149,227,117],{"class":159},[149,229,190],{"class":155},[24,231,232],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[125,234,236],{"start":235},3,[45,237,238],{},"video常用属性",[83,240],{"style":85,"src":241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[24,243,244],{},"poster属性后面是跟的等待加载图片的地址",[140,246,248],{"className":142,"code":247,"language":144,"meta":145,"style":145},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[48,249,250],{"__ignoreMap":145},[149,251,252,254,256,258,260,263,266,268,271,274,276,279],{"class":151,"line":152},[149,253,156],{"class":155},[149,255,83],{"class":159},[149,257,163],{"class":162},[149,259,166],{"class":155},[149,261,262],{"class":169},"\"images\u002Fpic.jpg\"",[149,264,265],{"class":162}," alt",[149,267,166],{"class":155},[149,269,270],{"class":169},"\"描述文字\"",[149,272,273],{"class":162}," title",[149,275,166],{"class":155},[149,277,278],{"class":169},"\"悬停提示\"",[149,280,190],{"class":155},[24,282,283],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[140,285,289],{"className":286,"code":287,"language":288,"meta":145,"style":145},"language-Css shiki shiki-themes github-light github-dark","\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n","Css",[48,290,291,297,305,338,344,350],{"__ignoreMap":145},[149,292,293],{"class":151,"line":152},[149,294,296],{"class":295},"sJ8bj","\u002F* 2D 位移 *\u002F\n",[149,298,299,302],{"class":151,"line":193},[149,300,301],{"class":159},"div",[149,303,304],{"class":155}," {\n",[149,306,307,311,314,317,320,323,327,330,333,335],{"class":151,"line":235},[149,308,310],{"class":309},"sj4cs","  transform",[149,312,313],{"class":155},": ",[149,315,316],{"class":309},"translate",[149,318,319],{"class":155},"(",[149,321,322],{"class":309},"100",[149,324,326],{"class":325},"szBVR","px",[149,328,329],{"class":155},", ",[149,331,332],{"class":309},"50",[149,334,326],{"class":325},[149,336,337],{"class":155},");\n",[149,339,341],{"class":151,"line":340},4,[149,342,343],{"class":295},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[149,345,347],{"class":151,"line":346},5,[149,348,349],{"class":295},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[149,351,353],{"class":151,"line":352},6,[149,354,355],{"class":155},"}\n",[24,357,358],{},"muted:自动静音属性",[120,360,362],{"id":361},"_14122-音频标签audio","14.1.2.2 音频标签audio",[125,364,365],{},[45,366,367],{},"基本使用",[24,369,370,371,376,377],{},"当前 ",[31,372,373],{},[48,374,375],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[31,378,379],{},"mp3格式",[83,381],{"style":85,"src":382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[125,384,385],{"start":193},[45,386,196],{},[140,388,389],{"className":142,"code":143,"language":144,"meta":145,"style":145},[48,390,391],{"__ignoreMap":145},[149,392,393,395,397,399,401,403,405,407,409,411,413,415],{"class":151,"line":152},[149,394,156],{"class":155},[149,396,117],{"class":159},[149,398,163],{"class":162},[149,400,166],{"class":155},[149,402,170],{"class":169},[149,404,173],{"class":162},[149,406,176],{"class":162},[149,408,179],{"class":162},[149,410,182],{"class":162},[149,412,185],{"class":155},[149,414,117],{"class":159},[149,416,190],{"class":155},[24,418,419],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[125,421,422],{"start":235},[45,423,424],{},"常用属性",[83,426],{"style":85,"src":427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[140,429,430],{"className":142,"code":143,"language":144,"meta":145,"style":145},[48,431,432],{"__ignoreMap":145},[149,433,434,436,438,440,442,444,446,448,450,452,454,456],{"class":151,"line":152},[149,435,156],{"class":155},[149,437,117],{"class":159},[149,439,163],{"class":162},[149,441,166],{"class":155},[149,443,170],{"class":169},[149,445,173],{"class":162},[149,447,176],{"class":162},[149,449,179],{"class":162},[149,451,182],{"class":162},[149,453,185],{"class":155},[149,455,117],{"class":159},[149,457,190],{"class":155},[24,459,460],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[120,462,464],{"id":463},"_14123-总结","14.1.2.3 总结",[42,466,467,470,473,476,479],{},[45,468,469],{},"音频标签和视频标签使用方式基本一致",[45,471,472],{},"浏览器支持情况不同",[45,474,475],{},"谷歌浏览器把音频和视频自动播放禁止了",[45,477,478],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[45,480,481],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[19,483,485],{"id":484},"_1413-表单元素","14.1.3 表单元素",[120,487,489],{"id":488},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[83,491],{"style":85,"src":492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[140,494,496],{"className":142,"code":495,"language":144,"meta":145,"style":145},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[48,497,498],{"__ignoreMap":145},[149,499,500,502,505,508,510,513,516,518,521,524,526,529],{"class":151,"line":152},[149,501,156],{"class":155},[149,503,504],{"class":159},"input",[149,506,507],{"class":162}," type",[149,509,166],{"class":155},[149,511,512],{"class":169},"\"text\"",[149,514,515],{"class":162}," name",[149,517,166],{"class":155},[149,519,520],{"class":169},"\"username\"",[149,522,523],{"class":162}," placeholder",[149,525,166],{"class":155},[149,527,528],{"class":169},"\"请输入用户名\"",[149,530,190],{"class":155},[83,532],{"style":85,"src":533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[120,535,537],{"id":536},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[83,539],{"style":85,"src":540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[24,542,543],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[24,545,546],{},"快捷操作：",[83,548],{"style":85,"src":549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[24,551,552],{},"例子1：",[140,554,556],{"className":142,"code":555,"language":144,"meta":145,"style":145},"\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",[48,557,558,583,611,640,661],{"__ignoreMap":145},[149,559,560,562,565,568,570,573,576,578,581],{"class":151,"line":152},[149,561,156],{"class":155},[149,563,564],{"class":159},"form",[149,566,567],{"class":162}," action",[149,569,166],{"class":155},[149,571,572],{"class":169},"\"\u002Fsubmit\"",[149,574,575],{"class":162}," method",[149,577,166],{"class":155},[149,579,580],{"class":169},"\"post\"",[149,582,190],{"class":155},[149,584,585,588,590,592,594,596,598,600,602,604,606,609],{"class":151,"line":193},[149,586,587],{"class":155},"  \u003C",[149,589,504],{"class":159},[149,591,507],{"class":162},[149,593,166],{"class":155},[149,595,512],{"class":169},[149,597,515],{"class":162},[149,599,166],{"class":155},[149,601,520],{"class":169},[149,603,523],{"class":162},[149,605,166],{"class":155},[149,607,608],{"class":169},"\"用户名\"",[149,610,190],{"class":155},[149,612,613,615,617,619,621,624,626,628,631,633,635,638],{"class":151,"line":235},[149,614,587],{"class":155},[149,616,504],{"class":159},[149,618,507],{"class":162},[149,620,166],{"class":155},[149,622,623],{"class":169},"\"password\"",[149,625,515],{"class":162},[149,627,166],{"class":155},[149,629,630],{"class":169},"\"pwd\"",[149,632,523],{"class":162},[149,634,166],{"class":155},[149,636,637],{"class":169},"\"密码\"",[149,639,190],{"class":155},[149,641,642,644,647,649,651,654,657,659],{"class":151,"line":340},[149,643,587],{"class":155},[149,645,646],{"class":159},"button",[149,648,507],{"class":162},[149,650,166],{"class":155},[149,652,653],{"class":169},"\"submit\"",[149,655,656],{"class":155},">提交\u003C\u002F",[149,658,646],{"class":159},[149,660,190],{"class":155},[149,662,663,666,668],{"class":151,"line":346},[149,664,665],{"class":155},"\u003C\u002F",[149,667,564],{"class":159},[149,669,190],{"class":155},[83,671],{"style":85,"src":672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[24,674,675],{},"value是表单域的内容",[24,677,678],{},"例子2：",[140,680,681],{"className":142,"code":555,"language":144,"meta":145,"style":145},[48,682,683,703,729,755,773],{"__ignoreMap":145},[149,684,685,687,689,691,693,695,697,699,701],{"class":151,"line":152},[149,686,156],{"class":155},[149,688,564],{"class":159},[149,690,567],{"class":162},[149,692,166],{"class":155},[149,694,572],{"class":169},[149,696,575],{"class":162},[149,698,166],{"class":155},[149,700,580],{"class":169},[149,702,190],{"class":155},[149,704,705,707,709,711,713,715,717,719,721,723,725,727],{"class":151,"line":193},[149,706,587],{"class":155},[149,708,504],{"class":159},[149,710,507],{"class":162},[149,712,166],{"class":155},[149,714,512],{"class":169},[149,716,515],{"class":162},[149,718,166],{"class":155},[149,720,520],{"class":169},[149,722,523],{"class":162},[149,724,166],{"class":155},[149,726,608],{"class":169},[149,728,190],{"class":155},[149,730,731,733,735,737,739,741,743,745,747,749,751,753],{"class":151,"line":235},[149,732,587],{"class":155},[149,734,504],{"class":159},[149,736,507],{"class":162},[149,738,166],{"class":155},[149,740,623],{"class":169},[149,742,515],{"class":162},[149,744,166],{"class":155},[149,746,630],{"class":169},[149,748,523],{"class":162},[149,750,166],{"class":155},[149,752,637],{"class":169},[149,754,190],{"class":155},[149,756,757,759,761,763,765,767,769,771],{"class":151,"line":340},[149,758,587],{"class":155},[149,760,646],{"class":159},[149,762,507],{"class":162},[149,764,166],{"class":155},[149,766,653],{"class":169},[149,768,656],{"class":155},[149,770,646],{"class":159},[149,772,190],{"class":155},[149,774,775,777,779],{"class":151,"line":346},[149,776,665],{"class":155},[149,778,564],{"class":159},[149,780,190],{"class":155},[83,782],{"style":85,"src":783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,785,787],{"id":786},"_142-css新特性","14.2 CSS新特性",[19,789,791],{"id":790},"_1421-新增选择器","14.2.1 新增选择器",[120,793,795],{"id":794},"_14211-属性选择器","14.2.1.1 属性选择器",[83,797],{"style":85,"src":798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[140,800,802],{"className":286,"code":801,"language":288,"meta":145,"style":145},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[48,803,804,821,842],{"__ignoreMap":145},[149,805,806,808,811,814,816,818],{"class":151,"line":152},[149,807,504],{"class":159},[149,809,810],{"class":155},"[",[149,812,813],{"class":162},"type",[149,815,166],{"class":325},[149,817,512],{"class":169},[149,819,820],{"class":155},"] {\n",[149,822,823,826,828,831,833,836,839],{"class":151,"line":193},[149,824,825],{"class":309},"  border",[149,827,313],{"class":155},[149,829,830],{"class":309},"1",[149,832,326],{"class":325},[149,834,835],{"class":309}," solid",[149,837,838],{"class":309}," #999",[149,840,841],{"class":155},";\n",[149,843,844],{"class":151,"line":235},[149,845,355],{"class":155},[83,847],{"style":85,"src":848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[24,850,89],{},[42,852,853,856,859,862],{},[45,854,855],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[45,857,858],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[45,860,861],{},"属性选择器也可以选择出来自定义的属性",[45,863,864,867],{},[31,865,866],{},"注意："," 类选择器、属性选择器、伪类选择器，权重为 10",[120,869,871],{"id":870},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[83,873],{"style":85,"src":874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[125,876,877],{},[45,878,879],{},"fist-child",[140,881,883],{"className":286,"code":882,"language":288,"meta":145,"style":145},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[48,884,885,890,905,926,944],{"__ignoreMap":145},[149,886,887],{"class":151,"line":152},[149,888,889],{"class":295},"\u002F* 属性选择器 *\u002F\n",[149,891,892,894,896,898,900,902],{"class":151,"line":193},[149,893,504],{"class":159},[149,895,810],{"class":155},[149,897,813],{"class":162},[149,899,166],{"class":325},[149,901,512],{"class":169},[149,903,904],{"class":155},"] { }\n",[149,906,907,909,911,914,917,920,923],{"class":151,"line":235},[149,908,504],{"class":159},[149,910,810],{"class":155},[149,912,913],{"class":162},"class",[149,915,916],{"class":325},"^=",[149,918,919],{"class":169},"\"icon\"",[149,921,922],{"class":155},"] { }  ",[149,924,925],{"class":295},"\u002F* 以 icon 开头 *\u002F\n",[149,927,928,930,932,934,937,939,941],{"class":151,"line":340},[149,929,504],{"class":159},[149,931,810],{"class":155},[149,933,913],{"class":162},[149,935,936],{"class":325},"$=",[149,938,919],{"class":169},[149,940,922],{"class":155},[149,942,943],{"class":295},"\u002F* 以 icon 结尾 *\u002F\n",[149,945,946,948,950,952,955,957,959],{"class":151,"line":346},[149,947,504],{"class":159},[149,949,810],{"class":155},[149,951,913],{"class":162},[149,953,954],{"class":325},"*=",[149,956,919],{"class":169},[149,958,922],{"class":155},[149,960,961],{"class":295},"\u002F* 包含 icon *\u002F\n",[24,963,964],{},"ul的第一个儿子文本为红色",[24,966,967],{},"一定要在冒号前加空格，不然就是选中所有的了",[140,969,971],{"className":286,"code":970,"language":288,"meta":145,"style":145},".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",[48,972,973,980,992,996,1001,1006,1019,1033,1052,1070,1088],{"__ignoreMap":145},[149,974,975,978],{"class":151,"line":152},[149,976,977],{"class":162},".center",[149,979,304],{"class":155},[149,981,982,985,987,990],{"class":151,"line":193},[149,983,984],{"class":309},"  color",[149,986,313],{"class":155},[149,988,989],{"class":309},"red",[149,991,841],{"class":155},[149,993,994],{"class":151,"line":235},[149,995,355],{"class":155},[149,997,998],{"class":151,"line":340},[149,999,1000],{"class":155},"```Css\n",[149,1002,1003],{"class":151,"line":346},[149,1004,1005],{"class":295},"\u002F* 结构伪类选择器 *\u002F\n",[149,1007,1008,1010,1013,1016],{"class":151,"line":352},[149,1009,45],{"class":159},[149,1011,1012],{"class":162},":first-child",[149,1014,1015],{"class":155}," { }           ",[149,1017,1018],{"class":295},"\u002F* 第一个 *\u002F\n",[149,1020,1022,1024,1027,1030],{"class":151,"line":1021},7,[149,1023,45],{"class":159},[149,1025,1026],{"class":162},":last-child",[149,1028,1029],{"class":155}," { }            ",[149,1031,1032],{"class":295},"\u002F* 最后一个 *\u002F\n",[149,1034,1036,1038,1041,1043,1046,1049],{"class":151,"line":1035},8,[149,1037,45],{"class":159},[149,1039,1040],{"class":162},":nth-child",[149,1042,319],{"class":155},[149,1044,1045],{"class":309},"2",[149,1047,1048],{"class":155},") { }          ",[149,1050,1051],{"class":295},"\u002F* 第2个 *\u002F\n",[149,1053,1055,1057,1059,1061,1064,1067],{"class":151,"line":1054},9,[149,1056,45],{"class":159},[149,1058,1040],{"class":162},[149,1060,319],{"class":155},[149,1062,1063],{"class":309},"2n",[149,1065,1066],{"class":155},") { }         ",[149,1068,1069],{"class":295},"\u002F* 偶数 *\u002F\n",[149,1071,1073,1075,1077,1079,1082,1085],{"class":151,"line":1072},10,[149,1074,45],{"class":159},[149,1076,1040],{"class":162},[149,1078,319],{"class":155},[149,1080,1081],{"class":309},"2n+1",[149,1083,1084],{"class":155},") { }       ",[149,1086,1087],{"class":295},"\u002F* 奇数 *\u002F\n",[149,1089,1091,1093,1095,1097,1100,1102],{"class":151,"line":1090},11,[149,1092,45],{"class":159},[149,1094,1040],{"class":162},[149,1096,319],{"class":155},[149,1098,1099],{"class":309},"-n+3",[149,1101,1084],{"class":155},[149,1103,1104],{"class":295},"\u002F* 前3个 *\u002F\n",[301,1106,1109],{"className":1107},[1108],"example","\n  示例内容\n",[24,1111,1112],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[42,1114,1115],{},[45,1116,1117,1120],{},[48,1118,1119],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[24,1122,1123],{},"也就是说它选择的是熊大",[125,1125,1126],{"start":352},[45,1127,1128],{},"权重",[140,1130,1132],{"className":286,"code":1131,"language":288,"meta":145,"style":145},"\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",[48,1133,1134,1138,1148,1158,1172,1186,1200],{"__ignoreMap":145},[149,1135,1136],{"class":151,"line":152},[149,1137,1005],{"class":295},[149,1139,1140,1142,1144,1146],{"class":151,"line":193},[149,1141,45],{"class":159},[149,1143,1012],{"class":162},[149,1145,1015],{"class":155},[149,1147,1018],{"class":295},[149,1149,1150,1152,1154,1156],{"class":151,"line":235},[149,1151,45],{"class":159},[149,1153,1026],{"class":162},[149,1155,1029],{"class":155},[149,1157,1032],{"class":295},[149,1159,1160,1162,1164,1166,1168,1170],{"class":151,"line":340},[149,1161,45],{"class":159},[149,1163,1040],{"class":162},[149,1165,319],{"class":155},[149,1167,1045],{"class":309},[149,1169,1048],{"class":155},[149,1171,1051],{"class":295},[149,1173,1174,1176,1178,1180,1182,1184],{"class":151,"line":346},[149,1175,45],{"class":159},[149,1177,1040],{"class":162},[149,1179,319],{"class":155},[149,1181,1063],{"class":309},[149,1183,1066],{"class":155},[149,1185,1069],{"class":295},[149,1187,1188,1190,1192,1194,1196,1198],{"class":151,"line":352},[149,1189,45],{"class":159},[149,1191,1040],{"class":162},[149,1193,319],{"class":155},[149,1195,1081],{"class":309},[149,1197,1084],{"class":155},[149,1199,1087],{"class":295},[149,1201,1202,1204,1206,1208,1210,1212],{"class":151,"line":1021},[149,1203,45],{"class":159},[149,1205,1040],{"class":162},[149,1207,319],{"class":155},[149,1209,1099],{"class":309},[149,1211,1084],{"class":155},[149,1213,1104],{"class":295},[24,1215,1216],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[120,1218,1220],{"id":1219},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[24,1222,1223],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[83,1225],{"style":85,"src":1226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[125,1228,1229],{},[45,1230,89],{},[42,1232,1233,1236,1239,1242,1245,1248],{},[45,1234,1235],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[45,1237,1238],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[45,1240,1241],{},"语法： element::before {}",[45,1243,1244],{},"before 和 after 必须有 content 属性",[45,1246,1247],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[45,1249,1250],{},"伪元素选择器和标签选择器一样，权重为 1",[125,1252,1253],{"start":193},[45,1254,1255],{},"实例",[140,1257,1258],{"className":286,"code":1131,"language":288,"meta":145,"style":145},[48,1259,1260,1264,1274,1284,1298,1312,1326],{"__ignoreMap":145},[149,1261,1262],{"class":151,"line":152},[149,1263,1005],{"class":295},[149,1265,1266,1268,1270,1272],{"class":151,"line":193},[149,1267,45],{"class":159},[149,1269,1012],{"class":162},[149,1271,1015],{"class":155},[149,1273,1018],{"class":295},[149,1275,1276,1278,1280,1282],{"class":151,"line":235},[149,1277,45],{"class":159},[149,1279,1026],{"class":162},[149,1281,1029],{"class":155},[149,1283,1032],{"class":295},[149,1285,1286,1288,1290,1292,1294,1296],{"class":151,"line":340},[149,1287,45],{"class":159},[149,1289,1040],{"class":162},[149,1291,319],{"class":155},[149,1293,1045],{"class":309},[149,1295,1048],{"class":155},[149,1297,1051],{"class":295},[149,1299,1300,1302,1304,1306,1308,1310],{"class":151,"line":346},[149,1301,45],{"class":159},[149,1303,1040],{"class":162},[149,1305,319],{"class":155},[149,1307,1063],{"class":309},[149,1309,1066],{"class":155},[149,1311,1069],{"class":295},[149,1313,1314,1316,1318,1320,1322,1324],{"class":151,"line":352},[149,1315,45],{"class":159},[149,1317,1040],{"class":162},[149,1319,319],{"class":155},[149,1321,1081],{"class":309},[149,1323,1084],{"class":155},[149,1325,1087],{"class":295},[149,1327,1328,1330,1332,1334,1336,1338],{"class":151,"line":1021},[149,1329,45],{"class":159},[149,1331,1040],{"class":162},[149,1333,319],{"class":155},[149,1335,1099],{"class":309},[149,1337,1084],{"class":155},[149,1339,1104],{"class":295},[83,1341],{"style":85,"src":1342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[125,1344,1345],{"start":235},[45,1346,1347],{},"使用场景1",[83,1349],{"style":85,"src":1350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[24,1352,1353],{},"不需要再加盒子来整红色那部分了",[140,1355,1357],{"className":286,"code":1356,"language":288,"meta":145,"style":145},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[48,1358,1359,1364,1373,1385,1397,1401,1410,1421,1432],{"__ignoreMap":145},[149,1360,1361],{"class":151,"line":152},[149,1362,1363],{"class":295},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[149,1365,1366,1368,1371],{"class":151,"line":193},[149,1367,301],{"class":159},[149,1369,1370],{"class":162},"::before",[149,1372,304],{"class":155},[149,1374,1375,1378,1380,1383],{"class":151,"line":235},[149,1376,1377],{"class":309},"  content",[149,1379,313],{"class":155},[149,1381,1382],{"class":169},"\"\"",[149,1384,841],{"class":155},[149,1386,1387,1390,1392,1395],{"class":151,"line":340},[149,1388,1389],{"class":309},"  display",[149,1391,313],{"class":155},[149,1393,1394],{"class":309},"block",[149,1396,841],{"class":155},[149,1398,1399],{"class":151,"line":346},[149,1400,355],{"class":155},[149,1402,1403,1405,1408],{"class":151,"line":352},[149,1404,301],{"class":159},[149,1406,1407],{"class":162},"::after",[149,1409,304],{"class":155},[149,1411,1412,1414,1416,1419],{"class":151,"line":1021},[149,1413,1377],{"class":309},[149,1415,313],{"class":155},[149,1417,1418],{"class":169},"\"→\"",[149,1420,841],{"class":155},[149,1422,1423,1425,1427,1430],{"class":151,"line":1035},[149,1424,984],{"class":309},[149,1426,313],{"class":155},[149,1428,1429],{"class":309},"#999",[149,1431,841],{"class":155},[149,1433,1434],{"class":151,"line":1054},[149,1435,355],{"class":155},[83,1437],{"style":85,"src":1438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[24,1440,1441],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[83,1443],{"style":85,"src":1444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[24,1446,1447],{},"但是在引用时需要先转义一下",[24,1449,1450],{},"content='\\e930'",[125,1452,1453],{"start":340},[45,1454,1455],{},"使用场景2",[24,1457,1458],{},"仿土豆效果",[24,1460,1461],{},"通过使用伪元素选择器可以减少body中盒子的数量",[140,1463,1464],{"className":286,"code":1356,"language":288,"meta":145,"style":145},[48,1465,1466,1470,1478,1488,1498,1502,1510,1520,1530],{"__ignoreMap":145},[149,1467,1468],{"class":151,"line":152},[149,1469,1363],{"class":295},[149,1471,1472,1474,1476],{"class":151,"line":193},[149,1473,301],{"class":159},[149,1475,1370],{"class":162},[149,1477,304],{"class":155},[149,1479,1480,1482,1484,1486],{"class":151,"line":235},[149,1481,1377],{"class":309},[149,1483,313],{"class":155},[149,1485,1382],{"class":169},[149,1487,841],{"class":155},[149,1489,1490,1492,1494,1496],{"class":151,"line":340},[149,1491,1389],{"class":309},[149,1493,313],{"class":155},[149,1495,1394],{"class":309},[149,1497,841],{"class":155},[149,1499,1500],{"class":151,"line":346},[149,1501,355],{"class":155},[149,1503,1504,1506,1508],{"class":151,"line":352},[149,1505,301],{"class":159},[149,1507,1407],{"class":162},[149,1509,304],{"class":155},[149,1511,1512,1514,1516,1518],{"class":151,"line":1021},[149,1513,1377],{"class":309},[149,1515,313],{"class":155},[149,1517,1418],{"class":169},[149,1519,841],{"class":155},[149,1521,1522,1524,1526,1528],{"class":151,"line":1035},[149,1523,984],{"class":309},[149,1525,313],{"class":155},[149,1527,1429],{"class":309},[149,1529,841],{"class":155},[149,1531,1532],{"class":151,"line":1054},[149,1533,355],{"class":155},[83,1535],{"style":85,"src":1536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[125,1538,1539],{"start":346},[45,1540,1541],{},"使用场景3",[24,1543,1544],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[140,1546,1548],{"className":286,"code":1547,"language":288,"meta":145,"style":145},".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",[48,1549,1550,1557,1569,1573,1577,1581,1589,1599,1609,1613,1621,1631,1642],{"__ignoreMap":145},[149,1551,1552,1555],{"class":151,"line":152},[149,1553,1554],{"class":162},".box",[149,1556,304],{"class":155},[149,1558,1559,1562,1564,1567],{"class":151,"line":193},[149,1560,1561],{"class":309},"  float",[149,1563,313],{"class":155},[149,1565,1566],{"class":309},"left",[149,1568,841],{"class":155},[149,1570,1571],{"class":151,"line":235},[149,1572,355],{"class":155},[149,1574,1575],{"class":151,"line":340},[149,1576,1000],{"class":155},[149,1578,1579],{"class":151,"line":346},[149,1580,1363],{"class":295},[149,1582,1583,1585,1587],{"class":151,"line":352},[149,1584,301],{"class":159},[149,1586,1370],{"class":162},[149,1588,304],{"class":155},[149,1590,1591,1593,1595,1597],{"class":151,"line":1021},[149,1592,1377],{"class":309},[149,1594,313],{"class":155},[149,1596,1382],{"class":169},[149,1598,841],{"class":155},[149,1600,1601,1603,1605,1607],{"class":151,"line":1035},[149,1602,1389],{"class":309},[149,1604,313],{"class":155},[149,1606,1394],{"class":309},[149,1608,841],{"class":155},[149,1610,1611],{"class":151,"line":1054},[149,1612,355],{"class":155},[149,1614,1615,1617,1619],{"class":151,"line":1072},[149,1616,301],{"class":159},[149,1618,1407],{"class":162},[149,1620,304],{"class":155},[149,1622,1623,1625,1627,1629],{"class":151,"line":1090},[149,1624,1377],{"class":309},[149,1626,313],{"class":155},[149,1628,1418],{"class":169},[149,1630,841],{"class":155},[149,1632,1634,1636,1638,1640],{"class":151,"line":1633},12,[149,1635,984],{"class":309},[149,1637,313],{"class":155},[149,1639,1429],{"class":309},[149,1641,841],{"class":155},[149,1643,1645],{"class":151,"line":1644},13,[149,1646,355],{"class":155},[24,1648,1649],{},"div {\nmargin: 0 auto;\n}",[140,1651,1656],{"className":1652,"code":1654,"language":1655},[1653],"language-text","\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","text",[48,1657,1654],{"__ignoreMap":145},[24,1659,1660],{},"如果想让多个元素都发生变化",[24,1662,1663],{},"不能如下操作：",[24,1665,1666],{},"transition: width 2s ease 0.5s;",[24,1668,1669],{},"transition: height 2s ease 0.5s;不对！！！",[24,1671,1672],{},"上方会样式冲突，导致不显示任何过渡效果",[24,1674,1675],{},"使用如下：加逗号隔开",[24,1677,1678],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[24,1680,1681],{},"transition all 2s ease;",[19,1683,1685],{"id":1684},"_1426-过渡练习","14.2.6 过渡练习",[125,1687,1688],{},[45,1689,1690],{},"进度条",[83,1692],{"style":85,"src":1693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[140,1695,1697],{"className":286,"code":1696,"language":288,"meta":145,"style":145},"div {\n  transition: all 0.3s ease;\n}\n",[48,1698,1699,1705,1726],{"__ignoreMap":145},[149,1700,1701,1703],{"class":151,"line":152},[149,1702,301],{"class":159},[149,1704,304],{"class":155},[149,1706,1707,1710,1712,1715,1718,1721,1724],{"class":151,"line":193},[149,1708,1709],{"class":309},"  transition",[149,1711,313],{"class":155},[149,1713,1714],{"class":309},"all",[149,1716,1717],{"class":309}," 0.3",[149,1719,1720],{"class":325},"s",[149,1722,1723],{"class":309}," ease",[149,1725,841],{"class":155},[149,1727,1728],{"class":151,"line":235},[149,1729,355],{"class":155},[125,1731,1732],{"start":193},[45,1733,1734],{},"小米logo",[24,1736,1737],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[140,1739,1741],{"className":286,"code":1740,"language":288,"meta":145,"style":145},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[48,1742,1743,1748,1754,1770,1775],{"__ignoreMap":145},[149,1744,1745],{"class":151,"line":152},[149,1746,1747],{"class":295},"\u002F* CSS3 过渡 *\u002F\n",[149,1749,1750,1752],{"class":151,"line":193},[149,1751,301],{"class":159},[149,1753,304],{"class":155},[149,1755,1756,1758,1760,1762,1764,1766,1768],{"class":151,"line":235},[149,1757,1709],{"class":309},[149,1759,313],{"class":155},[149,1761,1714],{"class":309},[149,1763,1717],{"class":309},[149,1765,1720],{"class":325},[149,1767,1723],{"class":309},[149,1769,841],{"class":155},[149,1771,1772],{"class":151,"line":340},[149,1773,1774],{"class":295},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[149,1776,1777],{"class":151,"line":346},[149,1778,355],{"class":155},[24,1780,1781],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1783,1784,1785],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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":145,"searchDepth":193,"depth":193,"links":1787},[1788,1793],{"id":16,"depth":193,"text":17,"children":1789},[1790,1791,1792],{"id":21,"depth":235,"text":22},{"id":106,"depth":235,"text":107},{"id":484,"depth":235,"text":485},{"id":786,"depth":193,"text":787,"children":1794},[1795,1796],{"id":790,"depth":235,"text":791},{"id":1684,"depth":235,"text":1685},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":5,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",[1806,6880,7986,9405,12393,13744,15232,16321,25080,25092,25690,25716,25840,26081,26146,26164,26177,26224,26348,26517,26716,26896,27101,27237,27332,27369,27382,27692,28433,29141,29162,30179,31810,31961,31974,31986,32287,52099,52114,52131,52164,55028,78360,94503,94524,94637,94758,95528,96191,96552,96590,96696,96796,96839,96865,96926,98580,98681,98706,99197,99697,100777,101060,101802,102304,102316,104332,105995,107498,109196,111113,113032,115054,118524,118956,119419,120168,123112,123460,123482,123838,127145,127157,127560,127583,127730,127897,128101,128400,128956,129611,131540,133135,133784,135278,136704,137938,139406,141158,143568,143684,144619,144830,145715,146950,147178,147191,148346,150758,153126,156447,158924,160568,162345,164358,167410,169590,172117,174311],{"id":1807,"title":1808,"body":1809,"description":145,"extension":1798,"meta":6875,"navigation":1800,"path":6876,"seo":6877,"stem":6878,"__hash__":6879},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1810,"toc":6847},[1811,1814,1818,1821,1825,1836,1840,1844,1847,1850,1853,1856,1859,1886,1890,1893,1896,1899,1901,1950,1954,1972,1974,1988,1991,1999,2002,2858,2865,2881,2885,2971,2975,2981,3066,3070,3108,3112,3176,3180,3184,3190,3201,3205,3210,3214,3219,3223,3228,3232,3236,3241,3507,3512,3650,3655,3911,3914,3922,3926,3931,4034,4037,4343,4352,4452,4455,4458,4461,4464,4724,4729,4869,4872,5051,5054,5182,5185,5337,5341,5346,5349,5360,5368,5371,5478,5482,5486,5491,5541,5546,5551,5575,5580,5633,5636,5641,5818,5823,6108,6113,6510,6514,6519,6576,6581,6589,6592,6732,6735,6844],[10,1812,1808],{"id":1813},"_1基础入门",[14,1815,1817],{"id":1816},"_11注释","1.1注释",[24,1819,1820],{},"\u002F\u002F或者\u002F* *\u002F",[14,1822,1824],{"id":1823},"_12命名","1.2命名",[125,1826,1827,1830,1833],{},[45,1828,1829],{},"字母数字下划线",[45,1831,1832],{},"开头必须是字母或_",[45,1834,1835],{},"不能使用关键词",[14,1837,1839],{"id":1838},"_13数据类型","1.3数据类型",[19,1841,1843],{"id":1842},"_131整形","1.3.1整形",[24,1845,1846],{},"short 短整形 2",[24,1848,1849],{},"int 整形 4",[24,1851,1852],{},"long 长整形 win4 linux32位4 linux64位8",[24,1854,1855],{},"long long 长长整形 8",[24,1857,1858],{},"利用sizeof可以求数据类型占用的内存空间大小",[140,1860,1864],{"className":1861,"code":1862,"language":1863,"meta":145,"style":145},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[48,1865,1866,1879],{"__ignoreMap":145},[149,1867,1868,1871,1873,1876],{"class":151,"line":152},[149,1869,1870],{"class":325},"sizeof",[149,1872,319],{"class":155},[149,1874,1875],{"class":325},"int",[149,1877,1878],{"class":155},")\n",[149,1880,1881,1883],{"class":151,"line":193},[149,1882,1870],{"class":325},[149,1884,1885],{"class":155},"(num)\n",[19,1887,1889],{"id":1888},"_132浮点型","1.3.2浮点型",[24,1891,1892],{},"float 单精度 4节 7位有效数字",[24,1894,1895],{},"double 双精度 8节 15-16有效数字",[24,1897,1898],{},"默认情况下，输出一个小数，会显示6位有效数字",[24,1900,89],{},[140,1902,1904],{"className":1861,"code":1903,"language":1863,"meta":145,"style":145},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[48,1905,1906,1928],{"__ignoreMap":145},[149,1907,1908,1911,1914,1916,1919,1922,1925],{"class":151,"line":152},[149,1909,1910],{"class":325},"float",[149,1912,1913],{"class":155}," f1",[149,1915,166],{"class":325},[149,1917,1918],{"class":309},"3.14",[149,1920,1921],{"class":325},"f",[149,1923,1924],{"class":155},";",[149,1926,1927],{"class":295}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[149,1929,1930,1932,1935,1937,1940,1943,1945,1947],{"class":151,"line":193},[149,1931,1910],{"class":325},[149,1933,1934],{"class":155}," f2",[149,1936,166],{"class":325},[149,1938,1939],{"class":309},"3",[149,1941,1942],{"class":325},"e",[149,1944,1045],{"class":309},[149,1946,1924],{"class":155},[149,1948,1949],{"class":295}," \u002F\u002F科学记数法\n",[19,1951,1953],{"id":1952},"_133字符型","1.3.3字符型",[140,1955,1957],{"className":1861,"code":1956,"language":1863,"meta":145,"style":145},"char ch='a'\n",[48,1958,1959],{"__ignoreMap":145},[149,1960,1961,1964,1967,1969],{"class":151,"line":152},[149,1962,1963],{"class":325},"char",[149,1965,1966],{"class":155}," ch",[149,1968,166],{"class":325},[149,1970,1971],{"class":169},"'a'\n",[24,1973,89],{},[125,1975,1976,1979,1982,1985],{},[45,1977,1978],{},"在显示字符型变量时，只能单引号，双引号x",[45,1980,1981],{},"单引号内只能一个字符，不能字符串",[45,1983,1984],{},"c和c++字符型变量只占用一个字符",[45,1986,1987],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[24,1989,1990],{},"ASCII码大致由以下两部分组成：",[125,1992,1993,1996],{},[45,1994,1995],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[45,1997,1998],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[24,2000,2001],{},"ASCII码表格：",[2003,2004,2005,2048],"table",{},[2006,2007,2008],"thead",{},[2009,2010,2011,2018,2023,2027,2032,2036,2040,2044],"tr",{},[2012,2013,2014,2017],"th",{},[31,2015,2016],{},"ASCII","值",[2012,2019,2020],{},[31,2021,2022],{},"控制字符",[2012,2024,2025,2017],{},[31,2026,2016],{},[2012,2028,2029],{},[31,2030,2031],{},"字符",[2012,2033,2034,2017],{},[31,2035,2016],{},[2012,2037,2038],{},[31,2039,2031],{},[2012,2041,2042,2017],{},[31,2043,2016],{},[2012,2045,2046],{},[31,2047,2031],{},[2049,2050,2051,2078,2103,2128,2153,2178,2203,2228,2254,2279,2305,2331,2357,2382,2408,2434,2460,2484,2509,2533,2557,2582,2607,2632,2657,2682,2707,2733,2757,2781,2806,2832],"tbody",{},[2009,2052,2053,2057,2060,2063,2066,2069,2072,2075],{},[2054,2055,2056],"td",{},"0",[2054,2058,2059],{},"NUT",[2054,2061,2062],{},"32",[2054,2064,2065],{},"(space)",[2054,2067,2068],{},"64",[2054,2070,2071],{},"@",[2054,2073,2074],{},"96",[2054,2076,2077],{},"、",[2009,2079,2080,2082,2085,2088,2091,2094,2097,2100],{},[2054,2081,830],{},[2054,2083,2084],{},"SOH",[2054,2086,2087],{},"33",[2054,2089,2090],{},"!",[2054,2092,2093],{},"65",[2054,2095,2096],{},"A",[2054,2098,2099],{},"97",[2054,2101,2102],{},"a",[2009,2104,2105,2107,2110,2113,2116,2119,2122,2125],{},[2054,2106,1045],{},[2054,2108,2109],{},"STX",[2054,2111,2112],{},"34",[2054,2114,2115],{},"\"",[2054,2117,2118],{},"66",[2054,2120,2121],{},"B",[2054,2123,2124],{},"98",[2054,2126,2127],{},"b",[2009,2129,2130,2132,2135,2138,2141,2144,2147,2150],{},[2054,2131,1939],{},[2054,2133,2134],{},"ETX",[2054,2136,2137],{},"35",[2054,2139,2140],{},"#",[2054,2142,2143],{},"67",[2054,2145,2146],{},"C",[2054,2148,2149],{},"99",[2054,2151,2152],{},"c",[2009,2154,2155,2158,2161,2164,2167,2170,2173,2175],{},[2054,2156,2157],{},"4",[2054,2159,2160],{},"EOT",[2054,2162,2163],{},"36",[2054,2165,2166],{},"$",[2054,2168,2169],{},"68",[2054,2171,2172],{},"D",[2054,2174,322],{},[2054,2176,2177],{},"d",[2009,2179,2180,2183,2186,2189,2192,2195,2198,2201],{},[2054,2181,2182],{},"5",[2054,2184,2185],{},"ENQ",[2054,2187,2188],{},"37",[2054,2190,2191],{},"%",[2054,2193,2194],{},"69",[2054,2196,2197],{},"E",[2054,2199,2200],{},"101",[2054,2202,1942],{},[2009,2204,2205,2208,2211,2214,2217,2220,2223,2226],{},[2054,2206,2207],{},"6",[2054,2209,2210],{},"ACK",[2054,2212,2213],{},"38",[2054,2215,2216],{},"&",[2054,2218,2219],{},"70",[2054,2221,2222],{},"F",[2054,2224,2225],{},"102",[2054,2227,1921],{},[2009,2229,2230,2233,2236,2239,2242,2245,2248,2251],{},[2054,2231,2232],{},"7",[2054,2234,2235],{},"BEL",[2054,2237,2238],{},"39",[2054,2240,2241],{},",",[2054,2243,2244],{},"71",[2054,2246,2247],{},"G",[2054,2249,2250],{},"103",[2054,2252,2253],{},"g",[2009,2255,2256,2259,2262,2265,2267,2270,2273,2276],{},[2054,2257,2258],{},"8",[2054,2260,2261],{},"BS",[2054,2263,2264],{},"40",[2054,2266,319],{},[2054,2268,2269],{},"72",[2054,2271,2272],{},"H",[2054,2274,2275],{},"104",[2054,2277,2278],{},"h",[2009,2280,2281,2284,2287,2290,2293,2296,2299,2302],{},[2054,2282,2283],{},"9",[2054,2285,2286],{},"HT",[2054,2288,2289],{},"41",[2054,2291,2292],{},")",[2054,2294,2295],{},"73",[2054,2297,2298],{},"I",[2054,2300,2301],{},"105",[2054,2303,2304],{},"i",[2009,2306,2307,2310,2313,2316,2319,2322,2325,2328],{},[2054,2308,2309],{},"10",[2054,2311,2312],{},"LF",[2054,2314,2315],{},"42",[2054,2317,2318],{},"*",[2054,2320,2321],{},"74",[2054,2323,2324],{},"J",[2054,2326,2327],{},"106",[2054,2329,2330],{},"j",[2009,2332,2333,2336,2339,2342,2345,2348,2351,2354],{},[2054,2334,2335],{},"11",[2054,2337,2338],{},"VT",[2054,2340,2341],{},"43",[2054,2343,2344],{},"+",[2054,2346,2347],{},"75",[2054,2349,2350],{},"K",[2054,2352,2353],{},"107",[2054,2355,2356],{},"k",[2009,2358,2359,2362,2365,2368,2370,2373,2376,2379],{},[2054,2360,2361],{},"12",[2054,2363,2364],{},"FF",[2054,2366,2367],{},"44",[2054,2369,2241],{},[2054,2371,2372],{},"76",[2054,2374,2375],{},"L",[2054,2377,2378],{},"108",[2054,2380,2381],{},"l",[2009,2383,2384,2387,2390,2393,2396,2399,2402,2405],{},[2054,2385,2386],{},"13",[2054,2388,2389],{},"CR",[2054,2391,2392],{},"45",[2054,2394,2395],{},"-",[2054,2397,2398],{},"77",[2054,2400,2401],{},"M",[2054,2403,2404],{},"109",[2054,2406,2407],{},"m",[2009,2409,2410,2413,2416,2419,2422,2425,2428,2431],{},[2054,2411,2412],{},"14",[2054,2414,2415],{},"SO",[2054,2417,2418],{},"46",[2054,2420,2421],{},".",[2054,2423,2424],{},"78",[2054,2426,2427],{},"N",[2054,2429,2430],{},"110",[2054,2432,2433],{},"n",[2009,2435,2436,2439,2442,2445,2448,2451,2454,2457],{},[2054,2437,2438],{},"15",[2054,2440,2441],{},"SI",[2054,2443,2444],{},"47",[2054,2446,2447],{},"\u002F",[2054,2449,2450],{},"79",[2054,2452,2453],{},"O",[2054,2455,2456],{},"111",[2054,2458,2459],{},"o",[2009,2461,2462,2465,2468,2471,2473,2476,2479,2482],{},[2054,2463,2464],{},"16",[2054,2466,2467],{},"DLE",[2054,2469,2470],{},"48",[2054,2472,2056],{},[2054,2474,2475],{},"80",[2054,2477,2478],{},"P",[2054,2480,2481],{},"112",[2054,2483,24],{},[2009,2485,2486,2489,2492,2495,2497,2500,2503,2506],{},[2054,2487,2488],{},"17",[2054,2490,2491],{},"DCI",[2054,2493,2494],{},"49",[2054,2496,830],{},[2054,2498,2499],{},"81",[2054,2501,2502],{},"Q",[2054,2504,2505],{},"113",[2054,2507,2508],{},"q",[2009,2510,2511,2514,2517,2519,2521,2524,2527,2530],{},[2054,2512,2513],{},"18",[2054,2515,2516],{},"DC2",[2054,2518,332],{},[2054,2520,1045],{},[2054,2522,2523],{},"82",[2054,2525,2526],{},"R",[2054,2528,2529],{},"114",[2054,2531,2532],{},"r",[2009,2534,2535,2538,2541,2544,2546,2549,2552,2555],{},[2054,2536,2537],{},"19",[2054,2539,2540],{},"DC3",[2054,2542,2543],{},"51",[2054,2545,1939],{},[2054,2547,2548],{},"83",[2054,2550,2551],{},"S",[2054,2553,2554],{},"115",[2054,2556,1720],{},[2009,2558,2559,2562,2565,2568,2570,2573,2576,2579],{},[2054,2560,2561],{},"20",[2054,2563,2564],{},"DC4",[2054,2566,2567],{},"52",[2054,2569,2157],{},[2054,2571,2572],{},"84",[2054,2574,2575],{},"T",[2054,2577,2578],{},"116",[2054,2580,2581],{},"t",[2009,2583,2584,2587,2590,2593,2595,2598,2601,2604],{},[2054,2585,2586],{},"21",[2054,2588,2589],{},"NAK",[2054,2591,2592],{},"53",[2054,2594,2182],{},[2054,2596,2597],{},"85",[2054,2599,2600],{},"U",[2054,2602,2603],{},"117",[2054,2605,2606],{},"u",[2009,2608,2609,2612,2615,2618,2620,2623,2626,2629],{},[2054,2610,2611],{},"22",[2054,2613,2614],{},"SYN",[2054,2616,2617],{},"54",[2054,2619,2207],{},[2054,2621,2622],{},"86",[2054,2624,2625],{},"V",[2054,2627,2628],{},"118",[2054,2630,2631],{},"v",[2009,2633,2634,2637,2640,2643,2645,2648,2651,2654],{},[2054,2635,2636],{},"23",[2054,2638,2639],{},"TB",[2054,2641,2642],{},"55",[2054,2644,2232],{},[2054,2646,2647],{},"87",[2054,2649,2650],{},"W",[2054,2652,2653],{},"119",[2054,2655,2656],{},"w",[2009,2658,2659,2662,2665,2668,2670,2673,2676,2679],{},[2054,2660,2661],{},"24",[2054,2663,2664],{},"CAN",[2054,2666,2667],{},"56",[2054,2669,2258],{},[2054,2671,2672],{},"88",[2054,2674,2675],{},"X",[2054,2677,2678],{},"120",[2054,2680,2681],{},"x",[2009,2683,2684,2687,2690,2693,2695,2698,2701,2704],{},[2054,2685,2686],{},"25",[2054,2688,2689],{},"EM",[2054,2691,2692],{},"57",[2054,2694,2283],{},[2054,2696,2697],{},"89",[2054,2699,2700],{},"Y",[2054,2702,2703],{},"121",[2054,2705,2706],{},"y",[2009,2708,2709,2712,2715,2718,2721,2724,2727,2730],{},[2054,2710,2711],{},"26",[2054,2713,2714],{},"SUB",[2054,2716,2717],{},"58",[2054,2719,2720],{},":",[2054,2722,2723],{},"90",[2054,2725,2726],{},"Z",[2054,2728,2729],{},"122",[2054,2731,2732],{},"z",[2009,2734,2735,2738,2741,2744,2746,2749,2751,2754],{},[2054,2736,2737],{},"27",[2054,2739,2740],{},"ESC",[2054,2742,2743],{},"59",[2054,2745,1924],{},[2054,2747,2748],{},"91",[2054,2750,810],{},[2054,2752,2753],{},"123",[2054,2755,2756],{},"{",[2009,2758,2759,2762,2765,2768,2770,2773,2775,2778],{},[2054,2760,2761],{},"28",[2054,2763,2764],{},"FS",[2054,2766,2767],{},"60",[2054,2769,156],{},[2054,2771,2772],{},"92",[2054,2774,2447],{},[2054,2776,2777],{},"124",[2054,2779,2780],{},"|",[2009,2782,2783,2786,2789,2792,2794,2797,2800,2803],{},[2054,2784,2785],{},"29",[2054,2787,2788],{},"GS",[2054,2790,2791],{},"61",[2054,2793,166],{},[2054,2795,2796],{},"93",[2054,2798,2799],{},"]",[2054,2801,2802],{},"125",[2054,2804,2805],{},"}",[2009,2807,2808,2811,2814,2817,2820,2823,2826,2829],{},[2054,2809,2810],{},"30",[2054,2812,2813],{},"RS",[2054,2815,2816],{},"62",[2054,2818,2819],{},">",[2054,2821,2822],{},"94",[2054,2824,2825],{},"^",[2054,2827,2828],{},"126",[2054,2830,2831],{},"`",[2009,2833,2834,2837,2840,2843,2846,2849,2852,2855],{},[2054,2835,2836],{},"31",[2054,2838,2839],{},"US",[2054,2841,2842],{},"63",[2054,2844,2845],{},"?",[2054,2847,2848],{},"95",[2054,2850,2851],{},"_",[2054,2853,2854],{},"127",[2054,2856,2857],{},"DEL",[24,2859,2860,2861,2864],{},"ASCII 码大致由以下",[31,2862,2863],{},"两部分组","成：",[42,2866,2867,2874],{},[45,2868,2869,2870,2873],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[31,2871,2872],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[45,2875,2876,2877,2880],{},"ASCII 打印字符：数字 ",[31,2878,2879],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[19,2882,2884],{"id":2883},"_134转义字符","1.3.4转义字符",[140,2886,2888],{"className":1861,"code":2887,"language":1863,"meta":145,"style":145},"\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",[48,2889,2890,2895,2911,2925,2930,2943,2948],{"__ignoreMap":145},[149,2891,2892],{"class":151,"line":152},[149,2893,2894],{"class":295},"\u002F\u002F换行符\n",[149,2896,2897,2900,2903,2906,2908],{"class":151,"line":193},[149,2898,2899],{"class":155},"cout ",[149,2901,2902],{"class":325},"\u003C\u003C",[149,2904,2905],{"class":169},"\"hello world\u002Fn\"",[149,2907,1924],{"class":155},[149,2909,2910],{"class":295}," \u002F\u002F就等同于如下：\n",[149,2912,2913,2915,2917,2920,2922],{"class":151,"line":235},[149,2914,2899],{"class":155},[149,2916,2902],{"class":325},[149,2918,2919],{"class":169},"\"hello world\"",[149,2921,2902],{"class":325},[149,2923,2924],{"class":155},"endl;\n",[149,2926,2927],{"class":151,"line":340},[149,2928,2929],{"class":295},"\u002F\u002F反斜杠\n",[149,2931,2932,2934,2936,2939,2941],{"class":151,"line":346},[149,2933,2899],{"class":155},[149,2935,2902],{"class":325},[149,2937,2938],{"class":169},"\"\u002F\u002F\"",[149,2940,2902],{"class":325},[149,2942,2924],{"class":155},[149,2944,2945],{"class":151,"line":352},[149,2946,2947],{"class":295},"\u002F\u002F水平制表符\n",[149,2949,2950,2952,2954,2957,2960,2963,2965,2968],{"class":151,"line":1021},[149,2951,2899],{"class":155},[149,2953,2902],{"class":325},[149,2955,2956],{"class":169},"\"aaaa",[149,2958,2959],{"class":309},"\\t",[149,2961,2962],{"class":169},"helloworld\"",[149,2964,2902],{"class":325},[149,2966,2967],{"class":155},"endl;",[149,2969,2970],{"class":295}," \u002F\u002F输出窗口时有对齐效果\n",[19,2972,2974],{"id":2973},"_135字符串型","1.3.5字符串型",[24,2976,2977,2978,2980],{},"char 变量名",[149,2979],{},"=\"字符串值\"",[140,2982,2984],{"className":1861,"code":2983,"language":1863,"meta":145,"style":145},"\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",[48,2985,2986,2991,2996,3001,3006,3019,3032,3037,3042,3053],{"__ignoreMap":145},[149,2987,2988],{"class":151,"line":152},[149,2989,2990],{"class":295},"\u002F\u002Fc风格字符串\n",[149,2992,2993],{"class":151,"line":193},[149,2994,2995],{"class":295},"\u002F\u002F注意事项：\n",[149,2997,2998],{"class":151,"line":235},[149,2999,3000],{"class":295},"\u002F\u002F1.char字符串名[]\n",[149,3002,3003],{"class":151,"line":340},[149,3004,3005],{"class":295},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[149,3007,3008,3010,3013,3015,3017],{"class":151,"line":346},[149,3009,1963],{"class":325},[149,3011,3012],{"class":155}," str[]",[149,3014,166],{"class":325},[149,3016,2919],{"class":169},[149,3018,841],{"class":155},[149,3020,3021,3023,3025,3028,3030],{"class":151,"line":352},[149,3022,2899],{"class":155},[149,3024,2902],{"class":325},[149,3026,3027],{"class":155},"str",[149,3029,2902],{"class":325},[149,3031,2924],{"class":155},[149,3033,3034],{"class":151,"line":1021},[149,3035,3036],{"class":295},"\u002F\u002Fc++风格字符串\n",[149,3038,3039],{"class":151,"line":1035},[149,3040,3041],{"class":295},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[149,3043,3044,3047,3049,3051],{"class":151,"line":1054},[149,3045,3046],{"class":155},"string str2",[149,3048,166],{"class":325},[149,3050,2919],{"class":169},[149,3052,841],{"class":155},[149,3054,3055,3057,3059,3062,3064],{"class":151,"line":1072},[149,3056,2899],{"class":155},[149,3058,2902],{"class":325},[149,3060,3061],{"class":155},"str2",[149,3063,2902],{"class":325},[149,3065,2924],{"class":155},[19,3067,3069],{"id":3068},"_136布尔类型bool","1.3.6布尔类型bool",[140,3071,3073],{"className":1861,"code":3072,"language":1863,"meta":145,"style":145},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[48,3074,3075,3090],{"__ignoreMap":145},[149,3076,3077,3080,3083,3085,3088],{"class":151,"line":152},[149,3078,3079],{"class":325},"bool",[149,3081,3082],{"class":155}," flag",[149,3084,166],{"class":325},[149,3086,3087],{"class":309},"true",[149,3089,841],{"class":155},[149,3091,3092,3095,3098,3101,3103,3105],{"class":151,"line":193},[149,3093,3094],{"class":155},"cout",[149,3096,3097],{"class":325},"\u003C\u003Csizeof",[149,3099,3100],{"class":155},"(flag)",[149,3102,2902],{"class":325},[149,3104,2967],{"class":155},[149,3106,3107],{"class":295}," \u002F\u002F查看布尔占内存空间\n",[14,3109,3111],{"id":3110},"_14键盘输入cin","1.4键盘输入cin",[140,3113,3115],{"className":1861,"code":3114,"language":1863,"meta":145,"style":145},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[48,3116,3117,3130,3147,3158],{"__ignoreMap":145},[149,3118,3119,3121,3124,3126,3128],{"class":151,"line":152},[149,3120,1875],{"class":325},[149,3122,3123],{"class":155}," a",[149,3125,166],{"class":325},[149,3127,2056],{"class":309},[149,3129,841],{"class":155},[149,3131,3132,3134,3136,3139,3141,3143,3145],{"class":151,"line":193},[149,3133,3094],{"class":155},[149,3135,2902],{"class":325},[149,3137,3138],{"class":169},"\"请给整型变量a赋值\"",[149,3140,2902],{"class":325},[149,3142,2102],{"class":155},[149,3144,2902],{"class":325},[149,3146,2924],{"class":155},[149,3148,3149,3152,3155],{"class":151,"line":235},[149,3150,3151],{"class":155},"cin ",[149,3153,3154],{"class":325},">>",[149,3156,3157],{"class":155}," a;\n",[149,3159,3160,3162,3164,3167,3170,3172,3174],{"class":151,"line":340},[149,3161,2899],{"class":155},[149,3163,2902],{"class":325},[149,3165,3166],{"class":169}," \"整型变量a=\"",[149,3168,3169],{"class":325}," \u003C\u003C",[149,3171,2102],{"class":155},[149,3173,2902],{"class":325},[149,3175,2924],{"class":155},[14,3177,3179],{"id":3178},"_15运算符","1.5运算符",[19,3181,3183],{"id":3182},"_151算术运算符","1.5.1算术运算符",[24,3185,3186,3189],{},[83,3187],{"alt":145,"src":3188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[125,3191,3192,3195,3198],{},[45,3193,3194],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[45,3196,3197],{},"两个小数不可以做取模运算",[45,3199,3200],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[19,3202,3204],{"id":3203},"_152赋值运算符","1.5.2赋值运算符",[24,3206,3207],{},[83,3208],{"alt":145,"src":3209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[19,3211,3213],{"id":3212},"_153比较运算符","1.5.3比较运算符",[24,3215,3216],{},[83,3217],{"alt":145,"src":3218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[19,3220,3222],{"id":3221},"_154逻辑运算符","1.5.4逻辑运算符",[24,3224,3225],{},[83,3226],{"alt":145,"src":3227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3229,3231],{"id":3230},"_16程序流程结构","1.6程序流程结构",[19,3233,3235],{"id":3234},"_161选择结构","1.6.1选择结构",[125,3237,3238],{},[45,3239,3240],{},"if语句\n单行、多行、多条件if语句",[140,3242,3244],{"className":1861,"code":3243,"language":1863,"meta":145,"style":145},"\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",[48,3245,3246,3251,3266,3271,3285,3289,3294,3303,3316,3320,3333,3337,3342,3346,3360,3365,3371,3392,3397,3411,3416,3445,3450,3467,3472,3477,3482,3496,3501],{"__ignoreMap":145},[149,3247,3248],{"class":151,"line":152},[149,3249,3250],{"class":295},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[149,3252,3253,3256,3259,3261,3264],{"class":151,"line":193},[149,3254,3255],{"class":325},"if",[149,3257,3258],{"class":155},"(score",[149,3260,2819],{"class":325},[149,3262,3263],{"class":309},"600",[149,3265,1878],{"class":155},[149,3267,3268],{"class":151,"line":235},[149,3269,3270],{"class":155},"{\n",[149,3272,3273,3276,3278,3281,3283],{"class":151,"line":340},[149,3274,3275],{"class":155},"    cout",[149,3277,2902],{"class":325},[149,3279,3280],{"class":169},"'这是单行if语句'",[149,3282,2902],{"class":325},[149,3284,2924],{"class":155},[149,3286,3287],{"class":151,"line":346},[149,3288,355],{"class":155},[149,3290,3291],{"class":151,"line":352},[149,3292,3293],{"class":295},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[149,3295,3296,3298,3300],{"class":151,"line":1021},[149,3297,3151],{"class":155},[149,3299,3154],{"class":325},[149,3301,3302],{"class":155}," score\n",[149,3304,3305,3307,3309,3312,3314],{"class":151,"line":1035},[149,3306,3255],{"class":325},[149,3308,3258],{"class":155},[149,3310,3311],{"class":325},"\u003C=",[149,3313,3263],{"class":309},[149,3315,1878],{"class":155},[149,3317,3318],{"class":151,"line":1054},[149,3319,3270],{"class":155},[149,3321,3322,3324,3326,3329,3331],{"class":151,"line":1072},[149,3323,3275],{"class":155},[149,3325,3154],{"class":325},[149,3327,3328],{"class":169},"\"小于等于600\"",[149,3330,2902],{"class":325},[149,3332,2924],{"class":155},[149,3334,3335],{"class":151,"line":1090},[149,3336,355],{"class":155},[149,3338,3339],{"class":151,"line":1633},[149,3340,3341],{"class":325},"else\n",[149,3343,3344],{"class":151,"line":1644},[149,3345,3270],{"class":155},[149,3347,3349,3351,3353,3356,3358],{"class":151,"line":3348},14,[149,3350,3275],{"class":155},[149,3352,3154],{"class":325},[149,3354,3355],{"class":169},"\"大于600\"",[149,3357,3154],{"class":325},[149,3359,2924],{"class":155},[149,3361,3363],{"class":151,"line":3362},15,[149,3364,355],{"class":155},[149,3366,3368],{"class":151,"line":3367},16,[149,3369,3370],{"class":295},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[149,3372,3374,3376,3379,3381,3383,3386,3388,3390],{"class":151,"line":3373},17,[149,3375,3255],{"class":325},[149,3377,3378],{"class":155}," (",[149,3380,2056],{"class":309},[149,3382,156],{"class":325},[149,3384,3385],{"class":155},"num",[149,3387,156],{"class":325},[149,3389,322],{"class":309},[149,3391,1878],{"class":155},[149,3393,3395],{"class":151,"line":3394},18,[149,3396,3270],{"class":155},[149,3398,3400,3402,3404,3407,3409],{"class":151,"line":3399},19,[149,3401,3275],{"class":155},[149,3403,2902],{"class":325},[149,3405,3406],{"class":169},"\"小于100\"",[149,3408,2902],{"class":325},[149,3410,2924],{"class":155},[149,3412,3414],{"class":151,"line":3413},20,[149,3415,355],{"class":155},[149,3417,3419,3422,3425,3428,3431,3433,3436,3438,3440,3443],{"class":151,"line":3418},21,[149,3420,3421],{"class":325},"else",[149,3423,3424],{"class":325}," if",[149,3426,3427],{"class":155}," (nmu",[149,3429,3430],{"class":325},">=",[149,3432,322],{"class":309},[149,3434,3435],{"class":325},"&&",[149,3437,3385],{"class":155},[149,3439,156],{"class":325},[149,3441,3442],{"class":309},"200",[149,3444,1878],{"class":155},[149,3446,3448],{"class":151,"line":3447},22,[149,3449,3270],{"class":155},[149,3451,3453,3455,3457,3460,3462,3464],{"class":151,"line":3452},23,[149,3454,3275],{"class":155},[149,3456,2902],{"class":325},[149,3458,3459],{"class":169},"\"不小于100且小于200\"",[149,3461,2902],{"class":325},[149,3463,2967],{"class":155},[149,3465,3466],{"class":295}," \u002F\u002F可以无限else if,python中是elif：\n",[149,3468,3470],{"class":151,"line":3469},24,[149,3471,355],{"class":155},[149,3473,3475],{"class":151,"line":3474},25,[149,3476,3341],{"class":325},[149,3478,3480],{"class":151,"line":3479},26,[149,3481,3270],{"class":155},[149,3483,3485,3487,3489,3492,3494],{"class":151,"line":3484},27,[149,3486,3275],{"class":155},[149,3488,2902],{"class":325},[149,3490,3491],{"class":169},"\"不小于200\"",[149,3493,2902],{"class":325},[149,3495,2924],{"class":155},[149,3497,3499],{"class":151,"line":3498},28,[149,3500,355],{"class":155},[149,3502,3504],{"class":151,"line":3503},29,[149,3505,3506],{"class":295},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[125,3508,3509],{"start":193},[45,3510,3511],{},"三目运算符",[140,3513,3515],{"className":1861,"code":3514,"language":1863,"meta":145,"style":145},"\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",[48,3516,3517,3522,3527,3553,3575,3592,3597,3620,3635],{"__ignoreMap":145},[149,3518,3519],{"class":151,"line":152},[149,3520,3521],{"class":295},"\u002F\u002F创建三个变量a,b,c\n",[149,3523,3524],{"class":151,"line":193},[149,3525,3526],{"class":295},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[149,3528,3529,3531,3533,3535,3537,3540,3542,3544,3547,3549,3551],{"class":151,"line":235},[149,3530,1875],{"class":325},[149,3532,3123],{"class":155},[149,3534,166],{"class":325},[149,3536,2561],{"class":309},[149,3538,3539],{"class":155},",b",[149,3541,166],{"class":325},[149,3543,2309],{"class":309},[149,3545,3546],{"class":155},",c",[149,3548,166],{"class":325},[149,3550,2056],{"class":309},[149,3552,841],{"class":155},[149,3554,3555,3557,3559,3562,3564,3566,3568,3570,3572],{"class":151,"line":340},[149,3556,2152],{"class":155},[149,3558,166],{"class":325},[149,3560,3561],{"class":155},"(a",[149,3563,2819],{"class":325},[149,3565,2127],{"class":155},[149,3567,2845],{"class":325},[149,3569,2102],{"class":155},[149,3571,2720],{"class":325},[149,3573,3574],{"class":155},"b)\n",[149,3576,3577,3579,3581,3584,3586,3588,3590],{"class":151,"line":346},[149,3578,3094],{"class":155},[149,3580,2902],{"class":325},[149,3582,3583],{"class":169},"\"c=\"",[149,3585,2902],{"class":325},[149,3587,2152],{"class":155},[149,3589,2902],{"class":325},[149,3591,2924],{"class":155},[149,3593,3594],{"class":151,"line":352},[149,3595,3596],{"class":295},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[149,3598,3599,3601,3603,3605,3607,3609,3611,3614,3616,3618],{"class":151,"line":1021},[149,3600,3561],{"class":155},[149,3602,2819],{"class":325},[149,3604,2127],{"class":155},[149,3606,2845],{"class":325},[149,3608,2102],{"class":155},[149,3610,2720],{"class":325},[149,3612,3613],{"class":155},"b)",[149,3615,166],{"class":325},[149,3617,322],{"class":309},[149,3619,841],{"class":155},[149,3621,3622,3624,3626,3628,3630,3632],{"class":151,"line":1035},[149,3623,3094],{"class":155},[149,3625,2902],{"class":325},[149,3627,2102],{"class":155},[149,3629,2902],{"class":325},[149,3631,2967],{"class":155},[149,3633,3634],{"class":295}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[149,3636,3637,3639,3641,3643,3645,3647],{"class":151,"line":1054},[149,3638,3094],{"class":155},[149,3640,2902],{"class":325},[149,3642,2127],{"class":155},[149,3644,2902],{"class":325},[149,3646,2967],{"class":155},[149,3648,3649],{"class":295}," \u002F\u002F10   a>b,b还是原值\n",[125,3651,3652],{"start":235},[45,3653,3654],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[140,3656,3658],{"className":1861,"code":3657,"language":1863,"meta":145,"style":145},"\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",[48,3659,3660,3665,3673,3686,3696,3700,3714,3727,3737,3745,3750,3775,3796,3818,3839,3861,3882,3902,3907],{"__ignoreMap":145},[149,3661,3662],{"class":151,"line":152},[149,3663,3664],{"class":295},"\u002F\u002F案例-电影打分\n",[149,3666,3667,3670],{"class":151,"line":193},[149,3668,3669],{"class":325},"#include",[149,3671,3672],{"class":169},"\u003Ciostream>\n",[149,3674,3675,3678,3681,3684],{"class":151,"line":235},[149,3676,3677],{"class":325},"using",[149,3679,3680],{"class":325}," namespace",[149,3682,3683],{"class":162}," std",[149,3685,841],{"class":155},[149,3687,3688,3690,3693],{"class":151,"line":340},[149,3689,1875],{"class":325},[149,3691,3692],{"class":162}," main",[149,3694,3695],{"class":155},"()\n",[149,3697,3698],{"class":151,"line":346},[149,3699,3270],{"class":155},[149,3701,3702,3705,3708,3710,3712],{"class":151,"line":352},[149,3703,3704],{"class":325},"    int",[149,3706,3707],{"class":155}," score",[149,3709,166],{"class":325},[149,3711,2056],{"class":309},[149,3713,841],{"class":155},[149,3715,3716,3718,3720,3723,3725],{"class":151,"line":1021},[149,3717,3275],{"class":155},[149,3719,2902],{"class":325},[149,3721,3722],{"class":169},"\"电影打分：\"",[149,3724,2902],{"class":325},[149,3726,2924],{"class":155},[149,3728,3729,3732,3734],{"class":151,"line":1035},[149,3730,3731],{"class":155},"    cin",[149,3733,3154],{"class":325},[149,3735,3736],{"class":155},"score;\n",[149,3738,3739,3742],{"class":151,"line":1054},[149,3740,3741],{"class":325},"    switch",[149,3743,3744],{"class":155},"(score)\n",[149,3746,3747],{"class":151,"line":1072},[149,3748,3749],{"class":155},"    {\n",[149,3751,3752,3755,3758,3761,3763,3766,3768,3770,3773],{"class":151,"line":1090},[149,3753,3754],{"class":325},"        case",[149,3756,3757],{"class":309}," 10",[149,3759,3760],{"class":155},":cout",[149,3762,2902],{"class":325},[149,3764,3765],{"class":169},"\"经典\"",[149,3767,2902],{"class":325},[149,3769,2967],{"class":155},[149,3771,3772],{"class":325},"break",[149,3774,841],{"class":155},[149,3776,3777,3779,3782,3784,3786,3788,3790,3792,3794],{"class":151,"line":1633},[149,3778,3754],{"class":325},[149,3780,3781],{"class":309}," 9",[149,3783,3760],{"class":155},[149,3785,2902],{"class":325},[149,3787,3765],{"class":169},[149,3789,2902],{"class":325},[149,3791,2967],{"class":155},[149,3793,3772],{"class":325},[149,3795,841],{"class":155},[149,3797,3798,3800,3803,3805,3807,3810,3812,3814,3816],{"class":151,"line":1644},[149,3799,3754],{"class":325},[149,3801,3802],{"class":309}," 8",[149,3804,3760],{"class":155},[149,3806,2902],{"class":325},[149,3808,3809],{"class":169},"\"非常好\"",[149,3811,2902],{"class":325},[149,3813,2967],{"class":155},[149,3815,3772],{"class":325},[149,3817,841],{"class":155},[149,3819,3820,3822,3825,3827,3829,3831,3833,3835,3837],{"class":151,"line":3348},[149,3821,3754],{"class":325},[149,3823,3824],{"class":309}," 7",[149,3826,3760],{"class":155},[149,3828,2902],{"class":325},[149,3830,3809],{"class":169},[149,3832,2902],{"class":325},[149,3834,2967],{"class":155},[149,3836,3772],{"class":325},[149,3838,841],{"class":155},[149,3840,3841,3843,3846,3848,3850,3853,3855,3857,3859],{"class":151,"line":3362},[149,3842,3754],{"class":325},[149,3844,3845],{"class":309}," 6",[149,3847,3760],{"class":155},[149,3849,2902],{"class":325},[149,3851,3852],{"class":169},"\"一般\"",[149,3854,2902],{"class":325},[149,3856,2967],{"class":155},[149,3858,3772],{"class":325},[149,3860,841],{"class":155},[149,3862,3863,3865,3868,3870,3872,3874,3876,3878,3880],{"class":151,"line":3367},[149,3864,3754],{"class":325},[149,3866,3867],{"class":309}," 5",[149,3869,3760],{"class":155},[149,3871,2902],{"class":325},[149,3873,3852],{"class":169},[149,3875,2902],{"class":325},[149,3877,2967],{"class":155},[149,3879,3772],{"class":325},[149,3881,841],{"class":155},[149,3883,3884,3887,3889,3891,3894,3896,3898,3900],{"class":151,"line":3373},[149,3885,3886],{"class":325},"        default",[149,3888,3760],{"class":155},[149,3890,2902],{"class":325},[149,3892,3893],{"class":169},"\"烂片\"",[149,3895,2902],{"class":325},[149,3897,2967],{"class":155},[149,3899,3772],{"class":325},[149,3901,841],{"class":155},[149,3903,3904],{"class":151,"line":3394},[149,3905,3906],{"class":155},"    }\n",[149,3908,3909],{"class":151,"line":3399},[149,3910,355],{"class":155},[24,3912,3913],{},"if和switch区别：",[42,3915,3916,3919],{},[45,3917,3918],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[45,3920,3921],{},"switch优点：结构清晰，执行效率高",[19,3923,3925],{"id":3924},"_162循环结构","1.6.2循环结构",[125,3927,3928],{},[45,3929,3930],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[140,3932,3934],{"className":1861,"code":3933,"language":1863,"meta":145,"style":145},"\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",[48,3935,3936,3941,3949,3953,3966,3980,3984,4004,4014,4018,4030],{"__ignoreMap":145},[149,3937,3938],{"class":151,"line":152},[149,3939,3940],{"class":295},"\u002F\u002F打印0-9数字\n",[149,3942,3943,3945,3947],{"class":151,"line":193},[149,3944,1875],{"class":325},[149,3946,3692],{"class":162},[149,3948,3695],{"class":155},[149,3950,3951],{"class":151,"line":235},[149,3952,3270],{"class":155},[149,3954,3955,3957,3960,3962,3964],{"class":151,"line":340},[149,3956,3704],{"class":325},[149,3958,3959],{"class":155}," num",[149,3961,166],{"class":325},[149,3963,2056],{"class":309},[149,3965,841],{"class":155},[149,3967,3968,3971,3974,3976,3978],{"class":151,"line":346},[149,3969,3970],{"class":325},"    while",[149,3972,3973],{"class":155},"(num",[149,3975,156],{"class":325},[149,3977,2309],{"class":309},[149,3979,1878],{"class":155},[149,3981,3982],{"class":151,"line":352},[149,3983,3749],{"class":155},[149,3985,3986,3989,3992,3994,3996,3998,4001],{"class":151,"line":1021},[149,3987,3988],{"class":162},"       std",[149,3990,3991],{"class":155},"::cout",[149,3993,2902],{"class":325},[149,3995,3385],{"class":155},[149,3997,2902],{"class":325},[149,3999,4000],{"class":162},"std",[149,4002,4003],{"class":155},"::endl;\n",[149,4005,4006,4009,4012],{"class":151,"line":1035},[149,4007,4008],{"class":155},"        num",[149,4010,4011],{"class":325},"++",[149,4013,841],{"class":155},[149,4015,4016],{"class":151,"line":1054},[149,4017,3906],{"class":155},[149,4019,4020,4023,4025,4028],{"class":151,"line":1072},[149,4021,4022],{"class":162},"    system",[149,4024,319],{"class":155},[149,4026,4027],{"class":169},"\"pause\"",[149,4029,1878],{"class":155},[149,4031,4032],{"class":151,"line":1090},[149,4033,355],{"class":155},[24,4035,4036],{},"注意：写好循环条件，避免死循环情况",[140,4038,4040],{"className":1861,"code":4039,"language":1863,"meta":145,"style":145},"\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",[48,4041,4042,4047,4054,4061,4071,4079,4083,4088,4115,4120,4125,4133,4160,4165,4170,4183,4193,4197,4207,4212,4225,4230,4244,4249,4264,4268,4281,4285,4290,4294,4308,4316,4321,4327,4333,4338],{"__ignoreMap":145},[149,4043,4044],{"class":151,"line":152},[149,4045,4046],{"class":295},"\u002F\u002F循环结构-猜数字\n",[149,4048,4049,4051],{"class":151,"line":193},[149,4050,3669],{"class":325},[149,4052,4053],{"class":169}," \u003Ciostream>\n",[149,4055,4056,4058],{"class":151,"line":235},[149,4057,3669],{"class":325},[149,4059,4060],{"class":169}," \u003Cctime>\n",[149,4062,4063,4065,4067,4069],{"class":151,"line":340},[149,4064,3677],{"class":325},[149,4066,3680],{"class":325},[149,4068,3683],{"class":162},[149,4070,841],{"class":155},[149,4072,4073,4075,4077],{"class":151,"line":346},[149,4074,1875],{"class":325},[149,4076,3692],{"class":162},[149,4078,3695],{"class":155},[149,4080,4081],{"class":151,"line":352},[149,4082,3270],{"class":155},[149,4084,4085],{"class":151,"line":1021},[149,4086,4087],{"class":295},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[149,4089,4090,4093,4096,4099,4102,4104,4107,4109,4112],{"class":151,"line":1035},[149,4091,4092],{"class":162},"    srand",[149,4094,4095],{"class":155},"((",[149,4097,4098],{"class":325},"unsigned",[149,4100,4101],{"class":325}," int",[149,4103,2292],{"class":155},[149,4105,4106],{"class":162},"time",[149,4108,319],{"class":155},[149,4110,4111],{"class":309},"NULL",[149,4113,4114],{"class":155},"));\n",[149,4116,4117],{"class":151,"line":1054},[149,4118,4119],{"emptyLinePlaceholder":1800},"\n",[149,4121,4122],{"class":151,"line":1072},[149,4123,4124],{"class":295},"    \u002F\u002F1.系统生成随机数\n",[149,4126,4127,4130],{"class":151,"line":1090},[149,4128,4129],{"class":295},"    \u002F\u002Frand()%100",[149,4131,4132],{"class":295}," \u002F\u002F生成0-99的随机数\n",[149,4134,4135,4137,4139,4141,4144,4147,4149,4151,4153,4155,4157],{"class":151,"line":1633},[149,4136,3704],{"class":325},[149,4138,3959],{"class":155},[149,4140,166],{"class":325},[149,4142,4143],{"class":162},"rand",[149,4145,4146],{"class":155},"()",[149,4148,2191],{"class":325},[149,4150,322],{"class":309},[149,4152,2344],{"class":325},[149,4154,830],{"class":309},[149,4156,1924],{"class":155},[149,4158,4159],{"class":295}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[149,4161,4162],{"class":151,"line":1644},[149,4163,4164],{"class":295},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[149,4166,4167],{"class":151,"line":3348},[149,4168,4169],{"class":295},"    \u002F\u002F2.玩家猜测\n",[149,4171,4172,4174,4177,4179,4181],{"class":151,"line":3362},[149,4173,3704],{"class":325},[149,4175,4176],{"class":155}," val",[149,4178,166],{"class":325},[149,4180,2056],{"class":309},[149,4182,841],{"class":155},[149,4184,4185,4187,4189,4191],{"class":151,"line":3367},[149,4186,3970],{"class":325},[149,4188,3378],{"class":155},[149,4190,830],{"class":309},[149,4192,1878],{"class":155},[149,4194,4195],{"class":151,"line":3373},[149,4196,3749],{"class":155},[149,4198,4199,4202,4204],{"class":151,"line":3394},[149,4200,4201],{"class":155},"        cin",[149,4203,3154],{"class":325},[149,4205,4206],{"class":155},"val;\n",[149,4208,4209],{"class":151,"line":3399},[149,4210,4211],{"class":295},"        \u002F\u002F3.判断玩家猜测\n",[149,4213,4214,4217,4220,4222],{"class":151,"line":3413},[149,4215,4216],{"class":325},"        if",[149,4218,4219],{"class":155},"(val",[149,4221,156],{"class":325},[149,4223,4224],{"class":155},"num) \n",[149,4226,4227],{"class":151,"line":3418},[149,4228,4229],{"class":155},"        {\n",[149,4231,4232,4235,4237,4240,4242],{"class":151,"line":3447},[149,4233,4234],{"class":155},"            cout",[149,4236,2902],{"class":325},[149,4238,4239],{"class":169},"\"猜小了！\"",[149,4241,2902],{"class":325},[149,4243,2924],{"class":155},[149,4245,4246],{"class":151,"line":3452},[149,4247,4248],{"class":155},"        }\n",[149,4250,4251,4254,4256,4259,4261],{"class":151,"line":3469},[149,4252,4253],{"class":325},"        else",[149,4255,3424],{"class":325},[149,4257,4258],{"class":155}," (val",[149,4260,2819],{"class":325},[149,4262,4263],{"class":155},"num)\n",[149,4265,4266],{"class":151,"line":3474},[149,4267,4229],{"class":155},[149,4269,4270,4272,4274,4277,4279],{"class":151,"line":3479},[149,4271,4234],{"class":155},[149,4273,2902],{"class":325},[149,4275,4276],{"class":169},"\"猜大了！\"",[149,4278,2902],{"class":325},[149,4280,2924],{"class":155},[149,4282,4283],{"class":151,"line":3484},[149,4284,4248],{"class":155},[149,4286,4287],{"class":151,"line":3498},[149,4288,4289],{"class":325},"        else\n",[149,4291,4292],{"class":151,"line":3503},[149,4293,4229],{"class":155},[149,4295,4297,4299,4301,4304,4306],{"class":151,"line":4296},30,[149,4298,4234],{"class":155},[149,4300,2902],{"class":325},[149,4302,4303],{"class":169},"\"猜对了！\"",[149,4305,2902],{"class":325},[149,4307,2924],{"class":155},[149,4309,4311,4314],{"class":151,"line":4310},31,[149,4312,4313],{"class":325},"            break",[149,4315,841],{"class":155},[149,4317,4319],{"class":151,"line":4318},32,[149,4320,4248],{"class":155},[149,4322,4324],{"class":151,"line":4323},33,[149,4325,4326],{"class":295},"        \u002F\u002F猜对 退出游戏\n",[149,4328,4330],{"class":151,"line":4329},34,[149,4331,4332],{"class":295},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[149,4334,4336],{"class":151,"line":4335},35,[149,4337,3906],{"class":155},[149,4339,4341],{"class":151,"line":4340},36,[149,4342,355],{"class":155},[125,4344,4345],{"start":193},[45,4346,4347,4348,4351],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[31,4349,4350],{},"do...while会先执行一次循环语句","，在判断循环语句",[140,4353,4355],{"className":1861,"code":4354,"language":1863,"meta":145,"style":145},"\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",[48,4356,4357,4362,4370,4374,4386,4394,4398,4415,4422,4426,4438,4448],{"__ignoreMap":145},[149,4358,4359],{"class":151,"line":152},[149,4360,4361],{"class":295},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[149,4363,4364,4366,4368],{"class":151,"line":193},[149,4365,1875],{"class":325},[149,4367,3692],{"class":162},[149,4369,3695],{"class":155},[149,4371,4372],{"class":151,"line":235},[149,4373,3270],{"class":155},[149,4375,4376,4378,4380,4382,4384],{"class":151,"line":340},[149,4377,3704],{"class":325},[149,4379,3959],{"class":155},[149,4381,166],{"class":325},[149,4383,2056],{"class":309},[149,4385,841],{"class":155},[149,4387,4388,4391],{"class":151,"line":346},[149,4389,4390],{"class":325},"    do",[149,4392,4393],{"class":155}," \n",[149,4395,4396],{"class":151,"line":352},[149,4397,3749],{"class":155},[149,4399,4400,4403,4405,4407,4409,4411,4413],{"class":151,"line":1021},[149,4401,4402],{"class":162},"        std",[149,4404,3991],{"class":155},[149,4406,2902],{"class":325},[149,4408,3385],{"class":155},[149,4410,2902],{"class":325},[149,4412,4000],{"class":162},[149,4414,4003],{"class":155},[149,4416,4417,4419],{"class":151,"line":1035},[149,4418,4008],{"class":155},[149,4420,4421],{"class":325},"++\n",[149,4423,4424],{"class":151,"line":1054},[149,4425,3906],{"class":155},[149,4427,4428,4430,4432,4434,4436],{"class":151,"line":1072},[149,4429,3970],{"class":325},[149,4431,3973],{"class":155},[149,4433,156],{"class":325},[149,4435,2309],{"class":309},[149,4437,337],{"class":155},[149,4439,4440,4442,4444,4446],{"class":151,"line":1090},[149,4441,4022],{"class":162},[149,4443,319],{"class":155},[149,4445,4027],{"class":169},[149,4447,337],{"class":155},[149,4449,4450],{"class":151,"line":1633},[149,4451,355],{"class":155},[24,4453,4454],{},"案例-水仙花数",[24,4456,4457],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[24,4459,4460],{},"例如：1^3+5^3+3^3=153",[24,4462,4463],{},"请用do...while语句，求出所有3位数的水仙花数",[140,4465,4467],{"className":1861,"code":4466,"language":1863,"meta":145,"style":145},"#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",[48,4468,4469,4475,4485,4493,4497,4502,4514,4520,4524,4529,4545,4561,4577,4592,4611,4626,4674,4678,4690,4694,4702,4706,4720],{"__ignoreMap":145},[149,4470,4471,4473],{"class":151,"line":152},[149,4472,3669],{"class":325},[149,4474,4053],{"class":169},[149,4476,4477,4479,4481,4483],{"class":151,"line":193},[149,4478,3677],{"class":325},[149,4480,3680],{"class":325},[149,4482,3683],{"class":162},[149,4484,841],{"class":155},[149,4486,4487,4489,4491],{"class":151,"line":235},[149,4488,1875],{"class":325},[149,4490,3692],{"class":162},[149,4492,3695],{"class":155},[149,4494,4495],{"class":151,"line":340},[149,4496,3270],{"class":155},[149,4498,4499],{"class":151,"line":346},[149,4500,4501],{"class":295},"    \u002F\u002F1.先打印所有三位数字\n",[149,4503,4504,4506,4508,4510,4512],{"class":151,"line":352},[149,4505,3704],{"class":325},[149,4507,3959],{"class":155},[149,4509,166],{"class":325},[149,4511,322],{"class":309},[149,4513,841],{"class":155},[149,4515,4516,4518],{"class":151,"line":1021},[149,4517,4390],{"class":325},[149,4519,4393],{"class":155},[149,4521,4522],{"class":151,"line":1035},[149,4523,3749],{"class":155},[149,4525,4526],{"class":151,"line":1054},[149,4527,4528],{"class":295},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[149,4530,4531,4534,4536,4538,4540,4542],{"class":151,"line":1072},[149,4532,4533],{"class":325},"        int",[149,4535,3123],{"class":155},[149,4537,166],{"class":325},[149,4539,2056],{"class":309},[149,4541,1924],{"class":155},[149,4543,4544],{"class":295}," \u002F\u002F个位\n",[149,4546,4547,4549,4552,4554,4556,4558],{"class":151,"line":1090},[149,4548,4533],{"class":325},[149,4550,4551],{"class":155}," b",[149,4553,166],{"class":325},[149,4555,2056],{"class":309},[149,4557,1924],{"class":155},[149,4559,4560],{"class":295}," \u002F\u002F十位\n",[149,4562,4563,4565,4568,4570,4572,4574],{"class":151,"line":1633},[149,4564,4533],{"class":325},[149,4566,4567],{"class":155}," c",[149,4569,166],{"class":325},[149,4571,2056],{"class":309},[149,4573,1924],{"class":155},[149,4575,4576],{"class":295}," \u002F\u002F百位\n",[149,4578,4579,4582,4584,4586,4588,4590],{"class":151,"line":1644},[149,4580,4581],{"class":155},"        a",[149,4583,166],{"class":325},[149,4585,3385],{"class":155},[149,4587,2191],{"class":325},[149,4589,2309],{"class":309},[149,4591,841],{"class":155},[149,4593,4594,4597,4599,4601,4603,4605,4607,4609],{"class":151,"line":3348},[149,4595,4596],{"class":155},"        b",[149,4598,166],{"class":325},[149,4600,3385],{"class":155},[149,4602,2447],{"class":325},[149,4604,2309],{"class":309},[149,4606,2191],{"class":325},[149,4608,2309],{"class":309},[149,4610,841],{"class":155},[149,4612,4613,4616,4618,4620,4622,4624],{"class":151,"line":3362},[149,4614,4615],{"class":155},"        c",[149,4617,166],{"class":325},[149,4619,3385],{"class":155},[149,4621,2447],{"class":325},[149,4623,322],{"class":309},[149,4625,841],{"class":155},[149,4627,4628,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656,4658,4660,4662,4665,4668,4671],{"class":151,"line":3367},[149,4629,4216],{"class":325},[149,4631,3561],{"class":155},[149,4633,2318],{"class":325},[149,4635,2102],{"class":155},[149,4637,2318],{"class":325},[149,4639,2102],{"class":155},[149,4641,2344],{"class":325},[149,4643,2127],{"class":155},[149,4645,2318],{"class":325},[149,4647,2127],{"class":155},[149,4649,2318],{"class":325},[149,4651,2127],{"class":155},[149,4653,2344],{"class":325},[149,4655,2152],{"class":155},[149,4657,2318],{"class":325},[149,4659,2152],{"class":155},[149,4661,2318],{"class":325},[149,4663,4664],{"class":155},"c ",[149,4666,4667],{"class":325},"==",[149,4669,4670],{"class":155}," num)",[149,4672,4673],{"class":295}," \u002F\u002F如果是水仙花数，才打印\n",[149,4675,4676],{"class":151,"line":3373},[149,4677,4229],{"class":155},[149,4679,4680,4682,4684,4686,4688],{"class":151,"line":3394},[149,4681,4234],{"class":155},[149,4683,2902],{"class":325},[149,4685,3385],{"class":155},[149,4687,2902],{"class":325},[149,4689,2924],{"class":155},[149,4691,4692],{"class":151,"line":3399},[149,4693,4248],{"class":155},[149,4695,4696,4698,4700],{"class":151,"line":3413},[149,4697,4008],{"class":155},[149,4699,4011],{"class":325},[149,4701,841],{"class":155},[149,4703,4704],{"class":151,"line":3418},[149,4705,3906],{"class":155},[149,4707,4708,4710,4713,4715,4718],{"class":151,"line":3447},[149,4709,3970],{"class":325},[149,4711,4712],{"class":155}," (num ",[149,4714,156],{"class":325},[149,4716,4717],{"class":309}," 1000",[149,4719,337],{"class":155},[149,4721,4722],{"class":151,"line":3452},[149,4723,355],{"class":155},[125,4725,4726],{"start":235},[45,4727,4728],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[140,4730,4732],{"className":1861,"code":4731,"language":1863,"meta":145,"style":145},"\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",[48,4733,4734,4739,4768,4772,4784,4788,4793,4804,4811,4815,4829,4833,4840,4844,4856,4865],{"__ignoreMap":145},[149,4735,4736],{"class":151,"line":152},[149,4737,4738],{"class":295},"\u002F\u002F从数字0-9打印\n",[149,4740,4741,4744,4746,4748,4751,4753,4755,4758,4760,4762,4764,4766],{"class":151,"line":193},[149,4742,4743],{"class":325},"for",[149,4745,319],{"class":155},[149,4747,1875],{"class":325},[149,4749,4750],{"class":155}," i",[149,4752,166],{"class":325},[149,4754,2056],{"class":309},[149,4756,4757],{"class":155},";i",[149,4759,156],{"class":325},[149,4761,2309],{"class":309},[149,4763,4757],{"class":155},[149,4765,4011],{"class":325},[149,4767,1878],{"class":155},[149,4769,4770],{"class":151,"line":235},[149,4771,3270],{"class":155},[149,4773,4774,4776,4778,4780,4782],{"class":151,"line":340},[149,4775,3275],{"class":155},[149,4777,2902],{"class":325},[149,4779,2304],{"class":155},[149,4781,2902],{"class":325},[149,4783,2924],{"class":155},[149,4785,4786],{"class":151,"line":346},[149,4787,355],{"class":155},[149,4789,4790],{"class":151,"line":352},[149,4791,4792],{"class":295},"\u002F\u002F上式可以进行拆分\n",[149,4794,4795,4797,4799,4801],{"class":151,"line":1021},[149,4796,1875],{"class":325},[149,4798,4750],{"class":155},[149,4800,166],{"class":325},[149,4802,4803],{"class":309},"0\n",[149,4805,4806,4808],{"class":151,"line":1035},[149,4807,4743],{"class":325},[149,4809,4810],{"class":155},"(;;;)\n",[149,4812,4813],{"class":151,"line":1054},[149,4814,3270],{"class":155},[149,4816,4817,4820,4823,4825,4827],{"class":151,"line":1072},[149,4818,4819],{"class":325},"    if",[149,4821,4822],{"class":155},"(i",[149,4824,3430],{"class":325},[149,4826,2309],{"class":309},[149,4828,1878],{"class":155},[149,4830,4831],{"class":151,"line":1090},[149,4832,3749],{"class":155},[149,4834,4835,4838],{"class":151,"line":1633},[149,4836,4837],{"class":325},"        break",[149,4839,841],{"class":155},[149,4841,4842],{"class":151,"line":1644},[149,4843,3906],{"class":155},[149,4845,4846,4848,4850,4852,4854],{"class":151,"line":3348},[149,4847,3275],{"class":155},[149,4849,2902],{"class":325},[149,4851,2304],{"class":155},[149,4853,2902],{"class":325},[149,4855,2924],{"class":155},[149,4857,4858,4861,4863],{"class":151,"line":3362},[149,4859,4860],{"class":155},"    i",[149,4862,4011],{"class":325},[149,4864,841],{"class":155},[149,4866,4867],{"class":151,"line":3367},[149,4868,355],{"class":155},[24,4870,4871],{},"小练习",[140,4873,4875],{"className":1861,"code":4874,"language":1863,"meta":145,"style":145},"#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",[48,4876,4877,4883,4893,4901,4905,4910,4915,4943,4947,4952,4957,4998,5002,5015,5019,5023,5027,5039,5043,5047],{"__ignoreMap":145},[149,4878,4879,4881],{"class":151,"line":152},[149,4880,3669],{"class":325},[149,4882,3672],{"class":169},[149,4884,4885,4887,4889,4891],{"class":151,"line":193},[149,4886,3677],{"class":325},[149,4888,3680],{"class":325},[149,4890,3683],{"class":162},[149,4892,841],{"class":155},[149,4894,4895,4897,4899],{"class":151,"line":235},[149,4896,1875],{"class":325},[149,4898,3692],{"class":162},[149,4900,3695],{"class":155},[149,4902,4903],{"class":151,"line":340},[149,4904,3270],{"class":155},[149,4906,4907],{"class":151,"line":346},[149,4908,4909],{"class":295},"    \u002F\u002F敲桌子案例\n",[149,4911,4912],{"class":151,"line":352},[149,4913,4914],{"class":295},"    \u002F\u002F1.先输出1-100的数字\n",[149,4916,4917,4920,4922,4924,4926,4928,4930,4933,4935,4937,4939,4941],{"class":151,"line":1021},[149,4918,4919],{"class":325},"    for",[149,4921,319],{"class":155},[149,4923,1875],{"class":325},[149,4925,4750],{"class":155},[149,4927,166],{"class":325},[149,4929,830],{"class":309},[149,4931,4932],{"class":155},"; i",[149,4934,3311],{"class":325},[149,4936,322],{"class":309},[149,4938,4932],{"class":155},[149,4940,4011],{"class":325},[149,4942,1878],{"class":155},[149,4944,4945],{"class":151,"line":1035},[149,4946,3749],{"class":155},[149,4948,4949],{"class":151,"line":1054},[149,4950,4951],{"class":295},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[149,4953,4954],{"class":151,"line":1072},[149,4955,4956],{"class":295},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[149,4958,4959,4961,4963,4965,4967,4969,4971,4974,4976,4978,4980,4982,4984,4986,4988,4990,4992,4994,4996],{"class":151,"line":1090},[149,4960,4216],{"class":325},[149,4962,4822],{"class":155},[149,4964,2191],{"class":325},[149,4966,2232],{"class":309},[149,4968,4667],{"class":325},[149,4970,2056],{"class":309},[149,4972,4973],{"class":325}," ||",[149,4975,4750],{"class":155},[149,4977,2191],{"class":325},[149,4979,2309],{"class":309},[149,4981,4667],{"class":325},[149,4983,2232],{"class":309},[149,4985,4973],{"class":325},[149,4987,4750],{"class":155},[149,4989,2447],{"class":325},[149,4991,2309],{"class":309},[149,4993,4667],{"class":325},[149,4995,2232],{"class":309},[149,4997,1878],{"class":155},[149,4999,5000],{"class":151,"line":1633},[149,5001,4229],{"class":155},[149,5003,5004,5006,5008,5011,5013],{"class":151,"line":1644},[149,5005,4234],{"class":155},[149,5007,2902],{"class":325},[149,5009,5010],{"class":169},"\"敲桌子\"",[149,5012,2902],{"class":325},[149,5014,2924],{"class":155},[149,5016,5017],{"class":151,"line":3348},[149,5018,4248],{"class":155},[149,5020,5021],{"class":151,"line":3362},[149,5022,4289],{"class":325},[149,5024,5025],{"class":151,"line":3367},[149,5026,4229],{"class":155},[149,5028,5029,5031,5033,5035,5037],{"class":151,"line":3373},[149,5030,4234],{"class":155},[149,5032,2902],{"class":325},[149,5034,2304],{"class":155},[149,5036,2902],{"class":325},[149,5038,2924],{"class":155},[149,5040,5041],{"class":151,"line":3394},[149,5042,4248],{"class":155},[149,5044,5045],{"class":151,"line":3399},[149,5046,3906],{"class":155},[149,5048,5049],{"class":151,"line":3413},[149,5050,355],{"class":155},[24,5052,5053],{},"嵌套实现星图",[140,5055,5057],{"className":1861,"code":5056,"language":1863,"meta":145,"style":145},"#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",[48,5058,5059,5065,5075,5083,5087,5113,5117,5146,5150,5161,5165,5174,5178],{"__ignoreMap":145},[149,5060,5061,5063],{"class":151,"line":152},[149,5062,3669],{"class":325},[149,5064,3672],{"class":169},[149,5066,5067,5069,5071,5073],{"class":151,"line":193},[149,5068,3677],{"class":325},[149,5070,3680],{"class":325},[149,5072,3683],{"class":162},[149,5074,841],{"class":155},[149,5076,5077,5079,5081],{"class":151,"line":235},[149,5078,1875],{"class":325},[149,5080,3692],{"class":162},[149,5082,3695],{"class":155},[149,5084,5085],{"class":151,"line":340},[149,5086,3270],{"class":155},[149,5088,5089,5091,5093,5095,5097,5099,5101,5103,5105,5107,5109,5111],{"class":151,"line":346},[149,5090,4919],{"class":325},[149,5092,3378],{"class":155},[149,5094,1875],{"class":325},[149,5096,4750],{"class":155},[149,5098,166],{"class":325},[149,5100,2056],{"class":309},[149,5102,4757],{"class":155},[149,5104,156],{"class":325},[149,5106,2309],{"class":309},[149,5108,4757],{"class":155},[149,5110,4011],{"class":325},[149,5112,1878],{"class":155},[149,5114,5115],{"class":151,"line":352},[149,5116,3749],{"class":155},[149,5118,5119,5122,5124,5126,5129,5131,5133,5136,5138,5140,5142,5144],{"class":151,"line":1021},[149,5120,5121],{"class":325},"        for",[149,5123,3378],{"class":155},[149,5125,1875],{"class":325},[149,5127,5128],{"class":155}," j",[149,5130,166],{"class":325},[149,5132,2056],{"class":309},[149,5134,5135],{"class":155},";j",[149,5137,156],{"class":325},[149,5139,2309],{"class":309},[149,5141,5135],{"class":155},[149,5143,4011],{"class":325},[149,5145,1878],{"class":155},[149,5147,5148],{"class":151,"line":1035},[149,5149,4229],{"class":155},[149,5151,5152,5154,5156,5159],{"class":151,"line":1054},[149,5153,4234],{"class":155},[149,5155,2902],{"class":325},[149,5157,5158],{"class":169},"\"*\"",[149,5160,841],{"class":155},[149,5162,5163],{"class":151,"line":1072},[149,5164,4248],{"class":155},[149,5166,5167,5170,5172],{"class":151,"line":1090},[149,5168,5169],{"class":155},"        cout",[149,5171,2902],{"class":325},[149,5173,2924],{"class":155},[149,5175,5176],{"class":151,"line":1633},[149,5177,3906],{"class":155},[149,5179,5180],{"class":151,"line":1644},[149,5181,355],{"class":155},[24,5183,5184],{},"乘法口诀表",[140,5186,5188],{"className":1861,"code":5187,"language":1863,"meta":145,"style":145},"#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",[48,5189,5190,5196,5206,5214,5218,5244,5248,5273,5277,5317,5321,5329,5333],{"__ignoreMap":145},[149,5191,5192,5194],{"class":151,"line":152},[149,5193,3669],{"class":325},[149,5195,4053],{"class":169},[149,5197,5198,5200,5202,5204],{"class":151,"line":193},[149,5199,3677],{"class":325},[149,5201,3680],{"class":325},[149,5203,3683],{"class":162},[149,5205,841],{"class":155},[149,5207,5208,5210,5212],{"class":151,"line":235},[149,5209,1875],{"class":325},[149,5211,3692],{"class":162},[149,5213,3695],{"class":155},[149,5215,5216],{"class":151,"line":340},[149,5217,3270],{"class":155},[149,5219,5220,5222,5224,5226,5228,5230,5232,5234,5236,5238,5240,5242],{"class":151,"line":346},[149,5221,4919],{"class":325},[149,5223,319],{"class":155},[149,5225,1875],{"class":325},[149,5227,4750],{"class":155},[149,5229,166],{"class":325},[149,5231,830],{"class":309},[149,5233,4757],{"class":155},[149,5235,156],{"class":325},[149,5237,2309],{"class":309},[149,5239,4757],{"class":155},[149,5241,4011],{"class":325},[149,5243,1878],{"class":155},[149,5245,5246],{"class":151,"line":352},[149,5247,3749],{"class":155},[149,5249,5250,5252,5254,5256,5258,5260,5262,5264,5266,5269,5271],{"class":151,"line":1021},[149,5251,5121],{"class":325},[149,5253,319],{"class":155},[149,5255,1875],{"class":325},[149,5257,5128],{"class":155},[149,5259,166],{"class":325},[149,5261,830],{"class":309},[149,5263,5135],{"class":155},[149,5265,3311],{"class":325},[149,5267,5268],{"class":155},"i;j",[149,5270,4011],{"class":325},[149,5272,1878],{"class":155},[149,5274,5275],{"class":151,"line":1035},[149,5276,4229],{"class":155},[149,5278,5279,5281,5283,5285,5287,5289,5291,5293,5295,5298,5300,5302,5304,5306,5308,5311,5313,5315],{"class":151,"line":1054},[149,5280,4234],{"class":155},[149,5282,2902],{"class":325},[149,5284,2330],{"class":155},[149,5286,2902],{"class":325},[149,5288,5158],{"class":169},[149,5290,2902],{"class":325},[149,5292,2304],{"class":155},[149,5294,2902],{"class":325},[149,5296,5297],{"class":169},"\"=\"",[149,5299,2902],{"class":325},[149,5301,2304],{"class":155},[149,5303,2318],{"class":325},[149,5305,2330],{"class":155},[149,5307,2902],{"class":325},[149,5309,5310],{"class":169},"'",[149,5312,2959],{"class":309},[149,5314,5310],{"class":169},[149,5316,841],{"class":155},[149,5318,5319],{"class":151,"line":1072},[149,5320,4248],{"class":155},[149,5322,5323,5325,5327],{"class":151,"line":1090},[149,5324,5169],{"class":155},[149,5326,2902],{"class":325},[149,5328,2924],{"class":155},[149,5330,5331],{"class":151,"line":1633},[149,5332,3906],{"class":155},[149,5334,5335],{"class":151,"line":1644},[149,5336,355],{"class":155},[19,5338,5340],{"id":5339},"_163跳出语句","1.6.3跳出语句",[125,5342,5343],{},[45,5344,5345],{},"break语句\n作用：用于跳出选择结构或者循环结构",[24,5347,5348],{},"break使用时机：",[42,5350,5351,5354,5357],{},[45,5352,5353],{},"出现在switch条件语句中，作用是终止case并跳出switch",[45,5355,5356],{},"出现在循环结构中，作用是跳出当前的循环结构",[45,5358,5359],{},"出现在嵌套循环中，跳出最近的内层循环语句",[125,5361,5362,5365],{"start":193},[45,5363,5364],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[45,5366,5367],{},"goto语句\n语法：goto 标记;",[24,5369,5370],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[140,5372,5374],{"className":1861,"code":5373,"language":1863,"meta":145,"style":145},"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",[48,5375,5376,5384,5388,5401,5411,5424,5437,5450,5458,5474],{"__ignoreMap":145},[149,5377,5378,5380,5382],{"class":151,"line":152},[149,5379,1875],{"class":325},[149,5381,3692],{"class":162},[149,5383,3695],{"class":155},[149,5385,5386],{"class":151,"line":193},[149,5387,3270],{"class":155},[149,5389,5390,5392,5394,5397,5399],{"class":151,"line":235},[149,5391,3275],{"class":155},[149,5393,2902],{"class":325},[149,5395,5396],{"class":169},"\"1\"",[149,5398,2902],{"class":325},[149,5400,2924],{"class":155},[149,5402,5403,5406,5409],{"class":151,"line":340},[149,5404,5405],{"class":325},"    goto",[149,5407,5408],{"class":162}," FLAG",[149,5410,841],{"class":155},[149,5412,5413,5415,5417,5420,5422],{"class":151,"line":346},[149,5414,3275],{"class":155},[149,5416,2902],{"class":325},[149,5418,5419],{"class":169},"\"2\"",[149,5421,2902],{"class":325},[149,5423,2924],{"class":155},[149,5425,5426,5428,5430,5433,5435],{"class":151,"line":352},[149,5427,3275],{"class":155},[149,5429,2902],{"class":325},[149,5431,5432],{"class":169},"\"3\"",[149,5434,2902],{"class":325},[149,5436,2924],{"class":155},[149,5438,5439,5441,5443,5446,5448],{"class":151,"line":1021},[149,5440,3275],{"class":155},[149,5442,2902],{"class":325},[149,5444,5445],{"class":169},"\"4\"",[149,5447,2902],{"class":325},[149,5449,2924],{"class":155},[149,5451,5452,5455],{"class":151,"line":1035},[149,5453,5454],{"class":162},"    FLAG",[149,5456,5457],{"class":155},":\n",[149,5459,5460,5462,5464,5467,5469,5471],{"class":151,"line":1054},[149,5461,3275],{"class":155},[149,5463,2902],{"class":325},[149,5465,5466],{"class":169},"\"5\"",[149,5468,2902],{"class":325},[149,5470,2967],{"class":155},[149,5472,5473],{"class":295},"\u002F\u002F跳过了2,3,4,直接到5\n",[149,5475,5476],{"class":151,"line":1072},[149,5477,355],{"class":155},[14,5479,5481],{"id":5480},"_17数组","1.7数组",[19,5483,5485],{"id":5484},"_171一维数组","1.7.1一维数组",[125,5487,5488],{},[45,5489,5490],{},"一维数组定义方式",[2003,5492,5493,5503],{},[2006,5494,5495],{},[2009,5496,5497,5500],{},[2012,5498,5499],{},"方式",[2012,5501,5502],{},"注意事项",[2049,5504,5505,5519,5529],{},[2009,5506,5507,5513],{},[2054,5508,5509,5510,1924],{},"数据类型 数组名",[149,5511,5512],{},"数组长度",[2054,5514,5515,5516,5518],{},"这种方式是先定义再arr",[149,5517,2304],{},"赋值",[2009,5520,5521,5526],{},[2054,5522,5509,5523,5525],{},[149,5524,5512],{},"={值1,值2....};",[2054,5527,5528],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[2009,5530,5531,5535],{},[2054,5532,5509,5533,5525],{},[149,5534],{},[2054,5536,5537,5538,5540],{},"int arr",[149,5539],{},";这是不正确的，按照这样的方式定义必须有初始长度",[125,5542,5543],{"start":193},[45,5544,5545],{},"一维数组数组名\n用途：",[42,5547,5548],{},[45,5549,5550],{},"1.可以统计整个数组在内存中的长度：",[140,5552,5554],{"className":1861,"code":5553,"language":1863,"meta":145,"style":145},"sizeof(arr);\nsizeof(arr[0]);\n",[48,5555,5556,5563],{"__ignoreMap":145},[149,5557,5558,5560],{"class":151,"line":152},[149,5559,1870],{"class":325},[149,5561,5562],{"class":155},"(arr);\n",[149,5564,5565,5567,5570,5572],{"class":151,"line":193},[149,5566,1870],{"class":325},[149,5568,5569],{"class":155},"(arr[",[149,5571,2056],{"class":309},[149,5573,5574],{"class":155},"]);\n",[42,5576,5577],{},[45,5578,5579],{},"2.可以获取数组在内存中的首地址:",[140,5581,5583],{"className":1861,"code":5582,"language":1863,"meta":145,"style":145},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[48,5584,5585,5590,5603,5608],{"__ignoreMap":145},[149,5586,5587],{"class":151,"line":152},[149,5588,5589],{"class":295},"\u002F\u002F查看16进制的首地址\n",[149,5591,5592,5594,5596,5599,5601],{"class":151,"line":193},[149,5593,3094],{"class":155},[149,5595,2902],{"class":325},[149,5597,5598],{"class":155},"arr",[149,5600,2902],{"class":325},[149,5602,2924],{"class":155},[149,5604,5605],{"class":151,"line":235},[149,5606,5607],{"class":295},"\u002F\u002F看10进制数\n",[149,5609,5610,5612,5614,5616,5618,5620,5622,5625,5627,5629,5631],{"class":151,"line":340},[149,5611,3094],{"class":155},[149,5613,2902],{"class":325},[149,5615,319],{"class":155},[149,5617,1875],{"class":325},[149,5619,2292],{"class":155},[149,5621,2216],{"class":325},[149,5623,5624],{"class":155},"arr[",[149,5626,2056],{"class":309},[149,5628,2799],{"class":155},[149,5630,2902],{"class":325},[149,5632,2924],{"class":155},[24,5634,5635],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[42,5637,5638],{},[45,5639,5640],{},"1️⃣五只小猪称体重",[140,5642,5644],{"className":1861,"code":5643,"language":1863,"meta":145,"style":145},"#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",[48,5645,5646,5652,5662,5670,5674,5714,5727,5753,5757,5769,5773,5783,5787,5791,5804,5814],{"__ignoreMap":145},[149,5647,5648,5650],{"class":151,"line":152},[149,5649,3669],{"class":325},[149,5651,3672],{"class":169},[149,5653,5654,5656,5658,5660],{"class":151,"line":193},[149,5655,3677],{"class":325},[149,5657,3680],{"class":325},[149,5659,3683],{"class":162},[149,5661,841],{"class":155},[149,5663,5664,5666,5668],{"class":151,"line":235},[149,5665,1875],{"class":325},[149,5667,3692],{"class":162},[149,5669,3695],{"class":155},[149,5671,5672],{"class":151,"line":340},[149,5673,3270],{"class":155},[149,5675,5676,5678,5681,5683,5685,5687,5689,5692,5694,5697,5699,5701,5703,5706,5708,5711],{"class":151,"line":346},[149,5677,3704],{"class":325},[149,5679,5680],{"class":155}," arr[",[149,5682,2182],{"class":309},[149,5684,2799],{"class":155},[149,5686,166],{"class":325},[149,5688,2756],{"class":155},[149,5690,5691],{"class":309},"300",[149,5693,2241],{"class":155},[149,5695,5696],{"class":309},"350",[149,5698,2241],{"class":155},[149,5700,3442],{"class":309},[149,5702,2241],{"class":155},[149,5704,5705],{"class":309},"400",[149,5707,2241],{"class":155},[149,5709,5710],{"class":309},"250",[149,5712,5713],{"class":155},"};\n",[149,5715,5716,5718,5721,5723,5725],{"class":151,"line":352},[149,5717,3704],{"class":325},[149,5719,5720],{"class":155}," tmp",[149,5722,166],{"class":325},[149,5724,2056],{"class":309},[149,5726,841],{"class":155},[149,5728,5729,5731,5733,5735,5737,5739,5741,5743,5745,5747,5749,5751],{"class":151,"line":1021},[149,5730,4919],{"class":325},[149,5732,3378],{"class":155},[149,5734,1875],{"class":325},[149,5736,4750],{"class":155},[149,5738,166],{"class":325},[149,5740,2056],{"class":309},[149,5742,4757],{"class":155},[149,5744,156],{"class":325},[149,5746,2182],{"class":309},[149,5748,4757],{"class":155},[149,5750,4011],{"class":325},[149,5752,1878],{"class":155},[149,5754,5755],{"class":151,"line":1035},[149,5756,3749],{"class":155},[149,5758,5759,5761,5764,5766],{"class":151,"line":1054},[149,5760,4216],{"class":325},[149,5762,5763],{"class":155},"(tmp",[149,5765,156],{"class":325},[149,5767,5768],{"class":155},"arr[i])\n",[149,5770,5771],{"class":151,"line":1072},[149,5772,4229],{"class":155},[149,5774,5775,5778,5780],{"class":151,"line":1090},[149,5776,5777],{"class":155},"            tmp",[149,5779,166],{"class":325},[149,5781,5782],{"class":155},"arr[i];\n",[149,5784,5785],{"class":151,"line":1633},[149,5786,4248],{"class":155},[149,5788,5789],{"class":151,"line":1644},[149,5790,3906],{"class":155},[149,5792,5793,5795,5797,5800,5802],{"class":151,"line":3348},[149,5794,3275],{"class":155},[149,5796,2902],{"class":325},[149,5798,5799],{"class":155},"tmp",[149,5801,2902],{"class":325},[149,5803,2924],{"class":155},[149,5805,5806,5809,5812],{"class":151,"line":3362},[149,5807,5808],{"class":325},"    return",[149,5810,5811],{"class":309}," 0",[149,5813,841],{"class":155},[149,5815,5816],{"class":151,"line":3367},[149,5817,355],{"class":155},[42,5819,5820],{},[45,5821,5822],{},"2️⃣数组元素逆置",[140,5824,5826],{"className":1861,"code":5825,"language":1863,"meta":145,"style":145},"\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",[48,5827,5828,5833,5839,5849,5857,5861,5896,5912,5944,5957,5962,5967,5979,5989,5999,6004,6013,6023,6028,6033,6060,6064,6080,6084,6095,6104],{"__ignoreMap":145},[149,5829,5830],{"class":151,"line":152},[149,5831,5832],{"class":295},"\u002F\u002F元素逆置\n",[149,5834,5835,5837],{"class":151,"line":193},[149,5836,3669],{"class":325},[149,5838,3672],{"class":169},[149,5840,5841,5843,5845,5847],{"class":151,"line":235},[149,5842,3677],{"class":325},[149,5844,3680],{"class":325},[149,5846,3683],{"class":162},[149,5848,841],{"class":155},[149,5850,5851,5853,5855],{"class":151,"line":340},[149,5852,1875],{"class":325},[149,5854,3692],{"class":162},[149,5856,3695],{"class":155},[149,5858,5859],{"class":151,"line":346},[149,5860,3270],{"class":155},[149,5862,5863,5866,5868,5870,5872,5874,5876,5878,5880,5882,5884,5886,5888,5890,5892,5894],{"class":151,"line":352},[149,5864,5865],{"class":325},"   int",[149,5867,5680],{"class":155},[149,5869,2182],{"class":309},[149,5871,2799],{"class":155},[149,5873,166],{"class":325},[149,5875,2756],{"class":155},[149,5877,830],{"class":309},[149,5879,2241],{"class":155},[149,5881,1045],{"class":309},[149,5883,2241],{"class":155},[149,5885,1939],{"class":309},[149,5887,2241],{"class":155},[149,5889,2157],{"class":309},[149,5891,2241],{"class":155},[149,5893,2182],{"class":309},[149,5895,5713],{"class":155},[149,5897,5898,5900,5903,5905,5907,5909],{"class":151,"line":1021},[149,5899,5865],{"class":325},[149,5901,5902],{"class":155}," start",[149,5904,166],{"class":325},[149,5906,2056],{"class":309},[149,5908,1924],{"class":155},[149,5910,5911],{"class":295},"\u002F\u002F起始下标\n",[149,5913,5914,5916,5919,5922,5925,5928,5930,5932,5935,5937,5939,5941],{"class":151,"line":1035},[149,5915,5865],{"class":325},[149,5917,5918],{"class":155}," end",[149,5920,5921],{"class":325},"=sizeof",[149,5923,5924],{"class":155},"(arr)",[149,5926,5927],{"class":325},"\u002Fsizeof",[149,5929,5569],{"class":155},[149,5931,2056],{"class":309},[149,5933,5934],{"class":155},"])",[149,5936,2395],{"class":325},[149,5938,830],{"class":309},[149,5940,1924],{"class":155},[149,5942,5943],{"class":295},"\u002F\u002F结束下标\n",[149,5945,5946,5949,5952,5954],{"class":151,"line":1054},[149,5947,5948],{"class":325},"   while",[149,5950,5951],{"class":155}," (start",[149,5953,156],{"class":325},[149,5955,5956],{"class":155},"end)\n",[149,5958,5959],{"class":151,"line":1072},[149,5960,5961],{"class":155},"   {\n",[149,5963,5964],{"class":151,"line":1090},[149,5965,5966],{"class":295},"    \u002F\u002F实现元素互换代码\n",[149,5968,5969,5971,5974,5976],{"class":151,"line":1633},[149,5970,3704],{"class":325},[149,5972,5973],{"class":155}," temp",[149,5975,166],{"class":325},[149,5977,5978],{"class":155},"arr[start];\n",[149,5980,5981,5984,5986],{"class":151,"line":1644},[149,5982,5983],{"class":155},"    arr[start]",[149,5985,166],{"class":325},[149,5987,5988],{"class":155},"arr[end];\n",[149,5990,5991,5994,5996],{"class":151,"line":3348},[149,5992,5993],{"class":155},"    arr[end]",[149,5995,166],{"class":325},[149,5997,5998],{"class":155},"temp;\n",[149,6000,6001],{"class":151,"line":3362},[149,6002,6003],{"class":295},"    \u002F\u002F下标更新\n",[149,6005,6006,6009,6011],{"class":151,"line":3367},[149,6007,6008],{"class":155},"    start",[149,6010,4011],{"class":325},[149,6012,841],{"class":155},[149,6014,6015,6018,6021],{"class":151,"line":3373},[149,6016,6017],{"class":155},"    end",[149,6019,6020],{"class":325},"--",[149,6022,841],{"class":155},[149,6024,6025],{"class":151,"line":3394},[149,6026,6027],{"class":155},"   }\n",[149,6029,6030],{"class":151,"line":3399},[149,6031,6032],{"class":295},"   \u002F\u002F输出逆置后的数组\n",[149,6034,6035,6038,6040,6042,6044,6046,6048,6050,6052,6054,6056,6058],{"class":151,"line":3413},[149,6036,6037],{"class":325},"   for",[149,6039,3378],{"class":155},[149,6041,1875],{"class":325},[149,6043,4750],{"class":155},[149,6045,166],{"class":325},[149,6047,2056],{"class":309},[149,6049,4757],{"class":155},[149,6051,156],{"class":325},[149,6053,2182],{"class":309},[149,6055,4757],{"class":155},[149,6057,4011],{"class":325},[149,6059,1878],{"class":155},[149,6061,6062],{"class":151,"line":3418},[149,6063,5961],{"class":155},[149,6065,6066,6068,6070,6073,6075,6078],{"class":151,"line":3447},[149,6067,3275],{"class":155},[149,6069,2902],{"class":325},[149,6071,6072],{"class":155},"arr[i]",[149,6074,2902],{"class":325},[149,6076,6077],{"class":169},"\" \"",[149,6079,841],{"class":155},[149,6081,6082],{"class":151,"line":3452},[149,6083,6027],{"class":155},[149,6085,6086,6089,6091,6093],{"class":151,"line":3469},[149,6087,6088],{"class":162},"   system",[149,6090,319],{"class":155},[149,6092,4027],{"class":169},[149,6094,337],{"class":155},[149,6096,6097,6100,6102],{"class":151,"line":3474},[149,6098,6099],{"class":325},"   return",[149,6101,5811],{"class":309},[149,6103,841],{"class":155},[149,6105,6106],{"class":151,"line":3479},[149,6107,355],{"class":155},[42,6109,6110],{},[45,6111,6112],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[140,6114,6116],{"className":1861,"code":6115,"language":1863,"meta":145,"style":145},"\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",[48,6117,6118,6123,6129,6139,6147,6151,6203,6216,6242,6246,6260,6264,6269,6274,6304,6308,6313,6347,6351,6356,6376,6381,6393,6409,6424,6429,6433,6437,6450,6476,6480,6494,6498,6506],{"__ignoreMap":145},[149,6119,6120],{"class":151,"line":152},[149,6121,6122],{"class":295},"\u002F\u002F冒泡排序,升序\n",[149,6124,6125,6127],{"class":151,"line":193},[149,6126,3669],{"class":325},[149,6128,3672],{"class":169},[149,6130,6131,6133,6135,6137],{"class":151,"line":235},[149,6132,3677],{"class":325},[149,6134,3680],{"class":325},[149,6136,3683],{"class":162},[149,6138,841],{"class":155},[149,6140,6141,6143,6145],{"class":151,"line":340},[149,6142,1875],{"class":325},[149,6144,3692],{"class":162},[149,6146,3695],{"class":155},[149,6148,6149],{"class":151,"line":346},[149,6150,3270],{"class":155},[149,6152,6153,6155,6157,6159,6162,6164,6167,6169,6171,6173,6175,6177,6179,6181,6183,6185,6187,6189,6191,6193,6195,6197,6199,6201],{"class":151,"line":352},[149,6154,3704],{"class":325},[149,6156,5680],{"class":155},[149,6158,2283],{"class":309},[149,6160,6161],{"class":155},"] ",[149,6163,166],{"class":325},[149,6165,6166],{"class":155}," {",[149,6168,2157],{"class":309},[149,6170,2241],{"class":155},[149,6172,1045],{"class":309},[149,6174,2241],{"class":155},[149,6176,2258],{"class":309},[149,6178,2241],{"class":155},[149,6180,2056],{"class":309},[149,6182,2241],{"class":155},[149,6184,2182],{"class":309},[149,6186,2241],{"class":155},[149,6188,2232],{"class":309},[149,6190,2241],{"class":155},[149,6192,830],{"class":309},[149,6194,2241],{"class":155},[149,6196,1939],{"class":309},[149,6198,2241],{"class":155},[149,6200,2283],{"class":309},[149,6202,5713],{"class":155},[149,6204,6205,6207,6209,6212,6214],{"class":151,"line":1021},[149,6206,3275],{"class":155},[149,6208,2902],{"class":325},[149,6210,6211],{"class":169},"\"排序前：\"",[149,6213,2902],{"class":325},[149,6215,2924],{"class":155},[149,6217,6218,6220,6222,6224,6226,6228,6230,6232,6234,6236,6238,6240],{"class":151,"line":1035},[149,6219,4919],{"class":325},[149,6221,3378],{"class":155},[149,6223,1875],{"class":325},[149,6225,4750],{"class":155},[149,6227,166],{"class":325},[149,6229,2056],{"class":309},[149,6231,4757],{"class":155},[149,6233,156],{"class":325},[149,6235,2283],{"class":309},[149,6237,4757],{"class":155},[149,6239,4011],{"class":325},[149,6241,1878],{"class":155},[149,6243,6244],{"class":151,"line":1054},[149,6245,3749],{"class":155},[149,6247,6248,6250,6252,6254,6256,6258],{"class":151,"line":1072},[149,6249,5169],{"class":155},[149,6251,2902],{"class":325},[149,6253,6072],{"class":155},[149,6255,2902],{"class":325},[149,6257,6077],{"class":169},[149,6259,841],{"class":155},[149,6261,6262],{"class":151,"line":1090},[149,6263,3906],{"class":155},[149,6265,6266],{"class":151,"line":1633},[149,6267,6268],{"class":295},"    \u002F\u002F开始冒泡排序\n",[149,6270,6271],{"class":151,"line":1644},[149,6272,6273],{"class":295},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[149,6275,6276,6278,6280,6282,6284,6286,6288,6290,6292,6294,6296,6298,6300,6302],{"class":151,"line":3348},[149,6277,4919],{"class":325},[149,6279,3378],{"class":155},[149,6281,1875],{"class":325},[149,6283,4750],{"class":155},[149,6285,166],{"class":325},[149,6287,2056],{"class":309},[149,6289,4757],{"class":155},[149,6291,156],{"class":325},[149,6293,2283],{"class":309},[149,6295,2395],{"class":325},[149,6297,830],{"class":309},[149,6299,4757],{"class":155},[149,6301,4011],{"class":325},[149,6303,1878],{"class":155},[149,6305,6306],{"class":151,"line":3362},[149,6307,3749],{"class":155},[149,6309,6310],{"class":151,"line":3367},[149,6311,6312],{"class":295},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[149,6314,6315,6317,6319,6321,6323,6325,6327,6329,6331,6333,6335,6337,6339,6341,6343,6345],{"class":151,"line":3373},[149,6316,5121],{"class":325},[149,6318,3378],{"class":155},[149,6320,1875],{"class":325},[149,6322,5128],{"class":155},[149,6324,166],{"class":325},[149,6326,2056],{"class":309},[149,6328,5135],{"class":155},[149,6330,156],{"class":325},[149,6332,2283],{"class":309},[149,6334,2395],{"class":325},[149,6336,2304],{"class":155},[149,6338,2395],{"class":325},[149,6340,830],{"class":309},[149,6342,5135],{"class":155},[149,6344,4011],{"class":325},[149,6346,1878],{"class":155},[149,6348,6349],{"class":151,"line":3394},[149,6350,4229],{"class":155},[149,6352,6353],{"class":151,"line":3399},[149,6354,6355],{"class":295},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[149,6357,6358,6361,6364,6366,6369,6371,6373],{"class":151,"line":3413},[149,6359,6360],{"class":325},"            if",[149,6362,6363],{"class":155},"(arr[j]",[149,6365,2819],{"class":325},[149,6367,6368],{"class":155},"arr[j",[149,6370,2344],{"class":325},[149,6372,830],{"class":309},[149,6374,6375],{"class":155},"])\n",[149,6377,6378],{"class":151,"line":3418},[149,6379,6380],{"class":155},"            {\n",[149,6382,6383,6386,6388,6390],{"class":151,"line":3447},[149,6384,6385],{"class":325},"                int",[149,6387,5973],{"class":155},[149,6389,166],{"class":325},[149,6391,6392],{"class":155},"arr[j];\n",[149,6394,6395,6398,6400,6402,6404,6406],{"class":151,"line":3452},[149,6396,6397],{"class":155},"                arr[j]",[149,6399,166],{"class":325},[149,6401,6368],{"class":155},[149,6403,2344],{"class":325},[149,6405,830],{"class":309},[149,6407,6408],{"class":155},"];\n",[149,6410,6411,6414,6416,6418,6420,6422],{"class":151,"line":3469},[149,6412,6413],{"class":155},"                arr[j",[149,6415,2344],{"class":325},[149,6417,830],{"class":309},[149,6419,2799],{"class":155},[149,6421,166],{"class":325},[149,6423,5998],{"class":155},[149,6425,6426],{"class":151,"line":3474},[149,6427,6428],{"class":155},"            }\n",[149,6430,6431],{"class":151,"line":3479},[149,6432,4248],{"class":155},[149,6434,6435],{"class":151,"line":3484},[149,6436,3906],{"class":155},[149,6438,6439,6441,6443,6446,6448],{"class":151,"line":3498},[149,6440,3275],{"class":155},[149,6442,2902],{"class":325},[149,6444,6445],{"class":169},"\"排序后：\"",[149,6447,2902],{"class":325},[149,6449,2924],{"class":155},[149,6451,6452,6454,6456,6458,6460,6462,6464,6466,6468,6470,6472,6474],{"class":151,"line":3503},[149,6453,4919],{"class":325},[149,6455,3378],{"class":155},[149,6457,1875],{"class":325},[149,6459,4750],{"class":155},[149,6461,166],{"class":325},[149,6463,2056],{"class":309},[149,6465,4757],{"class":155},[149,6467,156],{"class":325},[149,6469,2283],{"class":309},[149,6471,4757],{"class":155},[149,6473,4011],{"class":325},[149,6475,1878],{"class":155},[149,6477,6478],{"class":151,"line":4296},[149,6479,3749],{"class":155},[149,6481,6482,6484,6486,6488,6490,6492],{"class":151,"line":4310},[149,6483,5169],{"class":155},[149,6485,2902],{"class":325},[149,6487,6072],{"class":155},[149,6489,2902],{"class":325},[149,6491,6077],{"class":169},[149,6493,841],{"class":155},[149,6495,6496],{"class":151,"line":4318},[149,6497,3906],{"class":155},[149,6499,6500,6502,6504],{"class":151,"line":4323},[149,6501,5808],{"class":325},[149,6503,5811],{"class":309},[149,6505,841],{"class":155},[149,6507,6508],{"class":151,"line":4329},[149,6509,355],{"class":155},[19,6511,6513],{"id":6512},"_172二维数组","1.7.2二维数组",[125,6515,6516],{},[45,6517,6518],{},"二维数组的四种定义方式",[2003,6520,6521,6530],{},[2006,6522,6523],{},[2009,6524,6525,6528],{},[2012,6526,6527],{},"序号",[2012,6529,5499],{},[2049,6531,6532,6542,6551,6560,6569],{},[2009,6533,6534,6536],{},[2054,6535,830],{},[2054,6537,6538,6539,1924],{},"数据类型 数组名[行数]",[149,6540,6541],{},"列数",[2009,6543,6544,6546],{},[2054,6545,1045],{},[2054,6547,6538,6548,6550],{},[149,6549,6541],{},"={ {数据1,数据2}，{数据3，数据4}... }",[2009,6552,6553,6555],{},[2054,6554,1939],{},[2054,6556,6538,6557,6559],{},[149,6558,6541],{},"={数据1,数据2,数据3...}",[2009,6561,6562,6564],{},[2054,6563,2157],{},[2054,6565,6566,6567,6559],{},"数据类型 数组名[]",[149,6568,6541],{},[2009,6570,6571,6574],{},[2054,6572,6573],{},"注意：不能只省略列数",[2054,6575],{},[125,6577,6578],{"start":193},[45,6579,6580],{},"二维数组数组名",[42,6582,6583,6586],{},[45,6584,6585],{},"1.查看二维数组所占内存空间",[45,6587,6588],{},"2.获取二维数组首地址",[24,6590,6591],{},"已知二维数组，求二维数组的行数与列数",[140,6593,6595],{"className":1861,"code":6594,"language":1863,"meta":145,"style":145},"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",[48,6596,6597,6605,6609,6627,6631,6649,6665,6670,6695,6728],{"__ignoreMap":145},[149,6598,6599,6601,6603],{"class":151,"line":152},[149,6600,1875],{"class":325},[149,6602,3692],{"class":162},[149,6604,3695],{"class":155},[149,6606,6607],{"class":151,"line":193},[149,6608,3270],{"class":155},[149,6610,6611,6613,6615,6617,6620,6622,6624],{"class":151,"line":235},[149,6612,3704],{"class":325},[149,6614,5680],{"class":155},[149,6616,1045],{"class":309},[149,6618,6619],{"class":155},"][",[149,6621,1939],{"class":309},[149,6623,2799],{"class":155},[149,6625,6626],{"class":325},"=\n",[149,6628,6629],{"class":151,"line":340},[149,6630,3749],{"class":155},[149,6632,6633,6636,6638,6640,6642,6644,6646],{"class":151,"line":346},[149,6634,6635],{"class":155},"        {",[149,6637,830],{"class":309},[149,6639,2241],{"class":155},[149,6641,1045],{"class":309},[149,6643,2241],{"class":155},[149,6645,1939],{"class":309},[149,6647,6648],{"class":155},"},\n",[149,6650,6651,6653,6655,6657,6659,6661,6663],{"class":151,"line":352},[149,6652,6635],{"class":155},[149,6654,2157],{"class":309},[149,6656,2241],{"class":155},[149,6658,2182],{"class":309},[149,6660,2241],{"class":155},[149,6662,2207],{"class":309},[149,6664,355],{"class":155},[149,6666,6667],{"class":151,"line":1021},[149,6668,6669],{"class":155},"    };\n",[149,6671,6672,6674,6676,6679,6681,6683,6685,6687,6689,6691,6693],{"class":151,"line":1035},[149,6673,3275],{"class":155},[149,6675,2902],{"class":325},[149,6677,6678],{"class":169},"\"二维数组的行数\"",[149,6680,3097],{"class":325},[149,6682,5924],{"class":155},[149,6684,5927],{"class":325},[149,6686,5569],{"class":155},[149,6688,2056],{"class":309},[149,6690,5934],{"class":155},[149,6692,2902],{"class":325},[149,6694,2924],{"class":155},[149,6696,6697,6699,6701,6704,6706,6708,6710,6712,6714,6716,6718,6720,6722,6724,6726],{"class":151,"line":1054},[149,6698,3275],{"class":155},[149,6700,2902],{"class":325},[149,6702,6703],{"class":169},"\"二维数组的列数\"",[149,6705,3097],{"class":325},[149,6707,5569],{"class":155},[149,6709,2056],{"class":309},[149,6711,5934],{"class":155},[149,6713,5927],{"class":325},[149,6715,5569],{"class":155},[149,6717,2056],{"class":309},[149,6719,6619],{"class":155},[149,6721,2056],{"class":309},[149,6723,5934],{"class":155},[149,6725,2902],{"class":325},[149,6727,2924],{"class":155},[149,6729,6730],{"class":151,"line":1072},[149,6731,355],{"class":155},[24,6733,6734],{},"查看二维数组首地址",[140,6736,6738],{"className":1861,"code":6737,"language":1863,"meta":145,"style":145},"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",[48,6739,6740,6757,6783,6808],{"__ignoreMap":145},[149,6741,6742,6744,6746,6749,6751,6753,6755],{"class":151,"line":152},[149,6743,3094],{"class":155},[149,6745,2902],{"class":325},[149,6747,6748],{"class":169},"\"二维数组首地址：\"",[149,6750,2902],{"class":325},[149,6752,5598],{"class":155},[149,6754,2902],{"class":325},[149,6756,2924],{"class":155},[149,6758,6759,6761,6763,6766,6768,6770,6772,6775,6777,6779,6781],{"class":151,"line":193},[149,6760,3094],{"class":155},[149,6762,2902],{"class":325},[149,6764,6765],{"class":169},"\"二维数组第一行的首地址：\"",[149,6767,2902],{"class":325},[149,6769,319],{"class":155},[149,6771,1875],{"class":325},[149,6773,6774],{"class":155},")arr[",[149,6776,2056],{"class":309},[149,6778,2799],{"class":155},[149,6780,2902],{"class":325},[149,6782,2924],{"class":155},[149,6784,6785,6787,6789,6792,6794,6796,6798,6800,6802,6804,6806],{"class":151,"line":235},[149,6786,3094],{"class":155},[149,6788,2902],{"class":325},[149,6790,6791],{"class":169},"\"二维数组第二行的首地址：\"",[149,6793,2902],{"class":325},[149,6795,319],{"class":155},[149,6797,1875],{"class":325},[149,6799,6774],{"class":155},[149,6801,830],{"class":309},[149,6803,2799],{"class":155},[149,6805,2902],{"class":325},[149,6807,2924],{"class":155},[149,6809,6810,6812,6814,6817,6819,6821,6823,6825,6827,6829,6831,6833,6835,6837,6839,6841],{"class":151,"line":340},[149,6811,3094],{"class":155},[149,6813,2902],{"class":325},[149,6815,6816],{"class":169},"\"二维数组第一个元素的首地址:\"",[149,6818,2902],{"class":325},[149,6820,319],{"class":155},[149,6822,1875],{"class":325},[149,6824,2292],{"class":155},[149,6826,2216],{"class":325},[149,6828,5624],{"class":155},[149,6830,2056],{"class":309},[149,6832,6619],{"class":155},[149,6834,2056],{"class":309},[149,6836,2799],{"class":155},[149,6838,2902],{"class":325},[149,6840,2967],{"class":155},[149,6842,6843],{"class":295},"\u002F\u002F对于数，要加取址符\n",[1783,6845,6846],{},"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":145,"searchDepth":193,"depth":193,"links":6848},[6849,6850,6851,6859,6860,6866,6871],{"id":1816,"depth":193,"text":1817},{"id":1823,"depth":193,"text":1824},{"id":1838,"depth":193,"text":1839,"children":6852},[6853,6854,6855,6856,6857,6858],{"id":1842,"depth":235,"text":1843},{"id":1888,"depth":235,"text":1889},{"id":1952,"depth":235,"text":1953},{"id":2883,"depth":235,"text":2884},{"id":2973,"depth":235,"text":2974},{"id":3068,"depth":235,"text":3069},{"id":3110,"depth":193,"text":3111},{"id":3178,"depth":193,"text":3179,"children":6861},[6862,6863,6864,6865],{"id":3182,"depth":235,"text":3183},{"id":3203,"depth":235,"text":3204},{"id":3212,"depth":235,"text":3213},{"id":3221,"depth":235,"text":3222},{"id":3230,"depth":193,"text":3231,"children":6867},[6868,6869,6870],{"id":3234,"depth":235,"text":3235},{"id":3924,"depth":235,"text":3925},{"id":5339,"depth":235,"text":5340},{"id":5480,"depth":193,"text":5481,"children":6872},[6873,6874],{"id":5484,"depth":235,"text":5485},{"id":6512,"depth":235,"text":6513},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1808,"description":145},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6881,"title":6882,"body":6883,"description":145,"extension":1798,"meta":7981,"navigation":1800,"path":7982,"seo":7983,"stem":7984,"__hash__":7985},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6884,"toc":7973},[6885,6888,6892,6900,6906,6909,6975,6979,6982,7058,7062,7065,7068,7071,7284,7288,7293,7357,7362,7429,7434,7525,7528,7633,7637,7640,7646,7790,7794,7797,7811,7814,7859,7862,7970],[10,6886,6882],{"id":6887},"_2函数",[14,6889,6891],{"id":6890},"_21函数概述","2.1函数概述",[125,6893,6894,6897],{},[45,6895,6896],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[45,6898,6899],{},"语法：",[140,6901,6904],{"className":6902,"code":6903,"language":1655,"meta":145},[1653],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[48,6905,6903],{"__ignoreMap":145},[24,6907,6908],{},"小案例",[140,6910,6912],{"className":1861,"code":6911,"language":1863,"meta":145,"style":145},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[48,6913,6914,6919,6943,6947,6964,6971],{"__ignoreMap":145},[149,6915,6916],{"class":151,"line":152},[149,6917,6918],{"class":295},"\u002F\u002Fnum1,num2形参\n",[149,6920,6921,6923,6926,6928,6930,6934,6936,6938,6941],{"class":151,"line":193},[149,6922,1875],{"class":325},[149,6924,6925],{"class":162}," add",[149,6927,319],{"class":155},[149,6929,1875],{"class":325},[149,6931,6933],{"class":6932},"s4XuR"," num1",[149,6935,2241],{"class":155},[149,6937,1875],{"class":325},[149,6939,6940],{"class":6932}," num2",[149,6942,1878],{"class":155},[149,6944,6945],{"class":151,"line":235},[149,6946,3270],{"class":155},[149,6948,6949,6951,6954,6956,6959,6961],{"class":151,"line":340},[149,6950,3704],{"class":325},[149,6952,6953],{"class":155}," sum",[149,6955,166],{"class":325},[149,6957,6958],{"class":155},"num1",[149,6960,2344],{"class":325},[149,6962,6963],{"class":155},"num2;\n",[149,6965,6966,6968],{"class":151,"line":346},[149,6967,5808],{"class":325},[149,6969,6970],{"class":155}," sum;\n",[149,6972,6973],{"class":151,"line":352},[149,6974,355],{"class":155},[14,6976,6978],{"id":6977},"_22函数调用","2.2函数调用",[24,6980,6981],{},"调用刚刚写的求和函数",[140,6983,6985],{"className":1861,"code":6984,"language":1863,"meta":145,"style":145},"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",[48,6986,6987,6995,6999,7004,7016,7028,7037,7042,7054],{"__ignoreMap":145},[149,6988,6989,6991,6993],{"class":151,"line":152},[149,6990,1875],{"class":325},[149,6992,3692],{"class":162},[149,6994,3695],{"class":155},[149,6996,6997],{"class":151,"line":193},[149,6998,3270],{"class":155},[149,7000,7001],{"class":151,"line":235},[149,7002,7003],{"class":295},"    \u002F\u002Fa,b实参\n",[149,7005,7006,7008,7010,7012,7014],{"class":151,"line":340},[149,7007,3704],{"class":325},[149,7009,3123],{"class":155},[149,7011,166],{"class":325},[149,7013,2056],{"class":309},[149,7015,841],{"class":155},[149,7017,7018,7020,7022,7024,7026],{"class":151,"line":346},[149,7019,3704],{"class":325},[149,7021,4551],{"class":155},[149,7023,166],{"class":325},[149,7025,2056],{"class":309},[149,7027,841],{"class":155},[149,7029,7030,7032,7034],{"class":151,"line":352},[149,7031,3731],{"class":155},[149,7033,3154],{"class":325},[149,7035,7036],{"class":155},"a,b;\n",[149,7038,7039],{"class":151,"line":1021},[149,7040,7041],{"class":295},"    \u002F\u002F调用函数时，实参值传给了形参\n",[149,7043,7044,7046,7048,7051],{"class":151,"line":1035},[149,7045,3275],{"class":155},[149,7047,2902],{"class":325},[149,7049,7050],{"class":162},"add",[149,7052,7053],{"class":155},"(a,b);\n",[149,7055,7056],{"class":151,"line":1054},[149,7057,355],{"class":155},[14,7059,7061],{"id":7060},"_23值传递","2.3值传递",[24,7063,7064],{},"值传递就是函数调用时实参将数值传给形参",[24,7066,7067],{},"值传递时，如果形参发生任何改变，不会影响实参",[24,7069,7070],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[140,7072,7074],{"className":1861,"code":7073,"language":1863,"meta":145,"style":145},"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",[48,7075,7076,7098,7102,7115,7132,7150,7161,7170,7179,7192,7208,7224,7233,7237,7245,7249,7261,7273,7280],{"__ignoreMap":145},[149,7077,7078,7081,7084,7086,7088,7090,7092,7094,7096],{"class":151,"line":152},[149,7079,7080],{"class":325},"void",[149,7082,7083],{"class":162}," swap",[149,7085,319],{"class":155},[149,7087,1875],{"class":325},[149,7089,6933],{"class":6932},[149,7091,2241],{"class":155},[149,7093,1875],{"class":325},[149,7095,6940],{"class":6932},[149,7097,1878],{"class":155},[149,7099,7100],{"class":151,"line":193},[149,7101,3270],{"class":155},[149,7103,7104,7106,7108,7111,7113],{"class":151,"line":235},[149,7105,3275],{"class":155},[149,7107,2902],{"class":325},[149,7109,7110],{"class":169},"\"交换前：\"",[149,7112,2902],{"class":325},[149,7114,2924],{"class":155},[149,7116,7117,7119,7121,7124,7126,7128,7130],{"class":151,"line":340},[149,7118,3275],{"class":155},[149,7120,2902],{"class":325},[149,7122,7123],{"class":169},"\"num1=\"",[149,7125,2902],{"class":325},[149,7127,6958],{"class":155},[149,7129,2902],{"class":325},[149,7131,2924],{"class":155},[149,7133,7134,7136,7138,7141,7143,7146,7148],{"class":151,"line":346},[149,7135,3275],{"class":155},[149,7137,2902],{"class":325},[149,7139,7140],{"class":169},"\"num2=\"",[149,7142,2902],{"class":325},[149,7144,7145],{"class":155},"num2",[149,7147,2902],{"class":325},[149,7149,2924],{"class":155},[149,7151,7152,7154,7156,7158],{"class":151,"line":352},[149,7153,3704],{"class":325},[149,7155,5973],{"class":155},[149,7157,166],{"class":325},[149,7159,7160],{"class":155},"num1;\n",[149,7162,7163,7166,7168],{"class":151,"line":1021},[149,7164,7165],{"class":155},"    num1",[149,7167,166],{"class":325},[149,7169,6963],{"class":155},[149,7171,7172,7175,7177],{"class":151,"line":1035},[149,7173,7174],{"class":155},"    num2",[149,7176,166],{"class":325},[149,7178,5998],{"class":155},[149,7180,7181,7183,7185,7188,7190],{"class":151,"line":1054},[149,7182,3275],{"class":155},[149,7184,2902],{"class":325},[149,7186,7187],{"class":169},"\"交换后：\"",[149,7189,2902],{"class":325},[149,7191,2924],{"class":155},[149,7193,7194,7196,7198,7200,7202,7204,7206],{"class":151,"line":1072},[149,7195,3275],{"class":155},[149,7197,2902],{"class":325},[149,7199,7123],{"class":169},[149,7201,2902],{"class":325},[149,7203,6958],{"class":155},[149,7205,2902],{"class":325},[149,7207,2924],{"class":155},[149,7209,7210,7212,7214,7216,7218,7220,7222],{"class":151,"line":1090},[149,7211,3275],{"class":155},[149,7213,2902],{"class":325},[149,7215,7140],{"class":169},[149,7217,2902],{"class":325},[149,7219,7145],{"class":155},[149,7221,2902],{"class":325},[149,7223,2924],{"class":155},[149,7225,7226,7228,7230],{"class":151,"line":1633},[149,7227,5808],{"class":325},[149,7229,1924],{"class":155},[149,7231,7232],{"class":295},"\u002F\u002F或者不写\n",[149,7234,7235],{"class":151,"line":1644},[149,7236,355],{"class":155},[149,7238,7239,7241,7243],{"class":151,"line":3348},[149,7240,1875],{"class":325},[149,7242,3692],{"class":162},[149,7244,3695],{"class":155},[149,7246,7247],{"class":151,"line":3362},[149,7248,3270],{"class":155},[149,7250,7251,7253,7255,7257,7259],{"class":151,"line":3367},[149,7252,3704],{"class":325},[149,7254,3123],{"class":155},[149,7256,166],{"class":325},[149,7258,2309],{"class":309},[149,7260,841],{"class":155},[149,7262,7263,7265,7267,7269,7271],{"class":151,"line":3373},[149,7264,3704],{"class":325},[149,7266,4551],{"class":155},[149,7268,166],{"class":325},[149,7270,2561],{"class":309},[149,7272,841],{"class":155},[149,7274,7275,7278],{"class":151,"line":3394},[149,7276,7277],{"class":162},"    swap",[149,7279,7053],{"class":155},[149,7281,7282],{"class":151,"line":3399},[149,7283,355],{"class":155},[14,7285,7287],{"id":7286},"_24函数的常见形式","2.4函数的常见形式",[125,7289,7290],{},[45,7291,7292],{},"无参无返",[140,7294,7296],{"className":1861,"code":7295,"language":1863,"meta":145,"style":145},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[48,7297,7298,7307,7311,7324,7328,7336,7340,7345,7353],{"__ignoreMap":145},[149,7299,7300,7302,7305],{"class":151,"line":152},[149,7301,7080],{"class":325},[149,7303,7304],{"class":162}," test01",[149,7306,3695],{"class":155},[149,7308,7309],{"class":151,"line":193},[149,7310,3270],{"class":155},[149,7312,7313,7315,7317,7320,7322],{"class":151,"line":235},[149,7314,3275],{"class":155},[149,7316,2902],{"class":325},[149,7318,7319],{"class":169},"\"你好\"",[149,7321,2902],{"class":325},[149,7323,2924],{"class":155},[149,7325,7326],{"class":151,"line":340},[149,7327,355],{"class":155},[149,7329,7330,7332,7334],{"class":151,"line":346},[149,7331,1875],{"class":325},[149,7333,3692],{"class":162},[149,7335,3695],{"class":155},[149,7337,7338],{"class":151,"line":352},[149,7339,3270],{"class":155},[149,7341,7342],{"class":151,"line":1021},[149,7343,7344],{"class":295},"    \u002F\u002F函数调用\n",[149,7346,7347,7350],{"class":151,"line":1035},[149,7348,7349],{"class":162},"    test01",[149,7351,7352],{"class":155},"();\n",[149,7354,7355],{"class":151,"line":1054},[149,7356,355],{"class":155},[125,7358,7359],{"start":193},[45,7360,7361],{},"有参无返",[140,7363,7365],{"className":1861,"code":7364,"language":1863,"meta":145,"style":145},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[48,7366,7367,7382,7386,7398,7402,7410,7414,7425],{"__ignoreMap":145},[149,7368,7369,7371,7374,7376,7378,7380],{"class":151,"line":152},[149,7370,7080],{"class":325},[149,7372,7373],{"class":162}," test02",[149,7375,319],{"class":155},[149,7377,1875],{"class":325},[149,7379,3123],{"class":6932},[149,7381,1878],{"class":155},[149,7383,7384],{"class":151,"line":193},[149,7385,3270],{"class":155},[149,7387,7388,7390,7392,7394,7396],{"class":151,"line":235},[149,7389,3275],{"class":155},[149,7391,2902],{"class":325},[149,7393,7319],{"class":169},[149,7395,2902],{"class":325},[149,7397,2924],{"class":155},[149,7399,7400],{"class":151,"line":340},[149,7401,355],{"class":155},[149,7403,7404,7406,7408],{"class":151,"line":346},[149,7405,1875],{"class":325},[149,7407,3692],{"class":162},[149,7409,3695],{"class":155},[149,7411,7412],{"class":151,"line":352},[149,7413,3270],{"class":155},[149,7415,7416,7419,7421,7423],{"class":151,"line":1021},[149,7417,7418],{"class":162},"    test02",[149,7420,319],{"class":155},[149,7422,322],{"class":309},[149,7424,337],{"class":155},[149,7426,7427],{"class":151,"line":1035},[149,7428,355],{"class":155},[125,7430,7431],{"start":235},[45,7432,7433],{},"无参有返",[140,7435,7437],{"className":1861,"code":7436,"language":1863,"meta":145,"style":145},"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",[48,7438,7439,7448,7452,7464,7473,7477,7485,7489,7502,7521],{"__ignoreMap":145},[149,7440,7441,7443,7446],{"class":151,"line":152},[149,7442,1875],{"class":325},[149,7444,7445],{"class":162}," test03",[149,7447,3695],{"class":155},[149,7449,7450],{"class":151,"line":193},[149,7451,3270],{"class":155},[149,7453,7454,7456,7458,7460,7462],{"class":151,"line":235},[149,7455,3275],{"class":155},[149,7457,2902],{"class":325},[149,7459,7319],{"class":169},[149,7461,2902],{"class":325},[149,7463,2924],{"class":155},[149,7465,7466,7468,7471],{"class":151,"line":340},[149,7467,5808],{"class":325},[149,7469,7470],{"class":309}," 100",[149,7472,841],{"class":155},[149,7474,7475],{"class":151,"line":346},[149,7476,355],{"class":155},[149,7478,7479,7481,7483],{"class":151,"line":352},[149,7480,1875],{"class":325},[149,7482,3692],{"class":162},[149,7484,3695],{"class":155},[149,7486,7487],{"class":151,"line":1021},[149,7488,3270],{"class":155},[149,7490,7491,7493,7495,7497,7500],{"class":151,"line":1035},[149,7492,3704],{"class":325},[149,7494,6933],{"class":155},[149,7496,166],{"class":325},[149,7498,7499],{"class":162},"test03",[149,7501,7352],{"class":155},[149,7503,7504,7506,7508,7510,7512,7514,7516,7518],{"class":151,"line":1054},[149,7505,3275],{"class":155},[149,7507,2902],{"class":325},[149,7509,7123],{"class":169},[149,7511,2902],{"class":325},[149,7513,6958],{"class":155},[149,7515,2902],{"class":325},[149,7517,2967],{"class":155},[149,7519,7520],{"class":295}," \u002F\u002F100\n",[149,7522,7523],{"class":151,"line":1072},[149,7524,355],{"class":155},[24,7526,7527],{},"4.有参有返",[140,7529,7531],{"className":1861,"code":7530,"language":1863,"meta":145,"style":145},"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",[48,7532,7533,7548,7552,7565,7571,7575,7584,7588,7600,7614,7629],{"__ignoreMap":145},[149,7534,7535,7537,7540,7542,7544,7546],{"class":151,"line":152},[149,7536,1875],{"class":325},[149,7538,7539],{"class":162}," test04",[149,7541,319],{"class":155},[149,7543,1875],{"class":325},[149,7545,3123],{"class":6932},[149,7547,1878],{"class":155},[149,7549,7550],{"class":151,"line":193},[149,7551,3270],{"class":155},[149,7553,7554,7556,7558,7561,7563],{"class":151,"line":235},[149,7555,3275],{"class":155},[149,7557,2902],{"class":325},[149,7559,7560],{"class":169},"\"hello\"",[149,7562,2902],{"class":325},[149,7564,2924],{"class":155},[149,7566,7567,7569],{"class":151,"line":340},[149,7568,5808],{"class":325},[149,7570,3157],{"class":155},[149,7572,7573],{"class":151,"line":346},[149,7574,355],{"class":155},[149,7576,7577,7579,7582],{"class":151,"line":352},[149,7578,1875],{"class":325},[149,7580,7581],{"class":162}," mian",[149,7583,3695],{"class":155},[149,7585,7586],{"class":151,"line":1021},[149,7587,3270],{"class":155},[149,7589,7590,7592,7594,7596,7598],{"class":151,"line":1035},[149,7591,3704],{"class":325},[149,7593,4551],{"class":155},[149,7595,166],{"class":325},[149,7597,830],{"class":309},[149,7599,841],{"class":155},[149,7601,7602,7604,7606,7608,7611],{"class":151,"line":1054},[149,7603,3704],{"class":325},[149,7605,4567],{"class":155},[149,7607,166],{"class":325},[149,7609,7610],{"class":162},"test04",[149,7612,7613],{"class":155},"(b);\n",[149,7615,7616,7618,7620,7622,7624,7626],{"class":151,"line":1072},[149,7617,3275],{"class":155},[149,7619,2902],{"class":325},[149,7621,2152],{"class":155},[149,7623,2902],{"class":325},[149,7625,2967],{"class":155},[149,7627,7628],{"class":295}," \u002F\u002F1\n",[149,7630,7631],{"class":151,"line":1090},[149,7632,355],{"class":155},[14,7634,7636],{"id":7635},"_25函数的声明","2.5函数的声明",[24,7638,7639],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[24,7641,7642,7643],{},"函数的",[31,7644,7645],{},"声明可以多次，但是函数的定义只能有一次",[140,7647,7649],{"className":1861,"code":7648,"language":1863,"meta":145,"style":145},"\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",[48,7650,7651,7656,7661,7686,7695,7699,7711,7723,7739,7743,7763,7767,7786],{"__ignoreMap":145},[149,7652,7653],{"class":151,"line":152},[149,7654,7655],{"class":295},"\u002F\u002F函数声明\n",[149,7657,7658],{"class":151,"line":193},[149,7659,7660],{"class":295},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[149,7662,7663,7665,7668,7670,7672,7674,7676,7678,7680,7683],{"class":151,"line":235},[149,7664,1875],{"class":325},[149,7666,7667],{"class":162}," max",[149,7669,319],{"class":155},[149,7671,1875],{"class":325},[149,7673,3123],{"class":6932},[149,7675,2241],{"class":155},[149,7677,1875],{"class":325},[149,7679,4551],{"class":6932},[149,7681,7682],{"class":155},");",[149,7684,7685],{"class":295},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[149,7687,7688,7690,7692],{"class":151,"line":340},[149,7689,1875],{"class":325},[149,7691,3692],{"class":162},[149,7693,7694],{"class":155},"() \n",[149,7696,7697],{"class":151,"line":346},[149,7698,3270],{"class":155},[149,7700,7701,7703,7705,7707,7709],{"class":151,"line":352},[149,7702,3704],{"class":325},[149,7704,3123],{"class":155},[149,7706,166],{"class":325},[149,7708,2309],{"class":309},[149,7710,841],{"class":155},[149,7712,7713,7715,7717,7719,7721],{"class":151,"line":1021},[149,7714,3704],{"class":325},[149,7716,4551],{"class":155},[149,7718,166],{"class":325},[149,7720,2561],{"class":309},[149,7722,841],{"class":155},[149,7724,7725,7727,7729,7732,7735,7737],{"class":151,"line":1035},[149,7726,3275],{"class":155},[149,7728,2902],{"class":325},[149,7730,7731],{"class":162},"max",[149,7733,7734],{"class":155},"(a,b)",[149,7736,2902],{"class":325},[149,7738,2924],{"class":155},[149,7740,7741],{"class":151,"line":1054},[149,7742,355],{"class":155},[149,7744,7745,7747,7749,7751,7753,7755,7757,7759,7761],{"class":151,"line":1072},[149,7746,1875],{"class":325},[149,7748,7667],{"class":162},[149,7750,319],{"class":155},[149,7752,1875],{"class":325},[149,7754,3123],{"class":6932},[149,7756,2241],{"class":155},[149,7758,1875],{"class":325},[149,7760,4551],{"class":6932},[149,7762,1878],{"class":155},[149,7764,7765],{"class":151,"line":1090},[149,7766,3270],{"class":155},[149,7768,7769,7771,7773,7775,7777,7779,7781,7783],{"class":151,"line":1633},[149,7770,5808],{"class":325},[149,7772,3123],{"class":155},[149,7774,2819],{"class":325},[149,7776,2127],{"class":155},[149,7778,2845],{"class":325},[149,7780,2102],{"class":155},[149,7782,2720],{"class":325},[149,7784,7785],{"class":155},"b;\n",[149,7787,7788],{"class":151,"line":1644},[149,7789,355],{"class":155},[14,7791,7793],{"id":7792},"_26函数的分文件编写","2.6函数的分文件编写",[24,7795,7796],{},"4个步骤：",[42,7798,7799,7802,7805,7808],{},[45,7800,7801],{},"1.创建后缀名为.h的头文件",[45,7803,7804],{},"2.创建后缀名为.cpp的源文件",[45,7806,7807],{},"3.在头文件中写函数的定义",[45,7809,7810],{},"4.在源文件中写函数的定义\n示例：",[24,7812,7813],{},"头文件：swap.h",[140,7815,7817],{"className":1861,"code":7816,"language":1863,"meta":145,"style":145},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[48,7818,7819,7825,7835,7839],{"__ignoreMap":145},[149,7820,7821,7823],{"class":151,"line":152},[149,7822,3669],{"class":325},[149,7824,3672],{"class":169},[149,7826,7827,7829,7831,7833],{"class":151,"line":193},[149,7828,3677],{"class":325},[149,7830,3680],{"class":325},[149,7832,3683],{"class":162},[149,7834,841],{"class":155},[149,7836,7837],{"class":151,"line":235},[149,7838,7655],{"class":295},[149,7840,7841,7843,7845,7847,7849,7851,7853,7855,7857],{"class":151,"line":340},[149,7842,7080],{"class":325},[149,7844,7083],{"class":162},[149,7846,319],{"class":155},[149,7848,1875],{"class":325},[149,7850,3123],{"class":6932},[149,7852,2241],{"class":155},[149,7854,1875],{"class":325},[149,7856,4551],{"class":6932},[149,7858,337],{"class":155},[24,7860,7861],{},"源文件：swap.cpp",[140,7863,7865],{"className":1861,"code":7864,"language":1863,"meta":145,"style":145},"#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",[48,7866,7867,7874,7879,7899,7903,7914,7923,7932,7949,7966],{"__ignoreMap":145},[149,7868,7869,7871],{"class":151,"line":152},[149,7870,3669],{"class":325},[149,7872,7873],{"class":169}," \"swap.h\"\n",[149,7875,7876],{"class":151,"line":193},[149,7877,7878],{"class":295},"\u002F\u002F函数的定义\n",[149,7880,7881,7883,7885,7887,7889,7891,7893,7895,7897],{"class":151,"line":235},[149,7882,7080],{"class":325},[149,7884,7083],{"class":162},[149,7886,319],{"class":155},[149,7888,1875],{"class":325},[149,7890,3123],{"class":6932},[149,7892,2241],{"class":155},[149,7894,1875],{"class":325},[149,7896,4551],{"class":6932},[149,7898,1878],{"class":155},[149,7900,7901],{"class":151,"line":340},[149,7902,3270],{"class":155},[149,7904,7905,7907,7909,7911],{"class":151,"line":346},[149,7906,3704],{"class":325},[149,7908,5973],{"class":155},[149,7910,166],{"class":325},[149,7912,7913],{"class":155},"a;\n",[149,7915,7916,7919,7921],{"class":151,"line":352},[149,7917,7918],{"class":155},"    a",[149,7920,166],{"class":325},[149,7922,7785],{"class":155},[149,7924,7925,7928,7930],{"class":151,"line":1021},[149,7926,7927],{"class":155},"    b",[149,7929,166],{"class":325},[149,7931,5998],{"class":155},[149,7933,7934,7936,7938,7941,7943,7945,7947],{"class":151,"line":1035},[149,7935,3275],{"class":155},[149,7937,2902],{"class":325},[149,7939,7940],{"class":169},"\"a=\"",[149,7942,2902],{"class":325},[149,7944,2102],{"class":155},[149,7946,2902],{"class":325},[149,7948,2924],{"class":155},[149,7950,7951,7953,7955,7958,7960,7962,7964],{"class":151,"line":1054},[149,7952,3275],{"class":155},[149,7954,2902],{"class":325},[149,7956,7957],{"class":169},"\"b=\"",[149,7959,2902],{"class":325},[149,7961,2127],{"class":155},[149,7963,2902],{"class":325},[149,7965,2924],{"class":155},[149,7967,7968],{"class":151,"line":1072},[149,7969,355],{"class":155},[1783,7971,7972],{},"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":145,"searchDepth":193,"depth":193,"links":7974},[7975,7976,7977,7978,7979,7980],{"id":6890,"depth":193,"text":6891},{"id":6977,"depth":193,"text":6978},{"id":7060,"depth":193,"text":7061},{"id":7286,"depth":193,"text":7287},{"id":7635,"depth":193,"text":7636},{"id":7792,"depth":193,"text":7793},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6882,"description":145},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7987,"title":7988,"body":7989,"description":7996,"extension":1798,"meta":9400,"navigation":1800,"path":9401,"seo":9402,"stem":9403,"__hash__":9404},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7990,"toc":9390},[7991,7994,7997,8001,8163,8167,8170,8173,8176,8179,8319,8323,8326,8329,8332,8397,8401,8406,8473,8476,8480,8483,8494,8499,8519,8522,8527,8546,8549,8553,8572,8575,8579,8814,8818,8821,8824,8827,8989,8992,8996,8999,9005,9387],[10,7992,7988],{"id":7993},"_3指针",[24,7995,7996],{},"通过指针保存一个地址，指针就是个地址",[14,7998,8000],{"id":7999},"_31定义指针","3.1定义指针",[140,8002,8004],{"className":1861,"code":8003,"language":1863,"meta":145,"style":145},"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",[48,8005,8006,8014,8018,8023,8035,8040,8048,8058,8076,8096,8100,8105,8110,8115,8129,8145,8159],{"__ignoreMap":145},[149,8007,8008,8010,8012],{"class":151,"line":152},[149,8009,1875],{"class":325},[149,8011,3692],{"class":162},[149,8013,3695],{"class":155},[149,8015,8016],{"class":151,"line":193},[149,8017,3270],{"class":155},[149,8019,8020],{"class":151,"line":235},[149,8021,8022],{"class":295},"    \u002F\u002F1.定义指针\n",[149,8024,8025,8027,8029,8031,8033],{"class":151,"line":340},[149,8026,3704],{"class":325},[149,8028,3123],{"class":155},[149,8030,166],{"class":325},[149,8032,2309],{"class":309},[149,8034,841],{"class":155},[149,8036,8037],{"class":151,"line":346},[149,8038,8039],{"class":295},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[149,8041,8042,8045],{"class":151,"line":352},[149,8043,8044],{"class":325},"    int*",[149,8046,8047],{"class":155},"p;\n",[149,8049,8050,8053,8056],{"class":151,"line":1021},[149,8051,8052],{"class":155},"    p",[149,8054,8055],{"class":325},"=&",[149,8057,7913],{"class":155},[149,8059,8060,8062,8064,8067,8070,8072,8074],{"class":151,"line":1035},[149,8061,3275],{"class":155},[149,8063,2902],{"class":325},[149,8065,8066],{"class":169},"\"a的地址为：\"",[149,8068,8069],{"class":325},"\u003C\u003C&",[149,8071,2102],{"class":155},[149,8073,2902],{"class":325},[149,8075,2924],{"class":155},[149,8077,8078,8080,8082,8085,8087,8089,8091,8093],{"class":151,"line":1054},[149,8079,3275],{"class":155},[149,8081,2902],{"class":325},[149,8083,8084],{"class":169},"\"指针p为：\"",[149,8086,2902],{"class":325},[149,8088,24],{"class":155},[149,8090,2902],{"class":325},[149,8092,2967],{"class":155},[149,8094,8095],{"class":295},"\u002F\u002F指针p表示的就是a的地址\n",[149,8097,8098],{"class":151,"line":1072},[149,8099,4119],{"emptyLinePlaceholder":1800},[149,8101,8102],{"class":151,"line":1090},[149,8103,8104],{"class":295},"    \u002F\u002F2.使用指针\n",[149,8106,8107],{"class":151,"line":1633},[149,8108,8109],{"class":295},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[149,8111,8112],{"class":151,"line":1644},[149,8113,8114],{"class":295},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[149,8116,8117,8120,8122,8124,8127],{"class":151,"line":3348},[149,8118,8119],{"class":325},"    *",[149,8121,24],{"class":155},[149,8123,166],{"class":325},[149,8125,8126],{"class":309},"1000",[149,8128,841],{"class":155},[149,8130,8131,8133,8136,8138,8140,8142],{"class":151,"line":3362},[149,8132,3275],{"class":155},[149,8134,8135],{"class":325},"\u003C\u003C*",[149,8137,24],{"class":155},[149,8139,2902],{"class":325},[149,8141,2967],{"class":155},[149,8143,8144],{"class":295},"\u002F\u002F1000\n",[149,8146,8147,8149,8151,8153,8155,8157],{"class":151,"line":3367},[149,8148,3275],{"class":155},[149,8150,2902],{"class":325},[149,8152,2102],{"class":155},[149,8154,2902],{"class":325},[149,8156,2967],{"class":155},[149,8158,8144],{"class":295},[149,8160,8161],{"class":151,"line":3373},[149,8162,355],{"class":155},[14,8164,8166],{"id":8165},"_32指针所占的内存空间","3.2指针所占的内存空间",[24,8168,8169],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[24,8171,8172],{},"在32位操作系统下：占用4个字节空间",[24,8174,8175],{},"在64位操作系统下：占用8个字节空间",[24,8177,8178],{},"上方是不管啥数据类型的",[140,8180,8182],{"className":1861,"code":8181,"language":1863,"meta":145,"style":145},"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",[48,8183,8184,8192,8196,8201,8213,8218,8223,8228,8241,8263,8289,8315],{"__ignoreMap":145},[149,8185,8186,8188,8190],{"class":151,"line":152},[149,8187,1875],{"class":325},[149,8189,3692],{"class":162},[149,8191,3695],{"class":155},[149,8193,8194],{"class":151,"line":193},[149,8195,3270],{"class":155},[149,8197,8198],{"class":151,"line":235},[149,8199,8200],{"class":295},"    \u002F\u002F指针所占内存空间\n",[149,8202,8203,8205,8207,8209,8211],{"class":151,"line":340},[149,8204,3704],{"class":325},[149,8206,3123],{"class":155},[149,8208,166],{"class":325},[149,8210,2309],{"class":309},[149,8212,841],{"class":155},[149,8214,8215],{"class":151,"line":346},[149,8216,8217],{"class":295},"    \u002F\u002Fint *p;\n",[149,8219,8220],{"class":151,"line":352},[149,8221,8222],{"class":295},"    \u002F\u002Fp=&a;\n",[149,8224,8225],{"class":151,"line":1021},[149,8226,8227],{"class":295},"    \u002F\u002F上述可以写为以下：\n",[149,8229,8230,8232,8235,8237,8239],{"class":151,"line":1035},[149,8231,3704],{"class":325},[149,8233,8234],{"class":325}," *",[149,8236,24],{"class":155},[149,8238,8055],{"class":325},[149,8240,7913],{"class":155},[149,8242,8243,8246,8248,8251,8253,8256,8258,8260],{"class":151,"line":1054},[149,8244,8245],{"class":155},"    cout ",[149,8247,2902],{"class":325},[149,8249,8250],{"class":169},"\"sizeof(int *)\"",[149,8252,3097],{"class":325},[149,8254,8255],{"class":155},"(p)",[149,8257,2902],{"class":325},[149,8259,2967],{"class":155},[149,8261,8262],{"class":295},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[149,8264,8265,8267,8269,8271,8273,8275,8277,8279,8281,8283,8286],{"class":151,"line":1072},[149,8266,8245],{"class":155},[149,8268,2902],{"class":325},[149,8270,8250],{"class":169},[149,8272,3097],{"class":325},[149,8274,319],{"class":155},[149,8276,1875],{"class":325},[149,8278,8234],{"class":325},[149,8280,2292],{"class":155},[149,8282,2902],{"class":325},[149,8284,8285],{"class":155},"endl",[149,8287,8288],{"class":295},"  \u002F\u002F4字节(32位的话)\n",[149,8290,8291,8293,8295,8298,8300,8302,8304,8306,8308,8310,8312],{"class":151,"line":1090},[149,8292,8245],{"class":155},[149,8294,2902],{"class":325},[149,8296,8297],{"class":169},"\"sizeof(char *)\"",[149,8299,3097],{"class":325},[149,8301,319],{"class":155},[149,8303,1963],{"class":325},[149,8305,8234],{"class":325},[149,8307,2292],{"class":155},[149,8309,2902],{"class":325},[149,8311,2967],{"class":155},[149,8313,8314],{"class":295}," \u002F\u002F4字节(32位的话)\n",[149,8316,8317],{"class":151,"line":1633},[149,8318,355],{"class":155},[14,8320,8322],{"id":8321},"_33空指针","3.3空指针",[24,8324,8325],{},"空指针：指针变量指向内存中编号为0的空间",[24,8327,8328],{},"用途：初始化指针变量",[24,8330,8331],{},"注意：空指针指向的内存是不可以访问的",[140,8333,8335],{"className":1861,"code":8334,"language":1863,"meta":145,"style":145},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[48,8336,8337,8345,8349,8354,8368,8373,8388,8393],{"__ignoreMap":145},[149,8338,8339,8341,8343],{"class":151,"line":152},[149,8340,1875],{"class":325},[149,8342,3692],{"class":162},[149,8344,3695],{"class":155},[149,8346,8347],{"class":151,"line":193},[149,8348,3270],{"class":155},[149,8350,8351],{"class":151,"line":235},[149,8352,8353],{"class":295},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[149,8355,8356,8358,8360,8362,8364,8366],{"class":151,"line":340},[149,8357,3704],{"class":325},[149,8359,8234],{"class":325},[149,8361,24],{"class":155},[149,8363,166],{"class":325},[149,8365,4111],{"class":309},[149,8367,841],{"class":155},[149,8369,8370],{"class":151,"line":346},[149,8371,8372],{"class":295},"    \u002F\u002F2.空指针不能进行访问\n",[149,8374,8375,8377,8379,8381,8383,8385],{"class":151,"line":352},[149,8376,8119],{"class":325},[149,8378,24],{"class":155},[149,8380,166],{"class":325},[149,8382,322],{"class":309},[149,8384,1924],{"class":155},[149,8386,8387],{"class":295},"\u002F\u002F直接报错，压根不能访问\n",[149,8389,8390],{"class":151,"line":1021},[149,8391,8392],{"class":295},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[149,8394,8395],{"class":151,"line":1035},[149,8396,355],{"class":155},[14,8398,8400],{"id":8399},"_34野指针","3.4野指针",[24,8402,8403],{},[31,8404,8405],{},"指针变量指向非法的内存空间",[140,8407,8409],{"className":1861,"code":8408,"language":1863,"meta":145,"style":145},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[48,8410,8411,8419,8423,8452,8457,8469],{"__ignoreMap":145},[149,8412,8413,8415,8417],{"class":151,"line":152},[149,8414,1875],{"class":325},[149,8416,3692],{"class":162},[149,8418,3695],{"class":155},[149,8420,8421],{"class":151,"line":193},[149,8422,3270],{"class":155},[149,8424,8425,8427,8429,8431,8433,8435,8437,8439,8441,8444,8447,8449],{"class":151,"line":235},[149,8426,3704],{"class":325},[149,8428,8234],{"class":325},[149,8430,24],{"class":155},[149,8432,166],{"class":325},[149,8434,319],{"class":155},[149,8436,1875],{"class":325},[149,8438,8234],{"class":325},[149,8440,2292],{"class":155},[149,8442,8443],{"class":325},"0x",[149,8445,8446],{"class":309},"1100",[149,8448,1924],{"class":155},[149,8450,8451],{"class":295}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[149,8453,8454],{"class":151,"line":340},[149,8455,8456],{"class":295},"    \u002F\u002F访问野指针报错\n",[149,8458,8459,8461,8463,8465,8467],{"class":151,"line":346},[149,8460,3275],{"class":155},[149,8462,8135],{"class":325},[149,8464,24],{"class":155},[149,8466,2902],{"class":325},[149,8468,2924],{"class":155},[149,8470,8471],{"class":151,"line":352},[149,8472,355],{"class":155},[24,8474,8475],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8477,8479],{"id":8478},"_35const修饰指针","3.5const修饰指针",[24,8481,8482],{},"三种情况：",[42,8484,8485,8488,8491],{},[45,8486,8487],{},"const修饰指针 常量指针",[45,8489,8490],{},"const修饰常量 指针常量",[45,8492,8493],{},"const即修饰指针，又修饰常量",[125,8495,8496],{},[45,8497,8498],{},"常量指针",[140,8500,8502],{"className":1861,"code":8501,"language":1863,"meta":145,"style":145},"const int *p=&a;\n",[48,8503,8504],{"__ignoreMap":145},[149,8505,8506,8509,8511,8513,8515,8517],{"class":151,"line":152},[149,8507,8508],{"class":325},"const",[149,8510,4101],{"class":325},[149,8512,8234],{"class":325},[149,8514,24],{"class":155},[149,8516,8055],{"class":325},[149,8518,7913],{"class":155},[24,8520,8521],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[125,8523,8524],{"start":193},[45,8525,8526],{},"指针常量",[140,8528,8530],{"className":1861,"code":8529,"language":1863,"meta":145,"style":145},"int *const p=&a;\n",[48,8531,8532],{"__ignoreMap":145},[149,8533,8534,8536,8539,8542,8544],{"class":151,"line":152},[149,8535,1875],{"class":325},[149,8537,8538],{"class":325}," *const",[149,8540,8541],{"class":155}," p",[149,8543,8055],{"class":325},[149,8545,7913],{"class":155},[24,8547,8548],{},"指针的指向不可以改，指针指向的值可以改",[125,8550,8551],{"start":235},[45,8552,8493],{},[140,8554,8556],{"className":1861,"code":8555,"language":1863,"meta":145,"style":145},"const int *const p=&a;\n",[48,8557,8558],{"__ignoreMap":145},[149,8559,8560,8562,8564,8566,8568,8570],{"class":151,"line":152},[149,8561,8508],{"class":325},[149,8563,4101],{"class":325},[149,8565,8538],{"class":325},[149,8567,8541],{"class":155},[149,8569,8055],{"class":325},[149,8571,7913],{"class":155},[24,8573,8574],{},"指针的指向和指针指向的值都不可以改变",[14,8576,8578],{"id":8577},"_36指针和数组","3.6指针和数组",[140,8580,8582],{"className":1861,"code":8581,"language":1863,"meta":145,"style":145},"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",[48,8583,8584,8592,8596,8601,8655,8676,8692,8708,8719,8736,8741,8755,8781,8785,8797,8806,8810],{"__ignoreMap":145},[149,8585,8586,8588,8590],{"class":151,"line":152},[149,8587,1875],{"class":325},[149,8589,3692],{"class":162},[149,8591,3695],{"class":155},[149,8593,8594],{"class":151,"line":193},[149,8595,3270],{"class":155},[149,8597,8598],{"class":151,"line":235},[149,8599,8600],{"class":295},"    \u002F\u002F利用指针访问数组中的元素\n",[149,8602,8603,8605,8607,8609,8611,8613,8615,8617,8619,8621,8623,8625,8627,8629,8631,8633,8635,8637,8639,8641,8643,8645,8647,8649,8651,8653],{"class":151,"line":340},[149,8604,3704],{"class":325},[149,8606,5680],{"class":155},[149,8608,2309],{"class":309},[149,8610,2799],{"class":155},[149,8612,166],{"class":325},[149,8614,2756],{"class":155},[149,8616,830],{"class":309},[149,8618,2241],{"class":155},[149,8620,1045],{"class":309},[149,8622,2241],{"class":155},[149,8624,1939],{"class":309},[149,8626,2241],{"class":155},[149,8628,2157],{"class":309},[149,8630,2241],{"class":155},[149,8632,2182],{"class":309},[149,8634,2241],{"class":155},[149,8636,2207],{"class":309},[149,8638,2241],{"class":155},[149,8640,2232],{"class":309},[149,8642,2241],{"class":155},[149,8644,2258],{"class":309},[149,8646,2241],{"class":155},[149,8648,2283],{"class":309},[149,8650,2241],{"class":155},[149,8652,2309],{"class":309},[149,8654,5713],{"class":155},[149,8656,8657,8659,8661,8664,8666,8668,8670,8672,8674],{"class":151,"line":346},[149,8658,3275],{"class":155},[149,8660,2902],{"class":325},[149,8662,8663],{"class":169},"\"数组的第一个元素为：\"",[149,8665,2902],{"class":325},[149,8667,5624],{"class":155},[149,8669,2056],{"class":309},[149,8671,2799],{"class":155},[149,8673,2902],{"class":325},[149,8675,2924],{"class":155},[149,8677,8678,8680,8682,8684,8686,8689],{"class":151,"line":352},[149,8679,3704],{"class":325},[149,8681,8234],{"class":325},[149,8683,24],{"class":155},[149,8685,166],{"class":325},[149,8687,8688],{"class":155},"arr;",[149,8690,8691],{"class":295},"\u002F\u002F注意数才要加取地址符号&\n",[149,8693,8694,8696,8698,8700,8702,8704,8706],{"class":151,"line":1021},[149,8695,3275],{"class":155},[149,8697,2902],{"class":325},[149,8699,8663],{"class":169},[149,8701,8135],{"class":325},[149,8703,24],{"class":155},[149,8705,2902],{"class":325},[149,8707,2924],{"class":155},[149,8709,8710,8712,8714,8716],{"class":151,"line":1035},[149,8711,8052],{"class":155},[149,8713,4011],{"class":325},[149,8715,1924],{"class":155},[149,8717,8718],{"class":295}," \u002F\u002F让指针向后偏移4个字节\n",[149,8720,8721,8723,8725,8728,8730,8732,8734],{"class":151,"line":1054},[149,8722,3275],{"class":155},[149,8724,2902],{"class":325},[149,8726,8727],{"class":169},"\"数组的第二个元素为：\"",[149,8729,8135],{"class":325},[149,8731,24],{"class":155},[149,8733,2902],{"class":325},[149,8735,2924],{"class":155},[149,8737,8738],{"class":151,"line":1072},[149,8739,8740],{"class":295},"    \u002F\u002F利用指针遍历数组\n",[149,8742,8743,8745,8747,8750,8752],{"class":151,"line":1090},[149,8744,3704],{"class":325},[149,8746,8234],{"class":325},[149,8748,8749],{"class":155},"p2",[149,8751,166],{"class":325},[149,8753,8754],{"class":155},"arr;\n",[149,8756,8757,8759,8761,8763,8765,8767,8769,8771,8773,8775,8777,8779],{"class":151,"line":1633},[149,8758,4919],{"class":325},[149,8760,3378],{"class":155},[149,8762,1875],{"class":325},[149,8764,4750],{"class":155},[149,8766,166],{"class":325},[149,8768,2056],{"class":309},[149,8770,4757],{"class":155},[149,8772,156],{"class":325},[149,8774,2309],{"class":309},[149,8776,4757],{"class":155},[149,8778,4011],{"class":325},[149,8780,1878],{"class":155},[149,8782,8783],{"class":151,"line":1644},[149,8784,3749],{"class":155},[149,8786,8787,8789,8791,8793,8795],{"class":151,"line":3348},[149,8788,5169],{"class":155},[149,8790,8135],{"class":325},[149,8792,8749],{"class":155},[149,8794,2902],{"class":325},[149,8796,2924],{"class":155},[149,8798,8799,8802,8804],{"class":151,"line":3362},[149,8800,8801],{"class":155},"        p2",[149,8803,4011],{"class":325},[149,8805,841],{"class":155},[149,8807,8808],{"class":151,"line":3367},[149,8809,3906],{"class":155},[149,8811,8812],{"class":151,"line":3373},[149,8813,355],{"class":155},[14,8815,8817],{"id":8816},"_37指针和函数","3.7指针和函数",[24,8819,8820],{},"利用指针做函数参数，可以修改实参的值",[24,8822,8823],{},"值传递：只改变形参，不改变实参",[24,8825,8826],{},"地址传递：",[140,8828,8830],{"className":1861,"code":8829,"language":1863,"meta":145,"style":145},"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",[48,8831,8832,8857,8861,8873,8884,8894,8898,8906,8910,8922,8934,8939,8955,8970,8985],{"__ignoreMap":145},[149,8833,8834,8836,8838,8840,8842,8844,8847,8849,8851,8853,8855],{"class":151,"line":152},[149,8835,7080],{"class":325},[149,8837,7083],{"class":162},[149,8839,319],{"class":155},[149,8841,1875],{"class":325},[149,8843,8234],{"class":325},[149,8845,8846],{"class":6932},"p1",[149,8848,2241],{"class":155},[149,8850,1875],{"class":325},[149,8852,8234],{"class":325},[149,8854,8749],{"class":6932},[149,8856,1878],{"class":155},[149,8858,8859],{"class":151,"line":193},[149,8860,3270],{"class":155},[149,8862,8863,8865,8867,8870],{"class":151,"line":235},[149,8864,3704],{"class":325},[149,8866,5973],{"class":155},[149,8868,8869],{"class":325},"=*",[149,8871,8872],{"class":155},"p1;\n",[149,8874,8875,8877,8879,8881],{"class":151,"line":340},[149,8876,8119],{"class":325},[149,8878,8846],{"class":155},[149,8880,8869],{"class":325},[149,8882,8883],{"class":155},"p2;\n",[149,8885,8886,8888,8890,8892],{"class":151,"line":346},[149,8887,8119],{"class":325},[149,8889,8749],{"class":155},[149,8891,166],{"class":325},[149,8893,5998],{"class":155},[149,8895,8896],{"class":151,"line":352},[149,8897,355],{"class":155},[149,8899,8900,8902,8904],{"class":151,"line":1021},[149,8901,1875],{"class":325},[149,8903,3692],{"class":162},[149,8905,3695],{"class":155},[149,8907,8908],{"class":151,"line":1035},[149,8909,3270],{"class":155},[149,8911,8912,8914,8916,8918,8920],{"class":151,"line":1054},[149,8913,3704],{"class":325},[149,8915,3123],{"class":155},[149,8917,166],{"class":325},[149,8919,2309],{"class":309},[149,8921,841],{"class":155},[149,8923,8924,8926,8928,8930,8932],{"class":151,"line":1072},[149,8925,3704],{"class":325},[149,8927,4551],{"class":155},[149,8929,166],{"class":325},[149,8931,2561],{"class":309},[149,8933,841],{"class":155},[149,8935,8936],{"class":151,"line":1090},[149,8937,8938],{"class":295},"    \u002F\u002F地址传递\n",[149,8940,8941,8943,8945,8947,8950,8952],{"class":151,"line":1633},[149,8942,7277],{"class":162},[149,8944,319],{"class":155},[149,8946,2216],{"class":325},[149,8948,8949],{"class":155},"a,",[149,8951,2216],{"class":325},[149,8953,8954],{"class":155},"b);\n",[149,8956,8957,8959,8961,8963,8965,8967],{"class":151,"line":1644},[149,8958,3275],{"class":155},[149,8960,2902],{"class":325},[149,8962,2102],{"class":155},[149,8964,2902],{"class":325},[149,8966,2967],{"class":155},[149,8968,8969],{"class":295},"\u002F\u002F20\n",[149,8971,8972,8974,8976,8978,8980,8982],{"class":151,"line":3348},[149,8973,3275],{"class":155},[149,8975,2902],{"class":325},[149,8977,2127],{"class":155},[149,8979,2902],{"class":325},[149,8981,2967],{"class":155},[149,8983,8984],{"class":295},"\u002F\u002F10\n",[149,8986,8987],{"class":151,"line":3362},[149,8988,355],{"class":155},[24,8990,8991],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8993,8995],{"id":8994},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[24,8997,8998],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[24,9000,9001,9002,9004],{},"例如数组：int arr",[149,9003,2309],{},"={4,3,6,9,1,2,10,8,7,5}",[140,9006,9008],{"className":1861,"code":9007,"language":1863,"meta":145,"style":145},"#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",[48,9009,9010,9016,9026,9050,9054,9085,9089,9123,9127,9145,9149,9160,9175,9190,9194,9198,9202,9206,9210,9218,9222,9227,9281,9293,9305,9310,9318,9322,9327,9352,9356,9370,9379,9383],{"__ignoreMap":145},[149,9011,9012,9014],{"class":151,"line":152},[149,9013,3669],{"class":325},[149,9015,3672],{"class":169},[149,9017,9018,9020,9022,9024],{"class":151,"line":193},[149,9019,3677],{"class":325},[149,9021,3680],{"class":325},[149,9023,3683],{"class":162},[149,9025,841],{"class":155},[149,9027,9028,9030,9033,9035,9037,9039,9041,9043,9045,9048],{"class":151,"line":235},[149,9029,7080],{"class":325},[149,9031,9032],{"class":162}," bubbleSort",[149,9034,319],{"class":155},[149,9036,1875],{"class":325},[149,9038,8234],{"class":325},[149,9040,24],{"class":6932},[149,9042,2241],{"class":155},[149,9044,1875],{"class":325},[149,9046,9047],{"class":6932}," len",[149,9049,1878],{"class":155},[149,9051,9052],{"class":151,"line":340},[149,9053,3270],{"class":155},[149,9055,9056,9058,9060,9062,9064,9066,9068,9070,9072,9075,9077,9079,9081,9083],{"class":151,"line":346},[149,9057,4919],{"class":325},[149,9059,319],{"class":155},[149,9061,1875],{"class":325},[149,9063,4750],{"class":155},[149,9065,166],{"class":325},[149,9067,2056],{"class":309},[149,9069,4757],{"class":155},[149,9071,156],{"class":325},[149,9073,9074],{"class":155},"len",[149,9076,2395],{"class":325},[149,9078,830],{"class":309},[149,9080,4757],{"class":155},[149,9082,4011],{"class":325},[149,9084,1878],{"class":155},[149,9086,9087],{"class":151,"line":352},[149,9088,3749],{"class":155},[149,9090,9091,9093,9095,9097,9099,9101,9103,9105,9107,9109,9111,9113,9115,9117,9119,9121],{"class":151,"line":1021},[149,9092,5121],{"class":325},[149,9094,319],{"class":155},[149,9096,1875],{"class":325},[149,9098,5128],{"class":155},[149,9100,166],{"class":325},[149,9102,2056],{"class":309},[149,9104,5135],{"class":155},[149,9106,156],{"class":325},[149,9108,9074],{"class":155},[149,9110,2395],{"class":325},[149,9112,2304],{"class":155},[149,9114,2395],{"class":325},[149,9116,830],{"class":309},[149,9118,5135],{"class":155},[149,9120,4011],{"class":325},[149,9122,1878],{"class":155},[149,9124,9125],{"class":151,"line":1035},[149,9126,4229],{"class":155},[149,9128,9129,9131,9134,9136,9139,9141,9143],{"class":151,"line":1054},[149,9130,6360],{"class":325},[149,9132,9133],{"class":155},"(p[j]",[149,9135,2819],{"class":325},[149,9137,9138],{"class":155},"p[j",[149,9140,2344],{"class":325},[149,9142,830],{"class":309},[149,9144,6375],{"class":155},[149,9146,9147],{"class":151,"line":1072},[149,9148,6380],{"class":155},[149,9150,9151,9153,9155,9157],{"class":151,"line":1090},[149,9152,6385],{"class":325},[149,9154,5973],{"class":155},[149,9156,166],{"class":325},[149,9158,9159],{"class":155},"p[j];\n",[149,9161,9162,9165,9167,9169,9171,9173],{"class":151,"line":1633},[149,9163,9164],{"class":155},"                p[j]",[149,9166,166],{"class":325},[149,9168,9138],{"class":155},[149,9170,2344],{"class":325},[149,9172,830],{"class":309},[149,9174,6408],{"class":155},[149,9176,9177,9180,9182,9184,9186,9188],{"class":151,"line":1644},[149,9178,9179],{"class":155},"                p[j",[149,9181,2344],{"class":325},[149,9183,830],{"class":309},[149,9185,2799],{"class":155},[149,9187,166],{"class":325},[149,9189,5998],{"class":155},[149,9191,9192],{"class":151,"line":3348},[149,9193,6428],{"class":155},[149,9195,9196],{"class":151,"line":3362},[149,9197,4248],{"class":155},[149,9199,9200],{"class":151,"line":3367},[149,9201,3906],{"class":155},[149,9203,9204],{"class":151,"line":3373},[149,9205,355],{"class":155},[149,9207,9208],{"class":151,"line":3394},[149,9209,4119],{"emptyLinePlaceholder":1800},[149,9211,9212,9214,9216],{"class":151,"line":3399},[149,9213,1875],{"class":325},[149,9215,3692],{"class":162},[149,9217,3695],{"class":155},[149,9219,9220],{"class":151,"line":3413},[149,9221,3270],{"class":155},[149,9223,9224],{"class":151,"line":3418},[149,9225,9226],{"class":295},"    \u002F\u002F 1.创建数组\n",[149,9228,9229,9231,9233,9235,9237,9239,9241,9243,9245,9247,9249,9251,9253,9255,9257,9259,9261,9263,9265,9267,9269,9271,9273,9275,9277,9279],{"class":151,"line":3447},[149,9230,3704],{"class":325},[149,9232,5680],{"class":155},[149,9234,2309],{"class":309},[149,9236,2799],{"class":155},[149,9238,166],{"class":325},[149,9240,2756],{"class":155},[149,9242,2157],{"class":309},[149,9244,2241],{"class":155},[149,9246,1939],{"class":309},[149,9248,2241],{"class":155},[149,9250,2207],{"class":309},[149,9252,2241],{"class":155},[149,9254,2283],{"class":309},[149,9256,2241],{"class":155},[149,9258,830],{"class":309},[149,9260,2241],{"class":155},[149,9262,1045],{"class":309},[149,9264,2241],{"class":155},[149,9266,2309],{"class":309},[149,9268,2241],{"class":155},[149,9270,2258],{"class":309},[149,9272,2241],{"class":155},[149,9274,2232],{"class":309},[149,9276,2241],{"class":155},[149,9278,2182],{"class":309},[149,9280,5713],{"class":155},[149,9282,9283,9285,9287,9289,9291],{"class":151,"line":3452},[149,9284,3704],{"class":325},[149,9286,9047],{"class":155},[149,9288,166],{"class":325},[149,9290,2309],{"class":309},[149,9292,841],{"class":155},[149,9294,9295,9297,9299,9301,9303],{"class":151,"line":3469},[149,9296,3704],{"class":325},[149,9298,8234],{"class":325},[149,9300,24],{"class":155},[149,9302,166],{"class":325},[149,9304,8754],{"class":155},[149,9306,9307],{"class":151,"line":3474},[149,9308,9309],{"class":295},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[149,9311,9312,9315],{"class":151,"line":3479},[149,9313,9314],{"class":162},"    bubbleSort",[149,9316,9317],{"class":155},"(p,len);\n",[149,9319,9320],{"class":151,"line":3484},[149,9321,4119],{"emptyLinePlaceholder":1800},[149,9323,9324],{"class":151,"line":3498},[149,9325,9326],{"class":295},"    \u002F\u002F 3.打印排序后的数组\n",[149,9328,9329,9331,9333,9335,9337,9339,9341,9343,9345,9348,9350],{"class":151,"line":3503},[149,9330,4919],{"class":325},[149,9332,3378],{"class":155},[149,9334,1875],{"class":325},[149,9336,4750],{"class":155},[149,9338,166],{"class":325},[149,9340,2056],{"class":309},[149,9342,4932],{"class":155},[149,9344,156],{"class":325},[149,9346,9347],{"class":155},"len; i",[149,9349,4011],{"class":325},[149,9351,1878],{"class":155},[149,9353,9354],{"class":151,"line":4296},[149,9355,3749],{"class":155},[149,9357,9358,9360,9362,9364,9366,9368],{"class":151,"line":4310},[149,9359,5169],{"class":155},[149,9361,8135],{"class":325},[149,9363,24],{"class":155},[149,9365,2902],{"class":325},[149,9367,1382],{"class":169},[149,9369,841],{"class":155},[149,9371,9372,9375,9377],{"class":151,"line":4318},[149,9373,9374],{"class":155},"        p",[149,9376,4011],{"class":325},[149,9378,841],{"class":155},[149,9380,9381],{"class":151,"line":4323},[149,9382,3906],{"class":155},[149,9384,9385],{"class":151,"line":4329},[149,9386,355],{"class":155},[1783,9388,9389],{},"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":145,"searchDepth":193,"depth":193,"links":9391},[9392,9393,9394,9395,9396,9397,9398,9399],{"id":7999,"depth":193,"text":8000},{"id":8165,"depth":193,"text":8166},{"id":8321,"depth":193,"text":8322},{"id":8399,"depth":193,"text":8400},{"id":8478,"depth":193,"text":8479},{"id":8577,"depth":193,"text":8578},{"id":8816,"depth":193,"text":8817},{"id":8994,"depth":193,"text":8995},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7988,"description":7996},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9406,"title":9407,"body":9408,"description":9415,"extension":1798,"meta":12388,"navigation":1800,"path":12389,"seo":12390,"stem":12391,"__hash__":12392},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9409,"toc":12379},[9410,9413,9416,9420,9423,9426,9437,9775,9778,9782,9785,9792,10047,10051,10054,10057,10212,10216,10219,10222,10428,10432,10435,10738,10740,10748,10752,10755,10906,10908,10919,10976,10980,10985,11642,11650,11653,11747,11750,12370,12376],[10,9411,9407],{"id":9412},"_4结构体",[24,9414,9415],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9417,9419],{"id":9418},"_41结构体定义与使用","4.1结构体定义与使用",[24,9421,9422],{},"语法：struct 结构体名 {结构体成员列表}；",[24,9424,9425],{},"通过结构体创建变量的方式：",[42,9427,9428,9431,9434],{},[45,9429,9430],{},"struct 结构体名 变量名",[45,9432,9433],{},"struct 结构体名 变量名={成员1值，成员2值...}",[45,9435,9436],{},"定义结构体时顺便创建变量",[140,9438,9440],{"className":1861,"code":9439,"language":1863,"meta":145,"style":145},"#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",[48,9441,9442,9448,9458,9465,9470,9478,9482,9487,9491,9496,9501,9506,9513,9518,9525,9529,9536,9540,9544,9548,9552,9556,9560,9566,9570,9576,9584,9592,9596,9601,9606,9617,9622,9634,9645,9656,9661,9685,9690,9696,9723,9728,9734,9746,9758,9770],{"__ignoreMap":145},[149,9443,9444,9446],{"class":151,"line":152},[149,9445,3669],{"class":325},[149,9447,3672],{"class":169},[149,9449,9450,9452,9454,9456],{"class":151,"line":193},[149,9451,3677],{"class":325},[149,9453,3680],{"class":325},[149,9455,3683],{"class":162},[149,9457,841],{"class":155},[149,9459,9460,9462],{"class":151,"line":235},[149,9461,3669],{"class":325},[149,9463,9464],{"class":169},"\u003Cstring>\n",[149,9466,9467],{"class":151,"line":340},[149,9468,9469],{"class":295},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[149,9471,9472,9475],{"class":151,"line":346},[149,9473,9474],{"class":325},"struct",[149,9476,9477],{"class":162}," Student\n",[149,9479,9480],{"class":151,"line":352},[149,9481,3270],{"class":155},[149,9483,9484],{"class":151,"line":1021},[149,9485,9486],{"class":295},"    \u002F\u002F成员列表\n",[149,9488,9489],{"class":151,"line":1035},[149,9490,4119],{"emptyLinePlaceholder":1800},[149,9492,9493],{"class":151,"line":1054},[149,9494,9495],{"class":295},"    \u002F\u002F姓名\n",[149,9497,9498],{"class":151,"line":1072},[149,9499,9500],{"class":155},"    string name;\n",[149,9502,9503],{"class":151,"line":1090},[149,9504,9505],{"class":295},"    \u002F\u002F年龄\n",[149,9507,9508,9510],{"class":151,"line":1633},[149,9509,3704],{"class":325},[149,9511,9512],{"class":155}," age;\n",[149,9514,9515],{"class":151,"line":1644},[149,9516,9517],{"class":295},"    \u002F\u002F分数\n",[149,9519,9520,9522],{"class":151,"line":3348},[149,9521,3704],{"class":325},[149,9523,9524],{"class":155}," score;\n",[149,9526,9527],{"class":151,"line":3362},[149,9528,5713],{"class":155},[149,9530,9531,9533],{"class":151,"line":3367},[149,9532,9474],{"class":325},[149,9534,9535],{"class":162}," School\n",[149,9537,9538],{"class":151,"line":3373},[149,9539,3270],{"class":155},[149,9541,9542],{"class":151,"line":3394},[149,9543,9486],{"class":295},[149,9545,9546],{"class":151,"line":3399},[149,9547,4119],{"emptyLinePlaceholder":1800},[149,9549,9550],{"class":151,"line":3413},[149,9551,9495],{"class":295},[149,9553,9554],{"class":151,"line":3418},[149,9555,9500],{"class":155},[149,9557,9558],{"class":151,"line":3447},[149,9559,9505],{"class":295},[149,9561,9562,9564],{"class":151,"line":3452},[149,9563,3704],{"class":325},[149,9565,9512],{"class":155},[149,9567,9568],{"class":151,"line":3469},[149,9569,9517],{"class":295},[149,9571,9572,9574],{"class":151,"line":3474},[149,9573,3704],{"class":325},[149,9575,9524],{"class":155},[149,9577,9578,9581],{"class":151,"line":3479},[149,9579,9580],{"class":155},"} s3;",[149,9582,9583],{"class":295}," \u002F\u002F创建结构体时就创建了变量\n",[149,9585,9586,9588,9590],{"class":151,"line":3484},[149,9587,1875],{"class":325},[149,9589,3692],{"class":162},[149,9591,3695],{"class":155},[149,9593,9594],{"class":151,"line":3498},[149,9595,3270],{"class":155},[149,9597,9598],{"class":151,"line":3503},[149,9599,9600],{"class":295},"    \u002F\u002F2.通过学生类型创建具体学生\n",[149,9602,9603],{"class":151,"line":4296},[149,9604,9605],{"class":295},"    \u002F\u002F2.1 struct Student s1;\n",[149,9607,9608,9611,9614],{"class":151,"line":4310},[149,9609,9610],{"class":325},"    struct",[149,9612,9613],{"class":162}," Student",[149,9615,9616],{"class":155}," s1;\n",[149,9618,9619],{"class":151,"line":4318},[149,9620,9621],{"class":295},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[149,9623,9624,9627,9629,9632],{"class":151,"line":4323},[149,9625,9626],{"class":155},"    s1.name",[149,9628,166],{"class":325},[149,9630,9631],{"class":169},"\"张三\"",[149,9633,841],{"class":155},[149,9635,9636,9639,9641,9643],{"class":151,"line":4329},[149,9637,9638],{"class":155},"    s1.age",[149,9640,166],{"class":325},[149,9642,2513],{"class":309},[149,9644,841],{"class":155},[149,9646,9647,9650,9652,9654],{"class":151,"line":4335},[149,9648,9649],{"class":155},"    s1.score",[149,9651,166],{"class":325},[149,9653,2118],{"class":309},[149,9655,841],{"class":155},[149,9657,9658],{"class":151,"line":4340},[149,9659,9660],{"class":295},"    \u002F\u002F输出结果\n",[149,9662,9664,9666,9668,9671,9673,9676,9678,9681,9683],{"class":151,"line":9663},37,[149,9665,3275],{"class":155},[149,9667,2902],{"class":325},[149,9669,9670],{"class":155},"s1.name",[149,9672,2902],{"class":325},[149,9674,9675],{"class":155},"s1.age",[149,9677,2902],{"class":325},[149,9679,9680],{"class":155},"s1.score",[149,9682,2902],{"class":325},[149,9684,2924],{"class":155},[149,9686,9688],{"class":151,"line":9687},38,[149,9689,4119],{"emptyLinePlaceholder":1800},[149,9691,9693],{"class":151,"line":9692},39,[149,9694,9695],{"class":295},"    \u002F\u002F2.2 struct Student s2={...}\n",[149,9697,9699,9701,9703,9706,9708,9710,9713,9715,9717,9719,9721],{"class":151,"line":9698},40,[149,9700,9610],{"class":325},[149,9702,9613],{"class":162},[149,9704,9705],{"class":155}," s2",[149,9707,166],{"class":325},[149,9709,2756],{"class":155},[149,9711,9712],{"class":169},"\"王五\"",[149,9714,2241],{"class":155},[149,9716,2513],{"class":309},[149,9718,2241],{"class":155},[149,9720,2118],{"class":309},[149,9722,5713],{"class":155},[149,9724,9726],{"class":151,"line":9725},41,[149,9727,4119],{"emptyLinePlaceholder":1800},[149,9729,9731],{"class":151,"line":9730},42,[149,9732,9733],{"class":295},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[149,9735,9737,9740,9742,9744],{"class":151,"line":9736},43,[149,9738,9739],{"class":155},"    s3.name",[149,9741,166],{"class":325},[149,9743,5396],{"class":169},[149,9745,841],{"class":155},[149,9747,9749,9752,9754,9756],{"class":151,"line":9748},44,[149,9750,9751],{"class":155},"    s3.age",[149,9753,166],{"class":325},[149,9755,2513],{"class":309},[149,9757,841],{"class":155},[149,9759,9761,9764,9766,9768],{"class":151,"line":9760},45,[149,9762,9763],{"class":155},"    s3.score",[149,9765,166],{"class":325},[149,9767,2561],{"class":309},[149,9769,841],{"class":155},[149,9771,9773],{"class":151,"line":9772},46,[149,9774,355],{"class":155},[24,9776,9777],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9779,9781],{"id":9780},"_42结构体数组","4.2结构体数组",[24,9783,9784],{},"将自定义的结构体放入到数组中方便维护",[24,9786,9787,9788,9791],{},"语法：struct 结构体名 数组名",[149,9789,9790],{},"元素个数","={ {}，{},...{} };",[140,9793,9795],{"className":1861,"code":9794,"language":1863,"meta":145,"style":145},"#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",[48,9796,9797,9803,9813,9819,9824,9830,9834,9838,9844,9850,9854,9858,9866,9870,9875,9890,9894,9910,9926,9930,9935,9951,9966,9981,9986,10012,10016,10039,10043],{"__ignoreMap":145},[149,9798,9799,9801],{"class":151,"line":152},[149,9800,3669],{"class":325},[149,9802,3672],{"class":169},[149,9804,9805,9807,9809,9811],{"class":151,"line":193},[149,9806,3677],{"class":325},[149,9808,3680],{"class":325},[149,9810,3683],{"class":162},[149,9812,841],{"class":155},[149,9814,9815,9817],{"class":151,"line":235},[149,9816,3669],{"class":325},[149,9818,9464],{"class":169},[149,9820,9821],{"class":151,"line":340},[149,9822,9823],{"class":295},"\u002F\u002F1.定义结构体\n",[149,9825,9826,9828],{"class":151,"line":346},[149,9827,9474],{"class":325},[149,9829,9477],{"class":162},[149,9831,9832],{"class":151,"line":352},[149,9833,3270],{"class":155},[149,9835,9836],{"class":151,"line":1021},[149,9837,9500],{"class":155},[149,9839,9840,9842],{"class":151,"line":1035},[149,9841,3704],{"class":325},[149,9843,9512],{"class":155},[149,9845,9846,9848],{"class":151,"line":1054},[149,9847,3704],{"class":325},[149,9849,9524],{"class":155},[149,9851,9852],{"class":151,"line":1072},[149,9853,4119],{"emptyLinePlaceholder":1800},[149,9855,9856],{"class":151,"line":1090},[149,9857,5713],{"class":155},[149,9859,9860,9862,9864],{"class":151,"line":1633},[149,9861,1875],{"class":325},[149,9863,3692],{"class":162},[149,9865,3695],{"class":155},[149,9867,9868],{"class":151,"line":1644},[149,9869,3270],{"class":155},[149,9871,9872],{"class":151,"line":3348},[149,9873,9874],{"class":295},"    \u002F\u002F2.创建结构体数组\n",[149,9876,9877,9879,9881,9884,9886,9888],{"class":151,"line":3362},[149,9878,9610],{"class":325},[149,9880,9613],{"class":162},[149,9882,9883],{"class":155}," stuArray[",[149,9885,1045],{"class":309},[149,9887,2799],{"class":155},[149,9889,6626],{"class":325},[149,9891,9892],{"class":151,"line":3367},[149,9893,3749],{"class":155},[149,9895,9896,9898,9900,9902,9904,9906,9908],{"class":151,"line":3373},[149,9897,6635],{"class":155},[149,9899,9631],{"class":169},[149,9901,2241],{"class":155},[149,9903,2513],{"class":309},[149,9905,2241],{"class":155},[149,9907,322],{"class":309},[149,9909,6648],{"class":155},[149,9911,9912,9914,9916,9918,9920,9922,9924],{"class":151,"line":3394},[149,9913,6635],{"class":155},[149,9915,5396],{"class":169},[149,9917,2241],{"class":155},[149,9919,2438],{"class":309},[149,9921,2241],{"class":155},[149,9923,2438],{"class":309},[149,9925,355],{"class":155},[149,9927,9928],{"class":151,"line":3399},[149,9929,3906],{"class":155},[149,9931,9932],{"class":151,"line":3413},[149,9933,9934],{"class":295},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[149,9936,9937,9940,9942,9945,9947,9949],{"class":151,"line":3418},[149,9938,9939],{"class":155},"    stuArray[",[149,9941,830],{"class":309},[149,9943,9944],{"class":155},"].name",[149,9946,166],{"class":325},[149,9948,5419],{"class":169},[149,9950,841],{"class":155},[149,9952,9953,9955,9957,9960,9962,9964],{"class":151,"line":3447},[149,9954,9939],{"class":155},[149,9956,830],{"class":309},[149,9958,9959],{"class":155},"].age",[149,9961,166],{"class":325},[149,9963,1045],{"class":309},[149,9965,841],{"class":155},[149,9967,9968,9970,9972,9975,9977,9979],{"class":151,"line":3452},[149,9969,9939],{"class":155},[149,9971,830],{"class":309},[149,9973,9974],{"class":155},"].score",[149,9976,166],{"class":325},[149,9978,1045],{"class":309},[149,9980,841],{"class":155},[149,9982,9983],{"class":151,"line":3469},[149,9984,9985],{"class":295},"    \u002F\u002F4.遍历结构体数组\n",[149,9987,9988,9990,9992,9994,9996,9998,10000,10002,10004,10006,10008,10010],{"class":151,"line":3474},[149,9989,4919],{"class":325},[149,9991,3378],{"class":155},[149,9993,1875],{"class":325},[149,9995,4750],{"class":155},[149,9997,166],{"class":325},[149,9999,2056],{"class":309},[149,10001,4757],{"class":155},[149,10003,156],{"class":325},[149,10005,1045],{"class":309},[149,10007,4757],{"class":155},[149,10009,4011],{"class":325},[149,10011,1878],{"class":155},[149,10013,10014],{"class":151,"line":3479},[149,10015,3749],{"class":155},[149,10017,10018,10020,10022,10025,10027,10030,10032,10035,10037],{"class":151,"line":3484},[149,10019,5169],{"class":155},[149,10021,2902],{"class":325},[149,10023,10024],{"class":155},"stuArray[i].name",[149,10026,2902],{"class":325},[149,10028,10029],{"class":155},"stuArray[i].age",[149,10031,2902],{"class":325},[149,10033,10034],{"class":155},"stuArray[i].score",[149,10036,2902],{"class":325},[149,10038,2924],{"class":155},[149,10040,10041],{"class":151,"line":3498},[149,10042,3906],{"class":155},[149,10044,10045],{"class":151,"line":3503},[149,10046,355],{"class":155},[14,10048,10050],{"id":10049},"_43结构体指针","4.3结构体指针",[24,10052,10053],{},"作用：通过指针访问结构体中的成员",[24,10055,10056],{},"利用操作符->可以通过结构体指针访问结构体属性",[140,10058,10060],{"className":1861,"code":10059,"language":1863,"meta":145,"style":145},"#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",[48,10061,10062,10068,10078,10084,10088,10094,10098,10102,10108,10114,10118,10126,10130,10135,10160,10165,10180,10185,10208],{"__ignoreMap":145},[149,10063,10064,10066],{"class":151,"line":152},[149,10065,3669],{"class":325},[149,10067,3672],{"class":169},[149,10069,10070,10072,10074,10076],{"class":151,"line":193},[149,10071,3677],{"class":325},[149,10073,3680],{"class":325},[149,10075,3683],{"class":162},[149,10077,841],{"class":155},[149,10079,10080,10082],{"class":151,"line":235},[149,10081,3669],{"class":325},[149,10083,9464],{"class":169},[149,10085,10086],{"class":151,"line":340},[149,10087,9823],{"class":295},[149,10089,10090,10092],{"class":151,"line":346},[149,10091,9474],{"class":325},[149,10093,9477],{"class":162},[149,10095,10096],{"class":151,"line":352},[149,10097,3270],{"class":155},[149,10099,10100],{"class":151,"line":1021},[149,10101,9500],{"class":155},[149,10103,10104,10106],{"class":151,"line":1035},[149,10105,3704],{"class":325},[149,10107,9512],{"class":155},[149,10109,10110,10112],{"class":151,"line":1054},[149,10111,3704],{"class":325},[149,10113,9524],{"class":155},[149,10115,10116],{"class":151,"line":1072},[149,10117,5713],{"class":155},[149,10119,10120,10122,10124],{"class":151,"line":1090},[149,10121,1875],{"class":325},[149,10123,3692],{"class":162},[149,10125,3695],{"class":155},[149,10127,10128],{"class":151,"line":1633},[149,10129,3270],{"class":155},[149,10131,10132],{"class":151,"line":1644},[149,10133,10134],{"class":295},"    \u002F\u002F创建学生结构体变量\n",[149,10136,10137,10139,10141,10144,10146,10148,10150,10152,10154,10156,10158],{"class":151,"line":3348},[149,10138,9610],{"class":325},[149,10140,9613],{"class":162},[149,10142,10143],{"class":155}," s",[149,10145,166],{"class":325},[149,10147,2756],{"class":155},[149,10149,9631],{"class":169},[149,10151,2241],{"class":155},[149,10153,2513],{"class":309},[149,10155,2241],{"class":155},[149,10157,3442],{"class":309},[149,10159,5713],{"class":155},[149,10161,10162],{"class":151,"line":3362},[149,10163,10164],{"class":295},"    \u002F\u002F通过指针指向结构体变量\n",[149,10166,10167,10169,10171,10173,10175,10177],{"class":151,"line":3367},[149,10168,9610],{"class":325},[149,10170,9613],{"class":162},[149,10172,8234],{"class":325},[149,10174,24],{"class":155},[149,10176,8055],{"class":325},[149,10178,10179],{"class":155},"s\n",[149,10181,10182],{"class":151,"line":3373},[149,10183,10184],{"class":295},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[149,10186,10187,10189,10191,10194,10196,10199,10201,10204,10206],{"class":151,"line":3394},[149,10188,3275],{"class":155},[149,10190,2902],{"class":325},[149,10192,10193],{"class":155},"p->name",[149,10195,2902],{"class":325},[149,10197,10198],{"class":155},"p->age",[149,10200,2902],{"class":325},[149,10202,10203],{"class":155},"p->score",[149,10205,2902],{"class":325},[149,10207,2924],{"class":155},[149,10209,10210],{"class":151,"line":3399},[149,10211,355],{"class":155},[14,10213,10215],{"id":10214},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[24,10217,10218],{},"作用：结构体中的成员可以是另一个结构体",[24,10220,10221],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[140,10223,10225],{"className":1861,"code":10224,"language":1863,"meta":145,"style":145},"#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",[48,10226,10227,10233,10243,10249,10254,10262,10266,10270,10276,10282,10286,10291,10298,10302,10309,10313,10319,10324,10328,10336,10340,10345,10350,10355,10366,10378,10389,10402,10413,10424],{"__ignoreMap":145},[149,10228,10229,10231],{"class":151,"line":152},[149,10230,3669],{"class":325},[149,10232,3672],{"class":169},[149,10234,10235,10237,10239,10241],{"class":151,"line":193},[149,10236,3677],{"class":325},[149,10238,3680],{"class":325},[149,10240,3683],{"class":162},[149,10242,841],{"class":155},[149,10244,10245,10247],{"class":151,"line":235},[149,10246,3669],{"class":325},[149,10248,9464],{"class":169},[149,10250,10251],{"class":151,"line":340},[149,10252,10253],{"class":295},"\u002F\u002F定义学生结构体\n",[149,10255,10256,10258,10260],{"class":151,"line":346},[149,10257,9474],{"class":325},[149,10259,9613],{"class":162},[149,10261,4393],{"class":155},[149,10263,10264],{"class":151,"line":352},[149,10265,3270],{"class":155},[149,10267,10268],{"class":151,"line":1021},[149,10269,9500],{"class":155},[149,10271,10272,10274],{"class":151,"line":1035},[149,10273,3704],{"class":325},[149,10275,9512],{"class":155},[149,10277,10278,10280],{"class":151,"line":1054},[149,10279,3704],{"class":325},[149,10281,9524],{"class":155},[149,10283,10284],{"class":151,"line":1072},[149,10285,355],{"class":155},[149,10287,10288],{"class":151,"line":1090},[149,10289,10290],{"class":295},"\u002F\u002F定义老师结构体\n",[149,10292,10293,10295],{"class":151,"line":1633},[149,10294,9474],{"class":325},[149,10296,10297],{"class":162}," Teacher\n",[149,10299,10300],{"class":151,"line":1644},[149,10301,3270],{"class":155},[149,10303,10304,10306],{"class":151,"line":3348},[149,10305,3704],{"class":325},[149,10307,10308],{"class":155}," id;\n",[149,10310,10311],{"class":151,"line":3362},[149,10312,9500],{"class":155},[149,10314,10315,10317],{"class":151,"line":3367},[149,10316,3704],{"class":325},[149,10318,9512],{"class":155},[149,10320,10321],{"class":151,"line":3373},[149,10322,10323],{"class":155},"    Student stu;\n",[149,10325,10326],{"class":151,"line":3394},[149,10327,355],{"class":155},[149,10329,10330,10332,10334],{"class":151,"line":3399},[149,10331,1875],{"class":325},[149,10333,3692],{"class":162},[149,10335,7694],{"class":155},[149,10337,10338],{"class":151,"line":3413},[149,10339,3270],{"class":155},[149,10341,10342],{"class":151,"line":3418},[149,10343,10344],{"class":295},"    \u002F\u002F结构体嵌套结构体\n",[149,10346,10347],{"class":151,"line":3447},[149,10348,10349],{"class":295},"    \u002F\u002F创建老师\n",[149,10351,10352],{"class":151,"line":3452},[149,10353,10354],{"class":155},"    Teacher t;\n",[149,10356,10357,10360,10362,10364],{"class":151,"line":3469},[149,10358,10359],{"class":155},"    t.id",[149,10361,166],{"class":325},[149,10363,322],{"class":309},[149,10365,841],{"class":155},[149,10367,10368,10371,10373,10376],{"class":151,"line":3474},[149,10369,10370],{"class":155},"    t.name",[149,10372,166],{"class":325},[149,10374,10375],{"class":169},"\"老王\"",[149,10377,841],{"class":155},[149,10379,10380,10383,10385,10387],{"class":151,"line":3479},[149,10381,10382],{"class":155},"    t.age",[149,10384,166],{"class":325},[149,10386,2513],{"class":309},[149,10388,841],{"class":155},[149,10390,10391,10394,10396,10399],{"class":151,"line":3484},[149,10392,10393],{"class":155},"    t.stu.name",[149,10395,166],{"class":325},[149,10397,10398],{"class":169},"\"小王\"",[149,10400,10401],{"class":155},"；\n",[149,10403,10404,10407,10409,10411],{"class":151,"line":3498},[149,10405,10406],{"class":155},"    t.stu.age",[149,10408,166],{"class":325},[149,10410,2561],{"class":309},[149,10412,841],{"class":155},[149,10414,10415,10418,10420,10422],{"class":151,"line":3503},[149,10416,10417],{"class":155},"    t.stu.score",[149,10419,166],{"class":325},[149,10421,2207],{"class":309},[149,10423,841],{"class":155},[149,10425,10426],{"class":151,"line":4296},[149,10427,355],{"class":155},[14,10429,10431],{"id":10430},"_45结构体做函数参数","4.5结构体做函数参数",[24,10433,10434],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[140,10436,10438],{"className":1861,"code":10437,"language":1863,"meta":145,"style":145},"#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",[48,10439,10440,10446,10456,10462,10468,10472,10476,10482,10488,10492,10497,10502,10519,10523,10556,10560,10565,10584,10588,10619,10623,10631,10635,10644,10656,10668,10680,10693,10701,10714,10726,10734],{"__ignoreMap":145},[149,10441,10442,10444],{"class":151,"line":152},[149,10443,3669],{"class":325},[149,10445,3672],{"class":169},[149,10447,10448,10450,10452,10454],{"class":151,"line":193},[149,10449,3677],{"class":325},[149,10451,3680],{"class":325},[149,10453,3683],{"class":162},[149,10455,841],{"class":155},[149,10457,10458,10460],{"class":151,"line":235},[149,10459,3669],{"class":325},[149,10461,9464],{"class":169},[149,10463,10464,10466],{"class":151,"line":340},[149,10465,9474],{"class":325},[149,10467,9477],{"class":162},[149,10469,10470],{"class":151,"line":346},[149,10471,3270],{"class":155},[149,10473,10474],{"class":151,"line":352},[149,10475,9500],{"class":155},[149,10477,10478,10480],{"class":151,"line":1021},[149,10479,3704],{"class":325},[149,10481,9512],{"class":155},[149,10483,10484,10486],{"class":151,"line":1035},[149,10485,3704],{"class":325},[149,10487,9524],{"class":155},[149,10489,10490],{"class":151,"line":1054},[149,10491,5713],{"class":155},[149,10493,10494],{"class":151,"line":1072},[149,10495,10496],{"class":295},"\u002F\u002F打印学生信息的函数\n",[149,10498,10499],{"class":151,"line":1090},[149,10500,10501],{"class":295},"\u002F\u002F值传递\n",[149,10503,10504,10506,10509,10511,10513,10515,10517],{"class":151,"line":1633},[149,10505,7080],{"class":325},[149,10507,10508],{"class":162}," printStudent1",[149,10510,319],{"class":155},[149,10512,9474],{"class":325},[149,10514,9613],{"class":162},[149,10516,10143],{"class":6932},[149,10518,1878],{"class":155},[149,10520,10521],{"class":151,"line":1644},[149,10522,3270],{"class":155},[149,10524,10525,10527,10529,10532,10534,10537,10539,10542,10544,10546,10548,10551,10553],{"class":151,"line":3348},[149,10526,8245],{"class":155},[149,10528,2902],{"class":325},[149,10530,10531],{"class":155}," s.name ",[149,10533,2902],{"class":325},[149,10535,10536],{"class":169}," \" \"",[149,10538,3169],{"class":325},[149,10540,10541],{"class":155}," s.age ",[149,10543,2902],{"class":325},[149,10545,10536],{"class":169},[149,10547,3169],{"class":325},[149,10549,10550],{"class":155}," s.score ",[149,10552,2902],{"class":325},[149,10554,10555],{"class":155}," endl;\n",[149,10557,10558],{"class":151,"line":3362},[149,10559,355],{"class":155},[149,10561,10562],{"class":151,"line":3367},[149,10563,10564],{"class":295},"\u002F\u002F地址传递\n",[149,10566,10567,10569,10572,10574,10576,10578,10580,10582],{"class":151,"line":3373},[149,10568,7080],{"class":325},[149,10570,10571],{"class":162}," printStudent2",[149,10573,319],{"class":155},[149,10575,9474],{"class":325},[149,10577,9613],{"class":162},[149,10579,8234],{"class":325},[149,10581,1720],{"class":6932},[149,10583,1878],{"class":155},[149,10585,10586],{"class":151,"line":3394},[149,10587,3270],{"class":155},[149,10589,10590,10592,10594,10597,10599,10601,10603,10606,10608,10610,10612,10615,10617],{"class":151,"line":3399},[149,10591,8245],{"class":155},[149,10593,2902],{"class":325},[149,10595,10596],{"class":155}," s->name ",[149,10598,2902],{"class":325},[149,10600,10536],{"class":169},[149,10602,3169],{"class":325},[149,10604,10605],{"class":155}," s->age ",[149,10607,2902],{"class":325},[149,10609,10536],{"class":169},[149,10611,3169],{"class":325},[149,10613,10614],{"class":155}," s->score ",[149,10616,2902],{"class":325},[149,10618,10555],{"class":155},[149,10620,10621],{"class":151,"line":3413},[149,10622,355],{"class":155},[149,10624,10625,10627,10629],{"class":151,"line":3418},[149,10626,1875],{"class":325},[149,10628,3692],{"class":162},[149,10630,3695],{"class":155},[149,10632,10633],{"class":151,"line":3447},[149,10634,3270],{"class":155},[149,10636,10637,10639,10641],{"class":151,"line":3452},[149,10638,9610],{"class":325},[149,10640,9613],{"class":162},[149,10642,10643],{"class":155}," s;\n",[149,10645,10646,10649,10651,10654],{"class":151,"line":3469},[149,10647,10648],{"class":155},"    s.name ",[149,10650,166],{"class":325},[149,10652,10653],{"class":169}," \"张三\"",[149,10655,841],{"class":155},[149,10657,10658,10661,10663,10666],{"class":151,"line":3474},[149,10659,10660],{"class":155},"    s.age ",[149,10662,166],{"class":325},[149,10664,10665],{"class":309}," 20",[149,10667,841],{"class":155},[149,10669,10670,10673,10675,10678],{"class":151,"line":3479},[149,10671,10672],{"class":155},"    s.score ",[149,10674,166],{"class":325},[149,10676,10677],{"class":309}," 85",[149,10679,841],{"class":155},[149,10681,10682,10684,10686,10689,10691],{"class":151,"line":3484},[149,10683,3275],{"class":155},[149,10685,2902],{"class":325},[149,10687,10688],{"class":169},"\"值传递:\"",[149,10690,2902],{"class":325},[149,10692,2924],{"class":155},[149,10694,10695,10698],{"class":151,"line":3498},[149,10696,10697],{"class":162},"    printStudent1",[149,10699,10700],{"class":155},"(s);\n",[149,10702,10703,10705,10707,10710,10712],{"class":151,"line":3503},[149,10704,3275],{"class":155},[149,10706,2902],{"class":325},[149,10708,10709],{"class":169},"\"地址传递:\"",[149,10711,2902],{"class":325},[149,10713,2924],{"class":155},[149,10715,10716,10719,10721,10723],{"class":151,"line":4296},[149,10717,10718],{"class":162},"    printStudent2",[149,10720,319],{"class":155},[149,10722,2216],{"class":325},[149,10724,10725],{"class":155},"s); \n",[149,10727,10728,10730,10732],{"class":151,"line":4310},[149,10729,5808],{"class":325},[149,10731,5811],{"class":309},[149,10733,841],{"class":155},[149,10735,10736],{"class":151,"line":4318},[149,10737,355],{"class":155},[24,10739,866],{},[42,10741,10742,10745],{},[45,10743,10744],{},"1.先定义结构体，不要在函数中写结构体的定义",[45,10746,10747],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10749,10751],{"id":10750},"_46结构体中const使用场景","4.6结构体中const使用场景",[24,10753,10754],{},"用const防止误操作",[140,10756,10758],{"className":1861,"code":10757,"language":1863,"meta":145,"style":145},"#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",[48,10759,10760,10766,10776,10782,10787,10791,10795,10801,10807,10811,10827,10831,10854,10858,10866,10870,10891,10898,10902],{"__ignoreMap":145},[149,10761,10762,10764],{"class":151,"line":152},[149,10763,3669],{"class":325},[149,10765,3672],{"class":169},[149,10767,10768,10770,10772,10774],{"class":151,"line":193},[149,10769,3677],{"class":325},[149,10771,3680],{"class":325},[149,10773,3683],{"class":162},[149,10775,841],{"class":155},[149,10777,10778,10780],{"class":151,"line":235},[149,10779,3669],{"class":325},[149,10781,9464],{"class":169},[149,10783,10784],{"class":151,"line":340},[149,10785,10786],{"class":155},"sctuct Student\n",[149,10788,10789],{"class":151,"line":346},[149,10790,3270],{"class":155},[149,10792,10793],{"class":151,"line":352},[149,10794,9500],{"class":155},[149,10796,10797,10799],{"class":151,"line":1021},[149,10798,3704],{"class":325},[149,10800,9512],{"class":155},[149,10802,10803,10805],{"class":151,"line":1035},[149,10804,3704],{"class":325},[149,10806,9524],{"class":155},[149,10808,10809],{"class":151,"line":1054},[149,10810,5713],{"class":155},[149,10812,10813,10815,10818,10820,10823,10825],{"class":151,"line":1072},[149,10814,7080],{"class":325},[149,10816,10817],{"class":162}," printStudents",[149,10819,319],{"class":155},[149,10821,10822],{"class":162},"student",[149,10824,10143],{"class":6932},[149,10826,1878],{"class":155},[149,10828,10829],{"class":151,"line":1090},[149,10830,3270],{"class":155},[149,10832,10833,10835,10837,10840,10842,10845,10847,10850,10852],{"class":151,"line":1633},[149,10834,3275],{"class":155},[149,10836,2902],{"class":325},[149,10838,10839],{"class":155},"s.name",[149,10841,2902],{"class":325},[149,10843,10844],{"class":155},"s.age",[149,10846,2902],{"class":325},[149,10848,10849],{"class":155},"s.score",[149,10851,2902],{"class":325},[149,10853,2924],{"class":155},[149,10855,10856],{"class":151,"line":1644},[149,10857,355],{"class":155},[149,10859,10860,10862,10864],{"class":151,"line":3348},[149,10861,1875],{"class":325},[149,10863,3692],{"class":162},[149,10865,7694],{"class":155},[149,10867,10868],{"class":151,"line":3362},[149,10869,3270],{"class":155},[149,10871,10872,10875,10877,10879,10881,10883,10885,10887,10889],{"class":151,"line":3367},[149,10873,10874],{"class":155},"    Student s",[149,10876,166],{"class":325},[149,10878,2756],{"class":155},[149,10880,9631],{"class":169},[149,10882,2241],{"class":155},[149,10884,2513],{"class":309},[149,10886,2241],{"class":155},[149,10888,2513],{"class":309},[149,10890,5713],{"class":155},[149,10892,10893,10896],{"class":151,"line":3373},[149,10894,10895],{"class":162},"    printStudent",[149,10897,10700],{"class":155},[149,10899,10900],{"class":151,"line":3394},[149,10901,4119],{"emptyLinePlaceholder":1800},[149,10903,10904],{"class":151,"line":3399},[149,10905,355],{"class":155},[24,10907,866],{},[42,10909,10910,10913,10916],{},[45,10911,10912],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[45,10914,10915],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[45,10917,10918],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[140,10920,10922],{"className":1861,"code":10921,"language":1863,"meta":145,"style":145},"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",[48,10923,10924,10943,10947,10952,10972],{"__ignoreMap":145},[149,10925,10926,10928,10930,10932,10934,10937,10939,10941],{"class":151,"line":152},[149,10927,7080],{"class":325},[149,10929,10817],{"class":162},[149,10931,319],{"class":155},[149,10933,8508],{"class":325},[149,10935,10936],{"class":162}," student",[149,10938,8234],{"class":325},[149,10940,1720],{"class":6932},[149,10942,1878],{"class":155},[149,10944,10945],{"class":151,"line":193},[149,10946,3270],{"class":155},[149,10948,10949],{"class":151,"line":235},[149,10950,10951],{"class":295},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[149,10953,10954,10956,10958,10960,10962,10964,10966,10968,10970],{"class":151,"line":340},[149,10955,3275],{"class":155},[149,10957,2902],{"class":325},[149,10959,10839],{"class":155},[149,10961,2902],{"class":325},[149,10963,10844],{"class":155},[149,10965,2902],{"class":325},[149,10967,10849],{"class":155},[149,10969,2902],{"class":325},[149,10971,2924],{"class":155},[149,10973,10974],{"class":151,"line":346},[149,10975,355],{"class":155},[14,10977,10979],{"id":10978},"_47案例","4.7案例",[125,10981,10982],{},[45,10983,10984],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[140,10986,10988],{"className":1861,"code":10987,"language":1863,"meta":145,"style":145},"#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",[48,10989,10990,10996,11006,11012,11019,11023,11029,11033,11038,11044,11050,11054,11058,11064,11068,11073,11078,11091,11095,11100,11126,11130,11142,11169,11173,11185,11195,11199,11204,11233,11237,11249,11258,11285,11296,11306,11310,11314,11318,11323,11347,11351,11375,11379,11398,11424,11428,11453,11476,11500,11505,11510,11515,11524,11529,11535,11556,11562,11576,11582,11609,11618,11624,11632,11637],{"__ignoreMap":145},[149,10991,10992,10994],{"class":151,"line":152},[149,10993,3669],{"class":325},[149,10995,3672],{"class":169},[149,10997,10998,11000,11002,11004],{"class":151,"line":193},[149,10999,3677],{"class":325},[149,11001,3680],{"class":325},[149,11003,3683],{"class":162},[149,11005,841],{"class":155},[149,11007,11008,11010],{"class":151,"line":235},[149,11009,3669],{"class":325},[149,11011,9464],{"class":169},[149,11013,11014,11016],{"class":151,"line":340},[149,11015,3669],{"class":325},[149,11017,11018],{"class":169},"\u003Cctime>\n",[149,11020,11021],{"class":151,"line":346},[149,11022,10253],{"class":295},[149,11024,11025,11027],{"class":151,"line":352},[149,11026,9474],{"class":325},[149,11028,9477],{"class":162},[149,11030,11031],{"class":151,"line":1021},[149,11032,3270],{"class":155},[149,11034,11035],{"class":151,"line":1035},[149,11036,11037],{"class":155},"    string sName;\n",[149,11039,11040,11042],{"class":151,"line":1054},[149,11041,3704],{"class":325},[149,11043,9512],{"class":155},[149,11045,11046,11048],{"class":151,"line":1072},[149,11047,3704],{"class":325},[149,11049,9524],{"class":155},[149,11051,11052],{"class":151,"line":1090},[149,11053,5713],{"class":155},[149,11055,11056],{"class":151,"line":1633},[149,11057,10290],{"class":295},[149,11059,11060,11062],{"class":151,"line":1644},[149,11061,9474],{"class":325},[149,11063,10297],{"class":162},[149,11065,11066],{"class":151,"line":3348},[149,11067,3270],{"class":155},[149,11069,11070],{"class":151,"line":3362},[149,11071,11072],{"class":155},"    string tName;\n",[149,11074,11075],{"class":151,"line":3367},[149,11076,11077],{"class":295},"    \u002F\u002F学生数组\n",[149,11079,11080,11082,11084,11087,11089],{"class":151,"line":3373},[149,11081,9610],{"class":325},[149,11083,9613],{"class":162},[149,11085,11086],{"class":155}," sArray[",[149,11088,2182],{"class":309},[149,11090,6408],{"class":155},[149,11092,11093],{"class":151,"line":3394},[149,11094,5713],{"class":155},[149,11096,11097],{"class":151,"line":3399},[149,11098,11099],{"class":295},"\u002F\u002F给老师和学生赋值的函数\n",[149,11101,11102,11104,11107,11109,11111,11114,11117,11120,11122,11124],{"class":151,"line":3413},[149,11103,7080],{"class":325},[149,11105,11106],{"class":162}," allocateSpace",[149,11108,319],{"class":155},[149,11110,9474],{"class":325},[149,11112,11113],{"class":162}," Teacher",[149,11115,11116],{"class":6932}," tArray",[149,11118,11119],{"class":155},"[],",[149,11121,1875],{"class":325},[149,11123,9047],{"class":6932},[149,11125,1878],{"class":155},[149,11127,11128],{"class":151,"line":3418},[149,11129,3270],{"class":155},[149,11131,11132,11135,11137,11140],{"class":151,"line":3447},[149,11133,11134],{"class":155},"    string nameSeed",[149,11136,166],{"class":325},[149,11138,11139],{"class":169},"\"ABCDE\"",[149,11141,841],{"class":155},[149,11143,11144,11146,11148,11150,11153,11155,11157,11160,11162,11165,11167],{"class":151,"line":3452},[149,11145,4919],{"class":325},[149,11147,3378],{"class":155},[149,11149,1875],{"class":325},[149,11151,11152],{"class":155}," i ",[149,11154,166],{"class":325},[149,11156,5811],{"class":309},[149,11158,11159],{"class":155},"; i ",[149,11161,156],{"class":325},[149,11163,11164],{"class":155}," len; i",[149,11166,4011],{"class":325},[149,11168,1878],{"class":155},[149,11170,11171],{"class":151,"line":3469},[149,11172,3749],{"class":155},[149,11174,11175,11178,11180,11183],{"class":151,"line":3474},[149,11176,11177],{"class":155},"        tArray[i].tName ",[149,11179,166],{"class":325},[149,11181,11182],{"class":169}," \"Teacher_\"",[149,11184,841],{"class":155},[149,11186,11187,11189,11192],{"class":151,"line":3479},[149,11188,11177],{"class":155},[149,11190,11191],{"class":325},"+=",[149,11193,11194],{"class":155},"nameSeed[i];\n",[149,11196,11197],{"class":151,"line":3484},[149,11198,4119],{"emptyLinePlaceholder":1800},[149,11200,11201],{"class":151,"line":3498},[149,11202,11203],{"class":295},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[149,11205,11206,11208,11210,11212,11215,11217,11219,11222,11224,11226,11229,11231],{"class":151,"line":3503},[149,11207,5121],{"class":325},[149,11209,3378],{"class":155},[149,11211,1875],{"class":325},[149,11213,11214],{"class":155}," j ",[149,11216,166],{"class":325},[149,11218,5811],{"class":309},[149,11220,11221],{"class":155},"; j ",[149,11223,156],{"class":325},[149,11225,3867],{"class":309},[149,11227,11228],{"class":155},"; j",[149,11230,4011],{"class":325},[149,11232,1878],{"class":155},[149,11234,11235],{"class":151,"line":4296},[149,11236,4229],{"class":155},[149,11238,11239,11242,11244,11247],{"class":151,"line":4310},[149,11240,11241],{"class":155},"            tArray[i].sArray[j].sName ",[149,11243,166],{"class":325},[149,11245,11246],{"class":169}," \"Student_\"",[149,11248,841],{"class":155},[149,11250,11251,11253,11255],{"class":151,"line":4318},[149,11252,11241],{"class":155},[149,11254,11191],{"class":325},[149,11256,11257],{"class":155}," nameSeed[j];\n",[149,11259,11260,11263,11266,11268,11270,11272,11274,11276,11278,11280,11282],{"class":151,"line":4323},[149,11261,11262],{"class":325},"            int",[149,11264,11265],{"class":155}," random",[149,11267,166],{"class":325},[149,11269,4143],{"class":162},[149,11271,4146],{"class":155},[149,11273,2191],{"class":325},[149,11275,2767],{"class":309},[149,11277,2344],{"class":325},[149,11279,2264],{"class":309},[149,11281,1924],{"class":155},[149,11283,11284],{"class":295},"\u002F\u002F40~99\n",[149,11286,11287,11290,11292,11294],{"class":151,"line":4329},[149,11288,11289],{"class":155},"            tArray[i].sArray[j].age ",[149,11291,166],{"class":325},[149,11293,10665],{"class":309},[149,11295,841],{"class":155},[149,11297,11298,11301,11303],{"class":151,"line":4335},[149,11299,11300],{"class":155},"            tArray[i].sArray[j].score ",[149,11302,166],{"class":325},[149,11304,11305],{"class":155}," random;\n",[149,11307,11308],{"class":151,"line":4340},[149,11309,4248],{"class":155},[149,11311,11312],{"class":151,"line":9663},[149,11313,3906],{"class":155},[149,11315,11316],{"class":151,"line":9687},[149,11317,355],{"class":155},[149,11319,11320],{"class":151,"line":9692},[149,11321,11322],{"class":295},"\u002F\u002F打印所有信息的函数\n",[149,11324,11325,11327,11330,11332,11334,11336,11338,11341,11343,11345],{"class":151,"line":9698},[149,11326,7080],{"class":325},[149,11328,11329],{"class":162}," printInfo",[149,11331,319],{"class":155},[149,11333,9474],{"class":325},[149,11335,11113],{"class":162},[149,11337,11116],{"class":6932},[149,11339,11340],{"class":155},"[], ",[149,11342,1875],{"class":325},[149,11344,9047],{"class":6932},[149,11346,1878],{"class":155},[149,11348,11349],{"class":151,"line":9725},[149,11350,3270],{"class":155},[149,11352,11353,11355,11357,11359,11361,11363,11365,11367,11369,11371,11373],{"class":151,"line":9730},[149,11354,4919],{"class":325},[149,11356,3378],{"class":155},[149,11358,1875],{"class":325},[149,11360,11152],{"class":155},[149,11362,166],{"class":325},[149,11364,5811],{"class":309},[149,11366,11159],{"class":155},[149,11368,156],{"class":325},[149,11370,11164],{"class":155},[149,11372,4011],{"class":325},[149,11374,1878],{"class":155},[149,11376,11377],{"class":151,"line":9736},[149,11378,3749],{"class":155},[149,11380,11381,11384,11386,11389,11391,11394,11396],{"class":151,"line":9748},[149,11382,11383],{"class":155},"        cout ",[149,11385,2902],{"class":325},[149,11387,11388],{"class":169}," \"Teacher: \"",[149,11390,3169],{"class":325},[149,11392,11393],{"class":155}," tArray[i].tName ",[149,11395,2902],{"class":325},[149,11397,10555],{"class":155},[149,11399,11400,11402,11404,11406,11408,11410,11412,11414,11416,11418,11420,11422],{"class":151,"line":9760},[149,11401,5121],{"class":325},[149,11403,3378],{"class":155},[149,11405,1875],{"class":325},[149,11407,11214],{"class":155},[149,11409,166],{"class":325},[149,11411,5811],{"class":309},[149,11413,11221],{"class":155},[149,11415,156],{"class":325},[149,11417,3867],{"class":309},[149,11419,11228],{"class":155},[149,11421,4011],{"class":325},[149,11423,1878],{"class":155},[149,11425,11426],{"class":151,"line":9772},[149,11427,4229],{"class":155},[149,11429,11431,11434,11436,11439,11441,11444,11446,11449,11451],{"class":151,"line":11430},47,[149,11432,11433],{"class":155},"            cout ",[149,11435,2902],{"class":325},[149,11437,11438],{"class":169}," \"",[149,11440,2959],{"class":309},[149,11442,11443],{"class":169},"Student: \"",[149,11445,3169],{"class":325},[149,11447,11448],{"class":155}," tArray[i].sArray[j].sName",[149,11450,2902],{"class":325},[149,11452,2924],{"class":155},[149,11454,11456,11458,11460,11462,11464,11467,11469,11472,11474],{"class":151,"line":11455},48,[149,11457,11433],{"class":155},[149,11459,2902],{"class":325},[149,11461,11438],{"class":169},[149,11463,2959],{"class":309},[149,11465,11466],{"class":169},"Age: \"",[149,11468,3169],{"class":325},[149,11470,11471],{"class":155}," tArray[i].sArray[j].age ",[149,11473,2902],{"class":325},[149,11475,10555],{"class":155},[149,11477,11479,11481,11483,11485,11487,11490,11492,11495,11497],{"class":151,"line":11478},49,[149,11480,11433],{"class":155},[149,11482,2902],{"class":325},[149,11484,11438],{"class":169},[149,11486,2959],{"class":309},[149,11488,11489],{"class":169},"Score: \"",[149,11491,3169],{"class":325},[149,11493,11494],{"class":155}," tArray[i].sArray[j].score ",[149,11496,2902],{"class":325},[149,11498,11499],{"class":155}," endl;   \n",[149,11501,11503],{"class":151,"line":11502},50,[149,11504,4248],{"class":155},[149,11506,11508],{"class":151,"line":11507},51,[149,11509,3906],{"class":155},[149,11511,11513],{"class":151,"line":11512},52,[149,11514,355],{"class":155},[149,11516,11518,11520,11522],{"class":151,"line":11517},53,[149,11519,1875],{"class":325},[149,11521,3692],{"class":162},[149,11523,3695],{"class":155},[149,11525,11527],{"class":151,"line":11526},54,[149,11528,3270],{"class":155},[149,11530,11532],{"class":151,"line":11531},55,[149,11533,11534],{"class":295},"    \u002F\u002F随机数种子\n",[149,11536,11538,11540,11542,11544,11546,11548,11550,11552,11554],{"class":151,"line":11537},56,[149,11539,4092],{"class":162},[149,11541,4095],{"class":155},[149,11543,4098],{"class":325},[149,11545,4101],{"class":325},[149,11547,2292],{"class":155},[149,11549,4106],{"class":162},[149,11551,319],{"class":155},[149,11553,4111],{"class":309},[149,11555,4114],{"class":155},[149,11557,11559],{"class":151,"line":11558},57,[149,11560,11561],{"class":295},"    \u002F\u002F1.创建3名老师的数组\n",[149,11563,11565,11567,11569,11572,11574],{"class":151,"line":11564},58,[149,11566,9610],{"class":325},[149,11568,11113],{"class":162},[149,11570,11571],{"class":155}," tArray[",[149,11573,1939],{"class":309},[149,11575,6408],{"class":155},[149,11577,11579],{"class":151,"line":11578},59,[149,11580,11581],{"class":295},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[149,11583,11585,11587,11590,11592,11595,11598,11600,11602,11605,11607],{"class":151,"line":11584},60,[149,11586,3704],{"class":325},[149,11588,11589],{"class":155}," len ",[149,11591,166],{"class":325},[149,11593,11594],{"class":325}," sizeof",[149,11596,11597],{"class":155},"(tArray) ",[149,11599,2447],{"class":325},[149,11601,11594],{"class":325},[149,11603,11604],{"class":155},"(tArray[",[149,11606,2056],{"class":309},[149,11608,5574],{"class":155},[149,11610,11612,11615],{"class":151,"line":11611},61,[149,11613,11614],{"class":162},"    allocateSpace",[149,11616,11617],{"class":155},"(tArray, len);\n",[149,11619,11621],{"class":151,"line":11620},62,[149,11622,11623],{"class":295},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[149,11625,11627,11630],{"class":151,"line":11626},63,[149,11628,11629],{"class":162},"    printInfo",[149,11631,11617],{"class":155},[149,11633,11635],{"class":151,"line":11634},64,[149,11636,4119],{"emptyLinePlaceholder":1800},[149,11638,11640],{"class":151,"line":11639},65,[149,11641,355],{"class":155},[125,11643,11644],{"start":193},[45,11645,11646,11649],{},[31,11647,11648],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[24,11651,11652],{},"五名英雄信息如下：",[140,11654,11658],{"className":11655,"code":11656,"language":11657,"meta":145,"style":145},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[48,11659,11660,11678,11695,11712,11729],{"__ignoreMap":145},[149,11661,11662,11664,11667,11669,11671,11673,11676],{"class":151,"line":152},[149,11663,6635],{"class":155},[149,11665,11666],{"class":169},"\"刘备\"",[149,11668,2241],{"class":155},[149,11670,2636],{"class":309},[149,11672,2241],{"class":155},[149,11674,11675],{"class":169},"\"男\"",[149,11677,6648],{"class":155},[149,11679,11680,11682,11685,11687,11689,11691,11693],{"class":151,"line":193},[149,11681,6635],{"class":155},[149,11683,11684],{"class":169},"\"关羽\"",[149,11686,2241],{"class":155},[149,11688,2611],{"class":309},[149,11690,2241],{"class":155},[149,11692,11675],{"class":169},[149,11694,6648],{"class":155},[149,11696,11697,11699,11702,11704,11706,11708,11710],{"class":151,"line":235},[149,11698,6635],{"class":155},[149,11700,11701],{"class":169},"\"张飞\"",[149,11703,2241],{"class":155},[149,11705,2561],{"class":309},[149,11707,2241],{"class":155},[149,11709,11675],{"class":169},[149,11711,6648],{"class":155},[149,11713,11714,11716,11719,11721,11723,11725,11727],{"class":151,"line":340},[149,11715,6635],{"class":155},[149,11717,11718],{"class":169},"\"赵云\"",[149,11720,2241],{"class":155},[149,11722,2586],{"class":309},[149,11724,2241],{"class":155},[149,11726,11675],{"class":169},[149,11728,6648],{"class":155},[149,11730,11731,11733,11736,11738,11740,11742,11745],{"class":151,"line":346},[149,11732,6635],{"class":155},[149,11734,11735],{"class":169},"\"貂蝉\"",[149,11737,2241],{"class":155},[149,11739,2537],{"class":309},[149,11741,2241],{"class":155},[149,11743,11744],{"class":169},"\"女\"",[149,11746,6648],{"class":155},[24,11748,11749],{},"代码：",[140,11751,11753],{"className":1861,"code":11752,"language":1863,"meta":145,"style":145},"#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",[48,11754,11755,11761,11771,11777,11784,11788,11792,11798,11803,11807,11812,11835,11839,11864,11868,11901,11906,11935,11940,11955,11981,12001,12006,12011,12015,12019,12024,12046,12050,12074,12078,12140,12144,12148,12156,12160,12165,12176,12180,12196,12212,12228,12244,12260,12264,12284,12306,12311,12324,12331,12336,12342,12347,12360,12366],{"__ignoreMap":145},[149,11756,11757,11759],{"class":151,"line":152},[149,11758,3669],{"class":325},[149,11760,3672],{"class":169},[149,11762,11763,11765,11767,11769],{"class":151,"line":193},[149,11764,3677],{"class":325},[149,11766,3680],{"class":325},[149,11768,3683],{"class":162},[149,11770,841],{"class":155},[149,11772,11773,11775],{"class":151,"line":235},[149,11774,3669],{"class":325},[149,11776,9464],{"class":169},[149,11778,11779,11781],{"class":151,"line":340},[149,11780,9474],{"class":325},[149,11782,11783],{"class":162}," Sanguo\n",[149,11785,11786],{"class":151,"line":346},[149,11787,3270],{"class":155},[149,11789,11790],{"class":151,"line":352},[149,11791,9500],{"class":155},[149,11793,11794,11796],{"class":151,"line":1021},[149,11795,3704],{"class":325},[149,11797,9512],{"class":155},[149,11799,11800],{"class":151,"line":1035},[149,11801,11802],{"class":155},"    string gender;\n",[149,11804,11805],{"class":151,"line":1054},[149,11806,5713],{"class":155},[149,11808,11809],{"class":151,"line":1072},[149,11810,11811],{"class":295},"\u002F\u002F定义排序函数\n",[149,11813,11814,11816,11818,11820,11823,11825,11827,11829,11831,11833],{"class":151,"line":1090},[149,11815,7080],{"class":325},[149,11817,9032],{"class":162},[149,11819,319],{"class":155},[149,11821,11822],{"class":162},"Sanguo",[149,11824,8234],{"class":325},[149,11826,1720],{"class":6932},[149,11828,2241],{"class":155},[149,11830,1875],{"class":325},[149,11832,9047],{"class":6932},[149,11834,1878],{"class":155},[149,11836,11837],{"class":151,"line":1633},[149,11838,3270],{"class":155},[149,11840,11841,11843,11845,11847,11849,11851,11853,11855,11857,11860,11862],{"class":151,"line":1644},[149,11842,4919],{"class":325},[149,11844,319],{"class":155},[149,11846,1875],{"class":325},[149,11848,4750],{"class":155},[149,11850,166],{"class":325},[149,11852,2056],{"class":309},[149,11854,4757],{"class":155},[149,11856,156],{"class":325},[149,11858,11859],{"class":155},"len;i",[149,11861,4011],{"class":325},[149,11863,1878],{"class":155},[149,11865,11866],{"class":151,"line":3348},[149,11867,3749],{"class":155},[149,11869,11870,11873,11875,11877,11879,11881,11883,11885,11887,11889,11891,11893,11895,11897,11899],{"class":151,"line":3362},[149,11871,11872],{"class":325},"     for",[149,11874,3378],{"class":155},[149,11876,1875],{"class":325},[149,11878,5128],{"class":155},[149,11880,166],{"class":325},[149,11882,2056],{"class":309},[149,11884,5135],{"class":155},[149,11886,156],{"class":325},[149,11888,9074],{"class":155},[149,11890,2395],{"class":325},[149,11892,830],{"class":309},[149,11894,2395],{"class":325},[149,11896,5268],{"class":155},[149,11898,4011],{"class":325},[149,11900,1878],{"class":155},[149,11902,11903],{"class":151,"line":3367},[149,11904,11905],{"class":155},"     {\n",[149,11907,11908,11911,11914,11916,11919,11921,11924,11926,11928,11930,11932],{"class":151,"line":3373},[149,11909,11910],{"class":325},"         if",[149,11912,11913],{"class":155}," ((s",[149,11915,2344],{"class":325},[149,11917,11918],{"class":155},"j)->age ",[149,11920,2819],{"class":325},[149,11922,11923],{"class":155}," (s",[149,11925,2344],{"class":325},[149,11927,2330],{"class":155},[149,11929,2344],{"class":325},[149,11931,830],{"class":309},[149,11933,11934],{"class":155},")->age)\n",[149,11936,11937],{"class":151,"line":3394},[149,11938,11939],{"class":155},"         {\n",[149,11941,11942,11945,11947,11950,11952],{"class":151,"line":3399},[149,11943,11944],{"class":155},"             Sanguo temp",[149,11946,8869],{"class":325},[149,11948,11949],{"class":155},"(s",[149,11951,2344],{"class":325},[149,11953,11954],{"class":155},"j);\n",[149,11956,11957,11960,11962,11964,11967,11969,11971,11973,11975,11977,11979],{"class":151,"line":3413},[149,11958,11959],{"class":325},"             *",[149,11961,11949],{"class":155},[149,11963,2344],{"class":325},[149,11965,11966],{"class":155},"j)",[149,11968,8869],{"class":325},[149,11970,11949],{"class":155},[149,11972,2344],{"class":325},[149,11974,2330],{"class":155},[149,11976,2344],{"class":325},[149,11978,830],{"class":309},[149,11980,337],{"class":155},[149,11982,11983,11985,11987,11989,11991,11993,11995,11997,11999],{"class":151,"line":3418},[149,11984,11959],{"class":325},[149,11986,11949],{"class":155},[149,11988,2344],{"class":325},[149,11990,2330],{"class":155},[149,11992,2344],{"class":325},[149,11994,830],{"class":309},[149,11996,2292],{"class":155},[149,11998,166],{"class":325},[149,12000,5998],{"class":155},[149,12002,12003],{"class":151,"line":3447},[149,12004,12005],{"class":155},"         }\n",[149,12007,12008],{"class":151,"line":3452},[149,12009,12010],{"class":155},"     }\n",[149,12012,12013],{"class":151,"line":3469},[149,12014,3906],{"class":155},[149,12016,12017],{"class":151,"line":3474},[149,12018,355],{"class":155},[149,12020,12021],{"class":151,"line":3479},[149,12022,12023],{"class":295},"\u002F\u002F定义打印函数\n",[149,12025,12026,12028,12030,12032,12034,12036,12038,12040,12042,12044],{"class":151,"line":3484},[149,12027,7080],{"class":325},[149,12029,11329],{"class":162},[149,12031,319],{"class":155},[149,12033,11822],{"class":162},[149,12035,8234],{"class":325},[149,12037,1720],{"class":6932},[149,12039,2241],{"class":155},[149,12041,1875],{"class":325},[149,12043,9047],{"class":6932},[149,12045,1878],{"class":155},[149,12047,12048],{"class":151,"line":3498},[149,12049,3270],{"class":155},[149,12051,12052,12054,12056,12058,12060,12062,12064,12066,12068,12070,12072],{"class":151,"line":3503},[149,12053,4919],{"class":325},[149,12055,3378],{"class":155},[149,12057,1875],{"class":325},[149,12059,4750],{"class":155},[149,12061,166],{"class":325},[149,12063,2056],{"class":309},[149,12065,4757],{"class":155},[149,12067,156],{"class":325},[149,12069,11859],{"class":155},[149,12071,4011],{"class":325},[149,12073,1878],{"class":155},[149,12075,12076],{"class":151,"line":4296},[149,12077,3749],{"class":155},[149,12079,12080,12082,12084,12086,12088,12091,12093,12095,12097,12100,12102,12104,12106,12109,12111,12113,12115,12118,12120,12122,12124,12127,12129,12131,12133,12136,12138],{"class":151,"line":4310},[149,12081,5169],{"class":155},[149,12083,2902],{"class":325},[149,12085,2115],{"class":169},[149,12087,2959],{"class":309},[149,12089,12090],{"class":169},"姓名：\"",[149,12092,2902],{"class":325},[149,12094,11949],{"class":155},[149,12096,2344],{"class":325},[149,12098,12099],{"class":155},"i)->name",[149,12101,2902],{"class":325},[149,12103,2115],{"class":169},[149,12105,2959],{"class":309},[149,12107,12108],{"class":169},"年龄：\"",[149,12110,2902],{"class":325},[149,12112,11949],{"class":155},[149,12114,2344],{"class":325},[149,12116,12117],{"class":155},"i)->age",[149,12119,2902],{"class":325},[149,12121,2115],{"class":169},[149,12123,2959],{"class":309},[149,12125,12126],{"class":169},"性别：\"",[149,12128,2902],{"class":325},[149,12130,11949],{"class":155},[149,12132,2344],{"class":325},[149,12134,12135],{"class":155},"i)->gender",[149,12137,2902],{"class":325},[149,12139,2924],{"class":155},[149,12141,12142],{"class":151,"line":4318},[149,12143,3906],{"class":155},[149,12145,12146],{"class":151,"line":4323},[149,12147,355],{"class":155},[149,12149,12150,12152,12154],{"class":151,"line":4329},[149,12151,1875],{"class":325},[149,12153,3692],{"class":162},[149,12155,3695],{"class":155},[149,12157,12158],{"class":151,"line":4335},[149,12159,3270],{"class":155},[149,12161,12162],{"class":151,"line":4340},[149,12163,12164],{"class":295},"    \u002F\u002F定义结构体变量\n",[149,12166,12167,12170,12172,12174],{"class":151,"line":9663},[149,12168,12169],{"class":155},"    Sanguo s1[",[149,12171,2182],{"class":309},[149,12173,2799],{"class":155},[149,12175,6626],{"class":325},[149,12177,12178],{"class":151,"line":9687},[149,12179,3749],{"class":155},[149,12181,12182,12184,12186,12188,12190,12192,12194],{"class":151,"line":9692},[149,12183,6635],{"class":155},[149,12185,11666],{"class":169},[149,12187,2241],{"class":155},[149,12189,2636],{"class":309},[149,12191,2241],{"class":155},[149,12193,11675],{"class":169},[149,12195,6648],{"class":155},[149,12197,12198,12200,12202,12204,12206,12208,12210],{"class":151,"line":9698},[149,12199,6635],{"class":155},[149,12201,11684],{"class":169},[149,12203,2241],{"class":155},[149,12205,2611],{"class":309},[149,12207,2241],{"class":155},[149,12209,11675],{"class":169},[149,12211,6648],{"class":155},[149,12213,12214,12216,12218,12220,12222,12224,12226],{"class":151,"line":9725},[149,12215,6635],{"class":155},[149,12217,11701],{"class":169},[149,12219,2241],{"class":155},[149,12221,2561],{"class":309},[149,12223,2241],{"class":155},[149,12225,11675],{"class":169},[149,12227,6648],{"class":155},[149,12229,12230,12232,12234,12236,12238,12240,12242],{"class":151,"line":9730},[149,12231,6635],{"class":155},[149,12233,11718],{"class":169},[149,12235,2241],{"class":155},[149,12237,2586],{"class":309},[149,12239,2241],{"class":155},[149,12241,11675],{"class":169},[149,12243,6648],{"class":155},[149,12245,12246,12248,12250,12252,12254,12256,12258],{"class":151,"line":9736},[149,12247,6635],{"class":155},[149,12249,11735],{"class":169},[149,12251,2241],{"class":155},[149,12253,2537],{"class":309},[149,12255,2241],{"class":155},[149,12257,11744],{"class":169},[149,12259,6648],{"class":155},[149,12261,12262],{"class":151,"line":9748},[149,12263,6669],{"class":155},[149,12265,12266,12268,12270,12272,12275,12277,12280,12282],{"class":151,"line":9760},[149,12267,3704],{"class":325},[149,12269,9047],{"class":155},[149,12271,5921],{"class":325},[149,12273,12274],{"class":155},"(s1)",[149,12276,5927],{"class":325},[149,12278,12279],{"class":155},"(s1[",[149,12281,2056],{"class":309},[149,12283,5574],{"class":155},[149,12285,12286,12289,12291,12294,12296,12299,12302,12304],{"class":151,"line":9772},[149,12287,12288],{"class":155},"    Sanguo ",[149,12290,2318],{"class":325},[149,12292,12293],{"class":155},"s ",[149,12295,166],{"class":325},[149,12297,12298],{"class":325}," &",[149,12300,12301],{"class":155},"s1[",[149,12303,2056],{"class":309},[149,12305,6408],{"class":155},[149,12307,12308],{"class":151,"line":11430},[149,12309,12310],{"class":295},"    \u002F\u002F排序前：\n",[149,12312,12313,12315,12317,12320,12322],{"class":151,"line":11455},[149,12314,8245],{"class":155},[149,12316,2902],{"class":325},[149,12318,12319],{"class":169}," \"排序前：\"",[149,12321,3169],{"class":325},[149,12323,10555],{"class":155},[149,12325,12326,12328],{"class":151,"line":11478},[149,12327,11629],{"class":162},[149,12329,12330],{"class":155},"(s,len);\n",[149,12332,12333],{"class":151,"line":11502},[149,12334,12335],{"class":295},"    \u002F\u002F调用排序函数\n",[149,12337,12338,12340],{"class":151,"line":11507},[149,12339,9314],{"class":162},[149,12341,12330],{"class":155},[149,12343,12344],{"class":151,"line":11512},[149,12345,12346],{"class":295},"    \u002F\u002F排序后\n",[149,12348,12349,12351,12353,12356,12358],{"class":151,"line":11517},[149,12350,8245],{"class":155},[149,12352,2902],{"class":325},[149,12354,12355],{"class":169}," \"排序后：\"",[149,12357,3169],{"class":325},[149,12359,10555],{"class":155},[149,12361,12362,12364],{"class":151,"line":11526},[149,12363,11629],{"class":162},[149,12365,12330],{"class":155},[149,12367,12368],{"class":151,"line":11531},[149,12369,355],{"class":155},[24,12371,12372,12373,12375],{},"注意：使用指针时直接用传首地址**&s",[149,12374,2056],{},"**",[1783,12377,12378],{},"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":145,"searchDepth":193,"depth":193,"links":12380},[12381,12382,12383,12384,12385,12386,12387],{"id":9418,"depth":193,"text":9419},{"id":9780,"depth":193,"text":9781},{"id":10049,"depth":193,"text":10050},{"id":10214,"depth":193,"text":10215},{"id":10430,"depth":193,"text":10431},{"id":10750,"depth":193,"text":10751},{"id":10978,"depth":193,"text":10979},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9407,"description":9415},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12394,"title":12395,"body":12396,"description":145,"extension":1798,"meta":13739,"navigation":1800,"path":13740,"seo":13741,"stem":13742,"__hash__":13743},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12397,"toc":13733},[12398,12401,12405,12411,12425,12430,12433,12437,12444,12450,12453,12460,12466,12471,12474,12477,12480,13044,13047,13061,13065,13070,13086,13226,13229,13235,13238,13243,13251,13359,13362,13367,13370,13375,13378,13384,13387,13730],[10,12399,12395],{"id":12400},"_5程序内存模型",[14,12402,12404],{"id":12403},"_51内存分区模型","5.1内存分区模型",[24,12406,12407,12408],{},"C++程序在执行时，将内存大方向划分为",[31,12409,12410],{},"4个区域",[42,12412,12413,12416,12419,12422],{},[45,12414,12415],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[45,12417,12418],{},"全局区：存放全局变量和静态变量以及常量",[45,12420,12421],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[45,12423,12424],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[24,12426,12427],{},[31,12428,12429],{},"内存四区意义：",[24,12431,12432],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[19,12434,12436],{"id":12435},"_511程序运行前","5.1.1程序运行前",[24,12438,12439,12440,12443],{},"​\t在程序编译后，生成了exe可执行程序，",[31,12441,12442],{},"未执行该程序前","分为两个区域",[24,12445,12446,12447],{},"​\t",[31,12448,12449],{},"代码区：",[24,12451,12452],{},"​\t\t存放 CPU 执行的机器指令",[24,12454,12455,12456,12459],{},"​\t\t代码区是",[31,12457,12458],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[24,12461,12455,12462,12465],{},[31,12463,12464],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[24,12467,12446,12468],{},[31,12469,12470],{},"全局区：",[24,12472,12473],{},"​\t\t全局变量和静态变量存放在此.",[24,12475,12476],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[24,12478,12479],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[140,12481,12483],{"className":1861,"code":12482,"language":1863,"meta":145,"style":145},"\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",[48,12484,12485,12490,12503,12516,12520,12525,12540,12555,12559,12568,12572,12577,12590,12603,12607,12612,12638,12664,12668,12695,12721,12725,12730,12746,12761,12765,12791,12817,12821,12846,12871,12875,12901,12927,12931,12947,12962,12988,13014,13018,13028,13032,13040],{"__ignoreMap":145},[149,12486,12487],{"class":151,"line":152},[149,12488,12489],{"class":295},"\u002F\u002F全局变量\n",[149,12491,12492,12494,12497,12499,12501],{"class":151,"line":193},[149,12493,1875],{"class":325},[149,12495,12496],{"class":155}," g_a ",[149,12498,166],{"class":325},[149,12500,3757],{"class":309},[149,12502,841],{"class":155},[149,12504,12505,12507,12510,12512,12514],{"class":151,"line":235},[149,12506,1875],{"class":325},[149,12508,12509],{"class":155}," g_b ",[149,12511,166],{"class":325},[149,12513,3757],{"class":309},[149,12515,841],{"class":155},[149,12517,12518],{"class":151,"line":340},[149,12519,4119],{"emptyLinePlaceholder":1800},[149,12521,12522],{"class":151,"line":346},[149,12523,12524],{"class":295},"\u002F\u002F全局常量\n",[149,12526,12527,12529,12531,12534,12536,12538],{"class":151,"line":352},[149,12528,8508],{"class":325},[149,12530,4101],{"class":325},[149,12532,12533],{"class":155}," c_g_a ",[149,12535,166],{"class":325},[149,12537,3757],{"class":309},[149,12539,841],{"class":155},[149,12541,12542,12544,12546,12549,12551,12553],{"class":151,"line":1021},[149,12543,8508],{"class":325},[149,12545,4101],{"class":325},[149,12547,12548],{"class":155}," c_g_b ",[149,12550,166],{"class":325},[149,12552,3757],{"class":309},[149,12554,841],{"class":155},[149,12556,12557],{"class":151,"line":1035},[149,12558,4119],{"emptyLinePlaceholder":1800},[149,12560,12561,12563,12565],{"class":151,"line":1054},[149,12562,1875],{"class":325},[149,12564,3692],{"class":162},[149,12566,12567],{"class":155},"() {\n",[149,12569,12570],{"class":151,"line":1072},[149,12571,4119],{"emptyLinePlaceholder":1800},[149,12573,12574],{"class":151,"line":1090},[149,12575,12576],{"class":295},"    \u002F\u002F局部变量\n",[149,12578,12579,12581,12584,12586,12588],{"class":151,"line":1633},[149,12580,3704],{"class":325},[149,12582,12583],{"class":155}," a ",[149,12585,166],{"class":325},[149,12587,3757],{"class":309},[149,12589,841],{"class":155},[149,12591,12592,12594,12597,12599,12601],{"class":151,"line":1644},[149,12593,3704],{"class":325},[149,12595,12596],{"class":155}," b ",[149,12598,166],{"class":325},[149,12600,3757],{"class":309},[149,12602,841],{"class":155},[149,12604,12605],{"class":151,"line":3348},[149,12606,4119],{"emptyLinePlaceholder":1800},[149,12608,12609],{"class":151,"line":3362},[149,12610,12611],{"class":295},"    \u002F\u002F打印地址\n",[149,12613,12614,12616,12618,12621,12623,12625,12627,12629,12631,12634,12636],{"class":151,"line":3367},[149,12615,8245],{"class":155},[149,12617,2902],{"class":325},[149,12619,12620],{"class":169}," \"局部变量a地址为： \"",[149,12622,3169],{"class":325},[149,12624,3378],{"class":155},[149,12626,1875],{"class":325},[149,12628,2292],{"class":155},[149,12630,2216],{"class":325},[149,12632,12633],{"class":155},"a ",[149,12635,2902],{"class":325},[149,12637,10555],{"class":155},[149,12639,12640,12642,12644,12647,12649,12651,12653,12655,12657,12660,12662],{"class":151,"line":3373},[149,12641,8245],{"class":155},[149,12643,2902],{"class":325},[149,12645,12646],{"class":169}," \"局部变量b地址为： \"",[149,12648,3169],{"class":325},[149,12650,3378],{"class":155},[149,12652,1875],{"class":325},[149,12654,2292],{"class":155},[149,12656,2216],{"class":325},[149,12658,12659],{"class":155},"b ",[149,12661,2902],{"class":325},[149,12663,10555],{"class":155},[149,12665,12666],{"class":151,"line":3394},[149,12667,4119],{"emptyLinePlaceholder":1800},[149,12669,12670,12672,12674,12677,12679,12682,12684,12686,12688,12691,12693],{"class":151,"line":3399},[149,12671,8245],{"class":155},[149,12673,2902],{"class":325},[149,12675,12676],{"class":169}," \"全局变量g_a地址为： \"",[149,12678,3169],{"class":325},[149,12680,12681],{"class":155},"  (",[149,12683,1875],{"class":325},[149,12685,2292],{"class":155},[149,12687,2216],{"class":325},[149,12689,12690],{"class":155},"g_a ",[149,12692,2902],{"class":325},[149,12694,10555],{"class":155},[149,12696,12697,12699,12701,12704,12706,12708,12710,12712,12714,12717,12719],{"class":151,"line":3413},[149,12698,8245],{"class":155},[149,12700,2902],{"class":325},[149,12702,12703],{"class":169}," \"全局变量g_b地址为： \"",[149,12705,3169],{"class":325},[149,12707,12681],{"class":155},[149,12709,1875],{"class":325},[149,12711,2292],{"class":155},[149,12713,2216],{"class":325},[149,12715,12716],{"class":155},"g_b ",[149,12718,2902],{"class":325},[149,12720,10555],{"class":155},[149,12722,12723],{"class":151,"line":3418},[149,12724,4119],{"emptyLinePlaceholder":1800},[149,12726,12727],{"class":151,"line":3447},[149,12728,12729],{"class":295},"    \u002F\u002F静态变量\n",[149,12731,12732,12735,12737,12740,12742,12744],{"class":151,"line":3452},[149,12733,12734],{"class":325},"    static",[149,12736,4101],{"class":325},[149,12738,12739],{"class":155}," s_a ",[149,12741,166],{"class":325},[149,12743,3757],{"class":309},[149,12745,841],{"class":155},[149,12747,12748,12750,12752,12755,12757,12759],{"class":151,"line":3469},[149,12749,12734],{"class":325},[149,12751,4101],{"class":325},[149,12753,12754],{"class":155}," s_b ",[149,12756,166],{"class":325},[149,12758,3757],{"class":309},[149,12760,841],{"class":155},[149,12762,12763],{"class":151,"line":3474},[149,12764,4119],{"emptyLinePlaceholder":1800},[149,12766,12767,12769,12771,12774,12776,12778,12780,12782,12784,12787,12789],{"class":151,"line":3479},[149,12768,8245],{"class":155},[149,12770,2902],{"class":325},[149,12772,12773],{"class":169}," \"静态变量s_a地址为： \"",[149,12775,3169],{"class":325},[149,12777,3378],{"class":155},[149,12779,1875],{"class":325},[149,12781,2292],{"class":155},[149,12783,2216],{"class":325},[149,12785,12786],{"class":155},"s_a ",[149,12788,2902],{"class":325},[149,12790,10555],{"class":155},[149,12792,12793,12795,12797,12800,12802,12804,12806,12808,12810,12813,12815],{"class":151,"line":3484},[149,12794,8245],{"class":155},[149,12796,2902],{"class":325},[149,12798,12799],{"class":169}," \"静态变量s_b地址为： \"",[149,12801,3169],{"class":325},[149,12803,3378],{"class":155},[149,12805,1875],{"class":325},[149,12807,2292],{"class":155},[149,12809,2216],{"class":325},[149,12811,12812],{"class":155},"s_b ",[149,12814,2902],{"class":325},[149,12816,10555],{"class":155},[149,12818,12819],{"class":151,"line":3498},[149,12820,4119],{"emptyLinePlaceholder":1800},[149,12822,12823,12825,12827,12830,12832,12834,12836,12838,12840,12842,12844],{"class":151,"line":3503},[149,12824,8245],{"class":155},[149,12826,2902],{"class":325},[149,12828,12829],{"class":169}," \"字符串常量地址为： \"",[149,12831,3169],{"class":325},[149,12833,3378],{"class":155},[149,12835,1875],{"class":325},[149,12837,2292],{"class":155},[149,12839,2216],{"class":325},[149,12841,2919],{"class":169},[149,12843,3169],{"class":325},[149,12845,10555],{"class":155},[149,12847,12848,12850,12852,12854,12856,12858,12860,12862,12864,12867,12869],{"class":151,"line":4296},[149,12849,8245],{"class":155},[149,12851,2902],{"class":325},[149,12853,12829],{"class":169},[149,12855,3169],{"class":325},[149,12857,3378],{"class":155},[149,12859,1875],{"class":325},[149,12861,2292],{"class":155},[149,12863,2216],{"class":325},[149,12865,12866],{"class":169},"\"hello world1\"",[149,12868,3169],{"class":325},[149,12870,10555],{"class":155},[149,12872,12873],{"class":151,"line":4310},[149,12874,4119],{"emptyLinePlaceholder":1800},[149,12876,12877,12879,12881,12884,12886,12888,12890,12892,12894,12897,12899],{"class":151,"line":4318},[149,12878,8245],{"class":155},[149,12880,2902],{"class":325},[149,12882,12883],{"class":169}," \"全局常量c_g_a地址为： \"",[149,12885,3169],{"class":325},[149,12887,3378],{"class":155},[149,12889,1875],{"class":325},[149,12891,2292],{"class":155},[149,12893,2216],{"class":325},[149,12895,12896],{"class":155},"c_g_a ",[149,12898,2902],{"class":325},[149,12900,10555],{"class":155},[149,12902,12903,12905,12907,12910,12912,12914,12916,12918,12920,12923,12925],{"class":151,"line":4323},[149,12904,8245],{"class":155},[149,12906,2902],{"class":325},[149,12908,12909],{"class":169}," \"全局常量c_g_b地址为： \"",[149,12911,3169],{"class":325},[149,12913,3378],{"class":155},[149,12915,1875],{"class":325},[149,12917,2292],{"class":155},[149,12919,2216],{"class":325},[149,12921,12922],{"class":155},"c_g_b ",[149,12924,2902],{"class":325},[149,12926,10555],{"class":155},[149,12928,12929],{"class":151,"line":4329},[149,12930,4119],{"emptyLinePlaceholder":1800},[149,12932,12933,12936,12938,12941,12943,12945],{"class":151,"line":4335},[149,12934,12935],{"class":325},"    const",[149,12937,4101],{"class":325},[149,12939,12940],{"class":155}," c_l_a ",[149,12942,166],{"class":325},[149,12944,3757],{"class":309},[149,12946,841],{"class":155},[149,12948,12949,12951,12953,12956,12958,12960],{"class":151,"line":4340},[149,12950,12935],{"class":325},[149,12952,4101],{"class":325},[149,12954,12955],{"class":155}," c_l_b ",[149,12957,166],{"class":325},[149,12959,3757],{"class":309},[149,12961,841],{"class":155},[149,12963,12964,12966,12968,12971,12973,12975,12977,12979,12981,12984,12986],{"class":151,"line":9663},[149,12965,8245],{"class":155},[149,12967,2902],{"class":325},[149,12969,12970],{"class":169}," \"局部常量c_l_a地址为： \"",[149,12972,3169],{"class":325},[149,12974,3378],{"class":155},[149,12976,1875],{"class":325},[149,12978,2292],{"class":155},[149,12980,2216],{"class":325},[149,12982,12983],{"class":155},"c_l_a ",[149,12985,2902],{"class":325},[149,12987,10555],{"class":155},[149,12989,12990,12992,12994,12997,12999,13001,13003,13005,13007,13010,13012],{"class":151,"line":9687},[149,12991,8245],{"class":155},[149,12993,2902],{"class":325},[149,12995,12996],{"class":169}," \"局部常量c_l_b地址为： \"",[149,12998,3169],{"class":325},[149,13000,3378],{"class":155},[149,13002,1875],{"class":325},[149,13004,2292],{"class":155},[149,13006,2216],{"class":325},[149,13008,13009],{"class":155},"c_l_b ",[149,13011,2902],{"class":325},[149,13013,10555],{"class":155},[149,13015,13016],{"class":151,"line":9692},[149,13017,4119],{"emptyLinePlaceholder":1800},[149,13019,13020,13022,13024,13026],{"class":151,"line":9698},[149,13021,4022],{"class":162},[149,13023,319],{"class":155},[149,13025,4027],{"class":169},[149,13027,337],{"class":155},[149,13029,13030],{"class":151,"line":9725},[149,13031,4119],{"emptyLinePlaceholder":1800},[149,13033,13034,13036,13038],{"class":151,"line":9730},[149,13035,5808],{"class":325},[149,13037,5811],{"class":309},[149,13039,841],{"class":155},[149,13041,13042],{"class":151,"line":9736},[149,13043,355],{"class":155},[24,13045,13046],{},"总结：",[42,13048,13049,13052,13055,13058],{},[45,13050,13051],{},"c++中程序运行前分为全局区和代码区",[45,13053,13054],{},"代码区特点是共享和只读",[45,13056,13057],{},"全局区中存放全局变量、静态变量、常量",[45,13059,13060],{},"常量区中存放const修饰的全局常量和字符串常量",[19,13062,13064],{"id":13063},"_512程序运行后","5.1.2程序运行后",[125,13066,13067],{},[45,13068,13069],{},"栈区：",[42,13071,13072,13079],{},[45,13073,13074,13075,13078],{},"由编译器自动分配释放, 存放",[31,13076,13077],{},"函数的参数值,局部变量","等",[45,13080,13081,13082,13085],{},"注意事项：",[31,13083,13084],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[140,13087,13089],{"className":1861,"code":13088,"language":1863,"meta":145,"style":145},"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",[48,13090,13091,13102,13106,13121,13133,13137,13141,13149,13154,13169,13187,13204,13214,13222],{"__ignoreMap":145},[149,13092,13093,13095,13097,13100],{"class":151,"line":152},[149,13094,1875],{"class":325},[149,13096,8234],{"class":325},[149,13098,13099],{"class":162}," func",[149,13101,3695],{"class":155},[149,13103,13104],{"class":151,"line":193},[149,13105,3270],{"class":155},[149,13107,13108,13110,13112,13114,13116,13118],{"class":151,"line":235},[149,13109,3704],{"class":325},[149,13111,12583],{"class":155},[149,13113,166],{"class":325},[149,13115,3757],{"class":309},[149,13117,1924],{"class":155},[149,13119,13120],{"class":295}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[149,13122,13123,13125,13127,13130],{"class":151,"line":340},[149,13124,5808],{"class":325},[149,13126,12298],{"class":325},[149,13128,13129],{"class":155},"a;",[149,13131,13132],{"class":295}," \u002F\u002F放回局部变量的地址\n",[149,13134,13135],{"class":151,"line":346},[149,13136,355],{"class":155},[149,13138,13139],{"class":151,"line":352},[149,13140,4119],{"emptyLinePlaceholder":1800},[149,13142,13143,13145,13147],{"class":151,"line":1021},[149,13144,1875],{"class":325},[149,13146,3692],{"class":162},[149,13148,12567],{"class":155},[149,13150,13151],{"class":151,"line":1035},[149,13152,13153],{"class":295},"    \u002F\u002F接受func的返回值\n",[149,13155,13156,13158,13160,13163,13165,13167],{"class":151,"line":1054},[149,13157,3704],{"class":325},[149,13159,8234],{"class":325},[149,13161,13162],{"class":155},"p ",[149,13164,166],{"class":325},[149,13166,13099],{"class":162},[149,13168,7352],{"class":155},[149,13170,13171,13173,13175,13177,13179,13181,13184],{"class":151,"line":1072},[149,13172,8245],{"class":155},[149,13174,2902],{"class":325},[149,13176,8234],{"class":325},[149,13178,13162],{"class":155},[149,13180,2902],{"class":325},[149,13182,13183],{"class":155}," endl;",[149,13185,13186],{"class":295}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[149,13188,13189,13191,13193,13195,13197,13199,13201],{"class":151,"line":1090},[149,13190,8245],{"class":155},[149,13192,2902],{"class":325},[149,13194,8234],{"class":325},[149,13196,13162],{"class":155},[149,13198,2902],{"class":325},[149,13200,13183],{"class":155},[149,13202,13203],{"class":295}," \u002F\u002F第二次这个数据不再保留\n",[149,13205,13206,13208,13210,13212],{"class":151,"line":1633},[149,13207,4022],{"class":162},[149,13209,319],{"class":155},[149,13211,4027],{"class":169},[149,13213,337],{"class":155},[149,13215,13216,13218,13220],{"class":151,"line":1644},[149,13217,5808],{"class":325},[149,13219,5811],{"class":309},[149,13221,841],{"class":155},[149,13223,13224],{"class":151,"line":3348},[149,13225,355],{"class":155},[24,13227,13228],{},"输出结果：",[24,13230,13231],{},[83,13232],{"alt":13233,"src":13234},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[24,13236,13237],{},"总结：不要返回局部变量的地址",[125,13239,13240],{"start":193},[45,13241,13242],{},"堆区",[42,13244,13245,13248],{},[45,13246,13247],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[45,13249,13250],{},"在c++中主要利用new在堆区开辟内存",[140,13252,13254],{"className":1861,"code":13253,"language":1863,"meta":145,"style":145},"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",[48,13255,13256,13271,13275,13280,13301,13308,13312,13320,13324,13329,13343,13355],{"__ignoreMap":145},[149,13257,13258,13260,13263,13266,13268],{"class":151,"line":152},[149,13259,1875],{"class":325},[149,13261,13262],{"class":325},"  *",[149,13264,13265],{"class":162},"func",[149,13267,4146],{"class":155},[149,13269,13270],{"class":295},"  \u002F\u002F函数返回指针\n",[149,13272,13273],{"class":151,"line":193},[149,13274,3270],{"class":155},[149,13276,13277],{"class":151,"line":235},[149,13278,13279],{"class":295},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[149,13281,13282,13284,13286,13288,13290,13293,13295,13297,13299],{"class":151,"line":340},[149,13283,5865],{"class":325},[149,13285,8234],{"class":325},[149,13287,24],{"class":155},[149,13289,166],{"class":325},[149,13291,13292],{"class":325}," new",[149,13294,4101],{"class":325},[149,13296,319],{"class":155},[149,13298,2309],{"class":309},[149,13300,337],{"class":155},[149,13302,13303,13305],{"class":151,"line":346},[149,13304,6099],{"class":325},[149,13306,13307],{"class":155}," p;\n",[149,13309,13310],{"class":151,"line":352},[149,13311,355],{"class":155},[149,13313,13314,13316,13318],{"class":151,"line":1021},[149,13315,1875],{"class":325},[149,13317,3692],{"class":162},[149,13319,3695],{"class":155},[149,13321,13322],{"class":151,"line":1035},[149,13323,3270],{"class":155},[149,13325,13326],{"class":151,"line":1054},[149,13327,13328],{"class":295},"    \u002F\u002F在堆区开辟数据\n",[149,13330,13331,13333,13335,13337,13339,13341],{"class":151,"line":1072},[149,13332,3704],{"class":325},[149,13334,8234],{"class":325},[149,13336,24],{"class":155},[149,13338,166],{"class":325},[149,13340,13265],{"class":162},[149,13342,7352],{"class":155},[149,13344,13345,13347,13349,13351,13353],{"class":151,"line":1090},[149,13346,3275],{"class":155},[149,13348,8135],{"class":325},[149,13350,24],{"class":155},[149,13352,2902],{"class":325},[149,13354,2924],{"class":155},[149,13356,13357],{"class":151,"line":1633},[149,13358,355],{"class":155},[24,13360,13361],{},"图片展示：",[24,13363,13364],{},[83,13365],{"alt":13233,"src":13366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[24,13368,13369],{},"堆区内存由程序员管生死！！！",[125,13371,13372],{"start":235},[45,13373,13374],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[24,13376,13377],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[24,13379,13380,13381],{},"​语法：",[48,13382,13383],{}," new 数据类型",[24,13385,13386],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[140,13388,13390],{"className":1861,"code":13389,"language":1863,"meta":145,"style":145},"\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",[48,13391,13392,13397,13407,13411,13416,13421,13443,13447,13455,13459,13473,13485,13497,13509,13514,13519,13530,13534,13539,13547,13551,13556,13578,13604,13608,13626,13630,13656,13660,13672,13676,13681,13686,13694,13698,13702,13710,13714,13720,13726],{"__ignoreMap":145},[149,13393,13394],{"class":151,"line":152},[149,13395,13396],{"class":295},"\u002F\u002F1.new的基本语法\n",[149,13398,13399,13401,13403,13405],{"class":151,"line":193},[149,13400,1875],{"class":325},[149,13402,8234],{"class":325},[149,13404,13265],{"class":162},[149,13406,3695],{"class":155},[149,13408,13409],{"class":151,"line":235},[149,13410,3270],{"class":155},[149,13412,13413],{"class":151,"line":340},[149,13414,13415],{"class":295},"    \u002F\u002F在堆区创建整型数据\n",[149,13417,13418],{"class":151,"line":346},[149,13419,13420],{"class":295},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[149,13422,13423,13425,13427,13429,13432,13434,13436,13438,13440],{"class":151,"line":352},[149,13424,3704],{"class":325},[149,13426,8234],{"class":325},[149,13428,24],{"class":155},[149,13430,13431],{"class":325},"=new",[149,13433,4101],{"class":325},[149,13435,319],{"class":155},[149,13437,2309],{"class":309},[149,13439,7682],{"class":155},[149,13441,13442],{"class":295},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[149,13444,13445],{"class":151,"line":1021},[149,13446,355],{"class":155},[149,13448,13449,13451,13453],{"class":151,"line":1035},[149,13450,7080],{"class":325},[149,13452,7304],{"class":162},[149,13454,3695],{"class":155},[149,13456,13457],{"class":151,"line":1054},[149,13458,3270],{"class":155},[149,13460,13461,13463,13465,13467,13469,13471],{"class":151,"line":1072},[149,13462,3704],{"class":325},[149,13464,8234],{"class":325},[149,13466,24],{"class":155},[149,13468,166],{"class":325},[149,13470,13265],{"class":162},[149,13472,7352],{"class":155},[149,13474,13475,13477,13479,13481,13483],{"class":151,"line":1090},[149,13476,3275],{"class":155},[149,13478,8135],{"class":325},[149,13480,24],{"class":155},[149,13482,2902],{"class":325},[149,13484,2924],{"class":155},[149,13486,13487,13489,13491,13493,13495],{"class":151,"line":1633},[149,13488,3275],{"class":155},[149,13490,8135],{"class":325},[149,13492,24],{"class":155},[149,13494,2902],{"class":325},[149,13496,2924],{"class":155},[149,13498,13499,13501,13503,13505,13507],{"class":151,"line":1644},[149,13500,3275],{"class":155},[149,13502,8135],{"class":325},[149,13504,24],{"class":155},[149,13506,2902],{"class":325},[149,13508,2924],{"class":155},[149,13510,13511],{"class":151,"line":3348},[149,13512,13513],{"class":295},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[149,13515,13516],{"class":151,"line":3362},[149,13517,13518],{"class":295},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[149,13520,13521,13524,13527],{"class":151,"line":3367},[149,13522,13523],{"class":325},"    delete",[149,13525,13526],{"class":155}," p;",[149,13528,13529],{"class":295},"\u002F\u002F删除这块地址\n",[149,13531,13532],{"class":151,"line":3373},[149,13533,355],{"class":155},[149,13535,13536],{"class":151,"line":3394},[149,13537,13538],{"class":295},"\u002F\u002F2.在堆区利用new开辟数组\n",[149,13540,13541,13543,13545],{"class":151,"line":3399},[149,13542,7080],{"class":325},[149,13544,7373],{"class":162},[149,13546,3695],{"class":155},[149,13548,13549],{"class":151,"line":3413},[149,13550,3270],{"class":155},[149,13552,13553],{"class":151,"line":3418},[149,13554,13555],{"class":295},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[149,13557,13558,13560,13562,13564,13566,13568,13570,13572,13575],{"class":151,"line":3447},[149,13559,3704],{"class":325},[149,13561,8234],{"class":325},[149,13563,5598],{"class":155},[149,13565,13431],{"class":325},[149,13567,4101],{"class":325},[149,13569,810],{"class":155},[149,13571,2309],{"class":309},[149,13573,13574],{"class":155},"];",[149,13576,13577],{"class":295},"\u002F\u002F10代表数组有10个元素\n",[149,13579,13580,13582,13584,13586,13588,13590,13592,13594,13596,13598,13600,13602],{"class":151,"line":3452},[149,13581,4919],{"class":325},[149,13583,3378],{"class":155},[149,13585,1875],{"class":325},[149,13587,4750],{"class":155},[149,13589,166],{"class":325},[149,13591,2056],{"class":309},[149,13593,4757],{"class":155},[149,13595,156],{"class":325},[149,13597,2309],{"class":309},[149,13599,4757],{"class":155},[149,13601,4011],{"class":325},[149,13603,1878],{"class":155},[149,13605,13606],{"class":151,"line":3469},[149,13607,3749],{"class":155},[149,13609,13610,13613,13615,13617,13619,13621,13623],{"class":151,"line":3474},[149,13611,13612],{"class":155},"        arr[i]",[149,13614,166],{"class":325},[149,13616,2304],{"class":155},[149,13618,2344],{"class":325},[149,13620,322],{"class":309},[149,13622,1924],{"class":155},[149,13624,13625],{"class":295},"\u002F\u002F给10个元素赋值100～109\n",[149,13627,13628],{"class":151,"line":3479},[149,13629,3906],{"class":155},[149,13631,13632,13634,13636,13638,13640,13642,13644,13646,13648,13650,13652,13654],{"class":151,"line":3484},[149,13633,4919],{"class":325},[149,13635,3378],{"class":155},[149,13637,1875],{"class":325},[149,13639,4750],{"class":155},[149,13641,166],{"class":325},[149,13643,2056],{"class":309},[149,13645,4757],{"class":155},[149,13647,156],{"class":325},[149,13649,2309],{"class":309},[149,13651,4757],{"class":155},[149,13653,4011],{"class":325},[149,13655,1878],{"class":155},[149,13657,13658],{"class":151,"line":3498},[149,13659,3749],{"class":155},[149,13661,13662,13664,13666,13668,13670],{"class":151,"line":3503},[149,13663,5169],{"class":155},[149,13665,2902],{"class":325},[149,13667,6072],{"class":155},[149,13669,2902],{"class":325},[149,13671,2924],{"class":155},[149,13673,13674],{"class":151,"line":4296},[149,13675,3906],{"class":155},[149,13677,13678],{"class":151,"line":4310},[149,13679,13680],{"class":295},"    \u002F\u002F释放堆区数组\n",[149,13682,13683],{"class":151,"line":4318},[149,13684,13685],{"class":295},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[149,13687,13688,13691],{"class":151,"line":4323},[149,13689,13690],{"class":325},"    delete[]",[149,13692,13693],{"class":155}," arr;\n",[149,13695,13696],{"class":151,"line":4329},[149,13697,355],{"class":155},[149,13699,13700],{"class":151,"line":4335},[149,13701,4119],{"emptyLinePlaceholder":1800},[149,13703,13704,13706,13708],{"class":151,"line":4340},[149,13705,1875],{"class":325},[149,13707,3692],{"class":162},[149,13709,3695],{"class":155},[149,13711,13712],{"class":151,"line":9663},[149,13713,3270],{"class":155},[149,13715,13716,13718],{"class":151,"line":9687},[149,13717,7349],{"class":162},[149,13719,7352],{"class":155},[149,13721,13722,13724],{"class":151,"line":9692},[149,13723,7418],{"class":162},[149,13725,7352],{"class":155},[149,13727,13728],{"class":151,"line":9698},[149,13729,355],{"class":155},[1783,13731,13732],{},"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":145,"searchDepth":193,"depth":193,"links":13734},[13735],{"id":12403,"depth":193,"text":12404,"children":13736},[13737,13738],{"id":12435,"depth":235,"text":12436},{"id":13063,"depth":235,"text":13064},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12395,"description":145},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13745,"title":13746,"body":13747,"description":145,"extension":1798,"meta":15227,"navigation":1800,"path":15228,"seo":15229,"stem":15230,"__hash__":15231},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13748,"toc":15219},[13749,13752,13756,13759,13762,13931,13935,13940,13957,13962,14114,14118,14121,14124,14517,14521,14524,14529,14532,14844,14848,14854,15014,15016,15024,15028,15031,15038,15216],[10,13750,13746],{"id":13751},"_6引用",[14,13753,13755],{"id":13754},"_61引用基本用法","6.1引用基本用法",[24,13757,13758],{},"引用的本质：给变量起别名",[24,13760,13761],{},"语法：数据类型 &别名=原名",[140,13763,13765],{"className":1861,"code":13764,"language":1863,"meta":145,"style":145},"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",[48,13766,13767,13775,13779,13791,13803,13807,13826,13845,13849,13860,13864,13883,13901,13905,13915,13919,13927],{"__ignoreMap":145},[149,13768,13769,13771,13773],{"class":151,"line":152},[149,13770,1875],{"class":325},[149,13772,3692],{"class":162},[149,13774,12567],{"class":155},[149,13776,13777],{"class":151,"line":193},[149,13778,4119],{"emptyLinePlaceholder":1800},[149,13780,13781,13783,13785,13787,13789],{"class":151,"line":235},[149,13782,3704],{"class":325},[149,13784,12583],{"class":155},[149,13786,166],{"class":325},[149,13788,3757],{"class":309},[149,13790,841],{"class":155},[149,13792,13793,13795,13797,13799,13801],{"class":151,"line":340},[149,13794,3704],{"class":325},[149,13796,12298],{"class":325},[149,13798,12659],{"class":155},[149,13800,166],{"class":325},[149,13802,3157],{"class":155},[149,13804,13805],{"class":151,"line":346},[149,13806,4119],{"emptyLinePlaceholder":1800},[149,13808,13809,13811,13813,13816,13818,13820,13822,13824],{"class":151,"line":352},[149,13810,8245],{"class":155},[149,13812,2902],{"class":325},[149,13814,13815],{"class":169}," \"a = \"",[149,13817,3169],{"class":325},[149,13819,12583],{"class":155},[149,13821,2902],{"class":325},[149,13823,13183],{"class":155},[149,13825,8984],{"class":295},[149,13827,13828,13830,13832,13835,13837,13839,13841,13843],{"class":151,"line":1021},[149,13829,8245],{"class":155},[149,13831,2902],{"class":325},[149,13833,13834],{"class":169}," \"b = \"",[149,13836,3169],{"class":325},[149,13838,12596],{"class":155},[149,13840,2902],{"class":325},[149,13842,13183],{"class":155},[149,13844,8984],{"class":295},[149,13846,13847],{"class":151,"line":1035},[149,13848,4119],{"emptyLinePlaceholder":1800},[149,13850,13851,13854,13856,13858],{"class":151,"line":1054},[149,13852,13853],{"class":155},"    b ",[149,13855,166],{"class":325},[149,13857,7470],{"class":309},[149,13859,841],{"class":155},[149,13861,13862],{"class":151,"line":1072},[149,13863,4119],{"emptyLinePlaceholder":1800},[149,13865,13866,13868,13870,13872,13874,13876,13878,13880],{"class":151,"line":1090},[149,13867,8245],{"class":155},[149,13869,2902],{"class":325},[149,13871,13815],{"class":169},[149,13873,3169],{"class":325},[149,13875,12583],{"class":155},[149,13877,2902],{"class":325},[149,13879,13183],{"class":155},[149,13881,13882],{"class":295},"\u002F\u002F100\n",[149,13884,13885,13887,13889,13891,13893,13895,13897,13899],{"class":151,"line":1633},[149,13886,8245],{"class":155},[149,13888,2902],{"class":325},[149,13890,13834],{"class":169},[149,13892,3169],{"class":325},[149,13894,12596],{"class":155},[149,13896,2902],{"class":325},[149,13898,13183],{"class":155},[149,13900,13882],{"class":295},[149,13902,13903],{"class":151,"line":1644},[149,13904,4119],{"emptyLinePlaceholder":1800},[149,13906,13907,13909,13911,13913],{"class":151,"line":3348},[149,13908,4022],{"class":162},[149,13910,319],{"class":155},[149,13912,4027],{"class":169},[149,13914,337],{"class":155},[149,13916,13917],{"class":151,"line":3362},[149,13918,4119],{"emptyLinePlaceholder":1800},[149,13920,13921,13923,13925],{"class":151,"line":3367},[149,13922,5808],{"class":325},[149,13924,5811],{"class":309},[149,13926,841],{"class":155},[149,13928,13929],{"class":151,"line":3373},[149,13930,355],{"class":155},[14,13932,13934],{"id":13933},"_62引用的注意事项","6.2引用的注意事项",[125,13936,13937],{},[45,13938,13939],{},"引用必须要初始化",[140,13941,13943],{"className":1861,"code":13942,"language":1863,"meta":145,"style":145},"int &b;\u002F\u002F非常错误！\n",[48,13944,13945],{"__ignoreMap":145},[149,13946,13947,13949,13951,13954],{"class":151,"line":152},[149,13948,1875],{"class":325},[149,13950,12298],{"class":325},[149,13952,13953],{"class":155},"b;",[149,13955,13956],{"class":295},"\u002F\u002F非常错误！\n",[125,13958,13959],{"start":193},[45,13960,13961],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[140,13963,13965],{"className":1861,"code":13964,"language":1863,"meta":145,"style":145},"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",[48,13966,13967,13975,13987,13999,14007,14023,14036,14054,14072,14092,14102,14110],{"__ignoreMap":145},[149,13968,13969,13971,13973],{"class":151,"line":152},[149,13970,1875],{"class":325},[149,13972,3692],{"class":162},[149,13974,12567],{"class":155},[149,13976,13977,13979,13981,13983,13985],{"class":151,"line":193},[149,13978,3704],{"class":325},[149,13980,12583],{"class":155},[149,13982,166],{"class":325},[149,13984,3757],{"class":309},[149,13986,841],{"class":155},[149,13988,13989,13991,13993,13995,13997],{"class":151,"line":235},[149,13990,3704],{"class":325},[149,13992,12596],{"class":155},[149,13994,166],{"class":325},[149,13996,10665],{"class":309},[149,13998,841],{"class":155},[149,14000,14001,14004],{"class":151,"line":340},[149,14002,14003],{"class":295},"    \u002F\u002Fint &c;",[149,14005,14006],{"class":295}," \u002F\u002F错误，引用必须初始化\n",[149,14008,14009,14011,14013,14015,14017,14020],{"class":151,"line":346},[149,14010,3704],{"class":325},[149,14012,12298],{"class":325},[149,14014,4664],{"class":155},[149,14016,166],{"class":325},[149,14018,14019],{"class":155}," a;",[149,14021,14022],{"class":295}," \u002F\u002F一旦初始化后，就不可以更改\n",[149,14024,14025,14028,14030,14033],{"class":151,"line":352},[149,14026,14027],{"class":155},"    c ",[149,14029,166],{"class":325},[149,14031,14032],{"class":155}," b;",[149,14034,14035],{"class":295}," \u002F\u002F这是赋值操作，不是更改引用\n",[149,14037,14038,14040,14042,14044,14046,14048,14050,14052],{"class":151,"line":1021},[149,14039,8245],{"class":155},[149,14041,2902],{"class":325},[149,14043,13815],{"class":169},[149,14045,3169],{"class":325},[149,14047,12583],{"class":155},[149,14049,2902],{"class":325},[149,14051,13183],{"class":155},[149,14053,8969],{"class":295},[149,14055,14056,14058,14060,14062,14064,14066,14068,14070],{"class":151,"line":1035},[149,14057,8245],{"class":155},[149,14059,2902],{"class":325},[149,14061,13834],{"class":169},[149,14063,3169],{"class":325},[149,14065,12596],{"class":155},[149,14067,2902],{"class":325},[149,14069,13183],{"class":155},[149,14071,8969],{"class":295},[149,14073,14074,14076,14078,14081,14083,14086,14088,14090],{"class":151,"line":1054},[149,14075,8245],{"class":155},[149,14077,2902],{"class":325},[149,14079,14080],{"class":169}," \"c = \"",[149,14082,3169],{"class":325},[149,14084,14085],{"class":155}," c ",[149,14087,2902],{"class":325},[149,14089,13183],{"class":155},[149,14091,8969],{"class":295},[149,14093,14094,14096,14098,14100],{"class":151,"line":1072},[149,14095,4022],{"class":162},[149,14097,319],{"class":155},[149,14099,4027],{"class":169},[149,14101,337],{"class":155},[149,14103,14104,14106,14108],{"class":151,"line":1090},[149,14105,5808],{"class":325},[149,14107,5811],{"class":309},[149,14109,841],{"class":155},[149,14111,14112],{"class":151,"line":1633},[149,14113,355],{"class":155},[14,14115,14117],{"id":14116},"_63引用做函数参数","6.3引用做函数参数",[24,14119,14120],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[24,14122,14123],{},"优点：可以简化指针修改实参",[140,14125,14127],{"className":1861,"code":14126,"language":1863,"meta":145,"style":145},"\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",[48,14128,14129,14134,14156,14167,14177,14186,14190,14194,14199,14221,14233,14245,14255,14259,14263,14268,14290,14300,14308,14316,14320,14324,14332,14336,14348,14360,14364,14375,14401,14405,14425,14449,14453,14463,14487,14491,14501,14505,14513],{"__ignoreMap":145},[149,14130,14131],{"class":151,"line":152},[149,14132,14133],{"class":295},"\u002F\u002F1. 值传递\n",[149,14135,14136,14138,14141,14143,14145,14147,14149,14151,14153],{"class":151,"line":193},[149,14137,7080],{"class":325},[149,14139,14140],{"class":162}," mySwap01",[149,14142,319],{"class":155},[149,14144,1875],{"class":325},[149,14146,3123],{"class":6932},[149,14148,329],{"class":155},[149,14150,1875],{"class":325},[149,14152,4551],{"class":6932},[149,14154,14155],{"class":155},") {\n",[149,14157,14158,14160,14163,14165],{"class":151,"line":235},[149,14159,3704],{"class":325},[149,14161,14162],{"class":155}," temp ",[149,14164,166],{"class":325},[149,14166,3157],{"class":155},[149,14168,14169,14172,14174],{"class":151,"line":340},[149,14170,14171],{"class":155},"    a ",[149,14173,166],{"class":325},[149,14175,14176],{"class":155}," b;\n",[149,14178,14179,14181,14183],{"class":151,"line":346},[149,14180,13853],{"class":155},[149,14182,166],{"class":325},[149,14184,14185],{"class":155}," temp;\n",[149,14187,14188],{"class":151,"line":352},[149,14189,355],{"class":155},[149,14191,14192],{"class":151,"line":1021},[149,14193,4119],{"emptyLinePlaceholder":1800},[149,14195,14196],{"class":151,"line":1035},[149,14197,14198],{"class":295},"\u002F\u002F2. 地址传递\n",[149,14200,14201,14203,14206,14208,14211,14213,14215,14217,14219],{"class":151,"line":1054},[149,14202,7080],{"class":325},[149,14204,14205],{"class":162}," mySwap02",[149,14207,319],{"class":155},[149,14209,14210],{"class":325},"int*",[149,14212,3123],{"class":6932},[149,14214,329],{"class":155},[149,14216,14210],{"class":325},[149,14218,4551],{"class":6932},[149,14220,14155],{"class":155},[149,14222,14223,14225,14227,14229,14231],{"class":151,"line":1072},[149,14224,3704],{"class":325},[149,14226,14162],{"class":155},[149,14228,166],{"class":325},[149,14230,8234],{"class":325},[149,14232,7913],{"class":155},[149,14234,14235,14237,14239,14241,14243],{"class":151,"line":1090},[149,14236,8119],{"class":325},[149,14238,12633],{"class":155},[149,14240,166],{"class":325},[149,14242,8234],{"class":325},[149,14244,7785],{"class":155},[149,14246,14247,14249,14251,14253],{"class":151,"line":1633},[149,14248,8119],{"class":325},[149,14250,12659],{"class":155},[149,14252,166],{"class":325},[149,14254,14185],{"class":155},[149,14256,14257],{"class":151,"line":1644},[149,14258,355],{"class":155},[149,14260,14261],{"class":151,"line":3348},[149,14262,4119],{"emptyLinePlaceholder":1800},[149,14264,14265],{"class":151,"line":3362},[149,14266,14267],{"class":295},"\u002F\u002F3. 引用传递\n",[149,14269,14270,14272,14275,14277,14280,14282,14284,14286,14288],{"class":151,"line":3367},[149,14271,7080],{"class":325},[149,14273,14274],{"class":162}," mySwap03",[149,14276,319],{"class":155},[149,14278,14279],{"class":325},"int&",[149,14281,3123],{"class":6932},[149,14283,329],{"class":155},[149,14285,14279],{"class":325},[149,14287,4551],{"class":6932},[149,14289,14155],{"class":155},[149,14291,14292,14294,14296,14298],{"class":151,"line":3373},[149,14293,3704],{"class":325},[149,14295,14162],{"class":155},[149,14297,166],{"class":325},[149,14299,3157],{"class":155},[149,14301,14302,14304,14306],{"class":151,"line":3394},[149,14303,14171],{"class":155},[149,14305,166],{"class":325},[149,14307,14176],{"class":155},[149,14309,14310,14312,14314],{"class":151,"line":3399},[149,14311,13853],{"class":155},[149,14313,166],{"class":325},[149,14315,14185],{"class":155},[149,14317,14318],{"class":151,"line":3413},[149,14319,355],{"class":155},[149,14321,14322],{"class":151,"line":3418},[149,14323,4119],{"emptyLinePlaceholder":1800},[149,14325,14326,14328,14330],{"class":151,"line":3447},[149,14327,1875],{"class":325},[149,14329,3692],{"class":162},[149,14331,12567],{"class":155},[149,14333,14334],{"class":151,"line":3452},[149,14335,4119],{"emptyLinePlaceholder":1800},[149,14337,14338,14340,14342,14344,14346],{"class":151,"line":3469},[149,14339,3704],{"class":325},[149,14341,12583],{"class":155},[149,14343,166],{"class":325},[149,14345,3757],{"class":309},[149,14347,841],{"class":155},[149,14349,14350,14352,14354,14356,14358],{"class":151,"line":3474},[149,14351,3704],{"class":325},[149,14353,12596],{"class":155},[149,14355,166],{"class":325},[149,14357,10665],{"class":309},[149,14359,841],{"class":155},[149,14361,14362],{"class":151,"line":3479},[149,14363,4119],{"emptyLinePlaceholder":1800},[149,14365,14366,14369,14372],{"class":151,"line":3484},[149,14367,14368],{"class":162},"    mySwap01",[149,14370,14371],{"class":155},"(a, b);",[149,14373,14374],{"class":295},"\u002F\u002F值传递，形参不会修饰实参\n",[149,14376,14377,14379,14381,14384,14386,14388,14390,14393,14395,14397,14399],{"class":151,"line":3498},[149,14378,8245],{"class":155},[149,14380,2902],{"class":325},[149,14382,14383],{"class":169}," \"a:\"",[149,14385,3169],{"class":325},[149,14387,12583],{"class":155},[149,14389,2902],{"class":325},[149,14391,14392],{"class":169}," \" b:\"",[149,14394,3169],{"class":325},[149,14396,12596],{"class":155},[149,14398,2902],{"class":325},[149,14400,10555],{"class":155},[149,14402,14403],{"class":151,"line":3503},[149,14404,4119],{"emptyLinePlaceholder":1800},[149,14406,14407,14410,14412,14414,14417,14419,14422],{"class":151,"line":4296},[149,14408,14409],{"class":162},"    mySwap02",[149,14411,319],{"class":155},[149,14413,2216],{"class":325},[149,14415,14416],{"class":155},"a, ",[149,14418,2216],{"class":325},[149,14420,14421],{"class":155},"b);",[149,14423,14424],{"class":295},"\u002F\u002F地址传递，形参会修饰实参\n",[149,14426,14427,14429,14431,14433,14435,14437,14439,14441,14443,14445,14447],{"class":151,"line":4310},[149,14428,8245],{"class":155},[149,14430,2902],{"class":325},[149,14432,14383],{"class":169},[149,14434,3169],{"class":325},[149,14436,12583],{"class":155},[149,14438,2902],{"class":325},[149,14440,14392],{"class":169},[149,14442,3169],{"class":325},[149,14444,12596],{"class":155},[149,14446,2902],{"class":325},[149,14448,10555],{"class":155},[149,14450,14451],{"class":151,"line":4318},[149,14452,4119],{"emptyLinePlaceholder":1800},[149,14454,14455,14458,14460],{"class":151,"line":4323},[149,14456,14457],{"class":162},"    mySwap03",[149,14459,14371],{"class":155},[149,14461,14462],{"class":295},"\u002F\u002F引用传递，形参会修饰实参\n",[149,14464,14465,14467,14469,14471,14473,14475,14477,14479,14481,14483,14485],{"class":151,"line":4329},[149,14466,8245],{"class":155},[149,14468,2902],{"class":325},[149,14470,14383],{"class":169},[149,14472,3169],{"class":325},[149,14474,12583],{"class":155},[149,14476,2902],{"class":325},[149,14478,14392],{"class":169},[149,14480,3169],{"class":325},[149,14482,12596],{"class":155},[149,14484,2902],{"class":325},[149,14486,10555],{"class":155},[149,14488,14489],{"class":151,"line":4335},[149,14490,4119],{"emptyLinePlaceholder":1800},[149,14492,14493,14495,14497,14499],{"class":151,"line":4340},[149,14494,4022],{"class":162},[149,14496,319],{"class":155},[149,14498,4027],{"class":169},[149,14500,337],{"class":155},[149,14502,14503],{"class":151,"line":9663},[149,14504,4119],{"emptyLinePlaceholder":1800},[149,14506,14507,14509,14511],{"class":151,"line":9687},[149,14508,5808],{"class":325},[149,14510,5811],{"class":309},[149,14512,841],{"class":155},[149,14514,14515],{"class":151,"line":9692},[149,14516,355],{"class":155},[14,14518,14520],{"id":14519},"_64引用做函数的返回值","6.4引用做函数的返回值",[24,14522,14523],{},"作用：引用是可以作为函数的返回值存在的",[24,14525,866,14526],{},[31,14527,14528],{},"不要返回局部变量引用",[24,14530,14531],{},"用法：函数调用作为左值",[140,14533,14535],{"className":11655,"code":14534,"language":11657,"meta":145,"style":145},"\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",[48,14536,14537,14542,14550,14565,14571,14575,14579,14584,14592,14609,14615,14619,14623,14631,14635,14640,14654,14674,14693,14697,14702,14715,14735,14753,14757,14773,14777,14796,14814,14818,14828,14832,14840],{"__ignoreMap":145},[149,14538,14539],{"class":151,"line":152},[149,14540,14541],{"class":295},"\u002F\u002F返回局部变量引用\n",[149,14543,14544,14546,14548],{"class":151,"line":193},[149,14545,14279],{"class":325},[149,14547,7304],{"class":162},[149,14549,12567],{"class":155},[149,14551,14552,14554,14556,14558,14560,14562],{"class":151,"line":235},[149,14553,3704],{"class":325},[149,14555,12583],{"class":155},[149,14557,166],{"class":325},[149,14559,3757],{"class":309},[149,14561,1924],{"class":155},[149,14563,14564],{"class":295}," \u002F\u002F局部变量\n",[149,14566,14567,14569],{"class":151,"line":340},[149,14568,5808],{"class":325},[149,14570,3157],{"class":155},[149,14572,14573],{"class":151,"line":346},[149,14574,355],{"class":155},[149,14576,14577],{"class":151,"line":352},[149,14578,4119],{"emptyLinePlaceholder":1800},[149,14580,14581],{"class":151,"line":1021},[149,14582,14583],{"class":295},"\u002F\u002F返回静态变量引用\n",[149,14585,14586,14588,14590],{"class":151,"line":1035},[149,14587,14279],{"class":325},[149,14589,7373],{"class":162},[149,14591,12567],{"class":155},[149,14593,14594,14596,14598,14600,14602,14604,14606],{"class":151,"line":1054},[149,14595,12734],{"class":325},[149,14597,4101],{"class":325},[149,14599,12583],{"class":155},[149,14601,166],{"class":325},[149,14603,10665],{"class":309},[149,14605,1924],{"class":155},[149,14607,14608],{"class":295},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[149,14610,14611,14613],{"class":151,"line":1072},[149,14612,5808],{"class":325},[149,14614,3157],{"class":155},[149,14616,14617],{"class":151,"line":1090},[149,14618,355],{"class":155},[149,14620,14621],{"class":151,"line":1633},[149,14622,4119],{"emptyLinePlaceholder":1800},[149,14624,14625,14627,14629],{"class":151,"line":1644},[149,14626,1875],{"class":325},[149,14628,3692],{"class":162},[149,14630,12567],{"class":155},[149,14632,14633],{"class":151,"line":3348},[149,14634,4119],{"emptyLinePlaceholder":1800},[149,14636,14637],{"class":151,"line":3362},[149,14638,14639],{"class":295},"    \u002F\u002F不能返回局部变量的引用\n",[149,14641,14642,14645,14648,14650,14652],{"class":151,"line":3367},[149,14643,14644],{"class":325},"    int&",[149,14646,14647],{"class":155}," ref ",[149,14649,166],{"class":325},[149,14651,7304],{"class":162},[149,14653,7352],{"class":155},[149,14655,14656,14658,14660,14663,14665,14667,14669,14671],{"class":151,"line":3373},[149,14657,8245],{"class":155},[149,14659,2902],{"class":325},[149,14661,14662],{"class":169}," \"ref = \"",[149,14664,3169],{"class":325},[149,14666,14647],{"class":155},[149,14668,2902],{"class":325},[149,14670,13183],{"class":155},[149,14672,14673],{"class":295},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[149,14675,14676,14678,14680,14682,14684,14686,14688,14690],{"class":151,"line":3394},[149,14677,8245],{"class":155},[149,14679,2902],{"class":325},[149,14681,14662],{"class":169},[149,14683,3169],{"class":325},[149,14685,14647],{"class":155},[149,14687,2902],{"class":325},[149,14689,13183],{"class":155},[149,14691,14692],{"class":295},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[149,14694,14695],{"class":151,"line":3399},[149,14696,4119],{"emptyLinePlaceholder":1800},[149,14698,14699],{"class":151,"line":3413},[149,14700,14701],{"class":295},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[149,14703,14704,14706,14709,14711,14713],{"class":151,"line":3418},[149,14705,14644],{"class":325},[149,14707,14708],{"class":155}," ref2 ",[149,14710,166],{"class":325},[149,14712,7373],{"class":162},[149,14714,7352],{"class":155},[149,14716,14717,14719,14721,14724,14726,14728,14730,14732],{"class":151,"line":3447},[149,14718,8245],{"class":155},[149,14720,2902],{"class":325},[149,14722,14723],{"class":169}," \"ref2 = \"",[149,14725,3169],{"class":325},[149,14727,14708],{"class":155},[149,14729,2902],{"class":325},[149,14731,13183],{"class":155},[149,14733,14734],{"class":295}," \u002F\u002F20\n",[149,14736,14737,14739,14741,14743,14745,14747,14749,14751],{"class":151,"line":3452},[149,14738,8245],{"class":155},[149,14740,2902],{"class":325},[149,14742,14723],{"class":169},[149,14744,3169],{"class":325},[149,14746,14708],{"class":155},[149,14748,2902],{"class":325},[149,14750,13183],{"class":155},[149,14752,14734],{"class":295},[149,14754,14755],{"class":151,"line":3469},[149,14756,4119],{"emptyLinePlaceholder":1800},[149,14758,14759,14761,14764,14766,14768,14770],{"class":151,"line":3474},[149,14760,7418],{"class":162},[149,14762,14763],{"class":155},"() ",[149,14765,166],{"class":325},[149,14767,4717],{"class":309},[149,14769,1924],{"class":155},[149,14771,14772],{"class":295},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[149,14774,14775],{"class":151,"line":3479},[149,14776,4119],{"emptyLinePlaceholder":1800},[149,14778,14779,14781,14783,14785,14787,14789,14791,14793],{"class":151,"line":3484},[149,14780,8245],{"class":155},[149,14782,2902],{"class":325},[149,14784,14723],{"class":169},[149,14786,3169],{"class":325},[149,14788,14708],{"class":155},[149,14790,2902],{"class":325},[149,14792,13183],{"class":155},[149,14794,14795],{"class":295}," \u002F\u002F1000\n",[149,14797,14798,14800,14802,14804,14806,14808,14810,14812],{"class":151,"line":3498},[149,14799,8245],{"class":155},[149,14801,2902],{"class":325},[149,14803,14723],{"class":169},[149,14805,3169],{"class":325},[149,14807,14708],{"class":155},[149,14809,2902],{"class":325},[149,14811,13183],{"class":155},[149,14813,14795],{"class":295},[149,14815,14816],{"class":151,"line":3503},[149,14817,4119],{"emptyLinePlaceholder":1800},[149,14819,14820,14822,14824,14826],{"class":151,"line":4296},[149,14821,4022],{"class":162},[149,14823,319],{"class":155},[149,14825,4027],{"class":169},[149,14827,337],{"class":155},[149,14829,14830],{"class":151,"line":4310},[149,14831,4119],{"emptyLinePlaceholder":1800},[149,14833,14834,14836,14838],{"class":151,"line":4318},[149,14835,5808],{"class":325},[149,14837,5811],{"class":309},[149,14839,841],{"class":155},[149,14841,14842],{"class":151,"line":4323},[149,14843,355],{"class":155},[14,14845,14847],{"id":14846},"_65引用的本质","6.5引用的本质",[24,14849,14850,14851],{},"本质：",[31,14852,14853],{},"引用的本质在c++内部实现是一个指针常量.",[140,14855,14857],{"className":1861,"code":14856,"language":1863,"meta":145,"style":145},"\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",[48,14858,14859,14864,14880,14894,14898,14907,14919,14924,14929,14940,14953,14957,14973,14990,14994,15002,15010],{"__ignoreMap":145},[149,14860,14861],{"class":151,"line":152},[149,14862,14863],{"class":295},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[149,14865,14866,14868,14870,14872,14874,14877],{"class":151,"line":193},[149,14867,7080],{"class":325},[149,14869,13099],{"class":162},[149,14871,319],{"class":155},[149,14873,14279],{"class":325},[149,14875,14876],{"class":6932}," ref",[149,14878,14879],{"class":155},"){\n",[149,14881,14882,14885,14887,14889,14891],{"class":151,"line":235},[149,14883,14884],{"class":155},"    ref ",[149,14886,166],{"class":325},[149,14888,7470],{"class":309},[149,14890,1924],{"class":155},[149,14892,14893],{"class":295}," \u002F\u002F ref是引用，转换为*ref = 100\n",[149,14895,14896],{"class":151,"line":340},[149,14897,355],{"class":155},[149,14899,14900,14902,14904],{"class":151,"line":346},[149,14901,1875],{"class":325},[149,14903,3692],{"class":162},[149,14905,14906],{"class":155},"(){\n",[149,14908,14909,14911,14913,14915,14917],{"class":151,"line":352},[149,14910,3704],{"class":325},[149,14912,12583],{"class":155},[149,14914,166],{"class":325},[149,14916,3757],{"class":309},[149,14918,841],{"class":155},[149,14920,14921],{"class":151,"line":1021},[149,14922,14923],{"class":155},"    \n",[149,14925,14926],{"class":151,"line":1035},[149,14927,14928],{"class":295},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[149,14930,14931,14933,14935,14937],{"class":151,"line":1054},[149,14932,14644],{"class":325},[149,14934,14647],{"class":155},[149,14936,166],{"class":325},[149,14938,14939],{"class":155}," a; \n",[149,14941,14942,14944,14946,14948,14950],{"class":151,"line":1072},[149,14943,14884],{"class":155},[149,14945,166],{"class":325},[149,14947,10665],{"class":309},[149,14949,1924],{"class":155},[149,14951,14952],{"class":295}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[149,14954,14955],{"class":151,"line":1090},[149,14956,14923],{"class":155},[149,14958,14959,14961,14963,14965,14967,14969,14971],{"class":151,"line":1633},[149,14960,8245],{"class":155},[149,14962,2902],{"class":325},[149,14964,14383],{"class":169},[149,14966,3169],{"class":325},[149,14968,12583],{"class":155},[149,14970,2902],{"class":325},[149,14972,10555],{"class":155},[149,14974,14975,14977,14979,14982,14984,14986,14988],{"class":151,"line":1644},[149,14976,8245],{"class":155},[149,14978,2902],{"class":325},[149,14980,14981],{"class":169}," \"ref:\"",[149,14983,3169],{"class":325},[149,14985,14647],{"class":155},[149,14987,2902],{"class":325},[149,14989,10555],{"class":155},[149,14991,14992],{"class":151,"line":3348},[149,14993,14923],{"class":155},[149,14995,14996,14999],{"class":151,"line":3362},[149,14997,14998],{"class":162},"    func",[149,15000,15001],{"class":155},"(a);\n",[149,15003,15004,15006,15008],{"class":151,"line":3367},[149,15005,5808],{"class":325},[149,15007,5811],{"class":309},[149,15009,841],{"class":155},[149,15011,15012],{"class":151,"line":3373},[149,15013,355],{"class":155},[24,15015,13046],{},[125,15017,15018,15021],{},[45,15019,15020],{},"引用的本质，就是一个指针常量",[45,15022,15023],{},"引用一旦初始化，就不可以发生改变",[14,15025,15027],{"id":15026},"_66常量引用","6.6常量引用",[24,15029,15030],{},"作用：常量引用主要用来修饰形参",[24,15032,15033,15034,15037],{},"在函数形参列表中，可以加",[31,15035,15036],{},"const修饰形参","，防止形参改变实参",[140,15039,15041],{"className":1861,"code":15040,"language":1863,"meta":145,"style":145},"\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",[48,15042,15043,15048,15053,15072,15077,15090,15094,15098,15106,15110,15115,15120,15134,15138,15146,15158,15162,15167,15179,15186,15190,15200,15204,15212],{"__ignoreMap":145},[149,15044,15045],{"class":151,"line":152},[149,15046,15047],{"class":295},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[149,15049,15050],{"class":151,"line":193},[149,15051,15052],{"class":295},"\u002F\u002F加上const就不能修改实参的\n",[149,15054,15055,15057,15060,15062,15064,15067,15070],{"class":151,"line":235},[149,15056,7080],{"class":325},[149,15058,15059],{"class":162}," showValue",[149,15061,319],{"class":155},[149,15063,8508],{"class":325},[149,15065,15066],{"class":325}," int&",[149,15068,15069],{"class":6932}," v",[149,15071,14155],{"class":155},[149,15073,15074],{"class":151,"line":340},[149,15075,15076],{"class":295},"    \u002F\u002Fv += 100;\n",[149,15078,15079,15081,15083,15086,15088],{"class":151,"line":346},[149,15080,8245],{"class":155},[149,15082,2902],{"class":325},[149,15084,15085],{"class":155}," v ",[149,15087,2902],{"class":325},[149,15089,10555],{"class":155},[149,15091,15092],{"class":151,"line":352},[149,15093,355],{"class":155},[149,15095,15096],{"class":151,"line":1021},[149,15097,4119],{"emptyLinePlaceholder":1800},[149,15099,15100,15102,15104],{"class":151,"line":1035},[149,15101,1875],{"class":325},[149,15103,3692],{"class":162},[149,15105,12567],{"class":155},[149,15107,15108],{"class":151,"line":1054},[149,15109,4119],{"emptyLinePlaceholder":1800},[149,15111,15112],{"class":151,"line":1072},[149,15113,15114],{"class":295},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[149,15116,15117],{"class":151,"line":1090},[149,15118,15119],{"class":295},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[149,15121,15122,15124,15126,15128,15130,15132],{"class":151,"line":1633},[149,15123,12935],{"class":325},[149,15125,15066],{"class":325},[149,15127,14647],{"class":155},[149,15129,166],{"class":325},[149,15131,3757],{"class":309},[149,15133,841],{"class":155},[149,15135,15136],{"class":151,"line":1644},[149,15137,4119],{"emptyLinePlaceholder":1800},[149,15139,15140,15143],{"class":151,"line":3348},[149,15141,15142],{"class":295},"    \u002F\u002Fref = 100;",[149,15144,15145],{"class":295},"  \u002F\u002F加入const后不可以修改变量\n",[149,15147,15148,15150,15152,15154,15156],{"class":151,"line":3362},[149,15149,8245],{"class":155},[149,15151,2902],{"class":325},[149,15153,14647],{"class":155},[149,15155,2902],{"class":325},[149,15157,10555],{"class":155},[149,15159,15160],{"class":151,"line":3367},[149,15161,4119],{"emptyLinePlaceholder":1800},[149,15163,15164],{"class":151,"line":3373},[149,15165,15166],{"class":295},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[149,15168,15169,15171,15173,15175,15177],{"class":151,"line":3394},[149,15170,3704],{"class":325},[149,15172,12583],{"class":155},[149,15174,166],{"class":325},[149,15176,3757],{"class":309},[149,15178,841],{"class":155},[149,15180,15181,15184],{"class":151,"line":3399},[149,15182,15183],{"class":162},"    showValue",[149,15185,15001],{"class":155},[149,15187,15188],{"class":151,"line":3413},[149,15189,4119],{"emptyLinePlaceholder":1800},[149,15191,15192,15194,15196,15198],{"class":151,"line":3418},[149,15193,4022],{"class":162},[149,15195,319],{"class":155},[149,15197,4027],{"class":169},[149,15199,337],{"class":155},[149,15201,15202],{"class":151,"line":3447},[149,15203,4119],{"emptyLinePlaceholder":1800},[149,15205,15206,15208,15210],{"class":151,"line":3452},[149,15207,5808],{"class":325},[149,15209,5811],{"class":309},[149,15211,841],{"class":155},[149,15213,15214],{"class":151,"line":3469},[149,15215,355],{"class":155},[1783,15217,15218],{},"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":145,"searchDepth":193,"depth":193,"links":15220},[15221,15222,15223,15224,15225,15226],{"id":13754,"depth":193,"text":13755},{"id":13933,"depth":193,"text":13934},{"id":14116,"depth":193,"text":14117},{"id":14519,"depth":193,"text":14520},{"id":14846,"depth":193,"text":14847},{"id":15026,"depth":193,"text":15027},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13746,"description":145},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15233,"title":15234,"body":15235,"description":145,"extension":1798,"meta":16316,"navigation":1800,"path":16317,"seo":16318,"stem":16319,"__hash__":16320},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15236,"toc":16308},[15237,15240,15244,15247,15252,15484,15486,15497,15501,15504,15512,15616,15619,15623,15626,15630,15633,15638,15660,15666,15993,15996,16000,16008,16305],[10,15238,15234],{"id":15239},"_7函数高级部分",[14,15241,15243],{"id":15242},"_71函数默认参数","7.1函数默认参数",[24,15245,15246],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[24,15248,6899,15249],{},[48,15250,15251],{}," 返回值类型  函数名 （参数= 默认值）{}",[140,15253,15255],{"className":1861,"code":15254,"language":1863,"meta":145,"style":145},"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",[48,15256,15257,15292,15307,15311,15315,15320,15325,15354,15374,15384,15388,15392,15400,15404,15432,15454,15458,15468,15472,15480],{"__ignoreMap":145},[149,15258,15259,15261,15263,15265,15267,15269,15271,15273,15275,15278,15280,15282,15284,15286,15288,15290],{"class":151,"line":152},[149,15260,1875],{"class":325},[149,15262,13099],{"class":162},[149,15264,319],{"class":155},[149,15266,1875],{"class":325},[149,15268,3123],{"class":6932},[149,15270,329],{"class":155},[149,15272,1875],{"class":325},[149,15274,4551],{"class":6932},[149,15276,15277],{"class":325}," =",[149,15279,3757],{"class":309},[149,15281,329],{"class":155},[149,15283,1875],{"class":325},[149,15285,4567],{"class":6932},[149,15287,15277],{"class":325},[149,15289,3757],{"class":309},[149,15291,14155],{"class":155},[149,15293,15294,15296,15298,15300,15302,15304],{"class":151,"line":193},[149,15295,5808],{"class":325},[149,15297,12583],{"class":155},[149,15299,2344],{"class":325},[149,15301,12596],{"class":155},[149,15303,2344],{"class":325},[149,15305,15306],{"class":155}," c;\n",[149,15308,15309],{"class":151,"line":235},[149,15310,355],{"class":155},[149,15312,15313],{"class":151,"line":340},[149,15314,4119],{"emptyLinePlaceholder":1800},[149,15316,15317],{"class":151,"line":346},[149,15318,15319],{"class":295},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[149,15321,15322],{"class":151,"line":352},[149,15323,15324],{"class":295},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[149,15326,15327,15329,15332,15334,15336,15338,15340,15342,15344,15346,15348,15350,15352],{"class":151,"line":1021},[149,15328,1875],{"class":325},[149,15330,15331],{"class":162}," func2",[149,15333,319],{"class":155},[149,15335,1875],{"class":325},[149,15337,3123],{"class":6932},[149,15339,15277],{"class":325},[149,15341,3757],{"class":309},[149,15343,329],{"class":155},[149,15345,1875],{"class":325},[149,15347,4551],{"class":6932},[149,15349,15277],{"class":325},[149,15351,3757],{"class":309},[149,15353,337],{"class":155},[149,15355,15356,15358,15360,15362,15364,15366,15368,15370,15372],{"class":151,"line":1035},[149,15357,1875],{"class":325},[149,15359,15331],{"class":162},[149,15361,319],{"class":155},[149,15363,1875],{"class":325},[149,15365,3123],{"class":6932},[149,15367,329],{"class":155},[149,15369,1875],{"class":325},[149,15371,4551],{"class":6932},[149,15373,14155],{"class":155},[149,15375,15376,15378,15380,15382],{"class":151,"line":1054},[149,15377,5808],{"class":325},[149,15379,12583],{"class":155},[149,15381,2344],{"class":325},[149,15383,14176],{"class":155},[149,15385,15386],{"class":151,"line":1072},[149,15387,355],{"class":155},[149,15389,15390],{"class":151,"line":1090},[149,15391,4119],{"emptyLinePlaceholder":1800},[149,15393,15394,15396,15398],{"class":151,"line":1633},[149,15395,1875],{"class":325},[149,15397,3692],{"class":162},[149,15399,12567],{"class":155},[149,15401,15402],{"class":151,"line":1644},[149,15403,4119],{"emptyLinePlaceholder":1800},[149,15405,15406,15408,15410,15413,15415,15417,15419,15421,15423,15425,15428,15430],{"class":151,"line":3348},[149,15407,8245],{"class":155},[149,15409,2902],{"class":325},[149,15411,15412],{"class":169}," \"ret = \"",[149,15414,3169],{"class":325},[149,15416,13099],{"class":162},[149,15418,319],{"class":155},[149,15420,2561],{"class":309},[149,15422,329],{"class":155},[149,15424,2561],{"class":309},[149,15426,15427],{"class":155},") ",[149,15429,2902],{"class":325},[149,15431,10555],{"class":155},[149,15433,15434,15436,15438,15440,15442,15444,15446,15448,15450,15452],{"class":151,"line":3362},[149,15435,8245],{"class":155},[149,15437,2902],{"class":325},[149,15439,15412],{"class":169},[149,15441,3169],{"class":325},[149,15443,13099],{"class":162},[149,15445,319],{"class":155},[149,15447,322],{"class":309},[149,15449,15427],{"class":155},[149,15451,2902],{"class":325},[149,15453,10555],{"class":155},[149,15455,15456],{"class":151,"line":3367},[149,15457,4119],{"emptyLinePlaceholder":1800},[149,15459,15460,15462,15464,15466],{"class":151,"line":3373},[149,15461,4022],{"class":162},[149,15463,319],{"class":155},[149,15465,4027],{"class":169},[149,15467,337],{"class":155},[149,15469,15470],{"class":151,"line":3394},[149,15471,4119],{"emptyLinePlaceholder":1800},[149,15473,15474,15476,15478],{"class":151,"line":3399},[149,15475,5808],{"class":325},[149,15477,5811],{"class":309},[149,15479,841],{"class":155},[149,15481,15482],{"class":151,"line":3413},[149,15483,355],{"class":155},[24,15485,13046],{},[125,15487,15488,15491,15494],{},[45,15489,15490],{},"我传就用我；没传就用你",[45,15492,15493],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[45,15495,15496],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15498,15500],{"id":15499},"_72函数的占位参数","7.2函数的占位参数",[24,15502,15503],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[24,15505,15506,15508,15509],{},[31,15507,6899],{}," ",[48,15510,15511],{},"返回值类型 函数名 (数据类型){}",[140,15513,15515],{"className":1861,"code":15514,"language":1863,"meta":145,"style":145},"\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",[48,15516,15517,15522,15540,15553,15557,15565,15569,15586,15590,15600,15604,15612],{"__ignoreMap":145},[149,15518,15519],{"class":151,"line":152},[149,15520,15521],{"class":295},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[149,15523,15524,15526,15528,15530,15532,15534,15536,15538],{"class":151,"line":193},[149,15525,7080],{"class":325},[149,15527,13099],{"class":162},[149,15529,319],{"class":155},[149,15531,1875],{"class":325},[149,15533,3123],{"class":6932},[149,15535,329],{"class":155},[149,15537,1875],{"class":325},[149,15539,14155],{"class":155},[149,15541,15542,15544,15546,15549,15551],{"class":151,"line":235},[149,15543,8245],{"class":155},[149,15545,2902],{"class":325},[149,15547,15548],{"class":169}," \"this is func\"",[149,15550,3169],{"class":325},[149,15552,10555],{"class":155},[149,15554,15555],{"class":151,"line":340},[149,15556,355],{"class":155},[149,15558,15559,15561,15563],{"class":151,"line":346},[149,15560,1875],{"class":325},[149,15562,3692],{"class":162},[149,15564,12567],{"class":155},[149,15566,15567],{"class":151,"line":352},[149,15568,4119],{"emptyLinePlaceholder":1800},[149,15570,15571,15573,15575,15577,15579,15581,15583],{"class":151,"line":1021},[149,15572,14998],{"class":162},[149,15574,319],{"class":155},[149,15576,2309],{"class":309},[149,15578,2241],{"class":155},[149,15580,2309],{"class":309},[149,15582,7682],{"class":155},[149,15584,15585],{"class":295}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[149,15587,15588],{"class":151,"line":1035},[149,15589,4119],{"emptyLinePlaceholder":1800},[149,15591,15592,15594,15596,15598],{"class":151,"line":1054},[149,15593,4022],{"class":162},[149,15595,319],{"class":155},[149,15597,4027],{"class":169},[149,15599,337],{"class":155},[149,15601,15602],{"class":151,"line":1072},[149,15603,4119],{"emptyLinePlaceholder":1800},[149,15605,15606,15608,15610],{"class":151,"line":1090},[149,15607,5808],{"class":325},[149,15609,5811],{"class":309},[149,15611,841],{"class":155},[149,15613,15614],{"class":151,"line":1633},[149,15615,355],{"class":155},[24,15617,15618],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15620,15622],{"id":15621},"_73函数重载","7.3函数重载",[24,15624,15625],{},"意思是函数名是可以相同的",[19,15627,15629],{"id":15628},"_731基本语法","7.3.1基本语法",[24,15631,15632],{},"作用：函数名可以相同，提高复用性",[24,15634,15635],{},[31,15636,15637],{},"函数重载满足条件：",[42,15639,15640,15643,15646],{},[45,15641,15642],{},"同一个作用域下",[45,15644,15645],{},"函数名称相同",[45,15647,15648,15649,15652,15653,15656,15657],{},"函数参数",[31,15650,15651],{},"类型不同","  或者 ",[31,15654,15655],{},"个数不同"," 或者 ",[31,15658,15659],{},"顺序不同",[24,15661,15662,15665],{},[31,15663,15664],{},"注意:","  函数的返回值不可以作为函数重载的条件",[140,15667,15669],{"className":11655,"code":15668,"language":11657,"meta":145,"style":145},"\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",[48,15670,15671,15676,15684,15688,15701,15705,15719,15723,15736,15740,15755,15759,15772,15776,15797,15801,15814,15818,15838,15842,15855,15859,15863,15868,15873,15878,15883,15888,15892,15896,15904,15908,15914,15924,15934,15948,15963,15967,15977,15981,15989],{"__ignoreMap":145},[149,15672,15673],{"class":151,"line":152},[149,15674,15675],{"class":295},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[149,15677,15678,15680,15682],{"class":151,"line":193},[149,15679,7080],{"class":325},[149,15681,13099],{"class":162},[149,15683,3695],{"class":155},[149,15685,15686],{"class":151,"line":235},[149,15687,3270],{"class":155},[149,15689,15690,15692,15694,15697,15699],{"class":151,"line":340},[149,15691,8245],{"class":155},[149,15693,2902],{"class":325},[149,15695,15696],{"class":169}," \"func 的调用！\"",[149,15698,3169],{"class":325},[149,15700,10555],{"class":155},[149,15702,15703],{"class":151,"line":346},[149,15704,355],{"class":155},[149,15706,15707,15709,15711,15713,15715,15717],{"class":151,"line":352},[149,15708,7080],{"class":325},[149,15710,13099],{"class":162},[149,15712,319],{"class":155},[149,15714,1875],{"class":325},[149,15716,3123],{"class":6932},[149,15718,1878],{"class":155},[149,15720,15721],{"class":151,"line":1021},[149,15722,3270],{"class":155},[149,15724,15725,15727,15729,15732,15734],{"class":151,"line":1035},[149,15726,8245],{"class":155},[149,15728,2902],{"class":325},[149,15730,15731],{"class":169}," \"func (int a) 的调用！\"",[149,15733,3169],{"class":325},[149,15735,10555],{"class":155},[149,15737,15738],{"class":151,"line":1054},[149,15739,355],{"class":155},[149,15741,15742,15744,15746,15748,15751,15753],{"class":151,"line":1072},[149,15743,7080],{"class":325},[149,15745,13099],{"class":162},[149,15747,319],{"class":155},[149,15749,15750],{"class":325},"double",[149,15752,3123],{"class":6932},[149,15754,1878],{"class":155},[149,15756,15757],{"class":151,"line":1090},[149,15758,3270],{"class":155},[149,15760,15761,15763,15765,15768,15770],{"class":151,"line":1633},[149,15762,8245],{"class":155},[149,15764,2902],{"class":325},[149,15766,15767],{"class":169}," \"func (double a)的调用！\"",[149,15769,3169],{"class":325},[149,15771,10555],{"class":155},[149,15773,15774],{"class":151,"line":1644},[149,15775,355],{"class":155},[149,15777,15778,15780,15782,15784,15786,15788,15791,15793,15795],{"class":151,"line":3348},[149,15779,7080],{"class":325},[149,15781,13099],{"class":162},[149,15783,319],{"class":155},[149,15785,1875],{"class":325},[149,15787,3123],{"class":6932},[149,15789,15790],{"class":155}," ,",[149,15792,15750],{"class":325},[149,15794,4551],{"class":6932},[149,15796,1878],{"class":155},[149,15798,15799],{"class":151,"line":3362},[149,15800,3270],{"class":155},[149,15802,15803,15805,15807,15810,15812],{"class":151,"line":3367},[149,15804,8245],{"class":155},[149,15806,2902],{"class":325},[149,15808,15809],{"class":169}," \"func (int a ,double b) 的调用！\"",[149,15811,3169],{"class":325},[149,15813,10555],{"class":155},[149,15815,15816],{"class":151,"line":3373},[149,15817,355],{"class":155},[149,15819,15820,15822,15824,15826,15828,15830,15832,15834,15836],{"class":151,"line":3394},[149,15821,7080],{"class":325},[149,15823,13099],{"class":162},[149,15825,319],{"class":155},[149,15827,15750],{"class":325},[149,15829,3123],{"class":6932},[149,15831,15790],{"class":155},[149,15833,1875],{"class":325},[149,15835,4551],{"class":6932},[149,15837,1878],{"class":155},[149,15839,15840],{"class":151,"line":3399},[149,15841,3270],{"class":155},[149,15843,15844,15846,15848,15851,15853],{"class":151,"line":3413},[149,15845,8245],{"class":155},[149,15847,2902],{"class":325},[149,15849,15850],{"class":169}," \"func (double a ,int b)的调用！\"",[149,15852,3169],{"class":325},[149,15854,10555],{"class":155},[149,15856,15857],{"class":151,"line":3418},[149,15858,355],{"class":155},[149,15860,15861],{"class":151,"line":3447},[149,15862,4119],{"emptyLinePlaceholder":1800},[149,15864,15865],{"class":151,"line":3452},[149,15866,15867],{"class":295},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[149,15869,15870],{"class":151,"line":3469},[149,15871,15872],{"class":295},"\u002F\u002Fint func(double a, int b)\n",[149,15874,15875],{"class":151,"line":3474},[149,15876,15877],{"class":295},"\u002F\u002F{\n",[149,15879,15880],{"class":151,"line":3479},[149,15881,15882],{"class":295},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[149,15884,15885],{"class":151,"line":3484},[149,15886,15887],{"class":295},"\u002F\u002F}\n",[149,15889,15890],{"class":151,"line":3498},[149,15891,4119],{"emptyLinePlaceholder":1800},[149,15893,15894],{"class":151,"line":3503},[149,15895,4119],{"emptyLinePlaceholder":1800},[149,15897,15898,15900,15902],{"class":151,"line":4296},[149,15899,1875],{"class":325},[149,15901,3692],{"class":162},[149,15903,12567],{"class":155},[149,15905,15906],{"class":151,"line":4310},[149,15907,4119],{"emptyLinePlaceholder":1800},[149,15909,15910,15912],{"class":151,"line":4318},[149,15911,14998],{"class":162},[149,15913,7352],{"class":155},[149,15915,15916,15918,15920,15922],{"class":151,"line":4323},[149,15917,14998],{"class":162},[149,15919,319],{"class":155},[149,15921,2309],{"class":309},[149,15923,337],{"class":155},[149,15925,15926,15928,15930,15932],{"class":151,"line":4329},[149,15927,14998],{"class":162},[149,15929,319],{"class":155},[149,15931,1918],{"class":309},[149,15933,337],{"class":155},[149,15935,15936,15938,15940,15942,15944,15946],{"class":151,"line":4335},[149,15937,14998],{"class":162},[149,15939,319],{"class":155},[149,15941,2309],{"class":309},[149,15943,2241],{"class":155},[149,15945,1918],{"class":309},[149,15947,337],{"class":155},[149,15949,15950,15952,15954,15956,15959,15961],{"class":151,"line":4340},[149,15951,14998],{"class":162},[149,15953,319],{"class":155},[149,15955,1918],{"class":309},[149,15957,15958],{"class":155}," , ",[149,15960,2309],{"class":309},[149,15962,337],{"class":155},[149,15964,15965],{"class":151,"line":9663},[149,15966,14923],{"class":155},[149,15968,15969,15971,15973,15975],{"class":151,"line":9687},[149,15970,4022],{"class":162},[149,15972,319],{"class":155},[149,15974,4027],{"class":169},[149,15976,337],{"class":155},[149,15978,15979],{"class":151,"line":9692},[149,15980,4119],{"emptyLinePlaceholder":1800},[149,15982,15983,15985,15987],{"class":151,"line":9698},[149,15984,5808],{"class":325},[149,15986,5811],{"class":309},[149,15988,841],{"class":155},[149,15990,15991],{"class":151,"line":9725},[149,15992,355],{"class":155},[24,15994,15995],{},"重点：函数返回值不可以作为函数重载条件！",[19,15997,15999],{"id":15998},"_732注意事项","7.3.2注意事项",[42,16001,16002,16005],{},[45,16003,16004],{},"引用作为重载条件!!!",[45,16006,16007],{},"函数重载碰到函数默认参数",[140,16009,16011],{"className":1861,"code":16010,"language":1863,"meta":145,"style":145},"\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",[48,16012,16013,16018,16023,16027,16043,16047,16060,16064,16068,16086,16090,16103,16107,16111,16115,16120,16124,16148,16152,16165,16169,16173,16187,16191,16204,16208,16212,16220,16224,16236,16246,16259,16263,16267,16275,16279,16289,16293,16301],{"__ignoreMap":145},[149,16014,16015],{"class":151,"line":152},[149,16016,16017],{"class":295},"\u002F\u002F函数重载注意事项\n",[149,16019,16020],{"class":151,"line":193},[149,16021,16022],{"class":295},"\u002F\u002F1、引用作为重载条件\n",[149,16024,16025],{"class":151,"line":235},[149,16026,4119],{"emptyLinePlaceholder":1800},[149,16028,16029,16031,16033,16035,16037,16039,16041],{"class":151,"line":340},[149,16030,7080],{"class":325},[149,16032,13099],{"class":162},[149,16034,319],{"class":155},[149,16036,1875],{"class":325},[149,16038,12298],{"class":325},[149,16040,2102],{"class":6932},[149,16042,1878],{"class":155},[149,16044,16045],{"class":151,"line":346},[149,16046,3270],{"class":155},[149,16048,16049,16051,16053,16056,16058],{"class":151,"line":352},[149,16050,8245],{"class":155},[149,16052,2902],{"class":325},[149,16054,16055],{"class":169}," \"func (int &a) 调用 \"",[149,16057,3169],{"class":325},[149,16059,10555],{"class":155},[149,16061,16062],{"class":151,"line":1021},[149,16063,355],{"class":155},[149,16065,16066],{"class":151,"line":1035},[149,16067,4119],{"emptyLinePlaceholder":1800},[149,16069,16070,16072,16074,16076,16078,16080,16082,16084],{"class":151,"line":1054},[149,16071,7080],{"class":325},[149,16073,13099],{"class":162},[149,16075,319],{"class":155},[149,16077,8508],{"class":325},[149,16079,4101],{"class":325},[149,16081,12298],{"class":325},[149,16083,2102],{"class":6932},[149,16085,1878],{"class":155},[149,16087,16088],{"class":151,"line":1072},[149,16089,3270],{"class":155},[149,16091,16092,16094,16096,16099,16101],{"class":151,"line":1090},[149,16093,8245],{"class":155},[149,16095,2902],{"class":325},[149,16097,16098],{"class":169}," \"func (const int &a) 调用 \"",[149,16100,3169],{"class":325},[149,16102,10555],{"class":155},[149,16104,16105],{"class":151,"line":1633},[149,16106,355],{"class":155},[149,16108,16109],{"class":151,"line":1644},[149,16110,4119],{"emptyLinePlaceholder":1800},[149,16112,16113],{"class":151,"line":3348},[149,16114,4119],{"emptyLinePlaceholder":1800},[149,16116,16117],{"class":151,"line":3362},[149,16118,16119],{"class":295},"\u002F\u002F2、函数重载碰到函数默认参数\n",[149,16121,16122],{"class":151,"line":3367},[149,16123,4119],{"emptyLinePlaceholder":1800},[149,16125,16126,16128,16130,16132,16134,16136,16138,16140,16142,16144,16146],{"class":151,"line":3373},[149,16127,7080],{"class":325},[149,16129,15331],{"class":162},[149,16131,319],{"class":155},[149,16133,1875],{"class":325},[149,16135,3123],{"class":6932},[149,16137,329],{"class":155},[149,16139,1875],{"class":325},[149,16141,4551],{"class":6932},[149,16143,15277],{"class":325},[149,16145,3757],{"class":309},[149,16147,1878],{"class":155},[149,16149,16150],{"class":151,"line":3394},[149,16151,3270],{"class":155},[149,16153,16154,16156,16158,16161,16163],{"class":151,"line":3399},[149,16155,8245],{"class":155},[149,16157,2902],{"class":325},[149,16159,16160],{"class":169}," \"func2(int a, int b = 10) 调用\"",[149,16162,3169],{"class":325},[149,16164,10555],{"class":155},[149,16166,16167],{"class":151,"line":3413},[149,16168,355],{"class":155},[149,16170,16171],{"class":151,"line":3418},[149,16172,4119],{"emptyLinePlaceholder":1800},[149,16174,16175,16177,16179,16181,16183,16185],{"class":151,"line":3447},[149,16176,7080],{"class":325},[149,16178,15331],{"class":162},[149,16180,319],{"class":155},[149,16182,1875],{"class":325},[149,16184,3123],{"class":6932},[149,16186,1878],{"class":155},[149,16188,16189],{"class":151,"line":3452},[149,16190,3270],{"class":155},[149,16192,16193,16195,16197,16200,16202],{"class":151,"line":3469},[149,16194,8245],{"class":155},[149,16196,2902],{"class":325},[149,16198,16199],{"class":169}," \"func2(int a) 调用\"",[149,16201,3169],{"class":325},[149,16203,10555],{"class":155},[149,16205,16206],{"class":151,"line":3474},[149,16207,355],{"class":155},[149,16209,16210],{"class":151,"line":3479},[149,16211,4119],{"emptyLinePlaceholder":1800},[149,16213,16214,16216,16218],{"class":151,"line":3484},[149,16215,1875],{"class":325},[149,16217,3692],{"class":162},[149,16219,12567],{"class":155},[149,16221,16222],{"class":151,"line":3498},[149,16223,14923],{"class":155},[149,16225,16226,16228,16230,16232,16234],{"class":151,"line":3503},[149,16227,3704],{"class":325},[149,16229,12583],{"class":155},[149,16231,166],{"class":325},[149,16233,3757],{"class":309},[149,16235,841],{"class":155},[149,16237,16238,16240,16243],{"class":151,"line":4296},[149,16239,14998],{"class":162},[149,16241,16242],{"class":155},"(a);",[149,16244,16245],{"class":295}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[149,16247,16248,16250,16252,16254,16256],{"class":151,"line":4310},[149,16249,14998],{"class":162},[149,16251,319],{"class":155},[149,16253,2309],{"class":309},[149,16255,7682],{"class":155},[149,16257,16258],{"class":295},"\u002F\u002F调用有const   10是个常量\n",[149,16260,16261],{"class":151,"line":4318},[149,16262,4119],{"emptyLinePlaceholder":1800},[149,16264,16265],{"class":151,"line":4323},[149,16266,4119],{"emptyLinePlaceholder":1800},[149,16268,16269,16272],{"class":151,"line":4329},[149,16270,16271],{"class":295},"    \u002F\u002Ffunc2(10);",[149,16273,16274],{"class":295}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[149,16276,16277],{"class":151,"line":4335},[149,16278,4119],{"emptyLinePlaceholder":1800},[149,16280,16281,16283,16285,16287],{"class":151,"line":4340},[149,16282,4022],{"class":162},[149,16284,319],{"class":155},[149,16286,4027],{"class":169},[149,16288,337],{"class":155},[149,16290,16291],{"class":151,"line":9663},[149,16292,4119],{"emptyLinePlaceholder":1800},[149,16294,16295,16297,16299],{"class":151,"line":9687},[149,16296,5808],{"class":325},[149,16298,5811],{"class":309},[149,16300,841],{"class":155},[149,16302,16303],{"class":151,"line":9692},[149,16304,355],{"class":155},[1783,16306,16307],{},"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":145,"searchDepth":193,"depth":193,"links":16309},[16310,16311,16312],{"id":15242,"depth":193,"text":15243},{"id":15499,"depth":193,"text":15500},{"id":15621,"depth":193,"text":15622,"children":16313},[16314,16315],{"id":15628,"depth":235,"text":15629},{"id":15998,"depth":235,"text":15999},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15234,"description":145},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16322,"title":16323,"body":16324,"description":25074,"extension":1798,"meta":25075,"navigation":1800,"path":25076,"seo":25077,"stem":25078,"__hash__":25079},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16325,"toc":25055},[16326,16329,16335,16342,16347,16350,16353,16356,16360,16364,16367,16370,16378,16383,16386,16393,16398,16556,16559,16811,16814,16817,16820,16825,16828,16831,16842,16847,17083,17087,17097,17100,17108,17255,17259,17262,17265,17269,17713,17717,17725,17733,18645,18652,18657,19285,19288,19291,19294,19413,19416,19503,19506,19632,19635,19729,19732,20085,20089,20097,20101,20108,20111,20114,20125,20131,20136,20148,20156,20176,20184,20201,20387,20390,20394,20397,20400,20403,20406,20409,20412,20415,20875,20881,20885,20888,20899,21486,21489,21978,21982,21985,21988,21991,21994,21997,22005,22401,22405,22408,22411,22858,22861,22864,22869,22872,22877,22880,22884,22887,22889,22895,22898,23204,23214,23255,23259,23262,23264,23297,23300,23607,23609,23624,23627,23650,23659,23665,23668,23672,23675,23678,23683,23694,23699,23707,23711,23841,23844,23847,24022,24027,24239,24243,24246,24360,24365,24604,24608,24612,24615,24618,24623,24728,24731,24734,24737,24741,24852,24855,24858,24863,24915,24918,24921,24926,24972,24975,24980,25048,25050,25053],[10,16327,16323],{"id":16328},"_8类和对象",[24,16330,16331,16332],{},"C++面向对象的三大特性为",[31,16333,16334],{},"封装、继承、多态",[24,16336,16337,16338,16341],{},"C++认为",[31,16339,16340],{},"万事万物都皆为对象","，对象上有其属性和行为",[24,16343,16344],{},[31,16345,16346],{},"例如：",[24,16348,16349],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[24,16351,16352],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[24,16354,16355],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16357,16359],{"id":16358},"_81封装","8.1封装",[19,16361,16363],{"id":16362},"_811封装的意义","8.1.1封装的意义",[24,16365,16366],{},"封装是C++面向对象三大特性之一",[24,16368,16369],{},"封装的意义：",[42,16371,16372,16375],{},[45,16373,16374],{},"将属性和行为作为一个整体，表现生活中的事物",[45,16376,16377],{},"将属性和行为加以权限控制",[24,16379,16380],{},[31,16381,16382],{},"封装意义一：",[24,16384,16385],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[24,16387,16388,15508,16390],{},[31,16389,6899],{},[48,16391,16392],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[125,16394,16395],{},[45,16396,16397],{},"**示例1：**设计一个圆类，求圆的周长",[140,16399,16401],{"className":1861,"code":16400,"language":1863,"meta":145,"style":145},"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",[48,16402,16403,16410,16414,16419,16424,16429,16434,16441,16446,16456,16460,16478,16482,16486,16494,16498,16503,16508,16513,16518,16529,16552],{"__ignoreMap":145},[149,16404,16405,16407],{"class":151,"line":152},[149,16406,913],{"class":325},[149,16408,16409],{"class":162}," Circle\n",[149,16411,16412],{"class":151,"line":193},[149,16413,3270],{"class":155},[149,16415,16416],{"class":151,"line":235},[149,16417,16418],{"class":295},"    \u002F\u002F访问权限\n",[149,16420,16421],{"class":151,"line":340},[149,16422,16423],{"class":295},"    \u002F\u002F公共权限\n",[149,16425,16426],{"class":151,"line":346},[149,16427,16428],{"class":325},"public:\n",[149,16430,16431],{"class":151,"line":352},[149,16432,16433],{"class":295},"    \u002F\u002F属性\n",[149,16435,16436,16438],{"class":151,"line":1021},[149,16437,3704],{"class":325},[149,16439,16440],{"class":155}," m_r;\n",[149,16442,16443],{"class":151,"line":1035},[149,16444,16445],{"class":295},"    \u002F\u002F行为\n",[149,16447,16448,16451,16454],{"class":151,"line":1054},[149,16449,16450],{"class":325},"    double",[149,16452,16453],{"class":162}," calculateZC",[149,16455,3695],{"class":155},[149,16457,16458],{"class":151,"line":1072},[149,16459,3749],{"class":155},[149,16461,16462,16465,16468,16470,16473,16475],{"class":151,"line":1090},[149,16463,16464],{"class":325},"        return",[149,16466,16467],{"class":309}," 2",[149,16469,2318],{"class":325},[149,16471,16472],{"class":155},"PI",[149,16474,2318],{"class":325},[149,16476,16477],{"class":155},"m_r;\n",[149,16479,16480],{"class":151,"line":1633},[149,16481,3906],{"class":155},[149,16483,16484],{"class":151,"line":1644},[149,16485,5713],{"class":155},[149,16487,16488,16490,16492],{"class":151,"line":3348},[149,16489,1875],{"class":325},[149,16491,3692],{"class":162},[149,16493,3695],{"class":155},[149,16495,16496],{"class":151,"line":3362},[149,16497,3270],{"class":155},[149,16499,16500],{"class":151,"line":3367},[149,16501,16502],{"class":295},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[149,16504,16505],{"class":151,"line":3373},[149,16506,16507],{"class":295},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[149,16509,16510],{"class":151,"line":3394},[149,16511,16512],{"class":155},"    Circle c1;\n",[149,16514,16515],{"class":151,"line":3399},[149,16516,16517],{"class":295},"    \u002F\u002F给圆对象 的属性进行赋值\n",[149,16519,16520,16523,16525,16527],{"class":151,"line":3413},[149,16521,16522],{"class":155},"    c1.m_r",[149,16524,166],{"class":325},[149,16526,2309],{"class":309},[149,16528,841],{"class":155},[149,16530,16531,16533,16535,16538,16540,16543,16546,16548,16550],{"class":151,"line":3418},[149,16532,3275],{"class":155},[149,16534,2902],{"class":325},[149,16536,16537],{"class":169},"\"圆的周长\"",[149,16539,2902],{"class":325},[149,16541,16542],{"class":155},"c1.",[149,16544,16545],{"class":162},"calculateZC",[149,16547,4146],{"class":155},[149,16549,2902],{"class":325},[149,16551,2924],{"class":155},[149,16553,16554],{"class":151,"line":3447},[149,16555,355],{"class":155},[24,16557,16558],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[140,16560,16562],{"className":1861,"code":16561,"language":1863,"meta":145,"style":145},"#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",[48,16563,16564,16570,16580,16586,16592,16596,16600,16605,16612,16617,16634,16638,16648,16652,16657,16673,16677,16687,16691,16696,16704,16708,16740,16744,16748,16756,16760,16765,16770,16784,16798,16807],{"__ignoreMap":145},[149,16565,16566,16568],{"class":151,"line":152},[149,16567,3669],{"class":325},[149,16569,3672],{"class":169},[149,16571,16572,16574,16576,16578],{"class":151,"line":193},[149,16573,3677],{"class":325},[149,16575,3680],{"class":325},[149,16577,3683],{"class":162},[149,16579,841],{"class":155},[149,16581,16582,16584],{"class":151,"line":235},[149,16583,3669],{"class":325},[149,16585,9464],{"class":169},[149,16587,16588,16590],{"class":151,"line":340},[149,16589,913],{"class":325},[149,16591,9477],{"class":162},[149,16593,16594],{"class":151,"line":346},[149,16595,3270],{"class":155},[149,16597,16598],{"class":151,"line":352},[149,16599,16428],{"class":325},[149,16601,16602],{"class":151,"line":1021},[149,16603,16604],{"class":155},"    string m_name;\n",[149,16606,16607,16609],{"class":151,"line":1035},[149,16608,3704],{"class":325},[149,16610,16611],{"class":155}," m_id;\n",[149,16613,16614],{"class":151,"line":1054},[149,16615,16616],{"class":295},"    \u002F\u002F赋值姓名\n",[149,16618,16619,16622,16625,16627,16630,16632],{"class":151,"line":1072},[149,16620,16621],{"class":325},"    void",[149,16623,16624],{"class":162}," setName",[149,16626,319],{"class":155},[149,16628,16629],{"class":162},"string",[149,16631,515],{"class":6932},[149,16633,1878],{"class":155},[149,16635,16636],{"class":151,"line":1090},[149,16637,3749],{"class":155},[149,16639,16640,16643,16645],{"class":151,"line":1633},[149,16641,16642],{"class":155},"        m_name",[149,16644,166],{"class":325},[149,16646,16647],{"class":155},"name;\n",[149,16649,16650],{"class":151,"line":1644},[149,16651,3906],{"class":155},[149,16653,16654],{"class":151,"line":3348},[149,16655,16656],{"class":295},"    \u002F\u002F赋值学号\n",[149,16658,16659,16661,16664,16666,16668,16671],{"class":151,"line":3362},[149,16660,16621],{"class":325},[149,16662,16663],{"class":162}," setId",[149,16665,319],{"class":155},[149,16667,1875],{"class":325},[149,16669,16670],{"class":6932}," id",[149,16672,1878],{"class":155},[149,16674,16675],{"class":151,"line":3367},[149,16676,3749],{"class":155},[149,16678,16679,16682,16684],{"class":151,"line":3373},[149,16680,16681],{"class":155},"        m_id",[149,16683,166],{"class":325},[149,16685,16686],{"class":155},"id;\n",[149,16688,16689],{"class":151,"line":3394},[149,16690,3906],{"class":155},[149,16692,16693],{"class":151,"line":3399},[149,16694,16695],{"class":295},"    \u002F\u002F打印学生信息\n",[149,16697,16698,16700,16702],{"class":151,"line":3413},[149,16699,16621],{"class":325},[149,16701,11329],{"class":162},[149,16703,3695],{"class":155},[149,16705,16706],{"class":151,"line":3418},[149,16707,3749],{"class":155},[149,16709,16710,16712,16714,16717,16719,16722,16724,16726,16728,16731,16733,16736,16738],{"class":151,"line":3447},[149,16711,5169],{"class":155},[149,16713,2902],{"class":325},[149,16715,16716],{"class":169},"\"姓名：\"",[149,16718,2902],{"class":325},[149,16720,16721],{"class":155},"m_name",[149,16723,2902],{"class":325},[149,16725,6077],{"class":169},[149,16727,2902],{"class":325},[149,16729,16730],{"class":169},"\"学号：\"",[149,16732,2902],{"class":325},[149,16734,16735],{"class":155},"m_id",[149,16737,2902],{"class":325},[149,16739,2924],{"class":155},[149,16741,16742],{"class":151,"line":3452},[149,16743,3906],{"class":155},[149,16745,16746],{"class":151,"line":3469},[149,16747,5713],{"class":155},[149,16749,16750,16752,16754],{"class":151,"line":3474},[149,16751,1875],{"class":325},[149,16753,3692],{"class":162},[149,16755,3695],{"class":155},[149,16757,16758],{"class":151,"line":3479},[149,16759,3270],{"class":155},[149,16761,16762],{"class":151,"line":3484},[149,16763,16764],{"class":295},"    \u002F\u002F实例化\n",[149,16766,16767],{"class":151,"line":3498},[149,16768,16769],{"class":155},"    Student s1;\n",[149,16771,16772,16775,16778,16780,16782],{"class":151,"line":3503},[149,16773,16774],{"class":155},"    s1.",[149,16776,16777],{"class":162},"setName",[149,16779,319],{"class":155},[149,16781,9631],{"class":169},[149,16783,337],{"class":155},[149,16785,16786,16788,16791,16793,16796],{"class":151,"line":4296},[149,16787,16774],{"class":155},[149,16789,16790],{"class":162},"setId",[149,16792,319],{"class":155},[149,16794,16795],{"class":309},"123456",[149,16797,337],{"class":155},[149,16799,16800,16802,16805],{"class":151,"line":4310},[149,16801,16774],{"class":155},[149,16803,16804],{"class":162},"printInfo",[149,16806,7352],{"class":155},[149,16808,16809],{"class":151,"line":4318},[149,16810,355],{"class":155},[24,16812,16813],{},"类中的属性和行为统称为成员",[24,16815,16816],{},"属性：成员属性(成员变量)",[24,16818,16819],{},"方法：成员函数(成员方法)",[24,16821,16822],{},[31,16823,16824],{},"封装意义二：",[24,16826,16827],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[24,16829,16830],{},"访问权限有三种：",[125,16832,16833,16836,16839],{},[45,16834,16835],{},"public        公共权限",[45,16837,16838],{},"protected 保护权限",[45,16840,16841],{},"private      私有权限",[24,16843,16844],{},[31,16845,16846],{},"示例：",[140,16848,16850],{"className":11655,"code":16849,"language":11657,"meta":145,"style":145},"\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",[48,16851,16852,16857,16862,16867,16872,16876,16883,16887,16892,16896,16901,16905,16910,16915,16920,16924,16929,16934,16941,16945,16949,16957,16961,16972,16984,16996,17000,17004,17008,17016,17020,17025,17037,17045,17053,17057,17067,17071,17079],{"__ignoreMap":145},[149,16853,16854],{"class":151,"line":152},[149,16855,16856],{"class":295},"\u002F\u002F三种权限\n",[149,16858,16859],{"class":151,"line":193},[149,16860,16861],{"class":295},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[149,16863,16864],{"class":151,"line":235},[149,16865,16866],{"class":295},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[149,16868,16869],{"class":151,"line":340},[149,16870,16871],{"class":295},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[149,16873,16874],{"class":151,"line":346},[149,16875,4119],{"emptyLinePlaceholder":1800},[149,16877,16878,16880],{"class":151,"line":352},[149,16879,913],{"class":325},[149,16881,16882],{"class":162}," Person\n",[149,16884,16885],{"class":151,"line":1021},[149,16886,3270],{"class":155},[149,16888,16889],{"class":151,"line":1035},[149,16890,16891],{"class":295},"    \u002F\u002F姓名  公共权限\n",[149,16893,16894],{"class":151,"line":1054},[149,16895,16428],{"class":325},[149,16897,16898],{"class":151,"line":1072},[149,16899,16900],{"class":155},"    string m_Name;\n",[149,16902,16903],{"class":151,"line":1090},[149,16904,4119],{"emptyLinePlaceholder":1800},[149,16906,16907],{"class":151,"line":1633},[149,16908,16909],{"class":295},"    \u002F\u002F汽车  保护权限\n",[149,16911,16912],{"class":151,"line":1644},[149,16913,16914],{"class":325},"protected:\n",[149,16916,16917],{"class":151,"line":3348},[149,16918,16919],{"class":155},"    string m_Car;\n",[149,16921,16922],{"class":151,"line":3362},[149,16923,4119],{"emptyLinePlaceholder":1800},[149,16925,16926],{"class":151,"line":3367},[149,16927,16928],{"class":295},"    \u002F\u002F银行卡密码  私有权限\n",[149,16930,16931],{"class":151,"line":3373},[149,16932,16933],{"class":325},"private:\n",[149,16935,16936,16938],{"class":151,"line":3394},[149,16937,3704],{"class":325},[149,16939,16940],{"class":155}," m_Password;\n",[149,16942,16943],{"class":151,"line":3399},[149,16944,4119],{"emptyLinePlaceholder":1800},[149,16946,16947],{"class":151,"line":3413},[149,16948,16428],{"class":325},[149,16950,16951,16953,16955],{"class":151,"line":3418},[149,16952,16621],{"class":325},[149,16954,13099],{"class":162},[149,16956,3695],{"class":155},[149,16958,16959],{"class":151,"line":3447},[149,16960,3749],{"class":155},[149,16962,16963,16966,16968,16970],{"class":151,"line":3452},[149,16964,16965],{"class":155},"        m_Name ",[149,16967,166],{"class":325},[149,16969,10653],{"class":169},[149,16971,841],{"class":155},[149,16973,16974,16977,16979,16982],{"class":151,"line":3469},[149,16975,16976],{"class":155},"        m_Car ",[149,16978,166],{"class":325},[149,16980,16981],{"class":169}," \"拖拉机\"",[149,16983,841],{"class":155},[149,16985,16986,16989,16991,16994],{"class":151,"line":3474},[149,16987,16988],{"class":155},"        m_Password ",[149,16990,166],{"class":325},[149,16992,16993],{"class":309}," 123456",[149,16995,841],{"class":155},[149,16997,16998],{"class":151,"line":3479},[149,16999,3906],{"class":155},[149,17001,17002],{"class":151,"line":3484},[149,17003,5713],{"class":155},[149,17005,17006],{"class":151,"line":3498},[149,17007,4119],{"emptyLinePlaceholder":1800},[149,17009,17010,17012,17014],{"class":151,"line":3503},[149,17011,1875],{"class":325},[149,17013,3692],{"class":162},[149,17015,12567],{"class":155},[149,17017,17018],{"class":151,"line":4296},[149,17019,4119],{"emptyLinePlaceholder":1800},[149,17021,17022],{"class":151,"line":4310},[149,17023,17024],{"class":155},"    Person p;\n",[149,17026,17027,17030,17032,17035],{"class":151,"line":4318},[149,17028,17029],{"class":155},"    p.m_Name ",[149,17031,166],{"class":325},[149,17033,17034],{"class":169}," \"李四\"",[149,17036,841],{"class":155},[149,17038,17039,17042],{"class":151,"line":4323},[149,17040,17041],{"class":295},"    \u002F\u002Fp.m_Car = \"奔驰\";",[149,17043,17044],{"class":295},"  \u002F\u002F保护权限类外访问不到\n",[149,17046,17047,17050],{"class":151,"line":4329},[149,17048,17049],{"class":295},"    \u002F\u002Fp.m_Password = 123;",[149,17051,17052],{"class":295}," \u002F\u002F私有权限类外访问不到\n",[149,17054,17055],{"class":151,"line":4335},[149,17056,4119],{"emptyLinePlaceholder":1800},[149,17058,17059,17061,17063,17065],{"class":151,"line":4340},[149,17060,4022],{"class":162},[149,17062,319],{"class":155},[149,17064,4027],{"class":169},[149,17066,337],{"class":155},[149,17068,17069],{"class":151,"line":9663},[149,17070,4119],{"emptyLinePlaceholder":1800},[149,17072,17073,17075,17077],{"class":151,"line":9687},[149,17074,5808],{"class":325},[149,17076,5811],{"class":309},[149,17078,841],{"class":155},[149,17080,17081],{"class":151,"line":9692},[149,17082,355],{"class":155},[19,17084,17086],{"id":17085},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[24,17088,17089,17090,17093,17094],{},"在C++中 struct和class唯一的",[31,17091,17092],{},"区别","就在于 ",[31,17095,17096],{},"默认的访问权限不同",[24,17098,17099],{},"区别：",[42,17101,17102,17105],{},[45,17103,17104],{},"struct 默认权限为公共",[45,17106,17107],{},"class   默认权限为私有",[140,17109,17111],{"className":11655,"code":17110,"language":11657,"meta":145,"style":145},"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",[48,17112,17113,17120,17124,17134,17138,17142,17149,17153,17163,17167,17171,17179,17183,17188,17202,17206,17211,17225,17229,17239,17243,17251],{"__ignoreMap":145},[149,17114,17115,17117],{"class":151,"line":152},[149,17116,913],{"class":325},[149,17118,17119],{"class":162}," C1\n",[149,17121,17122],{"class":151,"line":193},[149,17123,3270],{"class":155},[149,17125,17126,17128,17131],{"class":151,"line":235},[149,17127,3704],{"class":325},[149,17129,17130],{"class":155},"  m_A;",[149,17132,17133],{"class":295}," \u002F\u002F默认是私有权限\n",[149,17135,17136],{"class":151,"line":340},[149,17137,5713],{"class":155},[149,17139,17140],{"class":151,"line":346},[149,17141,4119],{"emptyLinePlaceholder":1800},[149,17143,17144,17146],{"class":151,"line":352},[149,17145,9474],{"class":325},[149,17147,17148],{"class":162}," C2\n",[149,17150,17151],{"class":151,"line":1021},[149,17152,3270],{"class":155},[149,17154,17155,17157,17160],{"class":151,"line":1035},[149,17156,3704],{"class":325},[149,17158,17159],{"class":155}," m_A;",[149,17161,17162],{"class":295},"  \u002F\u002F默认是公共权限\n",[149,17164,17165],{"class":151,"line":1054},[149,17166,5713],{"class":155},[149,17168,17169],{"class":151,"line":1072},[149,17170,4119],{"emptyLinePlaceholder":1800},[149,17172,17173,17175,17177],{"class":151,"line":1090},[149,17174,1875],{"class":325},[149,17176,3692],{"class":162},[149,17178,12567],{"class":155},[149,17180,17181],{"class":151,"line":1633},[149,17182,4119],{"emptyLinePlaceholder":1800},[149,17184,17185],{"class":151,"line":1644},[149,17186,17187],{"class":155},"    C1 c1;\n",[149,17189,17190,17193,17195,17197,17199],{"class":151,"line":3348},[149,17191,17192],{"class":155},"    c1.m_A ",[149,17194,166],{"class":325},[149,17196,3757],{"class":309},[149,17198,1924],{"class":155},[149,17200,17201],{"class":295}," \u002F\u002F错误，访问权限是私有\n",[149,17203,17204],{"class":151,"line":3362},[149,17205,4119],{"emptyLinePlaceholder":1800},[149,17207,17208],{"class":151,"line":3367},[149,17209,17210],{"class":155},"    C2 c2;\n",[149,17212,17213,17216,17218,17220,17222],{"class":151,"line":3373},[149,17214,17215],{"class":155},"    c2.m_A ",[149,17217,166],{"class":325},[149,17219,3757],{"class":309},[149,17221,1924],{"class":155},[149,17223,17224],{"class":295}," \u002F\u002F正确，访问权限是公共\n",[149,17226,17227],{"class":151,"line":3394},[149,17228,4119],{"emptyLinePlaceholder":1800},[149,17230,17231,17233,17235,17237],{"class":151,"line":3399},[149,17232,4022],{"class":162},[149,17234,319],{"class":155},[149,17236,4027],{"class":169},[149,17238,337],{"class":155},[149,17240,17241],{"class":151,"line":3413},[149,17242,4119],{"emptyLinePlaceholder":1800},[149,17244,17245,17247,17249],{"class":151,"line":3418},[149,17246,5808],{"class":325},[149,17248,5811],{"class":309},[149,17250,841],{"class":155},[149,17252,17253],{"class":151,"line":3447},[149,17254,355],{"class":155},[19,17256,17258],{"id":17257},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[24,17260,17261],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[24,17263,17264],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[24,17266,17267],{},[31,17268,16846],{},[140,17270,17272],{"className":11655,"code":17271,"language":11657,"meta":145,"style":145},"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",[48,17273,17274,17283,17287,17291,17296,17310,17319,17323,17333,17337,17344,17348,17352,17356,17361,17370,17377,17381,17386,17402,17425,17438,17445,17449,17458,17462,17466,17471,17487,17497,17501,17505,17509,17517,17521,17531,17535,17543,17547,17551,17559,17563,17567,17572,17585,17608,17612,17617,17630,17652,17656,17661,17675,17683,17687,17697,17701,17709],{"__ignoreMap":145},[149,17275,17276,17278,17281],{"class":151,"line":152},[149,17277,913],{"class":325},[149,17279,17280],{"class":162}," Person",[149,17282,304],{"class":155},[149,17284,17285],{"class":151,"line":193},[149,17286,16428],{"class":325},[149,17288,17289],{"class":151,"line":235},[149,17290,4119],{"emptyLinePlaceholder":1800},[149,17292,17293],{"class":151,"line":340},[149,17294,17295],{"class":295},"    \u002F\u002F姓名设置可读可写\n",[149,17297,17298,17300,17302,17304,17306,17308],{"class":151,"line":346},[149,17299,16621],{"class":325},[149,17301,16624],{"class":162},[149,17303,319],{"class":155},[149,17305,16629],{"class":162},[149,17307,515],{"class":6932},[149,17309,14155],{"class":155},[149,17311,17312,17314,17316],{"class":151,"line":352},[149,17313,16965],{"class":155},[149,17315,166],{"class":325},[149,17317,17318],{"class":155}," name;\n",[149,17320,17321],{"class":151,"line":1021},[149,17322,3906],{"class":155},[149,17324,17325,17328,17331],{"class":151,"line":1035},[149,17326,17327],{"class":162},"    string",[149,17329,17330],{"class":162}," getName",[149,17332,3695],{"class":155},[149,17334,17335],{"class":151,"line":1054},[149,17336,3749],{"class":155},[149,17338,17339,17341],{"class":151,"line":1072},[149,17340,16464],{"class":325},[149,17342,17343],{"class":155}," m_Name;\n",[149,17345,17346],{"class":151,"line":1090},[149,17347,3906],{"class":155},[149,17349,17350],{"class":151,"line":1633},[149,17351,4119],{"emptyLinePlaceholder":1800},[149,17353,17354],{"class":151,"line":1644},[149,17355,4119],{"emptyLinePlaceholder":1800},[149,17357,17358],{"class":151,"line":3348},[149,17359,17360],{"class":295},"    \u002F\u002F获取年龄 \n",[149,17362,17363,17365,17368],{"class":151,"line":3362},[149,17364,3704],{"class":325},[149,17366,17367],{"class":162}," getAge",[149,17369,12567],{"class":155},[149,17371,17372,17374],{"class":151,"line":3367},[149,17373,16464],{"class":325},[149,17375,17376],{"class":155}," m_Age;\n",[149,17378,17379],{"class":151,"line":3373},[149,17380,3906],{"class":155},[149,17382,17383],{"class":151,"line":3394},[149,17384,17385],{"class":295},"    \u002F\u002F设置年龄\n",[149,17387,17388,17390,17393,17395,17397,17400],{"class":151,"line":3399},[149,17389,16621],{"class":325},[149,17391,17392],{"class":162}," setAge",[149,17394,319],{"class":155},[149,17396,1875],{"class":325},[149,17398,17399],{"class":6932}," age",[149,17401,14155],{"class":155},[149,17403,17404,17406,17409,17411,17413,17415,17418,17420,17423],{"class":151,"line":3413},[149,17405,4216],{"class":325},[149,17407,17408],{"class":155}," (age ",[149,17410,156],{"class":325},[149,17412,5811],{"class":309},[149,17414,4973],{"class":325},[149,17416,17417],{"class":155}," age ",[149,17419,2819],{"class":325},[149,17421,17422],{"class":309}," 150",[149,17424,14155],{"class":155},[149,17426,17427,17429,17431,17434,17436],{"class":151,"line":3418},[149,17428,11433],{"class":155},[149,17430,2902],{"class":325},[149,17432,17433],{"class":169}," \"你个老妖精!\"",[149,17435,3169],{"class":325},[149,17437,10555],{"class":155},[149,17439,17440,17443],{"class":151,"line":3447},[149,17441,17442],{"class":325},"            return",[149,17444,841],{"class":155},[149,17446,17447],{"class":151,"line":3452},[149,17448,4248],{"class":155},[149,17450,17451,17454,17456],{"class":151,"line":3469},[149,17452,17453],{"class":155},"        m_Age ",[149,17455,166],{"class":325},[149,17457,9512],{"class":155},[149,17459,17460],{"class":151,"line":3474},[149,17461,3906],{"class":155},[149,17463,17464],{"class":151,"line":3479},[149,17465,4119],{"emptyLinePlaceholder":1800},[149,17467,17468],{"class":151,"line":3484},[149,17469,17470],{"class":295},"    \u002F\u002F情人设置为只写\n",[149,17472,17473,17475,17478,17480,17482,17485],{"class":151,"line":3498},[149,17474,16621],{"class":325},[149,17476,17477],{"class":162}," setLover",[149,17479,319],{"class":155},[149,17481,16629],{"class":162},[149,17483,17484],{"class":6932}," lover",[149,17486,14155],{"class":155},[149,17488,17489,17492,17494],{"class":151,"line":3503},[149,17490,17491],{"class":155},"        m_Lover ",[149,17493,166],{"class":325},[149,17495,17496],{"class":155}," lover;\n",[149,17498,17499],{"class":151,"line":4296},[149,17500,3906],{"class":155},[149,17502,17503],{"class":151,"line":4310},[149,17504,4119],{"emptyLinePlaceholder":1800},[149,17506,17507],{"class":151,"line":4318},[149,17508,16933],{"class":325},[149,17510,17511,17514],{"class":151,"line":4323},[149,17512,17513],{"class":155},"    string m_Name;",[149,17515,17516],{"class":295}," \u002F\u002F可读可写  姓名\n",[149,17518,17519],{"class":151,"line":4329},[149,17520,14923],{"class":155},[149,17522,17523,17525,17528],{"class":151,"line":4335},[149,17524,3704],{"class":325},[149,17526,17527],{"class":155}," m_Age;",[149,17529,17530],{"class":295}," \u002F\u002F只读  年龄\n",[149,17532,17533],{"class":151,"line":4340},[149,17534,4119],{"emptyLinePlaceholder":1800},[149,17536,17537,17540],{"class":151,"line":9663},[149,17538,17539],{"class":155},"    string m_Lover;",[149,17541,17542],{"class":295}," \u002F\u002F只写  情人\n",[149,17544,17545],{"class":151,"line":9687},[149,17546,5713],{"class":155},[149,17548,17549],{"class":151,"line":9692},[149,17550,4119],{"emptyLinePlaceholder":1800},[149,17552,17553,17555,17557],{"class":151,"line":9698},[149,17554,1875],{"class":325},[149,17556,3692],{"class":162},[149,17558,12567],{"class":155},[149,17560,17561],{"class":151,"line":9725},[149,17562,4119],{"emptyLinePlaceholder":1800},[149,17564,17565],{"class":151,"line":9730},[149,17566,17024],{"class":155},[149,17568,17569],{"class":151,"line":9736},[149,17570,17571],{"class":295},"    \u002F\u002F姓名设置\n",[149,17573,17574,17577,17579,17581,17583],{"class":151,"line":9748},[149,17575,17576],{"class":155},"    p.",[149,17578,16777],{"class":162},[149,17580,319],{"class":155},[149,17582,9631],{"class":169},[149,17584,337],{"class":155},[149,17586,17587,17589,17591,17594,17596,17599,17602,17604,17606],{"class":151,"line":9760},[149,17588,8245],{"class":155},[149,17590,2902],{"class":325},[149,17592,17593],{"class":169}," \"姓名： \"",[149,17595,3169],{"class":325},[149,17597,17598],{"class":155}," p.",[149,17600,17601],{"class":162},"getName",[149,17603,14763],{"class":155},[149,17605,2902],{"class":325},[149,17607,10555],{"class":155},[149,17609,17610],{"class":151,"line":9772},[149,17611,4119],{"emptyLinePlaceholder":1800},[149,17613,17614],{"class":151,"line":11430},[149,17615,17616],{"class":295},"    \u002F\u002F年龄设置\n",[149,17618,17619,17621,17624,17626,17628],{"class":151,"line":11455},[149,17620,17576],{"class":155},[149,17622,17623],{"class":162},"setAge",[149,17625,319],{"class":155},[149,17627,332],{"class":309},[149,17629,337],{"class":155},[149,17631,17632,17634,17636,17639,17641,17643,17646,17648,17650],{"class":151,"line":11478},[149,17633,8245],{"class":155},[149,17635,2902],{"class":325},[149,17637,17638],{"class":169}," \"年龄： \"",[149,17640,3169],{"class":325},[149,17642,17598],{"class":155},[149,17644,17645],{"class":162},"getAge",[149,17647,14763],{"class":155},[149,17649,2902],{"class":325},[149,17651,10555],{"class":155},[149,17653,17654],{"class":151,"line":11502},[149,17655,4119],{"emptyLinePlaceholder":1800},[149,17657,17658],{"class":151,"line":11507},[149,17659,17660],{"class":295},"    \u002F\u002F情人设置\n",[149,17662,17663,17665,17668,17670,17673],{"class":151,"line":11512},[149,17664,17576],{"class":155},[149,17666,17667],{"class":162},"setLover",[149,17669,319],{"class":155},[149,17671,17672],{"class":169},"\"苍井\"",[149,17674,337],{"class":155},[149,17676,17677,17680],{"class":151,"line":11517},[149,17678,17679],{"class":295},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[149,17681,17682],{"class":295},"  \u002F\u002F只写属性，不可以读取\n",[149,17684,17685],{"class":151,"line":11526},[149,17686,4119],{"emptyLinePlaceholder":1800},[149,17688,17689,17691,17693,17695],{"class":151,"line":11531},[149,17690,4022],{"class":162},[149,17692,319],{"class":155},[149,17694,4027],{"class":169},[149,17696,337],{"class":155},[149,17698,17699],{"class":151,"line":11537},[149,17700,4119],{"emptyLinePlaceholder":1800},[149,17702,17703,17705,17707],{"class":151,"line":11558},[149,17704,5808],{"class":325},[149,17706,5811],{"class":309},[149,17708,841],{"class":155},[149,17710,17711],{"class":151,"line":11564},[149,17712,355],{"class":155},[19,17714,17716],{"id":17715},"_814封装案例","8.1.4封装案例",[125,17718,17719],{},[45,17720,17721,17724],{},[31,17722,17723],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[42,17726,17727,17730],{},[45,17728,17729],{},"求出立方体的面积和体积",[45,17731,17732],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[140,17734,17736],{"className":1861,"code":17735,"language":1863,"meta":145,"style":145},"#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",[48,17737,17738,17744,17754,17761,17765,17769,17774,17804,17808,17818,17828,17838,17842,17851,17855,17891,17895,17904,17908,17924,17928,17933,17942,17946,17953,17957,17966,17970,17977,17981,17990,17994,18001,18005,18010,18027,18031,18077,18081,18090,18094,18098,18102,18111,18115,18119,18124,18128,18134,18140,18146,18150,18154,18159,18181,18185,18239,18243,18251,18255,18260,18265,18278,18285,18301,18312,18318,18341,18347,18370,18384,18404,18410,18421,18444,18466,18471,18477,18491,18504,18509,18523,18528,18534,18539,18553,18558,18563,18577,18589,18594,18607,18612,18617,18622,18635,18640],{"__ignoreMap":145},[149,17739,17740,17742],{"class":151,"line":152},[149,17741,3669],{"class":325},[149,17743,3672],{"class":169},[149,17745,17746,17748,17750,17752],{"class":151,"line":193},[149,17747,3677],{"class":325},[149,17749,3680],{"class":325},[149,17751,3683],{"class":162},[149,17753,841],{"class":155},[149,17755,17756,17758],{"class":151,"line":235},[149,17757,913],{"class":325},[149,17759,17760],{"class":162}," Cube\n",[149,17762,17763],{"class":151,"line":340},[149,17764,3270],{"class":155},[149,17766,17767],{"class":151,"line":346},[149,17768,16428],{"class":325},[149,17770,17771],{"class":151,"line":352},[149,17772,17773],{"class":295},"    \u002F\u002F输入长宽高\n",[149,17775,17776,17778,17781,17783,17785,17788,17790,17792,17795,17797,17799,17802],{"class":151,"line":1021},[149,17777,16621],{"class":325},[149,17779,17780],{"class":162}," setLwh",[149,17782,319],{"class":155},[149,17784,1875],{"class":325},[149,17786,17787],{"class":6932}," l",[149,17789,2241],{"class":155},[149,17791,1875],{"class":325},[149,17793,17794],{"class":6932}," w",[149,17796,2241],{"class":155},[149,17798,1875],{"class":325},[149,17800,17801],{"class":6932}," h",[149,17803,1878],{"class":155},[149,17805,17806],{"class":151,"line":1035},[149,17807,3749],{"class":155},[149,17809,17810,17813,17815],{"class":151,"line":1054},[149,17811,17812],{"class":155},"        m_L",[149,17814,166],{"class":325},[149,17816,17817],{"class":155},"l;\n",[149,17819,17820,17823,17825],{"class":151,"line":1072},[149,17821,17822],{"class":155},"        m_W",[149,17824,166],{"class":325},[149,17826,17827],{"class":155},"w;\n",[149,17829,17830,17833,17835],{"class":151,"line":1090},[149,17831,17832],{"class":155},"        m_H",[149,17834,166],{"class":325},[149,17836,17837],{"class":155},"h;\n",[149,17839,17840],{"class":151,"line":1633},[149,17841,3906],{"class":155},[149,17843,17844,17846,17849],{"class":151,"line":1644},[149,17845,3704],{"class":325},[149,17847,17848],{"class":162}," mianji",[149,17850,3695],{"class":155},[149,17852,17853],{"class":151,"line":3348},[149,17854,3749],{"class":155},[149,17856,17857,17859,17861,17863,17866,17868,17871,17873,17876,17878,17881,17883,17886,17888],{"class":151,"line":3362},[149,17858,16464],{"class":325},[149,17860,16467],{"class":309},[149,17862,2318],{"class":325},[149,17864,17865],{"class":155},"(m_L",[149,17867,2318],{"class":325},[149,17869,17870],{"class":155},"m_W ",[149,17872,2344],{"class":325},[149,17874,17875],{"class":155}," m_L",[149,17877,2318],{"class":325},[149,17879,17880],{"class":155},"m_H ",[149,17882,2344],{"class":325},[149,17884,17885],{"class":155}," m_W",[149,17887,2318],{"class":325},[149,17889,17890],{"class":155},"m_H);\n",[149,17892,17893],{"class":151,"line":3367},[149,17894,3906],{"class":155},[149,17896,17897,17899,17902],{"class":151,"line":3373},[149,17898,3704],{"class":325},[149,17900,17901],{"class":162}," tiji",[149,17903,3695],{"class":155},[149,17905,17906],{"class":151,"line":3394},[149,17907,3749],{"class":155},[149,17909,17910,17912,17914,17916,17919,17921],{"class":151,"line":3399},[149,17911,16464],{"class":325},[149,17913,17875],{"class":155},[149,17915,2318],{"class":325},[149,17917,17918],{"class":155},"m_W",[149,17920,2318],{"class":325},[149,17922,17923],{"class":155},"m_H;\n",[149,17925,17926],{"class":151,"line":3413},[149,17927,3906],{"class":155},[149,17929,17930],{"class":151,"line":3418},[149,17931,17932],{"class":295},"    \u002F\u002F获取长宽高\n",[149,17934,17935,17937,17940],{"class":151,"line":3447},[149,17936,3704],{"class":325},[149,17938,17939],{"class":162}," getLength",[149,17941,3695],{"class":155},[149,17943,17944],{"class":151,"line":3452},[149,17945,3749],{"class":155},[149,17947,17948,17950],{"class":151,"line":3469},[149,17949,16464],{"class":325},[149,17951,17952],{"class":155}," m_L;\n",[149,17954,17955],{"class":151,"line":3474},[149,17956,3906],{"class":155},[149,17958,17959,17961,17964],{"class":151,"line":3479},[149,17960,3704],{"class":325},[149,17962,17963],{"class":162}," getWidth",[149,17965,3695],{"class":155},[149,17967,17968],{"class":151,"line":3484},[149,17969,3749],{"class":155},[149,17971,17972,17974],{"class":151,"line":3498},[149,17973,16464],{"class":325},[149,17975,17976],{"class":155}," m_W;\n",[149,17978,17979],{"class":151,"line":3503},[149,17980,3906],{"class":155},[149,17982,17983,17985,17988],{"class":151,"line":4296},[149,17984,3704],{"class":325},[149,17986,17987],{"class":162}," getHeight",[149,17989,3695],{"class":155},[149,17991,17992],{"class":151,"line":4310},[149,17993,3749],{"class":155},[149,17995,17996,17998],{"class":151,"line":4318},[149,17997,16464],{"class":325},[149,17999,18000],{"class":155}," m_H;\n",[149,18002,18003],{"class":151,"line":4323},[149,18004,3906],{"class":155},[149,18006,18007],{"class":151,"line":4329},[149,18008,18009],{"class":295},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[149,18011,18012,18015,18018,18020,18023,18025],{"class":151,"line":4335},[149,18013,18014],{"class":325},"    bool",[149,18016,18017],{"class":162}," isEqual",[149,18019,319],{"class":155},[149,18021,18022],{"class":162},"Cube",[149,18024,4567],{"class":6932},[149,18026,1878],{"class":155},[149,18028,18029],{"class":151,"line":4340},[149,18030,3749],{"class":155},[149,18032,18033,18035,18038,18041,18043,18045,18048,18050,18053,18056,18058,18060,18063,18065,18067,18070,18072,18074],{"class":151,"line":9663},[149,18034,4216],{"class":325},[149,18036,18037],{"class":155}," (c.",[149,18039,18040],{"class":162},"getLength",[149,18042,14763],{"class":155},[149,18044,4667],{"class":325},[149,18046,18047],{"class":155}," m_L ",[149,18049,3435],{"class":325},[149,18051,18052],{"class":155}," c.",[149,18054,18055],{"class":162},"getWidth",[149,18057,14763],{"class":155},[149,18059,4667],{"class":325},[149,18061,18062],{"class":155}," m_W ",[149,18064,3435],{"class":325},[149,18066,18052],{"class":155},[149,18068,18069],{"class":162},"getHeight",[149,18071,14763],{"class":155},[149,18073,4667],{"class":325},[149,18075,18076],{"class":155}," m_H)\n",[149,18078,18079],{"class":151,"line":9687},[149,18080,4229],{"class":155},[149,18082,18083,18085,18088],{"class":151,"line":9692},[149,18084,17442],{"class":325},[149,18086,18087],{"class":309}," true",[149,18089,841],{"class":155},[149,18091,18092],{"class":151,"line":9698},[149,18093,4248],{"class":155},[149,18095,18096],{"class":151,"line":9725},[149,18097,4289],{"class":325},[149,18099,18100],{"class":151,"line":9730},[149,18101,4229],{"class":155},[149,18103,18104,18106,18109],{"class":151,"line":9736},[149,18105,17442],{"class":325},[149,18107,18108],{"class":309}," false",[149,18110,841],{"class":155},[149,18112,18113],{"class":151,"line":9748},[149,18114,4248],{"class":155},[149,18116,18117],{"class":151,"line":9760},[149,18118,3906],{"class":155},[149,18120,18121],{"class":151,"line":9772},[149,18122,18123],{"class":295},"    \u002F\u002F私有属性\n",[149,18125,18126],{"class":151,"line":11430},[149,18127,16933],{"class":325},[149,18129,18130,18132],{"class":151,"line":11455},[149,18131,3704],{"class":325},[149,18133,17952],{"class":155},[149,18135,18136,18138],{"class":151,"line":11478},[149,18137,3704],{"class":325},[149,18139,17976],{"class":155},[149,18141,18142,18144],{"class":151,"line":11502},[149,18143,3704],{"class":325},[149,18145,18000],{"class":155},[149,18147,18148],{"class":151,"line":11507},[149,18149,4119],{"emptyLinePlaceholder":1800},[149,18151,18152],{"class":151,"line":11512},[149,18153,5713],{"class":155},[149,18155,18156],{"class":151,"line":11517},[149,18157,18158],{"class":295},"\u002F\u002F全局函数判断两个立方体是否相等\n",[149,18160,18161,18163,18165,18167,18169,18172,18174,18176,18179],{"class":151,"line":11526},[149,18162,3079],{"class":325},[149,18164,18017],{"class":162},[149,18166,319],{"class":155},[149,18168,18022],{"class":162},[149,18170,18171],{"class":6932}," c1",[149,18173,2241],{"class":155},[149,18175,18022],{"class":162},[149,18177,18178],{"class":6932}," c2",[149,18180,1878],{"class":155},[149,18182,18183],{"class":151,"line":11531},[149,18184,3270],{"class":155},[149,18186,18187,18189,18192,18194,18196,18198,18201,18203,18206,18208,18210,18212,18214,18216,18218,18220,18222,18224,18226,18228,18230,18232,18234,18236],{"class":151,"line":11537},[149,18188,5808],{"class":325},[149,18190,18191],{"class":155}," (c1.",[149,18193,18040],{"class":162},[149,18195,14763],{"class":155},[149,18197,4667],{"class":325},[149,18199,18200],{"class":155}," c2.",[149,18202,18040],{"class":162},[149,18204,18205],{"class":155},"()) ",[149,18207,3435],{"class":325},[149,18209,18191],{"class":155},[149,18211,18055],{"class":162},[149,18213,14763],{"class":155},[149,18215,4667],{"class":325},[149,18217,18200],{"class":155},[149,18219,18055],{"class":162},[149,18221,18205],{"class":155},[149,18223,3435],{"class":325},[149,18225,18191],{"class":155},[149,18227,18069],{"class":162},[149,18229,14763],{"class":155},[149,18231,4667],{"class":325},[149,18233,18200],{"class":155},[149,18235,18069],{"class":162},[149,18237,18238],{"class":155},"());\n",[149,18240,18241],{"class":151,"line":11558},[149,18242,355],{"class":155},[149,18244,18245,18247,18249],{"class":151,"line":11564},[149,18246,1875],{"class":325},[149,18248,3692],{"class":162},[149,18250,3695],{"class":155},[149,18252,18253],{"class":151,"line":11578},[149,18254,3270],{"class":155},[149,18256,18257],{"class":151,"line":11584},[149,18258,18259],{"class":155},"    Cube c1;\n",[149,18261,18262],{"class":151,"line":11611},[149,18263,18264],{"class":295},"    \u002F\u002F输入立方体的长宽高\n",[149,18266,18267,18269,18271,18274,18276],{"class":151,"line":11620},[149,18268,3275],{"class":155},[149,18270,2902],{"class":325},[149,18272,18273],{"class":169},"\"请输入第一个立方体的长、宽、高：\"",[149,18275,2902],{"class":325},[149,18277,2924],{"class":155},[149,18279,18280,18282],{"class":151,"line":11626},[149,18281,3704],{"class":325},[149,18283,18284],{"class":155}," l,w,h,l1,w1,h1;\n",[149,18286,18287,18289,18291,18293,18295,18297,18299],{"class":151,"line":11634},[149,18288,3731],{"class":155},[149,18290,3154],{"class":325},[149,18292,2381],{"class":155},[149,18294,3154],{"class":325},[149,18296,2656],{"class":155},[149,18298,3154],{"class":325},[149,18300,17837],{"class":155},[149,18302,18303,18306,18309],{"class":151,"line":11639},[149,18304,18305],{"class":155},"    c1.",[149,18307,18308],{"class":162},"setLwh",[149,18310,18311],{"class":155},"(l,w,h);\n",[149,18313,18315],{"class":151,"line":18314},66,[149,18316,18317],{"class":295},"    \u002F\u002F面积\n",[149,18319,18321,18323,18325,18328,18330,18332,18335,18337,18339],{"class":151,"line":18320},67,[149,18322,3275],{"class":155},[149,18324,2902],{"class":325},[149,18326,18327],{"class":169},"\"立方体的表面积为：\"",[149,18329,2902],{"class":325},[149,18331,16542],{"class":155},[149,18333,18334],{"class":162},"mianji",[149,18336,4146],{"class":155},[149,18338,2902],{"class":325},[149,18340,2924],{"class":155},[149,18342,18344],{"class":151,"line":18343},68,[149,18345,18346],{"class":295},"    \u002F\u002F体积\n",[149,18348,18350,18352,18354,18357,18359,18361,18364,18366,18368],{"class":151,"line":18349},69,[149,18351,3275],{"class":155},[149,18353,2902],{"class":325},[149,18355,18356],{"class":169},"\"立方体的体积为：\"",[149,18358,2902],{"class":325},[149,18360,16542],{"class":155},[149,18362,18363],{"class":162},"tiji",[149,18365,4146],{"class":155},[149,18367,2902],{"class":325},[149,18369,2924],{"class":155},[149,18371,18373,18375,18377,18380,18382],{"class":151,"line":18372},70,[149,18374,3275],{"class":155},[149,18376,2902],{"class":325},[149,18378,18379],{"class":169},"\"请输入第二个立方体的长、宽、高：\"",[149,18381,2902],{"class":325},[149,18383,2924],{"class":155},[149,18385,18387,18389,18391,18394,18396,18399,18401],{"class":151,"line":18386},71,[149,18388,3731],{"class":155},[149,18390,3154],{"class":325},[149,18392,18393],{"class":155},"l1",[149,18395,3154],{"class":325},[149,18397,18398],{"class":155},"w1",[149,18400,3154],{"class":325},[149,18402,18403],{"class":155},"h1;\n",[149,18405,18407],{"class":151,"line":18406},72,[149,18408,18409],{"class":155},"    Cube c2;\n",[149,18411,18413,18416,18418],{"class":151,"line":18412},73,[149,18414,18415],{"class":155},"    c2.",[149,18417,18308],{"class":162},[149,18419,18420],{"class":155},"(l1,w1,h1);\n",[149,18422,18424,18426,18428,18431,18433,18436,18438,18440,18442],{"class":151,"line":18423},74,[149,18425,3275],{"class":155},[149,18427,2902],{"class":325},[149,18429,18430],{"class":169},"\"第二个立方体的表面积为：\"",[149,18432,2902],{"class":325},[149,18434,18435],{"class":155},"c2.",[149,18437,18334],{"class":162},[149,18439,4146],{"class":155},[149,18441,2902],{"class":325},[149,18443,2924],{"class":155},[149,18445,18447,18449,18451,18454,18456,18458,18460,18462,18464],{"class":151,"line":18446},75,[149,18448,3275],{"class":155},[149,18450,2902],{"class":325},[149,18452,18453],{"class":169},"\"第二个立方体的体积为：\"",[149,18455,2902],{"class":325},[149,18457,18435],{"class":155},[149,18459,18363],{"class":162},[149,18461,4146],{"class":155},[149,18463,2902],{"class":325},[149,18465,2924],{"class":155},[149,18467,18469],{"class":151,"line":18468},76,[149,18470,4119],{"emptyLinePlaceholder":1800},[149,18472,18474],{"class":151,"line":18473},77,[149,18475,18476],{"class":295},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[149,18478,18480,18482,18484,18487,18489],{"class":151,"line":18479},78,[149,18481,3275],{"class":155},[149,18483,2902],{"class":325},[149,18485,18486],{"class":169},"\"内部函数判断结果：\"",[149,18488,2902],{"class":325},[149,18490,2924],{"class":155},[149,18492,18494,18496,18498,18501],{"class":151,"line":18493},79,[149,18495,4819],{"class":325},[149,18497,18191],{"class":155},[149,18499,18500],{"class":162},"isEqual",[149,18502,18503],{"class":155},"(c2))\n",[149,18505,18507],{"class":151,"line":18506},80,[149,18508,3749],{"class":155},[149,18510,18512,18514,18516,18519,18521],{"class":151,"line":18511},81,[149,18513,5169],{"class":155},[149,18515,2902],{"class":325},[149,18517,18518],{"class":169},"\"两个立方体相等\"",[149,18520,2902],{"class":325},[149,18522,2924],{"class":155},[149,18524,18526],{"class":151,"line":18525},82,[149,18527,3906],{"class":155},[149,18529,18531],{"class":151,"line":18530},83,[149,18532,18533],{"class":325},"    else\n",[149,18535,18537],{"class":151,"line":18536},84,[149,18538,3749],{"class":155},[149,18540,18542,18544,18546,18549,18551],{"class":151,"line":18541},85,[149,18543,5169],{"class":155},[149,18545,2902],{"class":325},[149,18547,18548],{"class":169},"\"两个立方体不相等\"",[149,18550,2902],{"class":325},[149,18552,2924],{"class":155},[149,18554,18556],{"class":151,"line":18555},86,[149,18557,3906],{"class":155},[149,18559,18561],{"class":151,"line":18560},87,[149,18562,4119],{"emptyLinePlaceholder":1800},[149,18564,18566,18568,18570,18573,18575],{"class":151,"line":18565},88,[149,18567,3275],{"class":155},[149,18569,2902],{"class":325},[149,18571,18572],{"class":169},"\"全局函数判断结果：\"",[149,18574,2902],{"class":325},[149,18576,2924],{"class":155},[149,18578,18580,18582,18584,18586],{"class":151,"line":18579},89,[149,18581,4819],{"class":325},[149,18583,3378],{"class":155},[149,18585,18500],{"class":162},[149,18587,18588],{"class":155},"(c1, c2))\n",[149,18590,18592],{"class":151,"line":18591},90,[149,18593,3749],{"class":155},[149,18595,18597,18599,18601,18603,18605],{"class":151,"line":18596},91,[149,18598,5169],{"class":155},[149,18600,2902],{"class":325},[149,18602,18518],{"class":169},[149,18604,2902],{"class":325},[149,18606,2924],{"class":155},[149,18608,18610],{"class":151,"line":18609},92,[149,18611,3906],{"class":155},[149,18613,18615],{"class":151,"line":18614},93,[149,18616,18533],{"class":325},[149,18618,18620],{"class":151,"line":18619},94,[149,18621,3749],{"class":155},[149,18623,18625,18627,18629,18631,18633],{"class":151,"line":18624},95,[149,18626,5169],{"class":155},[149,18628,2902],{"class":325},[149,18630,18548],{"class":169},[149,18632,2902],{"class":325},[149,18634,2924],{"class":155},[149,18636,18638],{"class":151,"line":18637},96,[149,18639,3906],{"class":155},[149,18641,18643],{"class":151,"line":18642},97,[149,18644,355],{"class":155},[125,18646,18647],{"start":193},[45,18648,18649],{},[31,18650,18651],{},"练习案例2：点和圆的关系",[42,18653,18654],{},[45,18655,18656],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[140,18658,18660],{"className":1861,"code":18659,"language":1863,"meta":145,"style":145},"#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",[48,18661,18662,18668,18678,18685,18692,18696,18700,18705,18739,18744,18760,18774,18778,18782,18789,18796,18800,18806,18810,18814,18818,18840,18863,18868,18882,18897,18901,18905,18911,18916,18921,18925,18951,18955,18985,19013,19041,19058,19062,19075,19079,19083,19087,19100,19104,19108,19116,19120,19124,19128,19133,19137,19148,19155,19164,19174,19185,19192,19205,19216,19226,19237,19244,19258,19263,19273,19281],{"__ignoreMap":145},[149,18663,18664,18666],{"class":151,"line":152},[149,18665,3669],{"class":325},[149,18667,3672],{"class":169},[149,18669,18670,18672,18674,18676],{"class":151,"line":193},[149,18671,3677],{"class":325},[149,18673,3680],{"class":325},[149,18675,3683],{"class":162},[149,18677,841],{"class":155},[149,18679,18680,18682],{"class":151,"line":235},[149,18681,3669],{"class":325},[149,18683,18684],{"class":169},"\u003Ccmath>\n",[149,18686,18687,18689],{"class":151,"line":340},[149,18688,913],{"class":325},[149,18690,18691],{"class":162}," Point\n",[149,18693,18694],{"class":151,"line":346},[149,18695,3270],{"class":155},[149,18697,18698],{"class":151,"line":352},[149,18699,16428],{"class":325},[149,18701,18702],{"class":151,"line":1021},[149,18703,18704],{"class":295},"    \u002F\u002F赋值\n",[149,18706,18707,18709,18712,18714,18716,18719,18721,18723,18726,18729,18731,18734,18736],{"class":151,"line":1035},[149,18708,16621],{"class":325},[149,18710,18711],{"class":162}," setPoint",[149,18713,319],{"class":155},[149,18715,15750],{"class":325},[149,18717,18718],{"class":6932}," x",[149,18720,329],{"class":155},[149,18722,15750],{"class":325},[149,18724,18725],{"class":6932}," y",[149,18727,18728],{"class":155},") { m_x ",[149,18730,166],{"class":325},[149,18732,18733],{"class":155}," x; m_y ",[149,18735,166],{"class":325},[149,18737,18738],{"class":155}," y; }\n",[149,18740,18741],{"class":151,"line":1054},[149,18742,18743],{"class":295},"    \u002F\u002F获取坐标\n",[149,18745,18746,18748,18751,18754,18757],{"class":151,"line":1072},[149,18747,16450],{"class":325},[149,18749,18750],{"class":162}," getX",[149,18752,18753],{"class":155},"() { ",[149,18755,18756],{"class":325},"return",[149,18758,18759],{"class":155}," m_x; }\n",[149,18761,18762,18764,18767,18769,18771],{"class":151,"line":1090},[149,18763,16450],{"class":325},[149,18765,18766],{"class":162}," getY",[149,18768,18753],{"class":155},[149,18770,18756],{"class":325},[149,18772,18773],{"class":155}," m_y; }\n",[149,18775,18776],{"class":151,"line":1633},[149,18777,4119],{"emptyLinePlaceholder":1800},[149,18779,18780],{"class":151,"line":1644},[149,18781,16933],{"class":325},[149,18783,18784,18786],{"class":151,"line":3348},[149,18785,16450],{"class":325},[149,18787,18788],{"class":155}," m_x;\n",[149,18790,18791,18793],{"class":151,"line":3362},[149,18792,16450],{"class":325},[149,18794,18795],{"class":155}," m_y;\n",[149,18797,18798],{"class":151,"line":3367},[149,18799,5713],{"class":155},[149,18801,18802,18804],{"class":151,"line":3373},[149,18803,913],{"class":325},[149,18805,16409],{"class":162},[149,18807,18808],{"class":151,"line":3394},[149,18809,3270],{"class":155},[149,18811,18812],{"class":151,"line":3399},[149,18813,16428],{"class":325},[149,18815,18816],{"class":151,"line":3413},[149,18817,18704],{"class":295},[149,18819,18820,18822,18825,18827,18829,18832,18835,18837],{"class":151,"line":3418},[149,18821,16621],{"class":325},[149,18823,18824],{"class":162}," setRadius",[149,18826,319],{"class":155},[149,18828,15750],{"class":325},[149,18830,18831],{"class":6932}," r",[149,18833,18834],{"class":155},") { m_r ",[149,18836,166],{"class":325},[149,18838,18839],{"class":155}," r; }\n",[149,18841,18842,18844,18847,18849,18852,18855,18858,18860],{"class":151,"line":3447},[149,18843,16621],{"class":325},[149,18845,18846],{"class":162}," setCenter",[149,18848,319],{"class":155},[149,18850,18851],{"class":162},"Point",[149,18853,18854],{"class":6932}," center",[149,18856,18857],{"class":155},") { m_center ",[149,18859,166],{"class":325},[149,18861,18862],{"class":155}," center; }\n",[149,18864,18865],{"class":151,"line":3452},[149,18866,18867],{"class":295},"    \u002F\u002F获取属性\n",[149,18869,18870,18872,18875,18877,18879],{"class":151,"line":3469},[149,18871,16450],{"class":325},[149,18873,18874],{"class":162}," getRadius",[149,18876,18753],{"class":155},[149,18878,18756],{"class":325},[149,18880,18881],{"class":155}," m_r; }\n",[149,18883,18884,18887,18890,18892,18894],{"class":151,"line":3474},[149,18885,18886],{"class":162},"    Point",[149,18888,18889],{"class":162}," getCenter",[149,18891,18753],{"class":155},[149,18893,18756],{"class":325},[149,18895,18896],{"class":155}," m_center; }\n",[149,18898,18899],{"class":151,"line":3479},[149,18900,4119],{"emptyLinePlaceholder":1800},[149,18902,18903],{"class":151,"line":3484},[149,18904,16933],{"class":325},[149,18906,18907,18909],{"class":151,"line":3498},[149,18908,16450],{"class":325},[149,18910,16440],{"class":155},[149,18912,18913],{"class":151,"line":3503},[149,18914,18915],{"class":295},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[149,18917,18918],{"class":151,"line":4296},[149,18919,18920],{"class":155},"    Point m_center;\n",[149,18922,18923],{"class":151,"line":4310},[149,18924,5713],{"class":155},[149,18926,18927,18929,18932,18934,18937,18939,18941,18943,18945,18947,18949],{"class":151,"line":4318},[149,18928,7080],{"class":325},[149,18930,18931],{"class":162}," isInCircle",[149,18933,319],{"class":155},[149,18935,18936],{"class":162},"Circle",[149,18938,12298],{"class":325},[149,18940,2152],{"class":6932},[149,18942,2241],{"class":155},[149,18944,18851],{"class":162},[149,18946,12298],{"class":325},[149,18948,24],{"class":6932},[149,18950,1878],{"class":155},[149,18952,18953],{"class":151,"line":4323},[149,18954,3270],{"class":155},[149,18956,18957,18959,18962,18964,18966,18969,18972,18975,18977,18979,18981,18983],{"class":151,"line":4329},[149,18958,16450],{"class":325},[149,18960,18961],{"class":155}," dx ",[149,18963,166],{"class":325},[149,18965,18052],{"class":155},[149,18967,18968],{"class":162},"getCenter",[149,18970,18971],{"class":155},"().",[149,18973,18974],{"class":162},"getX",[149,18976,14763],{"class":155},[149,18978,2395],{"class":325},[149,18980,17598],{"class":155},[149,18982,18974],{"class":162},[149,18984,7352],{"class":155},[149,18986,18987,18989,18992,18994,18996,18998,19000,19003,19005,19007,19009,19011],{"class":151,"line":4335},[149,18988,16450],{"class":325},[149,18990,18991],{"class":155}," dy ",[149,18993,166],{"class":325},[149,18995,18052],{"class":155},[149,18997,18968],{"class":162},[149,18999,18971],{"class":155},[149,19001,19002],{"class":162},"getY",[149,19004,14763],{"class":155},[149,19006,2395],{"class":325},[149,19008,17598],{"class":155},[149,19010,19002],{"class":162},[149,19012,7352],{"class":155},[149,19014,19015,19017,19020,19022,19025,19028,19030,19032,19034,19036,19038],{"class":151,"line":4340},[149,19016,16450],{"class":325},[149,19018,19019],{"class":155}," distance ",[149,19021,166],{"class":325},[149,19023,19024],{"class":162}," sqrt",[149,19026,19027],{"class":155},"(dx ",[149,19029,2318],{"class":325},[149,19031,18961],{"class":155},[149,19033,2344],{"class":325},[149,19035,18991],{"class":155},[149,19037,2318],{"class":325},[149,19039,19040],{"class":155}," dy);\n",[149,19042,19043,19045,19048,19050,19052,19055],{"class":151,"line":9663},[149,19044,4819],{"class":325},[149,19046,19047],{"class":155}," (distance ",[149,19049,156],{"class":325},[149,19051,18052],{"class":155},[149,19053,19054],{"class":162},"getRadius",[149,19056,19057],{"class":155},"())\n",[149,19059,19060],{"class":151,"line":9687},[149,19061,3749],{"class":155},[149,19063,19064,19066,19068,19071,19073],{"class":151,"line":9692},[149,19065,11383],{"class":155},[149,19067,2902],{"class":325},[149,19069,19070],{"class":169}," \"点在圆内\"",[149,19072,3169],{"class":325},[149,19074,10555],{"class":155},[149,19076,19077],{"class":151,"line":9698},[149,19078,3906],{"class":155},[149,19080,19081],{"class":151,"line":9725},[149,19082,18533],{"class":325},[149,19084,19085],{"class":151,"line":9730},[149,19086,3749],{"class":155},[149,19088,19089,19091,19093,19096,19098],{"class":151,"line":9736},[149,19090,11383],{"class":155},[149,19092,2902],{"class":325},[149,19094,19095],{"class":169}," \"点在圆外\"",[149,19097,3169],{"class":325},[149,19099,10555],{"class":155},[149,19101,19102],{"class":151,"line":9748},[149,19103,3906],{"class":155},[149,19105,19106],{"class":151,"line":9760},[149,19107,355],{"class":155},[149,19109,19110,19112,19114],{"class":151,"line":9772},[149,19111,1875],{"class":325},[149,19113,3692],{"class":162},[149,19115,3695],{"class":155},[149,19117,19118],{"class":151,"line":11430},[149,19119,3270],{"class":155},[149,19121,19122],{"class":151,"line":11455},[149,19123,16764],{"class":295},[149,19125,19126],{"class":151,"line":11478},[149,19127,16512],{"class":155},[149,19129,19130],{"class":151,"line":11502},[149,19131,19132],{"class":155},"    Point p1;\n",[149,19134,19135],{"class":151,"line":11507},[149,19136,18704],{"class":295},[149,19138,19139,19141,19143,19146],{"class":151,"line":11512},[149,19140,3275],{"class":155},[149,19142,2902],{"class":325},[149,19144,19145],{"class":169},"\"请输入圆的半径：\"",[149,19147,841],{"class":155},[149,19149,19150,19152],{"class":151,"line":11517},[149,19151,16450],{"class":325},[149,19153,19154],{"class":155}," r;\n",[149,19156,19157,19159,19161],{"class":151,"line":11526},[149,19158,3731],{"class":155},[149,19160,3154],{"class":325},[149,19162,19163],{"class":155},"r;\n",[149,19165,19166,19168,19171],{"class":151,"line":11531},[149,19167,18305],{"class":155},[149,19169,19170],{"class":162},"setRadius",[149,19172,19173],{"class":155},"(r);\n",[149,19175,19176,19178,19180,19183],{"class":151,"line":11537},[149,19177,3275],{"class":155},[149,19179,2902],{"class":325},[149,19181,19182],{"class":169},"\"请输入圆心坐标：\"",[149,19184,841],{"class":155},[149,19186,19187,19189],{"class":151,"line":11558},[149,19188,16450],{"class":325},[149,19190,19191],{"class":155}," x, y;\n",[149,19193,19194,19196,19198,19200,19202],{"class":151,"line":11564},[149,19195,3731],{"class":155},[149,19197,3154],{"class":325},[149,19199,2681],{"class":155},[149,19201,3154],{"class":325},[149,19203,19204],{"class":155},"y;\n",[149,19206,19207,19210,19213],{"class":151,"line":11578},[149,19208,19209],{"class":155},"    p1.",[149,19211,19212],{"class":162},"setPoint",[149,19214,19215],{"class":155},"(x, y);\n",[149,19217,19218,19220,19223],{"class":151,"line":11584},[149,19219,18305],{"class":155},[149,19221,19222],{"class":162},"setCenter",[149,19224,19225],{"class":155},"(p1);\n",[149,19227,19228,19230,19232,19235],{"class":151,"line":11611},[149,19229,3275],{"class":155},[149,19231,2902],{"class":325},[149,19233,19234],{"class":169},"\"请输入测试点坐标：\"",[149,19236,841],{"class":155},[149,19238,19239,19241],{"class":151,"line":11620},[149,19240,16450],{"class":325},[149,19242,19243],{"class":155}," x1, y1;\n",[149,19245,19246,19248,19250,19253,19255],{"class":151,"line":11626},[149,19247,3731],{"class":155},[149,19249,3154],{"class":325},[149,19251,19252],{"class":155},"x1",[149,19254,3154],{"class":325},[149,19256,19257],{"class":155},"y1;\n",[149,19259,19260],{"class":151,"line":11634},[149,19261,19262],{"class":155},"    Point p2;\n",[149,19264,19265,19268,19270],{"class":151,"line":11639},[149,19266,19267],{"class":155},"    p2.",[149,19269,19212],{"class":162},[149,19271,19272],{"class":155},"(x1, y1);\n",[149,19274,19275,19278],{"class":151,"line":18314},[149,19276,19277],{"class":162},"    isInCircle",[149,19279,19280],{"class":155},"(c1, p2);\n",[149,19282,19283],{"class":151,"line":18320},[149,19284,355],{"class":155},[24,19286,19287],{},"在类中可以让另一个类作为本来的成员",[24,19289,19290],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[24,19292,19293],{},"创建point.h",[140,19295,19297],{"className":1861,"code":19296,"language":1863,"meta":145,"style":145},"#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",[48,19298,19299,19310,19316,19326,19332,19336,19341,19345,19349,19369,19373,19381,19389,19393,19397,19403,19409],{"__ignoreMap":145},[149,19300,19301,19304,19307],{"class":151,"line":152},[149,19302,19303],{"class":325},"#pragma",[149,19305,19306],{"class":162}," once",[149,19308,19309],{"class":295}," \u002F\u002F防止头文件重复包含\n",[149,19311,19312,19314],{"class":151,"line":193},[149,19313,3669],{"class":325},[149,19315,3672],{"class":169},[149,19317,19318,19320,19322,19324],{"class":151,"line":235},[149,19319,3677],{"class":325},[149,19321,3680],{"class":325},[149,19323,3683],{"class":162},[149,19325,841],{"class":155},[149,19327,19328,19330],{"class":151,"line":340},[149,19329,913],{"class":325},[149,19331,18691],{"class":162},[149,19333,19334],{"class":151,"line":346},[149,19335,3270],{"class":155},[149,19337,19338],{"class":151,"line":352},[149,19339,19340],{"class":295},"\u002F\u002F做好声明与变量定义就可以\n",[149,19342,19343],{"class":151,"line":1021},[149,19344,16428],{"class":325},[149,19346,19347],{"class":151,"line":1035},[149,19348,18704],{"class":295},[149,19350,19351,19353,19355,19357,19359,19361,19363,19365,19367],{"class":151,"line":1054},[149,19352,16621],{"class":325},[149,19354,18711],{"class":162},[149,19356,319],{"class":155},[149,19358,15750],{"class":325},[149,19360,18718],{"class":6932},[149,19362,329],{"class":155},[149,19364,15750],{"class":325},[149,19366,18725],{"class":6932},[149,19368,337],{"class":155},[149,19370,19371],{"class":151,"line":1072},[149,19372,18743],{"class":295},[149,19374,19375,19377,19379],{"class":151,"line":1090},[149,19376,16450],{"class":325},[149,19378,18750],{"class":162},[149,19380,7352],{"class":155},[149,19382,19383,19385,19387],{"class":151,"line":1633},[149,19384,16450],{"class":325},[149,19386,18766],{"class":162},[149,19388,7352],{"class":155},[149,19390,19391],{"class":151,"line":1644},[149,19392,4119],{"emptyLinePlaceholder":1800},[149,19394,19395],{"class":151,"line":3348},[149,19396,16933],{"class":325},[149,19398,19399,19401],{"class":151,"line":3362},[149,19400,16450],{"class":325},[149,19402,18788],{"class":155},[149,19404,19405,19407],{"class":151,"line":3367},[149,19406,16450],{"class":325},[149,19408,18795],{"class":155},[149,19410,19411],{"class":151,"line":3373},[149,19412,5713],{"class":155},[24,19414,19415],{},"创建point.cpp",[140,19417,19419],{"className":1861,"code":19418,"language":1863,"meta":145,"style":145},"#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",[48,19420,19421,19428,19433,19467,19471,19487],{"__ignoreMap":145},[149,19422,19423,19425],{"class":151,"line":152},[149,19424,3669],{"class":325},[149,19426,19427],{"class":169},"\u003Cpoint.h>\n",[149,19429,19430],{"class":151,"line":193},[149,19431,19432],{"class":295},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[149,19434,19435,19437,19440,19443,19445,19447,19449,19451,19453,19455,19457,19459,19461,19463,19465],{"class":151,"line":235},[149,19436,16621],{"class":325},[149,19438,19439],{"class":162}," Point",[149,19441,19442],{"class":155},"::",[149,19444,19212],{"class":162},[149,19446,319],{"class":155},[149,19448,15750],{"class":325},[149,19450,18718],{"class":6932},[149,19452,329],{"class":155},[149,19454,15750],{"class":325},[149,19456,18725],{"class":6932},[149,19458,18728],{"class":155},[149,19460,166],{"class":325},[149,19462,18733],{"class":155},[149,19464,166],{"class":325},[149,19466,18738],{"class":155},[149,19468,19469],{"class":151,"line":340},[149,19470,18743],{"class":295},[149,19472,19473,19475,19477,19479,19481,19483,19485],{"class":151,"line":346},[149,19474,16450],{"class":325},[149,19476,19439],{"class":162},[149,19478,19442],{"class":155},[149,19480,18974],{"class":162},[149,19482,18753],{"class":155},[149,19484,18756],{"class":325},[149,19486,18759],{"class":155},[149,19488,19489,19491,19493,19495,19497,19499,19501],{"class":151,"line":352},[149,19490,16450],{"class":325},[149,19492,19439],{"class":162},[149,19494,19442],{"class":155},[149,19496,19002],{"class":162},[149,19498,18753],{"class":155},[149,19500,18756],{"class":325},[149,19502,18773],{"class":155},[24,19504,19505],{},"创建circle.h",[140,19507,19509],{"className":1861,"code":19508,"language":1863,"meta":145,"style":145},"#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",[48,19510,19511,19518,19524,19534,19540,19546,19550,19554,19558,19572,19586,19590,19598,19606,19610,19614,19620,19624,19628],{"__ignoreMap":145},[149,19512,19513,19515],{"class":151,"line":152},[149,19514,19303],{"class":325},[149,19516,19517],{"class":162}," once\n",[149,19519,19520,19522],{"class":151,"line":193},[149,19521,3669],{"class":325},[149,19523,3672],{"class":169},[149,19525,19526,19528,19530,19532],{"class":151,"line":235},[149,19527,3677],{"class":325},[149,19529,3680],{"class":325},[149,19531,3683],{"class":162},[149,19533,841],{"class":155},[149,19535,19536,19538],{"class":151,"line":340},[149,19537,3669],{"class":325},[149,19539,19427],{"class":169},[149,19541,19542,19544],{"class":151,"line":346},[149,19543,913],{"class":325},[149,19545,16409],{"class":162},[149,19547,19548],{"class":151,"line":352},[149,19549,3270],{"class":155},[149,19551,19552],{"class":151,"line":1021},[149,19553,16428],{"class":325},[149,19555,19556],{"class":151,"line":1035},[149,19557,18704],{"class":295},[149,19559,19560,19562,19564,19566,19568,19570],{"class":151,"line":1054},[149,19561,16621],{"class":325},[149,19563,18824],{"class":162},[149,19565,319],{"class":155},[149,19567,15750],{"class":325},[149,19569,18831],{"class":6932},[149,19571,337],{"class":155},[149,19573,19574,19576,19578,19580,19582,19584],{"class":151,"line":1072},[149,19575,16621],{"class":325},[149,19577,18846],{"class":162},[149,19579,319],{"class":155},[149,19581,18851],{"class":162},[149,19583,18854],{"class":6932},[149,19585,337],{"class":155},[149,19587,19588],{"class":151,"line":1090},[149,19589,18867],{"class":295},[149,19591,19592,19594,19596],{"class":151,"line":1633},[149,19593,16450],{"class":325},[149,19595,18874],{"class":162},[149,19597,7352],{"class":155},[149,19599,19600,19602,19604],{"class":151,"line":1644},[149,19601,18886],{"class":162},[149,19603,18889],{"class":162},[149,19605,7352],{"class":155},[149,19607,19608],{"class":151,"line":3348},[149,19609,4119],{"emptyLinePlaceholder":1800},[149,19611,19612],{"class":151,"line":3362},[149,19613,16933],{"class":325},[149,19615,19616,19618],{"class":151,"line":3367},[149,19617,16450],{"class":325},[149,19619,16440],{"class":155},[149,19621,19622],{"class":151,"line":3373},[149,19623,18915],{"class":295},[149,19625,19626],{"class":151,"line":3394},[149,19627,18920],{"class":155},[149,19629,19630],{"class":151,"line":3399},[149,19631,5713],{"class":155},[24,19633,19634],{},"创建circle.cpp",[140,19636,19638],{"className":1861,"code":19637,"language":1863,"meta":145,"style":145},"#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",[48,19639,19640,19647,19670,19692,19697,19713],{"__ignoreMap":145},[149,19641,19642,19644],{"class":151,"line":152},[149,19643,3669],{"class":325},[149,19645,19646],{"class":169},"\u003Ccircle.h>\n",[149,19648,19649,19651,19654,19656,19658,19660,19662,19664,19666,19668],{"class":151,"line":193},[149,19650,7080],{"class":325},[149,19652,19653],{"class":162}," Circle",[149,19655,19442],{"class":155},[149,19657,19170],{"class":162},[149,19659,319],{"class":155},[149,19661,15750],{"class":325},[149,19663,18831],{"class":6932},[149,19665,18834],{"class":155},[149,19667,166],{"class":325},[149,19669,18839],{"class":155},[149,19671,19672,19674,19676,19678,19680,19682,19684,19686,19688,19690],{"class":151,"line":235},[149,19673,7080],{"class":325},[149,19675,19653],{"class":162},[149,19677,19442],{"class":155},[149,19679,19222],{"class":162},[149,19681,319],{"class":155},[149,19683,18851],{"class":162},[149,19685,18854],{"class":6932},[149,19687,18857],{"class":155},[149,19689,166],{"class":325},[149,19691,18862],{"class":155},[149,19693,19694],{"class":151,"line":340},[149,19695,19696],{"class":295},"\u002F\u002F获取属性\n",[149,19698,19699,19701,19703,19705,19707,19709,19711],{"class":151,"line":346},[149,19700,15750],{"class":325},[149,19702,19653],{"class":162},[149,19704,19442],{"class":155},[149,19706,19054],{"class":162},[149,19708,18753],{"class":155},[149,19710,18756],{"class":325},[149,19712,18881],{"class":155},[149,19714,19715,19717,19719,19721,19723,19725,19727],{"class":151,"line":352},[149,19716,18851],{"class":162},[149,19718,19653],{"class":162},[149,19720,19442],{"class":155},[149,19722,18968],{"class":162},[149,19724,18753],{"class":155},[149,19726,18756],{"class":325},[149,19728,18896],{"class":155},[24,19730,19731],{},"使用封装的类",[140,19733,19735],{"className":1861,"code":19734,"language":1863,"meta":145,"style":145},"#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",[48,19736,19737,19743,19753,19759,19765,19789,19793,19819,19845,19869,19883,19887,19899,19903,19907,19911,19923,19927,19931,19939,19943,19947,19951,19955,19959,19969,19975,19983,19991,20001,20007,20019,20027,20035,20045,20051,20063,20067,20075,20081],{"__ignoreMap":145},[149,19738,19739,19741],{"class":151,"line":152},[149,19740,3669],{"class":325},[149,19742,3672],{"class":169},[149,19744,19745,19747,19749,19751],{"class":151,"line":193},[149,19746,3677],{"class":325},[149,19748,3680],{"class":325},[149,19750,3683],{"class":162},[149,19752,841],{"class":155},[149,19754,19755,19757],{"class":151,"line":235},[149,19756,3669],{"class":325},[149,19758,19646],{"class":169},[149,19760,19761,19763],{"class":151,"line":340},[149,19762,3669],{"class":325},[149,19764,19427],{"class":169},[149,19766,19767,19769,19771,19773,19775,19777,19779,19781,19783,19785,19787],{"class":151,"line":346},[149,19768,7080],{"class":325},[149,19770,18931],{"class":162},[149,19772,319],{"class":155},[149,19774,18936],{"class":162},[149,19776,12298],{"class":325},[149,19778,2152],{"class":6932},[149,19780,2241],{"class":155},[149,19782,18851],{"class":162},[149,19784,12298],{"class":325},[149,19786,24],{"class":6932},[149,19788,1878],{"class":155},[149,19790,19791],{"class":151,"line":352},[149,19792,3270],{"class":155},[149,19794,19795,19797,19799,19801,19803,19805,19807,19809,19811,19813,19815,19817],{"class":151,"line":1021},[149,19796,16450],{"class":325},[149,19798,18961],{"class":155},[149,19800,166],{"class":325},[149,19802,18052],{"class":155},[149,19804,18968],{"class":162},[149,19806,18971],{"class":155},[149,19808,18974],{"class":162},[149,19810,14763],{"class":155},[149,19812,2395],{"class":325},[149,19814,17598],{"class":155},[149,19816,18974],{"class":162},[149,19818,7352],{"class":155},[149,19820,19821,19823,19825,19827,19829,19831,19833,19835,19837,19839,19841,19843],{"class":151,"line":1035},[149,19822,16450],{"class":325},[149,19824,18991],{"class":155},[149,19826,166],{"class":325},[149,19828,18052],{"class":155},[149,19830,18968],{"class":162},[149,19832,18971],{"class":155},[149,19834,19002],{"class":162},[149,19836,14763],{"class":155},[149,19838,2395],{"class":325},[149,19840,17598],{"class":155},[149,19842,19002],{"class":162},[149,19844,7352],{"class":155},[149,19846,19847,19849,19851,19853,19855,19857,19859,19861,19863,19865,19867],{"class":151,"line":1054},[149,19848,16450],{"class":325},[149,19850,19019],{"class":155},[149,19852,166],{"class":325},[149,19854,19024],{"class":162},[149,19856,19027],{"class":155},[149,19858,2318],{"class":325},[149,19860,18961],{"class":155},[149,19862,2344],{"class":325},[149,19864,18991],{"class":155},[149,19866,2318],{"class":325},[149,19868,19040],{"class":155},[149,19870,19871,19873,19875,19877,19879,19881],{"class":151,"line":1072},[149,19872,4819],{"class":325},[149,19874,19047],{"class":155},[149,19876,156],{"class":325},[149,19878,18052],{"class":155},[149,19880,19054],{"class":162},[149,19882,19057],{"class":155},[149,19884,19885],{"class":151,"line":1090},[149,19886,3749],{"class":155},[149,19888,19889,19891,19893,19895,19897],{"class":151,"line":1633},[149,19890,11383],{"class":155},[149,19892,2902],{"class":325},[149,19894,19070],{"class":169},[149,19896,3169],{"class":325},[149,19898,10555],{"class":155},[149,19900,19901],{"class":151,"line":1644},[149,19902,3906],{"class":155},[149,19904,19905],{"class":151,"line":3348},[149,19906,18533],{"class":325},[149,19908,19909],{"class":151,"line":3362},[149,19910,3749],{"class":155},[149,19912,19913,19915,19917,19919,19921],{"class":151,"line":3367},[149,19914,11383],{"class":155},[149,19916,2902],{"class":325},[149,19918,19095],{"class":169},[149,19920,3169],{"class":325},[149,19922,10555],{"class":155},[149,19924,19925],{"class":151,"line":3373},[149,19926,3906],{"class":155},[149,19928,19929],{"class":151,"line":3394},[149,19930,355],{"class":155},[149,19932,19933,19935,19937],{"class":151,"line":3399},[149,19934,1875],{"class":325},[149,19936,3692],{"class":162},[149,19938,3695],{"class":155},[149,19940,19941],{"class":151,"line":3413},[149,19942,3270],{"class":155},[149,19944,19945],{"class":151,"line":3418},[149,19946,16764],{"class":295},[149,19948,19949],{"class":151,"line":3447},[149,19950,16512],{"class":155},[149,19952,19953],{"class":151,"line":3452},[149,19954,19132],{"class":155},[149,19956,19957],{"class":151,"line":3469},[149,19958,18704],{"class":295},[149,19960,19961,19963,19965,19967],{"class":151,"line":3474},[149,19962,3275],{"class":155},[149,19964,2902],{"class":325},[149,19966,19145],{"class":169},[149,19968,841],{"class":155},[149,19970,19971,19973],{"class":151,"line":3479},[149,19972,16450],{"class":325},[149,19974,19154],{"class":155},[149,19976,19977,19979,19981],{"class":151,"line":3484},[149,19978,3731],{"class":155},[149,19980,3154],{"class":325},[149,19982,19163],{"class":155},[149,19984,19985,19987,19989],{"class":151,"line":3498},[149,19986,18305],{"class":155},[149,19988,19170],{"class":162},[149,19990,19173],{"class":155},[149,19992,19993,19995,19997,19999],{"class":151,"line":3503},[149,19994,3275],{"class":155},[149,19996,2902],{"class":325},[149,19998,19182],{"class":169},[149,20000,841],{"class":155},[149,20002,20003,20005],{"class":151,"line":4296},[149,20004,16450],{"class":325},[149,20006,19191],{"class":155},[149,20008,20009,20011,20013,20015,20017],{"class":151,"line":4310},[149,20010,3731],{"class":155},[149,20012,3154],{"class":325},[149,20014,2681],{"class":155},[149,20016,3154],{"class":325},[149,20018,19204],{"class":155},[149,20020,20021,20023,20025],{"class":151,"line":4318},[149,20022,19209],{"class":155},[149,20024,19212],{"class":162},[149,20026,19215],{"class":155},[149,20028,20029,20031,20033],{"class":151,"line":4323},[149,20030,18305],{"class":155},[149,20032,19222],{"class":162},[149,20034,19225],{"class":155},[149,20036,20037,20039,20041,20043],{"class":151,"line":4329},[149,20038,3275],{"class":155},[149,20040,2902],{"class":325},[149,20042,19234],{"class":169},[149,20044,841],{"class":155},[149,20046,20047,20049],{"class":151,"line":4335},[149,20048,16450],{"class":325},[149,20050,19243],{"class":155},[149,20052,20053,20055,20057,20059,20061],{"class":151,"line":4340},[149,20054,3731],{"class":155},[149,20056,3154],{"class":325},[149,20058,19252],{"class":155},[149,20060,3154],{"class":325},[149,20062,19257],{"class":155},[149,20064,20065],{"class":151,"line":9663},[149,20066,19262],{"class":155},[149,20068,20069,20071,20073],{"class":151,"line":9687},[149,20070,19267],{"class":155},[149,20072,19212],{"class":162},[149,20074,19272],{"class":155},[149,20076,20077,20079],{"class":151,"line":9692},[149,20078,19277],{"class":162},[149,20080,19280],{"class":155},[149,20082,20083],{"class":151,"line":9698},[149,20084,355],{"class":155},[14,20086,20088],{"id":20087},"_82对象的初始化清理","8.2对象的初始化清理",[42,20090,20091,20094],{},[45,20092,20093],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[45,20095,20096],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[19,20098,20100],{"id":20099},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[24,20102,20103,20104,20107],{},"对象的",[31,20105,20106],{},"初始化和清理","也是两个非常重要的安全问题",[24,20109,20110],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[24,20112,20113],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[24,20115,20116,20117,20120,20121,20124],{},"c++利用了",[31,20118,20119],{},"构造函数","和",[31,20122,20123],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[24,20126,20127,20128],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[31,20129,20130],{},"我们不提供构造和析构，编译器会提供",[24,20132,20133],{},[31,20134,20135],{},"编译器提供的构造函数和析构函数是空实现。",[42,20137,20138,20141],{},[45,20139,20140],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[45,20142,20143,20144,20147],{},"析构函数：主要作用在于对象",[31,20145,20146],{},"销毁前","系统自动调用，执行一些清理工作。",[24,20149,20150,20153],{},[31,20151,20152],{},"构造函数语法：",[48,20154,20155],{},"类名(){}",[125,20157,20158,20161,20164,20167,20170],{},[45,20159,20160],{},"构造函数，没有返回值也不写void",[45,20162,20163],{},"函数名称与类名相同",[45,20165,20166],{},"构造函数可以有参数，因此可以发生重载",[45,20168,20169],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[45,20171,20172,20173,2292],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[48,20174,20175],{},"Person(){}",[24,20177,20178,15508,20181],{},[31,20179,20180],{},"析构函数语法：",[48,20182,20183],{},"~类名(){}",[125,20185,20186,20189,20192,20198],{},[45,20187,20188],{},"析构函数，没有返回值也不写void",[45,20190,20191],{},"函数名称与类名相同,在名称前加上符号  ~",[45,20193,20194,20195],{},"析构函数不可以有参数，因此",[31,20196,20197],{},"不可以发生重载",[45,20199,20200],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[140,20202,20204],{"className":1861,"code":20203,"language":1863,"meta":145,"style":145},"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",[48,20205,20206,20212,20216,20220,20225,20232,20236,20249,20253,20258,20265,20269,20282,20286,20290,20294,20298,20306,20310,20318,20322,20326,20334,20338,20343,20347,20354,20358,20371,20375,20383],{"__ignoreMap":145},[149,20207,20208,20210],{"class":151,"line":152},[149,20209,913],{"class":325},[149,20211,16882],{"class":162},[149,20213,20214],{"class":151,"line":193},[149,20215,3270],{"class":155},[149,20217,20218],{"class":151,"line":235},[149,20219,16428],{"class":325},[149,20221,20222],{"class":151,"line":340},[149,20223,20224],{"class":295},"    \u002F\u002F构造函数\n",[149,20226,20227,20230],{"class":151,"line":346},[149,20228,20229],{"class":162},"    Person",[149,20231,3695],{"class":155},[149,20233,20234],{"class":151,"line":352},[149,20235,3749],{"class":155},[149,20237,20238,20240,20242,20245,20247],{"class":151,"line":1021},[149,20239,11383],{"class":155},[149,20241,2902],{"class":325},[149,20243,20244],{"class":169}," \"Person的构造函数调用\"",[149,20246,3169],{"class":325},[149,20248,10555],{"class":155},[149,20250,20251],{"class":151,"line":1035},[149,20252,3906],{"class":155},[149,20254,20255],{"class":151,"line":1054},[149,20256,20257],{"class":295},"    \u002F\u002F析构函数\n",[149,20259,20260,20263],{"class":151,"line":1072},[149,20261,20262],{"class":162},"    ~Person",[149,20264,3695],{"class":155},[149,20266,20267],{"class":151,"line":1090},[149,20268,3749],{"class":155},[149,20270,20271,20273,20275,20278,20280],{"class":151,"line":1633},[149,20272,11383],{"class":155},[149,20274,2902],{"class":325},[149,20276,20277],{"class":169}," \"Person的析构函数调用\"",[149,20279,3169],{"class":325},[149,20281,10555],{"class":155},[149,20283,20284],{"class":151,"line":1644},[149,20285,3906],{"class":155},[149,20287,20288],{"class":151,"line":3348},[149,20289,4119],{"emptyLinePlaceholder":1800},[149,20291,20292],{"class":151,"line":3362},[149,20293,5713],{"class":155},[149,20295,20296],{"class":151,"line":3367},[149,20297,4119],{"emptyLinePlaceholder":1800},[149,20299,20300,20302,20304],{"class":151,"line":3373},[149,20301,7080],{"class":325},[149,20303,7304],{"class":162},[149,20305,3695],{"class":155},[149,20307,20308],{"class":151,"line":3394},[149,20309,3270],{"class":155},[149,20311,20312,20315],{"class":151,"line":3399},[149,20313,20314],{"class":155},"    Person p;",[149,20316,20317],{"class":295},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[149,20319,20320],{"class":151,"line":3413},[149,20321,355],{"class":155},[149,20323,20324],{"class":151,"line":3418},[149,20325,4119],{"emptyLinePlaceholder":1800},[149,20327,20328,20330,20332],{"class":151,"line":3447},[149,20329,1875],{"class":325},[149,20331,3692],{"class":162},[149,20333,12567],{"class":155},[149,20335,20336],{"class":151,"line":3452},[149,20337,14923],{"class":155},[149,20339,20340],{"class":151,"line":3469},[149,20341,20342],{"class":295},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[149,20344,20345],{"class":151,"line":3474},[149,20346,4119],{"emptyLinePlaceholder":1800},[149,20348,20349,20351],{"class":151,"line":3479},[149,20350,20314],{"class":155},[149,20352,20353],{"class":295},"\u002F\u002F只有构造函数\n",[149,20355,20356],{"class":151,"line":3484},[149,20357,4119],{"emptyLinePlaceholder":1800},[149,20359,20360,20362,20364,20366,20368],{"class":151,"line":3498},[149,20361,4022],{"class":162},[149,20363,319],{"class":155},[149,20365,4027],{"class":169},[149,20367,7682],{"class":155},[149,20369,20370],{"class":295},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[149,20372,20373],{"class":151,"line":3503},[149,20374,4119],{"emptyLinePlaceholder":1800},[149,20376,20377,20379,20381],{"class":151,"line":4296},[149,20378,5808],{"class":325},[149,20380,5811],{"class":309},[149,20382,841],{"class":155},[149,20384,20385],{"class":151,"line":4310},[149,20386,355],{"class":155},[24,20388,20389],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[19,20391,20393],{"id":20392},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[24,20395,20396],{},"两种分类方式：",[24,20398,20399],{},"​\t按参数分为： 有参构造和无参构造",[24,20401,20402],{},"​\t按类型分为： 普通构造和拷贝构造",[24,20404,20405],{},"三种调用方式：",[24,20407,20408],{},"​\t括号法",[24,20410,20411],{},"​\t显示法",[24,20413,20414],{},"​\t隐式转换法",[140,20416,20418],{"className":1861,"code":20417,"language":1863,"meta":145,"style":145},"#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",[48,20419,20420,20426,20436,20441,20446,20451,20456,20460,20468,20472,20476,20480,20486,20490,20503,20507,20519,20523,20532,20545,20549,20553,20559,20563,20576,20580,20585,20601,20605,20610,20619,20632,20636,20642,20646,20651,20659,20663,20668,20672,20680,20684,20689,20694,20699,20704,20709,20713,20718,20723,20728,20733,20737,20742,20747,20763,20775,20780,20784,20789,20794,20799,20803,20808,20822,20835,20839,20847,20851,20857,20863,20871],{"__ignoreMap":145},[149,20421,20422,20424],{"class":151,"line":152},[149,20423,3669],{"class":325},[149,20425,3672],{"class":169},[149,20427,20428,20430,20432,20434],{"class":151,"line":193},[149,20429,3677],{"class":325},[149,20431,3680],{"class":325},[149,20433,3683],{"class":162},[149,20435,841],{"class":155},[149,20437,20438],{"class":151,"line":235},[149,20439,20440],{"class":295},"\u002F\u002F1.构造函数的分类及调用\n",[149,20442,20443],{"class":151,"line":340},[149,20444,20445],{"class":295},"\u002F\u002F分类\n",[149,20447,20448],{"class":151,"line":346},[149,20449,20450],{"class":295},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[149,20452,20453],{"class":151,"line":352},[149,20454,20455],{"class":295},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[149,20457,20458],{"class":151,"line":1021},[149,20459,4119],{"emptyLinePlaceholder":1800},[149,20461,20462,20464,20466],{"class":151,"line":1035},[149,20463,913],{"class":325},[149,20465,17280],{"class":162},[149,20467,4393],{"class":155},[149,20469,20470],{"class":151,"line":1054},[149,20471,3270],{"class":155},[149,20473,20474],{"class":151,"line":1072},[149,20475,16428],{"class":325},[149,20477,20478],{"class":151,"line":1090},[149,20479,20224],{"class":295},[149,20481,20482,20484],{"class":151,"line":1633},[149,20483,20229],{"class":162},[149,20485,3695],{"class":155},[149,20487,20488],{"class":151,"line":1644},[149,20489,3749],{"class":155},[149,20491,20492,20494,20496,20499,20501],{"class":151,"line":3348},[149,20493,5169],{"class":155},[149,20495,2902],{"class":325},[149,20497,20498],{"class":169},"\"Person构造函数无参构造\"",[149,20500,2902],{"class":325},[149,20502,2924],{"class":155},[149,20504,20505],{"class":151,"line":3362},[149,20506,3906],{"class":155},[149,20508,20509,20511,20513,20515,20517],{"class":151,"line":3367},[149,20510,20229],{"class":162},[149,20512,319],{"class":155},[149,20514,1875],{"class":325},[149,20516,3123],{"class":6932},[149,20518,1878],{"class":155},[149,20520,20521],{"class":151,"line":3373},[149,20522,3749],{"class":155},[149,20524,20525,20528,20530],{"class":151,"line":3394},[149,20526,20527],{"class":155},"        age",[149,20529,166],{"class":325},[149,20531,7913],{"class":155},[149,20533,20534,20536,20538,20541,20543],{"class":151,"line":3399},[149,20535,5169],{"class":155},[149,20537,2902],{"class":325},[149,20539,20540],{"class":169},"\"Person构造函数有参构造\"",[149,20542,2902],{"class":325},[149,20544,2924],{"class":155},[149,20546,20547],{"class":151,"line":3413},[149,20548,3906],{"class":155},[149,20550,20551],{"class":151,"line":3418},[149,20552,20257],{"class":295},[149,20554,20555,20557],{"class":151,"line":3447},[149,20556,20262],{"class":162},[149,20558,3695],{"class":155},[149,20560,20561],{"class":151,"line":3452},[149,20562,3749],{"class":155},[149,20564,20565,20567,20569,20572,20574],{"class":151,"line":3469},[149,20566,5169],{"class":155},[149,20568,2902],{"class":325},[149,20570,20571],{"class":169},"\"Person析构函数被调用\"",[149,20573,2902],{"class":325},[149,20575,2924],{"class":155},[149,20577,20578],{"class":151,"line":3474},[149,20579,3906],{"class":155},[149,20581,20582],{"class":151,"line":3479},[149,20583,20584],{"class":295},"    \u002F\u002F拷贝构造函数\n",[149,20586,20587,20589,20591,20593,20595,20597,20599],{"class":151,"line":3484},[149,20588,20229],{"class":162},[149,20590,319],{"class":155},[149,20592,8508],{"class":325},[149,20594,17280],{"class":162},[149,20596,12298],{"class":325},[149,20598,24],{"class":6932},[149,20600,1878],{"class":155},[149,20602,20603],{"class":151,"line":3498},[149,20604,3749],{"class":155},[149,20606,20607],{"class":151,"line":3503},[149,20608,20609],{"class":295},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[149,20611,20612,20614,20616],{"class":151,"line":4296},[149,20613,20527],{"class":155},[149,20615,166],{"class":325},[149,20617,20618],{"class":155},"p.age;\n",[149,20620,20621,20623,20625,20628,20630],{"class":151,"line":4310},[149,20622,5169],{"class":155},[149,20624,2902],{"class":325},[149,20626,20627],{"class":169},"\"Person拷贝构造函数被调用\"",[149,20629,2902],{"class":325},[149,20631,2924],{"class":155},[149,20633,20634],{"class":151,"line":4318},[149,20635,3906],{"class":155},[149,20637,20638,20640],{"class":151,"line":4323},[149,20639,3704],{"class":325},[149,20641,9512],{"class":155},[149,20643,20644],{"class":151,"line":4329},[149,20645,5713],{"class":155},[149,20647,20648],{"class":151,"line":4335},[149,20649,20650],{"class":295},"\u002F\u002F调用\n",[149,20652,20653,20655,20657],{"class":151,"line":4340},[149,20654,7080],{"class":325},[149,20656,7304],{"class":162},[149,20658,3695],{"class":155},[149,20660,20661],{"class":151,"line":9663},[149,20662,3270],{"class":155},[149,20664,20665],{"class":151,"line":9687},[149,20666,20667],{"class":295},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[149,20669,20670],{"class":151,"line":9692},[149,20671,355],{"class":155},[149,20673,20674,20676,20678],{"class":151,"line":9698},[149,20675,7080],{"class":325},[149,20677,7373],{"class":162},[149,20679,3695],{"class":155},[149,20681,20682],{"class":151,"line":9725},[149,20683,3270],{"class":155},[149,20685,20686],{"class":151,"line":9730},[149,20687,20688],{"class":295},"    \u002F\u002F1.括号法\n",[149,20690,20691],{"class":151,"line":9736},[149,20692,20693],{"class":295},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[149,20695,20696],{"class":151,"line":9748},[149,20697,20698],{"class":295},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[149,20700,20701],{"class":151,"line":9760},[149,20702,20703],{"class":295},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[149,20705,20706],{"class":151,"line":9772},[149,20707,20708],{"class":295},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[149,20710,20711],{"class":151,"line":11430},[149,20712,4119],{"emptyLinePlaceholder":1800},[149,20714,20715],{"class":151,"line":11455},[149,20716,20717],{"class":295},"    \u002F\u002F注意事项\n",[149,20719,20720],{"class":151,"line":11478},[149,20721,20722],{"class":295},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[149,20724,20725],{"class":151,"line":11502},[149,20726,20727],{"class":295},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[149,20729,20730],{"class":151,"line":11507},[149,20731,20732],{"class":295},"    \u002F\u002F Person p4();\n",[149,20734,20735],{"class":151,"line":11512},[149,20736,4119],{"emptyLinePlaceholder":1800},[149,20738,20739],{"class":151,"line":11517},[149,20740,20741],{"class":295},"    \u002F\u002F2.显示法\n",[149,20743,20744],{"class":151,"line":11526},[149,20745,20746],{"class":155},"    Person p1;\n",[149,20748,20749,20752,20754,20757,20759,20761],{"class":151,"line":11531},[149,20750,20751],{"class":155},"    Person p2",[149,20753,166],{"class":325},[149,20755,20756],{"class":162},"Person",[149,20758,319],{"class":155},[149,20760,2309],{"class":309},[149,20762,337],{"class":155},[149,20764,20765,20768,20770,20772],{"class":151,"line":11537},[149,20766,20767],{"class":155},"    Person p3",[149,20769,166],{"class":325},[149,20771,20756],{"class":162},[149,20773,20774],{"class":155},"(p2);\n",[149,20776,20777],{"class":151,"line":11558},[149,20778,20779],{"class":295},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[149,20781,20782],{"class":151,"line":11564},[149,20783,4119],{"emptyLinePlaceholder":1800},[149,20785,20786],{"class":151,"line":11578},[149,20787,20788],{"class":295},"    \u002F\u002F 注意事项2\n",[149,20790,20791],{"class":151,"line":11584},[149,20792,20793],{"class":295},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[149,20795,20796],{"class":151,"line":11611},[149,20797,20798],{"class":295},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[149,20800,20801],{"class":151,"line":11620},[149,20802,4119],{"emptyLinePlaceholder":1800},[149,20804,20805],{"class":151,"line":11626},[149,20806,20807],{"class":295},"    \u002F\u002F3.隐士转换法\n",[149,20809,20810,20813,20815,20817,20819],{"class":151,"line":11634},[149,20811,20812],{"class":155},"    Person p4",[149,20814,166],{"class":325},[149,20816,2309],{"class":309},[149,20818,1924],{"class":155},[149,20820,20821],{"class":295},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[149,20823,20824,20827,20829,20832],{"class":151,"line":11639},[149,20825,20826],{"class":155},"    Person p5",[149,20828,166],{"class":325},[149,20830,20831],{"class":155},"p4;",[149,20833,20834],{"class":295}," \u002F\u002F 这里会调用拷贝构造函数\n",[149,20836,20837],{"class":151,"line":18314},[149,20838,355],{"class":155},[149,20840,20841,20843,20845],{"class":151,"line":18320},[149,20842,1875],{"class":325},[149,20844,3692],{"class":162},[149,20846,3695],{"class":155},[149,20848,20849],{"class":151,"line":18343},[149,20850,3270],{"class":155},[149,20852,20853,20855],{"class":151,"line":18349},[149,20854,7349],{"class":162},[149,20856,7352],{"class":155},[149,20858,20859,20861],{"class":151,"line":18372},[149,20860,7418],{"class":162},[149,20862,7352],{"class":155},[149,20864,20865,20867,20869],{"class":151,"line":18386},[149,20866,5808],{"class":325},[149,20868,5811],{"class":309},[149,20870,841],{"class":155},[149,20872,20873],{"class":151,"line":18406},[149,20874,355],{"class":155},[24,20876,20877,20880],{},[31,20878,20879],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[19,20882,20884],{"id":20883},"_823拷贝构造函数","8.2.3拷贝构造函数",[24,20886,20887],{},"C++中拷贝构造函数调用时机通常有三种情况",[42,20889,20890,20893,20896],{},[45,20891,20892],{},"使用一个已经创建完毕的对象来初始化一个新对象",[45,20894,20895],{},"值传递的方式给函数参数传值",[45,20897,20898],{},"以值方式返回局部对象",[140,20900,20902],{"className":1861,"code":20901,"language":1863,"meta":145,"style":145},"#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",[48,20903,20904,20910,20920,20924,20929,20933,20938,20943,20948,20954,20958,20962,20968,20972,20985,20989,20994,21006,21010,21018,21031,21035,21039,21055,21059,21068,21081,21085,21091,21095,21107,21111,21117,21121,21125,21133,21137,21150,21158,21176,21180,21185,21190,21205,21209,21222,21226,21234,21238,21242,21250,21254,21259,21268,21272,21276,21301,21311,21315,21323,21327,21338,21363,21367,21371,21375,21383,21387,21392,21397,21404,21409,21414,21419,21424,21428,21433,21437,21442,21446,21451,21456,21460,21464,21469,21474,21482],{"__ignoreMap":145},[149,20905,20906,20908],{"class":151,"line":152},[149,20907,3669],{"class":325},[149,20909,3672],{"class":169},[149,20911,20912,20914,20916,20918],{"class":151,"line":193},[149,20913,3677],{"class":325},[149,20915,3680],{"class":325},[149,20917,3683],{"class":162},[149,20919,841],{"class":155},[149,20921,20922],{"class":151,"line":235},[149,20923,4119],{"emptyLinePlaceholder":1800},[149,20925,20926],{"class":151,"line":340},[149,20927,20928],{"class":295},"\u002F\u002F拷贝构造函数调用时机\n",[149,20930,20931],{"class":151,"line":346},[149,20932,4119],{"emptyLinePlaceholder":1800},[149,20934,20935],{"class":151,"line":352},[149,20936,20937],{"class":295},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[149,20939,20940],{"class":151,"line":1021},[149,20941,20942],{"class":295},"\u002F\u002F2.值传递的方式给函数参数传值\n",[149,20944,20945],{"class":151,"line":1035},[149,20946,20947],{"class":295},"\u002F\u002F3.以值方式返回局部对象\n",[149,20949,20950,20952],{"class":151,"line":1054},[149,20951,913],{"class":325},[149,20953,16882],{"class":162},[149,20955,20956],{"class":151,"line":1072},[149,20957,3270],{"class":155},[149,20959,20960],{"class":151,"line":1090},[149,20961,16428],{"class":325},[149,20963,20964,20966],{"class":151,"line":1633},[149,20965,20229],{"class":162},[149,20967,3695],{"class":155},[149,20969,20970],{"class":151,"line":1644},[149,20971,3749],{"class":155},[149,20973,20974,20976,20978,20981,20983],{"class":151,"line":3348},[149,20975,11383],{"class":155},[149,20977,2902],{"class":325},[149,20979,20980],{"class":169}," \"Person的默认构造函数调用\"",[149,20982,3169],{"class":325},[149,20984,10555],{"class":155},[149,20986,20987],{"class":151,"line":3362},[149,20988,3906],{"class":155},[149,20990,20991],{"class":151,"line":3367},[149,20992,20993],{"class":295},"    \u002F\u002F有参构造\n",[149,20995,20996,20998,21000,21002,21004],{"class":151,"line":3373},[149,20997,20229],{"class":162},[149,20999,319],{"class":155},[149,21001,1875],{"class":325},[149,21003,17399],{"class":6932},[149,21005,1878],{"class":155},[149,21007,21008],{"class":151,"line":3394},[149,21009,3749],{"class":155},[149,21011,21012,21014,21016],{"class":151,"line":3399},[149,21013,17453],{"class":155},[149,21015,166],{"class":325},[149,21017,9512],{"class":155},[149,21019,21020,21022,21024,21027,21029],{"class":151,"line":3413},[149,21021,11383],{"class":155},[149,21023,2902],{"class":325},[149,21025,21026],{"class":169}," \"Person的有参构造函数调用\"",[149,21028,3169],{"class":325},[149,21030,10555],{"class":155},[149,21032,21033],{"class":151,"line":3418},[149,21034,3906],{"class":155},[149,21036,21037],{"class":151,"line":3447},[149,21038,20584],{"class":295},[149,21040,21041,21043,21045,21047,21049,21051,21053],{"class":151,"line":3452},[149,21042,20229],{"class":162},[149,21044,319],{"class":155},[149,21046,8508],{"class":325},[149,21048,17280],{"class":162},[149,21050,12298],{"class":325},[149,21052,24],{"class":6932},[149,21054,1878],{"class":155},[149,21056,21057],{"class":151,"line":3469},[149,21058,3749],{"class":155},[149,21060,21061,21063,21065],{"class":151,"line":3474},[149,21062,17453],{"class":155},[149,21064,166],{"class":325},[149,21066,21067],{"class":155}," p.m_Age;\n",[149,21069,21070,21072,21074,21077,21079],{"class":151,"line":3479},[149,21071,11383],{"class":155},[149,21073,2902],{"class":325},[149,21075,21076],{"class":169}," \"Person的拷贝构造函数调用\"",[149,21078,3169],{"class":325},[149,21080,10555],{"class":155},[149,21082,21083],{"class":151,"line":3484},[149,21084,3906],{"class":155},[149,21086,21087,21089],{"class":151,"line":3498},[149,21088,20262],{"class":162},[149,21090,3695],{"class":155},[149,21092,21093],{"class":151,"line":3503},[149,21094,3749],{"class":155},[149,21096,21097,21099,21101,21103,21105],{"class":151,"line":4296},[149,21098,11383],{"class":155},[149,21100,2902],{"class":325},[149,21102,20277],{"class":169},[149,21104,3169],{"class":325},[149,21106,10555],{"class":155},[149,21108,21109],{"class":151,"line":4310},[149,21110,3906],{"class":155},[149,21112,21113,21115],{"class":151,"line":4318},[149,21114,3704],{"class":325},[149,21116,17376],{"class":155},[149,21118,21119],{"class":151,"line":4323},[149,21120,5713],{"class":155},[149,21122,21123],{"class":151,"line":4329},[149,21124,20937],{"class":295},[149,21126,21127,21129,21131],{"class":151,"line":4335},[149,21128,7080],{"class":325},[149,21130,7304],{"class":162},[149,21132,3695],{"class":155},[149,21134,21135],{"class":151,"line":4340},[149,21136,3270],{"class":155},[149,21138,21139,21142,21144,21146,21148],{"class":151,"line":9663},[149,21140,21141],{"class":155},"    Person ",[149,21143,8846],{"class":162},[149,21145,319],{"class":155},[149,21147,2561],{"class":309},[149,21149,337],{"class":155},[149,21151,21152,21154,21156],{"class":151,"line":9687},[149,21153,21141],{"class":155},[149,21155,8749],{"class":162},[149,21157,19225],{"class":155},[149,21159,21160,21162,21164,21167,21169,21172,21174],{"class":151,"line":9692},[149,21161,3275],{"class":155},[149,21163,2902],{"class":325},[149,21165,21166],{"class":169},"\"P2的年龄为：\"",[149,21168,2902],{"class":325},[149,21170,21171],{"class":155},"p2.m_Age",[149,21173,2902],{"class":325},[149,21175,2924],{"class":155},[149,21177,21178],{"class":151,"line":9698},[149,21179,355],{"class":155},[149,21181,21182],{"class":151,"line":9725},[149,21183,21184],{"class":295},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[149,21186,21187],{"class":151,"line":9730},[149,21188,21189],{"class":295},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[149,21191,21192,21194,21197,21199,21201,21203],{"class":151,"line":9736},[149,21193,7080],{"class":325},[149,21195,21196],{"class":162}," doWork",[149,21198,319],{"class":155},[149,21200,20756],{"class":162},[149,21202,8541],{"class":6932},[149,21204,1878],{"class":155},[149,21206,21207],{"class":151,"line":9748},[149,21208,3270],{"class":155},[149,21210,21211,21213,21215,21218,21220],{"class":151,"line":9760},[149,21212,8245],{"class":155},[149,21214,2902],{"class":325},[149,21216,21217],{"class":169}," \"doWork函数调用\"",[149,21219,3169],{"class":325},[149,21221,10555],{"class":155},[149,21223,21224],{"class":151,"line":9772},[149,21225,355],{"class":155},[149,21227,21228,21230,21232],{"class":151,"line":11430},[149,21229,7080],{"class":325},[149,21231,7373],{"class":162},[149,21233,3695],{"class":155},[149,21235,21236],{"class":151,"line":11455},[149,21237,3270],{"class":155},[149,21239,21240],{"class":151,"line":11478},[149,21241,17024],{"class":155},[149,21243,21244,21247],{"class":151,"line":11502},[149,21245,21246],{"class":162},"    doWork",[149,21248,21249],{"class":155},"(p);\n",[149,21251,21252],{"class":151,"line":11507},[149,21253,355],{"class":155},[149,21255,21256],{"class":151,"line":11512},[149,21257,21258],{"class":295},"\u002F\u002F 3.以值方式返回局部对象\n",[149,21260,21261,21263,21266],{"class":151,"line":11517},[149,21262,20756],{"class":162},[149,21264,21265],{"class":162}," doWork2",[149,21267,3695],{"class":155},[149,21269,21270],{"class":151,"line":11526},[149,21271,3270],{"class":155},[149,21273,21274],{"class":151,"line":11531},[149,21275,20746],{"class":155},[149,21277,21278,21280,21282,21284,21286,21288,21290,21292,21294,21296,21298],{"class":151,"line":11537},[149,21279,3275],{"class":155},[149,21281,2902],{"class":325},[149,21283,319],{"class":155},[149,21285,1875],{"class":325},[149,21287,8234],{"class":325},[149,21289,2292],{"class":155},[149,21291,2216],{"class":325},[149,21293,8846],{"class":155},[149,21295,2902],{"class":325},[149,21297,2967],{"class":155},[149,21299,21300],{"class":295},"\u002F\u002F打印p1的地址\n",[149,21302,21303,21305,21308],{"class":151,"line":11558},[149,21304,5808],{"class":325},[149,21306,21307],{"class":155}," p1;",[149,21309,21310],{"class":295},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[149,21312,21313],{"class":151,"line":11564},[149,21314,355],{"class":155},[149,21316,21317,21319,21321],{"class":151,"line":11578},[149,21318,7080],{"class":325},[149,21320,7445],{"class":162},[149,21322,3695],{"class":155},[149,21324,21325],{"class":151,"line":11584},[149,21326,3270],{"class":155},[149,21328,21329,21332,21334,21336],{"class":151,"line":11611},[149,21330,21331],{"class":155},"    Person p ",[149,21333,166],{"class":325},[149,21335,21265],{"class":162},[149,21337,7352],{"class":155},[149,21339,21340,21342,21344,21346,21348,21350,21352,21354,21356,21358,21360],{"class":151,"line":11620},[149,21341,3275],{"class":155},[149,21343,2902],{"class":325},[149,21345,319],{"class":155},[149,21347,1875],{"class":325},[149,21349,8234],{"class":325},[149,21351,2292],{"class":155},[149,21353,2216],{"class":325},[149,21355,24],{"class":155},[149,21357,2902],{"class":325},[149,21359,2967],{"class":155},[149,21361,21362],{"class":295},"\u002F\u002F打印p的地址\n",[149,21364,21365],{"class":151,"line":11626},[149,21366,355],{"class":155},[149,21368,21369],{"class":151,"line":11634},[149,21370,4119],{"emptyLinePlaceholder":1800},[149,21372,21373],{"class":151,"line":11639},[149,21374,4119],{"emptyLinePlaceholder":1800},[149,21376,21377,21379,21381],{"class":151,"line":18314},[149,21378,1875],{"class":325},[149,21380,3692],{"class":162},[149,21382,3695],{"class":155},[149,21384,21385],{"class":151,"line":18320},[149,21386,3270],{"class":155},[149,21388,21389],{"class":151,"line":18343},[149,21390,21391],{"class":295},"    \u002F\u002F test01();\n",[149,21393,21394],{"class":151,"line":18349},[149,21395,21396],{"class":295},"    \u002F\u002F test02();\n",[149,21398,21399,21402],{"class":151,"line":18372},[149,21400,21401],{"class":162},"    test03",[149,21403,7352],{"class":155},[149,21405,21406],{"class":151,"line":18386},[149,21407,21408],{"class":295},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[149,21410,21411],{"class":151,"line":18406},[149,21412,21413],{"class":295},"\u002F\u002F 输出结果如下：\n",[149,21415,21416],{"class":151,"line":18412},[149,21417,21418],{"class":295},"\u002F\u002F Person的默认构造函数调用\n",[149,21420,21421],{"class":151,"line":18423},[149,21422,21423],{"class":295},"\u002F\u002F 0x7fffffffceec\n",[149,21425,21426],{"class":151,"line":18446},[149,21427,21423],{"class":295},[149,21429,21430],{"class":151,"line":18468},[149,21431,21432],{"class":295},"\u002F\u002F Person的析构函数调用\n",[149,21434,21435],{"class":151,"line":18473},[149,21436,4119],{"emptyLinePlaceholder":1800},[149,21438,21439],{"class":151,"line":18479},[149,21440,21441],{"class":295},"\u002F\u002F 之前的输出结果如下：\n",[149,21443,21444],{"class":151,"line":18493},[149,21445,21418],{"class":295},[149,21447,21448],{"class":151,"line":18506},[149,21449,21450],{"class":295},"\u002F\u002F 地址\n",[149,21452,21453],{"class":151,"line":18511},[149,21454,21455],{"class":295},"\u002F\u002F Person的拷贝构造函数调用\n",[149,21457,21458],{"class":151,"line":18525},[149,21459,21432],{"class":295},[149,21461,21462],{"class":151,"line":18530},[149,21463,21450],{"class":295},[149,21465,21466],{"class":151,"line":18536},[149,21467,21468],{"class":295},"\u002F\u002F (这两次输出的地址也是不同的) \n",[149,21470,21471],{"class":151,"line":18541},[149,21472,21473],{"class":295},"\u002F\u002F Person的析构函数调用     \n",[149,21475,21476,21478,21480],{"class":151,"line":18555},[149,21477,5808],{"class":325},[149,21479,5811],{"class":309},[149,21481,841],{"class":155},[149,21483,21484],{"class":151,"line":18560},[149,21485,355],{"class":155},[24,21487,21488],{},"简化版理解",[140,21490,21492],{"className":1861,"code":21491,"language":1863,"meta":145,"style":145},"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",[48,21493,21494,21502,21506,21512,21525,21536,21540,21552,21565,21573,21577,21593,21606,21615,21619,21624,21630,21643,21647,21651,21658,21662,21666,21671,21679,21683,21699,21712,21725,21729,21734,21742,21746,21750,21755,21760,21776,21784,21791,21797,21801,21805,21810,21818,21822,21826,21849,21856,21860,21864,21872,21876,21886,21908,21912,21916,21920,21928,21932,21937,21942,21948,21952,21962,21966,21974],{"__ignoreMap":145},[149,21495,21496,21498,21500],{"class":151,"line":152},[149,21497,913],{"class":325},[149,21499,17280],{"class":162},[149,21501,304],{"class":155},[149,21503,21504],{"class":151,"line":193},[149,21505,16428],{"class":325},[149,21507,21508,21510],{"class":151,"line":235},[149,21509,20229],{"class":162},[149,21511,12567],{"class":155},[149,21513,21514,21516,21518,21521,21523],{"class":151,"line":340},[149,21515,11383],{"class":155},[149,21517,2902],{"class":325},[149,21519,21520],{"class":169}," \"无参构造函数!\"",[149,21522,3169],{"class":325},[149,21524,10555],{"class":155},[149,21526,21527,21530,21532,21534],{"class":151,"line":346},[149,21528,21529],{"class":155},"        mAge ",[149,21531,166],{"class":325},[149,21533,5811],{"class":309},[149,21535,841],{"class":155},[149,21537,21538],{"class":151,"line":352},[149,21539,3906],{"class":155},[149,21541,21542,21544,21546,21548,21550],{"class":151,"line":1021},[149,21543,20229],{"class":162},[149,21545,319],{"class":155},[149,21547,1875],{"class":325},[149,21549,17399],{"class":6932},[149,21551,14155],{"class":155},[149,21553,21554,21556,21558,21561,21563],{"class":151,"line":1035},[149,21555,11383],{"class":155},[149,21557,2902],{"class":325},[149,21559,21560],{"class":169}," \"有参构造函数!\"",[149,21562,3169],{"class":325},[149,21564,10555],{"class":155},[149,21566,21567,21569,21571],{"class":151,"line":1054},[149,21568,21529],{"class":155},[149,21570,166],{"class":325},[149,21572,9512],{"class":155},[149,21574,21575],{"class":151,"line":1072},[149,21576,3906],{"class":155},[149,21578,21579,21581,21583,21585,21587,21589,21591],{"class":151,"line":1090},[149,21580,20229],{"class":162},[149,21582,319],{"class":155},[149,21584,8508],{"class":325},[149,21586,17280],{"class":162},[149,21588,2216],{"class":325},[149,21590,8541],{"class":6932},[149,21592,14155],{"class":155},[149,21594,21595,21597,21599,21602,21604],{"class":151,"line":1633},[149,21596,11383],{"class":155},[149,21598,2902],{"class":325},[149,21600,21601],{"class":169}," \"拷贝构造函数!\"",[149,21603,3169],{"class":325},[149,21605,10555],{"class":155},[149,21607,21608,21610,21612],{"class":151,"line":1644},[149,21609,21529],{"class":155},[149,21611,166],{"class":325},[149,21613,21614],{"class":155}," p.mAge;\n",[149,21616,21617],{"class":151,"line":3348},[149,21618,3906],{"class":155},[149,21620,21621],{"class":151,"line":3362},[149,21622,21623],{"class":295},"    \u002F\u002F析构函数在释放内存之前调用\n",[149,21625,21626,21628],{"class":151,"line":3367},[149,21627,20262],{"class":162},[149,21629,12567],{"class":155},[149,21631,21632,21634,21636,21639,21641],{"class":151,"line":3373},[149,21633,11383],{"class":155},[149,21635,2902],{"class":325},[149,21637,21638],{"class":169}," \"析构函数!\"",[149,21640,3169],{"class":325},[149,21642,10555],{"class":155},[149,21644,21645],{"class":151,"line":3394},[149,21646,3906],{"class":155},[149,21648,21649],{"class":151,"line":3399},[149,21650,16428],{"class":325},[149,21652,21653,21655],{"class":151,"line":3413},[149,21654,3704],{"class":325},[149,21656,21657],{"class":155}," mAge;\n",[149,21659,21660],{"class":151,"line":3418},[149,21661,5713],{"class":155},[149,21663,21664],{"class":151,"line":3447},[149,21665,4119],{"emptyLinePlaceholder":1800},[149,21667,21668],{"class":151,"line":3452},[149,21669,21670],{"class":295},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[149,21672,21673,21675,21677],{"class":151,"line":3469},[149,21674,7080],{"class":325},[149,21676,7304],{"class":162},[149,21678,12567],{"class":155},[149,21680,21681],{"class":151,"line":3474},[149,21682,4119],{"emptyLinePlaceholder":1800},[149,21684,21685,21687,21690,21692,21694,21696],{"class":151,"line":3479},[149,21686,21141],{"class":155},[149,21688,21689],{"class":162},"man",[149,21691,319],{"class":155},[149,21693,322],{"class":309},[149,21695,7682],{"class":155},[149,21697,21698],{"class":295}," \u002F\u002Fp对象已经创建完毕\n",[149,21700,21701,21703,21706,21709],{"class":151,"line":3484},[149,21702,21141],{"class":155},[149,21704,21705],{"class":162},"newman",[149,21707,21708],{"class":155},"(man);",[149,21710,21711],{"class":295}," \u002F\u002F调用拷贝构造函数\n",[149,21713,21714,21717,21719,21722],{"class":151,"line":3498},[149,21715,21716],{"class":155},"    Person newman2 ",[149,21718,166],{"class":325},[149,21720,21721],{"class":155}," man;",[149,21723,21724],{"class":295}," \u002F\u002F拷贝构造\n",[149,21726,21727],{"class":151,"line":3503},[149,21728,4119],{"emptyLinePlaceholder":1800},[149,21730,21731],{"class":151,"line":4296},[149,21732,21733],{"class":295},"    \u002F\u002FPerson newman3;\n",[149,21735,21736,21739],{"class":151,"line":4310},[149,21737,21738],{"class":295},"    \u002F\u002Fnewman3 = man;",[149,21740,21741],{"class":295}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[149,21743,21744],{"class":151,"line":4318},[149,21745,355],{"class":155},[149,21747,21748],{"class":151,"line":4323},[149,21749,4119],{"emptyLinePlaceholder":1800},[149,21751,21752],{"class":151,"line":4329},[149,21753,21754],{"class":295},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[149,21756,21757],{"class":151,"line":4335},[149,21758,21759],{"class":295},"\u002F\u002F相当于Person p1 = p;\n",[149,21761,21762,21764,21766,21768,21770,21773],{"class":151,"line":4340},[149,21763,7080],{"class":325},[149,21765,21196],{"class":162},[149,21767,319],{"class":155},[149,21769,20756],{"class":162},[149,21771,21772],{"class":6932}," p1",[149,21774,21775],{"class":155},") {}\n",[149,21777,21778,21780,21782],{"class":151,"line":9663},[149,21779,7080],{"class":325},[149,21781,7373],{"class":162},[149,21783,12567],{"class":155},[149,21785,21786,21788],{"class":151,"line":9687},[149,21787,20314],{"class":155},[149,21789,21790],{"class":295}," \u002F\u002F无参构造函数\n",[149,21792,21793,21795],{"class":151,"line":9692},[149,21794,21246],{"class":162},[149,21796,21249],{"class":155},[149,21798,21799],{"class":151,"line":9698},[149,21800,355],{"class":155},[149,21802,21803],{"class":151,"line":9725},[149,21804,4119],{"emptyLinePlaceholder":1800},[149,21806,21807],{"class":151,"line":9730},[149,21808,21809],{"class":295},"\u002F\u002F3. 以值方式返回局部对象\n",[149,21811,21812,21814,21816],{"class":151,"line":9736},[149,21813,20756],{"class":162},[149,21815,21265],{"class":162},[149,21817,3695],{"class":155},[149,21819,21820],{"class":151,"line":9748},[149,21821,3270],{"class":155},[149,21823,21824],{"class":151,"line":9760},[149,21825,20746],{"class":155},[149,21827,21828,21830,21832,21834,21836,21838,21840,21842,21845,21847],{"class":151,"line":9772},[149,21829,8245],{"class":155},[149,21831,2902],{"class":325},[149,21833,3378],{"class":155},[149,21835,1875],{"class":325},[149,21837,8234],{"class":325},[149,21839,2292],{"class":155},[149,21841,2216],{"class":325},[149,21843,21844],{"class":155},"p1 ",[149,21846,2902],{"class":325},[149,21848,10555],{"class":155},[149,21850,21851,21853],{"class":151,"line":11430},[149,21852,5808],{"class":325},[149,21854,21855],{"class":155}," p1;\n",[149,21857,21858],{"class":151,"line":11455},[149,21859,355],{"class":155},[149,21861,21862],{"class":151,"line":11478},[149,21863,4119],{"emptyLinePlaceholder":1800},[149,21865,21866,21868,21870],{"class":151,"line":11502},[149,21867,7080],{"class":325},[149,21869,7445],{"class":162},[149,21871,3695],{"class":155},[149,21873,21874],{"class":151,"line":11507},[149,21875,3270],{"class":155},[149,21877,21878,21880,21882,21884],{"class":151,"line":11512},[149,21879,21331],{"class":155},[149,21881,166],{"class":325},[149,21883,21265],{"class":162},[149,21885,7352],{"class":155},[149,21887,21888,21890,21892,21894,21896,21898,21900,21902,21904,21906],{"class":151,"line":11517},[149,21889,8245],{"class":155},[149,21891,2902],{"class":325},[149,21893,3378],{"class":155},[149,21895,1875],{"class":325},[149,21897,8234],{"class":325},[149,21899,2292],{"class":155},[149,21901,2216],{"class":325},[149,21903,13162],{"class":155},[149,21905,2902],{"class":325},[149,21907,10555],{"class":155},[149,21909,21910],{"class":151,"line":11526},[149,21911,355],{"class":155},[149,21913,21914],{"class":151,"line":11531},[149,21915,4119],{"emptyLinePlaceholder":1800},[149,21917,21918],{"class":151,"line":11537},[149,21919,4119],{"emptyLinePlaceholder":1800},[149,21921,21922,21924,21926],{"class":151,"line":11558},[149,21923,1875],{"class":325},[149,21925,3692],{"class":162},[149,21927,12567],{"class":155},[149,21929,21930],{"class":151,"line":11564},[149,21931,4119],{"emptyLinePlaceholder":1800},[149,21933,21934],{"class":151,"line":11578},[149,21935,21936],{"class":295},"    \u002F\u002Ftest01();\n",[149,21938,21939],{"class":151,"line":11584},[149,21940,21941],{"class":295},"    \u002F\u002Ftest02();\n",[149,21943,21944,21946],{"class":151,"line":11611},[149,21945,21401],{"class":162},[149,21947,7352],{"class":155},[149,21949,21950],{"class":151,"line":11620},[149,21951,4119],{"emptyLinePlaceholder":1800},[149,21953,21954,21956,21958,21960],{"class":151,"line":11626},[149,21955,4022],{"class":162},[149,21957,319],{"class":155},[149,21959,4027],{"class":169},[149,21961,337],{"class":155},[149,21963,21964],{"class":151,"line":11634},[149,21965,4119],{"emptyLinePlaceholder":1800},[149,21967,21968,21970,21972],{"class":151,"line":11639},[149,21969,5808],{"class":325},[149,21971,5811],{"class":309},[149,21973,841],{"class":155},[149,21975,21976],{"class":151,"line":18314},[149,21977,355],{"class":155},[19,21979,21981],{"id":21980},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[24,21983,21984],{},"默认情况下，c++编译器至少给一个类添加3个函数",[24,21986,21987],{},"1．默认构造函数(无参，函数体为空)",[24,21989,21990],{},"2．默认析构函数(无参，函数体为空)",[24,21992,21993],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[24,21995,21996],{},"构造函数调用规则如下：",[42,21998,21999,22002],{},[45,22000,22001],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[45,22003,22004],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[140,22006,22008],{"className":1861,"code":22007,"language":1863,"meta":145,"style":145},"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",[48,22009,22010,22018,22022,22027,22033,22045,22049,22054,22066,22075,22087,22091,22095,22111,22120,22132,22136,22140,22146,22158,22162,22166,22172,22176,22180,22188,22192,22204,22209,22217,22221,22239,22243,22247,22255,22259,22264,22272,22287,22300,22304,22309,22316,22332,22345,22349,22353,22361,22365,22371,22375,22385,22389,22397],{"__ignoreMap":145},[149,22011,22012,22014,22016],{"class":151,"line":152},[149,22013,913],{"class":325},[149,22015,17280],{"class":162},[149,22017,304],{"class":155},[149,22019,22020],{"class":151,"line":193},[149,22021,16428],{"class":325},[149,22023,22024],{"class":151,"line":235},[149,22025,22026],{"class":295},"    \u002F\u002F无参（默认）构造函数\n",[149,22028,22029,22031],{"class":151,"line":340},[149,22030,20229],{"class":162},[149,22032,12567],{"class":155},[149,22034,22035,22037,22039,22041,22043],{"class":151,"line":346},[149,22036,11383],{"class":155},[149,22038,2902],{"class":325},[149,22040,21520],{"class":169},[149,22042,3169],{"class":325},[149,22044,10555],{"class":155},[149,22046,22047],{"class":151,"line":352},[149,22048,3906],{"class":155},[149,22050,22051],{"class":151,"line":1021},[149,22052,22053],{"class":295},"    \u002F\u002F有参构造函数\n",[149,22055,22056,22058,22060,22062,22064],{"class":151,"line":1035},[149,22057,20229],{"class":162},[149,22059,319],{"class":155},[149,22061,1875],{"class":325},[149,22063,3123],{"class":6932},[149,22065,14155],{"class":155},[149,22067,22068,22071,22073],{"class":151,"line":1054},[149,22069,22070],{"class":155},"        age ",[149,22072,166],{"class":325},[149,22074,3157],{"class":155},[149,22076,22077,22079,22081,22083,22085],{"class":151,"line":1072},[149,22078,11383],{"class":155},[149,22080,2902],{"class":325},[149,22082,21560],{"class":169},[149,22084,3169],{"class":325},[149,22086,10555],{"class":155},[149,22088,22089],{"class":151,"line":1090},[149,22090,3906],{"class":155},[149,22092,22093],{"class":151,"line":1633},[149,22094,20584],{"class":295},[149,22096,22097,22099,22101,22103,22105,22107,22109],{"class":151,"line":1644},[149,22098,20229],{"class":162},[149,22100,319],{"class":155},[149,22102,8508],{"class":325},[149,22104,17280],{"class":162},[149,22106,2216],{"class":325},[149,22108,8541],{"class":6932},[149,22110,14155],{"class":155},[149,22112,22113,22115,22117],{"class":151,"line":3348},[149,22114,22070],{"class":155},[149,22116,166],{"class":325},[149,22118,22119],{"class":155}," p.age;\n",[149,22121,22122,22124,22126,22128,22130],{"class":151,"line":3362},[149,22123,11383],{"class":155},[149,22125,2902],{"class":325},[149,22127,21601],{"class":169},[149,22129,3169],{"class":325},[149,22131,10555],{"class":155},[149,22133,22134],{"class":151,"line":3367},[149,22135,3906],{"class":155},[149,22137,22138],{"class":151,"line":3373},[149,22139,20257],{"class":295},[149,22141,22142,22144],{"class":151,"line":3394},[149,22143,20262],{"class":162},[149,22145,12567],{"class":155},[149,22147,22148,22150,22152,22154,22156],{"class":151,"line":3399},[149,22149,11383],{"class":155},[149,22151,2902],{"class":325},[149,22153,21638],{"class":169},[149,22155,3169],{"class":325},[149,22157,10555],{"class":155},[149,22159,22160],{"class":151,"line":3413},[149,22161,3906],{"class":155},[149,22163,22164],{"class":151,"line":3418},[149,22165,16428],{"class":325},[149,22167,22168,22170],{"class":151,"line":3447},[149,22169,3704],{"class":325},[149,22171,9512],{"class":155},[149,22173,22174],{"class":151,"line":3452},[149,22175,5713],{"class":155},[149,22177,22178],{"class":151,"line":3469},[149,22179,4119],{"emptyLinePlaceholder":1800},[149,22181,22182,22184,22186],{"class":151,"line":3474},[149,22183,7080],{"class":325},[149,22185,7304],{"class":162},[149,22187,3695],{"class":155},[149,22189,22190],{"class":151,"line":3479},[149,22191,3270],{"class":155},[149,22193,22194,22196,22198,22200,22202],{"class":151,"line":3484},[149,22195,21141],{"class":155},[149,22197,8846],{"class":162},[149,22199,319],{"class":155},[149,22201,2513],{"class":309},[149,22203,337],{"class":155},[149,22205,22206],{"class":151,"line":3498},[149,22207,22208],{"class":295},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[149,22210,22211,22213,22215],{"class":151,"line":3503},[149,22212,21141],{"class":155},[149,22214,8749],{"class":162},[149,22216,19225],{"class":155},[149,22218,22219],{"class":151,"line":4296},[149,22220,4119],{"emptyLinePlaceholder":1800},[149,22222,22223,22225,22227,22230,22232,22235,22237],{"class":151,"line":4310},[149,22224,8245],{"class":155},[149,22226,2902],{"class":325},[149,22228,22229],{"class":169}," \"p2的年龄为： \"",[149,22231,3169],{"class":325},[149,22233,22234],{"class":155}," p2.age ",[149,22236,2902],{"class":325},[149,22238,10555],{"class":155},[149,22240,22241],{"class":151,"line":4318},[149,22242,355],{"class":155},[149,22244,22245],{"class":151,"line":4323},[149,22246,4119],{"emptyLinePlaceholder":1800},[149,22248,22249,22251,22253],{"class":151,"line":4329},[149,22250,7080],{"class":325},[149,22252,7373],{"class":162},[149,22254,3695],{"class":155},[149,22256,22257],{"class":151,"line":4335},[149,22258,3270],{"class":155},[149,22260,22261],{"class":151,"line":4340},[149,22262,22263],{"class":295},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[149,22265,22266,22269],{"class":151,"line":9663},[149,22267,22268],{"class":155},"    Person p1;",[149,22270,22271],{"class":295}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[149,22273,22274,22276,22278,22280,22282,22284],{"class":151,"line":9687},[149,22275,21141],{"class":155},[149,22277,8749],{"class":162},[149,22279,319],{"class":155},[149,22281,2309],{"class":309},[149,22283,7682],{"class":155},[149,22285,22286],{"class":295}," \u002F\u002F用户提供的有参\n",[149,22288,22289,22291,22294,22297],{"class":151,"line":9692},[149,22290,21141],{"class":155},[149,22292,22293],{"class":162},"p3",[149,22295,22296],{"class":155},"(p2);",[149,22298,22299],{"class":295}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[149,22301,22302],{"class":151,"line":9698},[149,22303,4119],{"emptyLinePlaceholder":1800},[149,22305,22306],{"class":151,"line":9725},[149,22307,22308],{"class":295},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[149,22310,22311,22314],{"class":151,"line":9730},[149,22312,22313],{"class":155},"    Person p4;",[149,22315,22271],{"class":295},[149,22317,22318,22320,22323,22325,22327,22329],{"class":151,"line":9736},[149,22319,21141],{"class":155},[149,22321,22322],{"class":162},"p5",[149,22324,319],{"class":155},[149,22326,2309],{"class":309},[149,22328,7682],{"class":155},[149,22330,22331],{"class":295}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[149,22333,22334,22336,22339,22342],{"class":151,"line":9748},[149,22335,21141],{"class":155},[149,22337,22338],{"class":162},"p6",[149,22340,22341],{"class":155},"(p5);",[149,22343,22344],{"class":295}," \u002F\u002F用户自己提供拷贝构造\n",[149,22346,22347],{"class":151,"line":9760},[149,22348,355],{"class":155},[149,22350,22351],{"class":151,"line":9772},[149,22352,4119],{"emptyLinePlaceholder":1800},[149,22354,22355,22357,22359],{"class":151,"line":11430},[149,22356,1875],{"class":325},[149,22358,3692],{"class":162},[149,22360,12567],{"class":155},[149,22362,22363],{"class":151,"line":11455},[149,22364,4119],{"emptyLinePlaceholder":1800},[149,22366,22367,22369],{"class":151,"line":11478},[149,22368,7349],{"class":162},[149,22370,7352],{"class":155},[149,22372,22373],{"class":151,"line":11502},[149,22374,4119],{"emptyLinePlaceholder":1800},[149,22376,22377,22379,22381,22383],{"class":151,"line":11507},[149,22378,4022],{"class":162},[149,22380,319],{"class":155},[149,22382,4027],{"class":169},[149,22384,337],{"class":155},[149,22386,22387],{"class":151,"line":11512},[149,22388,4119],{"emptyLinePlaceholder":1800},[149,22390,22391,22393,22395],{"class":151,"line":11517},[149,22392,5808],{"class":325},[149,22394,5811],{"class":309},[149,22396,841],{"class":155},[149,22398,22399],{"class":151,"line":11526},[149,22400,355],{"class":155},[19,22402,22404],{"id":22403},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[24,22406,22407],{},"浅拷贝：简单的赋值拷贝操作",[24,22409,22410],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[140,22412,22414],{"className":1861,"code":22413,"language":1863,"meta":145,"style":145},"#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",[48,22415,22416,22422,22432,22438,22442,22446,22451,22457,22461,22474,22478,22482,22489,22493,22503,22518,22531,22535,22540,22545,22561,22565,22578,22583,22588,22593,22602,22607,22622,22626,22630,22634,22640,22644,22649,22664,22668,22679,22693,22697,22706,22710,22716,22728,22732,22740,22744,22761,22792,22800,22828,22832,22836,22844,22848,22854],{"__ignoreMap":145},[149,22417,22418,22420],{"class":151,"line":152},[149,22419,3669],{"class":325},[149,22421,3672],{"class":169},[149,22423,22424,22426,22428,22430],{"class":151,"line":193},[149,22425,3677],{"class":325},[149,22427,3680],{"class":325},[149,22429,3683],{"class":162},[149,22431,841],{"class":155},[149,22433,22434,22436],{"class":151,"line":235},[149,22435,913],{"class":325},[149,22437,16882],{"class":162},[149,22439,22440],{"class":151,"line":340},[149,22441,3270],{"class":155},[149,22443,22444],{"class":151,"line":346},[149,22445,16428],{"class":325},[149,22447,22448],{"class":151,"line":352},[149,22449,22450],{"class":295},"    \u002F\u002F默认构造函数\n",[149,22452,22453,22455],{"class":151,"line":1021},[149,22454,20229],{"class":162},[149,22456,3695],{"class":155},[149,22458,22459],{"class":151,"line":1035},[149,22460,3749],{"class":155},[149,22462,22463,22465,22467,22470,22472],{"class":151,"line":1054},[149,22464,5169],{"class":155},[149,22466,2902],{"class":325},[149,22468,22469],{"class":169},"\"默认构造函数\"",[149,22471,2902],{"class":325},[149,22473,2924],{"class":155},[149,22475,22476],{"class":151,"line":1072},[149,22477,3906],{"class":155},[149,22479,22480],{"class":151,"line":1090},[149,22481,22053],{"class":295},[149,22483,22484,22486],{"class":151,"line":1633},[149,22485,20262],{"class":162},[149,22487,22488],{"class":155},"(int age,int height)\n",[149,22490,22491],{"class":151,"line":1644},[149,22492,3749],{"class":155},[149,22494,22495,22498,22500],{"class":151,"line":3348},[149,22496,22497],{"class":155},"        m_Age",[149,22499,166],{"class":325},[149,22501,22502],{"class":155},"age;\n",[149,22504,22505,22508,22510,22512,22515],{"class":151,"line":3362},[149,22506,22507],{"class":155},"        m_Height",[149,22509,13431],{"class":325},[149,22511,4101],{"class":325},[149,22513,22514],{"class":155},"(height);",[149,22516,22517],{"class":295},"\u002F\u002F放到堆区\n",[149,22519,22520,22522,22524,22527,22529],{"class":151,"line":3367},[149,22521,5169],{"class":155},[149,22523,2902],{"class":325},[149,22525,22526],{"class":169},"\"有参构造函数\"",[149,22528,2902],{"class":325},[149,22530,2924],{"class":155},[149,22532,22533],{"class":151,"line":3373},[149,22534,3906],{"class":155},[149,22536,22537],{"class":151,"line":3394},[149,22538,22539],{"class":295},"    \u002F\u002F深拷贝解决上述问题\n",[149,22541,22542],{"class":151,"line":3399},[149,22543,22544],{"class":295},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[149,22546,22547,22549,22551,22553,22555,22557,22559],{"class":151,"line":3413},[149,22548,20229],{"class":162},[149,22550,319],{"class":155},[149,22552,8508],{"class":325},[149,22554,17280],{"class":162},[149,22556,12298],{"class":325},[149,22558,24],{"class":6932},[149,22560,1878],{"class":155},[149,22562,22563],{"class":151,"line":3418},[149,22564,3749],{"class":155},[149,22566,22567,22569,22571,22574,22576],{"class":151,"line":3447},[149,22568,5169],{"class":155},[149,22570,2902],{"class":325},[149,22572,22573],{"class":169},"\"拷贝构造函数\"",[149,22575,2902],{"class":325},[149,22577,2924],{"class":155},[149,22579,22580],{"class":151,"line":3452},[149,22581,22582],{"class":295},"        \u002F\u002F编译器默认的写如下注释部分\n",[149,22584,22585],{"class":151,"line":3469},[149,22586,22587],{"class":295},"        \u002F\u002Fm_Age=p.m_Age;\n",[149,22589,22590],{"class":151,"line":3474},[149,22591,22592],{"class":295},"        \u002F\u002Fm_Height=p.m_Height;\n",[149,22594,22595,22597,22599],{"class":151,"line":3479},[149,22596,22497],{"class":155},[149,22598,166],{"class":325},[149,22600,22601],{"class":155},"p.m_Age;\n",[149,22603,22604],{"class":151,"line":3484},[149,22605,22606],{"class":295},"        \u002F\u002F深拷贝操作\n",[149,22608,22609,22611,22613,22615,22617,22619],{"class":151,"line":3498},[149,22610,22507],{"class":155},[149,22612,13431],{"class":325},[149,22614,4101],{"class":325},[149,22616,319],{"class":155},[149,22618,2318],{"class":325},[149,22620,22621],{"class":155},"p.m_Height);\n",[149,22623,22624],{"class":151,"line":3503},[149,22625,3906],{"class":155},[149,22627,22628],{"class":151,"line":4296},[149,22629,4119],{"emptyLinePlaceholder":1800},[149,22631,22632],{"class":151,"line":4310},[149,22633,20257],{"class":295},[149,22635,22636,22638],{"class":151,"line":4318},[149,22637,20262],{"class":162},[149,22639,3695],{"class":155},[149,22641,22642],{"class":151,"line":4323},[149,22643,3749],{"class":155},[149,22645,22646],{"class":151,"line":4329},[149,22647,22648],{"class":295},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[149,22650,22651,22653,22656,22659,22662],{"class":151,"line":4335},[149,22652,4216],{"class":325},[149,22654,22655],{"class":155},"(m_Height ",[149,22657,22658],{"class":325},"!=",[149,22660,22661],{"class":309}," NULL",[149,22663,1878],{"class":155},[149,22665,22666],{"class":151,"line":4340},[149,22667,4229],{"class":155},[149,22669,22670,22673,22676],{"class":151,"line":9663},[149,22671,22672],{"class":325},"            delete",[149,22674,22675],{"class":155}," m_Height;",[149,22677,22678],{"class":295}," \u002F\u002F释放堆区内存\n",[149,22680,22681,22684,22686,22688,22690],{"class":151,"line":9687},[149,22682,22683],{"class":155},"            m_Height",[149,22685,166],{"class":325},[149,22687,4111],{"class":309},[149,22689,1924],{"class":155},[149,22691,22692],{"class":295}," \u002F\u002F防止野指针\n",[149,22694,22695],{"class":151,"line":9692},[149,22696,4248],{"class":155},[149,22698,22699,22701,22703],{"class":151,"line":9698},[149,22700,5169],{"class":155},[149,22702,2902],{"class":325},[149,22704,22705],{"class":169},"\"Person的析构函数调用\"\n",[149,22707,22708],{"class":151,"line":9725},[149,22709,3906],{"class":155},[149,22711,22712,22714],{"class":151,"line":9730},[149,22713,3704],{"class":325},[149,22715,17376],{"class":155},[149,22717,22718,22720,22722,22725],{"class":151,"line":9736},[149,22719,3704],{"class":325},[149,22721,8234],{"class":325},[149,22723,22724],{"class":155},"m_Height;",[149,22726,22727],{"class":295}," \u002F\u002F定义一个指针，指向身高\n",[149,22729,22730],{"class":151,"line":9748},[149,22731,5713],{"class":155},[149,22733,22734,22736,22738],{"class":151,"line":9760},[149,22735,7080],{"class":325},[149,22737,7304],{"class":162},[149,22739,3695],{"class":155},[149,22741,22742],{"class":151,"line":9772},[149,22743,3270],{"class":155},[149,22745,22746,22748,22750,22752,22754,22756,22759],{"class":151,"line":11430},[149,22747,21141],{"class":155},[149,22749,8846],{"class":162},[149,22751,319],{"class":155},[149,22753,2513],{"class":309},[149,22755,2241],{"class":155},[149,22757,22758],{"class":309},"160",[149,22760,337],{"class":155},[149,22762,22763,22765,22767,22770,22772,22775,22777,22780,22782,22785,22787,22789],{"class":151,"line":11455},[149,22764,3275],{"class":155},[149,22766,2902],{"class":325},[149,22768,22769],{"class":169},"\"p1的年龄为:\"",[149,22771,2902],{"class":325},[149,22773,22774],{"class":155},"p1.m_Age",[149,22776,2902],{"class":325},[149,22778,22779],{"class":169},"\"身高为：\"",[149,22781,8135],{"class":325},[149,22783,22784],{"class":155},"p1.m_Height",[149,22786,2902],{"class":325},[149,22788,2967],{"class":155},[149,22790,22791],{"class":295},"  \u002F\u002F18\n",[149,22793,22794,22796,22798],{"class":151,"line":11478},[149,22795,21141],{"class":155},[149,22797,8749],{"class":162},[149,22799,19225],{"class":155},[149,22801,22802,22804,22806,22809,22811,22813,22815,22817,22819,22822,22824,22826],{"class":151,"line":11502},[149,22803,3275],{"class":155},[149,22805,2902],{"class":325},[149,22807,22808],{"class":169},"\"p2的年龄为：\"",[149,22810,2902],{"class":325},[149,22812,21171],{"class":155},[149,22814,2902],{"class":325},[149,22816,22779],{"class":169},[149,22818,8135],{"class":325},[149,22820,22821],{"class":155},"p2.m_Height",[149,22823,2902],{"class":325},[149,22825,2967],{"class":155},[149,22827,22791],{"class":295},[149,22829,22830],{"class":151,"line":11507},[149,22831,14923],{"class":155},[149,22833,22834],{"class":151,"line":11512},[149,22835,355],{"class":155},[149,22837,22838,22840,22842],{"class":151,"line":11517},[149,22839,1875],{"class":325},[149,22841,3692],{"class":162},[149,22843,3695],{"class":155},[149,22845,22846],{"class":151,"line":11526},[149,22847,3270],{"class":155},[149,22849,22850,22852],{"class":151,"line":11531},[149,22851,7349],{"class":162},[149,22853,7352],{"class":155},[149,22855,22856],{"class":151,"line":11537},[149,22857,355],{"class":155},[24,22859,22860],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[24,22862,22863],{},"浅拷贝带来的问题是堆区的内存重复释放",[24,22865,22866],{},[83,22867],{"alt":145,"src":22868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[24,22870,22871],{},"浅拷贝问题要使用深拷贝来解决",[24,22873,22874],{},[83,22875],{"alt":145,"src":22876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[24,22878,22879],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[19,22881,22883],{"id":22882},"_826初始化列表","8.2.6初始化列表",[24,22885,22886],{},"作用：初始化属性",[24,22888,6899],{},[140,22890,22893],{"className":22891,"code":22892,"language":1655},[1653],"构造函数():属性1(值1),属性2(值2).....{}\n",[48,22894,22892],{"__ignoreMap":145},[24,22896,22897],{},"例子",[140,22899,22901],{"className":1861,"code":22900,"language":1863,"meta":145,"style":145},"#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",[48,22902,22903,22909,22919,22925,22929,22934,22938,22943,22948,22953,22958,22963,22968,22972,22977,22982,23025,23034,23052,23070,23088,23092,23096,23103,23110,23117,23121,23125,23133,23137,23141,23161,23170,23174,23178,23188,23192,23200],{"__ignoreMap":145},[149,22904,22905,22907],{"class":151,"line":152},[149,22906,3669],{"class":325},[149,22908,3672],{"class":169},[149,22910,22911,22913,22915,22917],{"class":151,"line":193},[149,22912,3677],{"class":325},[149,22914,3680],{"class":325},[149,22916,3683],{"class":162},[149,22918,841],{"class":155},[149,22920,22921,22923],{"class":151,"line":235},[149,22922,913],{"class":325},[149,22924,16882],{"class":162},[149,22926,22927],{"class":151,"line":340},[149,22928,3270],{"class":155},[149,22930,22931],{"class":151,"line":346},[149,22932,22933],{"class":325},"    public:\n",[149,22935,22936],{"class":151,"line":352},[149,22937,4119],{"emptyLinePlaceholder":1800},[149,22939,22940],{"class":151,"line":1021},[149,22941,22942],{"class":295},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[149,22944,22945],{"class":151,"line":1035},[149,22946,22947],{"class":295},"    \u002F\u002FPerson(int a, int b, int c) {\n",[149,22949,22950],{"class":151,"line":1054},[149,22951,22952],{"class":295},"    \u002F\u002F  m_A = a;\n",[149,22954,22955],{"class":151,"line":1072},[149,22956,22957],{"class":295},"    \u002F\u002F  m_B = b;\n",[149,22959,22960],{"class":151,"line":1090},[149,22961,22962],{"class":295},"    \u002F\u002F  m_C = c;\n",[149,22964,22965],{"class":151,"line":1633},[149,22966,22967],{"class":295},"    \u002F\u002F}\n",[149,22969,22970],{"class":151,"line":1644},[149,22971,4119],{"emptyLinePlaceholder":1800},[149,22973,22974],{"class":151,"line":3348},[149,22975,22976],{"class":295},"    \u002F\u002F初始化列表方式初始化\n",[149,22978,22979],{"class":151,"line":3362},[149,22980,22981],{"class":295},"    \u002F\u002F使用有参构造函数\n",[149,22983,22984,22986,22988,22990,22992,22994,22996,22998,23000,23002,23004,23007,23010,23013,23016,23019,23022],{"class":151,"line":3367},[149,22985,20229],{"class":162},[149,22987,319],{"class":155},[149,22989,1875],{"class":325},[149,22991,3123],{"class":6932},[149,22993,329],{"class":155},[149,22995,1875],{"class":325},[149,22997,4551],{"class":6932},[149,22999,329],{"class":155},[149,23001,1875],{"class":325},[149,23003,4567],{"class":6932},[149,23005,23006],{"class":155},") :",[149,23008,23009],{"class":162},"m_A",[149,23011,23012],{"class":155},"(a), ",[149,23014,23015],{"class":162},"m_B",[149,23017,23018],{"class":155},"(b), ",[149,23020,23021],{"class":162},"m_C",[149,23023,23024],{"class":155},"(c) {}\n",[149,23026,23027,23029,23032],{"class":151,"line":3373},[149,23028,16621],{"class":325},[149,23030,23031],{"class":162}," PrintPerson",[149,23033,12567],{"class":155},[149,23035,23036,23038,23040,23043,23045,23048,23050],{"class":151,"line":3394},[149,23037,11383],{"class":155},[149,23039,2902],{"class":325},[149,23041,23042],{"class":169}," \"mA:\"",[149,23044,3169],{"class":325},[149,23046,23047],{"class":155}," m_A ",[149,23049,2902],{"class":325},[149,23051,10555],{"class":155},[149,23053,23054,23056,23058,23061,23063,23066,23068],{"class":151,"line":3399},[149,23055,11383],{"class":155},[149,23057,2902],{"class":325},[149,23059,23060],{"class":169}," \"mB:\"",[149,23062,3169],{"class":325},[149,23064,23065],{"class":155}," m_B ",[149,23067,2902],{"class":325},[149,23069,10555],{"class":155},[149,23071,23072,23074,23076,23079,23081,23084,23086],{"class":151,"line":3413},[149,23073,11383],{"class":155},[149,23075,2902],{"class":325},[149,23077,23078],{"class":169}," \"mC:\"",[149,23080,3169],{"class":325},[149,23082,23083],{"class":155}," m_C ",[149,23085,2902],{"class":325},[149,23087,10555],{"class":155},[149,23089,23090],{"class":151,"line":3418},[149,23091,3906],{"class":155},[149,23093,23094],{"class":151,"line":3447},[149,23095,16933],{"class":325},[149,23097,23098,23100],{"class":151,"line":3452},[149,23099,3704],{"class":325},[149,23101,23102],{"class":155}," m_A;\n",[149,23104,23105,23107],{"class":151,"line":3469},[149,23106,3704],{"class":325},[149,23108,23109],{"class":155}," m_B;\n",[149,23111,23112,23114],{"class":151,"line":3474},[149,23113,3704],{"class":325},[149,23115,23116],{"class":155}," m_C;\n",[149,23118,23119],{"class":151,"line":3479},[149,23120,5713],{"class":155},[149,23122,23123],{"class":151,"line":3484},[149,23124,4119],{"emptyLinePlaceholder":1800},[149,23126,23127,23129,23131],{"class":151,"line":3498},[149,23128,1875],{"class":325},[149,23130,3692],{"class":162},[149,23132,7694],{"class":155},[149,23134,23135],{"class":151,"line":3503},[149,23136,3270],{"class":155},[149,23138,23139],{"class":151,"line":4296},[149,23140,4119],{"emptyLinePlaceholder":1800},[149,23142,23143,23145,23147,23149,23151,23153,23155,23157,23159],{"class":151,"line":4310},[149,23144,21141],{"class":155},[149,23146,24],{"class":162},[149,23148,319],{"class":155},[149,23150,830],{"class":309},[149,23152,329],{"class":155},[149,23154,1045],{"class":309},[149,23156,329],{"class":155},[149,23158,1939],{"class":309},[149,23160,337],{"class":155},[149,23162,23163,23165,23168],{"class":151,"line":4318},[149,23164,17576],{"class":155},[149,23166,23167],{"class":162},"PrintPerson",[149,23169,7352],{"class":155},[149,23171,23172],{"class":151,"line":4323},[149,23173,4119],{"emptyLinePlaceholder":1800},[149,23175,23176],{"class":151,"line":4329},[149,23177,4119],{"emptyLinePlaceholder":1800},[149,23179,23180,23182,23184,23186],{"class":151,"line":4335},[149,23181,4022],{"class":162},[149,23183,319],{"class":155},[149,23185,4027],{"class":169},[149,23187,337],{"class":155},[149,23189,23190],{"class":151,"line":4340},[149,23191,4119],{"emptyLinePlaceholder":1800},[149,23193,23194,23196,23198],{"class":151,"line":9663},[149,23195,5808],{"class":325},[149,23197,5811],{"class":309},[149,23199,841],{"class":155},[149,23201,23202],{"class":151,"line":9687},[149,23203,355],{"class":155},[24,23205,23206,23207,23210,23211],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[31,23208,23209],{},"参数名就是定义的对象属性","，",[31,23212,23213],{},"属性后面的值为有参构造函数的形参",[140,23215,23217],{"className":1861,"code":23216,"language":1863,"meta":145,"style":145},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[48,23218,23219],{"__ignoreMap":145},[149,23220,23221,23223,23225,23227,23230,23232,23235,23237,23240,23242,23245,23247,23250,23252],{"class":151,"line":152},[149,23222,20756],{"class":162},[149,23224,319],{"class":155},[149,23226,1875],{"class":325},[149,23228,23229],{"class":155}," a.",[149,23231,1875],{"class":325},[149,23233,23234],{"class":155}," b,",[149,23236,1875],{"class":325},[149,23238,23239],{"class":155}," b):",[149,23241,23009],{"class":162},[149,23243,23244],{"class":155},"(a),",[149,23246,23015],{"class":162},[149,23248,23249],{"class":155},"(c),",[149,23251,23021],{"class":162},[149,23253,23254],{"class":155},"(b) {}\n",[19,23256,23258],{"id":23257},"_827类对象作为类成员","8.2.7类对象作为类成员",[24,23260,23261],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[24,23263,16346],{},[140,23265,23267],{"className":1861,"code":23266,"language":1863,"meta":145,"style":145},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[48,23268,23269,23274,23279,23283,23288,23292],{"__ignoreMap":145},[149,23270,23271],{"class":151,"line":152},[149,23272,23273],{"class":155},"A{};\n",[149,23275,23276],{"class":151,"line":193},[149,23277,23278],{"class":155},"B\n",[149,23280,23281],{"class":151,"line":235},[149,23282,3270],{"class":155},[149,23284,23285],{"class":151,"line":340},[149,23286,23287],{"class":155},"    A a;\n",[149,23289,23290],{"class":151,"line":346},[149,23291,355],{"class":155},[149,23293,23294],{"class":151,"line":352},[149,23295,23296],{"class":295},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[24,23298,23299],{},"案例",[140,23301,23303],{"className":1861,"code":23302,"language":1863,"meta":145,"style":145},"\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",[48,23304,23305,23310,23317,23321,23326,23331,23345,23349,23359,23370,23374,23381,23385,23398,23402,23407,23412,23416,23422,23426,23430,23434,23465,23469,23480,23484,23490,23494,23507,23511,23515,23519,23524,23529,23533,23541,23545,23562,23581,23585,23593,23597,23603],{"__ignoreMap":145},[149,23306,23307],{"class":151,"line":152},[149,23308,23309],{"class":295},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[149,23311,23312,23314],{"class":151,"line":193},[149,23313,913],{"class":325},[149,23315,23316],{"class":162}," Phone\n",[149,23318,23319],{"class":151,"line":235},[149,23320,3270],{"class":155},[149,23322,23323],{"class":151,"line":340},[149,23324,23325],{"class":155},"public：\n",[149,23327,23328],{"class":151,"line":346},[149,23329,23330],{"class":295},"    \u002F\u002F 赋值(构造函数)\n",[149,23332,23333,23336,23338,23340,23343],{"class":151,"line":352},[149,23334,23335],{"class":162},"    Phone",[149,23337,319],{"class":155},[149,23339,16629],{"class":162},[149,23341,23342],{"class":6932}," pName",[149,23344,1878],{"class":155},[149,23346,23347],{"class":151,"line":1021},[149,23348,3749],{"class":155},[149,23350,23351,23354,23356],{"class":151,"line":1035},[149,23352,23353],{"class":155},"        m_pName",[149,23355,166],{"class":325},[149,23357,23358],{"class":155},"pName;\n",[149,23360,23361,23363,23365,23368],{"class":151,"line":1054},[149,23362,5169],{"class":155},[149,23364,2902],{"class":325},[149,23366,23367],{"class":169},"\"Phone的构造函数调用\"",[149,23369,841],{"class":155},[149,23371,23372],{"class":151,"line":1072},[149,23373,3906],{"class":155},[149,23375,23376,23379],{"class":151,"line":1090},[149,23377,23378],{"class":162},"    ~Phone",[149,23380,3695],{"class":155},[149,23382,23383],{"class":151,"line":1633},[149,23384,3749],{"class":155},[149,23386,23387,23389,23391,23394,23396],{"class":151,"line":1644},[149,23388,5169],{"class":155},[149,23390,2902],{"class":325},[149,23392,23393],{"class":169},"\"Phone析构函数调用\"",[149,23395,2902],{"class":325},[149,23397,2924],{"class":155},[149,23399,23400],{"class":151,"line":3348},[149,23401,3906],{"class":155},[149,23403,23404],{"class":151,"line":3362},[149,23405,23406],{"class":295},"    \u002F\u002F\n",[149,23408,23409],{"class":151,"line":3367},[149,23410,23411],{"class":155},"    string m_PName;\n",[149,23413,23414],{"class":151,"line":3373},[149,23415,5713],{"class":155},[149,23417,23418,23420],{"class":151,"line":3394},[149,23419,913],{"class":325},[149,23421,16882],{"class":162},[149,23423,23424],{"class":151,"line":3399},[149,23425,3270],{"class":155},[149,23427,23428],{"class":151,"line":3413},[149,23429,16428],{"class":325},[149,23431,23432],{"class":151,"line":3418},[149,23433,18704],{"class":295},[149,23435,23436,23438,23440,23442,23444,23446,23448,23451,23454,23456,23459,23462],{"class":151,"line":3447},[149,23437,20229],{"class":162},[149,23439,319],{"class":155},[149,23441,16629],{"class":162},[149,23443,515],{"class":6932},[149,23445,2241],{"class":155},[149,23447,16629],{"class":162},[149,23449,23450],{"class":6932}," pname",[149,23452,23453],{"class":155},"):",[149,23455,16721],{"class":162},[149,23457,23458],{"class":155},"(name),m_phone.",[149,23460,23461],{"class":162},"m_PName",[149,23463,23464],{"class":155},"(pname) \n",[149,23466,23467],{"class":151,"line":3452},[149,23468,3749],{"class":155},[149,23470,23471,23473,23475,23478],{"class":151,"line":3469},[149,23472,5169],{"class":155},[149,23474,2902],{"class":325},[149,23476,23477],{"class":169},"\"Person的构造函数调用\"",[149,23479,841],{"class":155},[149,23481,23482],{"class":151,"line":3474},[149,23483,3906],{"class":155},[149,23485,23486,23488],{"class":151,"line":3479},[149,23487,20262],{"class":162},[149,23489,3695],{"class":155},[149,23491,23492],{"class":151,"line":3484},[149,23493,3749],{"class":155},[149,23495,23496,23498,23500,23503,23505],{"class":151,"line":3498},[149,23497,5169],{"class":155},[149,23499,2902],{"class":325},[149,23501,23502],{"class":169},"\"Person析构函数调用\"",[149,23504,2902],{"class":325},[149,23506,2924],{"class":155},[149,23508,23509],{"class":151,"line":3503},[149,23510,3906],{"class":155},[149,23512,23513],{"class":151,"line":4296},[149,23514,9495],{"class":295},[149,23516,23517],{"class":151,"line":4310},[149,23518,16604],{"class":155},[149,23520,23521],{"class":151,"line":4318},[149,23522,23523],{"class":295},"    \u002F\u002F手机\n",[149,23525,23526],{"class":151,"line":4323},[149,23527,23528],{"class":155},"    Phone m_Phone;\n",[149,23530,23531],{"class":151,"line":4329},[149,23532,5713],{"class":155},[149,23534,23535,23537,23539],{"class":151,"line":4335},[149,23536,7080],{"class":325},[149,23538,7304],{"class":162},[149,23540,3695],{"class":155},[149,23542,23543],{"class":151,"line":4340},[149,23544,3270],{"class":155},[149,23546,23547,23549,23551,23553,23555,23557,23560],{"class":151,"line":9663},[149,23548,21141],{"class":155},[149,23550,24],{"class":162},[149,23552,319],{"class":155},[149,23554,9631],{"class":169},[149,23556,2241],{"class":155},[149,23558,23559],{"class":169},"\"安卓\"",[149,23561,337],{"class":155},[149,23563,23564,23566,23568,23571,23573,23576,23578],{"class":151,"line":9687},[149,23565,3275],{"class":155},[149,23567,2902],{"class":325},[149,23569,23570],{"class":155},"p.Name",[149,23572,2902],{"class":325},[149,23574,23575],{"class":169},"\"拿着：\"",[149,23577,2902],{"class":325},[149,23579,23580],{"class":155},"p.m_phone.m_PName;\n",[149,23582,23583],{"class":151,"line":9692},[149,23584,355],{"class":155},[149,23586,23587,23589,23591],{"class":151,"line":9698},[149,23588,1875],{"class":325},[149,23590,3692],{"class":162},[149,23592,3695],{"class":155},[149,23594,23595],{"class":151,"line":9725},[149,23596,3270],{"class":155},[149,23598,23599,23601],{"class":151,"line":9730},[149,23600,7349],{"class":162},[149,23602,7352],{"class":155},[149,23604,23605],{"class":151,"line":9736},[149,23606,355],{"class":155},[24,23608,866],{},[140,23610,23612],{"className":1861,"code":23611,"language":1863,"meta":145,"style":145},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[48,23613,23614,23619],{"__ignoreMap":145},[149,23615,23616],{"class":151,"line":152},[149,23617,23618],{"class":295},"    \u002F\u002F不需要写这个：\n",[149,23620,23621],{"class":151,"line":193},[149,23622,23623],{"class":295},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[24,23625,23626],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[140,23628,23630],{"className":1861,"code":23629,"language":1863,"meta":145,"style":145},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[48,23631,23632],{"__ignoreMap":145},[149,23633,23634,23636,23639,23641,23644,23647],{"class":151,"line":152},[149,23635,20756],{"class":162},[149,23637,23638],{"class":155},"(string name.string pname):",[149,23640,16721],{"class":162},[149,23642,23643],{"class":155},"(name),",[149,23645,23646],{"class":162},"m_phone",[149,23648,23649],{"class":155},"(pname) {}\n",[24,23651,23652,23653,166,23656],{},"采用的是隐式转换法，实际为如下：\n",[48,23654,23655],{},"m_phone(pname)",[48,23657,23658],{},"Phone m_phone=pname",[24,23660,23661,23664],{},[31,23662,23663],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[24,23666,23667],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[19,23669,23671],{"id":23670},"_828静态对象","8.2.8静态对象",[24,23673,23674],{},"静态对象在成员对象前static，称为静态对象",[24,23676,23677],{},"静态对象分为两类：",[125,23679,23680],{},[45,23681,23682],{},"静态成员变量",[42,23684,23685,23688,23691],{},[45,23686,23687],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[45,23689,23690],{},"②在编译阶段分配内存",[45,23692,23693],{},"③类内声明，类外初始化",[125,23695,23696],{"start":193},[45,23697,23698],{},"静态成员函数",[42,23700,23701,23704],{},[45,23702,23703],{},"①所有对象共享同一个函数",[45,23705,23706],{},"②静态成员函数只能访问静态成员变量",[120,23708,23710],{"id":23709},"_8281静态成员变量","8.2.8.1静态成员变量",[140,23712,23714],{"className":1861,"code":23713,"language":1863,"meta":145,"style":145},"#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",[48,23715,23716,23722,23732,23738,23742,23746,23751,23756,23761,23769,23773,23777,23781,23789,23793,23797,23802,23815,23819,23827,23831,23837],{"__ignoreMap":145},[149,23717,23718,23720],{"class":151,"line":152},[149,23719,3669],{"class":325},[149,23721,3672],{"class":169},[149,23723,23724,23726,23728,23730],{"class":151,"line":193},[149,23725,3677],{"class":325},[149,23727,3680],{"class":325},[149,23729,3683],{"class":162},[149,23731,841],{"class":155},[149,23733,23734,23736],{"class":151,"line":235},[149,23735,913],{"class":325},[149,23737,16882],{"class":162},[149,23739,23740],{"class":151,"line":340},[149,23741,3270],{"class":155},[149,23743,23744],{"class":151,"line":346},[149,23745,16428],{"class":325},[149,23747,23748],{"class":151,"line":352},[149,23749,23750],{"class":295},"    \u002F\u002F非静态成员变量\n",[149,23752,23753],{"class":151,"line":1021},[149,23754,23755],{"class":295},"    \u002F\u002F int m_A;\n",[149,23757,23758],{"class":151,"line":1035},[149,23759,23760],{"class":295},"    \u002F\u002F定义静态成员变量\n",[149,23762,23763,23765,23767],{"class":151,"line":1054},[149,23764,12734],{"class":325},[149,23766,4101],{"class":325},[149,23768,23102],{"class":155},[149,23770,23771],{"class":151,"line":1072},[149,23772,4119],{"emptyLinePlaceholder":1800},[149,23774,23775],{"class":151,"line":1090},[149,23776,4119],{"emptyLinePlaceholder":1800},[149,23778,23779],{"class":151,"line":1633},[149,23780,5713],{"class":155},[149,23782,23783,23785,23787],{"class":151,"line":1644},[149,23784,7080],{"class":325},[149,23786,7304],{"class":162},[149,23788,3695],{"class":155},[149,23790,23791],{"class":151,"line":3348},[149,23792,3270],{"class":155},[149,23794,23795],{"class":151,"line":3362},[149,23796,17024],{"class":155},[149,23798,23799],{"class":151,"line":3367},[149,23800,23801],{"class":295},"    \u002F\u002F输出类成员变量这块内存\n",[149,23803,23804,23806,23808,23811,23813],{"class":151,"line":3373},[149,23805,3275],{"class":155},[149,23807,2902],{"class":325},[149,23809,23810],{"class":155},"p.m_A",[149,23812,2902],{"class":325},[149,23814,2924],{"class":155},[149,23816,23817],{"class":151,"line":3394},[149,23818,355],{"class":155},[149,23820,23821,23823,23825],{"class":151,"line":3399},[149,23822,1875],{"class":325},[149,23824,3692],{"class":162},[149,23826,3695],{"class":155},[149,23828,23829],{"class":151,"line":3413},[149,23830,3270],{"class":155},[149,23832,23833,23835],{"class":151,"line":3418},[149,23834,7349],{"class":162},[149,23836,3695],{"class":155},[149,23838,23839],{"class":151,"line":3447},[149,23840,355],{"class":155},[24,23842,23843],{},"此时输出是报错的：无法解析外部命令",[24,23845,23846],{},"解决这一问题：必须用到类内声明，类外初始化操作",[140,23848,23850],{"className":1861,"code":23849,"language":1863,"meta":145,"style":145},"#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",[48,23851,23852,23858,23868,23874,23878,23882,23887,23895,23899,23904,23919,23927,23931,23935,23940,23945,23957,23962,23973,23978,23983,23996,24000,24008,24012,24018],{"__ignoreMap":145},[149,23853,23854,23856],{"class":151,"line":152},[149,23855,3669],{"class":325},[149,23857,3672],{"class":169},[149,23859,23860,23862,23864,23866],{"class":151,"line":193},[149,23861,3677],{"class":325},[149,23863,3680],{"class":325},[149,23865,3683],{"class":162},[149,23867,841],{"class":155},[149,23869,23870,23872],{"class":151,"line":235},[149,23871,913],{"class":325},[149,23873,16882],{"class":162},[149,23875,23876],{"class":151,"line":340},[149,23877,3270],{"class":155},[149,23879,23880],{"class":151,"line":346},[149,23881,16428],{"class":325},[149,23883,23884],{"class":151,"line":352},[149,23885,23886],{"class":295},"    \u002F\u002F类内声明\n",[149,23888,23889,23891,23893],{"class":151,"line":1021},[149,23890,12734],{"class":325},[149,23892,4101],{"class":325},[149,23894,23102],{"class":155},[149,23896,23897],{"class":151,"line":1035},[149,23898,5713],{"class":155},[149,23900,23901],{"class":151,"line":1054},[149,23902,23903],{"class":295},"\u002F\u002F类外初始化\n",[149,23905,23906,23908,23910,23913,23915,23917],{"class":151,"line":1072},[149,23907,1875],{"class":325},[149,23909,17280],{"class":162},[149,23911,23912],{"class":155},"::m_A",[149,23914,166],{"class":325},[149,23916,2309],{"class":309},[149,23918,841],{"class":155},[149,23920,23921,23923,23925],{"class":151,"line":1090},[149,23922,7080],{"class":325},[149,23924,7304],{"class":162},[149,23926,3695],{"class":155},[149,23928,23929],{"class":151,"line":1633},[149,23930,3270],{"class":155},[149,23932,23933],{"class":151,"line":1644},[149,23934,17024],{"class":155},[149,23936,23937],{"class":151,"line":3348},[149,23938,23939],{"class":295},"    \u002F\u002F访问变量的原内存空间\n",[149,23941,23942],{"class":151,"line":3362},[149,23943,23944],{"class":295},"    \u002F\u002F100\n",[149,23946,23947,23949,23951,23953,23955],{"class":151,"line":3367},[149,23948,3275],{"class":155},[149,23950,2902],{"class":325},[149,23952,23810],{"class":155},[149,23954,2902],{"class":325},[149,23956,2924],{"class":155},[149,23958,23959],{"class":151,"line":3373},[149,23960,23961],{"class":155},"    Person p2;\n",[149,23963,23964,23967,23969,23971],{"class":151,"line":3394},[149,23965,23966],{"class":155},"    p2.m_A",[149,23968,166],{"class":325},[149,23970,3442],{"class":309},[149,23972,841],{"class":155},[149,23974,23975],{"class":151,"line":3399},[149,23976,23977],{"class":295},"    \u002F\u002F继续访问这片空间\n",[149,23979,23980],{"class":151,"line":3413},[149,23981,23982],{"class":295},"    \u002F\u002F200\n",[149,23984,23985,23987,23989,23992,23994],{"class":151,"line":3418},[149,23986,3275],{"class":155},[149,23988,2902],{"class":325},[149,23990,23991],{"class":155},"p2.m_A",[149,23993,2902],{"class":325},[149,23995,2924],{"class":155},[149,23997,23998],{"class":151,"line":3447},[149,23999,355],{"class":155},[149,24001,24002,24004,24006],{"class":151,"line":3452},[149,24003,1875],{"class":325},[149,24005,3692],{"class":162},[149,24007,3695],{"class":155},[149,24009,24010],{"class":151,"line":3469},[149,24011,3270],{"class":155},[149,24013,24014,24016],{"class":151,"line":3474},[149,24015,7349],{"class":162},[149,24017,7352],{"class":155},[149,24019,24020],{"class":151,"line":3479},[149,24021,355],{"class":155},[24,24023,24024],{},[31,24025,24026],{},"静态变量的访问",[140,24028,24030],{"className":1861,"code":24029,"language":1863,"meta":145,"style":145},"#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",[48,24031,24032,24038,24048,24054,24058,24062,24066,24074,24078,24083,24091,24095,24099,24113,24128,24136,24140,24145,24150,24155,24160,24172,24177,24182,24196,24213,24217,24225,24229,24235],{"__ignoreMap":145},[149,24033,24034,24036],{"class":151,"line":152},[149,24035,3669],{"class":325},[149,24037,3672],{"class":169},[149,24039,24040,24042,24044,24046],{"class":151,"line":193},[149,24041,3677],{"class":325},[149,24043,3680],{"class":325},[149,24045,3683],{"class":162},[149,24047,841],{"class":155},[149,24049,24050,24052],{"class":151,"line":235},[149,24051,913],{"class":325},[149,24053,16882],{"class":162},[149,24055,24056],{"class":151,"line":340},[149,24057,3270],{"class":155},[149,24059,24060],{"class":151,"line":346},[149,24061,16428],{"class":325},[149,24063,24064],{"class":151,"line":352},[149,24065,23886],{"class":295},[149,24067,24068,24070,24072],{"class":151,"line":1021},[149,24069,12734],{"class":325},[149,24071,4101],{"class":325},[149,24073,23102],{"class":155},[149,24075,24076],{"class":151,"line":1035},[149,24077,16933],{"class":325},[149,24079,24080],{"class":151,"line":1054},[149,24081,24082],{"class":295},"    \u002F\u002F静态成员变量也是有访问权限的\n",[149,24084,24085,24087,24089],{"class":151,"line":1072},[149,24086,12734],{"class":325},[149,24088,4101],{"class":325},[149,24090,23109],{"class":155},[149,24092,24093],{"class":151,"line":1090},[149,24094,5713],{"class":155},[149,24096,24097],{"class":151,"line":1633},[149,24098,23903],{"class":295},[149,24100,24101,24103,24105,24107,24109,24111],{"class":151,"line":1644},[149,24102,1875],{"class":325},[149,24104,17280],{"class":162},[149,24106,23912],{"class":155},[149,24108,166],{"class":325},[149,24110,2309],{"class":309},[149,24112,841],{"class":155},[149,24114,24115,24117,24119,24122,24124,24126],{"class":151,"line":3348},[149,24116,1875],{"class":325},[149,24118,17280],{"class":162},[149,24120,24121],{"class":155},"::m_B",[149,24123,166],{"class":325},[149,24125,2561],{"class":309},[149,24127,841],{"class":155},[149,24129,24130,24132,24134],{"class":151,"line":3362},[149,24131,7080],{"class":325},[149,24133,7373],{"class":162},[149,24135,3695],{"class":155},[149,24137,24138],{"class":151,"line":3367},[149,24139,3270],{"class":155},[149,24141,24142],{"class":151,"line":3373},[149,24143,24144],{"class":295},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[149,24146,24147],{"class":151,"line":3394},[149,24148,24149],{"class":295},"    \u002F\u002F静态成员变量有两种访问方式：\n",[149,24151,24152],{"class":151,"line":3399},[149,24153,24154],{"class":295},"    \u002F\u002F1.通过对象进行访问\n",[149,24156,24157],{"class":151,"line":3413},[149,24158,24159],{"class":155},"    Person p;  \n",[149,24161,24162,24164,24166,24168,24170],{"class":151,"line":3418},[149,24163,3275],{"class":155},[149,24165,2902],{"class":325},[149,24167,23810],{"class":155},[149,24169,2902],{"class":325},[149,24171,2924],{"class":155},[149,24173,24174],{"class":151,"line":3447},[149,24175,24176],{"class":295},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[149,24178,24179],{"class":151,"line":3452},[149,24180,24181],{"class":295},"    \u002F\u002F2.通过类名进行访问\n",[149,24183,24184,24186,24188,24190,24192,24194],{"class":151,"line":3469},[149,24185,3275],{"class":155},[149,24187,2902],{"class":325},[149,24189,20756],{"class":162},[149,24191,23912],{"class":155},[149,24193,2902],{"class":325},[149,24195,2924],{"class":155},[149,24197,24198,24200,24202,24204,24206,24208,24210],{"class":151,"line":3474},[149,24199,3275],{"class":155},[149,24201,2902],{"class":325},[149,24203,20756],{"class":162},[149,24205,24121],{"class":155},[149,24207,2902],{"class":325},[149,24209,2967],{"class":155},[149,24211,24212],{"class":295}," \u002F\u002F没有访问权限，报错\n",[149,24214,24215],{"class":151,"line":3479},[149,24216,355],{"class":155},[149,24218,24219,24221,24223],{"class":151,"line":3484},[149,24220,1875],{"class":325},[149,24222,3692],{"class":162},[149,24224,3695],{"class":155},[149,24226,24227],{"class":151,"line":3498},[149,24228,3270],{"class":155},[149,24230,24231,24233],{"class":151,"line":3503},[149,24232,7418],{"class":162},[149,24234,7352],{"class":155},[149,24236,24237],{"class":151,"line":4296},[149,24238,355],{"class":155},[120,24240,24242],{"id":24241},"_8282静态成员函数","8.2.8.2静态成员函数",[24,24244,24245],{},"1.静态成员函数定义与访问",[140,24247,24249],{"className":1861,"code":24248,"language":1863,"meta":145,"style":145},"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",[48,24250,24251,24257,24261,24265,24270,24281,24285,24299,24303,24307,24315,24319,24324,24329,24333,24341,24346,24356],{"__ignoreMap":145},[149,24252,24253,24255],{"class":151,"line":152},[149,24254,913],{"class":325},[149,24256,16882],{"class":162},[149,24258,24259],{"class":151,"line":193},[149,24260,3270],{"class":155},[149,24262,24263],{"class":151,"line":235},[149,24264,16428],{"class":325},[149,24266,24267],{"class":151,"line":340},[149,24268,24269],{"class":295},"    \u002F\u002F在公共权限下定义静态成员函数\n",[149,24271,24272,24274,24277,24279],{"class":151,"line":346},[149,24273,12734],{"class":325},[149,24275,24276],{"class":325}," void",[149,24278,13099],{"class":162},[149,24280,3695],{"class":155},[149,24282,24283],{"class":151,"line":352},[149,24284,3749],{"class":155},[149,24286,24287,24290,24292,24295,24297],{"class":151,"line":1021},[149,24288,24289],{"class":155},"        coout",[149,24291,2902],{"class":325},[149,24293,24294],{"class":169},"\"静态成员函数的调用\"",[149,24296,2902],{"class":325},[149,24298,2924],{"class":155},[149,24300,24301],{"class":151,"line":1035},[149,24302,3906],{"class":155},[149,24304,24305],{"class":151,"line":1054},[149,24306,5713],{"class":155},[149,24308,24309,24311,24313],{"class":151,"line":1072},[149,24310,7080],{"class":325},[149,24312,7304],{"class":162},[149,24314,3695],{"class":155},[149,24316,24317],{"class":151,"line":1090},[149,24318,3270],{"class":155},[149,24320,24321],{"class":151,"line":1633},[149,24322,24323],{"class":295},"    \u002F\u002F静态成员函数的调用方式:\n",[149,24325,24326],{"class":151,"line":1644},[149,24327,24328],{"class":295},"    \u002F\u002F1.通过对象访问\n",[149,24330,24331],{"class":151,"line":3348},[149,24332,17024],{"class":155},[149,24334,24335,24337,24339],{"class":151,"line":3362},[149,24336,17576],{"class":155},[149,24338,13265],{"class":162},[149,24340,7352],{"class":155},[149,24342,24343],{"class":151,"line":3367},[149,24344,24345],{"class":295},"    \u002F\u002F2.通过类名访问\n",[149,24347,24348,24350,24352,24354],{"class":151,"line":3373},[149,24349,20229],{"class":162},[149,24351,19442],{"class":155},[149,24353,13265],{"class":162},[149,24355,7352],{"class":155},[149,24357,24358],{"class":151,"line":3394},[149,24359,355],{"class":155},[125,24361,24362],{"start":193},[45,24363,24364],{},"静态成员函数只能访问静态成员变量",[140,24366,24368],{"className":1861,"code":24367,"language":1863,"meta":145,"style":145},"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",[48,24369,24370,24376,24380,24384,24388,24398,24402,24416,24421,24433,24437,24448,24458,24462,24466,24470,24480,24484,24497,24501,24505,24509,24513,24527,24535,24539,24543,24547,24551,24559,24563,24573,24578,24582,24590,24594,24600],{"__ignoreMap":145},[149,24371,24372,24374],{"class":151,"line":152},[149,24373,913],{"class":325},[149,24375,16882],{"class":162},[149,24377,24378],{"class":151,"line":193},[149,24379,3270],{"class":155},[149,24381,24382],{"class":151,"line":235},[149,24383,16428],{"class":325},[149,24385,24386],{"class":151,"line":340},[149,24387,24269],{"class":295},[149,24389,24390,24392,24394,24396],{"class":151,"line":346},[149,24391,12734],{"class":325},[149,24393,24276],{"class":325},[149,24395,13099],{"class":162},[149,24397,3695],{"class":155},[149,24399,24400],{"class":151,"line":352},[149,24401,3749],{"class":155},[149,24403,24404,24407,24409,24411,24413],{"class":151,"line":1021},[149,24405,24406],{"class":155},"        m_A",[149,24408,166],{"class":325},[149,24410,322],{"class":309},[149,24412,1924],{"class":155},[149,24414,24415],{"class":295}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[149,24417,24418],{"class":151,"line":1035},[149,24419,24420],{"class":295},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[149,24422,24423,24425,24427,24429,24431],{"class":151,"line":1054},[149,24424,24289],{"class":155},[149,24426,2902],{"class":325},[149,24428,24294],{"class":169},[149,24430,2902],{"class":325},[149,24432,2924],{"class":155},[149,24434,24435],{"class":151,"line":1072},[149,24436,3906],{"class":155},[149,24438,24439,24441,24443,24445],{"class":151,"line":1090},[149,24440,12734],{"class":325},[149,24442,4101],{"class":325},[149,24444,17159],{"class":155},[149,24446,24447],{"class":295}," \u002F\u002F静态成员变量\n",[149,24449,24450,24452,24455],{"class":151,"line":1633},[149,24451,3704],{"class":325},[149,24453,24454],{"class":155}," m_B;",[149,24456,24457],{"class":295}," \u002F\u002F非静态成员变量\n",[149,24459,24460],{"class":151,"line":1644},[149,24461,4119],{"emptyLinePlaceholder":1800},[149,24463,24464],{"class":151,"line":3348},[149,24465,16933],{"class":325},[149,24467,24468],{"class":151,"line":3362},[149,24469,24082],{"class":295},[149,24471,24472,24474,24476,24478],{"class":151,"line":3367},[149,24473,12734],{"class":325},[149,24475,24276],{"class":325},[149,24477,15331],{"class":162},[149,24479,3695],{"class":155},[149,24481,24482],{"class":151,"line":3373},[149,24483,3749],{"class":155},[149,24485,24486,24488,24490,24493,24495],{"class":151,"line":3394},[149,24487,5169],{"class":155},[149,24489,2902],{"class":325},[149,24491,24492],{"class":169},"\"这是私有权限下的静态函数调用\"",[149,24494,2902],{"class":325},[149,24496,2924],{"class":155},[149,24498,24499],{"class":151,"line":3399},[149,24500,3906],{"class":155},[149,24502,24503],{"class":151,"line":3413},[149,24504,4119],{"emptyLinePlaceholder":1800},[149,24506,24507],{"class":151,"line":3418},[149,24508,4119],{"emptyLinePlaceholder":1800},[149,24510,24511],{"class":151,"line":3447},[149,24512,5713],{"class":155},[149,24514,24515,24517,24519,24521,24523,24525],{"class":151,"line":3452},[149,24516,1875],{"class":325},[149,24518,17280],{"class":162},[149,24520,23912],{"class":155},[149,24522,166],{"class":325},[149,24524,2056],{"class":309},[149,24526,841],{"class":155},[149,24528,24529,24531,24533],{"class":151,"line":3469},[149,24530,7080],{"class":325},[149,24532,7304],{"class":162},[149,24534,3695],{"class":155},[149,24536,24537],{"class":151,"line":3474},[149,24538,3270],{"class":155},[149,24540,24541],{"class":151,"line":3479},[149,24542,24323],{"class":295},[149,24544,24545],{"class":151,"line":3484},[149,24546,24328],{"class":295},[149,24548,24549],{"class":151,"line":3498},[149,24550,17024],{"class":155},[149,24552,24553,24555,24557],{"class":151,"line":3503},[149,24554,17576],{"class":155},[149,24556,13265],{"class":162},[149,24558,7352],{"class":155},[149,24560,24561],{"class":151,"line":4296},[149,24562,24345],{"class":295},[149,24564,24565,24567,24569,24571],{"class":151,"line":4310},[149,24566,20229],{"class":162},[149,24568,19442],{"class":155},[149,24570,13265],{"class":162},[149,24572,7352],{"class":155},[149,24574,24575],{"class":151,"line":4318},[149,24576,24577],{"class":295},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[149,24579,24580],{"class":151,"line":4323},[149,24581,355],{"class":155},[149,24583,24584,24586,24588],{"class":151,"line":4329},[149,24585,1875],{"class":325},[149,24587,3692],{"class":162},[149,24589,3695],{"class":155},[149,24591,24592],{"class":151,"line":4335},[149,24593,3270],{"class":155},[149,24595,24596,24598],{"class":151,"line":4340},[149,24597,7349],{"class":162},[149,24599,7352],{"class":155},[149,24601,24602],{"class":151,"line":9663},[149,24603,355],{"class":155},[19,24605,24607],{"id":24606},"_83c对象模型和this指针","8.3C++对象模型和this指针",[120,24609,24611],{"id":24610},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[24,24613,24614],{},"在c++中，类内的成员变量和成员函数分开存储",[24,24616,24617],{},"只有非静态成员变量才属于类的对象上",[24619,24620,24622],"h5",{"id":24621},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[140,24624,24626],{"className":1861,"code":24625,"language":1863,"meta":145,"style":145},"#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",[48,24627,24628,24635,24645,24651,24655,24659,24663,24671,24675,24679,24702,24706,24714,24718,24724],{"__ignoreMap":145},[149,24629,24630,24632],{"class":151,"line":152},[149,24631,3669],{"class":325},[149,24633,24634],{"class":169},"\u003Ciostraem>\n",[149,24636,24637,24639,24641,24643],{"class":151,"line":193},[149,24638,3677],{"class":325},[149,24640,3680],{"class":325},[149,24642,3683],{"class":162},[149,24644,841],{"class":155},[149,24646,24647,24649],{"class":151,"line":235},[149,24648,913],{"class":325},[149,24650,16882],{"class":162},[149,24652,24653],{"class":151,"line":340},[149,24654,3270],{"class":155},[149,24656,24657],{"class":151,"line":346},[149,24658,4119],{"emptyLinePlaceholder":1800},[149,24660,24661],{"class":151,"line":352},[149,24662,5713],{"class":155},[149,24664,24665,24667,24669],{"class":151,"line":1021},[149,24666,7080],{"class":325},[149,24668,7304],{"class":162},[149,24670,3695],{"class":155},[149,24672,24673],{"class":151,"line":1035},[149,24674,3270],{"class":155},[149,24676,24677],{"class":151,"line":1054},[149,24678,17024],{"class":155},[149,24680,24681,24683,24685,24688,24690,24693,24695,24697,24699],{"class":151,"line":1072},[149,24682,3275],{"class":155},[149,24684,2902],{"class":325},[149,24686,24687],{"class":169},"\"size of p=\"",[149,24689,2902],{"class":325},[149,24691,24692],{"class":162},"sizeoif",[149,24694,8255],{"class":155},[149,24696,2902],{"class":325},[149,24698,2967],{"class":155},[149,24700,24701],{"class":295}," \u002F\u002F查看这个空类的占用的内存空间\n",[149,24703,24704],{"class":151,"line":1090},[149,24705,355],{"class":155},[149,24707,24708,24710,24712],{"class":151,"line":1633},[149,24709,1875],{"class":325},[149,24711,3692],{"class":162},[149,24713,3695],{"class":155},[149,24715,24716],{"class":151,"line":1644},[149,24717,3270],{"class":155},[149,24719,24720,24722],{"class":151,"line":3348},[149,24721,7349],{"class":162},[149,24723,7352],{"class":155},[149,24725,24726],{"class":151,"line":3362},[149,24727,355],{"class":155},[24,24729,24730],{},"输出结果为：size of p=1",[24,24732,24733],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[24,24735,24736],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24619,24738,24740],{"id":24739},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[140,24742,24744],{"className":1861,"code":24743,"language":1863,"meta":145,"style":145},"#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",[48,24745,24746,24752,24762,24770,24774,24783,24787,24795,24799,24803,24822,24826,24830,24838,24842,24848],{"__ignoreMap":145},[149,24747,24748,24750],{"class":151,"line":152},[149,24749,3669],{"class":325},[149,24751,3672],{"class":169},[149,24753,24754,24756,24758,24760],{"class":151,"line":193},[149,24755,3677],{"class":325},[149,24757,3680],{"class":325},[149,24759,3683],{"class":162},[149,24761,841],{"class":155},[149,24763,24764,24766,24768],{"class":151,"line":235},[149,24765,913],{"class":325},[149,24767,17280],{"class":162},[149,24769,4393],{"class":155},[149,24771,24772],{"class":151,"line":340},[149,24773,3270],{"class":155},[149,24775,24776,24778,24780],{"class":151,"line":346},[149,24777,3704],{"class":325},[149,24779,17159],{"class":155},[149,24781,24782],{"class":295},"\u002F\u002F非静态成员变量\n",[149,24784,24785],{"class":151,"line":352},[149,24786,5713],{"class":155},[149,24788,24789,24791,24793],{"class":151,"line":1021},[149,24790,7080],{"class":325},[149,24792,7304],{"class":162},[149,24794,3695],{"class":155},[149,24796,24797],{"class":151,"line":1035},[149,24798,3270],{"class":155},[149,24800,24801],{"class":151,"line":1054},[149,24802,17024],{"class":155},[149,24804,24805,24807,24809,24811,24813,24815,24817,24819],{"class":151,"line":1072},[149,24806,3275],{"class":155},[149,24808,2902],{"class":325},[149,24810,24687],{"class":169},[149,24812,3097],{"class":325},[149,24814,8255],{"class":155},[149,24816,2902],{"class":325},[149,24818,2967],{"class":155},[149,24820,24821],{"class":295}," \u002F\u002F查看不是空对象时占用多少内存\n",[149,24823,24824],{"class":151,"line":1090},[149,24825,4119],{"emptyLinePlaceholder":1800},[149,24827,24828],{"class":151,"line":1633},[149,24829,355],{"class":155},[149,24831,24832,24834,24836],{"class":151,"line":1644},[149,24833,1875],{"class":325},[149,24835,3692],{"class":162},[149,24837,3695],{"class":155},[149,24839,24840],{"class":151,"line":3348},[149,24841,3270],{"class":155},[149,24843,24844,24846],{"class":151,"line":3362},[149,24845,7349],{"class":162},[149,24847,7352],{"class":155},[149,24849,24850],{"class":151,"line":3367},[149,24851,355],{"class":155},[24,24853,24854],{},"输出结果：size of p=4",[24,24856,24857],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[125,24859,24860],{},[45,24861,24862],{},"如果加上非静态成员变量，Person类修改如下",[140,24864,24866],{"className":1861,"code":24865,"language":1863,"meta":145,"style":145},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[48,24867,24868,24874,24878,24884,24892,24896,24901],{"__ignoreMap":145},[149,24869,24870,24872],{"class":151,"line":152},[149,24871,913],{"class":325},[149,24873,16882],{"class":162},[149,24875,24876],{"class":151,"line":193},[149,24877,3270],{"class":155},[149,24879,24880,24882],{"class":151,"line":235},[149,24881,3704],{"class":325},[149,24883,23102],{"class":155},[149,24885,24886,24888,24890],{"class":151,"line":340},[149,24887,12734],{"class":325},[149,24889,4101],{"class":325},[149,24891,23109],{"class":155},[149,24893,24894],{"class":151,"line":346},[149,24895,5713],{"class":155},[149,24897,24898],{"class":151,"line":352},[149,24899,24900],{"class":295},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[149,24902,24903,24905,24907,24909,24911,24913],{"class":151,"line":1021},[149,24904,1875],{"class":325},[149,24906,17280],{"class":162},[149,24908,24121],{"class":155},[149,24910,166],{"class":325},[149,24912,2056],{"class":309},[149,24914,841],{"class":155},[24,24916,24917],{},"输出结果：4",[24,24919,24920],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[125,24922,24923],{"start":193},[45,24924,24925],{},"加上非静态成员函数",[140,24927,24929],{"className":1861,"code":24928,"language":1863,"meta":145,"style":145},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[48,24930,24931,24938,24942,24948,24956,24960,24964,24968],{"__ignoreMap":145},[149,24932,24933,24935],{"class":151,"line":152},[149,24934,913],{"class":325},[149,24936,24937],{"class":162},"  Person\n",[149,24939,24940],{"class":151,"line":193},[149,24941,3270],{"class":155},[149,24943,24944,24946],{"class":151,"line":235},[149,24945,3704],{"class":325},[149,24947,23102],{"class":155},[149,24949,24950,24952,24954],{"class":151,"line":340},[149,24951,16621],{"class":325},[149,24953,13099],{"class":162},[149,24955,3695],{"class":155},[149,24957,24958],{"class":151,"line":346},[149,24959,3749],{"class":155},[149,24961,24962],{"class":151,"line":352},[149,24963,4119],{"emptyLinePlaceholder":1800},[149,24965,24966],{"class":151,"line":1021},[149,24967,3906],{"class":155},[149,24969,24970],{"class":151,"line":1035},[149,24971,5713],{"class":155},[24,24973,24974],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[125,24976,24977],{"start":235},[45,24978,24979],{},"加上静态成员函数",[140,24981,24983],{"className":1861,"code":24982,"language":1863,"meta":145,"style":145},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[48,24984,24985,24991,24995,25001,25009,25013,25017,25021,25032,25036,25040,25044],{"__ignoreMap":145},[149,24986,24987,24989],{"class":151,"line":152},[149,24988,913],{"class":325},[149,24990,24937],{"class":162},[149,24992,24993],{"class":151,"line":193},[149,24994,3270],{"class":155},[149,24996,24997,24999],{"class":151,"line":235},[149,24998,3704],{"class":325},[149,25000,23102],{"class":155},[149,25002,25003,25005,25007],{"class":151,"line":340},[149,25004,16621],{"class":325},[149,25006,13099],{"class":162},[149,25008,3695],{"class":155},[149,25010,25011],{"class":151,"line":346},[149,25012,3749],{"class":155},[149,25014,25015],{"class":151,"line":352},[149,25016,4119],{"emptyLinePlaceholder":1800},[149,25018,25019],{"class":151,"line":1021},[149,25020,3906],{"class":155},[149,25022,25023,25025,25027,25030],{"class":151,"line":1035},[149,25024,12734],{"class":325},[149,25026,24276],{"class":325},[149,25028,25029],{"class":162}," func1",[149,25031,3695],{"class":155},[149,25033,25034],{"class":151,"line":1054},[149,25035,3749],{"class":155},[149,25037,25038],{"class":151,"line":1072},[149,25039,4119],{"emptyLinePlaceholder":1800},[149,25041,25042],{"class":151,"line":1090},[149,25043,3906],{"class":155},[149,25045,25046],{"class":151,"line":1633},[149,25047,5713],{"class":155},[24,25049,24917],{},[24,25051,25052],{},"解释：静态成员函数也不属于类上",[1783,25054,9389],{},{"title":145,"searchDepth":193,"depth":193,"links":25056},[25057,25063],{"id":16358,"depth":193,"text":16359,"children":25058},[25059,25060,25061,25062],{"id":16362,"depth":235,"text":16363},{"id":17085,"depth":235,"text":17086},{"id":17257,"depth":235,"text":17258},{"id":17715,"depth":235,"text":17716},{"id":20087,"depth":193,"text":20088,"children":25064},[25065,25066,25067,25068,25069,25070,25071,25072,25073],{"id":20099,"depth":235,"text":20100},{"id":20392,"depth":235,"text":20393},{"id":20883,"depth":235,"text":20884},{"id":21980,"depth":235,"text":21981},{"id":22403,"depth":235,"text":22404},{"id":22882,"depth":235,"text":22883},{"id":23257,"depth":235,"text":23258},{"id":23670,"depth":235,"text":23671},{"id":24606,"depth":235,"text":24607},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16323,"description":25074},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25081,"title":1863,"body":25082,"description":1797,"extension":1798,"meta":25086,"navigation":1800,"path":25088,"seo":25089,"stem":25090,"__hash__":25091},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25083,"toc":25084},[],{"title":145,"searchDepth":193,"depth":193,"links":25085},[],{"category":25087},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1863,"description":1797},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25093,"title":25094,"body":25095,"description":145,"extension":1798,"meta":25685,"navigation":1800,"path":25686,"seo":25687,"stem":25688,"__hash__":25689},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25096,"toc":25667},[25097,25100,25104,25107,25110,25113,25131,25136,25139,25142,25145,25148,25153,25156,25161,25164,25167,25171,25174,25177,25183,25186,25204,25208,25212,25215,25220,25223,25227,25230,25243,25246,25250,25253,25256,25259,25284,25287,25296,25307,25322,25354,25358,25365,25373,25377,25380,25383,25388,25392,25395,25398,25403,25406,25410,25413,25416,25421,25424,25428,25433,25437,25503,25507,25510,25513,25516,25519,25522,25528,25549,25552,25566,25575,25579,25582,25585,25590,25593,25598,25603,25606,25609,25614,25619,25622,25627,25632,25635,25640,25645,25648,25651,25656,25659,25664],[10,25098,25094],{"id":25099},"_1强化学习基本认识",[14,25101,25103],{"id":25102},"_11什么是强化学习","1.1.什么是强化学习",[24,25105,25106],{},"强化学习有两部分组成：智能体和环境；",[24,25108,25109],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[24,25111,25112],{},"强化学习与监督学习的区别:",[125,25114,25115,25118,25121,25124],{},[45,25116,25117],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[45,25119,25120],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[45,25122,25123],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[45,25125,25126,25127,25130],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[31,25128,25129],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[24,25132,25133],{},[83,25134],{"alt":145,"src":25135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[24,25137,25138],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[24,25140,25141],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[24,25143,25144],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[24,25146,25147],{},"获取奖励",[24,25149,25150],{},[83,25151],{"alt":145,"src":25152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[24,25154,25155],{},"强化学习可以分成标准强化学习和深度强化学习",[24,25157,25158],{},[83,25159],{"alt":145,"src":25160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[24,25162,25163],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[24,25165,25166],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25168,25170],{"id":25169},"_12强化学习应用场景","1.2.强化学习应用场景",[24,25172,25173],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[24,25175,25176],{},"具身智能中的应用",[24,25178,25179,25182],{},[31,25180,25181],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[24,25184,25185],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[24,25187,25188,25189,25192,25193,25196,25197,25200,25201],{},"机器人是",[31,25190,25191],{},"躯体","，深度学习是",[31,25194,25195],{},"神经元****网络","，VLA是",[31,25198,25199],{},"通用的行为逻辑","，而强化学习是",[31,25202,25203],{},"教练",[14,25205,25207],{"id":25206},"_13序列决策","1.3.序列决策",[19,25209,25211],{"id":25210},"_131智能体与环境","1.3.1.智能体与环境",[24,25213,25214],{},"强化学习研究的问题是智能体agent与环境交互的问题",[24,25216,25217],{},[83,25218],{"alt":145,"src":25219},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[24,25221,25222],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[19,25224,25226],{"id":25225},"_132奖励","1.3.2.奖励",[24,25228,25229],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[24,25231,25232,25233,25242],{},"取某个策略的表现如何。强化学习的目的就是",[31,25234,25235,25236,25241],{},"最大化",[31,25237,25238],{},[31,25239,25240],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[24,25244,25245],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[19,25247,25249],{"id":25248},"_133序列决策","1.3.3.序列决策",[24,25251,25252],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[24,25254,25255],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[24,25257,25258],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[24,25260,25261,25265,25266,25268,25269,25271,25272,25274,25275,15508,25278,15508,25281],{},[25262,25263,25264],"em",{},"Ht"," = ",[25262,25267,2459],{},"1*, a",[25262,25270,830],{},", r",[25262,25273,830],{},", . . . ,* ",[25262,25276,25277],{},"ot",[25262,25279,25280],{},", at ,",[25262,25282,25283],{},"rt",[24,25285,25286],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[24,25288,25289,25265,25292,3378,25294,2292],{},[25262,25290,25291],{},"st",[25262,25293,1921],{},[25262,25295,25264],{},[24,25297,25298,25299,25302,25303,25306],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[31,25300,25301],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[31,25304,25305],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[24,25308,25309,25310,25313,25314,25317,25318,25321],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[31,25311,25312],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[31,25315,25316],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25262,25319,25320],{},"S, A, T, R, Ω, O, γ",")。",[24,25323,25324,25325,25327,25328,25330,25331,319,25333,25336,25337,25339,25340,319,25343,25346,25347,25349,25350,25353],{},"其中 ",[25262,25326,2551],{}," 表示状态空间，为隐变量，",[25262,25329,2096],{}," 为动作空间，",[25262,25332,2575],{},[25262,25334,25335],{},"s ′ |s, a",") 为状态转移概率，",[25262,25338,2526],{}," 为奖励函数，",[25262,25341,25342],{},"Ω",[25262,25344,25345],{},"o|s, a",") 为观测概率，",[25262,25348,2453],{}," 为观测空间，",[25262,25351,25352],{},"γ"," 为折扣因子。",[14,25355,25357],{"id":25356},"_14动作空间","1.4.动作空间",[24,25359,25360,25361,25364],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[31,25362,25363],{},"动作空间"," ，动作空间分为:",[125,25366,25367,25370],{},[45,25368,25369],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[45,25371,25372],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25374,25376],{"id":25375},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[24,25378,25379],{},"由策略、价值函数、模型三部分组成",[24,25381,25382],{},"这三者组成马尔可夫决策过程",[24,25384,25385],{},[83,25386],{"alt":145,"src":25387},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[19,25389,25391],{"id":25390},"_151策略","1.5.1.策略",[24,25393,25394],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[24,25396,25397],{},"策略可分为两种：",[24,25399,25400],{},[83,25401],{"alt":145,"src":25402},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[24,25404,25405],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[19,25407,25409],{"id":25408},"_152价值函数","1.5.2.价值函数",[24,25411,25412],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[24,25414,25415],{},"价值函数中有一个折扣因子，类似于存款利息",[24,25417,25418],{},[83,25419],{"alt":145,"src":25420},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[24,25422,25423],{},"进入某个状态采取的最优动作可以通过Q函数得到",[19,25425,25427],{"id":25426},"_153模型","1.5.3.模型",[24,25429,25430],{},[83,25431],{"alt":145,"src":25432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25434,25436],{"id":25435},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[2003,25438,25439,25449],{},[2006,25440,25441],{},[2009,25442,25443,25446],{},[2012,25444,25445],{"align":1566},"类型",[2012,25447,25448],{"align":1566},"特点",[2049,25450,25451,25461,25471,25481,25493],{},[2009,25452,25453,25458],{},[2054,25454,25455],{"align":1566},[31,25456,25457],{},"基于价值的智能体",[2054,25459,25460],{"align":1566},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[2009,25462,25463,25468],{},[2054,25464,25465],{"align":1566},[31,25466,25467],{},"基于策略的智能体",[2054,25469,25470],{"align":1566},"直接学习策略，没有学习价值函数",[2009,25472,25473,25478],{},[2054,25474,25475],{"align":1566},[31,25476,25477],{},"演员-评论员智能体",[2054,25479,25480],{"align":1566},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[2009,25482,25483,25488],{},[2054,25484,25485],{"align":1566},[31,25486,25487],{},"有模型强化学习智能体",[2054,25489,25490],{"align":1566},[83,25491],{"alt":145,"src":25492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[2009,25494,25495,25500],{},[2054,25496,25497],{"align":1566},[31,25498,25499],{},"免模型强化学习智能体",[2054,25501,25502],{"align":1566},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25504,25506],{"id":25505},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[24,25508,25509],{},"学习和规划是序列决策的两个基本问题",[24,25511,25512],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[24,25514,25515],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[24,25517,25518],{},"强化学习用到的库：Gym",[24,25520,25521],{},"Gym可以检验强化学习算法的优劣",[24,25523,25524,25527],{},[31,25525,25526],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[140,25529,25533],{"className":25530,"code":25531,"language":25532,"meta":145,"style":145},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[48,25534,25535],{"__ignoreMap":145},[149,25536,25537,25540,25543,25546],{"class":151,"line":152},[149,25538,25539],{"class":162},"pip",[149,25541,25542],{"class":169}," install",[149,25544,25545],{"class":169}," gym==",[149,25547,25548],{"class":309},"0.25.2\n",[24,25550,25551],{},"显示图形界面需要",[140,25553,25555],{"className":25530,"code":25554,"language":25532,"meta":145,"style":145},"pip install pygame\n",[48,25556,25557],{"__ignoreMap":145},[149,25558,25559,25561,25563],{"class":151,"line":152},[149,25560,25539],{"class":162},[149,25562,25542],{"class":169},[149,25564,25565],{"class":169}," pygame\n",[24,25567,25568,25569],{},"有关Gym库的相关文档介绍：",[2102,25570,25574],{"href":25571,"rel":25572},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25573],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25576,25578],{"id":25577},"_18一些补充基础概念","1.8.一些补充基础概念",[24,25580,25581],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[24,25583,25584],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[24,25586,25587],{},[83,25588],{"alt":145,"src":25589},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[24,25591,25592],{},"折扣率需要自己来设定",[24,25594,25595],{},[83,25596],{"alt":145,"src":25597},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[125,25599,25600],{},[45,25601,25602],{},"状态转移函数：",[24,25604,25605],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[24,25607,25608],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[24,25610,25611],{},[83,25612],{"alt":145,"src":25613},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[125,25615,25616],{"start":193},[45,25617,25618],{},"动作价值函数：",[24,25620,25621],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[24,25623,25624],{},[83,25625],{"alt":145,"src":25626},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[125,25628,25629],{"start":235},[45,25630,25631],{},"最优动作价值函数：",[24,25633,25634],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[24,25636,25637],{},[83,25638],{"alt":145,"src":25639},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[125,25641,25642],{"start":340},[45,25643,25644],{},"状态价值函数:",[24,25646,25647],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[24,25649,25650],{},"它衡量的是“一个具体动作”的长期价值",[24,25652,25653],{},[83,25654],{"alt":145,"src":25655},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[24,25657,25658],{},"几个价值函数之间的比较：",[24,25660,25661],{},[83,25662],{"alt":145,"src":25663},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1783,25665,25666],{},"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":145,"searchDepth":193,"depth":193,"links":25668},[25669,25670,25671,25676,25677,25682,25683,25684],{"id":25102,"depth":193,"text":25103},{"id":25169,"depth":193,"text":25170},{"id":25206,"depth":193,"text":25207,"children":25672},[25673,25674,25675],{"id":25210,"depth":235,"text":25211},{"id":25225,"depth":235,"text":25226},{"id":25248,"depth":235,"text":25249},{"id":25356,"depth":193,"text":25357},{"id":25375,"depth":193,"text":25376,"children":25678},[25679,25680,25681],{"id":25390,"depth":235,"text":25391},{"id":25408,"depth":235,"text":25409},{"id":25426,"depth":235,"text":25427},{"id":25435,"depth":193,"text":25436},{"id":25505,"depth":193,"text":25506},{"id":25577,"depth":193,"text":25578},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25094,"description":145},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25691,"title":25692,"body":25693,"description":25700,"extension":1798,"meta":25711,"navigation":1800,"path":25712,"seo":25713,"stem":25714,"__hash__":25715},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25694,"toc":25709},[25695,25698,25701,25706],[10,25696,25692],{"id":25697},"_2马尔可夫决策过程",[24,25699,25700],{},"这是强化学习的基本框架",[24,25702,25703],{},[83,25704],{"alt":145,"src":25705},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[24,25707,25708],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":145,"searchDepth":193,"depth":193,"links":25710},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25692,"description":25700},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25717,"title":25718,"body":25719,"description":145,"extension":1798,"meta":25835,"navigation":1800,"path":25836,"seo":25837,"stem":25838,"__hash__":25839},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25720,"toc":25830},[25721,25724,25728,25731,25736,25741,25744,25749,25752,25757,25760,25764,25769,25772,25777,25782,25787,25790,25794,25799,25802,25807,25812,25817,25822,25825],[10,25722,25718],{"id":25723},"_3动作价值函数",[14,25725,25727],{"id":25726},"_31dqn","3.1.DQN",[24,25729,25730],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[24,25732,25733],{},[83,25734],{"alt":145,"src":25735},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[24,25737,25738],{},[83,25739],{"alt":145,"src":25740},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[24,25742,25743],{},"DQN算法的描述：",[24,25745,25746],{},[83,25747],{"alt":145,"src":25748},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[24,25750,25751],{},"这里的Dense指的是全连接层",[24,25753,25754],{},[83,25755],{"alt":145,"src":25756},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[24,25758,25759],{},"当前观测的状态为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,25761,25763],{"id":25762},"_32dqn的举例","3.2.DQN的举例",[24,25765,25766],{},[83,25767],{"alt":145,"src":25768},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[24,25770,25771],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[24,25773,25774],{},[83,25775],{"alt":145,"src":25776},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[24,25778,25779],{},[83,25780],{"alt":145,"src":25781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[24,25783,25784],{},[83,25785],{"alt":145,"src":25786},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[24,25788,25789],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25791,25793],{"id":25792},"_33td算法","3.3.TD算法",[24,25795,25796],{},[83,25797],{"alt":145,"src":25798},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[24,25800,25801],{},"强化学习TD算法公式的粗略解释：",[24,25803,25804],{},[83,25805],{"alt":145,"src":25806},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[24,25808,25809],{},[83,25810],{"alt":145,"src":25811},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[24,25813,25814],{},[83,25815],{"alt":145,"src":25816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[24,25818,25819],{},[83,25820],{"alt":145,"src":25821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[24,25823,25824],{},"TD算法总结：",[24,25826,25827],{},[83,25828],{"alt":145,"src":25829},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":145,"searchDepth":193,"depth":193,"links":25831},[25832,25833,25834],{"id":25726,"depth":193,"text":25727},{"id":25762,"depth":193,"text":25763},{"id":25792,"depth":193,"text":25793},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25718,"description":145},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25841,"title":25842,"body":25843,"description":145,"extension":1798,"meta":26076,"navigation":1800,"path":26077,"seo":26078,"stem":26079,"__hash__":26080},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25844,"toc":26072},[25845,25848,25852,25855,25858,25863,25868,25871,25876,25881,25884,25889,25892,25897,25900,25905,25908,25913,25916,25921,25926,25929,25934,25937,25940,25945,25948,25953,25958,25962,25965,25968,25973,25978,25981,25986,25991,25994,25999,26002,26005,26010,26013,26018,26021,26026,26031,26034,26039,26044,26047,26052,26055,26060,26063],[10,25846,25842],{"id":25847},"_4策略学习",[14,25849,25851],{"id":25850},"_41概念描述","4.1.概念描述",[24,25853,25854],{},"用神经网络（策略网络）近似策略函数",[24,25856,25857],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[24,25859,25860],{},[83,25861],{"alt":145,"src":25862},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[24,25864,25865],{},[83,25866],{"alt":145,"src":25867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[24,25869,25870],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[24,25872,25873],{},[83,25874],{"alt":145,"src":25875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[24,25877,25878],{},[83,25879],{"alt":145,"src":25880},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[24,25882,25883],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[24,25885,25886],{},[83,25887],{"alt":145,"src":25888},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[24,25890,25891],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[24,25893,25894],{},[83,25895],{"alt":145,"src":25896},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[24,25898,25899],{},"改进theta要用到策略梯度算法",[24,25901,25902],{},[83,25903],{"alt":145,"src":25904},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[24,25906,25907],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[24,25909,25910],{},[83,25911],{"alt":145,"src":25912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[24,25914,25915],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[24,25917,25918],{},[83,25919],{"alt":145,"src":25920},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[24,25922,25923],{},[83,25924],{"alt":145,"src":25925},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[24,25927,25928],{},"梯度公式总结：",[24,25930,25931],{},[83,25932],{"alt":145,"src":25933},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[24,25935,25936],{},"两个公式的分别应用场景：",[24,25938,25939],{},"对于离散的动作：",[24,25941,25942],{},[83,25943],{"alt":145,"src":25944},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[24,25946,25947],{},"对于连续的动作：",[24,25949,25950],{},[83,25951],{"alt":145,"src":25952},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[24,25954,25955],{},[83,25956],{"alt":145,"src":25957},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25959,25961],{"id":25960},"_42概率梯度算法总结","4.2.概率梯度算法总结",[24,25963,25964],{},"使用蒙特卡洛来近似计算策略梯度",[24,25966,25967],{},"蒙特卡洛法的解释如下：",[24,25969,25970],{},[83,25971],{"alt":145,"src":25972},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[24,25974,25975],{},[83,25976],{"alt":145,"src":25977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[24,25979,25980],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[125,25982,25983],{},[45,25984,25985],{},"方法一：reinforce算法",[24,25987,25988],{},[83,25989],{"alt":145,"src":25990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[24,25992,25993],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[125,25995,25996],{"start":193},[45,25997,25998],{},"方法二：actor-critic算法",[24,26000,26001],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[24,26003,26004],{},"两个网络的构建：",[24,26006,26007],{},[83,26008],{"alt":145,"src":26009},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[24,26011,26012],{},"actor网路：",[24,26014,26015],{},[83,26016],{"alt":145,"src":26017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[24,26019,26020],{},"critic网络",[24,26022,26023],{},[83,26024],{"alt":145,"src":26025},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[125,26027,26028],{"start":235},[45,26029,26030],{},"网络的训练",[24,26032,26033],{},"网络描述",[24,26035,26036],{},[83,26037],{"alt":145,"src":26038},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[24,26040,26041],{},[83,26042],{"alt":145,"src":26043},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[24,26045,26046],{},"TD算法更新梯度：",[24,26048,26049],{},[83,26050],{"alt":145,"src":26051},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[24,26053,26054],{},"策略网络更新梯度：",[24,26056,26057],{},[83,26058],{"alt":145,"src":26059},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[24,26061,26062],{},"训练整个流程的具体描述：",[24,26064,26065,26068,26069],{},[83,26066],{"alt":145,"src":26067},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[83,26070],{"alt":145,"src":26071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":145,"searchDepth":193,"depth":193,"links":26073},[26074,26075],{"id":25850,"depth":193,"text":25851},{"id":25960,"depth":193,"text":25961},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25842,"description":145},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26082,"title":26083,"body":26084,"description":26091,"extension":1798,"meta":26141,"navigation":1800,"path":26142,"seo":26143,"stem":26144,"__hash__":26145},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26085,"toc":26137},[26086,26089,26092,26096,26099,26104,26108,26111,26116,26119,26124,26129,26132],[10,26087,26083],{"id":26088},"_5alphago算法",[24,26090,26091],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26093,26095],{"id":26094},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[24,26097,26098],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[24,26100,26101],{},[83,26102],{"alt":145,"src":26103},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26105,26107],{"id":26106},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[24,26109,26110],{},"采用强化学习的方式训练策略网络",[24,26112,26113],{},[83,26114],{"alt":145,"src":26115},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[24,26117,26118],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[24,26120,26121],{},[83,26122],{"alt":145,"src":26123},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[24,26125,26126],{},[83,26127],{"alt":145,"src":26128},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[24,26130,26131],{},"强化学习训练策略网络的总结：",[24,26133,26134],{},[83,26135],{"alt":145,"src":26136},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":145,"searchDepth":193,"depth":193,"links":26138},[26139,26140],{"id":26094,"depth":193,"text":26095},{"id":26106,"depth":193,"text":26107},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26083,"description":26091},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26147,"title":26148,"body":26149,"description":26156,"extension":1798,"meta":26159,"navigation":1800,"path":26160,"seo":26161,"stem":26162,"__hash__":26163},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26150,"toc":26157},[26151,26154],[10,26152,26148],{"id":26153},"_6价值网络",[24,26155,26156],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":145,"searchDepth":193,"depth":193,"links":26158},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26148,"description":26156},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26165,"title":26166,"body":26167,"description":26171,"extension":1798,"meta":26172,"navigation":1800,"path":26173,"seo":26174,"stem":26175,"__hash__":26176},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26168,"toc":26169},[],{"title":145,"searchDepth":193,"depth":193,"links":26170},[],"记录自己的强化学习笔记。",{"category":25087},"\u002Fwiki\u002F2025-12-04",{"title":26166,"description":26171},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26178,"title":26179,"body":26180,"description":1797,"extension":1798,"meta":26219,"navigation":1800,"path":26220,"seo":26221,"stem":26222,"__hash__":26223},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26181,"toc":26217},[26182,26185,26188,26194,26197,26203,26206,26211,26214],[10,26183,26179],{"id":26184},"_1-项目概览与官方资源",[24,26186,26187],{},"官方文档：",[24,26189,26190],{},[2102,26191,26192],{"href":26192,"rel":26193},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25573],[24,26195,26196],{},"官方代码仓库：",[24,26198,26199],{},[2102,26200,26201],{"href":26201,"rel":26202},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25573],[24,26204,26205],{},"复现大体流程：",[24,26207,26208],{},[83,26209],{"alt":145,"src":26210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[24,26212,26213],{},"本教程的目标是打通这条链路：",[24,26215,26216],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":145,"searchDepth":193,"depth":193,"links":26218},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26179,"description":1797},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26225,"title":26226,"body":26227,"description":1797,"extension":1798,"meta":26343,"navigation":1800,"path":26344,"seo":26345,"stem":26346,"__hash__":26347},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26228,"toc":26338},[26229,26232,26236,26239,26246,26250,26253,26262,26272,26276,26306,26309,26335],[10,26230,26226],{"id":26231},"_2-环境准备与设备连接",[14,26233,26235],{"id":26234},"_21-系统与环境","2.1 系统与环境",[24,26237,26238],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[24,26240,26241,26242,26245],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[48,26243,26244],{},"lerobot"," 依赖。",[14,26247,26249],{"id":26248},"_22-机械臂串口识别","2.2 机械臂串口识别",[24,26251,26252],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[140,26254,26256],{"className":25530,"code":26255,"language":25532,"meta":145,"style":145},"lerobot-find-out\n",[48,26257,26258],{"__ignoreMap":145},[149,26259,26260],{"class":151,"line":152},[149,26261,26255],{"class":162},[24,26263,26264,26265,2077,26268,26271],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[48,26266,26267],{},"\u002Fdev\u002FttyACM0",[48,26269,26270],{},"\u002Fdev\u002FttyACM1","）。",[14,26273,26275],{"id":26274},"_23-串口授权","2.3 串口授权",[140,26277,26279],{"className":25530,"code":26278,"language":25532,"meta":145,"style":145},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[48,26280,26281,26295],{"__ignoreMap":145},[149,26282,26283,26286,26289,26292],{"class":151,"line":152},[149,26284,26285],{"class":162},"sudo",[149,26287,26288],{"class":169}," chmod",[149,26290,26291],{"class":309}," 666",[149,26293,26294],{"class":169}," \u002Fdev\u002FttyACM0\n",[149,26296,26297,26299,26301,26303],{"class":151,"line":193},[149,26298,26285],{"class":162},[149,26300,26288],{"class":169},[149,26302,26291],{"class":309},[149,26304,26305],{"class":169}," \u002Fdev\u002FttyACM1\n",[24,26307,26308],{},"说明：",[42,26310,26311,26316,26322,26332],{},[45,26312,26313,26315],{},[48,26314,26285],{},"：以 root 权限执行命令。",[45,26317,26318,26321],{},[48,26319,26320],{},"chmod","：修改设备节点权限。",[45,26323,26324,26327,26328,26331],{},[48,26325,26326],{},"666","：",[48,26329,26330],{},"rw-rw-rw-","，所有用户可读写。",[45,26333,26334],{},"串口号必须替换为你机器上的真实端口。",[1783,26336,26337],{},"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":145,"searchDepth":193,"depth":193,"links":26339},[26340,26341,26342],{"id":26234,"depth":193,"text":26235},{"id":26248,"depth":193,"text":26249},{"id":26274,"depth":193,"text":26275},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26226,"description":1797},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26349,"title":26350,"body":26351,"description":1797,"extension":1798,"meta":26512,"navigation":1800,"path":26513,"seo":26514,"stem":26515,"__hash__":26516},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26352,"toc":26508},[26353,26357,26361,26367,26370,26427,26430,26434,26437,26505],[10,26354,26356],{"id":26355},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26358,26360],{"id":26359},"_31-配置电机-id","3.1 配置电机 ID",[24,26362,26363,26364,26366],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[48,26365,830],{},"，需要改成机械臂链路里不冲突的编号。",[24,26368,26369],{},"方式一：用 LeRobot 命令逐步写入。",[140,26371,26373],{"className":25530,"code":26372,"language":25532,"meta":145,"style":145},"# 主臂舵机配置 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",[48,26374,26375,26380,26388,26395,26400,26404,26409,26415,26422],{"__ignoreMap":145},[149,26376,26377],{"class":151,"line":152},[149,26378,26379],{"class":295},"# 主臂舵机配置 ID\n",[149,26381,26382,26385],{"class":151,"line":193},[149,26383,26384],{"class":162},"lerobot-setup-motors",[149,26386,26387],{"class":309}," \\\n",[149,26389,26390,26393],{"class":151,"line":235},[149,26391,26392],{"class":309},"  --teleop.type=so101_leader",[149,26394,26387],{"class":309},[149,26396,26397],{"class":151,"line":340},[149,26398,26399],{"class":309},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[149,26401,26402],{"class":151,"line":346},[149,26403,4119],{"emptyLinePlaceholder":1800},[149,26405,26406],{"class":151,"line":352},[149,26407,26408],{"class":295},"# 从臂舵机配置 ID\n",[149,26410,26411,26413],{"class":151,"line":1021},[149,26412,26384],{"class":162},[149,26414,26387],{"class":309},[149,26416,26417,26420],{"class":151,"line":1035},[149,26418,26419],{"class":309},"  --robot.type=so101_follower",[149,26421,26387],{"class":309},[149,26423,26424],{"class":151,"line":1054},[149,26425,26426],{"class":309},"  --robot.port=\u002Fdev\u002FttyACM1\n",[24,26428,26429],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26431,26433],{"id":26432},"_32-机械臂校准","3.2 机械臂校准",[24,26435,26436],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[140,26438,26440],{"className":25530,"code":26439,"language":25532,"meta":145,"style":145},"# 主臂校准\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",[48,26441,26442,26447,26454,26460,26467,26472,26476,26481,26487,26493,26500],{"__ignoreMap":145},[149,26443,26444],{"class":151,"line":152},[149,26445,26446],{"class":295},"# 主臂校准\n",[149,26448,26449,26452],{"class":151,"line":193},[149,26450,26451],{"class":162},"lerobot-calibrate",[149,26453,26387],{"class":309},[149,26455,26456,26458],{"class":151,"line":235},[149,26457,26392],{"class":309},[149,26459,26387],{"class":309},[149,26461,26462,26465],{"class":151,"line":340},[149,26463,26464],{"class":309},"  --teleop.port=\u002Fdev\u002FttyACM0",[149,26466,26387],{"class":309},[149,26468,26469],{"class":151,"line":346},[149,26470,26471],{"class":309},"  --teleop.id=my_awesome_leader_arm\n",[149,26473,26474],{"class":151,"line":352},[149,26475,4119],{"emptyLinePlaceholder":1800},[149,26477,26478],{"class":151,"line":1021},[149,26479,26480],{"class":295},"# 从臂校准\n",[149,26482,26483,26485],{"class":151,"line":1035},[149,26484,26451],{"class":162},[149,26486,26387],{"class":309},[149,26488,26489,26491],{"class":151,"line":1054},[149,26490,26419],{"class":309},[149,26492,26387],{"class":309},[149,26494,26495,26498],{"class":151,"line":1072},[149,26496,26497],{"class":309},"  --robot.port=\u002Fdev\u002FttyACM1",[149,26499,26387],{"class":309},[149,26501,26502],{"class":151,"line":1090},[149,26503,26504],{"class":309},"  --robot.id=my_awesome_follower_arm\n",[1783,26506,26507],{},"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":145,"searchDepth":193,"depth":193,"links":26509},[26510,26511],{"id":26359,"depth":193,"text":26360},{"id":26432,"depth":193,"text":26433},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26350,"description":1797},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26518,"title":26519,"body":26520,"description":1797,"extension":1798,"meta":26711,"navigation":1800,"path":26712,"seo":26713,"stem":26714,"__hash__":26715},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26521,"toc":26707},[26522,26525,26529,26576,26580,26593,26656,26659,26704],[10,26523,26519],{"id":26524},"_4-遥操与相机接入",[14,26526,26528],{"id":26527},"_41-不带相机遥操","4.1 不带相机遥操",[140,26530,26532],{"className":25530,"code":26531,"language":25532,"meta":145,"style":145},"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",[48,26533,26534,26541,26547,26553,26560,26566,26572],{"__ignoreMap":145},[149,26535,26536,26539],{"class":151,"line":152},[149,26537,26538],{"class":162},"lerobot-teleoperate",[149,26540,26387],{"class":309},[149,26542,26543,26545],{"class":151,"line":193},[149,26544,26419],{"class":309},[149,26546,26387],{"class":309},[149,26548,26549,26551],{"class":151,"line":235},[149,26550,26497],{"class":309},[149,26552,26387],{"class":309},[149,26554,26555,26558],{"class":151,"line":340},[149,26556,26557],{"class":309},"  --robot.id=my_awesome_follower_arm",[149,26559,26387],{"class":309},[149,26561,26562,26564],{"class":151,"line":346},[149,26563,26392],{"class":309},[149,26565,26387],{"class":309},[149,26567,26568,26570],{"class":151,"line":352},[149,26569,26464],{"class":309},[149,26571,26387],{"class":309},[149,26573,26574],{"class":151,"line":1021},[149,26575,26471],{"class":309},[14,26577,26579],{"id":26578},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[140,26581,26583],{"className":25530,"code":26582,"language":25532,"meta":145,"style":145},"lerobot-find-cameras opencv\n",[48,26584,26585],{"__ignoreMap":145},[149,26586,26587,26590],{"class":151,"line":152},[149,26588,26589],{"class":162},"lerobot-find-cameras",[149,26591,26592],{"class":169}," opencv\n",[140,26594,26596],{"className":25530,"code":26595,"language":25532,"meta":145,"style":145},"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",[48,26597,26598,26604,26610,26616,26622,26632,26638,26644,26651],{"__ignoreMap":145},[149,26599,26600,26602],{"class":151,"line":152},[149,26601,26538],{"class":162},[149,26603,26387],{"class":309},[149,26605,26606,26608],{"class":151,"line":193},[149,26607,26419],{"class":309},[149,26609,26387],{"class":309},[149,26611,26612,26614],{"class":151,"line":235},[149,26613,26497],{"class":309},[149,26615,26387],{"class":309},[149,26617,26618,26620],{"class":151,"line":340},[149,26619,26557],{"class":309},[149,26621,26387],{"class":309},[149,26623,26624,26627,26630],{"class":151,"line":346},[149,26625,26626],{"class":309},"  --robot.cameras=",[149,26628,26629],{"class":169},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[149,26631,26387],{"class":309},[149,26633,26634,26636],{"class":151,"line":352},[149,26635,26392],{"class":309},[149,26637,26387],{"class":309},[149,26639,26640,26642],{"class":151,"line":1021},[149,26641,26464],{"class":309},[149,26643,26387],{"class":309},[149,26645,26646,26649],{"class":151,"line":1035},[149,26647,26648],{"class":309},"  --teleop.id=my_awesome_leader_arm",[149,26650,26387],{"class":309},[149,26652,26653],{"class":151,"line":1054},[149,26654,26655],{"class":309},"  --display_data=true\n",[24,26657,26658],{},"相机参数说明：",[42,26660,26661,26667,26673,26682,26692,26698],{},[45,26662,26663,26666],{},[48,26664,26665],{},"front","：相机名称。",[45,26668,26669,26672],{},[48,26670,26671],{},"type: opencv","：相机驱动类型。",[45,26674,26675,26678,26679,26271],{},[48,26676,26677],{},"index_or_path","：设备编号或设备路径（如 ",[48,26680,26681],{},"\u002Fdev\u002Fvideo4",[45,26683,26684,26687,26688,26691],{},[48,26685,26686],{},"width"," \u002F ",[48,26689,26690],{},"height","：图像分辨率。",[45,26693,26694,26697],{},[48,26695,26696],{},"fps","：采样帧率。",[45,26699,26700,26703],{},[48,26701,26702],{},"--display_data=true","：启用实时可视化。",[1783,26705,26706],{},"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":145,"searchDepth":193,"depth":193,"links":26708},[26709,26710],{"id":26527,"depth":193,"text":26528},{"id":26578,"depth":193,"text":26579},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26519,"description":1797},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26717,"title":26718,"body":26719,"description":1797,"extension":1798,"meta":26891,"navigation":1800,"path":26892,"seo":26893,"stem":26894,"__hash__":26895},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26720,"toc":26886},[26721,26725,26729,26734,26739,26742,26784,26790,26794,26843,26848,26852,26855,26863,26868,26873,26878,26883],[10,26722,26724],{"id":26723},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26726,26728],{"id":26727},"_51-生成访问令牌","5.1 生成访问令牌",[24,26730,26731],{},[83,26732],{"alt":145,"src":26733},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[24,26735,26736],{},[83,26737],{"alt":145,"src":26738},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[24,26740,26741],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[140,26743,26745],{"className":25530,"code":26744,"language":25532,"meta":145,"style":145},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[48,26746,26747,26760],{"__ignoreMap":145},[149,26748,26749,26752,26755,26757],{"class":151,"line":152},[149,26750,26751],{"class":325},"export",[149,26753,26754],{"class":155}," HF_TOKEN",[149,26756,166],{"class":325},[149,26758,26759],{"class":169},"\"your_huggingface_token\"\n",[149,26761,26762,26765,26768,26771,26774,26776,26779,26781],{"class":151,"line":193},[149,26763,26764],{"class":162},"hf",[149,26766,26767],{"class":169}," auth",[149,26769,26770],{"class":169}," login",[149,26772,26773],{"class":309}," --token",[149,26775,11438],{"class":169},[149,26777,26778],{"class":155},"$HF_TOKEN",[149,26780,2115],{"class":169},[149,26782,26783],{"class":309}," --add-to-git-credential\n",[24,26785,26786,26789],{},[48,26787,26788],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26791,26793],{"id":26792},"_52-验证登录","5.2 验证登录",[140,26795,26797],{"className":25530,"code":26796,"language":25532,"meta":145,"style":145},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[48,26798,26799,26830],{"__ignoreMap":145},[149,26800,26801,26804,26806,26809,26811,26813,26816,26819,26822,26825,26828],{"class":151,"line":152},[149,26802,26803],{"class":155},"HF_USER",[149,26805,166],{"class":325},[149,26807,26808],{"class":155},"$(",[149,26810,26764],{"class":162},[149,26812,26767],{"class":169},[149,26814,26815],{"class":169}," whoami",[149,26817,26818],{"class":325}," |",[149,26820,26821],{"class":162}," head",[149,26823,26824],{"class":309}," -n",[149,26826,26827],{"class":309}," 1",[149,26829,1878],{"class":155},[149,26831,26832,26835,26837,26840],{"class":151,"line":193},[149,26833,26834],{"class":309},"echo",[149,26836,11438],{"class":169},[149,26838,26839],{"class":155},"$HF_USER",[149,26841,26842],{"class":169},"\"\n",[24,26844,26845],{},[83,26846],{"alt":145,"src":26847},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26849,26851],{"id":26850},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[24,26853,26854],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[42,26856,26857,26860],{},[45,26858,26859],{},"Dataset Repo（用于上传演示数据）",[45,26861,26862],{},"Model Repo（用于上传训练后的 ACT 权重）",[24,26864,26865],{},[83,26866],{"alt":145,"src":26867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[24,26869,26870],{},[83,26871],{"alt":145,"src":26872},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[24,26874,26875],{},[83,26876],{"alt":145,"src":26877},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[24,26879,26880],{},[83,26881],{"alt":145,"src":26882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1783,26884,26885],{},"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":145,"searchDepth":193,"depth":193,"links":26887},[26888,26889,26890],{"id":26727,"depth":193,"text":26728},{"id":26792,"depth":193,"text":26793},{"id":26850,"depth":193,"text":26851},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26718,"description":1797},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26897,"title":26898,"body":26899,"description":1797,"extension":1798,"meta":27096,"navigation":1800,"path":27097,"seo":27098,"stem":27099,"__hash__":27100},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26900,"toc":27091},[26901,26905,26909,27005,27013,27018,27022,27038,27041,27045,27088],[10,26902,26904],{"id":26903},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26906,26908],{"id":26907},"_61-录制示教数据","6.1 录制示教数据",[140,26910,26912],{"className":25530,"code":26911,"language":25532,"meta":145,"style":145},"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",[48,26913,26914,26921,26927,26933,26939,26948,26954,26960,26966,26973,26983,26990,27000],{"__ignoreMap":145},[149,26915,26916,26919],{"class":151,"line":152},[149,26917,26918],{"class":162},"lerobot-record",[149,26920,26387],{"class":309},[149,26922,26923,26925],{"class":151,"line":193},[149,26924,26419],{"class":309},[149,26926,26387],{"class":309},[149,26928,26929,26931],{"class":151,"line":235},[149,26930,26497],{"class":309},[149,26932,26387],{"class":309},[149,26934,26935,26937],{"class":151,"line":340},[149,26936,26557],{"class":309},[149,26938,26387],{"class":309},[149,26940,26941,26943,26946],{"class":151,"line":346},[149,26942,26626],{"class":309},[149,26944,26945],{"class":169},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[149,26947,26387],{"class":309},[149,26949,26950,26952],{"class":151,"line":352},[149,26951,26392],{"class":309},[149,26953,26387],{"class":309},[149,26955,26956,26958],{"class":151,"line":1021},[149,26957,26464],{"class":309},[149,26959,26387],{"class":309},[149,26961,26962,26964],{"class":151,"line":1035},[149,26963,26648],{"class":309},[149,26965,26387],{"class":309},[149,26967,26968,26971],{"class":151,"line":1054},[149,26969,26970],{"class":309},"  --display_data=true",[149,26972,26387],{"class":309},[149,26974,26975,26978,26981],{"class":151,"line":1072},[149,26976,26977],{"class":309},"  --dataset.repo_id=",[149,26979,26980],{"class":169},"\"Embodied-AI-6\u002Fso101_test\"",[149,26982,26387],{"class":309},[149,26984,26985,26988],{"class":151,"line":1090},[149,26986,26987],{"class":309},"  --dataset.num_episodes=10",[149,26989,26387],{"class":309},[149,26991,26992,26995,26998],{"class":151,"line":1633},[149,26993,26994],{"class":309},"  --dataset.single_task=",[149,26996,26997],{"class":169},"\"Grab the green cube\"",[149,26999,26387],{"class":309},[149,27001,27002],{"class":151,"line":1644},[149,27003,27004],{"class":309},"  --resume=true\n",[42,27006,27007],{},[45,27008,27009,27012],{},[48,27010,27011],{},"--resume=true","：已有同一数据集时继续追加 episode。",[24,27014,27015],{},[83,27016],{"alt":145,"src":27017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27019,27021],{"id":27020},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[140,27023,27025],{"className":25530,"code":27024,"language":25532,"meta":145,"style":145},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[48,27026,27027],{"__ignoreMap":145},[149,27028,27029,27032,27035],{"class":151,"line":152},[149,27030,27031],{"class":162},"rm",[149,27033,27034],{"class":309}," -rf",[149,27036,27037],{"class":169}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[24,27039,27040],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27042,27044],{"id":27043},"_63-回放指定-episode","6.3 回放指定 episode",[140,27046,27048],{"className":25530,"code":27047,"language":25532,"meta":145,"style":145},"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",[48,27049,27050,27057,27063,27069,27075,27083],{"__ignoreMap":145},[149,27051,27052,27055],{"class":151,"line":152},[149,27053,27054],{"class":162},"lerobot-replay",[149,27056,26387],{"class":309},[149,27058,27059,27061],{"class":151,"line":193},[149,27060,26419],{"class":309},[149,27062,26387],{"class":309},[149,27064,27065,27067],{"class":151,"line":235},[149,27066,26497],{"class":309},[149,27068,26387],{"class":309},[149,27070,27071,27073],{"class":151,"line":340},[149,27072,26557],{"class":309},[149,27074,26387],{"class":309},[149,27076,27077,27079,27081],{"class":151,"line":346},[149,27078,26977],{"class":309},[149,27080,26980],{"class":169},[149,27082,26387],{"class":309},[149,27084,27085],{"class":151,"line":352},[149,27086,27087],{"class":309},"  --dataset.episode=0\n",[1783,27089,27090],{},"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":145,"searchDepth":193,"depth":193,"links":27092},[27093,27094,27095],{"id":26907,"depth":193,"text":26908},{"id":27020,"depth":193,"text":27021},{"id":27043,"depth":193,"text":27044},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26898,"description":1797},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27102,"title":27103,"body":27104,"description":1797,"extension":1798,"meta":27232,"navigation":1800,"path":27233,"seo":27234,"stem":27235,"__hash__":27236},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27105,"toc":27230},[27106,27110,27173,27176,27223,27228],[10,27107,27109],{"id":27108},"_7-act-模型训练","7. ACT 模型训练",[140,27111,27113],{"className":25530,"code":27112,"language":25532,"meta":145,"style":145},"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",[48,27114,27115,27122,27130,27137,27144,27151,27158,27165],{"__ignoreMap":145},[149,27116,27117,27120],{"class":151,"line":152},[149,27118,27119],{"class":162},"lerobot-train",[149,27121,26387],{"class":309},[149,27123,27124,27126,27128],{"class":151,"line":193},[149,27125,26977],{"class":309},[149,27127,26980],{"class":169},[149,27129,26387],{"class":309},[149,27131,27132,27135],{"class":151,"line":235},[149,27133,27134],{"class":309},"  --policy.type=act",[149,27136,26387],{"class":309},[149,27138,27139,27142],{"class":151,"line":340},[149,27140,27141],{"class":309},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[149,27143,26387],{"class":309},[149,27145,27146,27149],{"class":151,"line":346},[149,27147,27148],{"class":309},"  --job_name=act_so101_test",[149,27150,26387],{"class":309},[149,27152,27153,27156],{"class":151,"line":352},[149,27154,27155],{"class":309},"  --policy.device=cuda",[149,27157,26387],{"class":309},[149,27159,27160,27163],{"class":151,"line":1021},[149,27161,27162],{"class":309},"  --wandb.enable=false",[149,27164,26387],{"class":309},[149,27166,27167,27170],{"class":151,"line":1035},[149,27168,27169],{"class":309},"  --policy.repo_id=",[149,27171,27172],{"class":169},"\"Embodied-AI-6\u002Flerobot_new\"\n",[24,27174,27175],{},"参数说明：",[42,27177,27178,27184,27190,27196,27202,27211,27217],{},[45,27179,27180,27183],{},[48,27181,27182],{},"--dataset.repo_id","：训练数据集仓库。",[45,27185,27186,27189],{},[48,27187,27188],{},"--policy.type=act","：策略模型类型为 ACT。",[45,27191,27192,27195],{},[48,27193,27194],{},"--output_dir","：本地训练输出目录。",[45,27197,27198,27201],{},[48,27199,27200],{},"--job_name","：训练任务名称。",[45,27203,27204,27207,27208,26271],{},[48,27205,27206],{},"--policy.device","：训练设备（如 ",[48,27209,27210],{},"cuda",[45,27212,27213,27216],{},[48,27214,27215],{},"--wandb.enable","：是否启用 WandB 可视化。",[45,27218,27219,27222],{},[48,27220,27221],{},"--policy.repo_id","：训练后模型推送目标仓库。",[24,27224,27225],{},[83,27226],{"alt":145,"src":27227},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1783,27229,27090],{},{"title":145,"searchDepth":193,"depth":193,"links":27231},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27103,"description":1797},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27238,"title":27239,"body":27240,"description":1797,"extension":1798,"meta":27327,"navigation":1800,"path":27328,"seo":27329,"stem":27330,"__hash__":27331},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27241,"toc":27325},[27242,27245,27248,27315,27323],[10,27243,27239],{"id":27244},"_8-策略部署与自动采集",[24,27246,27247],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[140,27249,27251],{"className":25530,"code":27250,"language":25532,"meta":145,"style":145},"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",[48,27252,27253,27259,27265,27271,27279,27285,27292,27300,27308],{"__ignoreMap":145},[149,27254,27255,27257],{"class":151,"line":152},[149,27256,26918],{"class":162},[149,27258,26387],{"class":309},[149,27260,27261,27263],{"class":151,"line":193},[149,27262,26419],{"class":309},[149,27264,26387],{"class":309},[149,27266,27267,27269],{"class":151,"line":235},[149,27268,26497],{"class":309},[149,27270,26387],{"class":309},[149,27272,27273,27275,27277],{"class":151,"line":340},[149,27274,26626],{"class":309},[149,27276,26945],{"class":169},[149,27278,26387],{"class":309},[149,27280,27281,27283],{"class":151,"line":346},[149,27282,26557],{"class":309},[149,27284,26387],{"class":309},[149,27286,27287,27290],{"class":151,"line":352},[149,27288,27289],{"class":309},"  --display_data=false",[149,27291,26387],{"class":309},[149,27293,27294,27296,27298],{"class":151,"line":1021},[149,27295,26977],{"class":309},[149,27297,26980],{"class":169},[149,27299,26387],{"class":309},[149,27301,27302,27304,27306],{"class":151,"line":1035},[149,27303,26994],{"class":309},[149,27305,26997],{"class":169},[149,27307,26387],{"class":309},[149,27309,27310,27313],{"class":151,"line":1054},[149,27311,27312],{"class":309},"  --policy.path=",[149,27314,27172],{"class":169},[42,27316,27317],{},[45,27318,27319,27322],{},[48,27320,27321],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1783,27324,27090],{},{"title":145,"searchDepth":193,"depth":193,"links":27326},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27239,"description":1797},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27333,"title":27334,"body":27335,"description":1797,"extension":1798,"meta":27364,"navigation":1800,"path":27365,"seo":27366,"stem":27367,"__hash__":27368},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27336,"toc":27362},[27337,27341,27344,27350,27353,27359],[10,27338,27340],{"id":27339},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[24,27342,27343],{},"项目地址：",[24,27345,27346],{},[2102,27347,27348],{"href":27348,"rel":27349},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25573],[24,27351,27352],{},"参考教程：",[24,27354,27355],{},[2102,27356,27357],{"href":27357,"rel":27358},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25573],[24,27360,27361],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":145,"searchDepth":193,"depth":193,"links":27363},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27334,"description":1797},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27370,"title":27371,"body":27372,"description":27376,"extension":1798,"meta":27377,"navigation":1800,"path":27378,"seo":27379,"stem":27380,"__hash__":27381},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27373,"toc":27374},[],{"title":145,"searchDepth":193,"depth":193,"links":27375},[],"act复现",{"category":25087},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27371,"description":27376},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27383,"title":27384,"body":27385,"description":145,"extension":1798,"meta":27687,"navigation":1800,"path":27688,"seo":27689,"stem":27690,"__hash__":27691},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27386,"toc":27679},[27387,27390,27394,27404,27411,27418,27421,27428,27431,27434,27438,27450,27454,27500,27503,27506,27509,27512,27515,27519,27557,27563,27567,27621,27626,27629,27632,27637,27640,27645,27648,27651,27655,27658,27661,27665],[10,27388,27384],{"id":27389},"_1简介",[19,27391,27393],{"id":27392},"_11什么是-docker","1.1什么是 Docker？",[24,27395,27396,27397,27400,27401],{},"Docker 是一个开源的 ",[31,27398,27399],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[31,27402,27403],{},"一次构建，到处运行。",[24,27405,27406,27407,27410],{},"“ ",[31,27408,27409],{},"一次构建，到处运行"," ”也就是说：",[125,27412,27413],{},[45,27414,27415],{},[31,27416,27417],{},"之前：",[24,27419,27420],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[125,27422,27423],{},[45,27424,27425],{},[31,27426,27427],{},"使用docker后：",[24,27429,27430],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[24,27432,27433],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[19,27435,27437],{"id":27436},"_12它是怎么工作的","1.2.它是怎么工作的？",[42,27439,27440,27443],{},[45,27441,27442],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[45,27444,27445,27446,27449],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[31,27447,27448],{},"无论在哪运行都一样稳定"," 。",[19,27451,27453],{"id":27452},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[2003,27455,27456,27466],{},[2006,27457,27458],{},[2009,27459,27460,27463],{},[2012,27461,27462],{"align":1566},"概念",[2012,27464,27465],{"align":1566},"解释",[2049,27467,27468,27476,27484,27492],{},[2009,27469,27470,27473],{},[2054,27471,27472],{"align":1566},"镜像",[2054,27474,27475],{"align":1566},"Image，运行容器的模板，像是一个应用快照",[2009,27477,27478,27481],{},[2054,27479,27480],{"align":1566},"容器",[2054,27482,27483],{"align":1566},"Container，运行中的镜像实例，有自己的文件系统、网络等",[2009,27485,27486,27489],{},[2054,27487,27488],{"align":1566},"Dockerfile",[2054,27490,27491],{"align":1566},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[2009,27493,27494,27497],{},[2054,27495,27496],{"align":1566},"仓库",[2054,27498,27499],{"align":1566},"Registry，存放镜像的地方，比如 Docker Hub",[24,27501,27502],{},"抽象化理解:",[24,27504,27505],{},"Docker镜像≈C++类",[24,27507,27508],{},"Docker容器≈C++类实例(即对象)",[24,27510,27511],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[24,27513,27514],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[19,27516,27518],{"id":27517},"_14类比理解","1.4.类比理解",[2003,27520,27521,27531],{},[2006,27522,27523],{},[2009,27524,27525,27528],{},[2012,27526,27527],{"align":1566},"传统部署",[2012,27529,27530],{"align":1566},"Docker部署",[2049,27532,27533,27541,27549],{},[2009,27534,27535,27538],{},[2054,27536,27537],{"align":1566},"手动安装依赖、调试版本不一致问题",[2054,27539,27540],{"align":1566},"一次打包环境和代码",[2009,27542,27543,27546],{},[2054,27544,27545],{"align":1566},"程序“裸奔”跑在系统上",[2054,27547,27548],{"align":1566},"程序“穿着容器”隔离运行",[2009,27550,27551,27554],{},[2054,27552,27553],{"align":1566},"容易“在我电脑上能跑”",[2054,27555,27556],{"align":1566},"保证“无论在哪都能跑”",[24,27558,27559,27560],{},"就像快递包裹： ",[31,27561,27562],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[19,27564,27566],{"id":27565},"_15docker-的核心优势","1.5.Docker 的核心优势",[2003,27568,27569,27579],{},[2006,27570,27571],{},[2009,27572,27573,27576],{},[2012,27574,27575],{"align":1566},"优势",[2012,27577,27578],{"align":1566},"说明",[2049,27580,27581,27589,27597,27605,27613],{},[2009,27582,27583,27586],{},[2054,27584,27585],{"align":1566},"轻量级",[2054,27587,27588],{"align":1566},"基于系统内核共享，启动速度快，占资源少",[2009,27590,27591,27594],{},[2054,27592,27593],{"align":1566},"跨平台",[2054,27595,27596],{"align":1566},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[2009,27598,27599,27602],{},[2054,27600,27601],{"align":1566},"易于迁移部署",[2054,27603,27604],{"align":1566},"应用和环境一起封装，不怕依赖不一致",[2009,27606,27607,27610],{},[2054,27608,27609],{"align":1566},"易于版本控制",[2054,27611,27612],{"align":1566},"镜像版本可控，支持回滚",[2009,27614,27615,27618],{},[2054,27616,27617],{"align":1566},"生态丰富",[2054,27619,27620],{"align":1566},"Docker Hub 上有成千上万的现成镜像可用",[125,27622,27623],{},[45,27624,27625],{},"在Linux上可以几乎实现无性能损失。",[24,27627,27628],{},"docker里的发行版和本机共用Linux内核。",[24,27630,27631],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[125,27633,27634],{},[45,27635,27636],{},"可以快速部署在绝大多数Linux发行版",[24,27638,27639],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[125,27641,27642],{},[45,27643,27644],{},"配置环境简单",[24,27646,27647],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[24,27649,27650],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[125,27652,27653],{},[45,27654,27617],{},[24,27656,27657],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[24,27659,27660],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[19,27662,27664],{"id":27663},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[42,27666,27667,27670,27673,27676],{},[45,27668,27669],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[45,27671,27672],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[45,27674,27675],{},"微服务架构：每个服务一个容器，灵活组合",[45,27677,27678],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":145,"searchDepth":193,"depth":193,"links":27680},[27681,27682,27683,27684,27685,27686],{"id":27392,"depth":235,"text":27393},{"id":27436,"depth":235,"text":27437},{"id":27452,"depth":235,"text":27453},{"id":27517,"depth":235,"text":27518},{"id":27565,"depth":235,"text":27566},{"id":27663,"depth":235,"text":27664},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27384,"description":145},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27693,"title":27694,"body":27695,"description":145,"extension":1798,"meta":28428,"navigation":1800,"path":28429,"seo":28430,"stem":28431,"__hash__":28432},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27696,"toc":28423},[27697,27700,27704,27707,27710,27716,27722,27726,27735,27738,27795,27798,27849,27852,27935,27938,27975,27979,27990,28003,28010,28013,28093,28096,28146,28149,28172,28176,28183,28186,28202,28208,28211,28227,28233,28236,28252,28266,28272,28292,28298,28301,28313,28319,28322,28336,28342,28345,28365,28370,28373,28376,28380,28383,28386,28389,28396,28399,28402,28405,28410,28415,28420],[10,27698,27694],{"id":27699},"_2安装docker",[19,27701,27703],{"id":27702},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[24,27705,27706],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[24,27708,27709],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[24,27711,27712],{},[2102,27713,27714],{"href":27714,"rel":27715},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25573],[24,27717,27718],{},[2102,27719,27720],{"href":27720,"rel":27721},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25573],[120,27723,27725],{"id":27724},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[24,27727,27728,27729,27734],{},"以下内容根据 ",[2102,27730,27733],{"href":27731,"rel":27732},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25573],"官方文档"," 修改而来。",[24,27736,27737],{},"如果你过去安装过 docker，先删掉：",[140,27739,27741],{"className":25530,"code":27740,"language":25532,"meta":145,"style":145},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[48,27742,27743],{"__ignoreMap":145},[149,27744,27745,27747,27750,27753,27756,27759,27762,27765,27768,27771,27774,27777,27780,27783,27786,27789,27792],{"class":151,"line":152},[149,27746,4743],{"class":325},[149,27748,27749],{"class":155}," pkg ",[149,27751,27752],{"class":325},"in",[149,27754,27755],{"class":169}," docker.io",[149,27757,27758],{"class":169}," docker-doc",[149,27760,27761],{"class":169}," docker-compose",[149,27763,27764],{"class":169}," docker-compose-v2",[149,27766,27767],{"class":169}," podman-docker",[149,27769,27770],{"class":169}," containerd",[149,27772,27773],{"class":169}," runc",[149,27775,27776],{"class":155},"; ",[149,27778,27779],{"class":325},"do",[149,27781,27782],{"class":162}," sudo",[149,27784,27785],{"class":169}," apt-get",[149,27787,27788],{"class":169}," remove",[149,27790,27791],{"class":155}," $pkg; ",[149,27793,27794],{"class":325},"done\n",[24,27796,27797],{},"首先安装依赖和GPG：",[140,27799,27803],{"className":27800,"code":27801,"language":27802,"meta":145,"style":145},"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",[48,27804,27805,27810,27815,27820,27825,27830,27835,27839,27844],{"__ignoreMap":145},[149,27806,27807],{"class":151,"line":152},[149,27808,27809],{},"# Add Docker's official GPG key:\n",[149,27811,27812],{"class":151,"line":193},[149,27813,27814],{},"sudo apt-get update\n",[149,27816,27817],{"class":151,"line":235},[149,27818,27819],{},"sudo apt-get install ca-certificates curl\n",[149,27821,27822],{"class":151,"line":340},[149,27823,27824],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[149,27826,27827],{"class":151,"line":346},[149,27828,27829],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[149,27831,27832],{"class":151,"line":352},[149,27833,27834],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[149,27836,27837],{"class":151,"line":1021},[149,27838,4119],{"emptyLinePlaceholder":1800},[149,27840,27841],{"class":151,"line":1035},[149,27842,27843],{},"# 如果上面这行报错就弄下面这行\n",[149,27845,27846],{"class":151,"line":1054},[149,27847,27848],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[24,27850,27851],{},"信任 Docker 的 GPG 公钥并添加仓库：",[140,27853,27855],{"className":25530,"code":27854,"language":25532,"meta":145,"style":145},"# 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",[48,27856,27857,27862,27868,27885,27918],{"__ignoreMap":145},[149,27858,27859],{"class":151,"line":152},[149,27860,27861],{"class":295},"# Add the repository to Apt sources:\n",[149,27863,27864,27866],{"class":151,"line":193},[149,27865,26834],{"class":309},[149,27867,26387],{"class":309},[149,27869,27870,27873,27876,27879,27882],{"class":151,"line":235},[149,27871,27872],{"class":169},"  \"deb [arch=$(",[149,27874,27875],{"class":162},"dpkg",[149,27877,27878],{"class":309}," --print-architecture",[149,27880,27881],{"class":169},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[149,27883,27884],{"class":309},"\\\n",[149,27886,27887,27890,27892,27894,27897,27900,27902,27904,27907,27909,27911,27914,27916],{"class":151,"line":340},[149,27888,27889],{"class":169},"  \"",[149,27891,26808],{"class":155},[149,27893,2421],{"class":309},[149,27895,27896],{"class":169}," \u002Fetc\u002Fos-release",[149,27898,27899],{"class":155}," && ",[149,27901,26834],{"class":309},[149,27903,11438],{"class":169},[149,27905,27906],{"class":155},"$VERSION_CODENAME",[149,27908,2115],{"class":169},[149,27910,2292],{"class":155},[149,27912,27913],{"class":169},"\" stable\"",[149,27915,26818],{"class":325},[149,27917,26387],{"class":309},[149,27919,27920,27923,27926,27929,27932],{"class":151,"line":346},[149,27921,27922],{"class":162},"  sudo",[149,27924,27925],{"class":169}," tee",[149,27927,27928],{"class":169}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[149,27930,27931],{"class":325}," >",[149,27933,27934],{"class":169}," \u002Fdev\u002Fnull\n",[24,27936,27937],{},"最后安装",[140,27939,27941],{"className":25530,"code":27940,"language":25532,"meta":145,"style":145},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[48,27942,27943,27952],{"__ignoreMap":145},[149,27944,27945,27947,27949],{"class":151,"line":152},[149,27946,26285],{"class":162},[149,27948,27785],{"class":169},[149,27950,27951],{"class":169}," update\n",[149,27953,27954,27956,27958,27960,27963,27966,27969,27972],{"class":151,"line":193},[149,27955,26285],{"class":162},[149,27957,27785],{"class":169},[149,27959,25542],{"class":169},[149,27961,27962],{"class":169}," docker-ce",[149,27964,27965],{"class":169}," docker-ce-cli",[149,27967,27968],{"class":169}," containerd.io",[149,27970,27971],{"class":169}," docker-buildx-plugin",[149,27973,27974],{"class":169}," docker-compose-plugin\n",[120,27976,27978],{"id":27977},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[24,27980,27981,27982,27985,27986,27989],{},"查看自己自己包管理工具版本（dnf是 ",[31,27983,27984],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[31,27987,27988],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[140,27991,27993],{"className":25530,"code":27992,"language":25532,"meta":145,"style":145},"dnf --version\n",[48,27994,27995],{"__ignoreMap":145},[149,27996,27997,28000],{"class":151,"line":152},[149,27998,27999],{"class":162},"dnf",[149,28001,28002],{"class":309}," --version\n",[24,28004,27728,28005,28009],{},[2102,28006,27733],{"href":28007,"rel":28008},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25573]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[24,28011,28012],{},"如果你之前安装过 docker，请先删掉",[140,28014,28016],{"className":25530,"code":28015,"language":25532,"meta":145,"style":145},"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",[48,28017,28018,28032,28039,28046,28053,28060,28067,28074,28081,28088],{"__ignoreMap":145},[149,28019,28020,28022,28025,28027,28030],{"class":151,"line":152},[149,28021,26285],{"class":162},[149,28023,28024],{"class":169}," dnf",[149,28026,27788],{"class":169},[149,28028,28029],{"class":169}," docker",[149,28031,26387],{"class":309},[149,28033,28034,28037],{"class":151,"line":193},[149,28035,28036],{"class":169},"                  docker-client",[149,28038,26387],{"class":309},[149,28040,28041,28044],{"class":151,"line":235},[149,28042,28043],{"class":169},"                  docker-client-latest",[149,28045,26387],{"class":309},[149,28047,28048,28051],{"class":151,"line":340},[149,28049,28050],{"class":169},"                  docker-common",[149,28052,26387],{"class":309},[149,28054,28055,28058],{"class":151,"line":346},[149,28056,28057],{"class":169},"                  docker-latest",[149,28059,26387],{"class":309},[149,28061,28062,28065],{"class":151,"line":352},[149,28063,28064],{"class":169},"                  docker-latest-logrotate",[149,28066,26387],{"class":309},[149,28068,28069,28072],{"class":151,"line":1021},[149,28070,28071],{"class":169},"                  docker-logrotate",[149,28073,26387],{"class":309},[149,28075,28076,28079],{"class":151,"line":1035},[149,28077,28078],{"class":169},"                  docker-selinux",[149,28080,26387],{"class":309},[149,28082,28083,28086],{"class":151,"line":1054},[149,28084,28085],{"class":169},"                  docker-engine-selinux",[149,28087,26387],{"class":309},[149,28089,28090],{"class":151,"line":1072},[149,28091,28092],{"class":169},"                  docker-engine\n",[24,28094,28095],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[140,28097,28099],{"className":25530,"code":28098,"language":25532,"meta":145,"style":145},"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",[48,28100,28101,28115,28130],{"__ignoreMap":145},[149,28102,28103,28105,28107,28110,28112],{"class":151,"line":152},[149,28104,26285],{"class":162},[149,28106,28024],{"class":169},[149,28108,28109],{"class":309}," -y",[149,28111,25542],{"class":169},[149,28113,28114],{"class":169}," dnf-plugins-core\n",[149,28116,28117,28119,28121,28124,28127],{"class":151,"line":193},[149,28118,26285],{"class":162},[149,28120,28024],{"class":169},[149,28122,28123],{"class":169}," config-manager",[149,28125,28126],{"class":169}," addrepo",[149,28128,28129],{"class":309}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[149,28131,28132,28134,28137,28140,28143],{"class":151,"line":235},[149,28133,26285],{"class":162},[149,28135,28136],{"class":169}," sed",[149,28138,28139],{"class":309}," -i",[149,28141,28142],{"class":169}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[149,28144,28145],{"class":169}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[24,28147,28148],{},"最后安装：",[140,28150,28152],{"className":25530,"code":28151,"language":25532,"meta":145,"style":145},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[48,28153,28154],{"__ignoreMap":145},[149,28155,28156,28158,28160,28162,28164,28166,28168,28170],{"class":151,"line":152},[149,28157,26285],{"class":162},[149,28159,28024],{"class":169},[149,28161,25542],{"class":169},[149,28163,27962],{"class":169},[149,28165,27965],{"class":169},[149,28167,27968],{"class":169},[149,28169,27971],{"class":169},[149,28171,27974],{"class":169},[19,28173,28175],{"id":28174},"_22配置环境","2.2.配置环境",[120,28177,28179,28182],{"id":28178},"_221检查-docker-服务状态",[31,28180,28181],{},"2.2.1.检查 Docker 服务状态"," ：",[24,28184,28185],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[140,28187,28189],{"className":25530,"code":28188,"language":25532,"meta":145,"style":145},"systemctl status docker\n",[48,28190,28191],{"__ignoreMap":145},[149,28192,28193,28196,28199],{"class":151,"line":152},[149,28194,28195],{"class":162},"systemctl",[149,28197,28198],{"class":169}," status",[149,28200,28201],{"class":169}," docker\n",[120,28203,28205,28182],{"id":28204},"_222启动-docker-服务",[31,28206,28207],{},"2.2.2.启动 Docker 服务",[24,28209,28210],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[140,28212,28214],{"className":25530,"code":28213,"language":25532,"meta":145,"style":145},"sudo systemctl start docker\n",[48,28215,28216],{"__ignoreMap":145},[149,28217,28218,28220,28223,28225],{"class":151,"line":152},[149,28219,26285],{"class":162},[149,28221,28222],{"class":169}," systemctl",[149,28224,5902],{"class":169},[149,28226,28201],{"class":169},[120,28228,28230,28182],{"id":28229},"_223设置-docker-开机自启",[31,28231,28232],{},"2.2.3.设置 Docker 开机自启",[24,28234,28235],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[140,28237,28239],{"className":25530,"code":28238,"language":25532,"meta":145,"style":145},"sudo systemctl enable docker\n",[48,28240,28241],{"__ignoreMap":145},[149,28242,28243,28245,28247,28250],{"class":151,"line":152},[149,28244,26285],{"class":162},[149,28246,28222],{"class":169},[149,28248,28249],{"class":169}," enable",[149,28251,28201],{"class":169},[120,28253,28255,15508,28258,15508,28263,28182],{"id":28254},"_224将用户添加到-docker-组",[31,28256,28257],{},"2.2.4.将用户添加到",[31,28259,28260],{},[48,28261,28262],{},"docker",[31,28264,28265],{},"组",[24,28267,28268,28269,28271],{},"使用以下命令将当前用户添加到 ",[48,28270,28262],{}," 组：",[140,28273,28275],{"className":25530,"code":28274,"language":25532,"meta":145,"style":145},"sudo usermod -aG docker $USER\n",[48,28276,28277],{"__ignoreMap":145},[149,28278,28279,28281,28284,28287,28289],{"class":151,"line":152},[149,28280,26285],{"class":162},[149,28282,28283],{"class":169}," usermod",[149,28285,28286],{"class":309}," -aG",[149,28288,28029],{"class":169},[149,28290,28291],{"class":155}," $USER\n",[120,28293,28295,28182],{"id":28294},"_225退出并重新登录",[31,28296,28297],{},"2.2.5.退出并重新登录",[24,28299,28300],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[140,28302,28304],{"className":25530,"code":28303,"language":25532,"meta":145,"style":145},"newgrp docker\n",[48,28305,28306],{"__ignoreMap":145},[149,28307,28308,28311],{"class":151,"line":152},[149,28309,28310],{"class":162},"newgrp",[149,28312,28201],{"class":169},[120,28314,28316,28182],{"id":28315},"_226重新启动-docker-服务如果需要",[31,28317,28318],{},"2.2.6.重新启动 Docker 服务（如果需要）",[24,28320,28321],{},"确保 Docker 服务正在运行，可以使用以下命令：",[140,28323,28324],{"className":25530,"code":28213,"language":25532,"meta":145,"style":145},[48,28325,28326],{"__ignoreMap":145},[149,28327,28328,28330,28332,28334],{"class":151,"line":152},[149,28329,26285],{"class":162},[149,28331,28222],{"class":169},[149,28333,5902],{"class":169},[149,28335,28201],{"class":169},[120,28337,28339,28182],{"id":28338},"_227重启电脑后检查-docker-服务状态",[31,28340,28341],{},"2.2.7.重启电脑后检查 Docker 服务状态",[24,28343,28344],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[140,28346,28348],{"className":25530,"code":28347,"language":25532,"meta":145,"style":145},"sudo reboot\nsystemctl status docker\n",[48,28349,28350,28357],{"__ignoreMap":145},[149,28351,28352,28354],{"class":151,"line":152},[149,28353,26285],{"class":162},[149,28355,28356],{"class":169}," reboot\n",[149,28358,28359,28361,28363],{"class":151,"line":193},[149,28360,28195],{"class":162},[149,28362,28198],{"class":169},[149,28364,28201],{"class":169},[24,28366,28367],{},[83,28368],{"alt":145,"src":28369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[24,28371,28372],{},"第三行显示enabled说明开机自启动成功",[24,28374,28375],{},"按q退出",[19,28377,28379],{"id":28378},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[24,28381,28382],{},"优先使用linux来使用docker是比较好的",[24,28384,28385],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[24,28387,28388],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[24,28390,28391,28392],{},"官方下载安装:",[2102,28393,28394],{"href":28394,"rel":28395},"https:\u002F\u002Fwww.docker.com\u002F",[25573],[24,28397,28398],{},"Windows的Docker显卡直通与USB直通:",[24,28400,28401],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[24,28403,28404],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[24,28406,28407],{},[83,28408],{"alt":145,"src":28409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[24,28411,28412],{},[83,28413],{"alt":145,"src":28414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[24,28416,28417],{},[83,28418],{"alt":145,"src":28419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1783,28421,28422],{},"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":145,"searchDepth":193,"depth":193,"links":28424},[28425,28426,28427],{"id":27702,"depth":235,"text":27703},{"id":28174,"depth":235,"text":28175},{"id":28378,"depth":235,"text":28379},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27694,"description":145},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28434,"title":28435,"body":28436,"description":28443,"extension":1798,"meta":29136,"navigation":1800,"path":29137,"seo":29138,"stem":29139,"__hash__":29140},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28437,"toc":29130},[28438,28441,28444,28448,28453,28458,28461,28489,28494,28503,28506,28511,28515,28522,28527,28533,28537,28540,28544,28549,28641,28646,28664,28669,28690,28695,28711,28715,28720,28749,28754,28800,28805,28849,28857,28874,28879,28895,28900,28914,28917,28920,28923,28926,28955,28958,28963,28967,28970,28973,28979,28982,28985,28988,29050,29057,29062,29065,29083,29087,29090,29107,29110,29113,29127],[10,28439,28435],{"id":28440},"_3docker直通",[24,28442,28443],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[19,28445,28447],{"id":28446},"_31usb直通","3.1.USB直通",[24,28449,28450],{},[83,28451],{"alt":145,"src":28452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[125,28454,28455],{},[45,28456,28457],{},"方法一(不是很推荐新手)：",[24,28459,28460],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[140,28462,28464],{"className":25530,"code":28463,"language":25532,"meta":145,"style":145},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[48,28465,28466,28474,28479],{"__ignoreMap":145},[149,28467,28468,28471],{"class":151,"line":152},[149,28469,28470],{"class":162},"ls",[149,28472,28473],{"class":169}," \u002Fdev\n",[149,28475,28476],{"class":151,"line":193},[149,28477,28478],{"class":295},"#例如\n",[149,28480,28481,28484,28486],{"class":151,"line":235},[149,28482,28483],{"class":155},"--device",[149,28485,166],{"class":325},[149,28487,28488],{"class":169},"\u002Fdev\u002Ftty_USB0\n",[125,28490,28491],{"start":193},[45,28492,28493],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[140,28495,28497],{"className":25530,"code":28496,"language":25532,"meta":145,"style":145},"--privileged\n",[48,28498,28499],{"__ignoreMap":145},[149,28500,28501],{"class":151,"line":152},[149,28502,28496],{"class":162},[24,28504,28505],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[24,28507,28508],{},[83,28509],{"alt":145,"src":28510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[19,28512,28514],{"id":28513},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[24,28516,28517,28518,28521],{},"NVIDIA Container Toolkit使用户 ",[31,28519,28520],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[24,28523,28524],{},[83,28525],{"alt":145,"src":28526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[24,28528,28529],{},[2102,28530,28531],{"href":28531,"rel":28532},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25573],[120,28534,28536],{"id":28535},"_321安装","3.2.1.安装",[24,28538,28539],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24619,28541,28543],{"id":28542},"_3211ubuntu","3.2.1.1.Ubuntu",[125,28545,28546],{},[45,28547,28548],{},"配置存储库 并更新",[140,28550,28552],{"className":25530,"code":28551,"language":25532,"meta":145,"style":145},"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",[48,28553,28554,28583,28603,28615,28627,28633],{"__ignoreMap":145},[149,28555,28556,28559,28562,28565,28567,28569,28572,28575,28578,28581],{"class":151,"line":152},[149,28557,28558],{"class":162},"curl",[149,28560,28561],{"class":309}," -fsSL",[149,28563,28564],{"class":169}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[149,28566,26818],{"class":325},[149,28568,27782],{"class":162},[149,28570,28571],{"class":169}," gpg",[149,28573,28574],{"class":309}," --dearmor",[149,28576,28577],{"class":309}," -o",[149,28579,28580],{"class":169}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[149,28582,26387],{"class":309},[149,28584,28585,28588,28590,28593,28596,28599,28601],{"class":151,"line":193},[149,28586,28587],{"class":155},"  && ",[149,28589,28558],{"class":162},[149,28591,28592],{"class":309}," -s",[149,28594,28595],{"class":309}," -L",[149,28597,28598],{"class":169}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[149,28600,26818],{"class":325},[149,28602,26387],{"class":309},[149,28604,28605,28608,28611,28613],{"class":151,"line":235},[149,28606,28607],{"class":162},"    sed",[149,28609,28610],{"class":169}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[149,28612,26818],{"class":325},[149,28614,26387],{"class":309},[149,28616,28617,28620,28622,28625],{"class":151,"line":340},[149,28618,28619],{"class":162},"    sudo",[149,28621,27925],{"class":169},[149,28623,28624],{"class":169}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[149,28626,26387],{"class":309},[149,28628,28629,28631],{"class":151,"line":346},[149,28630,28587],{"class":155},[149,28632,27884],{"class":309},[149,28634,28635,28637,28639],{"class":151,"line":352},[149,28636,28619],{"class":162},[149,28638,27785],{"class":169},[149,28640,27951],{"class":169},[125,28642,28643],{"start":193},[45,28644,28645],{},"安装nvidia-docker2",[140,28647,28649],{"className":25530,"code":28648,"language":25532,"meta":145,"style":145},"sudo apt-get install -y nvidia-docker2\n",[48,28650,28651],{"__ignoreMap":145},[149,28652,28653,28655,28657,28659,28661],{"class":151,"line":152},[149,28654,26285],{"class":162},[149,28656,27785],{"class":169},[149,28658,25542],{"class":169},[149,28660,28109],{"class":309},[149,28662,28663],{"class":169}," nvidia-docker2\n",[125,28665,28666],{"start":235},[45,28667,28668],{},"使用nvidia-ctk命令配置container runtime",[140,28670,28672],{"className":25530,"code":28671,"language":25532,"meta":145,"style":145},"sudo nvidia-ctk runtime configure --runtime=docker\n",[48,28673,28674],{"__ignoreMap":145},[149,28675,28676,28678,28681,28684,28687],{"class":151,"line":152},[149,28677,26285],{"class":162},[149,28679,28680],{"class":169}," nvidia-ctk",[149,28682,28683],{"class":169}," runtime",[149,28685,28686],{"class":169}," configure",[149,28688,28689],{"class":309}," --runtime=docker\n",[125,28691,28692],{"start":340},[45,28693,28694],{},"重启docker服务:",[140,28696,28698],{"className":25530,"code":28697,"language":25532,"meta":145,"style":145},"sudo systemctl restart docker\n",[48,28699,28700],{"__ignoreMap":145},[149,28701,28702,28704,28706,28709],{"class":151,"line":152},[149,28703,26285],{"class":162},[149,28705,28222],{"class":169},[149,28707,28708],{"class":169}," restart",[149,28710,28201],{"class":169},[24619,28712,28714],{"id":28713},"_3212fedora","3.2.1.2.Fedora",[125,28716,28717],{},[45,28718,28719],{},"配置存储库",[140,28721,28723],{"className":25530,"code":28722,"language":25532,"meta":145,"style":145},"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",[48,28724,28725,28740],{"__ignoreMap":145},[149,28726,28727,28729,28731,28733,28736,28738],{"class":151,"line":152},[149,28728,28558],{"class":162},[149,28730,28592],{"class":309},[149,28732,28595],{"class":309},[149,28734,28735],{"class":169}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[149,28737,26818],{"class":325},[149,28739,26387],{"class":309},[149,28741,28742,28744,28746],{"class":151,"line":193},[149,28743,26285],{"class":162},[149,28745,27925],{"class":169},[149,28747,28748],{"class":169}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[125,28750,28751],{"start":193},[45,28752,28753],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[140,28755,28757],{"className":25530,"code":28756,"language":25532,"meta":145,"style":145},"# 如果是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",[48,28758,28759,28764,28778,28782,28787],{"__ignoreMap":145},[149,28760,28761],{"class":151,"line":152},[149,28762,28763],{"class":295},"# 如果是RHEL或者Rocky（DNF4）\n",[149,28765,28766,28768,28770,28772,28775],{"class":151,"line":193},[149,28767,26285],{"class":162},[149,28769,28024],{"class":169},[149,28771,28123],{"class":169},[149,28773,28774],{"class":309}," --add-repo",[149,28776,28777],{"class":169}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[149,28779,28780],{"class":151,"line":235},[149,28781,4119],{"emptyLinePlaceholder":1800},[149,28783,28784],{"class":151,"line":340},[149,28785,28786],{"class":295},"# 如果是Feodra41+（DNF5）\n",[149,28788,28789,28791,28793,28795,28797],{"class":151,"line":346},[149,28790,26285],{"class":162},[149,28792,28024],{"class":169},[149,28794,28123],{"class":169},[149,28796,28126],{"class":169},[149,28798,28799],{"class":309}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[125,28801,28802],{"start":235},[45,28803,28804],{},"安装NVIDIA Container Toolki包",[140,28806,28808],{"className":25530,"code":28807,"language":25532,"meta":145,"style":145},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[48,28809,28810,28815,28828,28832,28837],{"__ignoreMap":145},[149,28811,28812],{"class":151,"line":152},[149,28813,28814],{"class":295},"# 如果是RHEL或者Rocky\n",[149,28816,28817,28819,28821,28823,28825],{"class":151,"line":193},[149,28818,26285],{"class":162},[149,28820,28024],{"class":169},[149,28822,25542],{"class":169},[149,28824,28109],{"class":309},[149,28826,28827],{"class":169}," nvidia-container-toolkit\n",[149,28829,28830],{"class":151,"line":235},[149,28831,4119],{"emptyLinePlaceholder":1800},[149,28833,28834],{"class":151,"line":340},[149,28835,28836],{"class":295},"# 如果是Fedora\n",[149,28838,28839,28841,28843,28845,28847],{"class":151,"line":346},[149,28840,26285],{"class":162},[149,28842,28024],{"class":169},[149,28844,25542],{"class":169},[149,28846,28109],{"class":309},[149,28848,28827],{"class":169},[125,28850,28851],{"start":340},[45,28852,28853,28854,28856],{},"安装nvidia-docker2 ： 在Fedora上使用",[48,28855,27999],{},"进行安装",[140,28858,28860],{"className":25530,"code":28859,"language":25532,"meta":145,"style":145},"sudo dnf install -y nvidia-docker2\n",[48,28861,28862],{"__ignoreMap":145},[149,28863,28864,28866,28868,28870,28872],{"class":151,"line":152},[149,28865,26285],{"class":162},[149,28867,28024],{"class":169},[149,28869,25542],{"class":169},[149,28871,28109],{"class":309},[149,28873,28663],{"class":169},[125,28875,28876],{"start":346},[45,28877,28878],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[140,28880,28881],{"className":25530,"code":28671,"language":25532,"meta":145,"style":145},[48,28882,28883],{"__ignoreMap":145},[149,28884,28885,28887,28889,28891,28893],{"class":151,"line":152},[149,28886,26285],{"class":162},[149,28888,28680],{"class":169},[149,28890,28683],{"class":169},[149,28892,28686],{"class":169},[149,28894,28689],{"class":309},[125,28896,28897],{"start":352},[45,28898,28899],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[140,28901,28902],{"className":25530,"code":28697,"language":25532,"meta":145,"style":145},[48,28903,28904],{"__ignoreMap":145},[149,28905,28906,28908,28910,28912],{"class":151,"line":152},[149,28907,26285],{"class":162},[149,28909,28222],{"class":169},[149,28911,28708],{"class":169},[149,28913,28201],{"class":169},[24,28915,28916],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[24,28918,28919],{},"方法：",[24,28921,28922],{},"1️⃣nvidia-smi",[24,28924,28925],{},"2️⃣运行nvidia cuda 容器进行测试",[140,28927,28929],{"className":25530,"code":28928,"language":25532,"meta":145,"style":145},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[48,28930,28931],{"__ignoreMap":145},[149,28932,28933,28935,28937,28940,28943,28946,28949,28952],{"class":151,"line":152},[149,28934,26285],{"class":162},[149,28936,28029],{"class":169},[149,28938,28939],{"class":169}," run",[149,28941,28942],{"class":309}," --rm",[149,28944,28945],{"class":309}," --gpus",[149,28947,28948],{"class":169}," all",[149,28950,28951],{"class":169}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[149,28953,28954],{"class":169}," nvidia-smi\n",[24,28956,28957],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[24,28959,28960],{},[83,28961],{"alt":145,"src":28962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[19,28964,28966],{"id":28965},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[24,28968,28969],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[24,28971,28972],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[24,28974,28975],{},[2102,28976,28977],{"href":28977,"rel":28978},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25573],[24,28980,28981],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[24,28983,28984],{},"我们只需要找到对应的Docker镜像当底包即可。",[24,28986,28987],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[2003,28989,28990,29006],{},[2006,28991,28992],{},[2009,28993,28994,28997,29000,29003],{},[2012,28995,28996],{"align":1566},"镜像类型",[2012,28998,28999],{"align":1566},"适用场景",[2012,29001,29002],{"align":1566},"示例标签",[2012,29004,29005],{"align":1566},"大小",[2049,29007,29008,29022,29036],{},[2009,29009,29010,29013,29016,29019],{},[2054,29011,29012],{"align":1566},"base",[2054,29014,29015],{"align":1566},"仅需 CUDA 运行时库",[2054,29017,29018],{"align":1566},"12.4.0-base-ubuntu22.04",[2054,29020,29021],{"align":1566},"~240MB",[2009,29023,29024,29027,29030,29033],{},[2054,29025,29026],{"align":1566},"runtime",[2054,29028,29029],{"align":1566},"部署编译后的应用（含数学库）",[2054,29031,29032],{"align":1566},"12.4.0-runtime-ubuntu22.04",[2054,29034,29035],{"align":1566},"~2GB",[2009,29037,29038,29041,29044,29047],{},[2054,29039,29040],{"align":1566},"devel",[2054,29042,29043],{"align":1566},"开发环境（含编译工具）",[2054,29045,29046],{"align":1566},"12.4.0-devel-ubuntu22.04",[2054,29048,29049],{"align":1566},"~3GB",[24,29051,29052,29053,29056],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[48,29054,29055],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[24,29058,29059],{},[83,29060],{"alt":145,"src":29061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[24,29063,29064],{},"在dockerfile里就可以开头这么写：",[140,29066,29068],{"className":25530,"code":29067,"language":25532,"meta":145,"style":145},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[48,29069,29070,29075],{"__ignoreMap":145},[149,29071,29072],{"class":151,"line":152},[149,29073,29074],{"class":295},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[149,29076,29077,29080],{"class":151,"line":193},[149,29078,29079],{"class":162},"FROM",[149,29081,29082],{"class":169}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[19,29084,29086],{"id":29085},"_34配置以太网","3.4.配置以太网",[24,29088,29089],{},"指定网络模式",[140,29091,29093],{"className":25530,"code":29092,"language":25532,"meta":145,"style":145},"--net=host \\\n",[48,29094,29095],{"__ignoreMap":145},[149,29096,29097,29100,29102,29105],{"class":151,"line":152},[149,29098,29099],{"class":155},"--net",[149,29101,166],{"class":325},[149,29103,29104],{"class":169},"host",[149,29106,26387],{"class":162},[24,29108,29109],{},"启动参数里加上这行即可。具体在下方",[24,29111,29112],{},"--net选项：指定网络模式，该选项有以下参数可选：",[42,29114,29115,29118,29121,29124],{},[45,29116,29117],{},"--net=bridge:默认选项，表示连接到默认的网桥",[45,29119,29120],{},"--net=host:容器使用宿主机的网络",[45,29122,29123],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[45,29125,29126],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1783,29128,29129],{},"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":145,"searchDepth":193,"depth":193,"links":29131},[29132,29133,29134,29135],{"id":28446,"depth":235,"text":28447},{"id":28513,"depth":235,"text":28514},{"id":28965,"depth":235,"text":28966},{"id":29085,"depth":235,"text":29086},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28435,"description":28443},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29142,"title":29143,"body":29144,"description":29151,"extension":1798,"meta":29157,"navigation":1800,"path":29158,"seo":29159,"stem":29160,"__hash__":29161},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29145,"toc":29155},[29146,29149,29152],[10,29147,29143],{"id":29148},"_4dockerhub换源",[24,29150,29151],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[24,29153,29154],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":145,"searchDepth":193,"depth":193,"links":29156},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29143,"description":29151},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29163,"title":29164,"body":29165,"description":145,"extension":1798,"meta":30174,"navigation":1800,"path":30175,"seo":30176,"stem":30177,"__hash__":30178},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29166,"toc":30169},[29167,29170,29174,29180,29184,29187,29527,29530,29533,29536,29541,29546,29549,29552,29555,29558,29577,29580,29591,29597,29779,29789,29805,30065,30067,30092,30107,30116,30166],[10,29168,29164],{"id":29169},"_5docker命令学习",[19,29171,29173],{"id":29172},"_51参考文档","5.1.参考文档",[24,29175,29176],{},[2102,29177,29178],{"href":29178,"rel":29179},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25573],[19,29181,29183],{"id":29182},"_52常用命令","5.2.常用命令",[24,29185,29186],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[2003,29188,29189,29202],{},[2006,29190,29191],{},[2009,29192,29193,29196,29199],{},[2012,29194,29195],{"align":1566},"命令",[2012,29197,29198],{"align":1566},"描述",[2012,29200,29201],{"align":1566},"示例",[2049,29203,29204,29215,29226,29237,29248,29259,29270,29281,29291,29302,29313,29324,29334,29345,29356,29367,29377,29387,29397,29407,29418,29429,29440,29451,29462,29473,29483,29494,29505,29516],{},[2009,29205,29206,29209,29212],{},[2054,29207,29208],{"align":1566},"docker run",[2054,29210,29211],{"align":1566},"创建并启动一个新的容器。",[2054,29213,29214],{"align":1566},"docker run -it ubuntu bash",[2009,29216,29217,29220,29223],{},[2054,29218,29219],{"align":1566},"docker build",[2054,29221,29222],{"align":1566},"通过指定的 Dockerfile 创建一个新的镜像。",[2054,29224,29225],{"align":1566},"docker build -t myimage .",[2009,29227,29228,29231,29234],{},[2054,29229,29230],{"align":1566},"docker pull",[2054,29232,29233],{"align":1566},"从 Docker 仓库拉取镜像。",[2054,29235,29236],{"align":1566},"docker pull ubuntu",[2009,29238,29239,29242,29245],{},[2054,29240,29241],{"align":1566},"docker push",[2054,29243,29244],{"align":1566},"将本地镜像推送到 Docker 仓库。",[2054,29246,29247],{"align":1566},"docker push myimage",[2009,29249,29250,29253,29256],{},[2054,29251,29252],{"align":1566},"docker stop",[2054,29254,29255],{"align":1566},"停止一个正在运行的容器。",[2054,29257,29258],{"align":1566},"docker stop container_id",[2009,29260,29261,29264,29267],{},[2054,29262,29263],{"align":1566},"docker start",[2054,29265,29266],{"align":1566},"启动一个已经存在的容器。",[2054,29268,29269],{"align":1566},"docker start container_id",[2009,29271,29272,29275,29278],{},[2054,29273,29274],{"align":1566},"docker restart",[2054,29276,29277],{"align":1566},"重新启动容器。",[2054,29279,29280],{"align":1566},"docker restart container_id",[2009,29282,29283,29286,29289],{},[2054,29284,29285],{"align":1566},"docker ps",[2054,29287,29288],{"align":1566},"列出当前正在运行的容器。",[2054,29290,29285],{"align":1566},[2009,29292,29293,29296,29299],{},[2054,29294,29295],{"align":1566},"docker rm",[2054,29297,29298],{"align":1566},"删除一个或多个停止的容器。",[2054,29300,29301],{"align":1566},"docker rm container_id",[2009,29303,29304,29307,29310],{},[2054,29305,29306],{"align":1566},"docker exec",[2054,29308,29309],{"align":1566},"在一个正在运行的容器中执行命令。",[2054,29311,29312],{"align":1566},"docker exec -it container_id bash",[2009,29314,29315,29318,29321],{},[2054,29316,29317],{"align":1566},"docker logs",[2054,29319,29320],{"align":1566},"查看容器的日志输出。",[2054,29322,29323],{"align":1566},"docker logs container_id",[2009,29325,29326,29329,29332],{},[2054,29327,29328],{"align":1566},"docker images",[2054,29330,29331],{"align":1566},"列出本地所有镜像。",[2054,29333,29328],{"align":1566},[2009,29335,29336,29339,29342],{},[2054,29337,29338],{"align":1566},"docker rmi",[2054,29340,29341],{"align":1566},"删除一个或多个镜像。",[2054,29343,29344],{"align":1566},"docker rmi myimage",[2009,29346,29347,29350,29353],{},[2054,29348,29349],{"align":1566},"docker network",[2054,29351,29352],{"align":1566},"管理 Docker 网络。",[2054,29354,29355],{"align":1566},"docker network ls",[2009,29357,29358,29361,29364],{},[2054,29359,29360],{"align":1566},"docker volume",[2054,29362,29363],{"align":1566},"管理 Docker 数据卷。",[2054,29365,29366],{"align":1566},"docker volume ls",[2009,29368,29369,29372,29375],{},[2054,29370,29371],{"align":1566},"docker-compose up",[2054,29373,29374],{"align":1566},"启动 docker-compose.yml 中定义的所有服务。",[2054,29376,29371],{"align":1566},[2009,29378,29379,29382,29385],{},[2054,29380,29381],{"align":1566},"docker-compose down",[2054,29383,29384],{"align":1566},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[2054,29386,29381],{"align":1566},[2009,29388,29389,29392,29395],{},[2054,29390,29391],{"align":1566},"docker info",[2054,29393,29394],{"align":1566},"显示 Docker 系统的详细信息。",[2054,29396,29391],{"align":1566},[2009,29398,29399,29402,29405],{},[2054,29400,29401],{"align":1566},"docker stats",[2054,29403,29404],{"align":1566},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[2054,29406,29401],{"align":1566},[2009,29408,29409,29412,29415],{},[2054,29410,29411],{"align":1566},"docker inspect",[2054,29413,29414],{"align":1566},"查看容器或镜像的详细信息（JSON 格式）。",[2054,29416,29417],{"align":1566},"docker inspect container_id",[2009,29419,29420,29423,29426],{},[2054,29421,29422],{"align":1566},"docker save",[2054,29424,29425],{"align":1566},"将一个镜像保存为 tar 文件。",[2054,29427,29428],{"align":1566},"docker save -o myimage.tar myimage",[2009,29430,29431,29434,29437],{},[2054,29432,29433],{"align":1566},"docker load",[2054,29435,29436],{"align":1566},"从 tar 文件中加载镜像。",[2054,29438,29439],{"align":1566},"docker load -i myimage.tar",[2009,29441,29442,29445,29448],{},[2054,29443,29444],{"align":1566},"docker tag",[2054,29446,29447],{"align":1566},"为镜像添加标签（tag）。",[2054,29449,29450],{"align":1566},"docker tag myimage myimage:v1",[2009,29452,29453,29456,29459],{},[2054,29454,29455],{"align":1566},"docker buildx build",[2054,29457,29458],{"align":1566},"使用 Buildx 构建多架构镜像。",[2054,29460,29461],{"align":1566},"docker buildx build -t myimage .",[2009,29463,29464,29467,29470],{},[2054,29465,29466],{"align":1566},"docker buildx create",[2054,29468,29469],{"align":1566},"创建一个新的 Buildx 构建实例。",[2054,29471,29472],{"align":1566},"docker buildx create –use",[2009,29474,29475,29478,29481],{},[2054,29476,29477],{"align":1566},"docker buildx ls",[2054,29479,29480],{"align":1566},"列出所有可用的 Buildx 构建实例。",[2054,29482,29477],{"align":1566},[2009,29484,29485,29488,29491],{},[2054,29486,29487],{"align":1566},"docker buildx use",[2054,29489,29490],{"align":1566},"设置当前的 Buildx 构建实例。",[2054,29492,29493],{"align":1566},"docker buildx use mybuilder",[2009,29495,29496,29499,29502],{},[2054,29497,29498],{"align":1566},"docker buildx bake",[2054,29500,29501],{"align":1566},"使用 Bake 文件批量构建镜像。",[2054,29503,29504],{"align":1566},"docker buildx bake -f bake.hcl",[2009,29506,29507,29510,29513],{},[2054,29508,29509],{"align":1566},"docker buildx build –push",[2054,29511,29512],{"align":1566},"构建镜像并推送到镜像仓库。",[2054,29514,29515],{"align":1566},"docker buildx build –push -t myimage .",[2009,29517,29518,29521,29524],{},[2054,29519,29520],{"align":1566},"docker buildx build –platform",[2054,29522,29523],{"align":1566},"构建镜像并为多个平台生成支持。",[2054,29525,29526],{"align":1566},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[24,29528,29529],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[24,29531,29532],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[24,29534,29535],{},"docker images 可以查看已经下载的镜像",[24,29537,29538],{},[83,29539],{"alt":145,"src":29540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[24,29542,29543],{},[31,29544,29545],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[24,29547,29548],{},"docker rmi $(docker images -q) 删除所有的镜像",[24,29550,29551],{},"docker container logs 查看容器日志",[24,29553,29554],{},"docker top 查看容器里的进程",[24,29556,29557],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[140,29559,29561],{"className":25530,"code":29560,"language":25532,"meta":145,"style":145},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[48,29562,29563],{"__ignoreMap":145},[149,29564,29565,29568,29571,29574],{"class":151,"line":152},[149,29566,29567],{"class":162},"如：docker",[149,29569,29570],{"class":169}," cp",[149,29572,29573],{"class":169}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[149,29575,29576],{"class":169}," \u002Fmydata\u002Fnginx\n",[24,29578,29579],{},"docker run时在启动容器的时候会有几个常用的选项：",[42,29581,29582,29585,29588],{},[45,29583,29584],{},"-d选项：表示后台运行",[45,29586,29587],{},"-P选项：随机端口映射",[45,29589,29590],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[19,29592,29594],{"id":29593},"_53run命令的参数非常重要",[31,29595,29596],{},"5.3.run命令的参数（非常重要）",[2003,29598,29599,29612],{},[2006,29600,29601],{},[2009,29602,29603,29606,29609],{},[2012,29604,29605],{"align":1566},"参数\u002F配置",[2012,29607,29608],{"align":1566},"功能说明",[2012,29610,29611],{"align":1566},"重要性与参考依据",[2049,29613,29614,29625,29636,29647,29658,29669,29680,29691,29702,29713,29724,29735,29746,29757,29768],{},[2009,29615,29616,29619,29622],{},[2054,29617,29618],{"align":1566},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[2054,29620,29621],{"align":1566},"指定容器名称，便于后续管理",[2054,29623,29624],{"align":1566},"替代随机生成的容器名。",[2009,29626,29627,29630,29633],{},[2054,29628,29629],{"align":1566},"–gpus all",[2054,29631,29632],{"align":1566},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[2054,29634,29635],{"align":1566},"用于CUDA加速等GPU依赖任务。",[2009,29637,29638,29641,29644],{},[2054,29639,29640],{"align":1566},"-e NVIDIA_DRIVER_CAPABILITIES=all",[2054,29642,29643],{"align":1566},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[2054,29645,29646],{"align":1566},"确保容器内GPU功能完整67。",[2009,29648,29649,29652,29655],{},[2054,29650,29651],{"align":1566},"-dit",[2054,29653,29654],{"align":1566},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[2054,29656,29657],{"align":1566},"允许容器在后台运行并支持交互操作。",[2009,29659,29660,29663,29666],{},[2054,29661,29662],{"align":1566},"–privileged",[2054,29664,29665],{"align":1566},"赋予容器完全主机权限（可访问设备、内核模块等）",[2054,29667,29668],{"align":1566},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[2009,29670,29671,29674,29677],{},[2054,29672,29673],{"align":1566},"–net=host",[2054,29675,29676],{"align":1566},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[2054,29678,29679],{"align":1566},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[2009,29681,29682,29685,29688],{},[2054,29683,29684],{"align":1566},"–group-add audio–group-add video–group-add dialout",[2054,29686,29687],{"align":1566},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[2054,29689,29690],{"align":1566},"避免权限问题（如避免无法调用摄像头、麦克风）。",[2009,29692,29693,29696,29699],{},[2054,29694,29695],{"align":1566},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[2054,29697,29698],{"align":1566},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[2054,29700,29701],{"align":1566},"支持容器内运行图形界面应用（如OpenCV可视化）。",[2009,29703,29704,29707,29710],{},[2054,29705,29706],{"align":1566},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[2054,29708,29709],{"align":1566},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[2054,29711,29712],{"align":1566},"实现容器内图形显示。",[2009,29714,29715,29718,29721],{},[2054,29716,29717],{"align":1566},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[2054,29719,29720],{"align":1566},"挂载X11认证文件（只读）",[2054,29722,29723],{"align":1566},"确保容器有权连接宿主机显示服务。",[2009,29725,29726,29729,29732],{},[2054,29727,29728],{"align":1566},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[2054,29730,29731],{"align":1566},"挂载Wayland显示协议相关目录",[2054,29733,29734],{"align":1566},"支持Wayland协议的图形显示。",[2009,29736,29737,29740,29743],{},[2054,29738,29739],{"align":1566},"–ulimit nofile=1024:524288",[2054,29741,29742],{"align":1566},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[2054,29744,29745],{"align":1566},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[2009,29747,29748,29751,29754],{},[2054,29749,29750],{"align":1566},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[2054,29752,29753],{"align":1566},"挂载宿主机用户目录到容器内同名路径",[2054,29755,29756],{"align":1566},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[2009,29758,29759,29762,29765],{},[2054,29760,29761],{"align":1566},"-w \u002Fhome\u002Ftungchiahui",[2054,29763,29764],{"align":1566},"设置容器启动后的默认工作目录",[2054,29766,29767],{"align":1566},"直接进入项目路径，方便执行命令2324。",[2009,29769,29770,29773,29776],{},[2054,29771,29772],{"align":1566},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[2054,29774,29775],{"align":1566},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[2054,29777,29778],{"align":1566},"提供预配置的深度学习与机器人开发环境。",[24,29780,29781,29782,29784,29785,29788],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[48,29783,26285],{},"加不加",[48,29786,29787],{},"sudo -E","都无所谓。",[24,29790,29791,29792,29794,29795,29797,29798,29801,29802,29804],{},"用户已经被加到docker组了，不用",[48,29793,26285],{},"也行跑，其次，",[48,29796,26285],{},"运行的话，你的",[48,29799,29800],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[48,29803,29800],{},"更不可能变了。",[140,29806,29808],{"className":25530,"code":29807,"language":25532,"meta":145,"style":145},"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",[48,29809,29810,29823,29832,29842,29854,29861,29868,29875,29884,29892,29901,29915,29927,29939,29948,29958,29967,29982,30015,30042,30053,30060],{"__ignoreMap":145},[149,29811,29812,29814,29816,29818,29821],{"class":151,"line":152},[149,29813,26285],{"class":162},[149,29815,28029],{"class":169},[149,29817,28939],{"class":169},[149,29819,29820],{"class":309}," --name=ros_opencv_cuda",[149,29822,26387],{"class":309},[149,29824,29825,29828,29830],{"class":151,"line":193},[149,29826,29827],{"class":155},"--gpus ",[149,29829,1714],{"class":169},[149,29831,26387],{"class":309},[149,29833,29834,29837,29840],{"class":151,"line":235},[149,29835,29836],{"class":155},"-e ",[149,29838,29839],{"class":169},"NVIDIA_DRIVER_CAPABILITIES=all",[149,29841,26387],{"class":309},[149,29843,29844,29846,29849,29852],{"class":151,"line":340},[149,29845,29836],{"class":155},[149,29847,29848],{"class":169},"DISPLAY=",[149,29850,29851],{"class":155},"$DISPLAY ",[149,29853,27884],{"class":309},[149,29855,29856,29859],{"class":151,"line":346},[149,29857,29858],{"class":155},"-dit ",[149,29860,27884],{"class":309},[149,29862,29863,29866],{"class":151,"line":352},[149,29864,29865],{"class":155},"--privileged ",[149,29867,27884],{"class":309},[149,29869,29870,29873],{"class":151,"line":1021},[149,29871,29872],{"class":155},"--net=host ",[149,29874,27884],{"class":309},[149,29876,29877,29880,29882],{"class":151,"line":1035},[149,29878,29879],{"class":155},"--group-add ",[149,29881,113],{"class":169},[149,29883,26387],{"class":309},[149,29885,29886,29888,29890],{"class":151,"line":1054},[149,29887,29879],{"class":155},[149,29889,117],{"class":169},[149,29891,26387],{"class":309},[149,29893,29894,29896,29899],{"class":151,"line":1072},[149,29895,29879],{"class":155},[149,29897,29898],{"class":169},"dialout",[149,29900,26387],{"class":309},[149,29902,29903,29905,29908,29910,29913],{"class":151,"line":1090},[149,29904,29836],{"class":155},[149,29906,29907],{"class":169},"XAUTHORITY=",[149,29909,29800],{"class":155},[149,29911,29912],{"class":169},"\u002F.Xauthority",[149,29914,26387],{"class":309},[149,29916,29917,29919,29922,29925],{"class":151,"line":1633},[149,29918,29836],{"class":155},[149,29920,29921],{"class":169},"WAYLAND_DISPLAY=",[149,29923,29924],{"class":155},"$WAYLAND_DISPLAY ",[149,29926,27884],{"class":309},[149,29928,29929,29931,29934,29937],{"class":151,"line":1644},[149,29930,29836],{"class":155},[149,29932,29933],{"class":169},"XDG_RUNTIME_DIR=",[149,29935,29936],{"class":155},"$XDG_RUNTIME_DIR ",[149,29938,27884],{"class":309},[149,29940,29941,29943,29946],{"class":151,"line":3348},[149,29942,29836],{"class":155},[149,29944,29945],{"class":169},"QT_QPA_PLATFORM=xcb",[149,29947,26387],{"class":309},[149,29949,29950,29953,29956],{"class":151,"line":3362},[149,29951,29952],{"class":155},"-v ",[149,29954,29955],{"class":169},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[149,29957,26387],{"class":309},[149,29959,29960,29962,29965],{"class":151,"line":3367},[149,29961,29952],{"class":155},[149,29963,29964],{"class":169},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[149,29966,26387],{"class":309},[149,29968,29969,29972,29975,29977,29980],{"class":151,"line":3373},[149,29970,29971],{"class":155},"-v $HOME",[149,29973,29974],{"class":169},"\u002F.Xauthority:",[149,29976,29800],{"class":155},[149,29978,29979],{"class":169},"\u002F.Xauthority:ro",[149,29981,26387],{"class":309},[149,29983,29984,29986,29989,29991,29994,29997,29999,30002,30004,30006,30008,30010,30013],{"class":151,"line":3394},[149,29985,29952],{"class":155},[149,29987,29988],{"class":169},"\u002Frun\u002Fuser\u002F",[149,29990,26808],{"class":155},[149,29992,29993],{"class":162},"id",[149,29995,29996],{"class":309}," -u",[149,29998,2292],{"class":155},[149,30000,30001],{"class":169},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[149,30003,26808],{"class":155},[149,30005,29993],{"class":162},[149,30007,29996],{"class":309},[149,30009,2292],{"class":155},[149,30011,30012],{"class":169},"\u002Fwayland-0",[149,30014,26387],{"class":309},[149,30016,30017,30019,30021,30023,30025,30027,30029,30032,30034,30036,30038,30040],{"class":151,"line":3399},[149,30018,29952],{"class":155},[149,30020,29988],{"class":169},[149,30022,26808],{"class":155},[149,30024,29993],{"class":162},[149,30026,29996],{"class":309},[149,30028,2292],{"class":155},[149,30030,30031],{"class":169},":\u002Frun\u002Fuser\u002F",[149,30033,26808],{"class":155},[149,30035,29993],{"class":162},[149,30037,29996],{"class":309},[149,30039,15427],{"class":155},[149,30041,27884],{"class":309},[149,30043,30044,30046,30048,30051],{"class":151,"line":3413},[149,30045,29971],{"class":155},[149,30047,2720],{"class":169},[149,30049,30050],{"class":155},"$HOME ",[149,30052,27884],{"class":309},[149,30054,30055,30058],{"class":151,"line":3418},[149,30056,30057],{"class":155},"-w $HOME ",[149,30059,27884],{"class":309},[149,30061,30062],{"class":151,"line":3447},[149,30063,30064],{"class":155},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[24,30066,866],{},[125,30068,30069,30077,30080,30083],{},[45,30070,30071,15508,30073,30076],{},[48,30072,29839],{},[48,30074,30075],{},"--gpus all","没有英伟达显卡请注释。",[45,30078,30079],{},"--name后面请自己为容器起名。",[45,30081,30082],{},"最后一行仓库名称请你自己找对应的镜像填上。",[45,30084,30085,30086,30091],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25262,30087,30088],{},[31,30089,30090],{},"请不要加","。",[140,30093,30095],{"className":25530,"code":30094,"language":25532,"meta":145,"style":145},"--ulimit nofile=1024:524288 \\\n",[48,30096,30097],{"__ignoreMap":145},[149,30098,30099,30102,30105],{"class":151,"line":152},[149,30100,30101],{"class":162},"--ulimit",[149,30103,30104],{"class":169}," nofile=1024:524288",[149,30106,26387],{"class":309},[24,30108,30109,30110,30115],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25262,30111,30112],{},[31,30113,30114],{},"不建议","**.**",[140,30117,30119],{"className":25530,"code":30118,"language":25532,"meta":145,"style":145},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[48,30120,30121,30148,30157],{"__ignoreMap":145},[149,30122,30123,30126,30129,30131,30133,30135,30137,30139,30141,30144,30146],{"class":151,"line":152},[149,30124,30125],{"class":162},"--user",[149,30127,30128],{"class":155}," $(",[149,30130,29993],{"class":162},[149,30132,29996],{"class":309},[149,30134,2292],{"class":155},[149,30136,2720],{"class":169},[149,30138,26808],{"class":155},[149,30140,29993],{"class":162},[149,30142,30143],{"class":309}," -g",[149,30145,15427],{"class":155},[149,30147,27884],{"class":309},[149,30149,30150,30152,30155],{"class":151,"line":193},[149,30151,29952],{"class":155},[149,30153,30154],{"class":169},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[149,30156,26387],{"class":309},[149,30158,30159,30161,30164],{"class":151,"line":235},[149,30160,29952],{"class":155},[149,30162,30163],{"class":169},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[149,30165,26387],{"class":309},[1783,30167,30168],{},"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":145,"searchDepth":193,"depth":193,"links":30170},[30171,30172,30173],{"id":29172,"depth":235,"text":29173},{"id":29182,"depth":235,"text":29183},{"id":29593,"depth":235,"text":29596},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29164,"description":145},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30180,"title":30181,"body":30182,"description":145,"extension":1798,"meta":31805,"navigation":1800,"path":31806,"seo":31807,"stem":31808,"__hash__":31809},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30183,"toc":31800},[30184,30187,30191,30194,30416,30420,30424,30427,30533,30538,30541,30546,30549,30554,30557,30562,30565,30577,30580,30585,30592,30620,30627,30703,30708,30711,30734,30736,30811,30816,30819,30823,30831,30836,30841,30845,30856,30862,30865,30868,30892,30895,30898,30926,30929,30932,31397,31400,31405,31410,31414,31437,31442,31446,31450,31453,31456,31459,31486,31489,31492,31510,31513,31516,31538,31546,31551,31556,31560,31563,31566,31569,31572,31617,31620,31638,31641,31646,31649,31670,31673,31729,31732,31737,31741,31744,31751,31754,31757,31762,31765,31781,31784,31797],[10,30185,30181],{"id":30186},"_6手动创建docker镜像",[19,30188,30190],{"id":30189},"_61dockerfile","6.1.DockerFile",[24,30192,30193],{},"常用命令：",[2003,30195,30196,30207],{},[2006,30197,30198],{},[2009,30199,30200,30203,30205],{},[2012,30201,30202],{"align":1566},"指令",[2012,30204,27578],{"align":1566},[2012,30206,29201],{"align":1566},[2049,30208,30209,30219,30235,30246,30257,30268,30279,30290,30301,30315,30329,30340,30354,30365,30376,30390,30405],{},[2009,30210,30211,30213,30216],{},[2054,30212,29079],{"align":1566},[2054,30214,30215],{"align":1566},"指定基础镜像，是 Dockerfile 的起点",[2054,30217,30218],{"align":1566},"FROM ubuntu:22.04",[2009,30220,30221,30224,30227],{},[2054,30222,30223],{"align":1566},"LABEL",[2054,30225,30226],{"align":1566},"添加元数据（如作者、版本等）",[2054,30228,30229,30230,30234],{"align":1566},"LABEL maintainer=”",[2102,30231,30233],{"href":30232},"mailto:you@example.com","you@example.com","”",[2009,30236,30237,30240,30243],{},[2054,30238,30239],{"align":1566},"ENV",[2054,30241,30242],{"align":1566},"设置环境变量",[2054,30244,30245],{"align":1566},"ENV PORT=8080",[2009,30247,30248,30251,30254],{},[2054,30249,30250],{"align":1566},"ARG",[2054,30252,30253],{"align":1566},"构建参数，只在构建期间可用",[2054,30255,30256],{"align":1566},"ARG VERSION=1.0",[2009,30258,30259,30262,30265],{},[2054,30260,30261],{"align":1566},"RUN",[2054,30263,30264],{"align":1566},"构建镜像时运行命令",[2054,30266,30267],{"align":1566},"RUN apt-get update && apt-get install -y curl",[2009,30269,30270,30273,30276],{},[2054,30271,30272],{"align":1566},"COPY",[2054,30274,30275],{"align":1566},"复制文件到镜像中",[2054,30277,30278],{"align":1566},"COPY . \u002Fapp",[2009,30280,30281,30284,30287],{},[2054,30282,30283],{"align":1566},"ADD",[2054,30285,30286],{"align":1566},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[2054,30288,30289],{"align":1566},"ADD archive.tar.gz \u002Fdata\u002F",[2009,30291,30292,30295,30298],{},[2054,30293,30294],{"align":1566},"WORKDIR",[2054,30296,30297],{"align":1566},"设置工作目录",[2054,30299,30300],{"align":1566},"WORKDIR \u002Fopt",[2009,30302,30303,30306,30309],{},[2054,30304,30305],{"align":1566},"CMD",[2054,30307,30308],{"align":1566},"设置容器启动时默认命令（可被 docker run 覆盖）",[2054,30310,30311,30312],{"align":1566},"CMD ",[149,30313,30314],{},"“node”, “index.js”",[2009,30316,30317,30320,30323],{},[2054,30318,30319],{"align":1566},"ENTRYPOINT",[2054,30321,30322],{"align":1566},"设置容器启动时固定命令（通常用于 CLI 工具等）",[2054,30324,30325,30326],{"align":1566},"ENTRYPOINT ",[149,30327,30328],{},"“python3”",[2009,30330,30331,30334,30337],{},[2054,30332,30333],{"align":1566},"EXPOSE",[2054,30335,30336],{"align":1566},"声明镜像内服务监听的端口（不会自动映射）",[2054,30338,30339],{"align":1566},"EXPOSE 80",[2009,30341,30342,30345,30348],{},[2054,30343,30344],{"align":1566},"VOLUME",[2054,30346,30347],{"align":1566},"声明数据卷挂载点",[2054,30349,30350,30351],{"align":1566},"VOLUME ",[149,30352,30353],{},"“\u002Fdata”",[2009,30355,30356,30359,30362],{},[2054,30357,30358],{"align":1566},"USER",[2054,30360,30361],{"align":1566},"设置后续命令执行的用户",[2054,30363,30364],{"align":1566},"USER appuser",[2009,30366,30367,30370,30373],{},[2054,30368,30369],{"align":1566},"ONBUILD",[2054,30371,30372],{"align":1566},"当镜像作为其他镜像基础镜像时触发的构建指令",[2054,30374,30375],{"align":1566},"ONBUILD COPY . \u002Fsrc",[2009,30377,30378,30381,30384],{},[2054,30379,30380],{"align":1566},"SHELL",[2054,30382,30383],{"align":1566},"更改默认 shell，比如将 sh -c 改为 bash -c",[2054,30385,30386,30387],{"align":1566},"SHELL ",[149,30388,30389],{},"“\u002Fbin\u002Fbash”, “-c”",[2009,30391,30392,30395,30398],{},[2054,30393,30394],{"align":1566},"HEALTHCHECK",[2054,30396,30397],{"align":1566},"定义容器运行时的健康检查命令",[2054,30399,30400,30401],{"align":1566},"`HEALTHCHECK CMD curl –fail ",[2102,30402,30403],{"href":30403,"rel":30404},"http:\u002F\u002Flocalhost:8080",[25573],[2009,30406,30407,30410,30413],{},[2054,30408,30409],{"align":1566},"STOPSIGNAL",[2054,30411,30412],{"align":1566},"容器停止时发送的信号",[2054,30414,30415],{"align":1566},"STOPSIGNAL SIGKILL",[19,30417,30419],{"id":30418},"_62自己创建容器","6.2.自己创建容器",[120,30421,30423],{"id":30422},"_621手动创建","6.2.1.手动创建",[24,30425,30426],{},"在x86电脑上编译x86的：",[140,30428,30430],{"className":25530,"code":30429,"language":25532,"meta":145,"style":145},"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",[48,30431,30432,30448,30452,30465,30469,30482,30486,30499,30503,30516,30520],{"__ignoreMap":145},[149,30433,30434,30436,30439,30442,30445],{"class":151,"line":152},[149,30435,28262],{"class":162},[149,30437,30438],{"class":169}," build",[149,30440,30441],{"class":309}," -t",[149,30443,30444],{"class":169}," ros-melodic-cuda118-cudnn8-bionic:latest",[149,30446,30447],{"class":169}," .\n",[149,30449,30450],{"class":151,"line":193},[149,30451,4119],{"emptyLinePlaceholder":1800},[149,30453,30454,30456,30458,30460,30463],{"class":151,"line":235},[149,30455,28262],{"class":162},[149,30457,30438],{"class":169},[149,30459,30441],{"class":309},[149,30461,30462],{"class":169}," ros-noetic-focal:latest",[149,30464,30447],{"class":169},[149,30466,30467],{"class":151,"line":340},[149,30468,4119],{"emptyLinePlaceholder":1800},[149,30470,30471,30473,30475,30477,30480],{"class":151,"line":346},[149,30472,28262],{"class":162},[149,30474,30438],{"class":169},[149,30476,30441],{"class":309},[149,30478,30479],{"class":169}," ros-humble-jammy:latest",[149,30481,30447],{"class":169},[149,30483,30484],{"class":151,"line":352},[149,30485,4119],{"emptyLinePlaceholder":1800},[149,30487,30488,30490,30492,30494,30497],{"class":151,"line":1021},[149,30489,28262],{"class":162},[149,30491,30438],{"class":169},[149,30493,30441],{"class":309},[149,30495,30496],{"class":169}," ros-jazzy-noble:latest",[149,30498,30447],{"class":169},[149,30500,30501],{"class":151,"line":1035},[149,30502,4119],{"emptyLinePlaceholder":1800},[149,30504,30505,30507,30509,30511,30514],{"class":151,"line":1054},[149,30506,28262],{"class":162},[149,30508,30438],{"class":169},[149,30510,30441],{"class":309},[149,30512,30513],{"class":169}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[149,30515,30447],{"class":169},[149,30517,30518],{"class":151,"line":1072},[149,30519,4119],{"emptyLinePlaceholder":1800},[149,30521,30522,30524,30526,30528,30531],{"class":151,"line":1090},[149,30523,28262],{"class":162},[149,30525,30438],{"class":169},[149,30527,30441],{"class":309},[149,30529,30530],{"class":169}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[149,30532,30447],{"class":169},[24,30534,30535],{},[83,30536],{"alt":145,"src":30537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[24,30539,30540],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[24,30542,30543],{},[83,30544],{"alt":145,"src":30545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[24,30547,30548],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[125,30550,30551],{},[45,30552,30553],{},"创建 Docker Hub 账户",[24,30555,30556],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[125,30558,30559],{"start":193},[45,30560,30561],{},"登录 Docker Hub",[24,30563,30564],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[140,30566,30568],{"className":25530,"code":30567,"language":25532,"meta":145,"style":145},"docker login\n",[48,30569,30570],{"__ignoreMap":145},[149,30571,30572,30574],{"class":151,"line":152},[149,30573,28262],{"class":162},[149,30575,30576],{"class":169}," login\n",[24,30578,30579],{},"输入你的 Docker Hub 用户名和密码进行验证。",[125,30581,30582],{},[45,30583,30584],{},"为你的镜像打标签",[24,30586,30587,30588,30591],{},"Docker Hub 使用 ",[48,30589,30590],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[140,30593,30595],{"className":25530,"code":30594,"language":25532,"meta":145,"style":145},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[48,30596,30597],{"__ignoreMap":145},[149,30598,30599,30601,30604,30606,30609,30612,30615,30617],{"class":151,"line":152},[149,30600,28262],{"class":162},[149,30602,30603],{"class":169}," tag",[149,30605,30496],{"class":169},[149,30607,30608],{"class":325}," \u003C",[149,30610,30611],{"class":169},"你的用户",[149,30613,30614],{"class":155},"名",[149,30616,2819],{"class":325},[149,30618,30619],{"class":169},"\u002Fros-jazzy-noble:latest\n",[24,30621,30622,30623,30626],{},"例如，如果你的 Docker Hub 用户名是 ",[48,30624,30625],{},"tungchiahui","，你应该执行：",[140,30628,30630],{"className":25530,"code":30629,"language":25532,"meta":145,"style":145},"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",[48,30631,30632,30643,30647,30658,30662,30673,30677,30688,30692],{"__ignoreMap":145},[149,30633,30634,30636,30638,30640],{"class":151,"line":152},[149,30635,28262],{"class":162},[149,30637,30603],{"class":169},[149,30639,30462],{"class":169},[149,30641,30642],{"class":169}," tungchiahui\u002Fros-noetic-focal:latest\n",[149,30644,30645],{"class":151,"line":193},[149,30646,4119],{"emptyLinePlaceholder":1800},[149,30648,30649,30651,30653,30655],{"class":151,"line":235},[149,30650,28262],{"class":162},[149,30652,30603],{"class":169},[149,30654,30479],{"class":169},[149,30656,30657],{"class":169}," tungchiahui\u002Fros-humble-jammy:latest\n",[149,30659,30660],{"class":151,"line":340},[149,30661,4119],{"emptyLinePlaceholder":1800},[149,30663,30664,30666,30668,30670],{"class":151,"line":346},[149,30665,28262],{"class":162},[149,30667,30603],{"class":169},[149,30669,30496],{"class":169},[149,30671,30672],{"class":169}," tungchiahui\u002Fros-jazzy-noble:latest\n",[149,30674,30675],{"class":151,"line":352},[149,30676,4119],{"emptyLinePlaceholder":1800},[149,30678,30679,30681,30683,30685],{"class":151,"line":1021},[149,30680,28262],{"class":162},[149,30682,30603],{"class":169},[149,30684,30513],{"class":169},[149,30686,30687],{"class":169}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[149,30689,30690],{"class":151,"line":1035},[149,30691,4119],{"emptyLinePlaceholder":1800},[149,30693,30694,30696,30698,30700],{"class":151,"line":1054},[149,30695,28262],{"class":162},[149,30697,30603],{"class":169},[149,30699,30530],{"class":169},[149,30701,30702],{"class":169}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[125,30704,30705],{"start":193},[45,30706,30707],{},"推送镜像到 Docker Hub",[24,30709,30710],{},"使用以下命令将镜像推送到 Docker Hub：",[140,30712,30714],{"className":25530,"code":30713,"language":25532,"meta":145,"style":145},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[48,30715,30716],{"__ignoreMap":145},[149,30717,30718,30720,30723,30725,30727,30729,30731],{"class":151,"line":152},[149,30719,28262],{"class":162},[149,30721,30722],{"class":169}," push",[149,30724,30608],{"class":325},[149,30726,30611],{"class":169},[149,30728,30614],{"class":155},[149,30730,2819],{"class":325},[149,30732,30733],{"class":169},"\u002Fros-noetic-jazzy-noble:latest\n",[24,30735,16346],{},[140,30737,30739],{"className":25530,"code":30738,"language":25532,"meta":145,"style":145},"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",[48,30740,30741,30749,30753,30761,30765,30773,30777,30786,30790,30798,30802],{"__ignoreMap":145},[149,30742,30743,30745,30747],{"class":151,"line":152},[149,30744,28262],{"class":162},[149,30746,30722],{"class":169},[149,30748,30642],{"class":169},[149,30750,30751],{"class":151,"line":193},[149,30752,4119],{"emptyLinePlaceholder":1800},[149,30754,30755,30757,30759],{"class":151,"line":235},[149,30756,28262],{"class":162},[149,30758,30722],{"class":169},[149,30760,30657],{"class":169},[149,30762,30763],{"class":151,"line":340},[149,30764,4119],{"emptyLinePlaceholder":1800},[149,30766,30767,30769,30771],{"class":151,"line":346},[149,30768,28262],{"class":162},[149,30770,30722],{"class":169},[149,30772,30672],{"class":169},[149,30774,30775],{"class":151,"line":352},[149,30776,4119],{"emptyLinePlaceholder":1800},[149,30778,30779,30781,30783],{"class":151,"line":1021},[149,30780,28262],{"class":162},[149,30782,30722],{"class":169},[149,30784,30785],{"class":169}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[149,30787,30788],{"class":151,"line":1035},[149,30789,4119],{"emptyLinePlaceholder":1800},[149,30791,30792,30794,30796],{"class":151,"line":1054},[149,30793,28262],{"class":162},[149,30795,30722],{"class":169},[149,30797,30702],{"class":169},[149,30799,30800],{"class":151,"line":1072},[149,30801,4119],{"emptyLinePlaceholder":1800},[149,30803,30804,30806,30808],{"class":151,"line":1090},[149,30805,28262],{"class":162},[149,30807,30722],{"class":169},[149,30809,30810],{"class":169}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[125,30812,30813],{"start":235},[45,30814,30815],{},"验证推送成功",[24,30817,30818],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[24,30820,30821],{},[31,30822,5502],{},[42,30824,30825,30828],{},[45,30826,30827],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[45,30829,30830],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[24,30832,30833],{},[83,30834],{"alt":145,"src":30835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[24,30837,30838],{},[83,30839],{"alt":145,"src":30840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[120,30842,30844],{"id":30843},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[24,30846,30847,30848,30851,30852,30855],{},"如果您想在 ",[31,30849,30850],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[31,30853,30854],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[24,30857,30858,30859],{},"1. ",[31,30860,30861],{},"启用 Docker 跨平台构建",[24,30863,30864],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[24,30866,30867],{},"第一步：启用 buildx（只需执行一次）",[140,30869,30871],{"className":25530,"code":30870,"language":25532,"meta":145,"style":145},"docker buildx create --name multiarch_builder --use\n",[48,30872,30873],{"__ignoreMap":145},[149,30874,30875,30877,30880,30883,30886,30889],{"class":151,"line":152},[149,30876,28262],{"class":162},[149,30878,30879],{"class":169}," buildx",[149,30881,30882],{"class":169}," create",[149,30884,30885],{"class":309}," --name",[149,30887,30888],{"class":169}," multiarch_builder",[149,30890,30891],{"class":309}," --use\n",[24,30893,30894],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[24,30896,30897],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[140,30899,30901],{"className":25530,"code":30900,"language":25532,"meta":145,"style":145},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[48,30902,30903],{"__ignoreMap":145},[149,30904,30905,30907,30909,30911,30914,30917,30920,30923],{"class":151,"line":152},[149,30906,28262],{"class":162},[149,30908,28939],{"class":169},[149,30910,28942],{"class":309},[149,30912,30913],{"class":309}," --privileged",[149,30915,30916],{"class":169}," multiarch\u002Fqemu-user-static",[149,30918,30919],{"class":309}," --reset",[149,30921,30922],{"class":309}," -p",[149,30924,30925],{"class":169}," yes\n",[24,30927,30928],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[24,30930,30931],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[140,30933,30935],{"className":25530,"code":30934,"language":25532,"meta":145,"style":145},"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",[48,30936,30937,30979,30983,30988,30998,31008,31017,31023,31027,31031,31041,31049,31058,31064,31068,31072,31082,31090,31099,31105,31109,31113,31123,31131,31140,31146,31150,31154,31164,31172,31181,31187,31191,31195,31205,31213,31222,31228,31232,31236,31246,31254,31263,31269,31273,31277,31287,31295,31304,31310,31314,31318,31328,31336,31345,31351,31355,31359,31370,31378,31387,31393],{"__ignoreMap":145},[149,30938,30939,30941,30943,30945,30948,30951,30953,30955,30958,30960,30962,30964,30966,30969,30972,30974,30977],{"class":151,"line":152},[149,30940,28262],{"class":162},[149,30942,30879],{"class":169},[149,30944,30438],{"class":169},[149,30946,30947],{"class":309}," --platform",[149,30949,30950],{"class":169}," linux\u002Famd64,linux\u002Farm64",[149,30952,30441],{"class":309},[149,30954,30608],{"class":325},[149,30956,30957],{"class":169},"你的镜像",[149,30959,30614],{"class":155},[149,30961,2819],{"class":325},[149,30963,2720],{"class":169},[149,30965,156],{"class":325},[149,30967,30968],{"class":169},"标",[149,30970,30971],{"class":155},"签",[149,30973,2819],{"class":325},[149,30975,30976],{"class":309}," --push",[149,30978,30447],{"class":169},[149,30980,30981],{"class":151,"line":193},[149,30982,4119],{"emptyLinePlaceholder":1800},[149,30984,30985],{"class":151,"line":235},[149,30986,30987],{"class":295},"# 例子：\n",[149,30989,30990,30992,30994,30996],{"class":151,"line":340},[149,30991,28262],{"class":162},[149,30993,30879],{"class":169},[149,30995,30438],{"class":169},[149,30997,26387],{"class":309},[149,30999,31000,31003,31006],{"class":151,"line":346},[149,31001,31002],{"class":155},"--platform ",[149,31004,31005],{"class":169},"linux\u002Famd64,linux\u002Farm64",[149,31007,26387],{"class":309},[149,31009,31010,31012,31015],{"class":151,"line":352},[149,31011,30441],{"class":309},[149,31013,31014],{"class":169}," tungchiahui\u002Fros:noetic-focal",[149,31016,26387],{"class":309},[149,31018,31019,31021],{"class":151,"line":1021},[149,31020,30976],{"class":309},[149,31022,26387],{"class":309},[149,31024,31025],{"class":151,"line":1035},[149,31026,30447],{"class":169},[149,31028,31029],{"class":151,"line":1054},[149,31030,4119],{"emptyLinePlaceholder":1800},[149,31032,31033,31035,31037,31039],{"class":151,"line":1072},[149,31034,28262],{"class":162},[149,31036,30879],{"class":169},[149,31038,30438],{"class":169},[149,31040,26387],{"class":309},[149,31042,31043,31045,31047],{"class":151,"line":1090},[149,31044,31002],{"class":155},[149,31046,31005],{"class":169},[149,31048,26387],{"class":309},[149,31050,31051,31053,31056],{"class":151,"line":1633},[149,31052,30441],{"class":309},[149,31054,31055],{"class":169}," tungchiahui\u002Fros:humble-jammy",[149,31057,26387],{"class":309},[149,31059,31060,31062],{"class":151,"line":1644},[149,31061,30976],{"class":309},[149,31063,26387],{"class":309},[149,31065,31066],{"class":151,"line":3348},[149,31067,30447],{"class":169},[149,31069,31070],{"class":151,"line":3362},[149,31071,4119],{"emptyLinePlaceholder":1800},[149,31073,31074,31076,31078,31080],{"class":151,"line":3367},[149,31075,28262],{"class":162},[149,31077,30879],{"class":169},[149,31079,30438],{"class":169},[149,31081,26387],{"class":309},[149,31083,31084,31086,31088],{"class":151,"line":3373},[149,31085,31002],{"class":155},[149,31087,31005],{"class":169},[149,31089,26387],{"class":309},[149,31091,31092,31094,31097],{"class":151,"line":3394},[149,31093,30441],{"class":309},[149,31095,31096],{"class":169}," tungchiahui\u002Fros:jazzy-noble",[149,31098,26387],{"class":309},[149,31100,31101,31103],{"class":151,"line":3399},[149,31102,30976],{"class":309},[149,31104,26387],{"class":309},[149,31106,31107],{"class":151,"line":3413},[149,31108,30447],{"class":169},[149,31110,31111],{"class":151,"line":3418},[149,31112,4119],{"emptyLinePlaceholder":1800},[149,31114,31115,31117,31119,31121],{"class":151,"line":3447},[149,31116,28029],{"class":162},[149,31118,30879],{"class":169},[149,31120,30438],{"class":169},[149,31122,26387],{"class":309},[149,31124,31125,31127,31129],{"class":151,"line":3452},[149,31126,31002],{"class":155},[149,31128,31005],{"class":169},[149,31130,26387],{"class":309},[149,31132,31133,31135,31138],{"class":151,"line":3469},[149,31134,30441],{"class":309},[149,31136,31137],{"class":169}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[149,31139,26387],{"class":309},[149,31141,31142,31144],{"class":151,"line":3474},[149,31143,30976],{"class":309},[149,31145,26387],{"class":309},[149,31147,31148],{"class":151,"line":3479},[149,31149,30447],{"class":169},[149,31151,31152],{"class":151,"line":3484},[149,31153,4119],{"emptyLinePlaceholder":1800},[149,31155,31156,31158,31160,31162],{"class":151,"line":3498},[149,31157,28262],{"class":162},[149,31159,30879],{"class":169},[149,31161,30438],{"class":169},[149,31163,26387],{"class":309},[149,31165,31166,31168,31170],{"class":151,"line":3503},[149,31167,31002],{"class":155},[149,31169,31005],{"class":169},[149,31171,26387],{"class":309},[149,31173,31174,31176,31179],{"class":151,"line":4296},[149,31175,30441],{"class":309},[149,31177,31178],{"class":169}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[149,31180,26387],{"class":309},[149,31182,31183,31185],{"class":151,"line":4310},[149,31184,30976],{"class":309},[149,31186,26387],{"class":309},[149,31188,31189],{"class":151,"line":4318},[149,31190,30447],{"class":169},[149,31192,31193],{"class":151,"line":4323},[149,31194,4119],{"emptyLinePlaceholder":1800},[149,31196,31197,31199,31201,31203],{"class":151,"line":4329},[149,31198,28029],{"class":162},[149,31200,30879],{"class":169},[149,31202,30438],{"class":169},[149,31204,26387],{"class":309},[149,31206,31207,31209,31211],{"class":151,"line":4335},[149,31208,31002],{"class":155},[149,31210,31005],{"class":169},[149,31212,26387],{"class":309},[149,31214,31215,31217,31220],{"class":151,"line":4340},[149,31216,30441],{"class":309},[149,31218,31219],{"class":169}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[149,31221,26387],{"class":309},[149,31223,31224,31226],{"class":151,"line":9663},[149,31225,30976],{"class":309},[149,31227,26387],{"class":309},[149,31229,31230],{"class":151,"line":9687},[149,31231,30447],{"class":169},[149,31233,31234],{"class":151,"line":9692},[149,31235,4119],{"emptyLinePlaceholder":1800},[149,31237,31238,31240,31242,31244],{"class":151,"line":9698},[149,31239,28262],{"class":162},[149,31241,30879],{"class":169},[149,31243,30438],{"class":169},[149,31245,26387],{"class":309},[149,31247,31248,31250,31252],{"class":151,"line":9725},[149,31249,31002],{"class":155},[149,31251,31005],{"class":169},[149,31253,26387],{"class":309},[149,31255,31256,31258,31261],{"class":151,"line":9730},[149,31257,30441],{"class":309},[149,31259,31260],{"class":169}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[149,31262,26387],{"class":309},[149,31264,31265,31267],{"class":151,"line":9736},[149,31266,30976],{"class":309},[149,31268,26387],{"class":309},[149,31270,31271],{"class":151,"line":9748},[149,31272,30447],{"class":169},[149,31274,31275],{"class":151,"line":9760},[149,31276,4119],{"emptyLinePlaceholder":1800},[149,31278,31279,31281,31283,31285],{"class":151,"line":9772},[149,31280,28262],{"class":162},[149,31282,30879],{"class":169},[149,31284,30438],{"class":169},[149,31286,26387],{"class":309},[149,31288,31289,31291,31293],{"class":151,"line":11430},[149,31290,31002],{"class":155},[149,31292,31005],{"class":169},[149,31294,26387],{"class":309},[149,31296,31297,31299,31302],{"class":151,"line":11455},[149,31298,30441],{"class":309},[149,31300,31301],{"class":169}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[149,31303,26387],{"class":309},[149,31305,31306,31308],{"class":151,"line":11478},[149,31307,30976],{"class":309},[149,31309,26387],{"class":309},[149,31311,31312],{"class":151,"line":11502},[149,31313,30447],{"class":169},[149,31315,31316],{"class":151,"line":11507},[149,31317,4119],{"emptyLinePlaceholder":1800},[149,31319,31320,31322,31324,31326],{"class":151,"line":11512},[149,31321,28029],{"class":162},[149,31323,30879],{"class":169},[149,31325,30438],{"class":169},[149,31327,26387],{"class":309},[149,31329,31330,31332,31334],{"class":151,"line":11517},[149,31331,31002],{"class":155},[149,31333,31005],{"class":169},[149,31335,26387],{"class":309},[149,31337,31338,31340,31343],{"class":151,"line":11526},[149,31339,30441],{"class":309},[149,31341,31342],{"class":169}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[149,31344,26387],{"class":309},[149,31346,31347,31349],{"class":151,"line":11531},[149,31348,30976],{"class":309},[149,31350,26387],{"class":309},[149,31352,31353],{"class":151,"line":11537},[149,31354,30447],{"class":169},[149,31356,31357],{"class":151,"line":11558},[149,31358,4119],{"emptyLinePlaceholder":1800},[149,31360,31361,31364,31366,31368],{"class":151,"line":11564},[149,31362,31363],{"class":162},"  docker",[149,31365,30879],{"class":169},[149,31367,30438],{"class":169},[149,31369,26387],{"class":309},[149,31371,31372,31374,31376],{"class":151,"line":11578},[149,31373,31002],{"class":155},[149,31375,31005],{"class":169},[149,31377,26387],{"class":309},[149,31379,31380,31382,31385],{"class":151,"line":11584},[149,31381,30441],{"class":309},[149,31383,31384],{"class":169}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[149,31386,26387],{"class":309},[149,31388,31389,31391],{"class":151,"line":11611},[149,31390,30976],{"class":309},[149,31392,26387],{"class":309},[149,31394,31395],{"class":151,"line":11620},[149,31396,30447],{"class":169},[24,31398,31399],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[24,31401,31402],{},[83,31403],{"alt":145,"src":31404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[24,31406,31407],{},[83,31408],{"alt":145,"src":31409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[120,31411,31413],{"id":31412},"_623清除构建缓存","6.2.3.清除构建缓存",[140,31415,31417],{"className":25530,"code":31416,"language":25532,"meta":145,"style":145},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[48,31418,31419,31424],{"__ignoreMap":145},[149,31420,31421],{"class":151,"line":152},[149,31422,31423],{"class":295},"# 清理BuildKit构建缓存\n",[149,31425,31426,31428,31431,31434],{"class":151,"line":193},[149,31427,28262],{"class":162},[149,31429,31430],{"class":169}," builder",[149,31432,31433],{"class":169}," prune",[149,31435,31436],{"class":309}," -f\n",[24,31438,31439],{},[83,31440],{"alt":145,"src":31441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[19,31443,31445],{"id":31444},"_63补充","6.3.补充",[120,31447,31449],{"id":31448},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[24,31451,31452],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[24,31454,31455],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[24,31457,31458],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[140,31460,31462],{"className":25530,"code":31461,"language":25532,"meta":145,"style":145},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[48,31463,31464,31471],{"__ignoreMap":145},[149,31465,31466,31468],{"class":151,"line":152},[149,31467,29079],{"class":162},[149,31469,31470],{"class":169}," nginx\n",[149,31472,31473,31475,31478,31481,31483],{"class":151,"line":193},[149,31474,30261],{"class":162},[149,31476,31477],{"class":169}," echo",[149,31479,31480],{"class":169}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[149,31482,27931],{"class":325},[149,31484,31485],{"class":169}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[24,31487,31488],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[24,31490,31491],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[140,31493,31495],{"className":25530,"code":31494,"language":25532,"meta":145,"style":145},"docker build -t nginx:tuling .\n",[48,31496,31497],{"__ignoreMap":145},[149,31498,31499,31501,31503,31505,31508],{"class":151,"line":152},[149,31500,28262],{"class":162},[149,31502,30438],{"class":169},[149,31504,30441],{"class":309},[149,31506,31507],{"class":169}," nginx:tuling",[149,31509,30447],{"class":169},[24,31511,31512],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[24,31514,31515],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[140,31517,31519],{"className":25530,"code":31518,"language":25532,"meta":145,"style":145},"docker run -d -p 92:80 nginx:tuling\n",[48,31520,31521],{"__ignoreMap":145},[149,31522,31523,31525,31527,31530,31532,31535],{"class":151,"line":152},[149,31524,28262],{"class":162},[149,31526,28939],{"class":169},[149,31528,31529],{"class":309}," -d",[149,31531,30922],{"class":309},[149,31533,31534],{"class":169}," 92:80",[149,31536,31537],{"class":169}," nginx:tuling\n",[24,31539,31540,31541],{},"4、访问 ",[2102,31542,31545],{"href":31543,"rel":31544},"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",[25573],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[24,31547,31548],{},[83,31549],{"alt":145,"src":31550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[24,31552,31553],{},[83,31554],{"alt":145,"src":31555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[120,31557,31559],{"id":31558},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[24,31561,31562],{},"只需要知道大体流程即可",[24,31564,31565],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[24,31567,31568],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[24,31570,31571],{},"2、在Dockerfile中添加以下内容",[140,31573,31575],{"className":27800,"code":31574,"language":27802,"meta":145,"style":145},"# 基于哪个镜像\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",[48,31576,31577,31582,31587,31592,31597,31602,31607,31612],{"__ignoreMap":145},[149,31578,31579],{"class":151,"line":152},[149,31580,31581],{},"# 基于哪个镜像\n",[149,31583,31584],{"class":151,"line":193},[149,31585,31586],{},"From java:8\n",[149,31588,31589],{"class":151,"line":235},[149,31590,31591],{},"# 复制文件到容器\n",[149,31593,31594],{"class":151,"line":340},[149,31595,31596],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[149,31598,31599],{"class":151,"line":346},[149,31600,31601],{},"# 声明需要暴露的端口\n",[149,31603,31604],{"class":151,"line":352},[149,31605,31606],{},"EXPOSE 8877\n",[149,31608,31609],{"class":151,"line":1021},[149,31610,31611],{},"# 配置容器启动后执行的命令\n",[149,31613,31614],{"class":151,"line":1035},[149,31615,31616],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[24,31618,31619],{},"3、使用docker build命令构建镜像",[140,31621,31623],{"className":25530,"code":31622,"language":25532,"meta":145,"style":145},"docker build -t tulingmall-member:0.0.5 .\n",[48,31624,31625],{"__ignoreMap":145},[149,31626,31627,31629,31631,31633,31636],{"class":151,"line":152},[149,31628,28262],{"class":162},[149,31630,30438],{"class":169},[149,31632,30441],{"class":309},[149,31634,31635],{"class":169}," tulingmall-member:0.0.5",[149,31637,30447],{"class":169},[24,31639,31640],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[24,31642,31643],{},[83,31644],{"alt":145,"src":31645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[24,31647,31648],{},"4、启动镜像，加-d可在后台启动",[140,31650,31652],{"className":25530,"code":31651,"language":25532,"meta":145,"style":145},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[48,31653,31654],{"__ignoreMap":145},[149,31655,31656,31658,31660,31662,31664,31667],{"class":151,"line":152},[149,31657,28262],{"class":162},[149,31659,28939],{"class":169},[149,31661,31529],{"class":309},[149,31663,30922],{"class":309},[149,31665,31666],{"class":169}," 8877:8877",[149,31668,31669],{"class":169}," tulingmall-member:0.0.5\n",[24,31671,31672],{},"加上JVM参数：",[140,31674,31676],{"className":25530,"code":31675,"language":25532,"meta":145,"style":145},"# --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",[48,31677,31678,31683,31698,31708,31717,31724],{"__ignoreMap":145},[149,31679,31680],{"class":151,"line":152},[149,31681,31682],{"class":295},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[149,31684,31685,31687,31689,31692,31694,31696],{"class":151,"line":193},[149,31686,28262],{"class":162},[149,31688,28939],{"class":169},[149,31690,31691],{"class":309},"  -d",[149,31693,30922],{"class":309},[149,31695,31666],{"class":169},[149,31697,26387],{"class":309},[149,31699,31700,31702,31705],{"class":151,"line":235},[149,31701,29836],{"class":155},[149,31703,31704],{"class":169},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[149,31706,31707],{"class":309},"  \\\n",[149,31709,31710,31712,31715],{"class":151,"line":340},[149,31711,29836],{"class":155},[149,31713,31714],{"class":169},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[149,31716,31707],{"class":309},[149,31718,31719,31722],{"class":151,"line":346},[149,31720,31721],{"class":155},"--cap-add=SYS_PTRACE  ",[149,31723,27884],{"class":309},[149,31725,31726],{"class":151,"line":352},[149,31727,31728],{"class":155},"tulingmall-member:0.0.5\n",[24,31730,31731],{},"5、访问会员服务接口",[24,31733,31734],{},[83,31735],{"alt":145,"src":31736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[120,31738,31740],{"id":31739},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[24,31742,31743],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[24,31745,31746,31747],{},"阿里云docker镜像仓库：",[2102,31748,31749],{"href":31749,"rel":31750},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25573],[24,31752,31753],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[24,31755,31756],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[24,31758,31759],{},[83,31760],{"alt":145,"src":31761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[24,31763,31764],{},"要把镜像推送到镜像仓库",[140,31766,31768],{"className":25530,"code":31767,"language":25532,"meta":145,"style":145},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[48,31769,31770],{"__ignoreMap":145},[149,31771,31772,31774,31776,31778],{"class":151,"line":152},[149,31773,28262],{"class":162},[149,31775,30603],{"class":169},[149,31777,31635],{"class":169},[149,31779,31780],{"class":169}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[24,31782,31783],{},"最后将镜像推送到远程仓库",[140,31785,31787],{"className":25530,"code":31786,"language":25532,"meta":145,"style":145},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[48,31788,31789],{"__ignoreMap":145},[149,31790,31791,31793,31795],{"class":151,"line":152},[149,31792,28262],{"class":162},[149,31794,30722],{"class":169},[149,31796,31780],{"class":169},[1783,31798,31799],{},"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":145,"searchDepth":193,"depth":193,"links":31801},[31802,31803,31804],{"id":30189,"depth":235,"text":30190},{"id":30418,"depth":235,"text":30419},{"id":31444,"depth":235,"text":31445},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30181,"description":145},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31811,"title":31812,"body":31813,"description":145,"extension":1798,"meta":31956,"navigation":1800,"path":31957,"seo":31958,"stem":31959,"__hash__":31960},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31814,"toc":31954},[31815,31818,31823,31828,31831,31836,31841,31844,31849,31854,31857,31862,31865,31868,31871,31874,31877,31880,31900,31922,31925,31928,31948,31951],[10,31816,31812],{"id":31817},"_7vscode远程开发",[125,31819,31820],{},[45,31821,31822],{},"插件1：微软Docker工具",[24,31824,31825],{},[83,31826],{"alt":145,"src":31827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[24,31829,31830],{},"docker扩展插件已经进化为container tools了，请安装container tools",[24,31832,31833],{},[83,31834],{"alt":145,"src":31835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[125,31837,31838],{"start":193},[45,31839,31840],{},"插件2：微软Docker远程开发工具",[24,31842,31843],{},"下面这是远程开发的插件。",[24,31845,31846],{},[83,31847],{"alt":145,"src":31848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[24,31850,31851],{},[83,31852],{"alt":145,"src":31853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[24,31855,31856],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[24,31858,31859],{},[83,31860],{"alt":145,"src":31861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[24,31863,31864],{},"安装完拓展之后，vscode进行链接：",[24,31866,31867],{},"1.按ctrl+shift+p",[24,31869,31870],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[24,31872,31873],{},"3.选择目前运行的容器",[24,31875,31876],{},"4.VS Code 会在新窗口中打开并连接到容器",[24,31878,31879],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[140,31881,31883],{"className":25530,"code":31882,"language":25532,"meta":145,"style":145},"docker run -v 主机目录:容器目录 image-name\n",[48,31884,31885],{"__ignoreMap":145},[149,31886,31887,31889,31891,31894,31897],{"class":151,"line":152},[149,31888,28262],{"class":162},[149,31890,28939],{"class":169},[149,31892,31893],{"class":309}," -v",[149,31895,31896],{"class":169}," 主机目录:容器目录",[149,31898,31899],{"class":169}," image-name\n",[140,31901,31903],{"className":25530,"code":31902,"language":25532,"meta":145,"style":145},"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",[48,31904,31905],{"__ignoreMap":145},[149,31906,31907,31909,31911,31914,31916,31919],{"class":151,"line":152},[149,31908,28262],{"class":162},[149,31910,28939],{"class":169},[149,31912,31913],{"class":309}," -it",[149,31915,31893],{"class":309},[149,31917,31918],{"class":169}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[149,31920,31921],{"class":169}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[24,31923,31924],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[24,31926,31927],{},"查看挂载情况：",[140,31929,31931],{"className":25530,"code":31930,"language":25532,"meta":145,"style":145},"mount | grep -i project\n",[48,31932,31933],{"__ignoreMap":145},[149,31934,31935,31938,31940,31943,31945],{"class":151,"line":152},[149,31936,31937],{"class":162},"mount",[149,31939,26818],{"class":325},[149,31941,31942],{"class":162}," grep",[149,31944,28139],{"class":309},[149,31946,31947],{"class":169}," project\n",[24,31949,31950],{},"也可以通过ls来进行查看",[1783,31952,31953],{},"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":145,"searchDepth":193,"depth":193,"links":31955},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31812,"description":145},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31962,"title":31963,"body":31964,"description":1797,"extension":1798,"meta":31968,"navigation":1800,"path":31970,"seo":31971,"stem":31972,"__hash__":31973},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31965,"toc":31966},[],{"title":145,"searchDepth":193,"depth":193,"links":31967},[],{"category":31969},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31963,"description":1797},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31975,"title":31976,"body":31977,"description":1797,"extension":1798,"meta":31981,"navigation":1800,"path":31982,"seo":31983,"stem":31984,"__hash__":31985},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31978,"toc":31979},[],{"title":145,"searchDepth":193,"depth":193,"links":31980},[],{"category":31969},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31976,"description":1797},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31987,"title":31988,"body":31989,"description":1797,"extension":1798,"meta":32282,"navigation":1800,"path":32283,"seo":32284,"stem":32285,"__hash__":32286},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31990,"toc":32280},[31991,31994,32002,32017,32022,32073,32076,32082,32269,32274,32277],[10,31992,31988],{"id":31993},"_1验证深度学习环境",[24,31995,31996,31997],{},"关于环境的安装，看",[2102,31998,32001],{"href":31999,"rel":32000},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25573],"Pytorch-->深度学习",[24,32003,32004,32005,32008,32009,32012,32013,32016],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[48,32006,32007],{},"pytorch-cuda=12.4"," 是一个“ ",[31,32010,32011],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[31,32014,32015],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[24,32018,32019],{},[83,32020],{"alt":145,"src":32021},"\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",[140,32023,32025],{"className":25530,"code":32024,"language":25532,"meta":145,"style":145},"# 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",[48,32026,32027,32032],{"__ignoreMap":145},[149,32028,32029],{"class":151,"line":152},[149,32030,32031],{"class":295},"# CUDA 12.4\n",[149,32033,32034,32037,32039,32042,32045,32048,32051,32054,32056,32059,32062,32065,32068,32070],{"class":151,"line":193},[149,32035,32036],{"class":162},"conda",[149,32038,25542],{"class":169},[149,32040,32041],{"class":169}," pytorch==",[149,32043,32044],{"class":309},"2.5.1",[149,32046,32047],{"class":169}," torchvision==",[149,32049,32050],{"class":309},"0.20.1",[149,32052,32053],{"class":169}," torchaudio==",[149,32055,32044],{"class":309},[149,32057,32058],{"class":169}," pytorch-cuda=",[149,32060,32061],{"class":309},"12.4",[149,32063,32064],{"class":309}," -c",[149,32066,32067],{"class":169}," pytorch",[149,32069,32064],{"class":309},[149,32071,32072],{"class":169}," nvidia\n",[24,32074,32075],{},"）：",[24,32077,32078],{},[2102,32079,32080],{"href":32080,"rel":32081},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25573],[140,32083,32087],{"className":32084,"code":32085,"language":32086,"meta":145,"style":145},"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",[48,32088,32089,32094,32102,32107,32117,32133,32138,32148,32185,32192,32204,32220,32225,32235,32247,32257],{"__ignoreMap":145},[149,32090,32091],{"class":151,"line":152},[149,32092,32093],{"class":295},"# 对深度学习环境进行测试\n",[149,32095,32096,32099],{"class":151,"line":193},[149,32097,32098],{"class":325},"import",[149,32100,32101],{"class":155}," torch\n",[149,32103,32104],{"class":151,"line":235},[149,32105,32106],{"class":295},"# 查看cuda是否被激活\n",[149,32108,32109,32112,32114],{"class":151,"line":340},[149,32110,32111],{"class":155},"flag",[149,32113,166],{"class":325},[149,32115,32116],{"class":155},"torch.cuda.is_available()\n",[149,32118,32119,32122,32124,32127,32130],{"class":151,"line":346},[149,32120,32121],{"class":309},"print",[149,32123,319],{"class":155},[149,32125,32126],{"class":169},"\"cuda:\"",[149,32128,32129],{"class":155},", flag)   ",[149,32131,32132],{"class":295},"#返回true的话说明被激活\n",[149,32134,32135],{"class":151,"line":352},[149,32136,32137],{"class":295},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[149,32139,32140,32143,32145],{"class":151,"line":1021},[149,32141,32142],{"class":155},"ngpu",[149,32144,166],{"class":325},[149,32146,32147],{"class":309},"1\n",[149,32149,32150,32153,32155,32158,32161,32163,32166,32169,32172,32174,32176,32178,32180,32183],{"class":151,"line":1035},[149,32151,32152],{"class":155},"device",[149,32154,166],{"class":325},[149,32156,32157],{"class":155},"torch.device(",[149,32159,32160],{"class":169},"\"cuda:0\"",[149,32162,3424],{"class":325},[149,32164,32165],{"class":155},"(torch.cuda.is_available() ",[149,32167,32168],{"class":325},"and",[149,32170,32171],{"class":155}," ngpu",[149,32173,2819],{"class":325},[149,32175,2056],{"class":309},[149,32177,15427],{"class":155},[149,32179,3421],{"class":325},[149,32181,32182],{"class":169}," \"cpu\"",[149,32184,1878],{"class":155},[149,32186,32187,32189],{"class":151,"line":1054},[149,32188,32121],{"class":309},[149,32190,32191],{"class":155},"(device)\n",[149,32193,32194,32196,32199,32201],{"class":151,"line":1072},[149,32195,32121],{"class":309},[149,32197,32198],{"class":155},"(torch.cuda.get_device_name(",[149,32200,2056],{"class":309},[149,32202,32203],{"class":155},"))\n",[149,32205,32206,32208,32211,32213,32215,32217],{"class":151,"line":1090},[149,32207,32121],{"class":309},[149,32209,32210],{"class":155},"(torch.rand(",[149,32212,1939],{"class":309},[149,32214,2241],{"class":155},[149,32216,1939],{"class":309},[149,32218,32219],{"class":155},").cuda())\n",[149,32221,32222],{"class":151,"line":1633},[149,32223,32224],{"class":295},"# 查看cuda和cudnn的版本\n",[149,32226,32227,32230,32232],{"class":151,"line":1644},[149,32228,32229],{"class":155},"cuda_version",[149,32231,166],{"class":325},[149,32233,32234],{"class":155},"torch.version.cuda\n",[149,32236,32237,32239,32241,32244],{"class":151,"line":3348},[149,32238,32121],{"class":309},[149,32240,319],{"class":155},[149,32242,32243],{"class":169},"\"cuda version\"",[149,32245,32246],{"class":155},",cuda_version)\n",[149,32248,32249,32252,32254],{"class":151,"line":3362},[149,32250,32251],{"class":155},"cudnn_version",[149,32253,166],{"class":325},[149,32255,32256],{"class":155},"torch.backends.cudnn.version()\n",[149,32258,32259,32261,32263,32266],{"class":151,"line":3367},[149,32260,32121],{"class":309},[149,32262,319],{"class":155},[149,32264,32265],{"class":169},"\"cudnn version\"",[149,32267,32268],{"class":155},",cudnn_version)\n",[24,32270,32271],{},[83,32272],{"alt":145,"src":32273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[24,32275,32276],{},"cuda:0 指的是一块显卡",[1783,32278,32279],{},"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":145,"searchDepth":193,"depth":193,"links":32281},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31988,"description":1797},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32288,"title":32289,"body":32290,"description":1797,"extension":1798,"meta":52094,"navigation":1800,"path":52095,"seo":52096,"stem":52097,"__hash__":52098},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32291,"toc":52088},[32292,32295,32299,32303,32306,32311,32316,32319,32324,32329,32334,32337,32341,32346,32350,32355,32358,32363,32366,32369,32372,32375,32380,32383,32388,32393,32398,32403,32406,32410,32413,32418,33022,33027,33030,33035,33038,33041,33505,33508,33511,33514,33517,35568,35571,35576,35581,36376,36379,36384,37162,37166,38825,38829,39543,39547,39551,39556,39561,39566,39569,39574,39579,39584,39589,39594,39598,39603,40885,40890,40893,40896,40899,41054,41057,41060,42276,42281,42976,42980,42984,42989,42994,42997,43002,43007,43012,43017,43022,43027,43032,43037,43042,43047,43052,43057,43062,43067,43072,43077,43082,43087,43092,43097,43102,43107,43112,43117,43122,43127,43132,43137,43142,43147,43151,43155,43158,44636,44640,46287,46291,46985,46989,46992,46995,47539,47542,47546,47549,48946,48950,48953,49531,51318,51322,51325,52085],[10,32293,32289],{"id":32294},"_2经典神经网络",[19,32296,32298],{"id":32297},"_21lenet与alexnet","2.1.LeNet与AlexNet",[120,32300,32302],{"id":32301},"_211原理介绍","2.1.1.原理介绍",[24,32304,32305],{},"LeNet-5",[125,32307,32308],{},[45,32309,32310],{},"原理",[24,32312,32313],{},[83,32314],{"alt":145,"src":32315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[24,32317,32318],{},"B是batch批次；C是channel通道",[125,32320,32321],{"start":193},[45,32322,32323],{},"网络参数详细",[24,32325,32326],{},[83,32327],{"alt":145,"src":32328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[24,32330,32331],{},[83,32332],{"alt":145,"src":32333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[24,32335,32336],{},"AlexNet",[125,32338,32339],{},[45,32340,32310],{},[24,32342,32343],{},[83,32344],{"alt":145,"src":32345},"\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",[125,32347,32348],{"start":193},[45,32349,32323],{},[24,32351,32352],{},[83,32353],{"alt":145,"src":32354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[24,32356,32357],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[24,32359,32360],{},[83,32361],{"alt":145,"src":32362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[24,32364,32365],{},"数据处理中的图像增强操作:",[24,32367,32368],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[24,32370,32371],{},"①增加数据量，保证训练数据充足；②防止过拟合",[24,32373,32374],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[24,32376,32377],{},[83,32378],{"alt":145,"src":32379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[24,32381,32382],{},"提升网络精确度的方法：LRN正则化",[24,32384,32385],{},[83,32386],{"alt":145,"src":32387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[24,32389,32390],{},[83,32391],{"alt":145,"src":32392},"\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",[125,32394,32395],{"start":235},[45,32396,32397],{},"AlexNet的总结",[24,32399,32400],{},[83,32401],{"alt":145,"src":32402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[24,32404,32405],{},"比LeNet模型要深一丢丢",[120,32407,32409],{"id":32408},"_212代码实现","2.1.2.代码实现",[24,32411,32412],{},"（1）LeNet",[125,32414,32415],{},[45,32416,32417],{},"模型搭建",[140,32419,32421],{"className":32084,"code":32420,"language":32086,"meta":145,"style":145},"# 导入库\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",[48,32422,32423,32428,32434,32439,32452,32457,32469,32473,32493,32498,32503,32514,32519,32538,32542,32547,32596,32608,32613,32642,32677,32704,32709,32721,32726,32746,32765,32784,32788,32793,32803,32820,32831,32846,32857,32868,32883,32898,32909,32916,32920,32934,32939,32962,32967,32972,32977,32981,32986,32991,33001],{"__ignoreMap":145},[149,32424,32425],{"class":151,"line":152},[149,32426,32427],{"class":295},"# 导入库\n",[149,32429,32430,32432],{"class":151,"line":193},[149,32431,32098],{"class":325},[149,32433,32101],{"class":155},[149,32435,32436],{"class":151,"line":235},[149,32437,32438],{"class":295},"# 导入神经网络层\n",[149,32440,32441,32444,32447,32449],{"class":151,"line":340},[149,32442,32443],{"class":325},"from",[149,32445,32446],{"class":155}," torch ",[149,32448,32098],{"class":325},[149,32450,32451],{"class":155}," nn\n",[149,32453,32454],{"class":151,"line":346},[149,32455,32456],{"class":295},"# 导入展示神经网络参数的包\n",[149,32458,32459,32461,32464,32466],{"class":151,"line":352},[149,32460,32443],{"class":325},[149,32462,32463],{"class":155}," torchsummary ",[149,32465,32098],{"class":325},[149,32467,32468],{"class":155}," summary\n",[149,32470,32471],{"class":151,"line":1021},[149,32472,4119],{"emptyLinePlaceholder":1800},[149,32474,32475,32477,32480,32482,32485,32487,32490],{"class":151,"line":1035},[149,32476,913],{"class":325},[149,32478,32479],{"class":162}," LeNet",[149,32481,319],{"class":155},[149,32483,32484],{"class":162},"nn",[149,32486,2421],{"class":155},[149,32488,32489],{"class":162},"Module",[149,32491,32492],{"class":155},"):\n",[149,32494,32495],{"class":151,"line":1054},[149,32496,32497],{"class":295},"    # 模型初始化:\n",[149,32499,32500],{"class":151,"line":1072},[149,32501,32502],{"class":295},"    # 定义一些网络层和激活函数\n",[149,32504,32505,32508,32511],{"class":151,"line":1090},[149,32506,32507],{"class":325},"    def",[149,32509,32510],{"class":309}," __init__",[149,32512,32513],{"class":155},"(self):\n",[149,32515,32516],{"class":151,"line":1633},[149,32517,32518],{"class":295},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[149,32520,32521,32524,32527,32530,32533,32536],{"class":151,"line":1644},[149,32522,32523],{"class":309},"        super",[149,32525,32526],{"class":155},"(LeNet,",[149,32528,32529],{"class":309},"self",[149,32531,32532],{"class":155},").",[149,32534,32535],{"class":309},"__init__",[149,32537,3695],{"class":155},[149,32539,32540],{"class":151,"line":3348},[149,32541,4119],{"emptyLinePlaceholder":1800},[149,32543,32544],{"class":151,"line":3362},[149,32545,32546],{"class":295},"        # 定义网络层\n",[149,32548,32549,32552,32555,32557,32560,32563,32565,32567,32569,32572,32574,32576,32578,32581,32583,32585,32587,32590,32592,32594],{"class":151,"line":3367},[149,32550,32551],{"class":309},"        self",[149,32553,32554],{"class":155},".c1",[149,32556,166],{"class":325},[149,32558,32559],{"class":155},"nn.Conv2d(",[149,32561,32562],{"class":6932},"in_channels",[149,32564,166],{"class":325},[149,32566,830],{"class":309},[149,32568,2241],{"class":155},[149,32570,32571],{"class":6932},"out_channels",[149,32573,166],{"class":325},[149,32575,2207],{"class":309},[149,32577,2241],{"class":155},[149,32579,32580],{"class":6932},"kernel_size",[149,32582,166],{"class":325},[149,32584,2182],{"class":309},[149,32586,2241],{"class":155},[149,32588,32589],{"class":6932},"padding",[149,32591,166],{"class":325},[149,32593,1045],{"class":309},[149,32595,1878],{"class":155},[149,32597,32598,32600,32603,32605],{"class":151,"line":3373},[149,32599,32551],{"class":309},[149,32601,32602],{"class":155},".sig",[149,32604,166],{"class":325},[149,32606,32607],{"class":155},"nn.Sigmoid()\n",[149,32609,32610],{"class":151,"line":3394},[149,32611,32612],{"class":295},"        # 定义池化\n",[149,32614,32615,32617,32620,32622,32625,32627,32629,32631,32633,32636,32638,32640],{"class":151,"line":3399},[149,32616,32551],{"class":309},[149,32618,32619],{"class":155},".s2",[149,32621,166],{"class":325},[149,32623,32624],{"class":155},"nn.AvgPool2d(",[149,32626,32580],{"class":6932},[149,32628,166],{"class":325},[149,32630,1045],{"class":309},[149,32632,2241],{"class":155},[149,32634,32635],{"class":6932},"stride",[149,32637,166],{"class":325},[149,32639,1045],{"class":309},[149,32641,1878],{"class":155},[149,32643,32644,32646,32649,32651,32653,32655,32657,32659,32661,32663,32665,32667,32669,32671,32673,32675],{"class":151,"line":3413},[149,32645,32551],{"class":309},[149,32647,32648],{"class":155},".c3",[149,32650,166],{"class":325},[149,32652,32559],{"class":155},[149,32654,32562],{"class":6932},[149,32656,166],{"class":325},[149,32658,2207],{"class":309},[149,32660,2241],{"class":155},[149,32662,32571],{"class":6932},[149,32664,166],{"class":325},[149,32666,2464],{"class":309},[149,32668,2241],{"class":155},[149,32670,32580],{"class":6932},[149,32672,166],{"class":325},[149,32674,2182],{"class":309},[149,32676,1878],{"class":155},[149,32678,32679,32681,32684,32686,32688,32690,32692,32694,32696,32698,32700,32702],{"class":151,"line":3418},[149,32680,32551],{"class":309},[149,32682,32683],{"class":155},".s4",[149,32685,166],{"class":325},[149,32687,32624],{"class":155},[149,32689,32580],{"class":6932},[149,32691,166],{"class":325},[149,32693,1045],{"class":309},[149,32695,2241],{"class":155},[149,32697,32635],{"class":6932},[149,32699,166],{"class":325},[149,32701,1045],{"class":309},[149,32703,1878],{"class":155},[149,32705,32706],{"class":151,"line":3447},[149,32707,32708],{"class":295},"        # 定义平展层\n",[149,32710,32711,32713,32716,32718],{"class":151,"line":3452},[149,32712,32551],{"class":309},[149,32714,32715],{"class":155},".flatten",[149,32717,166],{"class":325},[149,32719,32720],{"class":155},"nn.Flatten()\n",[149,32722,32723],{"class":151,"line":3469},[149,32724,32725],{"class":295},"        # 定义全连接层\n",[149,32727,32728,32730,32733,32735,32738,32740,32742,32744],{"class":151,"line":3474},[149,32729,32551],{"class":309},[149,32731,32732],{"class":155},".f5",[149,32734,166],{"class":325},[149,32736,32737],{"class":155},"nn.Linear(",[149,32739,5705],{"class":309},[149,32741,2241],{"class":155},[149,32743,2678],{"class":309},[149,32745,1878],{"class":155},[149,32747,32748,32750,32753,32755,32757,32759,32761,32763],{"class":151,"line":3479},[149,32749,32551],{"class":309},[149,32751,32752],{"class":155},".f6",[149,32754,166],{"class":325},[149,32756,32737],{"class":155},[149,32758,2678],{"class":309},[149,32760,2241],{"class":155},[149,32762,2572],{"class":309},[149,32764,1878],{"class":155},[149,32766,32767,32769,32772,32774,32776,32778,32780,32782],{"class":151,"line":3484},[149,32768,32551],{"class":309},[149,32770,32771],{"class":155},".f7",[149,32773,166],{"class":325},[149,32775,32737],{"class":155},[149,32777,2572],{"class":309},[149,32779,2241],{"class":155},[149,32781,2309],{"class":309},[149,32783,1878],{"class":155},[149,32785,32786],{"class":151,"line":3498},[149,32787,4119],{"emptyLinePlaceholder":1800},[149,32789,32790],{"class":151,"line":3503},[149,32791,32792],{"class":295},"    # 写工具->写前向传播\n",[149,32794,32795,32797,32800],{"class":151,"line":4296},[149,32796,32507],{"class":325},[149,32798,32799],{"class":162}," forward",[149,32801,32802],{"class":155},"(self,x):\n",[149,32804,32805,32808,32810,32812,32815,32817],{"class":151,"line":4310},[149,32806,32807],{"class":155},"        x",[149,32809,166],{"class":325},[149,32811,32529],{"class":309},[149,32813,32814],{"class":155},".sig(",[149,32816,32529],{"class":309},[149,32818,32819],{"class":155},".c1(x))\n",[149,32821,32822,32824,32826,32828],{"class":151,"line":4318},[149,32823,32807],{"class":155},[149,32825,166],{"class":325},[149,32827,32529],{"class":309},[149,32829,32830],{"class":155},".s2(x)\n",[149,32832,32833,32835,32837,32839,32841,32843],{"class":151,"line":4323},[149,32834,32807],{"class":155},[149,32836,166],{"class":325},[149,32838,32529],{"class":309},[149,32840,32814],{"class":155},[149,32842,32529],{"class":309},[149,32844,32845],{"class":155},".c3(x))\n",[149,32847,32848,32850,32852,32854],{"class":151,"line":4329},[149,32849,32807],{"class":155},[149,32851,166],{"class":325},[149,32853,32529],{"class":309},[149,32855,32856],{"class":155},".s4(x)\n",[149,32858,32859,32861,32863,32865],{"class":151,"line":4335},[149,32860,32807],{"class":155},[149,32862,166],{"class":325},[149,32864,32529],{"class":309},[149,32866,32867],{"class":155},".flatten(x)\n",[149,32869,32870,32872,32874,32876,32878,32880],{"class":151,"line":4340},[149,32871,32807],{"class":155},[149,32873,166],{"class":325},[149,32875,32529],{"class":309},[149,32877,32814],{"class":155},[149,32879,32529],{"class":309},[149,32881,32882],{"class":155},".f5(x))\n",[149,32884,32885,32887,32889,32891,32893,32895],{"class":151,"line":9663},[149,32886,32807],{"class":155},[149,32888,166],{"class":325},[149,32890,32529],{"class":309},[149,32892,32814],{"class":155},[149,32894,32529],{"class":309},[149,32896,32897],{"class":155},".f6(x))\n",[149,32899,32900,32902,32904,32906],{"class":151,"line":9687},[149,32901,32807],{"class":155},[149,32903,166],{"class":325},[149,32905,32529],{"class":309},[149,32907,32908],{"class":155},".f7(x)\n",[149,32910,32911,32913],{"class":151,"line":9692},[149,32912,16464],{"class":325},[149,32914,32915],{"class":155}," x\n",[149,32917,32918],{"class":151,"line":9698},[149,32919,4119],{"emptyLinePlaceholder":1800},[149,32921,32922,32924,32927,32929,32932],{"class":151,"line":9725},[149,32923,3255],{"class":325},[149,32925,32926],{"class":309}," __name__",[149,32928,4667],{"class":325},[149,32930,32931],{"class":169},"\"__main__\"",[149,32933,5457],{"class":155},[149,32935,32936],{"class":151,"line":9730},[149,32937,32938],{"class":295},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[149,32940,32941,32944,32946,32948,32951,32953,32956,32958,32960],{"class":151,"line":9736},[149,32942,32943],{"class":155},"    device",[149,32945,166],{"class":325},[149,32947,32157],{"class":155},[149,32949,32950],{"class":169},"\"cuda\"",[149,32952,3424],{"class":325},[149,32954,32955],{"class":155}," torch.cuda.is_available() ",[149,32957,3421],{"class":325},[149,32959,32182],{"class":169},[149,32961,1878],{"class":155},[149,32963,32964],{"class":151,"line":9748},[149,32965,32966],{"class":295},"    # 如果就是想指定用cpu用下方代码:\n",[149,32968,32969],{"class":151,"line":9760},[149,32970,32971],{"class":295},"    # device=\"cpu\"\n",[149,32973,32974],{"class":151,"line":9772},[149,32975,32976],{"class":295},"    # print(device)\n",[149,32978,32979],{"class":151,"line":11430},[149,32980,4119],{"emptyLinePlaceholder":1800},[149,32982,32983],{"class":151,"line":11455},[149,32984,32985],{"class":295},"    # 实例化模型\n",[149,32987,32988],{"class":151,"line":11478},[149,32989,32990],{"class":295},"    # 将模型放到设备中去运行\n",[149,32992,32993,32996,32998],{"class":151,"line":11502},[149,32994,32995],{"class":155},"    model",[149,32997,166],{"class":325},[149,32999,33000],{"class":155},"LeNet().to(device)\n",[149,33002,33003,33006,33009,33011,33013,33015,33017,33019],{"class":151,"line":11507},[149,33004,33005],{"class":309},"    print",[149,33007,33008],{"class":155},"(summary(model,(",[149,33010,830],{"class":309},[149,33012,2241],{"class":155},[149,33014,2761],{"class":309},[149,33016,2241],{"class":155},[149,33018,2761],{"class":309},[149,33020,33021],{"class":155},")))\n",[24,33023,33024],{},[83,33025],{"alt":145,"src":33026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[24,33028,33029],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[125,33031,33032],{"start":193},[45,33033,33034],{},"训练",[24,33036,33037],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[24,33039,33040],{},"在训练之前可以将数据展示看一下",[140,33042,33044],{"className":32084,"code":33043,"language":32086,"meta":145,"style":145},"# 建立画图的函数，用于展示数据\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",[48,33045,33046,33051,33056,33068,33080,33093,33098,33110,33115,33127,33132,33144,33148,33152,33173,33185,33190,33211,33222,33226,33231,33249,33260,33265,33276,33281,33292,33296,33301,33316,33329,33334,33339,33352,33365,33378,33383,33387,33392,33412,33429,33449,33462,33475,33485,33500],{"__ignoreMap":145},[149,33047,33048],{"class":151,"line":152},[149,33049,33050],{"class":295},"# 建立画图的函数，用于展示数据\n",[149,33052,33053],{"class":151,"line":193},[149,33054,33055],{"class":295},"# torchvision中包含很多内置的数据集\n",[149,33057,33058,33060,33063,33065],{"class":151,"line":235},[149,33059,32443],{"class":325},[149,33061,33062],{"class":155}," sklearn.externals.array_api_compat.torch ",[149,33064,32098],{"class":325},[149,33066,33067],{"class":155}," squeeze\n",[149,33069,33070,33072,33075,33077],{"class":151,"line":340},[149,33071,32443],{"class":325},[149,33073,33074],{"class":155}," torchvision.datasets ",[149,33076,32098],{"class":325},[149,33078,33079],{"class":155}," FashionMNIST\n",[149,33081,33082,33084,33087,33090],{"class":151,"line":346},[149,33083,32098],{"class":325},[149,33085,33086],{"class":155}," numpy ",[149,33088,33089],{"class":325},"as",[149,33091,33092],{"class":155}," np\n",[149,33094,33095],{"class":151,"line":352},[149,33096,33097],{"class":295},"# 引入处理数据集的包\n",[149,33099,33100,33102,33105,33107],{"class":151,"line":1021},[149,33101,32443],{"class":325},[149,33103,33104],{"class":155}," torchvision ",[149,33106,32098],{"class":325},[149,33108,33109],{"class":155}," transforms\n",[149,33111,33112],{"class":151,"line":1035},[149,33113,33114],{"class":295},"# 从torch库中引入数据处理的包\n",[149,33116,33117,33119,33122,33124],{"class":151,"line":1054},[149,33118,32098],{"class":325},[149,33120,33121],{"class":155}," torch.utils.data ",[149,33123,33089],{"class":325},[149,33125,33126],{"class":155}," Data\n",[149,33128,33129],{"class":151,"line":1072},[149,33130,33131],{"class":295},"# 导入画图的库\n",[149,33133,33134,33136,33139,33141],{"class":151,"line":1090},[149,33135,32098],{"class":325},[149,33137,33138],{"class":155}," matplotlib.pyplot ",[149,33140,33089],{"class":325},[149,33142,33143],{"class":155}," plt\n",[149,33145,33146],{"class":151,"line":1633},[149,33147,4119],{"emptyLinePlaceholder":1800},[149,33149,33150],{"class":151,"line":1644},[149,33151,4119],{"emptyLinePlaceholder":1800},[149,33153,33154,33157,33159,33162,33165,33167,33170],{"class":151,"line":3348},[149,33155,33156],{"class":155},"train_data",[149,33158,166],{"class":325},[149,33160,33161],{"class":155},"FashionMNIST(",[149,33163,33164],{"class":6932},"root",[149,33166,166],{"class":325},[149,33168,33169],{"class":169},"'.\u002Fdata'",[149,33171,33172],{"class":155},",\n",[149,33174,33175,33178,33180,33183],{"class":151,"line":3362},[149,33176,33177],{"class":6932},"                        train",[149,33179,166],{"class":325},[149,33181,33182],{"class":309},"True",[149,33184,33172],{"class":155},[149,33186,33187],{"class":151,"line":3367},[149,33188,33189],{"class":295},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[149,33191,33192,33195,33197,33200,33203,33205,33208],{"class":151,"line":3373},[149,33193,33194],{"class":6932},"                        transform",[149,33196,166],{"class":325},[149,33198,33199],{"class":155},"transforms.Compose([transforms.Resize(",[149,33201,33202],{"class":6932},"size",[149,33204,166],{"class":325},[149,33206,33207],{"class":309},"224",[149,33209,33210],{"class":155},"),transforms.ToTensor()]),\n",[149,33212,33213,33216,33218,33220],{"class":151,"line":3394},[149,33214,33215],{"class":6932},"                        download",[149,33217,166],{"class":325},[149,33219,33182],{"class":309},[149,33221,1878],{"class":155},[149,33223,33224],{"class":151,"line":3399},[149,33225,4119],{"emptyLinePlaceholder":1800},[149,33227,33228],{"class":151,"line":3413},[149,33229,33230],{"class":295},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[149,33232,33233,33236,33238,33241,33244,33246],{"class":151,"line":3418},[149,33234,33235],{"class":155},"train_loader",[149,33237,166],{"class":325},[149,33239,33240],{"class":155},"Data.DataLoader(",[149,33242,33243],{"class":6932},"dataset",[149,33245,166],{"class":325},[149,33247,33248],{"class":155},"train_data,\n",[149,33250,33251,33254,33256,33258],{"class":151,"line":3447},[149,33252,33253],{"class":6932},"                             batch_size",[149,33255,166],{"class":325},[149,33257,2068],{"class":309},[149,33259,33172],{"class":155},[149,33261,33262],{"class":151,"line":3452},[149,33263,33264],{"class":295},"                             # 数据是否打乱\n",[149,33266,33267,33270,33272,33274],{"class":151,"line":3469},[149,33268,33269],{"class":6932},"                             shuffle",[149,33271,166],{"class":325},[149,33273,33182],{"class":309},[149,33275,33172],{"class":155},[149,33277,33278],{"class":151,"line":3474},[149,33279,33280],{"class":295},"                             # 规定加载数据的进程\n",[149,33282,33283,33286,33288,33290],{"class":151,"line":3479},[149,33284,33285],{"class":6932},"                             num_workers",[149,33287,166],{"class":325},[149,33289,2056],{"class":309},[149,33291,1878],{"class":155},[149,33293,33294],{"class":151,"line":3484},[149,33295,4119],{"emptyLinePlaceholder":1800},[149,33297,33298],{"class":151,"line":3498},[149,33299,33300],{"class":295},"# 获得一个batch的数据\n",[149,33302,33303,33305,33308,33310,33313],{"class":151,"line":3503},[149,33304,4743],{"class":325},[149,33306,33307],{"class":155}," step,(b_x,b_y) ",[149,33309,27752],{"class":325},[149,33311,33312],{"class":309}," enumerate",[149,33314,33315],{"class":155},"(train_loader):\n",[149,33317,33318,33320,33323,33325,33327],{"class":151,"line":4296},[149,33319,4819],{"class":325},[149,33321,33322],{"class":155}," step ",[149,33324,2819],{"class":325},[149,33326,5811],{"class":309},[149,33328,5457],{"class":155},[149,33330,33331],{"class":151,"line":4310},[149,33332,33333],{"class":325},"        break\n",[149,33335,33336],{"class":151,"line":4318},[149,33337,33338],{"class":295},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[149,33340,33341,33344,33346,33349],{"class":151,"line":4323},[149,33342,33343],{"class":155},"batch_x",[149,33345,166],{"class":325},[149,33347,33348],{"class":155},"b_x.squeeze().numpy()  ",[149,33350,33351],{"class":295},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[149,33353,33354,33357,33359,33362],{"class":151,"line":4329},[149,33355,33356],{"class":155},"batch_y",[149,33358,166],{"class":325},[149,33360,33361],{"class":155},"b_y.numpy()   ",[149,33363,33364],{"class":295},"#将张量转换成功numpy数组\n",[149,33366,33367,33370,33372,33375],{"class":151,"line":4335},[149,33368,33369],{"class":155},"class_label",[149,33371,166],{"class":325},[149,33373,33374],{"class":155},"train_data.classes  ",[149,33376,33377],{"class":295},"#训练集标签\n",[149,33379,33380],{"class":151,"line":4340},[149,33381,33382],{"class":295},"# print(class_label)\n",[149,33384,33385],{"class":151,"line":9663},[149,33386,4119],{"emptyLinePlaceholder":1800},[149,33388,33389],{"class":151,"line":9687},[149,33390,33391],{"class":295},"# 可视化一个batch的图像\n",[149,33393,33394,33397,33400,33402,33404,33406,33408,33410],{"class":151,"line":9692},[149,33395,33396],{"class":155},"plt.figure(",[149,33398,33399],{"class":6932},"figsize",[149,33401,166],{"class":325},[149,33403,319],{"class":155},[149,33405,2361],{"class":309},[149,33407,2241],{"class":155},[149,33409,2182],{"class":309},[149,33411,32203],{"class":155},[149,33413,33414,33416,33419,33421,33424,33426],{"class":151,"line":9698},[149,33415,4743],{"class":325},[149,33417,33418],{"class":155}," ii ",[149,33420,27752],{"class":325},[149,33422,33423],{"class":155}," np.arange(",[149,33425,9074],{"class":309},[149,33427,33428],{"class":155},"(batch_y)):\n",[149,33430,33431,33434,33436,33438,33440,33443,33445,33447],{"class":151,"line":9725},[149,33432,33433],{"class":155},"    plt.subplot(",[149,33435,2157],{"class":309},[149,33437,2241],{"class":155},[149,33439,2464],{"class":309},[149,33441,33442],{"class":155},",ii ",[149,33444,2344],{"class":325},[149,33446,26827],{"class":309},[149,33448,1878],{"class":155},[149,33450,33451,33454,33457,33459],{"class":151,"line":9730},[149,33452,33453],{"class":155},"    plt.imshow(batch_x[ii,:,:],",[149,33455,33456],{"class":6932},"cmap",[149,33458,166],{"class":325},[149,33460,33461],{"class":155},"plt.cm.gray)\n",[149,33463,33464,33467,33469,33471,33473],{"class":151,"line":9736},[149,33465,33466],{"class":155},"    plt.title(class_label[batch_y[ii]],",[149,33468,33202],{"class":6932},[149,33470,166],{"class":325},[149,33472,2309],{"class":309},[149,33474,1878],{"class":155},[149,33476,33477,33480,33483],{"class":151,"line":9748},[149,33478,33479],{"class":155},"    plt.axis(",[149,33481,33482],{"class":169},"\"off\"",[149,33484,1878],{"class":155},[149,33486,33487,33490,33493,33495,33498],{"class":151,"line":9760},[149,33488,33489],{"class":155},"    plt.subplots_adjust(",[149,33491,33492],{"class":6932},"wspace",[149,33494,166],{"class":325},[149,33496,33497],{"class":309},"0.05",[149,33499,1878],{"class":155},[149,33501,33502],{"class":151,"line":9772},[149,33503,33504],{"class":155},"plt.show()\n",[24,33506,33507],{},"用matplotlib进行展示的过程可以后续再补",[24,33509,33510],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[24,33512,33513],{},"训练次数就是按照批次过整个训练集数据的次数",[24,33515,33516],{},"模型训练：",[140,33518,33520],{"className":32084,"code":33519,"language":32086,"meta":145,"style":145},"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",[48,33521,33522,33529,33536,33540,33552,33558,33569,33579,33589,33599,33609,33614,33626,33636,33640,33644,33649,33660,33673,33684,33701,33712,33751,33767,33779,33790,33795,33806,33822,33833,33844,33855,33862,33866,33871,33876,33880,33885,33895,33916,33920,33924,33929,33934,33939,33959,33963,33968,33978,33982,33987,33996,34001,34006,34011,34021,34025,34029,34034,34039,34049,34054,34064,34069,34078,34083,34092,34097,34106,34110,34115,34125,34129,34133,34138,34153,34181,34196,34200,34205,34210,34219,34224,34233,34238,34247,34252,34261,34266,34275,34280,34289,34294,34307,34312,34322,34327,34337,34343,34349,34355,34361,34372,34378,34398,34404,34415,34421,34427,34433,34439,34445,34451,34457,34477,34483,34499,34505,34519,34525,34540,34546,34555,34561,34570,34576,34582,34591,34597,34608,34614,34633,34639,34650,34656,34676,34692,34698,34712,34718,34724,34735,34741,34747,34757,34763,34774,34780,34790,34795,34801,34850,34897,34902,34908,34927,34933,34953,34959,34965,34975,34980,34986,35002,35047,35053,35059,35065,35076,35082,35088,35094,35112,35126,35135,35144,35153,35162,35168,35174,35182,35187,35193,35204,35210,35230,35236,35242,35248,35265,35271,35277,35283,35289,35295,35322,35346,35352,35358,35364,35375,35386,35392,35409,35432,35455,35461,35466,35475,35485,35491,35496,35502,35515,35521,35532,35543,35562],{"__ignoreMap":145},[149,33523,33524,33526],{"class":151,"line":152},[149,33525,32098],{"class":325},[149,33527,33528],{"class":155}," copy\n",[149,33530,33531,33533],{"class":151,"line":193},[149,33532,32098],{"class":325},[149,33534,33535],{"class":155}," time\n",[149,33537,33538],{"class":151,"line":235},[149,33539,4119],{"emptyLinePlaceholder":1800},[149,33541,33542,33544,33547,33549],{"class":151,"line":340},[149,33543,32098],{"class":325},[149,33545,33546],{"class":155}," pandas ",[149,33548,33089],{"class":325},[149,33550,33551],{"class":155}," pd\n",[149,33553,33554,33556],{"class":151,"line":346},[149,33555,32098],{"class":325},[149,33557,32101],{"class":155},[149,33559,33560,33562,33564,33566],{"class":151,"line":352},[149,33561,32443],{"class":325},[149,33563,33121],{"class":155},[149,33565,32098],{"class":325},[149,33567,33568],{"class":155}," Dataset\n",[149,33570,33571,33573,33575,33577],{"class":151,"line":1021},[149,33572,32443],{"class":325},[149,33574,33074],{"class":155},[149,33576,32098],{"class":325},[149,33578,33079],{"class":155},[149,33580,33581,33583,33585,33587],{"class":151,"line":1035},[149,33582,32443],{"class":325},[149,33584,33104],{"class":155},[149,33586,32098],{"class":325},[149,33588,33109],{"class":155},[149,33590,33591,33593,33595,33597],{"class":151,"line":1054},[149,33592,32098],{"class":325},[149,33594,33121],{"class":155},[149,33596,33089],{"class":325},[149,33598,33126],{"class":155},[149,33600,33601,33603,33605,33607],{"class":151,"line":1072},[149,33602,32098],{"class":325},[149,33604,33138],{"class":155},[149,33606,33089],{"class":325},[149,33608,33143],{"class":155},[149,33610,33611],{"class":151,"line":1090},[149,33612,33613],{"class":295},"# 导入模型\n",[149,33615,33616,33618,33621,33623],{"class":151,"line":1633},[149,33617,32443],{"class":325},[149,33619,33620],{"class":155}," model ",[149,33622,32098],{"class":325},[149,33624,33625],{"class":155}," LeNet\n",[149,33627,33628,33630,33632,33634],{"class":151,"line":1644},[149,33629,32443],{"class":325},[149,33631,32446],{"class":155},[149,33633,32098],{"class":325},[149,33635,32451],{"class":155},[149,33637,33638],{"class":151,"line":3348},[149,33639,4119],{"emptyLinePlaceholder":1800},[149,33641,33642],{"class":151,"line":3362},[149,33643,4119],{"emptyLinePlaceholder":1800},[149,33645,33646],{"class":151,"line":3367},[149,33647,33648],{"class":295},"# 处理训练集与验证集函数--->划分数据集\n",[149,33650,33651,33654,33657],{"class":151,"line":3373},[149,33652,33653],{"class":325},"def",[149,33655,33656],{"class":162}," train_val_data_process",[149,33658,33659],{"class":155},"():\n",[149,33661,33662,33665,33667,33669,33671],{"class":151,"line":3394},[149,33663,33664],{"class":155},"    train_data",[149,33666,166],{"class":325},[149,33668,33161],{"class":155},[149,33670,33169],{"class":169},[149,33672,33172],{"class":155},[149,33674,33675,33678,33680,33682],{"class":151,"line":3399},[149,33676,33677],{"class":6932},"                            train",[149,33679,166],{"class":325},[149,33681,33182],{"class":309},[149,33683,33172],{"class":155},[149,33685,33686,33689,33691,33693,33695,33697,33699],{"class":151,"line":3413},[149,33687,33688],{"class":6932},"                            transform",[149,33690,166],{"class":325},[149,33692,33199],{"class":155},[149,33694,33202],{"class":6932},[149,33696,166],{"class":325},[149,33698,2761],{"class":309},[149,33700,33210],{"class":155},[149,33702,33703,33706,33708,33710],{"class":151,"line":3418},[149,33704,33705],{"class":6932},"                            download",[149,33707,166],{"class":325},[149,33709,33182],{"class":309},[149,33711,1878],{"class":155},[149,33713,33714,33717,33719,33722,33725,33727,33730,33732,33734,33737,33739,33741,33744,33746,33748],{"class":151,"line":3447},[149,33715,33716],{"class":155},"    train_data,val_data",[149,33718,166],{"class":325},[149,33720,33721],{"class":155},"Data.random_split(train_data,[",[149,33723,33724],{"class":309},"round",[149,33726,319],{"class":155},[149,33728,33729],{"class":309},"0.8",[149,33731,2318],{"class":325},[149,33733,9074],{"class":309},[149,33735,33736],{"class":155},"(train_data)),",[149,33738,33724],{"class":309},[149,33740,319],{"class":155},[149,33742,33743],{"class":309},"0.2",[149,33745,2318],{"class":325},[149,33747,9074],{"class":309},[149,33749,33750],{"class":155},"(train_data))])\n",[149,33752,33753,33756,33758,33761,33763,33765],{"class":151,"line":3452},[149,33754,33755],{"class":155},"    train_dataloader ",[149,33757,166],{"class":325},[149,33759,33760],{"class":155}," Data.DataLoader(",[149,33762,33243],{"class":6932},[149,33764,166],{"class":325},[149,33766,33248],{"class":155},[149,33768,33769,33772,33774,33777],{"class":151,"line":3469},[149,33770,33771],{"class":6932},"                                       batch_size",[149,33773,166],{"class":325},[149,33775,33776],{"class":309},"128",[149,33778,33172],{"class":155},[149,33780,33781,33784,33786,33788],{"class":151,"line":3474},[149,33782,33783],{"class":6932},"                                       shuffle",[149,33785,166],{"class":325},[149,33787,33182],{"class":309},[149,33789,33172],{"class":155},[149,33791,33792],{"class":151,"line":3479},[149,33793,33794],{"class":295},"                                       # 规定8个进程\n",[149,33796,33797,33800,33802,33804],{"class":151,"line":3484},[149,33798,33799],{"class":6932},"                                       num_workers",[149,33801,166],{"class":325},[149,33803,2258],{"class":309},[149,33805,1878],{"class":155},[149,33807,33808,33811,33813,33815,33817,33819],{"class":151,"line":3498},[149,33809,33810],{"class":155},"    val_dataloader",[149,33812,166],{"class":325},[149,33814,33240],{"class":155},[149,33816,33243],{"class":6932},[149,33818,166],{"class":325},[149,33820,33821],{"class":155},"val_data,\n",[149,33823,33824,33827,33829,33831],{"class":151,"line":3503},[149,33825,33826],{"class":6932},"                                   batch_size",[149,33828,166],{"class":325},[149,33830,33776],{"class":309},[149,33832,33172],{"class":155},[149,33834,33835,33838,33840,33842],{"class":151,"line":4296},[149,33836,33837],{"class":6932},"                                   shuffle",[149,33839,166],{"class":325},[149,33841,33182],{"class":309},[149,33843,33172],{"class":155},[149,33845,33846,33849,33851,33853],{"class":151,"line":4310},[149,33847,33848],{"class":6932},"                                   num_workers",[149,33850,166],{"class":325},[149,33852,2258],{"class":309},[149,33854,1878],{"class":155},[149,33856,33857,33859],{"class":151,"line":4318},[149,33858,5808],{"class":325},[149,33860,33861],{"class":155}," train_dataloader,val_dataloader\n",[149,33863,33864],{"class":151,"line":4323},[149,33865,4119],{"emptyLinePlaceholder":1800},[149,33867,33868],{"class":151,"line":4329},[149,33869,33870],{"class":295},"# 验证是否出错\n",[149,33872,33873],{"class":151,"line":4335},[149,33874,33875],{"class":295},"# train_val_data_process()\n",[149,33877,33878],{"class":151,"line":4340},[149,33879,4119],{"emptyLinePlaceholder":1800},[149,33881,33882],{"class":151,"line":9663},[149,33883,33884],{"class":295},"# 定义模型训练函数\n",[149,33886,33887,33889,33892],{"class":151,"line":9687},[149,33888,33653],{"class":325},[149,33890,33891],{"class":162}," train_model_process",[149,33893,33894],{"class":155},"(model,train_dataloader,val_dataloader,num_epochs):\n",[149,33896,33897,33899,33901,33903,33905,33907,33909,33911,33914],{"class":151,"line":9692},[149,33898,32943],{"class":155},[149,33900,166],{"class":325},[149,33902,32157],{"class":155},[149,33904,32950],{"class":169},[149,33906,3424],{"class":325},[149,33908,32955],{"class":155},[149,33910,3421],{"class":325},[149,33912,33913],{"class":169}," 'cpu'",[149,33915,1878],{"class":155},[149,33917,33918],{"class":151,"line":9698},[149,33919,4119],{"emptyLinePlaceholder":1800},[149,33921,33922],{"class":151,"line":9725},[149,33923,4119],{"emptyLinePlaceholder":1800},[149,33925,33926],{"class":151,"line":9730},[149,33927,33928],{"class":295},"    # 定义优化器\n",[149,33930,33931],{"class":151,"line":9736},[149,33932,33933],{"class":295},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[149,33935,33936],{"class":151,"line":9748},[149,33937,33938],{"class":295},"    # lr为学习率\n",[149,33940,33941,33944,33946,33949,33952,33954,33957],{"class":151,"line":9760},[149,33942,33943],{"class":155},"    optimizer",[149,33945,166],{"class":325},[149,33947,33948],{"class":155},"torch.optim.Adam(model.parameters(),",[149,33950,33951],{"class":6932},"lr",[149,33953,166],{"class":325},[149,33955,33956],{"class":309},"0.001",[149,33958,1878],{"class":155},[149,33960,33961],{"class":151,"line":9772},[149,33962,4119],{"emptyLinePlaceholder":1800},[149,33964,33965],{"class":151,"line":11430},[149,33966,33967],{"class":295},"    # 定义损失函数使用交叉熵损失函数\n",[149,33969,33970,33973,33975],{"class":151,"line":11455},[149,33971,33972],{"class":155},"    criterion",[149,33974,166],{"class":325},[149,33976,33977],{"class":155},"nn.CrossEntropyLoss()\n",[149,33979,33980],{"class":151,"line":11478},[149,33981,4119],{"emptyLinePlaceholder":1800},[149,33983,33984],{"class":151,"line":11502},[149,33985,33986],{"class":295},"    # 将模型放到GPU中进行训练\n",[149,33988,33989,33991,33993],{"class":151,"line":11507},[149,33990,32995],{"class":155},[149,33992,166],{"class":325},[149,33994,33995],{"class":155},"model.to(device)\n",[149,33997,33998],{"class":151,"line":11512},[149,33999,34000],{"class":295},"    # 复制当前模型的参数\n",[149,34002,34003],{"class":151,"line":11517},[149,34004,34005],{"class":295},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[149,34007,34008],{"class":151,"line":11526},[149,34009,34010],{"class":295},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[149,34012,34013,34016,34018],{"class":151,"line":11531},[149,34014,34015],{"class":155},"    best_model_wts",[149,34017,166],{"class":325},[149,34019,34020],{"class":155},"copy.deepcopy(model.state_dict())\n",[149,34022,34023],{"class":151,"line":11537},[149,34024,4119],{"emptyLinePlaceholder":1800},[149,34026,34027],{"class":151,"line":11558},[149,34028,4119],{"emptyLinePlaceholder":1800},[149,34030,34031],{"class":151,"line":11564},[149,34032,34033],{"class":295},"    # 初始化参数\n",[149,34035,34036],{"class":151,"line":11578},[149,34037,34038],{"class":295},"    # 最高准确度\n",[149,34040,34041,34044,34046],{"class":151,"line":11584},[149,34042,34043],{"class":155},"    best_acc",[149,34045,166],{"class":325},[149,34047,34048],{"class":309},"0.0\n",[149,34050,34051],{"class":151,"line":11611},[149,34052,34053],{"class":295},"    # 训练集损失列表\n",[149,34055,34056,34059,34061],{"class":151,"line":11620},[149,34057,34058],{"class":155},"    train_loss_all",[149,34060,166],{"class":325},[149,34062,34063],{"class":155},"[]\n",[149,34065,34066],{"class":151,"line":11626},[149,34067,34068],{"class":295},"    # 验证集函数列表\n",[149,34070,34071,34074,34076],{"class":151,"line":11634},[149,34072,34073],{"class":155},"    val_loss_all",[149,34075,166],{"class":325},[149,34077,34063],{"class":155},[149,34079,34080],{"class":151,"line":11639},[149,34081,34082],{"class":295},"    # 训练集准确度列表\n",[149,34084,34085,34088,34090],{"class":151,"line":18314},[149,34086,34087],{"class":155},"    train_acc_all",[149,34089,166],{"class":325},[149,34091,34063],{"class":155},[149,34093,34094],{"class":151,"line":18320},[149,34095,34096],{"class":295},"    # 验证集准确度列表\n",[149,34098,34099,34102,34104],{"class":151,"line":18343},[149,34100,34101],{"class":155},"    val_acc_all",[149,34103,166],{"class":325},[149,34105,34063],{"class":155},[149,34107,34108],{"class":151,"line":18349},[149,34109,4119],{"emptyLinePlaceholder":1800},[149,34111,34112],{"class":151,"line":18372},[149,34113,34114],{"class":295},"    # 保存当前时间--->方便看每轮训练的时间\n",[149,34116,34117,34120,34122],{"class":151,"line":18386},[149,34118,34119],{"class":155},"    since",[149,34121,166],{"class":325},[149,34123,34124],{"class":155},"time.time()\n",[149,34126,34127],{"class":151,"line":18406},[149,34128,4119],{"emptyLinePlaceholder":1800},[149,34130,34131],{"class":151,"line":18412},[149,34132,4119],{"emptyLinePlaceholder":1800},[149,34134,34135],{"class":151,"line":18423},[149,34136,34137],{"class":295},"    # 准备工作完成--->开始训练模型\n",[149,34139,34140,34142,34145,34147,34150],{"class":151,"line":18446},[149,34141,4919],{"class":325},[149,34143,34144],{"class":155}," epoch ",[149,34146,27752],{"class":325},[149,34148,34149],{"class":309}," range",[149,34151,34152],{"class":155},"(num_epochs):\n",[149,34154,34155,34158,34160,34163,34166,34168,34170,34172,34175,34177,34179],{"class":151,"line":18468},[149,34156,34157],{"class":309},"        print",[149,34159,319],{"class":155},[149,34161,34162],{"class":169},"\"Epoch ",[149,34164,34165],{"class":309},"{}",[149,34167,2447],{"class":169},[149,34169,34165],{"class":309},[149,34171,2115],{"class":169},[149,34173,34174],{"class":155},".format(epoch,num_epochs",[149,34176,2395],{"class":325},[149,34178,830],{"class":309},[149,34180,32203],{"class":155},[149,34182,34183,34185,34187,34190,34192,34194],{"class":151,"line":18473},[149,34184,34157],{"class":309},[149,34186,319],{"class":155},[149,34188,34189],{"class":169},"\"-\"",[149,34191,2318],{"class":325},[149,34193,2309],{"class":309},[149,34195,1878],{"class":155},[149,34197,34198],{"class":151,"line":18479},[149,34199,4119],{"emptyLinePlaceholder":1800},[149,34201,34202],{"class":151,"line":18493},[149,34203,34204],{"class":295},"        # 初始化参数\n",[149,34206,34207],{"class":151,"line":18506},[149,34208,34209],{"class":295},"        # 训练集损失函数\n",[149,34211,34212,34215,34217],{"class":151,"line":18511},[149,34213,34214],{"class":155},"        train_loss",[149,34216,166],{"class":325},[149,34218,34048],{"class":309},[149,34220,34221],{"class":151,"line":18525},[149,34222,34223],{"class":295},"        # 训练集准确度\n",[149,34225,34226,34229,34231],{"class":151,"line":18530},[149,34227,34228],{"class":155},"        train_corrects",[149,34230,166],{"class":325},[149,34232,4803],{"class":309},[149,34234,34235],{"class":151,"line":18536},[149,34236,34237],{"class":295},"        # 验证集损失函数\n",[149,34239,34240,34243,34245],{"class":151,"line":18541},[149,34241,34242],{"class":155},"        val_loss",[149,34244,166],{"class":325},[149,34246,34048],{"class":309},[149,34248,34249],{"class":151,"line":18555},[149,34250,34251],{"class":295},"        # 验证集准确度\n",[149,34253,34254,34257,34259],{"class":151,"line":18560},[149,34255,34256],{"class":155},"        val_corrects",[149,34258,166],{"class":325},[149,34260,4803],{"class":309},[149,34262,34263],{"class":151,"line":18565},[149,34264,34265],{"class":295},"        # 训练集样本数量\n",[149,34267,34268,34271,34273],{"class":151,"line":18579},[149,34269,34270],{"class":155},"        train_num",[149,34272,166],{"class":325},[149,34274,4803],{"class":309},[149,34276,34277],{"class":151,"line":18591},[149,34278,34279],{"class":295},"        # 验证集样本数量\n",[149,34281,34282,34285,34287],{"class":151,"line":18596},[149,34283,34284],{"class":155},"        val_num",[149,34286,166],{"class":325},[149,34288,4803],{"class":309},[149,34290,34291],{"class":151,"line":18609},[149,34292,34293],{"class":295},"        # 将数据放到设备,并开始训练\n",[149,34295,34296,34298,34300,34302,34304],{"class":151,"line":18614},[149,34297,5121],{"class":325},[149,34299,33307],{"class":155},[149,34301,27752],{"class":325},[149,34303,33312],{"class":309},[149,34305,34306],{"class":155},"(train_dataloader):\n",[149,34308,34309],{"class":151,"line":18619},[149,34310,34311],{"class":295},"            # 将特征放入到训练设备\n",[149,34313,34314,34317,34319],{"class":151,"line":18624},[149,34315,34316],{"class":155},"            b_x",[149,34318,166],{"class":325},[149,34320,34321],{"class":155},"b_x.to(device)\n",[149,34323,34324],{"class":151,"line":18637},[149,34325,34326],{"class":295},"            # 将标签放入到训练设备当中\n",[149,34328,34329,34332,34334],{"class":151,"line":18642},[149,34330,34331],{"class":155},"            b_y",[149,34333,166],{"class":325},[149,34335,34336],{"class":155},"b_y.to(device)\n",[149,34338,34340],{"class":151,"line":34339},98,[149,34341,34342],{"class":295},"            # 设置模型为训练模式\n",[149,34344,34346],{"class":151,"line":34345},99,[149,34347,34348],{"class":155},"            model.train()\n",[149,34350,34352],{"class":151,"line":34351},100,[149,34353,34354],{"class":295},"            # 将数据放到模型当中,开始前向传播\n",[149,34356,34358],{"class":151,"line":34357},101,[149,34359,34360],{"class":295},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[149,34362,34364,34367,34369],{"class":151,"line":34363},102,[149,34365,34366],{"class":155},"            output",[149,34368,166],{"class":325},[149,34370,34371],{"class":155},"model(b_x)\n",[149,34373,34375],{"class":151,"line":34374},103,[149,34376,34377],{"class":295},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[149,34379,34381,34384,34386,34389,34392,34394,34396],{"class":151,"line":34380},104,[149,34382,34383],{"class":155},"            pre_lab",[149,34385,166],{"class":325},[149,34387,34388],{"class":155},"torch.argmax(output,",[149,34390,34391],{"class":6932},"dim",[149,34393,166],{"class":325},[149,34395,830],{"class":309},[149,34397,1878],{"class":155},[149,34399,34401],{"class":151,"line":34400},105,[149,34402,34403],{"class":295},"            # 计算每一个batch的损失函数\n",[149,34405,34407,34410,34412],{"class":151,"line":34406},106,[149,34408,34409],{"class":155},"            loss",[149,34411,166],{"class":325},[149,34413,34414],{"class":155},"criterion(output,b_y)\n",[149,34416,34418],{"class":151,"line":34417},107,[149,34419,34420],{"class":295},"            # 将梯度初始化为0\n",[149,34422,34424],{"class":151,"line":34423},108,[149,34425,34426],{"class":155},"            optimizer.zero_grad()\n",[149,34428,34430],{"class":151,"line":34429},109,[149,34431,34432],{"class":295},"            # 梯度置为0后再进行反向传播\n",[149,34434,34436],{"class":151,"line":34435},110,[149,34437,34438],{"class":155},"            loss.backward()\n",[149,34440,34442],{"class":151,"line":34441},111,[149,34443,34444],{"class":295},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[149,34446,34448],{"class":151,"line":34447},112,[149,34449,34450],{"class":155},"            optimizer.step()\n",[149,34452,34454],{"class":151,"line":34453},113,[149,34455,34456],{"class":295},"            # loss.item()指的是batch的平均损失\n",[149,34458,34460,34463,34465,34468,34470,34473,34475],{"class":151,"line":34459},114,[149,34461,34462],{"class":155},"            train_loss",[149,34464,11191],{"class":325},[149,34466,34467],{"class":155},"loss.item()",[149,34469,2318],{"class":325},[149,34471,34472],{"class":155},"b_x.size(",[149,34474,2056],{"class":309},[149,34476,1878],{"class":155},[149,34478,34480],{"class":151,"line":34479},115,[149,34481,34482],{"class":295},"            # 计算每个批次中正确预测的数量\n",[149,34484,34486,34489,34491,34494,34496],{"class":151,"line":34485},116,[149,34487,34488],{"class":155},"            train_corrects",[149,34490,11191],{"class":325},[149,34492,34493],{"class":155},"torch.sum(pre_lab",[149,34495,4667],{"class":325},[149,34497,34498],{"class":155},"b_y.data)\n",[149,34500,34502],{"class":151,"line":34501},117,[149,34503,34504],{"class":295},"            # 计算目前为止一共处理了多少样本\n",[149,34506,34508,34511,34513,34515,34517],{"class":151,"line":34507},118,[149,34509,34510],{"class":155},"            train_num",[149,34512,11191],{"class":325},[149,34514,34472],{"class":155},[149,34516,2056],{"class":309},[149,34518,1878],{"class":155},[149,34520,34522],{"class":151,"line":34521},119,[149,34523,34524],{"class":295},"        # 验证数据\n",[149,34526,34528,34530,34533,34535,34537],{"class":151,"line":34527},120,[149,34529,5121],{"class":325},[149,34531,34532],{"class":155}," step ,(b_x,b_y) ",[149,34534,27752],{"class":325},[149,34536,33312],{"class":309},[149,34538,34539],{"class":155},"(val_dataloader):\n",[149,34541,34543],{"class":151,"line":34542},121,[149,34544,34545],{"class":295},"            # 将特征放到验证设备当中\n",[149,34547,34549,34551,34553],{"class":151,"line":34548},122,[149,34550,34316],{"class":155},[149,34552,166],{"class":325},[149,34554,34321],{"class":155},[149,34556,34558],{"class":151,"line":34557},123,[149,34559,34560],{"class":295},"            # 将标签放到放到训练设备当中\n",[149,34562,34564,34566,34568],{"class":151,"line":34563},124,[149,34565,34331],{"class":155},[149,34567,166],{"class":325},[149,34569,34336],{"class":155},[149,34571,34573],{"class":151,"line":34572},125,[149,34574,34575],{"class":295},"            # 开启验证模式，设置模型为评估模式\n",[149,34577,34579],{"class":151,"line":34578},126,[149,34580,34581],{"class":155},"            model.eval()\n",[149,34583,34585,34588],{"class":151,"line":34584},127,[149,34586,34587],{"class":325},"            with",[149,34589,34590],{"class":155}," torch.no_grad():\n",[149,34592,34594],{"class":151,"line":34593},128,[149,34595,34596],{"class":295},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[149,34598,34600,34603,34605],{"class":151,"line":34599},129,[149,34601,34602],{"class":155},"                output ",[149,34604,166],{"class":325},[149,34606,34607],{"class":155}," model(b_x)\n",[149,34609,34611],{"class":151,"line":34610},130,[149,34612,34613],{"class":295},"                # 查找每一行中最大值对应的下标\n",[149,34615,34617,34620,34622,34625,34627,34629,34631],{"class":151,"line":34616},131,[149,34618,34619],{"class":155},"                pre_lab ",[149,34621,166],{"class":325},[149,34623,34624],{"class":155}," torch.argmax(output, ",[149,34626,34391],{"class":6932},[149,34628,166],{"class":325},[149,34630,830],{"class":309},[149,34632,1878],{"class":155},[149,34634,34636],{"class":151,"line":34635},132,[149,34637,34638],{"class":295},"                # 计算验证集上的当前 batch 损失\n",[149,34640,34642,34645,34647],{"class":151,"line":34641},133,[149,34643,34644],{"class":155},"                val_batch_loss ",[149,34646,166],{"class":325},[149,34648,34649],{"class":155}," criterion(output, b_y)\n",[149,34651,34653],{"class":151,"line":34652},134,[149,34654,34655],{"class":295},"                # 对损失函数进行累加（按样本数加权）\n",[149,34657,34659,34662,34664,34667,34669,34672,34674],{"class":151,"line":34658},135,[149,34660,34661],{"class":155},"                val_loss ",[149,34663,11191],{"class":325},[149,34665,34666],{"class":155}," val_batch_loss.item() ",[149,34668,2318],{"class":325},[149,34670,34671],{"class":155}," b_x.size(",[149,34673,2056],{"class":309},[149,34675,1878],{"class":155},[149,34677,34679,34682,34684,34687,34689],{"class":151,"line":34678},136,[149,34680,34681],{"class":155},"                val_corrects ",[149,34683,11191],{"class":325},[149,34685,34686],{"class":155}," torch.sum(pre_lab ",[149,34688,4667],{"class":325},[149,34690,34691],{"class":155}," b_y.data)\n",[149,34693,34695],{"class":151,"line":34694},137,[149,34696,34697],{"class":295},"                # 当前用于验证的样本数量\n",[149,34699,34701,34704,34706,34708,34710],{"class":151,"line":34700},138,[149,34702,34703],{"class":155},"            val_num ",[149,34705,11191],{"class":325},[149,34707,34671],{"class":155},[149,34709,2056],{"class":309},[149,34711,1878],{"class":155},[149,34713,34715],{"class":151,"line":34714},139,[149,34716,34717],{"class":295},"        # 计算并保存每一次迭代的loss值和准确率\n",[149,34719,34721],{"class":151,"line":34720},140,[149,34722,34723],{"class":295},"        # 计算并保存训练集的loss值\n",[149,34725,34727,34730,34732],{"class":151,"line":34726},141,[149,34728,34729],{"class":155},"        train_loss_all.append(train_loss",[149,34731,2447],{"class":325},[149,34733,34734],{"class":155},"train_num)\n",[149,34736,34738],{"class":151,"line":34737},142,[149,34739,34740],{"class":295},"        # 取双精度\n",[149,34742,34744],{"class":151,"line":34743},143,[149,34745,34746],{"class":295},"        # 计算并保存训练集的准确率\n",[149,34748,34750,34753,34755],{"class":151,"line":34749},144,[149,34751,34752],{"class":155},"        train_acc_all.append(train_corrects.double().item()",[149,34754,2447],{"class":325},[149,34756,34734],{"class":155},[149,34758,34760],{"class":151,"line":34759},145,[149,34761,34762],{"class":295},"        # 计算并保存验证集的loss值\n",[149,34764,34766,34769,34771],{"class":151,"line":34765},146,[149,34767,34768],{"class":155},"        val_loss_all.append(val_loss",[149,34770,2447],{"class":325},[149,34772,34773],{"class":155},"val_num)\n",[149,34775,34777],{"class":151,"line":34776},147,[149,34778,34779],{"class":295},"        # 计算并保存验证集的准确率\n",[149,34781,34783,34786,34788],{"class":151,"line":34782},148,[149,34784,34785],{"class":155},"        val_acc_all.append(val_corrects.double().item()",[149,34787,2447],{"class":325},[149,34789,34773],{"class":155},[149,34791,34793],{"class":151,"line":34792},149,[149,34794,4119],{"emptyLinePlaceholder":1800},[149,34796,34798],{"class":151,"line":34797},150,[149,34799,34800],{"class":295},"        # 打印训练一轮的loss值和准确率\n",[149,34802,34804,34806,34808,34810,34812,34815,34817,34820,34822,34825,34827,34829,34831,34833,34836,34838,34840,34843,34845,34847],{"class":151,"line":34803},151,[149,34805,34157],{"class":309},[149,34807,319],{"class":155},[149,34809,5310],{"class":169},[149,34811,34165],{"class":309},[149,34813,34814],{"class":169},"train loss:",[149,34816,2756],{"class":309},[149,34818,34819],{"class":325},":.4f",[149,34821,2805],{"class":309},[149,34823,34824],{"class":169}," train acc:",[149,34826,2756],{"class":309},[149,34828,34819],{"class":325},[149,34830,2805],{"class":309},[149,34832,5310],{"class":169},[149,34834,34835],{"class":155},".format(epoch,train_loss_all[",[149,34837,2395],{"class":325},[149,34839,830],{"class":309},[149,34841,34842],{"class":155},"],train_acc_all[",[149,34844,2395],{"class":325},[149,34846,830],{"class":309},[149,34848,34849],{"class":155},"]))\n",[149,34851,34853,34855,34857,34859,34861,34864,34866,34868,34870,34873,34875,34877,34879,34881,34884,34886,34888,34891,34893,34895],{"class":151,"line":34852},152,[149,34854,34157],{"class":309},[149,34856,319],{"class":155},[149,34858,5310],{"class":169},[149,34860,34165],{"class":309},[149,34862,34863],{"class":169},"val loss:",[149,34865,2756],{"class":309},[149,34867,34819],{"class":325},[149,34869,2805],{"class":309},[149,34871,34872],{"class":169}," val acc:",[149,34874,2756],{"class":309},[149,34876,34819],{"class":325},[149,34878,2805],{"class":309},[149,34880,5310],{"class":169},[149,34882,34883],{"class":155},".format(epoch,val_loss_all[",[149,34885,2395],{"class":325},[149,34887,830],{"class":309},[149,34889,34890],{"class":155},"],val_acc_all[",[149,34892,2395],{"class":325},[149,34894,830],{"class":309},[149,34896,34849],{"class":155},[149,34898,34900],{"class":151,"line":34899},153,[149,34901,4119],{"emptyLinePlaceholder":1800},[149,34903,34905],{"class":151,"line":34904},154,[149,34906,34907],{"class":295},"        # 判断准确度--->保存最优模型\n",[149,34909,34911,34913,34916,34918,34920,34922,34924],{"class":151,"line":34910},155,[149,34912,4216],{"class":325},[149,34914,34915],{"class":155}," val_acc_all[",[149,34917,2395],{"class":325},[149,34919,830],{"class":309},[149,34921,2799],{"class":155},[149,34923,2819],{"class":325},[149,34925,34926],{"class":155},"best_acc:\n",[149,34928,34930],{"class":151,"line":34929},156,[149,34931,34932],{"class":295},"            # 保存当前模型准确度\n",[149,34934,34936,34939,34941,34943,34946,34948,34950],{"class":151,"line":34935},157,[149,34937,34938],{"class":155},"            best_acc:",[149,34940,1910],{"class":309},[149,34942,166],{"class":325},[149,34944,34945],{"class":155},"val_acc_all[",[149,34947,2395],{"class":325},[149,34949,830],{"class":309},[149,34951,34952],{"class":155},"]\n",[149,34954,34956],{"class":151,"line":34955},158,[149,34957,34958],{"class":295},"            # 保存当前的准确度\n",[149,34960,34962],{"class":151,"line":34961},159,[149,34963,34964],{"class":295},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[149,34966,34968,34971,34973],{"class":151,"line":34967},160,[149,34969,34970],{"class":155},"            best_model_wts",[149,34972,166],{"class":325},[149,34974,34020],{"class":155},[149,34976,34978],{"class":151,"line":34977},161,[149,34979,4119],{"emptyLinePlaceholder":1800},[149,34981,34983],{"class":151,"line":34982},162,[149,34984,34985],{"class":295},"        # 计算耗时\n",[149,34987,34989,34992,34994,34997,34999],{"class":151,"line":34988},163,[149,34990,34991],{"class":155},"        time_use",[149,34993,166],{"class":325},[149,34995,34996],{"class":155},"time.time()",[149,34998,2395],{"class":325},[149,35000,35001],{"class":155},"since\n",[149,35003,35005,35007,35009,35012,35014,35017,35019,35021,35023,35025,35027,35030,35033,35036,35038,35041,35043,35045],{"class":151,"line":35004},164,[149,35006,34157],{"class":309},[149,35008,319],{"class":155},[149,35010,35011],{"class":169},"'训练和验证耗费的时间",[149,35013,2756],{"class":309},[149,35015,35016],{"class":325},":.0f",[149,35018,2805],{"class":309},[149,35020,2407],{"class":169},[149,35022,2756],{"class":309},[149,35024,35016],{"class":325},[149,35026,2805],{"class":309},[149,35028,35029],{"class":169},"s'",[149,35031,35032],{"class":155},".format(time_use",[149,35034,35035],{"class":325},"\u002F\u002F",[149,35037,2767],{"class":309},[149,35039,35040],{"class":155},",time_use",[149,35042,2191],{"class":325},[149,35044,2767],{"class":309},[149,35046,32203],{"class":155},[149,35048,35050],{"class":151,"line":35049},165,[149,35051,35052],{"class":295},"    # 选择最优参数\n",[149,35054,35056],{"class":151,"line":35055},166,[149,35057,35058],{"class":295},"    # 加载最高准确率下的模型参数\n",[149,35060,35062],{"class":151,"line":35061},167,[149,35063,35064],{"class":295},"    # model.load_state_dict(best_model_wts)\n",[149,35066,35068,35071,35074],{"class":151,"line":35067},168,[149,35069,35070],{"class":155},"    torch.save(model.state_dict(best_model_wts), ",[149,35072,35073],{"class":169},"'.\u002Fbest_model.pth'",[149,35075,1878],{"class":155},[149,35077,35079],{"class":151,"line":35078},169,[149,35080,35081],{"class":295},"    # 或者写成\n",[149,35083,35085],{"class":151,"line":35084},170,[149,35086,35087],{"class":295},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[149,35089,35091],{"class":151,"line":35090},171,[149,35092,35093],{"class":295},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[149,35095,35097,35100,35102,35105,35108,35110],{"class":151,"line":35096},172,[149,35098,35099],{"class":155},"    train_process",[149,35101,166],{"class":325},[149,35103,35104],{"class":155},"pd.DataFrame(",[149,35106,35107],{"class":6932},"data",[149,35109,166],{"class":325},[149,35111,3270],{"class":155},[149,35113,35115,35118,35120,35123],{"class":151,"line":35114},173,[149,35116,35117],{"class":169},"        \"epoch\"",[149,35119,2720],{"class":155},[149,35121,35122],{"class":309},"range",[149,35124,35125],{"class":155},"(num_epochs),\n",[149,35127,35129,35132],{"class":151,"line":35128},174,[149,35130,35131],{"class":169},"        \"train_loss_all\"",[149,35133,35134],{"class":155},":train_loss_all,\n",[149,35136,35138,35141],{"class":151,"line":35137},175,[149,35139,35140],{"class":169},"        \"val_loss_all\"",[149,35142,35143],{"class":155},":val_loss_all,\n",[149,35145,35147,35150],{"class":151,"line":35146},176,[149,35148,35149],{"class":169},"        \"train_acc_all\"",[149,35151,35152],{"class":155},":train_acc_all,\n",[149,35154,35156,35159],{"class":151,"line":35155},177,[149,35157,35158],{"class":169},"        \"val_acc_all\"",[149,35160,35161],{"class":155},":val_acc_all\n",[149,35163,35165],{"class":151,"line":35164},178,[149,35166,35167],{"class":155},"    })\n",[149,35169,35171],{"class":151,"line":35170},179,[149,35172,35173],{"class":295},"    # 返回训练保存的过程\n",[149,35175,35177,35179],{"class":151,"line":35176},180,[149,35178,5808],{"class":325},[149,35180,35181],{"class":155}," train_process\n",[149,35183,35185],{"class":151,"line":35184},181,[149,35186,4119],{"emptyLinePlaceholder":1800},[149,35188,35190],{"class":151,"line":35189},182,[149,35191,35192],{"class":295},"# 将loss值和精度按照图片的形式展示出来\n",[149,35194,35196,35198,35201],{"class":151,"line":35195},183,[149,35197,33653],{"class":325},[149,35199,35200],{"class":162}," matplot_acc_loss",[149,35202,35203],{"class":155},"(train_process):\n",[149,35205,35207],{"class":151,"line":35206},184,[149,35208,35209],{"class":295},"    # 设置图的大小\n",[149,35211,35213,35216,35218,35220,35222,35224,35226,35228],{"class":151,"line":35212},185,[149,35214,35215],{"class":155},"    plt.figure(",[149,35217,33399],{"class":6932},[149,35219,166],{"class":325},[149,35221,319],{"class":155},[149,35223,2361],{"class":309},[149,35225,2241],{"class":155},[149,35227,2157],{"class":309},[149,35229,32203],{"class":155},[149,35231,35233],{"class":151,"line":35232},186,[149,35234,35235],{"class":295},"    # 设置图中有几张图\n",[149,35237,35239],{"class":151,"line":35238},187,[149,35240,35241],{"class":295},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[149,35243,35245],{"class":151,"line":35244},188,[149,35246,35247],{"class":295},"    # ①loss图\n",[149,35249,35251,35253,35255,35257,35259,35261,35263],{"class":151,"line":35250},189,[149,35252,33433],{"class":155},[149,35254,830],{"class":309},[149,35256,2241],{"class":155},[149,35258,1045],{"class":309},[149,35260,2241],{"class":155},[149,35262,830],{"class":309},[149,35264,1878],{"class":155},[149,35266,35268],{"class":151,"line":35267},190,[149,35269,35270],{"class":295},"    # 补充:\n",[149,35272,35274],{"class":151,"line":35273},191,[149,35275,35276],{"class":295},"    # plt.subplot(nrows, ncols, index)\n",[149,35278,35280],{"class":151,"line":35279},192,[149,35281,35282],{"class":295},"    # nrows：行数\n",[149,35284,35286],{"class":151,"line":35285},193,[149,35287,35288],{"class":295},"    # ncols：列数\n",[149,35290,35292],{"class":151,"line":35291},194,[149,35293,35294],{"class":295},"    # index：目前选中第几个子图（从1开始）\n",[149,35296,35298,35301,35304,35307,35310,35312,35315,35317,35320],{"class":151,"line":35297},195,[149,35299,35300],{"class":155},"    plt.plot(train_process[",[149,35302,35303],{"class":169},"\"epoch\"",[149,35305,35306],{"class":155},"],train_process.train_loss_all,",[149,35308,35309],{"class":169},"'ro-'",[149,35311,2241],{"class":155},[149,35313,35314],{"class":6932},"label",[149,35316,166],{"class":325},[149,35318,35319],{"class":169},"'train loss'",[149,35321,1878],{"class":155},[149,35323,35325,35327,35329,35332,35335,35337,35339,35341,35344],{"class":151,"line":35324},196,[149,35326,35300],{"class":155},[149,35328,35303],{"class":169},[149,35330,35331],{"class":155},"],train_process.val_loss_all,",[149,35333,35334],{"class":169},"'bs--'",[149,35336,2241],{"class":155},[149,35338,35314],{"class":6932},[149,35340,166],{"class":325},[149,35342,35343],{"class":169},"'val loss'",[149,35345,1878],{"class":155},[149,35347,35349],{"class":151,"line":35348},197,[149,35350,35351],{"class":295},"    # 添加一个图例\n",[149,35353,35355],{"class":151,"line":35354},198,[149,35356,35357],{"class":155},"    plt.legend()\n",[149,35359,35361],{"class":151,"line":35360},199,[149,35362,35363],{"class":295},"    # 给轴添加标签\n",[149,35365,35367,35370,35373],{"class":151,"line":35366},200,[149,35368,35369],{"class":155},"    plt.xlabel(",[149,35371,35372],{"class":169},"'epoch'",[149,35374,1878],{"class":155},[149,35376,35378,35381,35384],{"class":151,"line":35377},201,[149,35379,35380],{"class":155},"    plt.ylabel(",[149,35382,35383],{"class":169},"'loss'",[149,35385,1878],{"class":155},[149,35387,35389],{"class":151,"line":35388},202,[149,35390,35391],{"class":295},"    # ②准确度图\n",[149,35393,35395,35397,35399,35401,35403,35405,35407],{"class":151,"line":35394},203,[149,35396,33433],{"class":155},[149,35398,830],{"class":309},[149,35400,2241],{"class":155},[149,35402,1045],{"class":309},[149,35404,2241],{"class":155},[149,35406,1045],{"class":309},[149,35408,1878],{"class":155},[149,35410,35412,35414,35416,35419,35421,35423,35425,35427,35430],{"class":151,"line":35411},204,[149,35413,35300],{"class":155},[149,35415,35303],{"class":169},[149,35417,35418],{"class":155},"],train_process.train_acc_all,",[149,35420,35309],{"class":169},[149,35422,2241],{"class":155},[149,35424,35314],{"class":6932},[149,35426,166],{"class":325},[149,35428,35429],{"class":169},"'train acc'",[149,35431,1878],{"class":155},[149,35433,35435,35437,35439,35442,35444,35446,35448,35450,35453],{"class":151,"line":35434},205,[149,35436,35300],{"class":155},[149,35438,35303],{"class":169},[149,35440,35441],{"class":155},"],train_process.val_acc_all,",[149,35443,35334],{"class":169},[149,35445,2241],{"class":155},[149,35447,35314],{"class":6932},[149,35449,166],{"class":325},[149,35451,35452],{"class":169},"'val acc'",[149,35454,1878],{"class":155},[149,35456,35458],{"class":151,"line":35457},206,[149,35459,35460],{"class":295},"    # 添加图例\n",[149,35462,35464],{"class":151,"line":35463},207,[149,35465,35357],{"class":155},[149,35467,35469,35471,35473],{"class":151,"line":35468},208,[149,35470,35369],{"class":155},[149,35472,35303],{"class":169},[149,35474,1878],{"class":155},[149,35476,35478,35480,35483],{"class":151,"line":35477},209,[149,35479,35380],{"class":155},[149,35481,35482],{"class":169},"\"acc\"",[149,35484,1878],{"class":155},[149,35486,35488],{"class":151,"line":35487},210,[149,35489,35490],{"class":155},"    plt.show()\n",[149,35492,35494],{"class":151,"line":35493},211,[149,35495,4119],{"emptyLinePlaceholder":1800},[149,35497,35499],{"class":151,"line":35498},212,[149,35500,35501],{"class":295},"# 正式开始训练:\n",[149,35503,35505,35507,35509,35511,35513],{"class":151,"line":35504},213,[149,35506,3255],{"class":325},[149,35508,32926],{"class":309},[149,35510,4667],{"class":325},[149,35512,32931],{"class":169},[149,35514,5457],{"class":155},[149,35516,35518],{"class":151,"line":35517},214,[149,35519,35520],{"class":295},"    # 将模型实例化\n",[149,35522,35524,35527,35529],{"class":151,"line":35523},215,[149,35525,35526],{"class":155},"    LeNet",[149,35528,166],{"class":325},[149,35530,35531],{"class":155},"LeNet()\n",[149,35533,35535,35538,35540],{"class":151,"line":35534},216,[149,35536,35537],{"class":155},"    train_dataloader,val_dataloader",[149,35539,166],{"class":325},[149,35541,35542],{"class":155},"train_val_data_process()\n",[149,35544,35546,35548,35550,35553,35556,35558,35560],{"class":151,"line":35545},217,[149,35547,35099],{"class":155},[149,35549,166],{"class":325},[149,35551,35552],{"class":155},"train_model_process(LeNet,train_dataloader,val_dataloader,",[149,35554,35555],{"class":6932},"num_epochs",[149,35557,166],{"class":325},[149,35559,2561],{"class":309},[149,35561,1878],{"class":155},[149,35563,35565],{"class":151,"line":35564},218,[149,35566,35567],{"class":155},"    matplot_acc_loss(train_process)\n",[24,35569,35570],{},"画图的补充点学习：",[24,35572,35573],{},[83,35574],{"alt":145,"src":35575},"\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",[125,35577,35578],{"start":235},[45,35579,35580],{},"测试",[140,35582,35584],{"className":32084,"code":35583,"language":32086,"meta":145,"style":145},"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",[48,35585,35586,35592,35602,35614,35624,35629,35639,35649,35653,35658,35667,35684,35696,35713,35724,35740,35745,35756,35767,35778,35785,35789,35794,35804,35809,35826,35834,35838,35843,35852,35861,35865,35870,35875,35880,35887,35892,35904,35914,35924,35929,35933,35938,35947,35952,35968,35973,35978,35983,35997,36002,36016,36020,36025,36040,36045,36057,36061,36066,36078,36083,36091,36096,36101,36111,36116,36125,36130,36135,36139,36144,36149,36165,36173,36178,36183,36242,36248,36253,36264,36272,36280,36284,36289,36293,36298,36306,36311,36327,36332,36342,36352],{"__ignoreMap":145},[149,35587,35588,35590],{"class":151,"line":152},[149,35589,32098],{"class":325},[149,35591,32101],{"class":155},[149,35593,35594,35596,35598,35600],{"class":151,"line":193},[149,35595,32098],{"class":325},[149,35597,33121],{"class":155},[149,35599,33089],{"class":325},[149,35601,33126],{"class":155},[149,35603,35604,35606,35609,35611],{"class":151,"line":235},[149,35605,32443],{"class":325},[149,35607,35608],{"class":155}," jupyter_client.consoleapp ",[149,35610,32098],{"class":325},[149,35612,35613],{"class":155}," classes\n",[149,35615,35616,35618,35620,35622],{"class":151,"line":340},[149,35617,32443],{"class":325},[149,35619,33104],{"class":155},[149,35621,32098],{"class":325},[149,35623,33109],{"class":155},[149,35625,35626],{"class":151,"line":346},[149,35627,35628],{"class":295},"# 导入数据集\n",[149,35630,35631,35633,35635,35637],{"class":151,"line":352},[149,35632,32443],{"class":325},[149,35634,33074],{"class":155},[149,35636,32098],{"class":325},[149,35638,33079],{"class":155},[149,35640,35641,35643,35645,35647],{"class":151,"line":1021},[149,35642,32443],{"class":325},[149,35644,33620],{"class":155},[149,35646,32098],{"class":325},[149,35648,33625],{"class":155},[149,35650,35651],{"class":151,"line":1035},[149,35652,4119],{"emptyLinePlaceholder":1800},[149,35654,35655],{"class":151,"line":1054},[149,35656,35657],{"class":295},"# 测试数据处理\n",[149,35659,35660,35662,35665],{"class":151,"line":1072},[149,35661,33653],{"class":325},[149,35663,35664],{"class":162}," test_data_process",[149,35666,33659],{"class":155},[149,35668,35669,35672,35674,35676,35678,35680,35682],{"class":151,"line":1090},[149,35670,35671],{"class":155},"    test_data",[149,35673,166],{"class":325},[149,35675,33161],{"class":155},[149,35677,33164],{"class":6932},[149,35679,166],{"class":325},[149,35681,33169],{"class":169},[149,35683,33172],{"class":155},[149,35685,35686,35689,35691,35694],{"class":151,"line":1633},[149,35687,35688],{"class":6932},"                           train",[149,35690,166],{"class":325},[149,35692,35693],{"class":309},"False",[149,35695,33172],{"class":155},[149,35697,35698,35701,35703,35705,35707,35709,35711],{"class":151,"line":1644},[149,35699,35700],{"class":6932},"                           transform",[149,35702,166],{"class":325},[149,35704,33199],{"class":155},[149,35706,33202],{"class":6932},[149,35708,166],{"class":325},[149,35710,2761],{"class":309},[149,35712,33210],{"class":155},[149,35714,35715,35718,35720,35722],{"class":151,"line":3348},[149,35716,35717],{"class":6932},"                           download",[149,35719,166],{"class":325},[149,35721,33182],{"class":309},[149,35723,1878],{"class":155},[149,35725,35726,35729,35731,35733,35735,35737],{"class":151,"line":3362},[149,35727,35728],{"class":155},"    test_dataloader",[149,35730,166],{"class":325},[149,35732,33240],{"class":155},[149,35734,33243],{"class":6932},[149,35736,166],{"class":325},[149,35738,35739],{"class":155},"test_data,\n",[149,35741,35742],{"class":151,"line":3367},[149,35743,35744],{"class":295},"                                    # 这里是一张一张进行测试\n",[149,35746,35747,35750,35752,35754],{"class":151,"line":3373},[149,35748,35749],{"class":6932},"                                    batch_size",[149,35751,166],{"class":325},[149,35753,830],{"class":309},[149,35755,33172],{"class":155},[149,35757,35758,35761,35763,35765],{"class":151,"line":3394},[149,35759,35760],{"class":6932},"                                    shuffle",[149,35762,166],{"class":325},[149,35764,33182],{"class":309},[149,35766,33172],{"class":155},[149,35768,35769,35772,35774,35776],{"class":151,"line":3399},[149,35770,35771],{"class":6932},"                                    num_workers",[149,35773,166],{"class":325},[149,35775,2056],{"class":309},[149,35777,1878],{"class":155},[149,35779,35780,35782],{"class":151,"line":3413},[149,35781,5808],{"class":325},[149,35783,35784],{"class":155}," test_dataloader\n",[149,35786,35787],{"class":151,"line":3418},[149,35788,4119],{"emptyLinePlaceholder":1800},[149,35790,35791],{"class":151,"line":3447},[149,35792,35793],{"class":295},"# 定义模型测试函数\n",[149,35795,35796,35798,35801],{"class":151,"line":3452},[149,35797,33653],{"class":325},[149,35799,35800],{"class":162}," test_model_process",[149,35802,35803],{"class":155},"(model,test_dataloader):\n",[149,35805,35806],{"class":151,"line":3469},[149,35807,35808],{"class":295},"    # 将模型放到设备当中，先进行判断\n",[149,35810,35811,35813,35815,35817,35819,35821,35823],{"class":151,"line":3474},[149,35812,32943],{"class":155},[149,35814,166],{"class":325},[149,35816,32950],{"class":169},[149,35818,3424],{"class":325},[149,35820,32955],{"class":155},[149,35822,3421],{"class":325},[149,35824,35825],{"class":169}," \"cpu\"\n",[149,35827,35828,35830,35832],{"class":151,"line":3479},[149,35829,32995],{"class":155},[149,35831,166],{"class":325},[149,35833,33995],{"class":155},[149,35835,35836],{"class":151,"line":3484},[149,35837,4119],{"emptyLinePlaceholder":1800},[149,35839,35840],{"class":151,"line":3498},[149,35841,35842],{"class":295},"    # 设置初始化参数\n",[149,35844,35845,35848,35850],{"class":151,"line":3503},[149,35846,35847],{"class":155},"    test_corrects",[149,35849,166],{"class":325},[149,35851,34048],{"class":309},[149,35853,35854,35857,35859],{"class":151,"line":4296},[149,35855,35856],{"class":155},"    test_num",[149,35858,166],{"class":325},[149,35860,4803],{"class":309},[149,35862,35863],{"class":151,"line":4310},[149,35864,4119],{"emptyLinePlaceholder":1800},[149,35866,35867],{"class":151,"line":4318},[149,35868,35869],{"class":295},"    # 进行模型测试\n",[149,35871,35872],{"class":151,"line":4323},[149,35873,35874],{"class":295},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[149,35876,35877],{"class":151,"line":4329},[149,35878,35879],{"class":295},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[149,35881,35882,35885],{"class":151,"line":4335},[149,35883,35884],{"class":325},"    with",[149,35886,34590],{"class":155},[149,35888,35889],{"class":151,"line":4340},[149,35890,35891],{"class":295},"        # 从数据中进行\n",[149,35893,35894,35896,35899,35901],{"class":151,"line":9663},[149,35895,5121],{"class":325},[149,35897,35898],{"class":155}," test_data_x,test_data_y ",[149,35900,27752],{"class":325},[149,35902,35903],{"class":155}," test_dataloader:\n",[149,35905,35906,35909,35911],{"class":151,"line":9687},[149,35907,35908],{"class":155},"            test_data_x",[149,35910,166],{"class":325},[149,35912,35913],{"class":155},"test_data_x.to(device)\n",[149,35915,35916,35919,35921],{"class":151,"line":9692},[149,35917,35918],{"class":155},"            test_data_y",[149,35920,166],{"class":325},[149,35922,35923],{"class":155},"test_data_y.to(device)\n",[149,35925,35926],{"class":151,"line":9698},[149,35927,35928],{"class":295},"            # 设置为验证模式\n",[149,35930,35931],{"class":151,"line":9725},[149,35932,34581],{"class":155},[149,35934,35935],{"class":151,"line":9730},[149,35936,35937],{"class":295},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[149,35939,35940,35942,35944],{"class":151,"line":9736},[149,35941,34366],{"class":155},[149,35943,166],{"class":325},[149,35945,35946],{"class":155},"model(test_data_x)\n",[149,35948,35949],{"class":151,"line":9748},[149,35950,35951],{"class":295},"            # 查找每一行中最大值对应的下标\n",[149,35953,35954,35956,35958,35960,35962,35964,35966],{"class":151,"line":9760},[149,35955,34383],{"class":155},[149,35957,166],{"class":325},[149,35959,34388],{"class":155},[149,35961,34391],{"class":6932},[149,35963,166],{"class":325},[149,35965,830],{"class":309},[149,35967,1878],{"class":155},[149,35969,35970],{"class":151,"line":9772},[149,35971,35972],{"class":295},"            # 计算正确率\n",[149,35974,35975],{"class":151,"line":11430},[149,35976,35977],{"class":295},"            # .data表示是一个不带梯度信息的tensor\n",[149,35979,35980],{"class":151,"line":11455},[149,35981,35982],{"class":295},"            # 如果预测正确，则准确度test_corrects加1\n",[149,35984,35985,35988,35990,35992,35994],{"class":151,"line":11478},[149,35986,35987],{"class":155},"            test_corrects",[149,35989,11191],{"class":325},[149,35991,34493],{"class":155},[149,35993,4667],{"class":325},[149,35995,35996],{"class":155},"test_data_y.data)\n",[149,35998,35999],{"class":151,"line":11502},[149,36000,36001],{"class":295},"            # 将所有的测试样本进行累计\n",[149,36003,36004,36007,36009,36012,36014],{"class":151,"line":11507},[149,36005,36006],{"class":155},"            test_num",[149,36008,11191],{"class":325},[149,36010,36011],{"class":155},"test_data_x.size(",[149,36013,2056],{"class":309},[149,36015,1878],{"class":155},[149,36017,36018],{"class":151,"line":11512},[149,36019,4119],{"emptyLinePlaceholder":1800},[149,36021,36022],{"class":151,"line":11517},[149,36023,36024],{"class":295},"        # 计算准确度\n",[149,36026,36027,36030,36032,36035,36037],{"class":151,"line":11526},[149,36028,36029],{"class":155},"        test_acc",[149,36031,166],{"class":325},[149,36033,36034],{"class":155},"test_corrects.double().item()",[149,36036,2447],{"class":325},[149,36038,36039],{"class":155},"test_num\n",[149,36041,36042],{"class":151,"line":11531},[149,36043,36044],{"class":295},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[149,36046,36047,36049,36051,36054],{"class":151,"line":11537},[149,36048,34157],{"class":309},[149,36050,319],{"class":155},[149,36052,36053],{"class":169},"\"测试的准确率：\"",[149,36055,36056],{"class":155},",test_acc)\n",[149,36058,36059],{"class":151,"line":11558},[149,36060,4119],{"emptyLinePlaceholder":1800},[149,36062,36063],{"class":151,"line":11564},[149,36064,36065],{"class":295},"# 实现模型的测试功能\n",[149,36067,36068,36070,36072,36074,36076],{"class":151,"line":11578},[149,36069,3255],{"class":325},[149,36071,32926],{"class":309},[149,36073,4667],{"class":325},[149,36075,32931],{"class":169},[149,36077,5457],{"class":155},[149,36079,36080],{"class":151,"line":11584},[149,36081,36082],{"class":295},"    # 加载模型\n",[149,36084,36085,36087,36089],{"class":151,"line":11611},[149,36086,32995],{"class":155},[149,36088,166],{"class":325},[149,36090,35531],{"class":155},[149,36092,36093],{"class":151,"line":11620},[149,36094,36095],{"class":295},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[149,36097,36098],{"class":151,"line":11626},[149,36099,36100],{"class":295},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[149,36102,36103,36106,36109],{"class":151,"line":11634},[149,36104,36105],{"class":155},"    model.load_state_dict(torch.load(",[149,36107,36108],{"class":169},"'best_model.pth'",[149,36110,32203],{"class":155},[149,36112,36113],{"class":151,"line":11639},[149,36114,36115],{"class":295},"    # 数据加载\n",[149,36117,36118,36120,36122],{"class":151,"line":18314},[149,36119,35728],{"class":155},[149,36121,166],{"class":325},[149,36123,36124],{"class":155},"test_data_process()\n",[149,36126,36127],{"class":151,"line":18320},[149,36128,36129],{"class":295},"    # 加载模型测试的函数\n",[149,36131,36132],{"class":151,"line":18343},[149,36133,36134],{"class":155},"    test_model_process(model,test_dataloader)\n",[149,36136,36137],{"class":151,"line":18349},[149,36138,4119],{"emptyLinePlaceholder":1800},[149,36140,36141],{"class":151,"line":18372},[149,36142,36143],{"class":295},"    # 验证集推理实现：\n",[149,36145,36146],{"class":151,"line":18386},[149,36147,36148],{"class":295},"    # 加载数据加载的更详细一些\n",[149,36150,36151,36153,36155,36157,36159,36161,36163],{"class":151,"line":18406},[149,36152,32943],{"class":155},[149,36154,166],{"class":325},[149,36156,32950],{"class":169},[149,36158,3424],{"class":325},[149,36160,32955],{"class":155},[149,36162,3421],{"class":325},[149,36164,35825],{"class":169},[149,36166,36167,36169,36171],{"class":151,"line":18412},[149,36168,32995],{"class":155},[149,36170,166],{"class":325},[149,36172,33995],{"class":155},[149,36174,36175],{"class":151,"line":18423},[149,36176,36177],{"class":295},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[149,36179,36180],{"class":151,"line":18446},[149,36181,36182],{"class":295},"    # 顺序不可改变\n",[149,36184,36185,36188,36190,36192,36195,36197,36200,36202,36205,36207,36210,36212,36215,36217,36220,36222,36225,36227,36230,36232,36235,36237,36240],{"class":151,"line":18468},[149,36186,36187],{"class":155},"    classes",[149,36189,166],{"class":325},[149,36191,810],{"class":155},[149,36193,36194],{"class":169},"'T-shirt\u002Ftop'",[149,36196,2241],{"class":155},[149,36198,36199],{"class":169},"'Trouser'",[149,36201,2241],{"class":155},[149,36203,36204],{"class":169},"'Pullover'",[149,36206,2241],{"class":155},[149,36208,36209],{"class":169},"'Dress'",[149,36211,2241],{"class":155},[149,36213,36214],{"class":169},"'Coat'",[149,36216,2241],{"class":155},[149,36218,36219],{"class":169},"'Sandal'",[149,36221,2241],{"class":155},[149,36223,36224],{"class":169},"'Shirt'",[149,36226,2241],{"class":155},[149,36228,36229],{"class":169},"'Sneaker'",[149,36231,2241],{"class":155},[149,36233,36234],{"class":169},"'Bag'",[149,36236,2241],{"class":155},[149,36238,36239],{"class":169},"'Ankle boot'",[149,36241,34952],{"class":155},[149,36243,36244,36246],{"class":151,"line":18473},[149,36245,35884],{"class":325},[149,36247,34590],{"class":155},[149,36249,36250],{"class":151,"line":18479},[149,36251,36252],{"class":295},"        # 将数据和标签都放到设备当中\n",[149,36254,36255,36257,36260,36262],{"class":151,"line":18493},[149,36256,5121],{"class":325},[149,36258,36259],{"class":155}," b_x,b_y ",[149,36261,27752],{"class":325},[149,36263,35903],{"class":155},[149,36265,36266,36268,36270],{"class":151,"line":18506},[149,36267,34316],{"class":155},[149,36269,166],{"class":325},[149,36271,34321],{"class":155},[149,36273,36274,36276,36278],{"class":151,"line":18511},[149,36275,34331],{"class":155},[149,36277,166],{"class":325},[149,36279,34336],{"class":155},[149,36281,36282],{"class":151,"line":18525},[149,36283,4119],{"emptyLinePlaceholder":1800},[149,36285,36286],{"class":151,"line":18530},[149,36287,36288],{"class":295},"            # 设置模型为验证模式\n",[149,36290,36291],{"class":151,"line":18536},[149,36292,34581],{"class":155},[149,36294,36295],{"class":151,"line":18541},[149,36296,36297],{"class":295},"            # 模型推理结果\n",[149,36299,36300,36302,36304],{"class":151,"line":18555},[149,36301,34366],{"class":155},[149,36303,166],{"class":325},[149,36305,34371],{"class":155},[149,36307,36308],{"class":151,"line":18560},[149,36309,36310],{"class":295},"            # 获取最大下标，最大下标就是类别号\n",[149,36312,36313,36315,36317,36319,36321,36323,36325],{"class":151,"line":18565},[149,36314,34383],{"class":155},[149,36316,166],{"class":325},[149,36318,34388],{"class":155},[149,36320,34391],{"class":6932},[149,36322,166],{"class":325},[149,36324,830],{"class":309},[149,36326,1878],{"class":155},[149,36328,36329],{"class":151,"line":18579},[149,36330,36331],{"class":295},"            # 取出张量中的数值\n",[149,36333,36334,36337,36339],{"class":151,"line":18591},[149,36335,36336],{"class":155},"            result",[149,36338,166],{"class":325},[149,36340,36341],{"class":155},"pre_lab.item()\n",[149,36343,36344,36347,36349],{"class":151,"line":18596},[149,36345,36346],{"class":155},"            label",[149,36348,166],{"class":325},[149,36350,36351],{"class":155},"b_y.item()\n",[149,36353,36354,36357,36359,36362,36365,36368,36370,36373],{"class":151,"line":18609},[149,36355,36356],{"class":309},"            print",[149,36358,319],{"class":155},[149,36360,36361],{"class":169},"\"预测值：\"",[149,36363,36364],{"class":155},",classes[result],",[149,36366,36367],{"class":169},"\"------\"",[149,36369,2241],{"class":155},[149,36371,36372],{"class":169},"\"真实值：\"",[149,36374,36375],{"class":155},",classes[label])\n",[24,36377,36378],{},"（2）AlexNet",[125,36380,36381],{},[45,36382,36383],{},"神经网络构建",[140,36385,36387],{"className":32084,"code":36386,"language":32086,"meta":145,"style":145},"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",[48,36388,36389,36395,36405,36415,36427,36431,36448,36456,36471,36483,36525,36552,36595,36621,36665,36708,36751,36778,36782,36792,36797,36825,36844,36863,36867,36872,36880,36895,36905,36919,36929,36944,36959,36974,36985,36989,36994,37004,37019,37024,37038,37053,37065,37070,37081,37086,37092,37097,37109,37129,37134,37143],{"__ignoreMap":145},[149,36390,36391,36393],{"class":151,"line":152},[149,36392,32098],{"class":325},[149,36394,32101],{"class":155},[149,36396,36397,36399,36401,36403],{"class":151,"line":193},[149,36398,32443],{"class":325},[149,36400,32446],{"class":155},[149,36402,32098],{"class":325},[149,36404,32451],{"class":155},[149,36406,36407,36409,36411,36413],{"class":151,"line":235},[149,36408,32443],{"class":325},[149,36410,32463],{"class":155},[149,36412,32098],{"class":325},[149,36414,32468],{"class":155},[149,36416,36417,36419,36422,36424],{"class":151,"line":340},[149,36418,32098],{"class":325},[149,36420,36421],{"class":155}," torch.nn.functional ",[149,36423,33089],{"class":325},[149,36425,36426],{"class":155}," F\n",[149,36428,36429],{"class":151,"line":346},[149,36430,4119],{"emptyLinePlaceholder":1800},[149,36432,36433,36435,36438,36440,36442,36444,36446],{"class":151,"line":352},[149,36434,913],{"class":325},[149,36436,36437],{"class":162}," AlexNet",[149,36439,319],{"class":155},[149,36441,32484],{"class":162},[149,36443,2421],{"class":155},[149,36445,32489],{"class":162},[149,36447,32492],{"class":155},[149,36449,36450,36452,36454],{"class":151,"line":1021},[149,36451,32507],{"class":325},[149,36453,32510],{"class":309},[149,36455,32513],{"class":155},[149,36457,36458,36460,36463,36465,36467,36469],{"class":151,"line":1035},[149,36459,32523],{"class":309},[149,36461,36462],{"class":155},"(AlexNet,",[149,36464,32529],{"class":309},[149,36466,32532],{"class":155},[149,36468,32535],{"class":309},[149,36470,3695],{"class":155},[149,36472,36473,36475,36478,36480],{"class":151,"line":1054},[149,36474,32551],{"class":309},[149,36476,36477],{"class":155},".ReLu",[149,36479,166],{"class":325},[149,36481,36482],{"class":155},"nn.ReLU()\n",[149,36484,36485,36487,36489,36491,36493,36495,36497,36499,36501,36503,36505,36507,36509,36511,36513,36515,36517,36519,36521,36523],{"class":151,"line":1072},[149,36486,32551],{"class":309},[149,36488,32554],{"class":155},[149,36490,166],{"class":325},[149,36492,32559],{"class":155},[149,36494,32562],{"class":6932},[149,36496,166],{"class":325},[149,36498,830],{"class":309},[149,36500,2241],{"class":155},[149,36502,32571],{"class":6932},[149,36504,166],{"class":325},[149,36506,2074],{"class":309},[149,36508,2241],{"class":155},[149,36510,32580],{"class":6932},[149,36512,166],{"class":325},[149,36514,2335],{"class":309},[149,36516,2241],{"class":155},[149,36518,32635],{"class":6932},[149,36520,166],{"class":325},[149,36522,2157],{"class":309},[149,36524,1878],{"class":155},[149,36526,36527,36529,36531,36533,36536,36538,36540,36542,36544,36546,36548,36550],{"class":151,"line":1090},[149,36528,32551],{"class":309},[149,36530,32619],{"class":155},[149,36532,166],{"class":325},[149,36534,36535],{"class":155},"nn.MaxPool2d(",[149,36537,32580],{"class":6932},[149,36539,166],{"class":325},[149,36541,1939],{"class":309},[149,36543,2241],{"class":155},[149,36545,32635],{"class":6932},[149,36547,166],{"class":325},[149,36549,1045],{"class":309},[149,36551,1878],{"class":155},[149,36553,36554,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36577,36579,36581,36583,36585,36587,36589,36591,36593],{"class":151,"line":1633},[149,36555,32551],{"class":309},[149,36557,32648],{"class":155},[149,36559,166],{"class":325},[149,36561,32559],{"class":155},[149,36563,32562],{"class":6932},[149,36565,166],{"class":325},[149,36567,2074],{"class":309},[149,36569,2241],{"class":155},[149,36571,32571],{"class":6932},[149,36573,166],{"class":325},[149,36575,36576],{"class":309},"256",[149,36578,2241],{"class":155},[149,36580,32580],{"class":6932},[149,36582,166],{"class":325},[149,36584,2182],{"class":309},[149,36586,2241],{"class":155},[149,36588,32589],{"class":6932},[149,36590,166],{"class":325},[149,36592,1045],{"class":309},[149,36594,1878],{"class":155},[149,36596,36597,36599,36601,36603,36605,36607,36609,36611,36613,36615,36617,36619],{"class":151,"line":1644},[149,36598,32551],{"class":309},[149,36600,32683],{"class":155},[149,36602,166],{"class":325},[149,36604,36535],{"class":155},[149,36606,32580],{"class":6932},[149,36608,166],{"class":325},[149,36610,1939],{"class":309},[149,36612,2241],{"class":155},[149,36614,32635],{"class":6932},[149,36616,166],{"class":325},[149,36618,1045],{"class":309},[149,36620,1878],{"class":155},[149,36622,36623,36625,36628,36630,36632,36634,36636,36638,36640,36642,36644,36647,36649,36651,36653,36655,36657,36659,36661,36663],{"class":151,"line":3348},[149,36624,32551],{"class":309},[149,36626,36627],{"class":155},".c5",[149,36629,166],{"class":325},[149,36631,32559],{"class":155},[149,36633,32562],{"class":6932},[149,36635,166],{"class":325},[149,36637,36576],{"class":309},[149,36639,2241],{"class":155},[149,36641,32571],{"class":6932},[149,36643,166],{"class":325},[149,36645,36646],{"class":309},"384",[149,36648,2241],{"class":155},[149,36650,32580],{"class":6932},[149,36652,166],{"class":325},[149,36654,1939],{"class":309},[149,36656,2241],{"class":155},[149,36658,32589],{"class":6932},[149,36660,166],{"class":325},[149,36662,830],{"class":309},[149,36664,1878],{"class":155},[149,36666,36667,36669,36672,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706],{"class":151,"line":3362},[149,36668,32551],{"class":309},[149,36670,36671],{"class":155},".c6",[149,36673,166],{"class":325},[149,36675,32559],{"class":155},[149,36677,32562],{"class":6932},[149,36679,166],{"class":325},[149,36681,36646],{"class":309},[149,36683,2241],{"class":155},[149,36685,32571],{"class":6932},[149,36687,166],{"class":325},[149,36689,36646],{"class":309},[149,36691,2241],{"class":155},[149,36693,32580],{"class":6932},[149,36695,166],{"class":325},[149,36697,1939],{"class":309},[149,36699,2241],{"class":155},[149,36701,32589],{"class":6932},[149,36703,166],{"class":325},[149,36705,830],{"class":309},[149,36707,1878],{"class":155},[149,36709,36710,36712,36715,36717,36719,36721,36723,36725,36727,36729,36731,36733,36735,36737,36739,36741,36743,36745,36747,36749],{"class":151,"line":3367},[149,36711,32551],{"class":309},[149,36713,36714],{"class":155},".c7",[149,36716,166],{"class":325},[149,36718,32559],{"class":155},[149,36720,32562],{"class":6932},[149,36722,166],{"class":325},[149,36724,36646],{"class":309},[149,36726,2241],{"class":155},[149,36728,32571],{"class":6932},[149,36730,166],{"class":325},[149,36732,36576],{"class":309},[149,36734,2241],{"class":155},[149,36736,32580],{"class":6932},[149,36738,166],{"class":325},[149,36740,1939],{"class":309},[149,36742,2241],{"class":155},[149,36744,32589],{"class":6932},[149,36746,166],{"class":325},[149,36748,830],{"class":309},[149,36750,1878],{"class":155},[149,36752,36753,36755,36758,36760,36762,36764,36766,36768,36770,36772,36774,36776],{"class":151,"line":3373},[149,36754,32551],{"class":309},[149,36756,36757],{"class":155},".s8",[149,36759,166],{"class":325},[149,36761,36535],{"class":155},[149,36763,32580],{"class":6932},[149,36765,166],{"class":325},[149,36767,1939],{"class":309},[149,36769,2241],{"class":155},[149,36771,32635],{"class":6932},[149,36773,166],{"class":325},[149,36775,1045],{"class":309},[149,36777,1878],{"class":155},[149,36779,36780],{"class":151,"line":3394},[149,36781,32708],{"class":295},[149,36783,36784,36786,36788,36790],{"class":151,"line":3399},[149,36785,32551],{"class":309},[149,36787,32715],{"class":155},[149,36789,166],{"class":325},[149,36791,32720],{"class":155},[149,36793,36794],{"class":151,"line":3413},[149,36795,36796],{"class":295},"       # 定义全连接层\n",[149,36798,36799,36801,36804,36806,36808,36810,36812,36814,36816,36818,36820,36823],{"class":151,"line":3418},[149,36800,32551],{"class":309},[149,36802,36803],{"class":155},".f1",[149,36805,166],{"class":325},[149,36807,32737],{"class":155},[149,36809,2207],{"class":309},[149,36811,2318],{"class":325},[149,36813,2207],{"class":309},[149,36815,2318],{"class":325},[149,36817,36576],{"class":309},[149,36819,2241],{"class":155},[149,36821,36822],{"class":309},"4096",[149,36824,1878],{"class":155},[149,36826,36827,36829,36832,36834,36836,36838,36840,36842],{"class":151,"line":3447},[149,36828,32551],{"class":309},[149,36830,36831],{"class":155},".f2",[149,36833,166],{"class":325},[149,36835,32737],{"class":155},[149,36837,36822],{"class":309},[149,36839,2241],{"class":155},[149,36841,36822],{"class":309},[149,36843,1878],{"class":155},[149,36845,36846,36848,36851,36853,36855,36857,36859,36861],{"class":151,"line":3452},[149,36847,32551],{"class":309},[149,36849,36850],{"class":155},".f3",[149,36852,166],{"class":325},[149,36854,32737],{"class":155},[149,36856,36822],{"class":309},[149,36858,2241],{"class":155},[149,36860,2309],{"class":309},[149,36862,1878],{"class":155},[149,36864,36865],{"class":151,"line":3469},[149,36866,4119],{"emptyLinePlaceholder":1800},[149,36868,36869],{"class":151,"line":3474},[149,36870,36871],{"class":295},"    # 定义前向传播\n",[149,36873,36874,36876,36878],{"class":151,"line":3479},[149,36875,32507],{"class":325},[149,36877,32799],{"class":162},[149,36879,32802],{"class":155},[149,36881,36882,36884,36886,36888,36891,36893],{"class":151,"line":3484},[149,36883,32807],{"class":155},[149,36885,166],{"class":325},[149,36887,32529],{"class":309},[149,36889,36890],{"class":155},".ReLu(",[149,36892,32529],{"class":309},[149,36894,32819],{"class":155},[149,36896,36897,36899,36901,36903],{"class":151,"line":3498},[149,36898,32807],{"class":155},[149,36900,166],{"class":325},[149,36902,32529],{"class":309},[149,36904,32830],{"class":155},[149,36906,36907,36909,36911,36913,36915,36917],{"class":151,"line":3503},[149,36908,32807],{"class":155},[149,36910,166],{"class":325},[149,36912,32529],{"class":309},[149,36914,36890],{"class":155},[149,36916,32529],{"class":309},[149,36918,32845],{"class":155},[149,36920,36921,36923,36925,36927],{"class":151,"line":4296},[149,36922,32807],{"class":155},[149,36924,166],{"class":325},[149,36926,32529],{"class":309},[149,36928,32856],{"class":155},[149,36930,36931,36933,36935,36937,36939,36941],{"class":151,"line":4310},[149,36932,32807],{"class":155},[149,36934,166],{"class":325},[149,36936,32529],{"class":309},[149,36938,36890],{"class":155},[149,36940,32529],{"class":309},[149,36942,36943],{"class":155},".c5(x))\n",[149,36945,36946,36948,36950,36952,36954,36956],{"class":151,"line":4318},[149,36947,32807],{"class":155},[149,36949,166],{"class":325},[149,36951,32529],{"class":309},[149,36953,36890],{"class":155},[149,36955,32529],{"class":309},[149,36957,36958],{"class":155},".c6(x))\n",[149,36960,36961,36963,36965,36967,36969,36971],{"class":151,"line":4323},[149,36962,32807],{"class":155},[149,36964,166],{"class":325},[149,36966,32529],{"class":309},[149,36968,36890],{"class":155},[149,36970,32529],{"class":309},[149,36972,36973],{"class":155},".c7(x))\n",[149,36975,36976,36978,36980,36982],{"class":151,"line":4329},[149,36977,32807],{"class":155},[149,36979,166],{"class":325},[149,36981,32529],{"class":309},[149,36983,36984],{"class":155},".s8(x)\n",[149,36986,36987],{"class":151,"line":4335},[149,36988,4119],{"emptyLinePlaceholder":1800},[149,36990,36991],{"class":151,"line":4340},[149,36992,36993],{"class":295},"        # 展平加线性全连接层\n",[149,36995,36996,36998,37000,37002],{"class":151,"line":9663},[149,36997,32807],{"class":155},[149,36999,166],{"class":325},[149,37001,32529],{"class":309},[149,37003,32867],{"class":155},[149,37005,37006,37008,37010,37012,37014,37016],{"class":151,"line":9687},[149,37007,32807],{"class":155},[149,37009,166],{"class":325},[149,37011,32529],{"class":309},[149,37013,36890],{"class":155},[149,37015,32529],{"class":309},[149,37017,37018],{"class":155},".f1(x))\n",[149,37020,37021],{"class":151,"line":9692},[149,37022,37023],{"class":295},"        # 还需要dropout对神经元随机进行失活\n",[149,37025,37026,37028,37030,37033,37036],{"class":151,"line":9698},[149,37027,32807],{"class":155},[149,37029,166],{"class":325},[149,37031,37032],{"class":155},"F.dropout(x,",[149,37034,37035],{"class":309},"0.5",[149,37037,1878],{"class":155},[149,37039,37040,37042,37044,37046,37048,37050],{"class":151,"line":9725},[149,37041,32807],{"class":155},[149,37043,166],{"class":325},[149,37045,32529],{"class":309},[149,37047,36890],{"class":155},[149,37049,32529],{"class":309},[149,37051,37052],{"class":155},".f2(x))\n",[149,37054,37055,37057,37059,37061,37063],{"class":151,"line":9730},[149,37056,32807],{"class":155},[149,37058,166],{"class":325},[149,37060,37032],{"class":155},[149,37062,37035],{"class":309},[149,37064,1878],{"class":155},[149,37066,37067],{"class":151,"line":9736},[149,37068,37069],{"class":295},"        # 直接输出\n",[149,37071,37072,37074,37076,37078],{"class":151,"line":9748},[149,37073,32807],{"class":155},[149,37075,166],{"class":325},[149,37077,32529],{"class":309},[149,37079,37080],{"class":155},".f3(x)\n",[149,37082,37083],{"class":151,"line":9760},[149,37084,37085],{"class":295},"        # 前向传播输出\n",[149,37087,37088,37090],{"class":151,"line":9772},[149,37089,16464],{"class":325},[149,37091,32915],{"class":155},[149,37093,37094],{"class":151,"line":11430},[149,37095,37096],{"class":295},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[149,37098,37099,37101,37103,37105,37107],{"class":151,"line":11455},[149,37100,3255],{"class":325},[149,37102,32926],{"class":309},[149,37104,4667],{"class":325},[149,37106,32931],{"class":169},[149,37108,5457],{"class":155},[149,37110,37111,37113,37115,37117,37119,37121,37123,37125,37127],{"class":151,"line":11478},[149,37112,32943],{"class":155},[149,37114,166],{"class":325},[149,37116,32157],{"class":155},[149,37118,32950],{"class":169},[149,37120,3424],{"class":325},[149,37122,32955],{"class":155},[149,37124,3421],{"class":325},[149,37126,32182],{"class":169},[149,37128,1878],{"class":155},[149,37130,37131],{"class":151,"line":11502},[149,37132,37133],{"class":295},"    # 模型实例化，然后将实例化的模型放到设备中\n",[149,37135,37136,37138,37140],{"class":151,"line":11507},[149,37137,32995],{"class":155},[149,37139,166],{"class":325},[149,37141,37142],{"class":155},"AlexNet().to(device)\n",[149,37144,37145,37147,37149,37151,37153,37156,37158,37160],{"class":151,"line":11512},[149,37146,33005],{"class":309},[149,37148,33008],{"class":155},[149,37150,830],{"class":309},[149,37152,2241],{"class":155},[149,37154,37155],{"class":309},"227",[149,37157,2241],{"class":155},[149,37159,37155],{"class":309},[149,37161,33021],{"class":155},[125,37163,37164],{"start":193},[45,37165,33034],{},[140,37167,37169],{"className":32084,"code":37168,"language":32086,"meta":145,"style":145},"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",[48,37170,37171,37177,37183,37193,37199,37209,37219,37229,37239,37249,37253,37264,37274,37278,37282,37286,37294,37306,37316,37332,37342,37374,37388,37398,37408,37412,37422,37436,37446,37456,37466,37472,37476,37480,37484,37488,37492,37500,37520,37524,37528,37532,37536,37540,37556,37560,37564,37572,37576,37580,37588,37592,37596,37600,37608,37612,37616,37620,37624,37632,37636,37644,37648,37656,37660,37668,37672,37680,37684,37688,37696,37700,37704,37708,37720,37744,37758,37762,37766,37770,37778,37782,37790,37794,37802,37806,37814,37818,37826,37830,37838,37842,37854,37858,37866,37870,37878,37882,37886,37890,37894,37902,37906,37922,37926,37934,37938,37942,37946,37950,37954,37958,37962,37978,37982,37994,37998,38010,38014,38026,38030,38038,38042,38050,38054,38058,38063,38069,38073,38082,38086,38103,38107,38116,38120,38138,38151,38156,38169,38173,38177,38185,38189,38193,38201,38205,38213,38217,38225,38229,38233,38275,38317,38321,38325,38341,38345,38361,38365,38369,38377,38381,38385,38397,38435,38440,38445,38454,38458,38472,38482,38488,38494,38500,38506,38510,38514,38520,38524,38528,38536,38540,38558,38562,38566,38570,38586,38590,38594,38598,38602,38606,38626,38646,38650,38654,38658,38666,38674,38678,38694,38714,38734,38738,38742,38750,38758,38762,38766,38770,38782,38786,38796,38804,38821],{"__ignoreMap":145},[149,37172,37173,37175],{"class":151,"line":152},[149,37174,32098],{"class":325},[149,37176,33528],{"class":155},[149,37178,37179,37181],{"class":151,"line":193},[149,37180,32098],{"class":325},[149,37182,33535],{"class":155},[149,37184,37185,37187,37189,37191],{"class":151,"line":235},[149,37186,32098],{"class":325},[149,37188,33546],{"class":155},[149,37190,33089],{"class":325},[149,37192,33551],{"class":155},[149,37194,37195,37197],{"class":151,"line":340},[149,37196,32098],{"class":325},[149,37198,32101],{"class":155},[149,37200,37201,37203,37205,37207],{"class":151,"line":346},[149,37202,32443],{"class":325},[149,37204,33121],{"class":155},[149,37206,32098],{"class":325},[149,37208,33568],{"class":155},[149,37210,37211,37213,37215,37217],{"class":151,"line":352},[149,37212,32443],{"class":325},[149,37214,33074],{"class":155},[149,37216,32098],{"class":325},[149,37218,33079],{"class":155},[149,37220,37221,37223,37225,37227],{"class":151,"line":1021},[149,37222,32443],{"class":325},[149,37224,33104],{"class":155},[149,37226,32098],{"class":325},[149,37228,33109],{"class":155},[149,37230,37231,37233,37235,37237],{"class":151,"line":1035},[149,37232,32098],{"class":325},[149,37234,33121],{"class":155},[149,37236,33089],{"class":325},[149,37238,33126],{"class":155},[149,37240,37241,37243,37245,37247],{"class":151,"line":1054},[149,37242,32098],{"class":325},[149,37244,33138],{"class":155},[149,37246,33089],{"class":325},[149,37248,33143],{"class":155},[149,37250,37251],{"class":151,"line":1072},[149,37252,33613],{"class":295},[149,37254,37255,37257,37259,37261],{"class":151,"line":1090},[149,37256,32443],{"class":325},[149,37258,33620],{"class":155},[149,37260,32098],{"class":325},[149,37262,37263],{"class":155}," AlexNet\n",[149,37265,37266,37268,37270,37272],{"class":151,"line":1633},[149,37267,32443],{"class":325},[149,37269,32446],{"class":155},[149,37271,32098],{"class":325},[149,37273,32451],{"class":155},[149,37275,37276],{"class":151,"line":1644},[149,37277,4119],{"emptyLinePlaceholder":1800},[149,37279,37280],{"class":151,"line":3348},[149,37281,4119],{"emptyLinePlaceholder":1800},[149,37283,37284],{"class":151,"line":3362},[149,37285,33648],{"class":295},[149,37287,37288,37290,37292],{"class":151,"line":3367},[149,37289,33653],{"class":325},[149,37291,33656],{"class":162},[149,37293,33659],{"class":155},[149,37295,37296,37298,37300,37302,37304],{"class":151,"line":3373},[149,37297,33664],{"class":155},[149,37299,166],{"class":325},[149,37301,33161],{"class":155},[149,37303,33169],{"class":169},[149,37305,33172],{"class":155},[149,37307,37308,37310,37312,37314],{"class":151,"line":3394},[149,37309,33677],{"class":6932},[149,37311,166],{"class":325},[149,37313,33182],{"class":309},[149,37315,33172],{"class":155},[149,37317,37318,37320,37322,37324,37326,37328,37330],{"class":151,"line":3399},[149,37319,33688],{"class":6932},[149,37321,166],{"class":325},[149,37323,33199],{"class":155},[149,37325,33202],{"class":6932},[149,37327,166],{"class":325},[149,37329,37155],{"class":309},[149,37331,33210],{"class":155},[149,37333,37334,37336,37338,37340],{"class":151,"line":3413},[149,37335,33705],{"class":6932},[149,37337,166],{"class":325},[149,37339,33182],{"class":309},[149,37341,1878],{"class":155},[149,37343,37344,37346,37348,37350,37352,37354,37356,37358,37360,37362,37364,37366,37368,37370,37372],{"class":151,"line":3418},[149,37345,33716],{"class":155},[149,37347,166],{"class":325},[149,37349,33721],{"class":155},[149,37351,33724],{"class":309},[149,37353,319],{"class":155},[149,37355,33729],{"class":309},[149,37357,2318],{"class":325},[149,37359,9074],{"class":309},[149,37361,33736],{"class":155},[149,37363,33724],{"class":309},[149,37365,319],{"class":155},[149,37367,33743],{"class":309},[149,37369,2318],{"class":325},[149,37371,9074],{"class":309},[149,37373,33750],{"class":155},[149,37375,37376,37378,37380,37382,37384,37386],{"class":151,"line":3447},[149,37377,33755],{"class":155},[149,37379,166],{"class":325},[149,37381,33760],{"class":155},[149,37383,33243],{"class":6932},[149,37385,166],{"class":325},[149,37387,33248],{"class":155},[149,37389,37390,37392,37394,37396],{"class":151,"line":3452},[149,37391,33771],{"class":6932},[149,37393,166],{"class":325},[149,37395,33776],{"class":309},[149,37397,33172],{"class":155},[149,37399,37400,37402,37404,37406],{"class":151,"line":3469},[149,37401,33783],{"class":6932},[149,37403,166],{"class":325},[149,37405,33182],{"class":309},[149,37407,33172],{"class":155},[149,37409,37410],{"class":151,"line":3474},[149,37411,33794],{"class":295},[149,37413,37414,37416,37418,37420],{"class":151,"line":3479},[149,37415,33799],{"class":6932},[149,37417,166],{"class":325},[149,37419,2258],{"class":309},[149,37421,1878],{"class":155},[149,37423,37424,37426,37428,37430,37432,37434],{"class":151,"line":3484},[149,37425,33810],{"class":155},[149,37427,166],{"class":325},[149,37429,33240],{"class":155},[149,37431,33243],{"class":6932},[149,37433,166],{"class":325},[149,37435,33821],{"class":155},[149,37437,37438,37440,37442,37444],{"class":151,"line":3498},[149,37439,33826],{"class":6932},[149,37441,166],{"class":325},[149,37443,33776],{"class":309},[149,37445,33172],{"class":155},[149,37447,37448,37450,37452,37454],{"class":151,"line":3503},[149,37449,33837],{"class":6932},[149,37451,166],{"class":325},[149,37453,33182],{"class":309},[149,37455,33172],{"class":155},[149,37457,37458,37460,37462,37464],{"class":151,"line":4296},[149,37459,33848],{"class":6932},[149,37461,166],{"class":325},[149,37463,2258],{"class":309},[149,37465,1878],{"class":155},[149,37467,37468,37470],{"class":151,"line":4310},[149,37469,5808],{"class":325},[149,37471,33861],{"class":155},[149,37473,37474],{"class":151,"line":4318},[149,37475,4119],{"emptyLinePlaceholder":1800},[149,37477,37478],{"class":151,"line":4323},[149,37479,33870],{"class":295},[149,37481,37482],{"class":151,"line":4329},[149,37483,33875],{"class":295},[149,37485,37486],{"class":151,"line":4335},[149,37487,4119],{"emptyLinePlaceholder":1800},[149,37489,37490],{"class":151,"line":4340},[149,37491,33884],{"class":295},[149,37493,37494,37496,37498],{"class":151,"line":9663},[149,37495,33653],{"class":325},[149,37497,33891],{"class":162},[149,37499,33894],{"class":155},[149,37501,37502,37504,37506,37508,37510,37512,37514,37516,37518],{"class":151,"line":9687},[149,37503,32943],{"class":155},[149,37505,166],{"class":325},[149,37507,32157],{"class":155},[149,37509,32950],{"class":169},[149,37511,3424],{"class":325},[149,37513,32955],{"class":155},[149,37515,3421],{"class":325},[149,37517,33913],{"class":169},[149,37519,1878],{"class":155},[149,37521,37522],{"class":151,"line":9692},[149,37523,4119],{"emptyLinePlaceholder":1800},[149,37525,37526],{"class":151,"line":9698},[149,37527,4119],{"emptyLinePlaceholder":1800},[149,37529,37530],{"class":151,"line":9725},[149,37531,33928],{"class":295},[149,37533,37534],{"class":151,"line":9730},[149,37535,33933],{"class":295},[149,37537,37538],{"class":151,"line":9736},[149,37539,33938],{"class":295},[149,37541,37542,37544,37546,37548,37550,37552,37554],{"class":151,"line":9748},[149,37543,33943],{"class":155},[149,37545,166],{"class":325},[149,37547,33948],{"class":155},[149,37549,33951],{"class":6932},[149,37551,166],{"class":325},[149,37553,33956],{"class":309},[149,37555,1878],{"class":155},[149,37557,37558],{"class":151,"line":9760},[149,37559,4119],{"emptyLinePlaceholder":1800},[149,37561,37562],{"class":151,"line":9772},[149,37563,33967],{"class":295},[149,37565,37566,37568,37570],{"class":151,"line":11430},[149,37567,33972],{"class":155},[149,37569,166],{"class":325},[149,37571,33977],{"class":155},[149,37573,37574],{"class":151,"line":11455},[149,37575,4119],{"emptyLinePlaceholder":1800},[149,37577,37578],{"class":151,"line":11478},[149,37579,33986],{"class":295},[149,37581,37582,37584,37586],{"class":151,"line":11502},[149,37583,32995],{"class":155},[149,37585,166],{"class":325},[149,37587,33995],{"class":155},[149,37589,37590],{"class":151,"line":11507},[149,37591,34000],{"class":295},[149,37593,37594],{"class":151,"line":11512},[149,37595,34005],{"class":295},[149,37597,37598],{"class":151,"line":11517},[149,37599,34010],{"class":295},[149,37601,37602,37604,37606],{"class":151,"line":11526},[149,37603,34015],{"class":155},[149,37605,166],{"class":325},[149,37607,34020],{"class":155},[149,37609,37610],{"class":151,"line":11531},[149,37611,4119],{"emptyLinePlaceholder":1800},[149,37613,37614],{"class":151,"line":11537},[149,37615,4119],{"emptyLinePlaceholder":1800},[149,37617,37618],{"class":151,"line":11558},[149,37619,34033],{"class":295},[149,37621,37622],{"class":151,"line":11564},[149,37623,34038],{"class":295},[149,37625,37626,37628,37630],{"class":151,"line":11578},[149,37627,34043],{"class":155},[149,37629,166],{"class":325},[149,37631,34048],{"class":309},[149,37633,37634],{"class":151,"line":11584},[149,37635,34053],{"class":295},[149,37637,37638,37640,37642],{"class":151,"line":11611},[149,37639,34058],{"class":155},[149,37641,166],{"class":325},[149,37643,34063],{"class":155},[149,37645,37646],{"class":151,"line":11620},[149,37647,34068],{"class":295},[149,37649,37650,37652,37654],{"class":151,"line":11626},[149,37651,34073],{"class":155},[149,37653,166],{"class":325},[149,37655,34063],{"class":155},[149,37657,37658],{"class":151,"line":11634},[149,37659,34082],{"class":295},[149,37661,37662,37664,37666],{"class":151,"line":11639},[149,37663,34087],{"class":155},[149,37665,166],{"class":325},[149,37667,34063],{"class":155},[149,37669,37670],{"class":151,"line":18314},[149,37671,34096],{"class":295},[149,37673,37674,37676,37678],{"class":151,"line":18320},[149,37675,34101],{"class":155},[149,37677,166],{"class":325},[149,37679,34063],{"class":155},[149,37681,37682],{"class":151,"line":18343},[149,37683,4119],{"emptyLinePlaceholder":1800},[149,37685,37686],{"class":151,"line":18349},[149,37687,34114],{"class":295},[149,37689,37690,37692,37694],{"class":151,"line":18372},[149,37691,34119],{"class":155},[149,37693,166],{"class":325},[149,37695,34124],{"class":155},[149,37697,37698],{"class":151,"line":18386},[149,37699,4119],{"emptyLinePlaceholder":1800},[149,37701,37702],{"class":151,"line":18406},[149,37703,4119],{"emptyLinePlaceholder":1800},[149,37705,37706],{"class":151,"line":18412},[149,37707,34137],{"class":295},[149,37709,37710,37712,37714,37716,37718],{"class":151,"line":18423},[149,37711,4919],{"class":325},[149,37713,34144],{"class":155},[149,37715,27752],{"class":325},[149,37717,34149],{"class":309},[149,37719,34152],{"class":155},[149,37721,37722,37724,37726,37728,37730,37732,37734,37736,37738,37740,37742],{"class":151,"line":18446},[149,37723,34157],{"class":309},[149,37725,319],{"class":155},[149,37727,34162],{"class":169},[149,37729,34165],{"class":309},[149,37731,2447],{"class":169},[149,37733,34165],{"class":309},[149,37735,2115],{"class":169},[149,37737,34174],{"class":155},[149,37739,2395],{"class":325},[149,37741,830],{"class":309},[149,37743,32203],{"class":155},[149,37745,37746,37748,37750,37752,37754,37756],{"class":151,"line":18468},[149,37747,34157],{"class":309},[149,37749,319],{"class":155},[149,37751,34189],{"class":169},[149,37753,2318],{"class":325},[149,37755,2309],{"class":309},[149,37757,1878],{"class":155},[149,37759,37760],{"class":151,"line":18473},[149,37761,4119],{"emptyLinePlaceholder":1800},[149,37763,37764],{"class":151,"line":18479},[149,37765,34204],{"class":295},[149,37767,37768],{"class":151,"line":18493},[149,37769,34209],{"class":295},[149,37771,37772,37774,37776],{"class":151,"line":18506},[149,37773,34214],{"class":155},[149,37775,166],{"class":325},[149,37777,34048],{"class":309},[149,37779,37780],{"class":151,"line":18511},[149,37781,34223],{"class":295},[149,37783,37784,37786,37788],{"class":151,"line":18525},[149,37785,34228],{"class":155},[149,37787,166],{"class":325},[149,37789,4803],{"class":309},[149,37791,37792],{"class":151,"line":18530},[149,37793,34237],{"class":295},[149,37795,37796,37798,37800],{"class":151,"line":18536},[149,37797,34242],{"class":155},[149,37799,166],{"class":325},[149,37801,34048],{"class":309},[149,37803,37804],{"class":151,"line":18541},[149,37805,34251],{"class":295},[149,37807,37808,37810,37812],{"class":151,"line":18555},[149,37809,34256],{"class":155},[149,37811,166],{"class":325},[149,37813,4803],{"class":309},[149,37815,37816],{"class":151,"line":18560},[149,37817,34265],{"class":295},[149,37819,37820,37822,37824],{"class":151,"line":18565},[149,37821,34270],{"class":155},[149,37823,166],{"class":325},[149,37825,4803],{"class":309},[149,37827,37828],{"class":151,"line":18579},[149,37829,34279],{"class":295},[149,37831,37832,37834,37836],{"class":151,"line":18591},[149,37833,34284],{"class":155},[149,37835,166],{"class":325},[149,37837,4803],{"class":309},[149,37839,37840],{"class":151,"line":18596},[149,37841,34293],{"class":295},[149,37843,37844,37846,37848,37850,37852],{"class":151,"line":18609},[149,37845,5121],{"class":325},[149,37847,33307],{"class":155},[149,37849,27752],{"class":325},[149,37851,33312],{"class":309},[149,37853,34306],{"class":155},[149,37855,37856],{"class":151,"line":18614},[149,37857,34311],{"class":295},[149,37859,37860,37862,37864],{"class":151,"line":18619},[149,37861,34316],{"class":155},[149,37863,166],{"class":325},[149,37865,34321],{"class":155},[149,37867,37868],{"class":151,"line":18624},[149,37869,34326],{"class":295},[149,37871,37872,37874,37876],{"class":151,"line":18637},[149,37873,34331],{"class":155},[149,37875,166],{"class":325},[149,37877,34336],{"class":155},[149,37879,37880],{"class":151,"line":18642},[149,37881,34342],{"class":295},[149,37883,37884],{"class":151,"line":34339},[149,37885,34348],{"class":155},[149,37887,37888],{"class":151,"line":34345},[149,37889,34354],{"class":295},[149,37891,37892],{"class":151,"line":34351},[149,37893,34360],{"class":295},[149,37895,37896,37898,37900],{"class":151,"line":34357},[149,37897,34366],{"class":155},[149,37899,166],{"class":325},[149,37901,34371],{"class":155},[149,37903,37904],{"class":151,"line":34363},[149,37905,34377],{"class":295},[149,37907,37908,37910,37912,37914,37916,37918,37920],{"class":151,"line":34374},[149,37909,34383],{"class":155},[149,37911,166],{"class":325},[149,37913,34388],{"class":155},[149,37915,34391],{"class":6932},[149,37917,166],{"class":325},[149,37919,830],{"class":309},[149,37921,1878],{"class":155},[149,37923,37924],{"class":151,"line":34380},[149,37925,34403],{"class":295},[149,37927,37928,37930,37932],{"class":151,"line":34400},[149,37929,34409],{"class":155},[149,37931,166],{"class":325},[149,37933,34414],{"class":155},[149,37935,37936],{"class":151,"line":34406},[149,37937,34420],{"class":295},[149,37939,37940],{"class":151,"line":34417},[149,37941,34426],{"class":155},[149,37943,37944],{"class":151,"line":34423},[149,37945,34432],{"class":295},[149,37947,37948],{"class":151,"line":34429},[149,37949,34438],{"class":155},[149,37951,37952],{"class":151,"line":34435},[149,37953,34444],{"class":295},[149,37955,37956],{"class":151,"line":34441},[149,37957,34450],{"class":155},[149,37959,37960],{"class":151,"line":34447},[149,37961,34456],{"class":295},[149,37963,37964,37966,37968,37970,37972,37974,37976],{"class":151,"line":34453},[149,37965,34462],{"class":155},[149,37967,11191],{"class":325},[149,37969,34467],{"class":155},[149,37971,2318],{"class":325},[149,37973,34472],{"class":155},[149,37975,2056],{"class":309},[149,37977,1878],{"class":155},[149,37979,37980],{"class":151,"line":34459},[149,37981,34482],{"class":295},[149,37983,37984,37986,37988,37990,37992],{"class":151,"line":34479},[149,37985,34488],{"class":155},[149,37987,11191],{"class":325},[149,37989,34493],{"class":155},[149,37991,4667],{"class":325},[149,37993,34498],{"class":155},[149,37995,37996],{"class":151,"line":34485},[149,37997,34504],{"class":295},[149,37999,38000,38002,38004,38006,38008],{"class":151,"line":34501},[149,38001,34510],{"class":155},[149,38003,11191],{"class":325},[149,38005,34472],{"class":155},[149,38007,2056],{"class":309},[149,38009,1878],{"class":155},[149,38011,38012],{"class":151,"line":34507},[149,38013,34524],{"class":295},[149,38015,38016,38018,38020,38022,38024],{"class":151,"line":34521},[149,38017,5121],{"class":325},[149,38019,34532],{"class":155},[149,38021,27752],{"class":325},[149,38023,33312],{"class":309},[149,38025,34539],{"class":155},[149,38027,38028],{"class":151,"line":34527},[149,38029,34545],{"class":295},[149,38031,38032,38034,38036],{"class":151,"line":34542},[149,38033,34316],{"class":155},[149,38035,166],{"class":325},[149,38037,34321],{"class":155},[149,38039,38040],{"class":151,"line":34548},[149,38041,34560],{"class":295},[149,38043,38044,38046,38048],{"class":151,"line":34557},[149,38045,34331],{"class":155},[149,38047,166],{"class":325},[149,38049,34336],{"class":155},[149,38051,38052],{"class":151,"line":34563},[149,38053,34575],{"class":295},[149,38055,38056],{"class":151,"line":34572},[149,38057,34581],{"class":155},[149,38059,38060],{"class":151,"line":34578},[149,38061,38062],{"class":295},"            # 验证时不计算梯度以节省内存\u002F计算\n",[149,38064,38065,38067],{"class":151,"line":34584},[149,38066,34587],{"class":325},[149,38068,34590],{"class":155},[149,38070,38071],{"class":151,"line":34593},[149,38072,34596],{"class":295},[149,38074,38075,38078,38080],{"class":151,"line":34599},[149,38076,38077],{"class":155},"                output",[149,38079,166],{"class":325},[149,38081,34371],{"class":155},[149,38083,38084],{"class":151,"line":34610},[149,38085,34613],{"class":295},[149,38087,38088,38091,38093,38095,38097,38099,38101],{"class":151,"line":34616},[149,38089,38090],{"class":155},"                pre_lab",[149,38092,166],{"class":325},[149,38094,34388],{"class":155},[149,38096,34391],{"class":6932},[149,38098,166],{"class":325},[149,38100,830],{"class":309},[149,38102,1878],{"class":155},[149,38104,38105],{"class":151,"line":34635},[149,38106,34638],{"class":295},[149,38108,38109,38112,38114],{"class":151,"line":34641},[149,38110,38111],{"class":155},"                val_batch_loss",[149,38113,166],{"class":325},[149,38115,34414],{"class":155},[149,38117,38118],{"class":151,"line":34652},[149,38119,34655],{"class":295},[149,38121,38122,38125,38127,38130,38132,38134,38136],{"class":151,"line":34658},[149,38123,38124],{"class":155},"                val_loss",[149,38126,11191],{"class":325},[149,38128,38129],{"class":155},"val_batch_loss.item()",[149,38131,2318],{"class":325},[149,38133,34472],{"class":155},[149,38135,2056],{"class":309},[149,38137,1878],{"class":155},[149,38139,38140,38143,38145,38147,38149],{"class":151,"line":34678},[149,38141,38142],{"class":155},"                val_corrects",[149,38144,11191],{"class":325},[149,38146,34493],{"class":155},[149,38148,4667],{"class":325},[149,38150,34498],{"class":155},[149,38152,38153],{"class":151,"line":34694},[149,38154,38155],{"class":295},"            # 当前用于验证的样本数量\n",[149,38157,38158,38161,38163,38165,38167],{"class":151,"line":34700},[149,38159,38160],{"class":155},"            val_num",[149,38162,11191],{"class":325},[149,38164,34472],{"class":155},[149,38166,2056],{"class":309},[149,38168,1878],{"class":155},[149,38170,38171],{"class":151,"line":34714},[149,38172,34717],{"class":295},[149,38174,38175],{"class":151,"line":34720},[149,38176,34723],{"class":295},[149,38178,38179,38181,38183],{"class":151,"line":34726},[149,38180,34729],{"class":155},[149,38182,2447],{"class":325},[149,38184,34734],{"class":155},[149,38186,38187],{"class":151,"line":34737},[149,38188,34740],{"class":295},[149,38190,38191],{"class":151,"line":34743},[149,38192,34746],{"class":295},[149,38194,38195,38197,38199],{"class":151,"line":34749},[149,38196,34752],{"class":155},[149,38198,2447],{"class":325},[149,38200,34734],{"class":155},[149,38202,38203],{"class":151,"line":34759},[149,38204,34762],{"class":295},[149,38206,38207,38209,38211],{"class":151,"line":34765},[149,38208,34768],{"class":155},[149,38210,2447],{"class":325},[149,38212,34773],{"class":155},[149,38214,38215],{"class":151,"line":34776},[149,38216,34779],{"class":295},[149,38218,38219,38221,38223],{"class":151,"line":34782},[149,38220,34785],{"class":155},[149,38222,2447],{"class":325},[149,38224,34773],{"class":155},[149,38226,38227],{"class":151,"line":34792},[149,38228,4119],{"emptyLinePlaceholder":1800},[149,38230,38231],{"class":151,"line":34797},[149,38232,34800],{"class":295},[149,38234,38235,38237,38239,38241,38243,38245,38247,38249,38251,38253,38255,38257,38259,38261,38263,38265,38267,38269,38271,38273],{"class":151,"line":34803},[149,38236,34157],{"class":309},[149,38238,319],{"class":155},[149,38240,5310],{"class":169},[149,38242,34165],{"class":309},[149,38244,34814],{"class":169},[149,38246,2756],{"class":309},[149,38248,34819],{"class":325},[149,38250,2805],{"class":309},[149,38252,34824],{"class":169},[149,38254,2756],{"class":309},[149,38256,34819],{"class":325},[149,38258,2805],{"class":309},[149,38260,5310],{"class":169},[149,38262,34835],{"class":155},[149,38264,2395],{"class":325},[149,38266,830],{"class":309},[149,38268,34842],{"class":155},[149,38270,2395],{"class":325},[149,38272,830],{"class":309},[149,38274,34849],{"class":155},[149,38276,38277,38279,38281,38283,38285,38287,38289,38291,38293,38295,38297,38299,38301,38303,38305,38307,38309,38311,38313,38315],{"class":151,"line":34852},[149,38278,34157],{"class":309},[149,38280,319],{"class":155},[149,38282,5310],{"class":169},[149,38284,34165],{"class":309},[149,38286,34863],{"class":169},[149,38288,2756],{"class":309},[149,38290,34819],{"class":325},[149,38292,2805],{"class":309},[149,38294,34872],{"class":169},[149,38296,2756],{"class":309},[149,38298,34819],{"class":325},[149,38300,2805],{"class":309},[149,38302,5310],{"class":169},[149,38304,34883],{"class":155},[149,38306,2395],{"class":325},[149,38308,830],{"class":309},[149,38310,34890],{"class":155},[149,38312,2395],{"class":325},[149,38314,830],{"class":309},[149,38316,34849],{"class":155},[149,38318,38319],{"class":151,"line":34899},[149,38320,4119],{"emptyLinePlaceholder":1800},[149,38322,38323],{"class":151,"line":34904},[149,38324,34907],{"class":295},[149,38326,38327,38329,38331,38333,38335,38337,38339],{"class":151,"line":34910},[149,38328,4216],{"class":325},[149,38330,34915],{"class":155},[149,38332,2395],{"class":325},[149,38334,830],{"class":309},[149,38336,2799],{"class":155},[149,38338,2819],{"class":325},[149,38340,34926],{"class":155},[149,38342,38343],{"class":151,"line":34929},[149,38344,34932],{"class":295},[149,38346,38347,38349,38351,38353,38355,38357,38359],{"class":151,"line":34935},[149,38348,34938],{"class":155},[149,38350,1910],{"class":309},[149,38352,166],{"class":325},[149,38354,34945],{"class":155},[149,38356,2395],{"class":325},[149,38358,830],{"class":309},[149,38360,34952],{"class":155},[149,38362,38363],{"class":151,"line":34955},[149,38364,34958],{"class":295},[149,38366,38367],{"class":151,"line":34961},[149,38368,34964],{"class":295},[149,38370,38371,38373,38375],{"class":151,"line":34967},[149,38372,34970],{"class":155},[149,38374,166],{"class":325},[149,38376,34020],{"class":155},[149,38378,38379],{"class":151,"line":34977},[149,38380,4119],{"emptyLinePlaceholder":1800},[149,38382,38383],{"class":151,"line":34982},[149,38384,34985],{"class":295},[149,38386,38387,38389,38391,38393,38395],{"class":151,"line":34988},[149,38388,34991],{"class":155},[149,38390,166],{"class":325},[149,38392,34996],{"class":155},[149,38394,2395],{"class":325},[149,38396,35001],{"class":155},[149,38398,38399,38401,38403,38405,38407,38409,38411,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433],{"class":151,"line":35004},[149,38400,34157],{"class":309},[149,38402,319],{"class":155},[149,38404,35011],{"class":169},[149,38406,2756],{"class":309},[149,38408,35016],{"class":325},[149,38410,2805],{"class":309},[149,38412,2407],{"class":169},[149,38414,2756],{"class":309},[149,38416,35016],{"class":325},[149,38418,2805],{"class":309},[149,38420,35029],{"class":169},[149,38422,35032],{"class":155},[149,38424,35035],{"class":325},[149,38426,2767],{"class":309},[149,38428,35040],{"class":155},[149,38430,2191],{"class":325},[149,38432,2767],{"class":309},[149,38434,32203],{"class":155},[149,38436,38437],{"class":151,"line":35049},[149,38438,38439],{"class":295},"    # 选择最优参数并保存\n",[149,38441,38442],{"class":151,"line":35055},[149,38443,38444],{"class":295},"    # 保存最佳模型权重字典\n",[149,38446,38447,38450,38452],{"class":151,"line":35061},[149,38448,38449],{"class":155},"    torch.save(best_model_wts,",[149,38451,35073],{"class":169},[149,38453,1878],{"class":155},[149,38455,38456],{"class":151,"line":35067},[149,38457,35093],{"class":295},[149,38459,38460,38462,38464,38466,38468,38470],{"class":151,"line":35078},[149,38461,35099],{"class":155},[149,38463,166],{"class":325},[149,38465,35104],{"class":155},[149,38467,35107],{"class":6932},[149,38469,166],{"class":325},[149,38471,3270],{"class":155},[149,38473,38474,38476,38478,38480],{"class":151,"line":35084},[149,38475,35117],{"class":169},[149,38477,2720],{"class":155},[149,38479,35122],{"class":309},[149,38481,35125],{"class":155},[149,38483,38484,38486],{"class":151,"line":35090},[149,38485,35131],{"class":169},[149,38487,35134],{"class":155},[149,38489,38490,38492],{"class":151,"line":35096},[149,38491,35140],{"class":169},[149,38493,35143],{"class":155},[149,38495,38496,38498],{"class":151,"line":35114},[149,38497,35149],{"class":169},[149,38499,35152],{"class":155},[149,38501,38502,38504],{"class":151,"line":35128},[149,38503,35158],{"class":169},[149,38505,35161],{"class":155},[149,38507,38508],{"class":151,"line":35137},[149,38509,35167],{"class":155},[149,38511,38512],{"class":151,"line":35146},[149,38513,35173],{"class":295},[149,38515,38516,38518],{"class":151,"line":35155},[149,38517,5808],{"class":325},[149,38519,35181],{"class":155},[149,38521,38522],{"class":151,"line":35164},[149,38523,4119],{"emptyLinePlaceholder":1800},[149,38525,38526],{"class":151,"line":35170},[149,38527,35192],{"class":295},[149,38529,38530,38532,38534],{"class":151,"line":35176},[149,38531,33653],{"class":325},[149,38533,35200],{"class":162},[149,38535,35203],{"class":155},[149,38537,38538],{"class":151,"line":35184},[149,38539,35209],{"class":295},[149,38541,38542,38544,38546,38548,38550,38552,38554,38556],{"class":151,"line":35189},[149,38543,35215],{"class":155},[149,38545,33399],{"class":6932},[149,38547,166],{"class":325},[149,38549,319],{"class":155},[149,38551,2361],{"class":309},[149,38553,2241],{"class":155},[149,38555,2157],{"class":309},[149,38557,32203],{"class":155},[149,38559,38560],{"class":151,"line":35195},[149,38561,35235],{"class":295},[149,38563,38564],{"class":151,"line":35206},[149,38565,35241],{"class":295},[149,38567,38568],{"class":151,"line":35212},[149,38569,35247],{"class":295},[149,38571,38572,38574,38576,38578,38580,38582,38584],{"class":151,"line":35232},[149,38573,33433],{"class":155},[149,38575,830],{"class":309},[149,38577,2241],{"class":155},[149,38579,1045],{"class":309},[149,38581,2241],{"class":155},[149,38583,830],{"class":309},[149,38585,1878],{"class":155},[149,38587,38588],{"class":151,"line":35238},[149,38589,35270],{"class":295},[149,38591,38592],{"class":151,"line":35244},[149,38593,35276],{"class":295},[149,38595,38596],{"class":151,"line":35250},[149,38597,35282],{"class":295},[149,38599,38600],{"class":151,"line":35267},[149,38601,35288],{"class":295},[149,38603,38604],{"class":151,"line":35273},[149,38605,35294],{"class":295},[149,38607,38608,38610,38612,38614,38616,38618,38620,38622,38624],{"class":151,"line":35279},[149,38609,35300],{"class":155},[149,38611,35303],{"class":169},[149,38613,35306],{"class":155},[149,38615,35309],{"class":169},[149,38617,2241],{"class":155},[149,38619,35314],{"class":6932},[149,38621,166],{"class":325},[149,38623,35319],{"class":169},[149,38625,1878],{"class":155},[149,38627,38628,38630,38632,38634,38636,38638,38640,38642,38644],{"class":151,"line":35285},[149,38629,35300],{"class":155},[149,38631,35303],{"class":169},[149,38633,35331],{"class":155},[149,38635,35334],{"class":169},[149,38637,2241],{"class":155},[149,38639,35314],{"class":6932},[149,38641,166],{"class":325},[149,38643,35343],{"class":169},[149,38645,1878],{"class":155},[149,38647,38648],{"class":151,"line":35291},[149,38649,35351],{"class":295},[149,38651,38652],{"class":151,"line":35297},[149,38653,35357],{"class":155},[149,38655,38656],{"class":151,"line":35324},[149,38657,35363],{"class":295},[149,38659,38660,38662,38664],{"class":151,"line":35348},[149,38661,35369],{"class":155},[149,38663,35372],{"class":169},[149,38665,1878],{"class":155},[149,38667,38668,38670,38672],{"class":151,"line":35354},[149,38669,35380],{"class":155},[149,38671,35383],{"class":169},[149,38673,1878],{"class":155},[149,38675,38676],{"class":151,"line":35360},[149,38677,35391],{"class":295},[149,38679,38680,38682,38684,38686,38688,38690,38692],{"class":151,"line":35366},[149,38681,33433],{"class":155},[149,38683,830],{"class":309},[149,38685,2241],{"class":155},[149,38687,1045],{"class":309},[149,38689,2241],{"class":155},[149,38691,1045],{"class":309},[149,38693,1878],{"class":155},[149,38695,38696,38698,38700,38702,38704,38706,38708,38710,38712],{"class":151,"line":35377},[149,38697,35300],{"class":155},[149,38699,35303],{"class":169},[149,38701,35418],{"class":155},[149,38703,35309],{"class":169},[149,38705,2241],{"class":155},[149,38707,35314],{"class":6932},[149,38709,166],{"class":325},[149,38711,35429],{"class":169},[149,38713,1878],{"class":155},[149,38715,38716,38718,38720,38722,38724,38726,38728,38730,38732],{"class":151,"line":35388},[149,38717,35300],{"class":155},[149,38719,35303],{"class":169},[149,38721,35441],{"class":155},[149,38723,35334],{"class":169},[149,38725,2241],{"class":155},[149,38727,35314],{"class":6932},[149,38729,166],{"class":325},[149,38731,35452],{"class":169},[149,38733,1878],{"class":155},[149,38735,38736],{"class":151,"line":35394},[149,38737,35460],{"class":295},[149,38739,38740],{"class":151,"line":35411},[149,38741,35357],{"class":155},[149,38743,38744,38746,38748],{"class":151,"line":35434},[149,38745,35369],{"class":155},[149,38747,35303],{"class":169},[149,38749,1878],{"class":155},[149,38751,38752,38754,38756],{"class":151,"line":35457},[149,38753,35380],{"class":155},[149,38755,35482],{"class":169},[149,38757,1878],{"class":155},[149,38759,38760],{"class":151,"line":35463},[149,38761,35490],{"class":155},[149,38763,38764],{"class":151,"line":35468},[149,38765,4119],{"emptyLinePlaceholder":1800},[149,38767,38768],{"class":151,"line":35477},[149,38769,35501],{"class":295},[149,38771,38772,38774,38776,38778,38780],{"class":151,"line":35487},[149,38773,3255],{"class":325},[149,38775,32926],{"class":309},[149,38777,4667],{"class":325},[149,38779,32931],{"class":169},[149,38781,5457],{"class":155},[149,38783,38784],{"class":151,"line":35493},[149,38785,35520],{"class":295},[149,38787,38788,38791,38793],{"class":151,"line":35498},[149,38789,38790],{"class":155},"    AlexNet",[149,38792,166],{"class":325},[149,38794,38795],{"class":155},"AlexNet()\n",[149,38797,38798,38800,38802],{"class":151,"line":35504},[149,38799,35537],{"class":155},[149,38801,166],{"class":325},[149,38803,35542],{"class":155},[149,38805,38806,38808,38810,38813,38815,38817,38819],{"class":151,"line":35517},[149,38807,35099],{"class":155},[149,38809,166],{"class":325},[149,38811,38812],{"class":155},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[149,38814,35555],{"class":6932},[149,38816,166],{"class":325},[149,38818,2561],{"class":309},[149,38820,1878],{"class":155},[149,38822,38823],{"class":151,"line":35523},[149,38824,35567],{"class":155},[125,38826,38827],{"start":235},[45,38828,35580],{},[140,38830,38832],{"className":32084,"code":38831,"language":32086,"meta":145,"style":145},"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",[48,38833,38834,38840,38850,38860,38870,38874,38884,38894,38905,38909,38913,38917,38925,38941,38951,38967,38977,38991,38995,39005,39015,39025,39031,39035,39039,39047,39051,39067,39075,39079,39083,39091,39099,39103,39107,39111,39115,39121,39125,39135,39143,39151,39155,39159,39163,39171,39175,39191,39195,39199,39203,39215,39219,39231,39235,39239,39251,39255,39265,39269,39273,39285,39289,39297,39301,39305,39313,39317,39325,39329,39333,39337,39341,39345,39361,39369,39373,39377,39425,39431,39435,39445,39453,39461,39465,39469,39473,39477,39485,39489,39505,39509,39517,39525],{"__ignoreMap":145},[149,38835,38836,38838],{"class":151,"line":152},[149,38837,32098],{"class":325},[149,38839,32101],{"class":155},[149,38841,38842,38844,38846,38848],{"class":151,"line":193},[149,38843,32098],{"class":325},[149,38845,33121],{"class":155},[149,38847,33089],{"class":325},[149,38849,33126],{"class":155},[149,38851,38852,38854,38856,38858],{"class":151,"line":235},[149,38853,32443],{"class":325},[149,38855,35608],{"class":155},[149,38857,32098],{"class":325},[149,38859,35613],{"class":155},[149,38861,38862,38864,38866,38868],{"class":151,"line":340},[149,38863,32443],{"class":325},[149,38865,33104],{"class":155},[149,38867,32098],{"class":325},[149,38869,33109],{"class":155},[149,38871,38872],{"class":151,"line":346},[149,38873,35628],{"class":295},[149,38875,38876,38878,38880,38882],{"class":151,"line":352},[149,38877,32443],{"class":325},[149,38879,33074],{"class":155},[149,38881,32098],{"class":325},[149,38883,33079],{"class":155},[149,38885,38886,38888,38890,38892],{"class":151,"line":1021},[149,38887,32443],{"class":325},[149,38889,33620],{"class":155},[149,38891,32098],{"class":325},[149,38893,37263],{"class":155},[149,38895,38896,38898,38901,38903],{"class":151,"line":1035},[149,38897,32443],{"class":325},[149,38899,38900],{"class":155}," 练习.AlexNet.model ",[149,38902,32098],{"class":325},[149,38904,37263],{"class":155},[149,38906,38907],{"class":151,"line":1054},[149,38908,4119],{"emptyLinePlaceholder":1800},[149,38910,38911],{"class":151,"line":1072},[149,38912,4119],{"emptyLinePlaceholder":1800},[149,38914,38915],{"class":151,"line":1090},[149,38916,35657],{"class":295},[149,38918,38919,38921,38923],{"class":151,"line":1633},[149,38920,33653],{"class":325},[149,38922,35664],{"class":162},[149,38924,33659],{"class":155},[149,38926,38927,38929,38931,38933,38935,38937,38939],{"class":151,"line":1644},[149,38928,35671],{"class":155},[149,38930,166],{"class":325},[149,38932,33161],{"class":155},[149,38934,33164],{"class":6932},[149,38936,166],{"class":325},[149,38938,33169],{"class":169},[149,38940,33172],{"class":155},[149,38942,38943,38945,38947,38949],{"class":151,"line":3348},[149,38944,35688],{"class":6932},[149,38946,166],{"class":325},[149,38948,35693],{"class":309},[149,38950,33172],{"class":155},[149,38952,38953,38955,38957,38959,38961,38963,38965],{"class":151,"line":3362},[149,38954,35700],{"class":6932},[149,38956,166],{"class":325},[149,38958,33199],{"class":155},[149,38960,33202],{"class":6932},[149,38962,166],{"class":325},[149,38964,37155],{"class":309},[149,38966,33210],{"class":155},[149,38968,38969,38971,38973,38975],{"class":151,"line":3367},[149,38970,35717],{"class":6932},[149,38972,166],{"class":325},[149,38974,33182],{"class":309},[149,38976,1878],{"class":155},[149,38978,38979,38981,38983,38985,38987,38989],{"class":151,"line":3373},[149,38980,35728],{"class":155},[149,38982,166],{"class":325},[149,38984,33240],{"class":155},[149,38986,33243],{"class":6932},[149,38988,166],{"class":325},[149,38990,35739],{"class":155},[149,38992,38993],{"class":151,"line":3394},[149,38994,35744],{"class":295},[149,38996,38997,38999,39001,39003],{"class":151,"line":3399},[149,38998,35749],{"class":6932},[149,39000,166],{"class":325},[149,39002,830],{"class":309},[149,39004,33172],{"class":155},[149,39006,39007,39009,39011,39013],{"class":151,"line":3413},[149,39008,35760],{"class":6932},[149,39010,166],{"class":325},[149,39012,33182],{"class":309},[149,39014,33172],{"class":155},[149,39016,39017,39019,39021,39023],{"class":151,"line":3418},[149,39018,35771],{"class":6932},[149,39020,166],{"class":325},[149,39022,2056],{"class":309},[149,39024,1878],{"class":155},[149,39026,39027,39029],{"class":151,"line":3447},[149,39028,5808],{"class":325},[149,39030,35784],{"class":155},[149,39032,39033],{"class":151,"line":3452},[149,39034,4119],{"emptyLinePlaceholder":1800},[149,39036,39037],{"class":151,"line":3469},[149,39038,35793],{"class":295},[149,39040,39041,39043,39045],{"class":151,"line":3474},[149,39042,33653],{"class":325},[149,39044,35800],{"class":162},[149,39046,35803],{"class":155},[149,39048,39049],{"class":151,"line":3479},[149,39050,35808],{"class":295},[149,39052,39053,39055,39057,39059,39061,39063,39065],{"class":151,"line":3484},[149,39054,32943],{"class":155},[149,39056,166],{"class":325},[149,39058,32950],{"class":169},[149,39060,3424],{"class":325},[149,39062,32955],{"class":155},[149,39064,3421],{"class":325},[149,39066,35825],{"class":169},[149,39068,39069,39071,39073],{"class":151,"line":3498},[149,39070,32995],{"class":155},[149,39072,166],{"class":325},[149,39074,33995],{"class":155},[149,39076,39077],{"class":151,"line":3503},[149,39078,4119],{"emptyLinePlaceholder":1800},[149,39080,39081],{"class":151,"line":4296},[149,39082,35842],{"class":295},[149,39084,39085,39087,39089],{"class":151,"line":4310},[149,39086,35847],{"class":155},[149,39088,166],{"class":325},[149,39090,34048],{"class":309},[149,39092,39093,39095,39097],{"class":151,"line":4318},[149,39094,35856],{"class":155},[149,39096,166],{"class":325},[149,39098,4803],{"class":309},[149,39100,39101],{"class":151,"line":4323},[149,39102,4119],{"emptyLinePlaceholder":1800},[149,39104,39105],{"class":151,"line":4329},[149,39106,35869],{"class":295},[149,39108,39109],{"class":151,"line":4335},[149,39110,35874],{"class":295},[149,39112,39113],{"class":151,"line":4340},[149,39114,35879],{"class":295},[149,39116,39117,39119],{"class":151,"line":9663},[149,39118,35884],{"class":325},[149,39120,34590],{"class":155},[149,39122,39123],{"class":151,"line":9687},[149,39124,35891],{"class":295},[149,39126,39127,39129,39131,39133],{"class":151,"line":9692},[149,39128,5121],{"class":325},[149,39130,35898],{"class":155},[149,39132,27752],{"class":325},[149,39134,35903],{"class":155},[149,39136,39137,39139,39141],{"class":151,"line":9698},[149,39138,35908],{"class":155},[149,39140,166],{"class":325},[149,39142,35913],{"class":155},[149,39144,39145,39147,39149],{"class":151,"line":9725},[149,39146,35918],{"class":155},[149,39148,166],{"class":325},[149,39150,35923],{"class":155},[149,39152,39153],{"class":151,"line":9730},[149,39154,35928],{"class":295},[149,39156,39157],{"class":151,"line":9736},[149,39158,34581],{"class":155},[149,39160,39161],{"class":151,"line":9748},[149,39162,35937],{"class":295},[149,39164,39165,39167,39169],{"class":151,"line":9760},[149,39166,34366],{"class":155},[149,39168,166],{"class":325},[149,39170,35946],{"class":155},[149,39172,39173],{"class":151,"line":9772},[149,39174,35951],{"class":295},[149,39176,39177,39179,39181,39183,39185,39187,39189],{"class":151,"line":11430},[149,39178,34383],{"class":155},[149,39180,166],{"class":325},[149,39182,34388],{"class":155},[149,39184,34391],{"class":6932},[149,39186,166],{"class":325},[149,39188,830],{"class":309},[149,39190,1878],{"class":155},[149,39192,39193],{"class":151,"line":11455},[149,39194,35972],{"class":295},[149,39196,39197],{"class":151,"line":11478},[149,39198,35977],{"class":295},[149,39200,39201],{"class":151,"line":11502},[149,39202,35982],{"class":295},[149,39204,39205,39207,39209,39211,39213],{"class":151,"line":11507},[149,39206,35987],{"class":155},[149,39208,11191],{"class":325},[149,39210,34493],{"class":155},[149,39212,4667],{"class":325},[149,39214,35996],{"class":155},[149,39216,39217],{"class":151,"line":11512},[149,39218,36001],{"class":295},[149,39220,39221,39223,39225,39227,39229],{"class":151,"line":11517},[149,39222,36006],{"class":155},[149,39224,11191],{"class":325},[149,39226,36011],{"class":155},[149,39228,2056],{"class":309},[149,39230,1878],{"class":155},[149,39232,39233],{"class":151,"line":11526},[149,39234,4119],{"emptyLinePlaceholder":1800},[149,39236,39237],{"class":151,"line":11531},[149,39238,36024],{"class":295},[149,39240,39241,39243,39245,39247,39249],{"class":151,"line":11537},[149,39242,36029],{"class":155},[149,39244,166],{"class":325},[149,39246,36034],{"class":155},[149,39248,2447],{"class":325},[149,39250,36039],{"class":155},[149,39252,39253],{"class":151,"line":11558},[149,39254,36044],{"class":295},[149,39256,39257,39259,39261,39263],{"class":151,"line":11564},[149,39258,34157],{"class":309},[149,39260,319],{"class":155},[149,39262,36053],{"class":169},[149,39264,36056],{"class":155},[149,39266,39267],{"class":151,"line":11578},[149,39268,4119],{"emptyLinePlaceholder":1800},[149,39270,39271],{"class":151,"line":11584},[149,39272,36065],{"class":295},[149,39274,39275,39277,39279,39281,39283],{"class":151,"line":11611},[149,39276,3255],{"class":325},[149,39278,32926],{"class":309},[149,39280,4667],{"class":325},[149,39282,32931],{"class":169},[149,39284,5457],{"class":155},[149,39286,39287],{"class":151,"line":11620},[149,39288,36082],{"class":295},[149,39290,39291,39293,39295],{"class":151,"line":11626},[149,39292,32995],{"class":155},[149,39294,166],{"class":325},[149,39296,38795],{"class":155},[149,39298,39299],{"class":151,"line":11634},[149,39300,36095],{"class":295},[149,39302,39303],{"class":151,"line":11639},[149,39304,36100],{"class":295},[149,39306,39307,39309,39311],{"class":151,"line":18314},[149,39308,36105],{"class":155},[149,39310,36108],{"class":169},[149,39312,32203],{"class":155},[149,39314,39315],{"class":151,"line":18320},[149,39316,36115],{"class":295},[149,39318,39319,39321,39323],{"class":151,"line":18343},[149,39320,35728],{"class":155},[149,39322,166],{"class":325},[149,39324,36124],{"class":155},[149,39326,39327],{"class":151,"line":18349},[149,39328,36129],{"class":295},[149,39330,39331],{"class":151,"line":18372},[149,39332,36134],{"class":155},[149,39334,39335],{"class":151,"line":18386},[149,39336,4119],{"emptyLinePlaceholder":1800},[149,39338,39339],{"class":151,"line":18406},[149,39340,36143],{"class":295},[149,39342,39343],{"class":151,"line":18412},[149,39344,36148],{"class":295},[149,39346,39347,39349,39351,39353,39355,39357,39359],{"class":151,"line":18423},[149,39348,32943],{"class":155},[149,39350,166],{"class":325},[149,39352,32950],{"class":169},[149,39354,3424],{"class":325},[149,39356,32955],{"class":155},[149,39358,3421],{"class":325},[149,39360,35825],{"class":169},[149,39362,39363,39365,39367],{"class":151,"line":18446},[149,39364,32995],{"class":155},[149,39366,166],{"class":325},[149,39368,33995],{"class":155},[149,39370,39371],{"class":151,"line":18468},[149,39372,36177],{"class":295},[149,39374,39375],{"class":151,"line":18473},[149,39376,36182],{"class":295},[149,39378,39379,39381,39383,39385,39387,39389,39391,39393,39395,39397,39399,39401,39403,39405,39407,39409,39411,39413,39415,39417,39419,39421,39423],{"class":151,"line":18479},[149,39380,36187],{"class":155},[149,39382,166],{"class":325},[149,39384,810],{"class":155},[149,39386,36194],{"class":169},[149,39388,2241],{"class":155},[149,39390,36199],{"class":169},[149,39392,2241],{"class":155},[149,39394,36204],{"class":169},[149,39396,2241],{"class":155},[149,39398,36209],{"class":169},[149,39400,2241],{"class":155},[149,39402,36214],{"class":169},[149,39404,2241],{"class":155},[149,39406,36219],{"class":169},[149,39408,2241],{"class":155},[149,39410,36224],{"class":169},[149,39412,2241],{"class":155},[149,39414,36229],{"class":169},[149,39416,2241],{"class":155},[149,39418,36234],{"class":169},[149,39420,2241],{"class":155},[149,39422,36239],{"class":169},[149,39424,34952],{"class":155},[149,39426,39427,39429],{"class":151,"line":18493},[149,39428,35884],{"class":325},[149,39430,34590],{"class":155},[149,39432,39433],{"class":151,"line":18506},[149,39434,36252],{"class":295},[149,39436,39437,39439,39441,39443],{"class":151,"line":18511},[149,39438,5121],{"class":325},[149,39440,36259],{"class":155},[149,39442,27752],{"class":325},[149,39444,35903],{"class":155},[149,39446,39447,39449,39451],{"class":151,"line":18525},[149,39448,34316],{"class":155},[149,39450,166],{"class":325},[149,39452,34321],{"class":155},[149,39454,39455,39457,39459],{"class":151,"line":18530},[149,39456,34331],{"class":155},[149,39458,166],{"class":325},[149,39460,34336],{"class":155},[149,39462,39463],{"class":151,"line":18536},[149,39464,4119],{"emptyLinePlaceholder":1800},[149,39466,39467],{"class":151,"line":18541},[149,39468,36288],{"class":295},[149,39470,39471],{"class":151,"line":18555},[149,39472,34581],{"class":155},[149,39474,39475],{"class":151,"line":18560},[149,39476,36297],{"class":295},[149,39478,39479,39481,39483],{"class":151,"line":18565},[149,39480,34366],{"class":155},[149,39482,166],{"class":325},[149,39484,34371],{"class":155},[149,39486,39487],{"class":151,"line":18579},[149,39488,36310],{"class":295},[149,39490,39491,39493,39495,39497,39499,39501,39503],{"class":151,"line":18591},[149,39492,34383],{"class":155},[149,39494,166],{"class":325},[149,39496,34388],{"class":155},[149,39498,34391],{"class":6932},[149,39500,166],{"class":325},[149,39502,830],{"class":309},[149,39504,1878],{"class":155},[149,39506,39507],{"class":151,"line":18596},[149,39508,36331],{"class":295},[149,39510,39511,39513,39515],{"class":151,"line":18609},[149,39512,36336],{"class":155},[149,39514,166],{"class":325},[149,39516,36341],{"class":155},[149,39518,39519,39521,39523],{"class":151,"line":18614},[149,39520,36346],{"class":155},[149,39522,166],{"class":325},[149,39524,36351],{"class":155},[149,39526,39527,39529,39531,39533,39535,39537,39539,39541],{"class":151,"line":18619},[149,39528,36356],{"class":309},[149,39530,319],{"class":155},[149,39532,36361],{"class":169},[149,39534,36364],{"class":155},[149,39536,36367],{"class":169},[149,39538,2241],{"class":155},[149,39540,36372],{"class":169},[149,39542,36375],{"class":155},[19,39544,39546],{"id":39545},"_22vgg","2.2.VGG",[120,39548,39550],{"id":39549},"_221原理","2.2.1.原理",[24,39552,39553],{},[83,39554],{"alt":145,"src":39555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[24,39557,39558],{},[83,39559],{"alt":145,"src":39560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[24,39562,39563],{},[83,39564],{"alt":145,"src":39565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[24,39567,39568],{},"参数详细描述：",[24,39570,39571],{},[83,39572],{"alt":145,"src":39573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[24,39575,39576],{},[83,39577],{"alt":145,"src":39578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[24,39580,39581],{},[83,39582],{"alt":145,"src":39583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[24,39585,39586],{},[83,39587],{"alt":145,"src":39588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[24,39590,39591],{},[83,39592],{"alt":145,"src":39593},"\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",[120,39595,39597],{"id":39596},"_222代码实现","2.2.2.代码实现",[125,39599,39600],{},[45,39601,39602],{},"网络搭建",[140,39604,39606],{"className":32084,"code":39605,"language":32086,"meta":145,"style":145},"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",[48,39607,39608,39614,39626,39636,39646,39650,39667,39675,39694,39699,39704,39716,39754,39759,39795,39799,39828,39833,39838,39849,39885,39889,39925,39929,39957,39961,39966,39977,40013,40017,40053,40057,40093,40097,40125,40129,40134,40145,40182,40186,40222,40226,40262,40266,40294,40298,40303,40314,40350,40354,40390,40394,40430,40434,40462,40466,40471,40482,40487,40492,40497,40518,40522,40534,40538,40550,40554,40558,40563,40568,40583,40588,40598,40603,40618,40623,40642,40647,40656,40661,40671,40676,40681,40695,40700,40714,40722,40726,40730,40738,40749,40760,40771,40782,40793,40804,40810,40814,40819,40832,40852,40858,40867],{"__ignoreMap":145},[149,39609,39610,39612],{"class":151,"line":152},[149,39611,32098],{"class":325},[149,39613,32101],{"class":155},[149,39615,39616,39618,39621,39623],{"class":151,"line":193},[149,39617,32443],{"class":325},[149,39619,39620],{"class":155}," sympy.core.sympify ",[149,39622,32098],{"class":325},[149,39624,39625],{"class":155}," kernS\n",[149,39627,39628,39630,39632,39634],{"class":151,"line":235},[149,39629,32443],{"class":325},[149,39631,32446],{"class":155},[149,39633,32098],{"class":325},[149,39635,32451],{"class":155},[149,39637,39638,39640,39642,39644],{"class":151,"line":340},[149,39639,32443],{"class":325},[149,39641,32463],{"class":155},[149,39643,32098],{"class":325},[149,39645,32468],{"class":155},[149,39647,39648],{"class":151,"line":346},[149,39649,4119],{"emptyLinePlaceholder":1800},[149,39651,39652,39654,39657,39659,39661,39663,39665],{"class":151,"line":352},[149,39653,913],{"class":325},[149,39655,39656],{"class":162}," VGG16",[149,39658,319],{"class":155},[149,39660,32484],{"class":162},[149,39662,2421],{"class":155},[149,39664,32489],{"class":162},[149,39666,32492],{"class":155},[149,39668,39669,39671,39673],{"class":151,"line":1021},[149,39670,32507],{"class":325},[149,39672,32510],{"class":309},[149,39674,32513],{"class":155},[149,39676,39677,39679,39681,39684,39686,39688,39690,39692],{"class":151,"line":1035},[149,39678,32523],{"class":309},[149,39680,319],{"class":155},[149,39682,39683],{"class":309},"VGG16",[149,39685,329],{"class":155},[149,39687,32529],{"class":309},[149,39689,32532],{"class":155},[149,39691,32535],{"class":309},[149,39693,3695],{"class":155},[149,39695,39696],{"class":151,"line":1054},[149,39697,39698],{"class":295},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[149,39700,39701],{"class":151,"line":1072},[149,39702,39703],{"class":295},"        # 这里用的是灰度图\n",[149,39705,39706,39708,39711,39713],{"class":151,"line":1090},[149,39707,32551],{"class":309},[149,39709,39710],{"class":155},".block1",[149,39712,166],{"class":325},[149,39714,39715],{"class":155},"nn.Sequential(\n",[149,39717,39718,39721,39723,39725,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751],{"class":151,"line":1633},[149,39719,39720],{"class":155},"            nn.Conv2d(",[149,39722,32562],{"class":6932},[149,39724,166],{"class":325},[149,39726,830],{"class":309},[149,39728,2241],{"class":155},[149,39730,32571],{"class":6932},[149,39732,166],{"class":325},[149,39734,2068],{"class":309},[149,39736,2241],{"class":155},[149,39738,32580],{"class":6932},[149,39740,166],{"class":325},[149,39742,1939],{"class":309},[149,39744,2241],{"class":155},[149,39746,32589],{"class":6932},[149,39748,166],{"class":325},[149,39750,830],{"class":309},[149,39752,39753],{"class":155},"),\n",[149,39755,39756],{"class":151,"line":1644},[149,39757,39758],{"class":155},"            nn.ReLU(),\n",[149,39760,39761,39763,39765,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793],{"class":151,"line":3348},[149,39762,39720],{"class":155},[149,39764,32562],{"class":6932},[149,39766,166],{"class":325},[149,39768,2068],{"class":309},[149,39770,2241],{"class":155},[149,39772,32571],{"class":6932},[149,39774,166],{"class":325},[149,39776,2068],{"class":309},[149,39778,2241],{"class":155},[149,39780,32580],{"class":6932},[149,39782,166],{"class":325},[149,39784,1939],{"class":309},[149,39786,2241],{"class":155},[149,39788,32589],{"class":6932},[149,39790,166],{"class":325},[149,39792,830],{"class":309},[149,39794,39753],{"class":155},[149,39796,39797],{"class":151,"line":3362},[149,39798,39758],{"class":155},[149,39800,39801,39804,39806,39808,39810,39812,39814,39816,39818,39820,39822,39824,39826],{"class":151,"line":3367},[149,39802,39803],{"class":155},"            nn.MaxPool2d(",[149,39805,32580],{"class":6932},[149,39807,166],{"class":325},[149,39809,1045],{"class":309},[149,39811,2241],{"class":155},[149,39813,32635],{"class":6932},[149,39815,166],{"class":325},[149,39817,1045],{"class":309},[149,39819,2241],{"class":155},[149,39821,32589],{"class":6932},[149,39823,166],{"class":325},[149,39825,2056],{"class":309},[149,39827,1878],{"class":155},[149,39829,39830],{"class":151,"line":3373},[149,39831,39832],{"class":155},"        )\n",[149,39834,39835],{"class":151,"line":3394},[149,39836,39837],{"class":295},"        # 第二层\n",[149,39839,39840,39842,39845,39847],{"class":151,"line":3399},[149,39841,32551],{"class":309},[149,39843,39844],{"class":155},".block2",[149,39846,166],{"class":325},[149,39848,39715],{"class":155},[149,39850,39851,39853,39855,39857,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883],{"class":151,"line":3413},[149,39852,39720],{"class":155},[149,39854,32562],{"class":6932},[149,39856,166],{"class":325},[149,39858,2068],{"class":309},[149,39860,2241],{"class":155},[149,39862,32571],{"class":6932},[149,39864,166],{"class":325},[149,39866,33776],{"class":309},[149,39868,2241],{"class":155},[149,39870,32580],{"class":6932},[149,39872,166],{"class":325},[149,39874,1939],{"class":309},[149,39876,2241],{"class":155},[149,39878,32589],{"class":6932},[149,39880,166],{"class":325},[149,39882,830],{"class":309},[149,39884,39753],{"class":155},[149,39886,39887],{"class":151,"line":3418},[149,39888,39758],{"class":155},[149,39890,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923],{"class":151,"line":3447},[149,39892,39720],{"class":155},[149,39894,32562],{"class":6932},[149,39896,166],{"class":325},[149,39898,33776],{"class":309},[149,39900,2241],{"class":155},[149,39902,32571],{"class":6932},[149,39904,166],{"class":325},[149,39906,33776],{"class":309},[149,39908,2241],{"class":155},[149,39910,32580],{"class":6932},[149,39912,166],{"class":325},[149,39914,1939],{"class":309},[149,39916,2241],{"class":155},[149,39918,32589],{"class":6932},[149,39920,166],{"class":325},[149,39922,830],{"class":309},[149,39924,39753],{"class":155},[149,39926,39927],{"class":151,"line":3452},[149,39928,39758],{"class":155},[149,39930,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955],{"class":151,"line":3469},[149,39932,39803],{"class":155},[149,39934,32580],{"class":6932},[149,39936,166],{"class":325},[149,39938,1045],{"class":309},[149,39940,2241],{"class":155},[149,39942,32635],{"class":6932},[149,39944,166],{"class":325},[149,39946,1045],{"class":309},[149,39948,2241],{"class":155},[149,39950,32589],{"class":6932},[149,39952,166],{"class":325},[149,39954,2056],{"class":309},[149,39956,1878],{"class":155},[149,39958,39959],{"class":151,"line":3474},[149,39960,39832],{"class":155},[149,39962,39963],{"class":151,"line":3479},[149,39964,39965],{"class":295},"        # 第三层\n",[149,39967,39968,39970,39973,39975],{"class":151,"line":3484},[149,39969,32551],{"class":309},[149,39971,39972],{"class":155},".block3",[149,39974,166],{"class":325},[149,39976,39715],{"class":155},[149,39978,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011],{"class":151,"line":3498},[149,39980,39720],{"class":155},[149,39982,32562],{"class":6932},[149,39984,166],{"class":325},[149,39986,33776],{"class":309},[149,39988,2241],{"class":155},[149,39990,32571],{"class":6932},[149,39992,166],{"class":325},[149,39994,36576],{"class":309},[149,39996,2241],{"class":155},[149,39998,32580],{"class":6932},[149,40000,166],{"class":325},[149,40002,1939],{"class":309},[149,40004,2241],{"class":155},[149,40006,32589],{"class":6932},[149,40008,166],{"class":325},[149,40010,830],{"class":309},[149,40012,39753],{"class":155},[149,40014,40015],{"class":151,"line":3503},[149,40016,39758],{"class":155},[149,40018,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051],{"class":151,"line":4296},[149,40020,39720],{"class":155},[149,40022,32562],{"class":6932},[149,40024,166],{"class":325},[149,40026,36576],{"class":309},[149,40028,2241],{"class":155},[149,40030,32571],{"class":6932},[149,40032,166],{"class":325},[149,40034,36576],{"class":309},[149,40036,2241],{"class":155},[149,40038,32580],{"class":6932},[149,40040,166],{"class":325},[149,40042,1939],{"class":309},[149,40044,2241],{"class":155},[149,40046,32589],{"class":6932},[149,40048,166],{"class":325},[149,40050,830],{"class":309},[149,40052,39753],{"class":155},[149,40054,40055],{"class":151,"line":4310},[149,40056,39758],{"class":155},[149,40058,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091],{"class":151,"line":4318},[149,40060,39720],{"class":155},[149,40062,32562],{"class":6932},[149,40064,166],{"class":325},[149,40066,36576],{"class":309},[149,40068,2241],{"class":155},[149,40070,32571],{"class":6932},[149,40072,166],{"class":325},[149,40074,36576],{"class":309},[149,40076,2241],{"class":155},[149,40078,32580],{"class":6932},[149,40080,166],{"class":325},[149,40082,1939],{"class":309},[149,40084,2241],{"class":155},[149,40086,32589],{"class":6932},[149,40088,166],{"class":325},[149,40090,830],{"class":309},[149,40092,39753],{"class":155},[149,40094,40095],{"class":151,"line":4323},[149,40096,39758],{"class":155},[149,40098,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123],{"class":151,"line":4329},[149,40100,39803],{"class":155},[149,40102,32580],{"class":6932},[149,40104,166],{"class":325},[149,40106,1045],{"class":309},[149,40108,2241],{"class":155},[149,40110,32635],{"class":6932},[149,40112,166],{"class":325},[149,40114,1045],{"class":309},[149,40116,2241],{"class":155},[149,40118,32589],{"class":6932},[149,40120,166],{"class":325},[149,40122,2056],{"class":309},[149,40124,1878],{"class":155},[149,40126,40127],{"class":151,"line":4335},[149,40128,39832],{"class":155},[149,40130,40131],{"class":151,"line":4340},[149,40132,40133],{"class":295},"        # 第四层\n",[149,40135,40136,40138,40141,40143],{"class":151,"line":9663},[149,40137,32551],{"class":309},[149,40139,40140],{"class":155},".block4",[149,40142,166],{"class":325},[149,40144,39715],{"class":155},[149,40146,40147,40149,40151,40153,40155,40157,40159,40161,40164,40166,40168,40170,40172,40174,40176,40178,40180],{"class":151,"line":9687},[149,40148,39720],{"class":155},[149,40150,32562],{"class":6932},[149,40152,166],{"class":325},[149,40154,36576],{"class":309},[149,40156,2241],{"class":155},[149,40158,32571],{"class":6932},[149,40160,166],{"class":325},[149,40162,40163],{"class":309},"512",[149,40165,2241],{"class":155},[149,40167,32580],{"class":6932},[149,40169,166],{"class":325},[149,40171,1939],{"class":309},[149,40173,2241],{"class":155},[149,40175,32589],{"class":6932},[149,40177,166],{"class":325},[149,40179,830],{"class":309},[149,40181,39753],{"class":155},[149,40183,40184],{"class":151,"line":9692},[149,40185,39758],{"class":155},[149,40187,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212,40214,40216,40218,40220],{"class":151,"line":9698},[149,40189,39720],{"class":155},[149,40191,32562],{"class":6932},[149,40193,166],{"class":325},[149,40195,40163],{"class":309},[149,40197,2241],{"class":155},[149,40199,32571],{"class":6932},[149,40201,166],{"class":325},[149,40203,40163],{"class":309},[149,40205,2241],{"class":155},[149,40207,32580],{"class":6932},[149,40209,166],{"class":325},[149,40211,1939],{"class":309},[149,40213,2241],{"class":155},[149,40215,32589],{"class":6932},[149,40217,166],{"class":325},[149,40219,830],{"class":309},[149,40221,39753],{"class":155},[149,40223,40224],{"class":151,"line":9725},[149,40225,39758],{"class":155},[149,40227,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246,40248,40250,40252,40254,40256,40258,40260],{"class":151,"line":9730},[149,40229,39720],{"class":155},[149,40231,32562],{"class":6932},[149,40233,166],{"class":325},[149,40235,40163],{"class":309},[149,40237,2241],{"class":155},[149,40239,32571],{"class":6932},[149,40241,166],{"class":325},[149,40243,40163],{"class":309},[149,40245,2241],{"class":155},[149,40247,32580],{"class":6932},[149,40249,166],{"class":325},[149,40251,1939],{"class":309},[149,40253,2241],{"class":155},[149,40255,32589],{"class":6932},[149,40257,166],{"class":325},[149,40259,830],{"class":309},[149,40261,39753],{"class":155},[149,40263,40264],{"class":151,"line":9736},[149,40265,39758],{"class":155},[149,40267,40268,40270,40272,40274,40276,40278,40280,40282,40284,40286,40288,40290,40292],{"class":151,"line":9748},[149,40269,39803],{"class":155},[149,40271,32580],{"class":6932},[149,40273,166],{"class":325},[149,40275,1045],{"class":309},[149,40277,2241],{"class":155},[149,40279,32635],{"class":6932},[149,40281,166],{"class":325},[149,40283,1045],{"class":309},[149,40285,2241],{"class":155},[149,40287,32589],{"class":6932},[149,40289,166],{"class":325},[149,40291,2056],{"class":309},[149,40293,1878],{"class":155},[149,40295,40296],{"class":151,"line":9760},[149,40297,39832],{"class":155},[149,40299,40300],{"class":151,"line":9772},[149,40301,40302],{"class":295},"        # 第五层\n",[149,40304,40305,40307,40310,40312],{"class":151,"line":11430},[149,40306,32551],{"class":309},[149,40308,40309],{"class":155},".block5",[149,40311,166],{"class":325},[149,40313,39715],{"class":155},[149,40315,40316,40318,40320,40322,40324,40326,40328,40330,40332,40334,40336,40338,40340,40342,40344,40346,40348],{"class":151,"line":11455},[149,40317,39720],{"class":155},[149,40319,32562],{"class":6932},[149,40321,166],{"class":325},[149,40323,40163],{"class":309},[149,40325,2241],{"class":155},[149,40327,32571],{"class":6932},[149,40329,166],{"class":325},[149,40331,40163],{"class":309},[149,40333,2241],{"class":155},[149,40335,32580],{"class":6932},[149,40337,166],{"class":325},[149,40339,1939],{"class":309},[149,40341,2241],{"class":155},[149,40343,32589],{"class":6932},[149,40345,166],{"class":325},[149,40347,830],{"class":309},[149,40349,39753],{"class":155},[149,40351,40352],{"class":151,"line":11478},[149,40353,39758],{"class":155},[149,40355,40356,40358,40360,40362,40364,40366,40368,40370,40372,40374,40376,40378,40380,40382,40384,40386,40388],{"class":151,"line":11502},[149,40357,39720],{"class":155},[149,40359,32562],{"class":6932},[149,40361,166],{"class":325},[149,40363,40163],{"class":309},[149,40365,2241],{"class":155},[149,40367,32571],{"class":6932},[149,40369,166],{"class":325},[149,40371,40163],{"class":309},[149,40373,2241],{"class":155},[149,40375,32580],{"class":6932},[149,40377,166],{"class":325},[149,40379,1939],{"class":309},[149,40381,2241],{"class":155},[149,40383,32589],{"class":6932},[149,40385,166],{"class":325},[149,40387,830],{"class":309},[149,40389,39753],{"class":155},[149,40391,40392],{"class":151,"line":11507},[149,40393,39758],{"class":155},[149,40395,40396,40398,40400,40402,40404,40406,40408,40410,40412,40414,40416,40418,40420,40422,40424,40426,40428],{"class":151,"line":11512},[149,40397,39720],{"class":155},[149,40399,32562],{"class":6932},[149,40401,166],{"class":325},[149,40403,40163],{"class":309},[149,40405,2241],{"class":155},[149,40407,32571],{"class":6932},[149,40409,166],{"class":325},[149,40411,40163],{"class":309},[149,40413,2241],{"class":155},[149,40415,32580],{"class":6932},[149,40417,166],{"class":325},[149,40419,1939],{"class":309},[149,40421,2241],{"class":155},[149,40423,32589],{"class":6932},[149,40425,166],{"class":325},[149,40427,830],{"class":309},[149,40429,39753],{"class":155},[149,40431,40432],{"class":151,"line":11517},[149,40433,39758],{"class":155},[149,40435,40436,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456,40458,40460],{"class":151,"line":11526},[149,40437,39803],{"class":155},[149,40439,32580],{"class":6932},[149,40441,166],{"class":325},[149,40443,1045],{"class":309},[149,40445,2241],{"class":155},[149,40447,32635],{"class":6932},[149,40449,166],{"class":325},[149,40451,1045],{"class":309},[149,40453,2241],{"class":155},[149,40455,32589],{"class":6932},[149,40457,166],{"class":325},[149,40459,2056],{"class":309},[149,40461,1878],{"class":155},[149,40463,40464],{"class":151,"line":11531},[149,40465,39832],{"class":155},[149,40467,40468],{"class":151,"line":11537},[149,40469,40470],{"class":295},"        # 全连接层\n",[149,40472,40473,40475,40478,40480],{"class":151,"line":11558},[149,40474,32551],{"class":309},[149,40476,40477],{"class":155},".block6",[149,40479,166],{"class":325},[149,40481,39715],{"class":155},[149,40483,40484],{"class":151,"line":11564},[149,40485,40486],{"class":295},"            # 平展操作\n",[149,40488,40489],{"class":151,"line":11578},[149,40490,40491],{"class":295},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[149,40493,40494],{"class":151,"line":11584},[149,40495,40496],{"class":155},"            nn.Flatten(),\n",[149,40498,40499,40502,40504,40506,40508,40510,40512,40514,40516],{"class":151,"line":11611},[149,40500,40501],{"class":155},"            nn.Linear(",[149,40503,2232],{"class":309},[149,40505,2318],{"class":325},[149,40507,2232],{"class":309},[149,40509,2318],{"class":325},[149,40511,40163],{"class":309},[149,40513,2241],{"class":155},[149,40515,36576],{"class":309},[149,40517,39753],{"class":155},[149,40519,40520],{"class":151,"line":11620},[149,40521,39758],{"class":155},[149,40523,40524,40526,40528,40530,40532],{"class":151,"line":11626},[149,40525,40501],{"class":155},[149,40527,36576],{"class":309},[149,40529,2241],{"class":155},[149,40531,33776],{"class":309},[149,40533,39753],{"class":155},[149,40535,40536],{"class":151,"line":11634},[149,40537,39758],{"class":155},[149,40539,40540,40542,40544,40546,40548],{"class":151,"line":11639},[149,40541,40501],{"class":155},[149,40543,33776],{"class":309},[149,40545,2241],{"class":155},[149,40547,2309],{"class":309},[149,40549,1878],{"class":155},[149,40551,40552],{"class":151,"line":18314},[149,40553,39832],{"class":155},[149,40555,40556],{"class":151,"line":18320},[149,40557,4119],{"emptyLinePlaceholder":1800},[149,40559,40560],{"class":151,"line":18343},[149,40561,40562],{"class":295},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[149,40564,40565],{"class":151,"line":18349},[149,40566,40567],{"class":295},"        # 循环遍历模型\n",[149,40569,40570,40572,40575,40577,40580],{"class":151,"line":18372},[149,40571,5121],{"class":325},[149,40573,40574],{"class":155}," m ",[149,40576,27752],{"class":325},[149,40578,40579],{"class":309}," self",[149,40581,40582],{"class":155},".modules():\n",[149,40584,40585],{"class":151,"line":18386},[149,40586,40587],{"class":295},"            # print(m)\n",[149,40589,40590,40592,40595],{"class":151,"line":18406},[149,40591,6360],{"class":325},[149,40593,40594],{"class":309}," isinstance",[149,40596,40597],{"class":155},"(m,nn.Conv2d):\n",[149,40599,40600],{"class":151,"line":18412},[149,40601,40602],{"class":295},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[149,40604,40605,40608,40611,40613,40616],{"class":151,"line":18423},[149,40606,40607],{"class":155},"                nn.init.kaiming_normal_(m.weight,",[149,40609,40610],{"class":6932},"nonlinearity",[149,40612,166],{"class":325},[149,40614,40615],{"class":169},"'relu'",[149,40617,1878],{"class":155},[149,40619,40620],{"class":151,"line":18446},[149,40621,40622],{"class":295},"                # 判断b参数是否存在\n",[149,40624,40625,40628,40631,40634,40637,40640],{"class":151,"line":18468},[149,40626,40627],{"class":325},"                if",[149,40629,40630],{"class":155}," m.bias ",[149,40632,40633],{"class":325},"is",[149,40635,40636],{"class":325}," not",[149,40638,40639],{"class":309}," None",[149,40641,5457],{"class":155},[149,40643,40644],{"class":151,"line":18473},[149,40645,40646],{"class":295},"                    # 如果参数不存在的化初始化b=0\n",[149,40648,40649,40652,40654],{"class":151,"line":18479},[149,40650,40651],{"class":155},"                    nn.init.constant_(m.bias,",[149,40653,2056],{"class":309},[149,40655,1878],{"class":155},[149,40657,40658],{"class":151,"line":18493},[149,40659,40660],{"class":295},"            # 全连接层初始化\n",[149,40662,40663,40666,40668],{"class":151,"line":18506},[149,40664,40665],{"class":325},"            elif",[149,40667,40594],{"class":309},[149,40669,40670],{"class":155},"(m,nn.Linear):\n",[149,40672,40673],{"class":151,"line":18511},[149,40674,40675],{"class":295},"                # 这个初始化方法是利用的是正太分布的方式\n",[149,40677,40678],{"class":151,"line":18525},[149,40679,40680],{"class":295},"                # 均值为0，方差为0.01\n",[149,40682,40683,40686,40688,40690,40693],{"class":151,"line":18530},[149,40684,40685],{"class":155},"                nn.init.normal_(m.weight,",[149,40687,2056],{"class":309},[149,40689,2241],{"class":155},[149,40691,40692],{"class":309},"0.01",[149,40694,1878],{"class":155},[149,40696,40697],{"class":151,"line":18536},[149,40698,40699],{"class":295},"                # 初始化b参数\n",[149,40701,40702,40704,40706,40708,40710,40712],{"class":151,"line":18541},[149,40703,40627],{"class":325},[149,40705,40630],{"class":155},[149,40707,40633],{"class":325},[149,40709,40636],{"class":325},[149,40711,40639],{"class":309},[149,40713,5457],{"class":155},[149,40715,40716,40718,40720],{"class":151,"line":18555},[149,40717,40651],{"class":155},[149,40719,2056],{"class":309},[149,40721,1878],{"class":155},[149,40723,40724],{"class":151,"line":18560},[149,40725,4119],{"emptyLinePlaceholder":1800},[149,40727,40728],{"class":151,"line":18565},[149,40729,36871],{"class":295},[149,40731,40732,40734,40736],{"class":151,"line":18579},[149,40733,32507],{"class":325},[149,40735,32799],{"class":162},[149,40737,32802],{"class":155},[149,40739,40740,40742,40744,40746],{"class":151,"line":18591},[149,40741,32807],{"class":155},[149,40743,166],{"class":325},[149,40745,32529],{"class":309},[149,40747,40748],{"class":155},".block1(x)\n",[149,40750,40751,40753,40755,40757],{"class":151,"line":18596},[149,40752,32807],{"class":155},[149,40754,166],{"class":325},[149,40756,32529],{"class":309},[149,40758,40759],{"class":155},".block2(x)\n",[149,40761,40762,40764,40766,40768],{"class":151,"line":18609},[149,40763,32807],{"class":155},[149,40765,166],{"class":325},[149,40767,32529],{"class":309},[149,40769,40770],{"class":155},".block3(x)\n",[149,40772,40773,40775,40777,40779],{"class":151,"line":18614},[149,40774,32807],{"class":155},[149,40776,166],{"class":325},[149,40778,32529],{"class":309},[149,40780,40781],{"class":155},".block4(x)\n",[149,40783,40784,40786,40788,40790],{"class":151,"line":18619},[149,40785,32807],{"class":155},[149,40787,166],{"class":325},[149,40789,32529],{"class":309},[149,40791,40792],{"class":155},".block5(x)\n",[149,40794,40795,40797,40799,40801],{"class":151,"line":18624},[149,40796,32807],{"class":155},[149,40798,166],{"class":325},[149,40800,32529],{"class":309},[149,40802,40803],{"class":155},".block6(x)\n",[149,40805,40806,40808],{"class":151,"line":18637},[149,40807,16464],{"class":325},[149,40809,32915],{"class":155},[149,40811,40812],{"class":151,"line":18642},[149,40813,4119],{"emptyLinePlaceholder":1800},[149,40815,40816],{"class":151,"line":34339},[149,40817,40818],{"class":295},"# 验证模型\n",[149,40820,40821,40823,40825,40827,40830],{"class":151,"line":34345},[149,40822,3255],{"class":325},[149,40824,32926],{"class":309},[149,40826,4667],{"class":325},[149,40828,40829],{"class":169},"'__main__'",[149,40831,5457],{"class":155},[149,40833,40834,40836,40838,40840,40842,40844,40846,40848,40850],{"class":151,"line":34351},[149,40835,32943],{"class":155},[149,40837,166],{"class":325},[149,40839,32157],{"class":155},[149,40841,32950],{"class":169},[149,40843,3424],{"class":325},[149,40845,32955],{"class":155},[149,40847,3421],{"class":325},[149,40849,32182],{"class":169},[149,40851,1878],{"class":155},[149,40853,40854,40856],{"class":151,"line":34357},[149,40855,33005],{"class":309},[149,40857,32191],{"class":155},[149,40859,40860,40862,40864],{"class":151,"line":34363},[149,40861,32995],{"class":155},[149,40863,166],{"class":325},[149,40865,40866],{"class":155},"VGG16().to(device)\n",[149,40868,40869,40871,40873,40875,40877,40879,40881,40883],{"class":151,"line":34374},[149,40870,33005],{"class":309},[149,40872,33008],{"class":155},[149,40874,830],{"class":309},[149,40876,2241],{"class":155},[149,40878,33207],{"class":309},[149,40880,2241],{"class":155},[149,40882,33207],{"class":309},[149,40884,33021],{"class":155},[125,40886,40887],{"start":193},[45,40888,40889],{},"训练代码",[24,40891,40892],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[24,40894,40895],{},"解决方式:",[24,40897,40898],{},"①权重初始化",[140,40900,40902],{"className":32084,"code":40901,"language":32086,"meta":145,"style":145},"# 权重初始化,保证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",[48,40903,40904,40909,40914,40926,40931,40939,40944,40957,40962,40976,40981,40990,40995,41004,41009,41014,41027,41032,41046],{"__ignoreMap":145},[149,40905,40906],{"class":151,"line":152},[149,40907,40908],{"class":295},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[149,40910,40911],{"class":151,"line":193},[149,40912,40913],{"class":295},"# 循环遍历模型\n",[149,40915,40916,40918,40920,40922,40924],{"class":151,"line":235},[149,40917,4743],{"class":325},[149,40919,40574],{"class":155},[149,40921,27752],{"class":325},[149,40923,40579],{"class":309},[149,40925,40582],{"class":155},[149,40927,40928],{"class":151,"line":340},[149,40929,40930],{"class":295},"    # print(m)\n",[149,40932,40933,40935,40937],{"class":151,"line":346},[149,40934,4819],{"class":325},[149,40936,40594],{"class":309},[149,40938,40597],{"class":155},[149,40940,40941],{"class":151,"line":352},[149,40942,40943],{"class":295},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[149,40945,40946,40949,40951,40953,40955],{"class":151,"line":1021},[149,40947,40948],{"class":155},"        nn.init.kaiming_normal_(m.weight,",[149,40950,40610],{"class":6932},[149,40952,166],{"class":325},[149,40954,40615],{"class":169},[149,40956,1878],{"class":155},[149,40958,40959],{"class":151,"line":1035},[149,40960,40961],{"class":295},"        # 判断b参数是否存在\n",[149,40963,40964,40966,40968,40970,40972,40974],{"class":151,"line":1054},[149,40965,4216],{"class":325},[149,40967,40630],{"class":155},[149,40969,40633],{"class":325},[149,40971,40636],{"class":325},[149,40973,40639],{"class":309},[149,40975,5457],{"class":155},[149,40977,40978],{"class":151,"line":1072},[149,40979,40980],{"class":295},"            # 如果参数不存在的化初始化b=0\n",[149,40982,40983,40986,40988],{"class":151,"line":1090},[149,40984,40985],{"class":155},"            nn.init.constant_(m.bias,",[149,40987,2056],{"class":309},[149,40989,1878],{"class":155},[149,40991,40992],{"class":151,"line":1633},[149,40993,40994],{"class":295},"    # 全连接层初始化\n",[149,40996,40997,41000,41002],{"class":151,"line":1644},[149,40998,40999],{"class":325},"    elif",[149,41001,40594],{"class":309},[149,41003,40670],{"class":155},[149,41005,41006],{"class":151,"line":3348},[149,41007,41008],{"class":295},"        # 这个初始化方法是利用的是正太分布的方式\n",[149,41010,41011],{"class":151,"line":3362},[149,41012,41013],{"class":295},"        # 均值为0，方差为0.01\n",[149,41015,41016,41019,41021,41023,41025],{"class":151,"line":3367},[149,41017,41018],{"class":155},"        nn.init.normal_(m.weight,",[149,41020,2056],{"class":309},[149,41022,2241],{"class":155},[149,41024,40692],{"class":309},[149,41026,1878],{"class":155},[149,41028,41029],{"class":151,"line":3373},[149,41030,41031],{"class":295},"        # 初始化b参数\n",[149,41033,41034,41036,41038,41040,41042,41044],{"class":151,"line":3394},[149,41035,4216],{"class":325},[149,41037,40630],{"class":155},[149,41039,40633],{"class":325},[149,41041,40636],{"class":325},[149,41043,40639],{"class":309},[149,41045,5457],{"class":155},[149,41047,41048,41050,41052],{"class":151,"line":3399},[149,41049,40985],{"class":155},[149,41051,2056],{"class":309},[149,41053,1878],{"class":155},[24,41055,41056],{},"②尽可能地增加批次",[24,41058,41059],{},"训练完整代码：",[140,41061,41062],{"className":32084,"code":39605,"language":32086,"meta":145,"style":145},[48,41063,41064,41070,41080,41090,41100,41104,41120,41128,41146,41150,41154,41164,41200,41204,41240,41244,41272,41276,41280,41290,41326,41330,41366,41370,41398,41402,41406,41416,41452,41456,41492,41496,41532,41536,41564,41568,41572,41582,41618,41622,41658,41662,41698,41702,41730,41734,41738,41748,41784,41788,41824,41828,41864,41868,41896,41900,41904,41914,41918,41922,41926,41946,41950,41962,41966,41978,41982,41986,41990,41994,42006,42010,42018,42022,42034,42038,42052,42056,42064,42068,42076,42080,42084,42096,42100,42114,42122,42126,42130,42138,42148,42158,42168,42178,42188,42198,42204,42208,42212,42224,42244,42250,42258],{"__ignoreMap":145},[149,41065,41066,41068],{"class":151,"line":152},[149,41067,32098],{"class":325},[149,41069,32101],{"class":155},[149,41071,41072,41074,41076,41078],{"class":151,"line":193},[149,41073,32443],{"class":325},[149,41075,39620],{"class":155},[149,41077,32098],{"class":325},[149,41079,39625],{"class":155},[149,41081,41082,41084,41086,41088],{"class":151,"line":235},[149,41083,32443],{"class":325},[149,41085,32446],{"class":155},[149,41087,32098],{"class":325},[149,41089,32451],{"class":155},[149,41091,41092,41094,41096,41098],{"class":151,"line":340},[149,41093,32443],{"class":325},[149,41095,32463],{"class":155},[149,41097,32098],{"class":325},[149,41099,32468],{"class":155},[149,41101,41102],{"class":151,"line":346},[149,41103,4119],{"emptyLinePlaceholder":1800},[149,41105,41106,41108,41110,41112,41114,41116,41118],{"class":151,"line":352},[149,41107,913],{"class":325},[149,41109,39656],{"class":162},[149,41111,319],{"class":155},[149,41113,32484],{"class":162},[149,41115,2421],{"class":155},[149,41117,32489],{"class":162},[149,41119,32492],{"class":155},[149,41121,41122,41124,41126],{"class":151,"line":1021},[149,41123,32507],{"class":325},[149,41125,32510],{"class":309},[149,41127,32513],{"class":155},[149,41129,41130,41132,41134,41136,41138,41140,41142,41144],{"class":151,"line":1035},[149,41131,32523],{"class":309},[149,41133,319],{"class":155},[149,41135,39683],{"class":309},[149,41137,329],{"class":155},[149,41139,32529],{"class":309},[149,41141,32532],{"class":155},[149,41143,32535],{"class":309},[149,41145,3695],{"class":155},[149,41147,41148],{"class":151,"line":1054},[149,41149,39698],{"class":295},[149,41151,41152],{"class":151,"line":1072},[149,41153,39703],{"class":295},[149,41155,41156,41158,41160,41162],{"class":151,"line":1090},[149,41157,32551],{"class":309},[149,41159,39710],{"class":155},[149,41161,166],{"class":325},[149,41163,39715],{"class":155},[149,41165,41166,41168,41170,41172,41174,41176,41178,41180,41182,41184,41186,41188,41190,41192,41194,41196,41198],{"class":151,"line":1633},[149,41167,39720],{"class":155},[149,41169,32562],{"class":6932},[149,41171,166],{"class":325},[149,41173,830],{"class":309},[149,41175,2241],{"class":155},[149,41177,32571],{"class":6932},[149,41179,166],{"class":325},[149,41181,2068],{"class":309},[149,41183,2241],{"class":155},[149,41185,32580],{"class":6932},[149,41187,166],{"class":325},[149,41189,1939],{"class":309},[149,41191,2241],{"class":155},[149,41193,32589],{"class":6932},[149,41195,166],{"class":325},[149,41197,830],{"class":309},[149,41199,39753],{"class":155},[149,41201,41202],{"class":151,"line":1644},[149,41203,39758],{"class":155},[149,41205,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224,41226,41228,41230,41232,41234,41236,41238],{"class":151,"line":3348},[149,41207,39720],{"class":155},[149,41209,32562],{"class":6932},[149,41211,166],{"class":325},[149,41213,2068],{"class":309},[149,41215,2241],{"class":155},[149,41217,32571],{"class":6932},[149,41219,166],{"class":325},[149,41221,2068],{"class":309},[149,41223,2241],{"class":155},[149,41225,32580],{"class":6932},[149,41227,166],{"class":325},[149,41229,1939],{"class":309},[149,41231,2241],{"class":155},[149,41233,32589],{"class":6932},[149,41235,166],{"class":325},[149,41237,830],{"class":309},[149,41239,39753],{"class":155},[149,41241,41242],{"class":151,"line":3362},[149,41243,39758],{"class":155},[149,41245,41246,41248,41250,41252,41254,41256,41258,41260,41262,41264,41266,41268,41270],{"class":151,"line":3367},[149,41247,39803],{"class":155},[149,41249,32580],{"class":6932},[149,41251,166],{"class":325},[149,41253,1045],{"class":309},[149,41255,2241],{"class":155},[149,41257,32635],{"class":6932},[149,41259,166],{"class":325},[149,41261,1045],{"class":309},[149,41263,2241],{"class":155},[149,41265,32589],{"class":6932},[149,41267,166],{"class":325},[149,41269,2056],{"class":309},[149,41271,1878],{"class":155},[149,41273,41274],{"class":151,"line":3373},[149,41275,39832],{"class":155},[149,41277,41278],{"class":151,"line":3394},[149,41279,39837],{"class":295},[149,41281,41282,41284,41286,41288],{"class":151,"line":3399},[149,41283,32551],{"class":309},[149,41285,39844],{"class":155},[149,41287,166],{"class":325},[149,41289,39715],{"class":155},[149,41291,41292,41294,41296,41298,41300,41302,41304,41306,41308,41310,41312,41314,41316,41318,41320,41322,41324],{"class":151,"line":3413},[149,41293,39720],{"class":155},[149,41295,32562],{"class":6932},[149,41297,166],{"class":325},[149,41299,2068],{"class":309},[149,41301,2241],{"class":155},[149,41303,32571],{"class":6932},[149,41305,166],{"class":325},[149,41307,33776],{"class":309},[149,41309,2241],{"class":155},[149,41311,32580],{"class":6932},[149,41313,166],{"class":325},[149,41315,1939],{"class":309},[149,41317,2241],{"class":155},[149,41319,32589],{"class":6932},[149,41321,166],{"class":325},[149,41323,830],{"class":309},[149,41325,39753],{"class":155},[149,41327,41328],{"class":151,"line":3418},[149,41329,39758],{"class":155},[149,41331,41332,41334,41336,41338,41340,41342,41344,41346,41348,41350,41352,41354,41356,41358,41360,41362,41364],{"class":151,"line":3447},[149,41333,39720],{"class":155},[149,41335,32562],{"class":6932},[149,41337,166],{"class":325},[149,41339,33776],{"class":309},[149,41341,2241],{"class":155},[149,41343,32571],{"class":6932},[149,41345,166],{"class":325},[149,41347,33776],{"class":309},[149,41349,2241],{"class":155},[149,41351,32580],{"class":6932},[149,41353,166],{"class":325},[149,41355,1939],{"class":309},[149,41357,2241],{"class":155},[149,41359,32589],{"class":6932},[149,41361,166],{"class":325},[149,41363,830],{"class":309},[149,41365,39753],{"class":155},[149,41367,41368],{"class":151,"line":3452},[149,41369,39758],{"class":155},[149,41371,41372,41374,41376,41378,41380,41382,41384,41386,41388,41390,41392,41394,41396],{"class":151,"line":3469},[149,41373,39803],{"class":155},[149,41375,32580],{"class":6932},[149,41377,166],{"class":325},[149,41379,1045],{"class":309},[149,41381,2241],{"class":155},[149,41383,32635],{"class":6932},[149,41385,166],{"class":325},[149,41387,1045],{"class":309},[149,41389,2241],{"class":155},[149,41391,32589],{"class":6932},[149,41393,166],{"class":325},[149,41395,2056],{"class":309},[149,41397,1878],{"class":155},[149,41399,41400],{"class":151,"line":3474},[149,41401,39832],{"class":155},[149,41403,41404],{"class":151,"line":3479},[149,41405,39965],{"class":295},[149,41407,41408,41410,41412,41414],{"class":151,"line":3484},[149,41409,32551],{"class":309},[149,41411,39972],{"class":155},[149,41413,166],{"class":325},[149,41415,39715],{"class":155},[149,41417,41418,41420,41422,41424,41426,41428,41430,41432,41434,41436,41438,41440,41442,41444,41446,41448,41450],{"class":151,"line":3498},[149,41419,39720],{"class":155},[149,41421,32562],{"class":6932},[149,41423,166],{"class":325},[149,41425,33776],{"class":309},[149,41427,2241],{"class":155},[149,41429,32571],{"class":6932},[149,41431,166],{"class":325},[149,41433,36576],{"class":309},[149,41435,2241],{"class":155},[149,41437,32580],{"class":6932},[149,41439,166],{"class":325},[149,41441,1939],{"class":309},[149,41443,2241],{"class":155},[149,41445,32589],{"class":6932},[149,41447,166],{"class":325},[149,41449,830],{"class":309},[149,41451,39753],{"class":155},[149,41453,41454],{"class":151,"line":3503},[149,41455,39758],{"class":155},[149,41457,41458,41460,41462,41464,41466,41468,41470,41472,41474,41476,41478,41480,41482,41484,41486,41488,41490],{"class":151,"line":4296},[149,41459,39720],{"class":155},[149,41461,32562],{"class":6932},[149,41463,166],{"class":325},[149,41465,36576],{"class":309},[149,41467,2241],{"class":155},[149,41469,32571],{"class":6932},[149,41471,166],{"class":325},[149,41473,36576],{"class":309},[149,41475,2241],{"class":155},[149,41477,32580],{"class":6932},[149,41479,166],{"class":325},[149,41481,1939],{"class":309},[149,41483,2241],{"class":155},[149,41485,32589],{"class":6932},[149,41487,166],{"class":325},[149,41489,830],{"class":309},[149,41491,39753],{"class":155},[149,41493,41494],{"class":151,"line":4310},[149,41495,39758],{"class":155},[149,41497,41498,41500,41502,41504,41506,41508,41510,41512,41514,41516,41518,41520,41522,41524,41526,41528,41530],{"class":151,"line":4318},[149,41499,39720],{"class":155},[149,41501,32562],{"class":6932},[149,41503,166],{"class":325},[149,41505,36576],{"class":309},[149,41507,2241],{"class":155},[149,41509,32571],{"class":6932},[149,41511,166],{"class":325},[149,41513,36576],{"class":309},[149,41515,2241],{"class":155},[149,41517,32580],{"class":6932},[149,41519,166],{"class":325},[149,41521,1939],{"class":309},[149,41523,2241],{"class":155},[149,41525,32589],{"class":6932},[149,41527,166],{"class":325},[149,41529,830],{"class":309},[149,41531,39753],{"class":155},[149,41533,41534],{"class":151,"line":4323},[149,41535,39758],{"class":155},[149,41537,41538,41540,41542,41544,41546,41548,41550,41552,41554,41556,41558,41560,41562],{"class":151,"line":4329},[149,41539,39803],{"class":155},[149,41541,32580],{"class":6932},[149,41543,166],{"class":325},[149,41545,1045],{"class":309},[149,41547,2241],{"class":155},[149,41549,32635],{"class":6932},[149,41551,166],{"class":325},[149,41553,1045],{"class":309},[149,41555,2241],{"class":155},[149,41557,32589],{"class":6932},[149,41559,166],{"class":325},[149,41561,2056],{"class":309},[149,41563,1878],{"class":155},[149,41565,41566],{"class":151,"line":4335},[149,41567,39832],{"class":155},[149,41569,41570],{"class":151,"line":4340},[149,41571,40133],{"class":295},[149,41573,41574,41576,41578,41580],{"class":151,"line":9663},[149,41575,32551],{"class":309},[149,41577,40140],{"class":155},[149,41579,166],{"class":325},[149,41581,39715],{"class":155},[149,41583,41584,41586,41588,41590,41592,41594,41596,41598,41600,41602,41604,41606,41608,41610,41612,41614,41616],{"class":151,"line":9687},[149,41585,39720],{"class":155},[149,41587,32562],{"class":6932},[149,41589,166],{"class":325},[149,41591,36576],{"class":309},[149,41593,2241],{"class":155},[149,41595,32571],{"class":6932},[149,41597,166],{"class":325},[149,41599,40163],{"class":309},[149,41601,2241],{"class":155},[149,41603,32580],{"class":6932},[149,41605,166],{"class":325},[149,41607,1939],{"class":309},[149,41609,2241],{"class":155},[149,41611,32589],{"class":6932},[149,41613,166],{"class":325},[149,41615,830],{"class":309},[149,41617,39753],{"class":155},[149,41619,41620],{"class":151,"line":9692},[149,41621,39758],{"class":155},[149,41623,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656],{"class":151,"line":9698},[149,41625,39720],{"class":155},[149,41627,32562],{"class":6932},[149,41629,166],{"class":325},[149,41631,40163],{"class":309},[149,41633,2241],{"class":155},[149,41635,32571],{"class":6932},[149,41637,166],{"class":325},[149,41639,40163],{"class":309},[149,41641,2241],{"class":155},[149,41643,32580],{"class":6932},[149,41645,166],{"class":325},[149,41647,1939],{"class":309},[149,41649,2241],{"class":155},[149,41651,32589],{"class":6932},[149,41653,166],{"class":325},[149,41655,830],{"class":309},[149,41657,39753],{"class":155},[149,41659,41660],{"class":151,"line":9725},[149,41661,39758],{"class":155},[149,41663,41664,41666,41668,41670,41672,41674,41676,41678,41680,41682,41684,41686,41688,41690,41692,41694,41696],{"class":151,"line":9730},[149,41665,39720],{"class":155},[149,41667,32562],{"class":6932},[149,41669,166],{"class":325},[149,41671,40163],{"class":309},[149,41673,2241],{"class":155},[149,41675,32571],{"class":6932},[149,41677,166],{"class":325},[149,41679,40163],{"class":309},[149,41681,2241],{"class":155},[149,41683,32580],{"class":6932},[149,41685,166],{"class":325},[149,41687,1939],{"class":309},[149,41689,2241],{"class":155},[149,41691,32589],{"class":6932},[149,41693,166],{"class":325},[149,41695,830],{"class":309},[149,41697,39753],{"class":155},[149,41699,41700],{"class":151,"line":9736},[149,41701,39758],{"class":155},[149,41703,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728],{"class":151,"line":9748},[149,41705,39803],{"class":155},[149,41707,32580],{"class":6932},[149,41709,166],{"class":325},[149,41711,1045],{"class":309},[149,41713,2241],{"class":155},[149,41715,32635],{"class":6932},[149,41717,166],{"class":325},[149,41719,1045],{"class":309},[149,41721,2241],{"class":155},[149,41723,32589],{"class":6932},[149,41725,166],{"class":325},[149,41727,2056],{"class":309},[149,41729,1878],{"class":155},[149,41731,41732],{"class":151,"line":9760},[149,41733,39832],{"class":155},[149,41735,41736],{"class":151,"line":9772},[149,41737,40302],{"class":295},[149,41739,41740,41742,41744,41746],{"class":151,"line":11430},[149,41741,32551],{"class":309},[149,41743,40309],{"class":155},[149,41745,166],{"class":325},[149,41747,39715],{"class":155},[149,41749,41750,41752,41754,41756,41758,41760,41762,41764,41766,41768,41770,41772,41774,41776,41778,41780,41782],{"class":151,"line":11455},[149,41751,39720],{"class":155},[149,41753,32562],{"class":6932},[149,41755,166],{"class":325},[149,41757,40163],{"class":309},[149,41759,2241],{"class":155},[149,41761,32571],{"class":6932},[149,41763,166],{"class":325},[149,41765,40163],{"class":309},[149,41767,2241],{"class":155},[149,41769,32580],{"class":6932},[149,41771,166],{"class":325},[149,41773,1939],{"class":309},[149,41775,2241],{"class":155},[149,41777,32589],{"class":6932},[149,41779,166],{"class":325},[149,41781,830],{"class":309},[149,41783,39753],{"class":155},[149,41785,41786],{"class":151,"line":11478},[149,41787,39758],{"class":155},[149,41789,41790,41792,41794,41796,41798,41800,41802,41804,41806,41808,41810,41812,41814,41816,41818,41820,41822],{"class":151,"line":11502},[149,41791,39720],{"class":155},[149,41793,32562],{"class":6932},[149,41795,166],{"class":325},[149,41797,40163],{"class":309},[149,41799,2241],{"class":155},[149,41801,32571],{"class":6932},[149,41803,166],{"class":325},[149,41805,40163],{"class":309},[149,41807,2241],{"class":155},[149,41809,32580],{"class":6932},[149,41811,166],{"class":325},[149,41813,1939],{"class":309},[149,41815,2241],{"class":155},[149,41817,32589],{"class":6932},[149,41819,166],{"class":325},[149,41821,830],{"class":309},[149,41823,39753],{"class":155},[149,41825,41826],{"class":151,"line":11507},[149,41827,39758],{"class":155},[149,41829,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856,41858,41860,41862],{"class":151,"line":11512},[149,41831,39720],{"class":155},[149,41833,32562],{"class":6932},[149,41835,166],{"class":325},[149,41837,40163],{"class":309},[149,41839,2241],{"class":155},[149,41841,32571],{"class":6932},[149,41843,166],{"class":325},[149,41845,40163],{"class":309},[149,41847,2241],{"class":155},[149,41849,32580],{"class":6932},[149,41851,166],{"class":325},[149,41853,1939],{"class":309},[149,41855,2241],{"class":155},[149,41857,32589],{"class":6932},[149,41859,166],{"class":325},[149,41861,830],{"class":309},[149,41863,39753],{"class":155},[149,41865,41866],{"class":151,"line":11517},[149,41867,39758],{"class":155},[149,41869,41870,41872,41874,41876,41878,41880,41882,41884,41886,41888,41890,41892,41894],{"class":151,"line":11526},[149,41871,39803],{"class":155},[149,41873,32580],{"class":6932},[149,41875,166],{"class":325},[149,41877,1045],{"class":309},[149,41879,2241],{"class":155},[149,41881,32635],{"class":6932},[149,41883,166],{"class":325},[149,41885,1045],{"class":309},[149,41887,2241],{"class":155},[149,41889,32589],{"class":6932},[149,41891,166],{"class":325},[149,41893,2056],{"class":309},[149,41895,1878],{"class":155},[149,41897,41898],{"class":151,"line":11531},[149,41899,39832],{"class":155},[149,41901,41902],{"class":151,"line":11537},[149,41903,40470],{"class":295},[149,41905,41906,41908,41910,41912],{"class":151,"line":11558},[149,41907,32551],{"class":309},[149,41909,40477],{"class":155},[149,41911,166],{"class":325},[149,41913,39715],{"class":155},[149,41915,41916],{"class":151,"line":11564},[149,41917,40486],{"class":295},[149,41919,41920],{"class":151,"line":11578},[149,41921,40491],{"class":295},[149,41923,41924],{"class":151,"line":11584},[149,41925,40496],{"class":155},[149,41927,41928,41930,41932,41934,41936,41938,41940,41942,41944],{"class":151,"line":11611},[149,41929,40501],{"class":155},[149,41931,2232],{"class":309},[149,41933,2318],{"class":325},[149,41935,2232],{"class":309},[149,41937,2318],{"class":325},[149,41939,40163],{"class":309},[149,41941,2241],{"class":155},[149,41943,36576],{"class":309},[149,41945,39753],{"class":155},[149,41947,41948],{"class":151,"line":11620},[149,41949,39758],{"class":155},[149,41951,41952,41954,41956,41958,41960],{"class":151,"line":11626},[149,41953,40501],{"class":155},[149,41955,36576],{"class":309},[149,41957,2241],{"class":155},[149,41959,33776],{"class":309},[149,41961,39753],{"class":155},[149,41963,41964],{"class":151,"line":11634},[149,41965,39758],{"class":155},[149,41967,41968,41970,41972,41974,41976],{"class":151,"line":11639},[149,41969,40501],{"class":155},[149,41971,33776],{"class":309},[149,41973,2241],{"class":155},[149,41975,2309],{"class":309},[149,41977,1878],{"class":155},[149,41979,41980],{"class":151,"line":18314},[149,41981,39832],{"class":155},[149,41983,41984],{"class":151,"line":18320},[149,41985,4119],{"emptyLinePlaceholder":1800},[149,41987,41988],{"class":151,"line":18343},[149,41989,40562],{"class":295},[149,41991,41992],{"class":151,"line":18349},[149,41993,40567],{"class":295},[149,41995,41996,41998,42000,42002,42004],{"class":151,"line":18372},[149,41997,5121],{"class":325},[149,41999,40574],{"class":155},[149,42001,27752],{"class":325},[149,42003,40579],{"class":309},[149,42005,40582],{"class":155},[149,42007,42008],{"class":151,"line":18386},[149,42009,40587],{"class":295},[149,42011,42012,42014,42016],{"class":151,"line":18406},[149,42013,6360],{"class":325},[149,42015,40594],{"class":309},[149,42017,40597],{"class":155},[149,42019,42020],{"class":151,"line":18412},[149,42021,40602],{"class":295},[149,42023,42024,42026,42028,42030,42032],{"class":151,"line":18423},[149,42025,40607],{"class":155},[149,42027,40610],{"class":6932},[149,42029,166],{"class":325},[149,42031,40615],{"class":169},[149,42033,1878],{"class":155},[149,42035,42036],{"class":151,"line":18446},[149,42037,40622],{"class":295},[149,42039,42040,42042,42044,42046,42048,42050],{"class":151,"line":18468},[149,42041,40627],{"class":325},[149,42043,40630],{"class":155},[149,42045,40633],{"class":325},[149,42047,40636],{"class":325},[149,42049,40639],{"class":309},[149,42051,5457],{"class":155},[149,42053,42054],{"class":151,"line":18473},[149,42055,40646],{"class":295},[149,42057,42058,42060,42062],{"class":151,"line":18479},[149,42059,40651],{"class":155},[149,42061,2056],{"class":309},[149,42063,1878],{"class":155},[149,42065,42066],{"class":151,"line":18493},[149,42067,40660],{"class":295},[149,42069,42070,42072,42074],{"class":151,"line":18506},[149,42071,40665],{"class":325},[149,42073,40594],{"class":309},[149,42075,40670],{"class":155},[149,42077,42078],{"class":151,"line":18511},[149,42079,40675],{"class":295},[149,42081,42082],{"class":151,"line":18525},[149,42083,40680],{"class":295},[149,42085,42086,42088,42090,42092,42094],{"class":151,"line":18530},[149,42087,40685],{"class":155},[149,42089,2056],{"class":309},[149,42091,2241],{"class":155},[149,42093,40692],{"class":309},[149,42095,1878],{"class":155},[149,42097,42098],{"class":151,"line":18536},[149,42099,40699],{"class":295},[149,42101,42102,42104,42106,42108,42110,42112],{"class":151,"line":18541},[149,42103,40627],{"class":325},[149,42105,40630],{"class":155},[149,42107,40633],{"class":325},[149,42109,40636],{"class":325},[149,42111,40639],{"class":309},[149,42113,5457],{"class":155},[149,42115,42116,42118,42120],{"class":151,"line":18555},[149,42117,40651],{"class":155},[149,42119,2056],{"class":309},[149,42121,1878],{"class":155},[149,42123,42124],{"class":151,"line":18560},[149,42125,4119],{"emptyLinePlaceholder":1800},[149,42127,42128],{"class":151,"line":18565},[149,42129,36871],{"class":295},[149,42131,42132,42134,42136],{"class":151,"line":18579},[149,42133,32507],{"class":325},[149,42135,32799],{"class":162},[149,42137,32802],{"class":155},[149,42139,42140,42142,42144,42146],{"class":151,"line":18591},[149,42141,32807],{"class":155},[149,42143,166],{"class":325},[149,42145,32529],{"class":309},[149,42147,40748],{"class":155},[149,42149,42150,42152,42154,42156],{"class":151,"line":18596},[149,42151,32807],{"class":155},[149,42153,166],{"class":325},[149,42155,32529],{"class":309},[149,42157,40759],{"class":155},[149,42159,42160,42162,42164,42166],{"class":151,"line":18609},[149,42161,32807],{"class":155},[149,42163,166],{"class":325},[149,42165,32529],{"class":309},[149,42167,40770],{"class":155},[149,42169,42170,42172,42174,42176],{"class":151,"line":18614},[149,42171,32807],{"class":155},[149,42173,166],{"class":325},[149,42175,32529],{"class":309},[149,42177,40781],{"class":155},[149,42179,42180,42182,42184,42186],{"class":151,"line":18619},[149,42181,32807],{"class":155},[149,42183,166],{"class":325},[149,42185,32529],{"class":309},[149,42187,40792],{"class":155},[149,42189,42190,42192,42194,42196],{"class":151,"line":18624},[149,42191,32807],{"class":155},[149,42193,166],{"class":325},[149,42195,32529],{"class":309},[149,42197,40803],{"class":155},[149,42199,42200,42202],{"class":151,"line":18637},[149,42201,16464],{"class":325},[149,42203,32915],{"class":155},[149,42205,42206],{"class":151,"line":18642},[149,42207,4119],{"emptyLinePlaceholder":1800},[149,42209,42210],{"class":151,"line":34339},[149,42211,40818],{"class":295},[149,42213,42214,42216,42218,42220,42222],{"class":151,"line":34345},[149,42215,3255],{"class":325},[149,42217,32926],{"class":309},[149,42219,4667],{"class":325},[149,42221,40829],{"class":169},[149,42223,5457],{"class":155},[149,42225,42226,42228,42230,42232,42234,42236,42238,42240,42242],{"class":151,"line":34351},[149,42227,32943],{"class":155},[149,42229,166],{"class":325},[149,42231,32157],{"class":155},[149,42233,32950],{"class":169},[149,42235,3424],{"class":325},[149,42237,32955],{"class":155},[149,42239,3421],{"class":325},[149,42241,32182],{"class":169},[149,42243,1878],{"class":155},[149,42245,42246,42248],{"class":151,"line":34357},[149,42247,33005],{"class":309},[149,42249,32191],{"class":155},[149,42251,42252,42254,42256],{"class":151,"line":34363},[149,42253,32995],{"class":155},[149,42255,166],{"class":325},[149,42257,40866],{"class":155},[149,42259,42260,42262,42264,42266,42268,42270,42272,42274],{"class":151,"line":34374},[149,42261,33005],{"class":309},[149,42263,33008],{"class":155},[149,42265,830],{"class":309},[149,42267,2241],{"class":155},[149,42269,33207],{"class":309},[149,42271,2241],{"class":155},[149,42273,33207],{"class":309},[149,42275,33021],{"class":155},[125,42277,42278],{"start":235},[45,42279,42280],{},"测试代码",[140,42282,42284],{"className":32084,"code":42283,"language":32086,"meta":145,"style":145},"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",[48,42285,42286,42292,42302,42312,42316,42326,42337,42341,42345,42349,42357,42373,42383,42399,42409,42423,42427,42437,42447,42457,42463,42467,42471,42479,42483,42499,42507,42511,42515,42523,42531,42535,42539,42543,42547,42553,42557,42567,42575,42583,42587,42591,42595,42603,42607,42623,42627,42631,42635,42647,42651,42663,42667,42671,42683,42687,42697,42701,42705,42717,42721,42730,42734,42738,42746,42750,42758,42762,42766,42770,42774,42778,42794,42802,42806,42810,42858,42864,42868,42878,42886,42894,42898,42902,42906,42910,42918,42922,42938,42942,42950,42958],{"__ignoreMap":145},[149,42287,42288,42290],{"class":151,"line":152},[149,42289,32098],{"class":325},[149,42291,32101],{"class":155},[149,42293,42294,42296,42298,42300],{"class":151,"line":193},[149,42295,32098],{"class":325},[149,42297,33121],{"class":155},[149,42299,33089],{"class":325},[149,42301,33126],{"class":155},[149,42303,42304,42306,42308,42310],{"class":151,"line":235},[149,42305,32443],{"class":325},[149,42307,33104],{"class":155},[149,42309,32098],{"class":325},[149,42311,33109],{"class":155},[149,42313,42314],{"class":151,"line":340},[149,42315,35628],{"class":295},[149,42317,42318,42320,42322,42324],{"class":151,"line":346},[149,42319,32443],{"class":325},[149,42321,33074],{"class":155},[149,42323,32098],{"class":325},[149,42325,33079],{"class":155},[149,42327,42328,42330,42332,42334],{"class":151,"line":352},[149,42329,32443],{"class":325},[149,42331,33620],{"class":155},[149,42333,32098],{"class":325},[149,42335,42336],{"class":309}," VGG16\n",[149,42338,42339],{"class":151,"line":1021},[149,42340,4119],{"emptyLinePlaceholder":1800},[149,42342,42343],{"class":151,"line":1035},[149,42344,4119],{"emptyLinePlaceholder":1800},[149,42346,42347],{"class":151,"line":1054},[149,42348,35657],{"class":295},[149,42350,42351,42353,42355],{"class":151,"line":1072},[149,42352,33653],{"class":325},[149,42354,35664],{"class":162},[149,42356,33659],{"class":155},[149,42358,42359,42361,42363,42365,42367,42369,42371],{"class":151,"line":1090},[149,42360,35671],{"class":155},[149,42362,166],{"class":325},[149,42364,33161],{"class":155},[149,42366,33164],{"class":6932},[149,42368,166],{"class":325},[149,42370,33169],{"class":169},[149,42372,33172],{"class":155},[149,42374,42375,42377,42379,42381],{"class":151,"line":1633},[149,42376,35688],{"class":6932},[149,42378,166],{"class":325},[149,42380,35693],{"class":309},[149,42382,33172],{"class":155},[149,42384,42385,42387,42389,42391,42393,42395,42397],{"class":151,"line":1644},[149,42386,35700],{"class":6932},[149,42388,166],{"class":325},[149,42390,33199],{"class":155},[149,42392,33202],{"class":6932},[149,42394,166],{"class":325},[149,42396,33207],{"class":309},[149,42398,33210],{"class":155},[149,42400,42401,42403,42405,42407],{"class":151,"line":3348},[149,42402,35717],{"class":6932},[149,42404,166],{"class":325},[149,42406,33182],{"class":309},[149,42408,1878],{"class":155},[149,42410,42411,42413,42415,42417,42419,42421],{"class":151,"line":3362},[149,42412,35728],{"class":155},[149,42414,166],{"class":325},[149,42416,33240],{"class":155},[149,42418,33243],{"class":6932},[149,42420,166],{"class":325},[149,42422,35739],{"class":155},[149,42424,42425],{"class":151,"line":3367},[149,42426,35744],{"class":295},[149,42428,42429,42431,42433,42435],{"class":151,"line":3373},[149,42430,35749],{"class":6932},[149,42432,166],{"class":325},[149,42434,830],{"class":309},[149,42436,33172],{"class":155},[149,42438,42439,42441,42443,42445],{"class":151,"line":3394},[149,42440,35760],{"class":6932},[149,42442,166],{"class":325},[149,42444,33182],{"class":309},[149,42446,33172],{"class":155},[149,42448,42449,42451,42453,42455],{"class":151,"line":3399},[149,42450,35771],{"class":6932},[149,42452,166],{"class":325},[149,42454,2056],{"class":309},[149,42456,1878],{"class":155},[149,42458,42459,42461],{"class":151,"line":3413},[149,42460,5808],{"class":325},[149,42462,35784],{"class":155},[149,42464,42465],{"class":151,"line":3418},[149,42466,4119],{"emptyLinePlaceholder":1800},[149,42468,42469],{"class":151,"line":3447},[149,42470,35793],{"class":295},[149,42472,42473,42475,42477],{"class":151,"line":3452},[149,42474,33653],{"class":325},[149,42476,35800],{"class":162},[149,42478,35803],{"class":155},[149,42480,42481],{"class":151,"line":3469},[149,42482,35808],{"class":295},[149,42484,42485,42487,42489,42491,42493,42495,42497],{"class":151,"line":3474},[149,42486,32943],{"class":155},[149,42488,166],{"class":325},[149,42490,32950],{"class":169},[149,42492,3424],{"class":325},[149,42494,32955],{"class":155},[149,42496,3421],{"class":325},[149,42498,35825],{"class":169},[149,42500,42501,42503,42505],{"class":151,"line":3479},[149,42502,32995],{"class":155},[149,42504,166],{"class":325},[149,42506,33995],{"class":155},[149,42508,42509],{"class":151,"line":3484},[149,42510,4119],{"emptyLinePlaceholder":1800},[149,42512,42513],{"class":151,"line":3498},[149,42514,35842],{"class":295},[149,42516,42517,42519,42521],{"class":151,"line":3503},[149,42518,35847],{"class":155},[149,42520,166],{"class":325},[149,42522,34048],{"class":309},[149,42524,42525,42527,42529],{"class":151,"line":4296},[149,42526,35856],{"class":155},[149,42528,166],{"class":325},[149,42530,4803],{"class":309},[149,42532,42533],{"class":151,"line":4310},[149,42534,4119],{"emptyLinePlaceholder":1800},[149,42536,42537],{"class":151,"line":4318},[149,42538,35869],{"class":295},[149,42540,42541],{"class":151,"line":4323},[149,42542,35874],{"class":295},[149,42544,42545],{"class":151,"line":4329},[149,42546,35879],{"class":295},[149,42548,42549,42551],{"class":151,"line":4335},[149,42550,35884],{"class":325},[149,42552,34590],{"class":155},[149,42554,42555],{"class":151,"line":4340},[149,42556,35891],{"class":295},[149,42558,42559,42561,42563,42565],{"class":151,"line":9663},[149,42560,5121],{"class":325},[149,42562,35898],{"class":155},[149,42564,27752],{"class":325},[149,42566,35903],{"class":155},[149,42568,42569,42571,42573],{"class":151,"line":9687},[149,42570,35908],{"class":155},[149,42572,166],{"class":325},[149,42574,35913],{"class":155},[149,42576,42577,42579,42581],{"class":151,"line":9692},[149,42578,35918],{"class":155},[149,42580,166],{"class":325},[149,42582,35923],{"class":155},[149,42584,42585],{"class":151,"line":9698},[149,42586,35928],{"class":295},[149,42588,42589],{"class":151,"line":9725},[149,42590,34581],{"class":155},[149,42592,42593],{"class":151,"line":9730},[149,42594,35937],{"class":295},[149,42596,42597,42599,42601],{"class":151,"line":9736},[149,42598,34366],{"class":155},[149,42600,166],{"class":325},[149,42602,35946],{"class":155},[149,42604,42605],{"class":151,"line":9748},[149,42606,35951],{"class":295},[149,42608,42609,42611,42613,42615,42617,42619,42621],{"class":151,"line":9760},[149,42610,34383],{"class":155},[149,42612,166],{"class":325},[149,42614,34388],{"class":155},[149,42616,34391],{"class":6932},[149,42618,166],{"class":325},[149,42620,830],{"class":309},[149,42622,1878],{"class":155},[149,42624,42625],{"class":151,"line":9772},[149,42626,35972],{"class":295},[149,42628,42629],{"class":151,"line":11430},[149,42630,35977],{"class":295},[149,42632,42633],{"class":151,"line":11455},[149,42634,35982],{"class":295},[149,42636,42637,42639,42641,42643,42645],{"class":151,"line":11478},[149,42638,35987],{"class":155},[149,42640,11191],{"class":325},[149,42642,34493],{"class":155},[149,42644,4667],{"class":325},[149,42646,35996],{"class":155},[149,42648,42649],{"class":151,"line":11502},[149,42650,36001],{"class":295},[149,42652,42653,42655,42657,42659,42661],{"class":151,"line":11507},[149,42654,36006],{"class":155},[149,42656,11191],{"class":325},[149,42658,36011],{"class":155},[149,42660,2056],{"class":309},[149,42662,1878],{"class":155},[149,42664,42665],{"class":151,"line":11512},[149,42666,4119],{"emptyLinePlaceholder":1800},[149,42668,42669],{"class":151,"line":11517},[149,42670,36024],{"class":295},[149,42672,42673,42675,42677,42679,42681],{"class":151,"line":11526},[149,42674,36029],{"class":155},[149,42676,166],{"class":325},[149,42678,36034],{"class":155},[149,42680,2447],{"class":325},[149,42682,36039],{"class":155},[149,42684,42685],{"class":151,"line":11531},[149,42686,36044],{"class":295},[149,42688,42689,42691,42693,42695],{"class":151,"line":11537},[149,42690,34157],{"class":309},[149,42692,319],{"class":155},[149,42694,36053],{"class":169},[149,42696,36056],{"class":155},[149,42698,42699],{"class":151,"line":11558},[149,42700,4119],{"emptyLinePlaceholder":1800},[149,42702,42703],{"class":151,"line":11564},[149,42704,36065],{"class":295},[149,42706,42707,42709,42711,42713,42715],{"class":151,"line":11578},[149,42708,3255],{"class":325},[149,42710,32926],{"class":309},[149,42712,4667],{"class":325},[149,42714,32931],{"class":169},[149,42716,5457],{"class":155},[149,42718,42719],{"class":151,"line":11584},[149,42720,36082],{"class":295},[149,42722,42723,42725,42727],{"class":151,"line":11611},[149,42724,32995],{"class":155},[149,42726,166],{"class":325},[149,42728,42729],{"class":155},"VGG16()\n",[149,42731,42732],{"class":151,"line":11620},[149,42733,36095],{"class":295},[149,42735,42736],{"class":151,"line":11626},[149,42737,36100],{"class":295},[149,42739,42740,42742,42744],{"class":151,"line":11634},[149,42741,36105],{"class":155},[149,42743,36108],{"class":169},[149,42745,32203],{"class":155},[149,42747,42748],{"class":151,"line":11639},[149,42749,36115],{"class":295},[149,42751,42752,42754,42756],{"class":151,"line":18314},[149,42753,35728],{"class":155},[149,42755,166],{"class":325},[149,42757,36124],{"class":155},[149,42759,42760],{"class":151,"line":18320},[149,42761,36129],{"class":295},[149,42763,42764],{"class":151,"line":18343},[149,42765,36134],{"class":155},[149,42767,42768],{"class":151,"line":18349},[149,42769,4119],{"emptyLinePlaceholder":1800},[149,42771,42772],{"class":151,"line":18372},[149,42773,36143],{"class":295},[149,42775,42776],{"class":151,"line":18386},[149,42777,36148],{"class":295},[149,42779,42780,42782,42784,42786,42788,42790,42792],{"class":151,"line":18406},[149,42781,32943],{"class":155},[149,42783,166],{"class":325},[149,42785,32950],{"class":169},[149,42787,3424],{"class":325},[149,42789,32955],{"class":155},[149,42791,3421],{"class":325},[149,42793,35825],{"class":169},[149,42795,42796,42798,42800],{"class":151,"line":18412},[149,42797,32995],{"class":155},[149,42799,166],{"class":325},[149,42801,33995],{"class":155},[149,42803,42804],{"class":151,"line":18423},[149,42805,36177],{"class":295},[149,42807,42808],{"class":151,"line":18446},[149,42809,36182],{"class":295},[149,42811,42812,42814,42816,42818,42820,42822,42824,42826,42828,42830,42832,42834,42836,42838,42840,42842,42844,42846,42848,42850,42852,42854,42856],{"class":151,"line":18468},[149,42813,36187],{"class":155},[149,42815,166],{"class":325},[149,42817,810],{"class":155},[149,42819,36194],{"class":169},[149,42821,2241],{"class":155},[149,42823,36199],{"class":169},[149,42825,2241],{"class":155},[149,42827,36204],{"class":169},[149,42829,2241],{"class":155},[149,42831,36209],{"class":169},[149,42833,2241],{"class":155},[149,42835,36214],{"class":169},[149,42837,2241],{"class":155},[149,42839,36219],{"class":169},[149,42841,2241],{"class":155},[149,42843,36224],{"class":169},[149,42845,2241],{"class":155},[149,42847,36229],{"class":169},[149,42849,2241],{"class":155},[149,42851,36234],{"class":169},[149,42853,2241],{"class":155},[149,42855,36239],{"class":169},[149,42857,34952],{"class":155},[149,42859,42860,42862],{"class":151,"line":18473},[149,42861,35884],{"class":325},[149,42863,34590],{"class":155},[149,42865,42866],{"class":151,"line":18479},[149,42867,36252],{"class":295},[149,42869,42870,42872,42874,42876],{"class":151,"line":18493},[149,42871,5121],{"class":325},[149,42873,36259],{"class":155},[149,42875,27752],{"class":325},[149,42877,35903],{"class":155},[149,42879,42880,42882,42884],{"class":151,"line":18506},[149,42881,34316],{"class":155},[149,42883,166],{"class":325},[149,42885,34321],{"class":155},[149,42887,42888,42890,42892],{"class":151,"line":18511},[149,42889,34331],{"class":155},[149,42891,166],{"class":325},[149,42893,34336],{"class":155},[149,42895,42896],{"class":151,"line":18525},[149,42897,4119],{"emptyLinePlaceholder":1800},[149,42899,42900],{"class":151,"line":18530},[149,42901,36288],{"class":295},[149,42903,42904],{"class":151,"line":18536},[149,42905,34581],{"class":155},[149,42907,42908],{"class":151,"line":18541},[149,42909,36297],{"class":295},[149,42911,42912,42914,42916],{"class":151,"line":18555},[149,42913,34366],{"class":155},[149,42915,166],{"class":325},[149,42917,34371],{"class":155},[149,42919,42920],{"class":151,"line":18560},[149,42921,36310],{"class":295},[149,42923,42924,42926,42928,42930,42932,42934,42936],{"class":151,"line":18565},[149,42925,34383],{"class":155},[149,42927,166],{"class":325},[149,42929,34388],{"class":155},[149,42931,34391],{"class":6932},[149,42933,166],{"class":325},[149,42935,830],{"class":309},[149,42937,1878],{"class":155},[149,42939,42940],{"class":151,"line":18579},[149,42941,36331],{"class":295},[149,42943,42944,42946,42948],{"class":151,"line":18591},[149,42945,36336],{"class":155},[149,42947,166],{"class":325},[149,42949,36341],{"class":155},[149,42951,42952,42954,42956],{"class":151,"line":18596},[149,42953,36346],{"class":155},[149,42955,166],{"class":325},[149,42957,36351],{"class":155},[149,42959,42960,42962,42964,42966,42968,42970,42972,42974],{"class":151,"line":18609},[149,42961,36356],{"class":309},[149,42963,319],{"class":155},[149,42965,36361],{"class":169},[149,42967,36364],{"class":155},[149,42969,36367],{"class":169},[149,42971,2241],{"class":155},[149,42973,36372],{"class":169},[149,42975,36375],{"class":155},[19,42977,42979],{"id":42978},"_23googlenet","2.3.GoogLeNet",[120,42981,42983],{"id":42982},"_231原理","2.3.1.原理",[125,42985,42986],{},[45,42987,42988],{},"网络结构",[24,42990,42991],{},[83,42992],{"alt":145,"src":42993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[24,42995,42996],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[24,42998,42999],{},[83,43000],{"alt":145,"src":43001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[24,43003,43004],{},[83,43005],{"alt":145,"src":43006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[24,43008,43009],{},[83,43010],{"alt":145,"src":43011},"\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",[125,43013,43014],{"start":193},[45,43015,43016],{},"1x1卷积的优点",[24,43018,43019],{},[83,43020],{"alt":145,"src":43021},"\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",[125,43023,43024],{"start":235},[45,43025,43026],{},"全局平均池化层优点",[24,43028,43029],{},[83,43030],{"alt":145,"src":43031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[24,43033,43034],{},[83,43035],{"alt":145,"src":43036},"\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",[125,43038,43039],{"start":340},[45,43040,43041],{},"参数详细描述",[24,43043,43044],{},[83,43045],{"alt":145,"src":43046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[24,43048,43049],{},[83,43050],{"alt":145,"src":43051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[24,43053,43054],{},[83,43055],{"alt":145,"src":43056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[24,43058,43059],{},[83,43060],{"alt":145,"src":43061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[24,43063,43064],{},[83,43065],{"alt":145,"src":43066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[24,43068,43069],{},[83,43070],{"alt":145,"src":43071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[24,43073,43074],{},[83,43075],{"alt":145,"src":43076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[24,43078,43079],{},[83,43080],{"alt":145,"src":43081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[24,43083,43084],{},[83,43085],{"alt":145,"src":43086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[24,43088,43089],{},[83,43090],{"alt":145,"src":43091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[24,43093,43094],{},[83,43095],{"alt":145,"src":43096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[24,43098,43099],{},[83,43100],{"alt":145,"src":43101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[24,43103,43104],{},[83,43105],{"alt":145,"src":43106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[24,43108,43109],{},[83,43110],{"alt":145,"src":43111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[24,43113,43114],{},[83,43115],{"alt":145,"src":43116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[24,43118,43119],{},[83,43120],{"alt":145,"src":43121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[24,43123,43124],{},[83,43125],{"alt":145,"src":43126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[24,43128,43129],{},[83,43130],{"alt":145,"src":43131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[24,43133,43134],{},[83,43135],{"alt":145,"src":43136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[24,43138,43139],{},[83,43140],{"alt":145,"src":43141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[24,43143,43144],{},[83,43145],{"alt":145,"src":43146},"\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",[120,43148,43150],{"id":43149},"_232代码实现","2.3.2.代码实现",[125,43152,43153],{},[45,43154,32417],{},[24,43156,43157],{},"根据原理一步一步搭建即可",[140,43159,43161],{"className":32084,"code":43160,"language":32086,"meta":145,"style":145},"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",[48,43162,43163,43169,43179,43189,43193,43210,43219,43234,43244,43249,43282,43287,43324,43371,43376,43412,43459,43464,43469,43504,43536,43540,43548,43564,43588,43613,43634,43639,43654,43658,43662,43667,43684,43689,43698,43713,43724,43768,43772,43800,43804,43815,43843,43847,43884,43888,43916,43920,43931,43967,43999,44027,44031,44042,44076,44108,44140,44173,44207,44235,44239,44250,44283,44315,44329,44333,44346,44350,44355,44367,44375,44397,44402,44407,44412,44417,44422,44427,44441,44449,44458,44471,44486,44495,44499,44507,44518,44529,44540,44551,44562,44568,44572,44577,44589,44609,44618],{"__ignoreMap":145},[149,43164,43165,43167],{"class":151,"line":152},[149,43166,32098],{"class":325},[149,43168,32101],{"class":155},[149,43170,43171,43173,43175,43177],{"class":151,"line":193},[149,43172,32443],{"class":325},[149,43174,32446],{"class":155},[149,43176,32098],{"class":325},[149,43178,32451],{"class":155},[149,43180,43181,43183,43185,43187],{"class":151,"line":235},[149,43182,32443],{"class":325},[149,43184,32463],{"class":155},[149,43186,32098],{"class":325},[149,43188,32468],{"class":155},[149,43190,43191],{"class":151,"line":340},[149,43192,4119],{"emptyLinePlaceholder":1800},[149,43194,43195,43197,43200,43202,43204,43206,43208],{"class":151,"line":346},[149,43196,913],{"class":325},[149,43198,43199],{"class":162}," Inception",[149,43201,319],{"class":155},[149,43203,32484],{"class":162},[149,43205,2421],{"class":155},[149,43207,32489],{"class":162},[149,43209,32492],{"class":155},[149,43211,43212,43214,43216],{"class":151,"line":352},[149,43213,32507],{"class":325},[149,43215,32510],{"class":309},[149,43217,43218],{"class":155},"(self,in_channels,c1,c2,c3,c4):\n",[149,43220,43221,43223,43226,43228,43230,43232],{"class":151,"line":1021},[149,43222,32523],{"class":309},[149,43224,43225],{"class":155},"(Inception,",[149,43227,32529],{"class":309},[149,43229,32532],{"class":155},[149,43231,32535],{"class":309},[149,43233,3695],{"class":155},[149,43235,43236,43238,43240,43242],{"class":151,"line":1035},[149,43237,32551],{"class":309},[149,43239,36477],{"class":155},[149,43241,166],{"class":325},[149,43243,36482],{"class":155},[149,43245,43246],{"class":151,"line":1054},[149,43247,43248],{"class":295},"        # 路线1：定义1*1卷积\n",[149,43250,43251,43253,43256,43258,43260,43262,43264,43267,43269,43271,43274,43276,43278,43280],{"class":151,"line":1072},[149,43252,32551],{"class":309},[149,43254,43255],{"class":155},".p1_1",[149,43257,166],{"class":325},[149,43259,32559],{"class":155},[149,43261,32562],{"class":6932},[149,43263,166],{"class":325},[149,43265,43266],{"class":155},"in_channels,",[149,43268,32571],{"class":6932},[149,43270,166],{"class":325},[149,43272,43273],{"class":155},"c1,",[149,43275,32580],{"class":6932},[149,43277,166],{"class":325},[149,43279,830],{"class":309},[149,43281,1878],{"class":155},[149,43283,43284],{"class":151,"line":1090},[149,43285,43286],{"class":295},"        # 路线2：定义1*1卷积和3*3\n",[149,43288,43289,43291,43294,43296,43298,43300,43302,43304,43306,43308,43311,43313,43316,43318,43320,43322],{"class":151,"line":1633},[149,43290,32551],{"class":309},[149,43292,43293],{"class":155},".p2_1",[149,43295,166],{"class":325},[149,43297,32559],{"class":155},[149,43299,32562],{"class":6932},[149,43301,166],{"class":325},[149,43303,43266],{"class":155},[149,43305,32571],{"class":6932},[149,43307,166],{"class":325},[149,43309,43310],{"class":155},"c2[",[149,43312,2056],{"class":309},[149,43314,43315],{"class":155},"],",[149,43317,32580],{"class":6932},[149,43319,166],{"class":325},[149,43321,830],{"class":309},[149,43323,1878],{"class":155},[149,43325,43326,43328,43331,43333,43335,43337,43339,43341,43343,43345,43347,43349,43351,43353,43355,43357,43359,43361,43363,43365,43367,43369],{"class":151,"line":1644},[149,43327,32551],{"class":309},[149,43329,43330],{"class":155},".p2_2",[149,43332,166],{"class":325},[149,43334,32559],{"class":155},[149,43336,32562],{"class":6932},[149,43338,166],{"class":325},[149,43340,43310],{"class":155},[149,43342,2056],{"class":309},[149,43344,43315],{"class":155},[149,43346,32571],{"class":6932},[149,43348,166],{"class":325},[149,43350,43310],{"class":155},[149,43352,830],{"class":309},[149,43354,43315],{"class":155},[149,43356,32580],{"class":6932},[149,43358,166],{"class":325},[149,43360,1939],{"class":309},[149,43362,2241],{"class":155},[149,43364,32589],{"class":6932},[149,43366,166],{"class":325},[149,43368,830],{"class":309},[149,43370,1878],{"class":155},[149,43372,43373],{"class":151,"line":3348},[149,43374,43375],{"class":295},"        # 路线3：定义1*1卷积和5*5\n",[149,43377,43378,43380,43383,43385,43387,43389,43391,43393,43395,43397,43400,43402,43404,43406,43408,43410],{"class":151,"line":3362},[149,43379,32551],{"class":309},[149,43381,43382],{"class":155},".p3_1",[149,43384,166],{"class":325},[149,43386,32559],{"class":155},[149,43388,32562],{"class":6932},[149,43390,166],{"class":325},[149,43392,43266],{"class":155},[149,43394,32571],{"class":6932},[149,43396,166],{"class":325},[149,43398,43399],{"class":155},"c3[",[149,43401,2056],{"class":309},[149,43403,43315],{"class":155},[149,43405,32580],{"class":6932},[149,43407,166],{"class":325},[149,43409,830],{"class":309},[149,43411,1878],{"class":155},[149,43413,43414,43416,43419,43421,43423,43425,43427,43429,43431,43433,43435,43437,43439,43441,43443,43445,43447,43449,43451,43453,43455,43457],{"class":151,"line":3367},[149,43415,32551],{"class":309},[149,43417,43418],{"class":155},".p3_2",[149,43420,166],{"class":325},[149,43422,32559],{"class":155},[149,43424,32562],{"class":6932},[149,43426,166],{"class":325},[149,43428,43399],{"class":155},[149,43430,2056],{"class":309},[149,43432,43315],{"class":155},[149,43434,32571],{"class":6932},[149,43436,166],{"class":325},[149,43438,43399],{"class":155},[149,43440,830],{"class":309},[149,43442,43315],{"class":155},[149,43444,32580],{"class":6932},[149,43446,166],{"class":325},[149,43448,2182],{"class":309},[149,43450,2241],{"class":155},[149,43452,32589],{"class":6932},[149,43454,166],{"class":325},[149,43456,1045],{"class":309},[149,43458,1878],{"class":155},[149,43460,43461],{"class":151,"line":3373},[149,43462,43463],{"class":295},"        # 路线4：定义3*3最大池化和1*1卷积\n",[149,43465,43466],{"class":151,"line":3394},[149,43467,43468],{"class":295},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[149,43470,43471,43473,43476,43478,43480,43482,43484,43486,43488,43490,43492,43494,43496,43498,43500,43502],{"class":151,"line":3399},[149,43472,32551],{"class":309},[149,43474,43475],{"class":155},".p4_1",[149,43477,166],{"class":325},[149,43479,36535],{"class":155},[149,43481,32580],{"class":6932},[149,43483,166],{"class":325},[149,43485,1939],{"class":309},[149,43487,2241],{"class":155},[149,43489,32635],{"class":6932},[149,43491,166],{"class":325},[149,43493,830],{"class":309},[149,43495,2241],{"class":155},[149,43497,32589],{"class":6932},[149,43499,166],{"class":325},[149,43501,830],{"class":309},[149,43503,1878],{"class":155},[149,43505,43506,43508,43511,43513,43515,43517,43519,43521,43523,43525,43528,43530,43532,43534],{"class":151,"line":3413},[149,43507,32551],{"class":309},[149,43509,43510],{"class":155},".p4_2",[149,43512,166],{"class":325},[149,43514,32559],{"class":155},[149,43516,32562],{"class":6932},[149,43518,166],{"class":325},[149,43520,43266],{"class":155},[149,43522,32571],{"class":6932},[149,43524,166],{"class":325},[149,43526,43527],{"class":155},"c4,",[149,43529,32580],{"class":6932},[149,43531,166],{"class":325},[149,43533,830],{"class":309},[149,43535,1878],{"class":155},[149,43537,43538],{"class":151,"line":3418},[149,43539,4119],{"emptyLinePlaceholder":1800},[149,43541,43542,43544,43546],{"class":151,"line":3447},[149,43543,32507],{"class":325},[149,43545,32799],{"class":162},[149,43547,32802],{"class":155},[149,43549,43550,43553,43555,43557,43559,43561],{"class":151,"line":3452},[149,43551,43552],{"class":155},"        p1",[149,43554,166],{"class":325},[149,43556,32529],{"class":309},[149,43558,36890],{"class":155},[149,43560,32529],{"class":309},[149,43562,43563],{"class":155},".p1_1(x))\n",[149,43565,43566,43568,43570,43572,43574,43576,43579,43581,43583,43585],{"class":151,"line":3469},[149,43567,8801],{"class":155},[149,43569,166],{"class":325},[149,43571,32529],{"class":309},[149,43573,36890],{"class":155},[149,43575,32529],{"class":309},[149,43577,43578],{"class":155},".p2_2(",[149,43580,32529],{"class":309},[149,43582,36890],{"class":155},[149,43584,32529],{"class":309},[149,43586,43587],{"class":155},".p2_1(x))))\n",[149,43589,43590,43593,43595,43597,43599,43601,43604,43606,43608,43610],{"class":151,"line":3474},[149,43591,43592],{"class":155},"        p3",[149,43594,166],{"class":325},[149,43596,32529],{"class":309},[149,43598,36890],{"class":155},[149,43600,32529],{"class":309},[149,43602,43603],{"class":155},".p3_2(",[149,43605,32529],{"class":309},[149,43607,36890],{"class":155},[149,43609,32529],{"class":309},[149,43611,43612],{"class":155},".p3_1(x))))\n",[149,43614,43615,43618,43620,43622,43624,43626,43629,43631],{"class":151,"line":3479},[149,43616,43617],{"class":155},"        p4",[149,43619,166],{"class":325},[149,43621,32529],{"class":309},[149,43623,36890],{"class":155},[149,43625,32529],{"class":309},[149,43627,43628],{"class":155},".p4_2(",[149,43630,32529],{"class":309},[149,43632,43633],{"class":155},".p4_1(x)))\n",[149,43635,43636],{"class":151,"line":3484},[149,43637,43638],{"class":295},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[149,43640,43641,43643,43646,43648,43650,43652],{"class":151,"line":3498},[149,43642,16464],{"class":325},[149,43644,43645],{"class":155}," torch.cat((p1,p2,p3,p4),",[149,43647,34391],{"class":6932},[149,43649,166],{"class":325},[149,43651,830],{"class":309},[149,43653,1878],{"class":155},[149,43655,43656],{"class":151,"line":3503},[149,43657,4119],{"emptyLinePlaceholder":1800},[149,43659,43660],{"class":151,"line":4296},[149,43661,4119],{"emptyLinePlaceholder":1800},[149,43663,43664],{"class":151,"line":4310},[149,43665,43666],{"class":295},"# 搭建GoogLeNet网络\n",[149,43668,43669,43671,43674,43676,43678,43680,43682],{"class":151,"line":4318},[149,43670,913],{"class":325},[149,43672,43673],{"class":162}," GoogLeNet",[149,43675,319],{"class":155},[149,43677,32484],{"class":162},[149,43679,2421],{"class":155},[149,43681,32489],{"class":162},[149,43683,32492],{"class":155},[149,43685,43686],{"class":151,"line":4323},[149,43687,43688],{"class":295},"    # 必须把Inception导入到里边\n",[149,43690,43691,43693,43695],{"class":151,"line":4329},[149,43692,32507],{"class":325},[149,43694,32510],{"class":309},[149,43696,43697],{"class":155},"(self,Inception):\n",[149,43699,43700,43702,43705,43707,43709,43711],{"class":151,"line":4335},[149,43701,32523],{"class":309},[149,43703,43704],{"class":155},"(GoogLeNet,",[149,43706,32529],{"class":309},[149,43708,32532],{"class":155},[149,43710,32535],{"class":309},[149,43712,3695],{"class":155},[149,43714,43715,43717,43720,43722],{"class":151,"line":4340},[149,43716,32551],{"class":309},[149,43718,43719],{"class":155},".b1",[149,43721,166],{"class":325},[149,43723,39715],{"class":155},[149,43725,43726,43728,43730,43732,43734,43736,43738,43740,43742,43744,43746,43748,43750,43752,43754,43756,43758,43760,43762,43764,43766],{"class":151,"line":9663},[149,43727,39720],{"class":155},[149,43729,32562],{"class":6932},[149,43731,166],{"class":325},[149,43733,830],{"class":309},[149,43735,2241],{"class":155},[149,43737,32571],{"class":6932},[149,43739,166],{"class":325},[149,43741,2068],{"class":309},[149,43743,2241],{"class":155},[149,43745,32580],{"class":6932},[149,43747,166],{"class":325},[149,43749,2232],{"class":309},[149,43751,2241],{"class":155},[149,43753,32635],{"class":6932},[149,43755,166],{"class":325},[149,43757,1045],{"class":309},[149,43759,2241],{"class":155},[149,43761,32589],{"class":6932},[149,43763,166],{"class":325},[149,43765,1939],{"class":309},[149,43767,39753],{"class":155},[149,43769,43770],{"class":151,"line":9687},[149,43771,39758],{"class":155},[149,43773,43774,43776,43778,43780,43782,43784,43786,43788,43790,43792,43794,43796,43798],{"class":151,"line":9692},[149,43775,39803],{"class":155},[149,43777,32580],{"class":6932},[149,43779,166],{"class":325},[149,43781,1939],{"class":309},[149,43783,2241],{"class":155},[149,43785,32635],{"class":6932},[149,43787,166],{"class":325},[149,43789,1045],{"class":309},[149,43791,2241],{"class":155},[149,43793,32589],{"class":6932},[149,43795,166],{"class":325},[149,43797,830],{"class":309},[149,43799,1878],{"class":155},[149,43801,43802],{"class":151,"line":9698},[149,43803,39832],{"class":155},[149,43805,43806,43808,43811,43813],{"class":151,"line":9725},[149,43807,32551],{"class":309},[149,43809,43810],{"class":155},".b2",[149,43812,166],{"class":325},[149,43814,39715],{"class":155},[149,43816,43817,43819,43821,43823,43825,43827,43829,43831,43833,43835,43837,43839,43841],{"class":151,"line":9730},[149,43818,39720],{"class":155},[149,43820,32562],{"class":6932},[149,43822,166],{"class":325},[149,43824,2068],{"class":309},[149,43826,2241],{"class":155},[149,43828,32571],{"class":6932},[149,43830,166],{"class":325},[149,43832,2068],{"class":309},[149,43834,2241],{"class":155},[149,43836,32580],{"class":6932},[149,43838,166],{"class":325},[149,43840,830],{"class":309},[149,43842,39753],{"class":155},[149,43844,43845],{"class":151,"line":9736},[149,43846,39758],{"class":155},[149,43848,43849,43851,43853,43855,43857,43859,43861,43863,43866,43868,43870,43872,43874,43876,43878,43880,43882],{"class":151,"line":9748},[149,43850,39720],{"class":155},[149,43852,32562],{"class":6932},[149,43854,166],{"class":325},[149,43856,2068],{"class":309},[149,43858,2241],{"class":155},[149,43860,32571],{"class":6932},[149,43862,166],{"class":325},[149,43864,43865],{"class":309},"192",[149,43867,2241],{"class":155},[149,43869,32580],{"class":6932},[149,43871,166],{"class":325},[149,43873,1939],{"class":309},[149,43875,2241],{"class":155},[149,43877,32589],{"class":6932},[149,43879,166],{"class":325},[149,43881,830],{"class":309},[149,43883,39753],{"class":155},[149,43885,43886],{"class":151,"line":9760},[149,43887,39758],{"class":155},[149,43889,43890,43892,43894,43896,43898,43900,43902,43904,43906,43908,43910,43912,43914],{"class":151,"line":9772},[149,43891,39803],{"class":155},[149,43893,32580],{"class":6932},[149,43895,166],{"class":325},[149,43897,1939],{"class":309},[149,43899,2241],{"class":155},[149,43901,32635],{"class":6932},[149,43903,166],{"class":325},[149,43905,1045],{"class":309},[149,43907,2241],{"class":155},[149,43909,32589],{"class":6932},[149,43911,166],{"class":325},[149,43913,830],{"class":309},[149,43915,1878],{"class":155},[149,43917,43918],{"class":151,"line":11430},[149,43919,39832],{"class":155},[149,43921,43922,43924,43927,43929],{"class":151,"line":11455},[149,43923,32551],{"class":309},[149,43925,43926],{"class":155},".b3",[149,43928,166],{"class":325},[149,43930,39715],{"class":155},[149,43932,43933,43936,43938,43940,43942,43945,43947,43949,43951,43954,43956,43958,43960,43963,43965],{"class":151,"line":11478},[149,43934,43935],{"class":155},"            Inception(",[149,43937,43865],{"class":309},[149,43939,2241],{"class":155},[149,43941,2068],{"class":309},[149,43943,43944],{"class":155},",(",[149,43946,2074],{"class":309},[149,43948,2241],{"class":155},[149,43950,33776],{"class":309},[149,43952,43953],{"class":155},"),(",[149,43955,2464],{"class":309},[149,43957,2241],{"class":155},[149,43959,2062],{"class":309},[149,43961,43962],{"class":155},"),",[149,43964,2062],{"class":309},[149,43966,39753],{"class":155},[149,43968,43969,43971,43973,43975,43977,43979,43981,43983,43985,43987,43989,43991,43993,43995,43997],{"class":151,"line":11502},[149,43970,43935],{"class":155},[149,43972,36576],{"class":309},[149,43974,2241],{"class":155},[149,43976,33776],{"class":309},[149,43978,43944],{"class":155},[149,43980,33776],{"class":309},[149,43982,2241],{"class":155},[149,43984,43865],{"class":309},[149,43986,43953],{"class":155},[149,43988,2062],{"class":309},[149,43990,2241],{"class":155},[149,43992,2074],{"class":309},[149,43994,43962],{"class":155},[149,43996,2068],{"class":309},[149,43998,39753],{"class":155},[149,44000,44001,44003,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023,44025],{"class":151,"line":11507},[149,44002,39803],{"class":155},[149,44004,32580],{"class":6932},[149,44006,166],{"class":325},[149,44008,1939],{"class":309},[149,44010,2241],{"class":155},[149,44012,32635],{"class":6932},[149,44014,166],{"class":325},[149,44016,1045],{"class":309},[149,44018,2241],{"class":155},[149,44020,32589],{"class":6932},[149,44022,166],{"class":325},[149,44024,830],{"class":309},[149,44026,1878],{"class":155},[149,44028,44029],{"class":151,"line":11512},[149,44030,39832],{"class":155},[149,44032,44033,44035,44038,44040],{"class":151,"line":11517},[149,44034,32551],{"class":309},[149,44036,44037],{"class":155},".b4",[149,44039,166],{"class":325},[149,44041,39715],{"class":155},[149,44043,44044,44046,44049,44051,44053,44055,44057,44059,44062,44064,44066,44068,44070,44072,44074],{"class":151,"line":11526},[149,44045,43935],{"class":155},[149,44047,44048],{"class":309},"480",[149,44050,2241],{"class":155},[149,44052,43865],{"class":309},[149,44054,43944],{"class":155},[149,44056,2074],{"class":309},[149,44058,2241],{"class":155},[149,44060,44061],{"class":309},"208",[149,44063,43953],{"class":155},[149,44065,2464],{"class":309},[149,44067,2241],{"class":155},[149,44069,2470],{"class":309},[149,44071,43962],{"class":155},[149,44073,2068],{"class":309},[149,44075,39753],{"class":155},[149,44077,44078,44080,44082,44084,44086,44088,44090,44092,44094,44096,44098,44100,44102,44104,44106],{"class":151,"line":11531},[149,44079,43935],{"class":155},[149,44081,40163],{"class":309},[149,44083,2241],{"class":155},[149,44085,22758],{"class":309},[149,44087,43944],{"class":155},[149,44089,2481],{"class":309},[149,44091,2241],{"class":155},[149,44093,33207],{"class":309},[149,44095,43953],{"class":155},[149,44097,2661],{"class":309},[149,44099,2241],{"class":155},[149,44101,2068],{"class":309},[149,44103,43962],{"class":155},[149,44105,2068],{"class":309},[149,44107,39753],{"class":155},[149,44109,44110,44112,44114,44116,44118,44120,44122,44124,44126,44128,44130,44132,44134,44136,44138],{"class":151,"line":11537},[149,44111,43935],{"class":155},[149,44113,40163],{"class":309},[149,44115,2241],{"class":155},[149,44117,33776],{"class":309},[149,44119,43944],{"class":155},[149,44121,33776],{"class":309},[149,44123,2241],{"class":155},[149,44125,36576],{"class":309},[149,44127,43953],{"class":155},[149,44129,2661],{"class":309},[149,44131,2241],{"class":155},[149,44133,2068],{"class":309},[149,44135,43962],{"class":155},[149,44137,2068],{"class":309},[149,44139,39753],{"class":155},[149,44141,44142,44144,44146,44148,44150,44152,44154,44156,44159,44161,44163,44165,44167,44169,44171],{"class":151,"line":11558},[149,44143,43935],{"class":155},[149,44145,40163],{"class":309},[149,44147,2241],{"class":155},[149,44149,2481],{"class":309},[149,44151,43944],{"class":155},[149,44153,33776],{"class":309},[149,44155,2241],{"class":155},[149,44157,44158],{"class":309},"288",[149,44160,43953],{"class":155},[149,44162,2062],{"class":309},[149,44164,2241],{"class":155},[149,44166,2068],{"class":309},[149,44168,43962],{"class":155},[149,44170,2068],{"class":309},[149,44172,39753],{"class":155},[149,44174,44175,44177,44180,44182,44184,44186,44188,44190,44193,44195,44197,44199,44201,44203,44205],{"class":151,"line":11564},[149,44176,43935],{"class":155},[149,44178,44179],{"class":309},"528",[149,44181,2241],{"class":155},[149,44183,36576],{"class":309},[149,44185,43944],{"class":155},[149,44187,22758],{"class":309},[149,44189,2241],{"class":155},[149,44191,44192],{"class":309},"320",[149,44194,43953],{"class":155},[149,44196,2062],{"class":309},[149,44198,2241],{"class":155},[149,44200,33776],{"class":309},[149,44202,43962],{"class":155},[149,44204,33776],{"class":309},[149,44206,39753],{"class":155},[149,44208,44209,44211,44213,44215,44217,44219,44221,44223,44225,44227,44229,44231,44233],{"class":151,"line":11578},[149,44210,39803],{"class":155},[149,44212,32580],{"class":6932},[149,44214,166],{"class":325},[149,44216,1939],{"class":309},[149,44218,2241],{"class":155},[149,44220,32635],{"class":6932},[149,44222,166],{"class":325},[149,44224,1045],{"class":309},[149,44226,2241],{"class":155},[149,44228,32589],{"class":6932},[149,44230,166],{"class":325},[149,44232,830],{"class":309},[149,44234,1878],{"class":155},[149,44236,44237],{"class":151,"line":11584},[149,44238,39832],{"class":155},[149,44240,44241,44243,44246,44248],{"class":151,"line":11611},[149,44242,32551],{"class":309},[149,44244,44245],{"class":155},".b5",[149,44247,166],{"class":325},[149,44249,39715],{"class":155},[149,44251,44252,44254,44257,44259,44261,44263,44265,44267,44269,44271,44273,44275,44277,44279,44281],{"class":151,"line":11620},[149,44253,43935],{"class":155},[149,44255,44256],{"class":309},"832",[149,44258,2241],{"class":155},[149,44260,36576],{"class":309},[149,44262,43944],{"class":155},[149,44264,22758],{"class":309},[149,44266,2241],{"class":155},[149,44268,44192],{"class":309},[149,44270,43953],{"class":155},[149,44272,2062],{"class":309},[149,44274,2241],{"class":155},[149,44276,33776],{"class":309},[149,44278,43962],{"class":155},[149,44280,33776],{"class":309},[149,44282,39753],{"class":155},[149,44284,44285,44287,44289,44291,44293,44295,44297,44299,44301,44303,44305,44307,44309,44311,44313],{"class":151,"line":11626},[149,44286,43935],{"class":155},[149,44288,44256],{"class":309},[149,44290,2241],{"class":155},[149,44292,36646],{"class":309},[149,44294,43944],{"class":155},[149,44296,43865],{"class":309},[149,44298,2241],{"class":155},[149,44300,36646],{"class":309},[149,44302,43953],{"class":155},[149,44304,2470],{"class":309},[149,44306,2241],{"class":155},[149,44308,33776],{"class":309},[149,44310,43962],{"class":155},[149,44312,33776],{"class":309},[149,44314,39753],{"class":155},[149,44316,44317,44320,44322,44324,44326],{"class":151,"line":11634},[149,44318,44319],{"class":155},"            nn.AdaptiveAvgPool2d((",[149,44321,830],{"class":309},[149,44323,2241],{"class":155},[149,44325,830],{"class":309},[149,44327,44328],{"class":155},")),\n",[149,44330,44331],{"class":151,"line":11639},[149,44332,40496],{"class":155},[149,44334,44335,44337,44340,44342,44344],{"class":151,"line":18314},[149,44336,40501],{"class":155},[149,44338,44339],{"class":309},"1024",[149,44341,2241],{"class":155},[149,44343,2309],{"class":309},[149,44345,1878],{"class":155},[149,44347,44348],{"class":151,"line":18320},[149,44349,39832],{"class":155},[149,44351,44352],{"class":151,"line":18343},[149,44353,44354],{"class":295},"        # 对模型参数初始化\n",[149,44356,44357,44359,44361,44363,44365],{"class":151,"line":18349},[149,44358,5121],{"class":325},[149,44360,40574],{"class":155},[149,44362,27752],{"class":325},[149,44364,40579],{"class":309},[149,44366,40582],{"class":155},[149,44368,44369,44371,44373],{"class":151,"line":18372},[149,44370,6360],{"class":325},[149,44372,40594],{"class":309},[149,44374,40597],{"class":155},[149,44376,44377,44379,44382,44384,44387,44389,44391,44393,44395],{"class":151,"line":18386},[149,44378,40607],{"class":155},[149,44380,44381],{"class":6932},"mode",[149,44383,166],{"class":325},[149,44385,44386],{"class":169},"'fan_out'",[149,44388,2241],{"class":155},[149,44390,40610],{"class":6932},[149,44392,166],{"class":325},[149,44394,40615],{"class":169},[149,44396,1878],{"class":155},[149,44398,44399],{"class":151,"line":18406},[149,44400,44401],{"class":295},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[149,44403,44404],{"class":151,"line":18412},[149,44405,44406],{"class":295},"                # ② mode = 'fan_out'决定使用的fan值：\n",[149,44408,44409],{"class":151,"line":18423},[149,44410,44411],{"class":295},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[149,44413,44414],{"class":151,"line":18446},[149,44415,44416],{"class":295},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[149,44418,44419],{"class":151,"line":18468},[149,44420,44421],{"class":295},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[149,44423,44424],{"class":151,"line":18473},[149,44425,44426],{"class":295},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[149,44428,44429,44431,44433,44435,44437,44439],{"class":151,"line":18479},[149,44430,40627],{"class":325},[149,44432,40630],{"class":155},[149,44434,40633],{"class":325},[149,44436,40636],{"class":325},[149,44438,40639],{"class":309},[149,44440,5457],{"class":155},[149,44442,44443,44445,44447],{"class":151,"line":18493},[149,44444,40651],{"class":155},[149,44446,2056],{"class":309},[149,44448,1878],{"class":155},[149,44450,44451,44454,44456],{"class":151,"line":18506},[149,44452,44453],{"class":325},"                elif",[149,44455,40594],{"class":309},[149,44457,40670],{"class":155},[149,44459,44460,44463,44465,44467,44469],{"class":151,"line":18511},[149,44461,44462],{"class":155},"                    nn.init.normal_(m.weight,",[149,44464,2056],{"class":309},[149,44466,2241],{"class":155},[149,44468,40692],{"class":309},[149,44470,1878],{"class":155},[149,44472,44473,44476,44478,44480,44482,44484],{"class":151,"line":18525},[149,44474,44475],{"class":325},"                    if",[149,44477,40630],{"class":155},[149,44479,40633],{"class":325},[149,44481,40636],{"class":325},[149,44483,40639],{"class":309},[149,44485,5457],{"class":155},[149,44487,44488,44491,44493],{"class":151,"line":18530},[149,44489,44490],{"class":155},"                        nn.init.constant_(m.bias,",[149,44492,2056],{"class":309},[149,44494,1878],{"class":155},[149,44496,44497],{"class":151,"line":18536},[149,44498,36871],{"class":295},[149,44500,44501,44503,44505],{"class":151,"line":18541},[149,44502,32507],{"class":325},[149,44504,32799],{"class":162},[149,44506,32802],{"class":155},[149,44508,44509,44511,44513,44515],{"class":151,"line":18555},[149,44510,32807],{"class":155},[149,44512,166],{"class":325},[149,44514,32529],{"class":309},[149,44516,44517],{"class":155},".b1(x)\n",[149,44519,44520,44522,44524,44526],{"class":151,"line":18560},[149,44521,32807],{"class":155},[149,44523,166],{"class":325},[149,44525,32529],{"class":309},[149,44527,44528],{"class":155},".b2(x)\n",[149,44530,44531,44533,44535,44537],{"class":151,"line":18565},[149,44532,32807],{"class":155},[149,44534,166],{"class":325},[149,44536,32529],{"class":309},[149,44538,44539],{"class":155},".b3(x)\n",[149,44541,44542,44544,44546,44548],{"class":151,"line":18579},[149,44543,32807],{"class":155},[149,44545,166],{"class":325},[149,44547,32529],{"class":309},[149,44549,44550],{"class":155},".b4(x)\n",[149,44552,44553,44555,44557,44559],{"class":151,"line":18591},[149,44554,32807],{"class":155},[149,44556,166],{"class":325},[149,44558,32529],{"class":309},[149,44560,44561],{"class":155},".b5(x)\n",[149,44563,44564,44566],{"class":151,"line":18596},[149,44565,16464],{"class":325},[149,44567,32915],{"class":155},[149,44569,44570],{"class":151,"line":18609},[149,44571,4119],{"emptyLinePlaceholder":1800},[149,44573,44574],{"class":151,"line":18614},[149,44575,44576],{"class":295},"# 模型展示\n",[149,44578,44579,44581,44583,44585,44587],{"class":151,"line":18619},[149,44580,3255],{"class":325},[149,44582,32926],{"class":309},[149,44584,4667],{"class":325},[149,44586,32931],{"class":169},[149,44588,5457],{"class":155},[149,44590,44591,44593,44595,44597,44599,44601,44603,44605,44607],{"class":151,"line":18624},[149,44592,32943],{"class":155},[149,44594,166],{"class":325},[149,44596,32157],{"class":155},[149,44598,32950],{"class":169},[149,44600,3424],{"class":325},[149,44602,32955],{"class":155},[149,44604,3421],{"class":325},[149,44606,32182],{"class":169},[149,44608,1878],{"class":155},[149,44610,44611,44613,44615],{"class":151,"line":18637},[149,44612,32995],{"class":155},[149,44614,166],{"class":325},[149,44616,44617],{"class":155},"GoogLeNet(Inception).to(device)\n",[149,44619,44620,44622,44624,44626,44628,44630,44632,44634],{"class":151,"line":18642},[149,44621,33005],{"class":309},[149,44623,33008],{"class":155},[149,44625,830],{"class":309},[149,44627,2241],{"class":155},[149,44629,33207],{"class":309},[149,44631,2241],{"class":155},[149,44633,33207],{"class":309},[149,44635,33021],{"class":155},[125,44637,44638],{"start":193},[45,44639,40889],{},[140,44641,44643],{"className":32084,"code":44642,"language":32086,"meta":145,"style":145},"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",[48,44644,44645,44651,44657,44667,44673,44683,44693,44703,44713,44723,44727,44738,44748,44752,44756,44760,44768,44780,44790,44806,44816,44848,44862,44872,44882,44886,44896,44910,44920,44930,44940,44946,44950,44954,44958,44962,44966,44974,44994,44998,45002,45006,45010,45014,45030,45034,45038,45046,45050,45054,45062,45066,45070,45074,45082,45086,45090,45094,45098,45106,45110,45118,45122,45130,45134,45142,45146,45154,45158,45162,45170,45174,45178,45182,45194,45218,45232,45236,45240,45244,45252,45256,45264,45268,45276,45280,45288,45292,45300,45304,45312,45316,45328,45332,45340,45344,45352,45356,45360,45364,45368,45376,45380,45396,45400,45408,45412,45416,45420,45424,45428,45432,45436,45452,45456,45468,45472,45484,45488,45500,45504,45512,45516,45524,45528,45532,45536,45542,45546,45554,45558,45574,45578,45586,45590,45606,45618,45622,45634,45638,45642,45650,45654,45658,45666,45670,45678,45682,45690,45694,45698,45740,45782,45786,45790,45806,45810,45826,45830,45834,45842,45846,45850,45862,45900,45904,45908,45916,45920,45934,45944,45950,45956,45962,45968,45972,45976,45982,45986,45990,45998,46002,46020,46024,46028,46032,46048,46052,46056,46060,46064,46068,46088,46108,46112,46116,46120,46128,46136,46140,46156,46176,46196,46200,46204,46212,46220,46224,46228,46232,46244,46248,46258,46266,46283],{"__ignoreMap":145},[149,44646,44647,44649],{"class":151,"line":152},[149,44648,32098],{"class":325},[149,44650,33528],{"class":155},[149,44652,44653,44655],{"class":151,"line":193},[149,44654,32098],{"class":325},[149,44656,33535],{"class":155},[149,44658,44659,44661,44663,44665],{"class":151,"line":235},[149,44660,32098],{"class":325},[149,44662,33546],{"class":155},[149,44664,33089],{"class":325},[149,44666,33551],{"class":155},[149,44668,44669,44671],{"class":151,"line":340},[149,44670,32098],{"class":325},[149,44672,32101],{"class":155},[149,44674,44675,44677,44679,44681],{"class":151,"line":346},[149,44676,32443],{"class":325},[149,44678,33121],{"class":155},[149,44680,32098],{"class":325},[149,44682,33568],{"class":155},[149,44684,44685,44687,44689,44691],{"class":151,"line":352},[149,44686,32443],{"class":325},[149,44688,33074],{"class":155},[149,44690,32098],{"class":325},[149,44692,33079],{"class":155},[149,44694,44695,44697,44699,44701],{"class":151,"line":1021},[149,44696,32443],{"class":325},[149,44698,33104],{"class":155},[149,44700,32098],{"class":325},[149,44702,33109],{"class":155},[149,44704,44705,44707,44709,44711],{"class":151,"line":1035},[149,44706,32098],{"class":325},[149,44708,33121],{"class":155},[149,44710,33089],{"class":325},[149,44712,33126],{"class":155},[149,44714,44715,44717,44719,44721],{"class":151,"line":1054},[149,44716,32098],{"class":325},[149,44718,33138],{"class":155},[149,44720,33089],{"class":325},[149,44722,33143],{"class":155},[149,44724,44725],{"class":151,"line":1072},[149,44726,33613],{"class":295},[149,44728,44729,44731,44733,44735],{"class":151,"line":1090},[149,44730,32443],{"class":325},[149,44732,33620],{"class":155},[149,44734,32098],{"class":325},[149,44736,44737],{"class":155}," GoogLeNet, Inception\n",[149,44739,44740,44742,44744,44746],{"class":151,"line":1633},[149,44741,32443],{"class":325},[149,44743,32446],{"class":155},[149,44745,32098],{"class":325},[149,44747,32451],{"class":155},[149,44749,44750],{"class":151,"line":1644},[149,44751,4119],{"emptyLinePlaceholder":1800},[149,44753,44754],{"class":151,"line":3348},[149,44755,4119],{"emptyLinePlaceholder":1800},[149,44757,44758],{"class":151,"line":3362},[149,44759,33648],{"class":295},[149,44761,44762,44764,44766],{"class":151,"line":3367},[149,44763,33653],{"class":325},[149,44765,33656],{"class":162},[149,44767,33659],{"class":155},[149,44769,44770,44772,44774,44776,44778],{"class":151,"line":3373},[149,44771,33664],{"class":155},[149,44773,166],{"class":325},[149,44775,33161],{"class":155},[149,44777,33169],{"class":169},[149,44779,33172],{"class":155},[149,44781,44782,44784,44786,44788],{"class":151,"line":3394},[149,44783,33677],{"class":6932},[149,44785,166],{"class":325},[149,44787,33182],{"class":309},[149,44789,33172],{"class":155},[149,44791,44792,44794,44796,44798,44800,44802,44804],{"class":151,"line":3399},[149,44793,33688],{"class":6932},[149,44795,166],{"class":325},[149,44797,33199],{"class":155},[149,44799,33202],{"class":6932},[149,44801,166],{"class":325},[149,44803,37155],{"class":309},[149,44805,33210],{"class":155},[149,44807,44808,44810,44812,44814],{"class":151,"line":3413},[149,44809,33705],{"class":6932},[149,44811,166],{"class":325},[149,44813,33182],{"class":309},[149,44815,1878],{"class":155},[149,44817,44818,44820,44822,44824,44826,44828,44830,44832,44834,44836,44838,44840,44842,44844,44846],{"class":151,"line":3418},[149,44819,33716],{"class":155},[149,44821,166],{"class":325},[149,44823,33721],{"class":155},[149,44825,33724],{"class":309},[149,44827,319],{"class":155},[149,44829,33729],{"class":309},[149,44831,2318],{"class":325},[149,44833,9074],{"class":309},[149,44835,33736],{"class":155},[149,44837,33724],{"class":309},[149,44839,319],{"class":155},[149,44841,33743],{"class":309},[149,44843,2318],{"class":325},[149,44845,9074],{"class":309},[149,44847,33750],{"class":155},[149,44849,44850,44852,44854,44856,44858,44860],{"class":151,"line":3447},[149,44851,33755],{"class":155},[149,44853,166],{"class":325},[149,44855,33760],{"class":155},[149,44857,33243],{"class":6932},[149,44859,166],{"class":325},[149,44861,33248],{"class":155},[149,44863,44864,44866,44868,44870],{"class":151,"line":3452},[149,44865,33771],{"class":6932},[149,44867,166],{"class":325},[149,44869,2062],{"class":309},[149,44871,33172],{"class":155},[149,44873,44874,44876,44878,44880],{"class":151,"line":3469},[149,44875,33783],{"class":6932},[149,44877,166],{"class":325},[149,44879,33182],{"class":309},[149,44881,33172],{"class":155},[149,44883,44884],{"class":151,"line":3474},[149,44885,33794],{"class":295},[149,44887,44888,44890,44892,44894],{"class":151,"line":3479},[149,44889,33799],{"class":6932},[149,44891,166],{"class":325},[149,44893,2258],{"class":309},[149,44895,1878],{"class":155},[149,44897,44898,44900,44902,44904,44906,44908],{"class":151,"line":3484},[149,44899,33810],{"class":155},[149,44901,166],{"class":325},[149,44903,33240],{"class":155},[149,44905,33243],{"class":6932},[149,44907,166],{"class":325},[149,44909,33821],{"class":155},[149,44911,44912,44914,44916,44918],{"class":151,"line":3498},[149,44913,33826],{"class":6932},[149,44915,166],{"class":325},[149,44917,2062],{"class":309},[149,44919,33172],{"class":155},[149,44921,44922,44924,44926,44928],{"class":151,"line":3503},[149,44923,33837],{"class":6932},[149,44925,166],{"class":325},[149,44927,33182],{"class":309},[149,44929,33172],{"class":155},[149,44931,44932,44934,44936,44938],{"class":151,"line":4296},[149,44933,33848],{"class":6932},[149,44935,166],{"class":325},[149,44937,2258],{"class":309},[149,44939,1878],{"class":155},[149,44941,44942,44944],{"class":151,"line":4310},[149,44943,5808],{"class":325},[149,44945,33861],{"class":155},[149,44947,44948],{"class":151,"line":4318},[149,44949,4119],{"emptyLinePlaceholder":1800},[149,44951,44952],{"class":151,"line":4323},[149,44953,33870],{"class":295},[149,44955,44956],{"class":151,"line":4329},[149,44957,33875],{"class":295},[149,44959,44960],{"class":151,"line":4335},[149,44961,4119],{"emptyLinePlaceholder":1800},[149,44963,44964],{"class":151,"line":4340},[149,44965,33884],{"class":295},[149,44967,44968,44970,44972],{"class":151,"line":9663},[149,44969,33653],{"class":325},[149,44971,33891],{"class":162},[149,44973,33894],{"class":155},[149,44975,44976,44978,44980,44982,44984,44986,44988,44990,44992],{"class":151,"line":9687},[149,44977,32943],{"class":155},[149,44979,166],{"class":325},[149,44981,32157],{"class":155},[149,44983,32950],{"class":169},[149,44985,3424],{"class":325},[149,44987,32955],{"class":155},[149,44989,3421],{"class":325},[149,44991,33913],{"class":169},[149,44993,1878],{"class":155},[149,44995,44996],{"class":151,"line":9692},[149,44997,4119],{"emptyLinePlaceholder":1800},[149,44999,45000],{"class":151,"line":9698},[149,45001,4119],{"emptyLinePlaceholder":1800},[149,45003,45004],{"class":151,"line":9725},[149,45005,33928],{"class":295},[149,45007,45008],{"class":151,"line":9730},[149,45009,33933],{"class":295},[149,45011,45012],{"class":151,"line":9736},[149,45013,33938],{"class":295},[149,45015,45016,45018,45020,45022,45024,45026,45028],{"class":151,"line":9748},[149,45017,33943],{"class":155},[149,45019,166],{"class":325},[149,45021,33948],{"class":155},[149,45023,33951],{"class":6932},[149,45025,166],{"class":325},[149,45027,33956],{"class":309},[149,45029,1878],{"class":155},[149,45031,45032],{"class":151,"line":9760},[149,45033,4119],{"emptyLinePlaceholder":1800},[149,45035,45036],{"class":151,"line":9772},[149,45037,33967],{"class":295},[149,45039,45040,45042,45044],{"class":151,"line":11430},[149,45041,33972],{"class":155},[149,45043,166],{"class":325},[149,45045,33977],{"class":155},[149,45047,45048],{"class":151,"line":11455},[149,45049,4119],{"emptyLinePlaceholder":1800},[149,45051,45052],{"class":151,"line":11478},[149,45053,33986],{"class":295},[149,45055,45056,45058,45060],{"class":151,"line":11502},[149,45057,32995],{"class":155},[149,45059,166],{"class":325},[149,45061,33995],{"class":155},[149,45063,45064],{"class":151,"line":11507},[149,45065,34000],{"class":295},[149,45067,45068],{"class":151,"line":11512},[149,45069,34005],{"class":295},[149,45071,45072],{"class":151,"line":11517},[149,45073,34010],{"class":295},[149,45075,45076,45078,45080],{"class":151,"line":11526},[149,45077,34015],{"class":155},[149,45079,166],{"class":325},[149,45081,34020],{"class":155},[149,45083,45084],{"class":151,"line":11531},[149,45085,4119],{"emptyLinePlaceholder":1800},[149,45087,45088],{"class":151,"line":11537},[149,45089,4119],{"emptyLinePlaceholder":1800},[149,45091,45092],{"class":151,"line":11558},[149,45093,34033],{"class":295},[149,45095,45096],{"class":151,"line":11564},[149,45097,34038],{"class":295},[149,45099,45100,45102,45104],{"class":151,"line":11578},[149,45101,34043],{"class":155},[149,45103,166],{"class":325},[149,45105,34048],{"class":309},[149,45107,45108],{"class":151,"line":11584},[149,45109,34053],{"class":295},[149,45111,45112,45114,45116],{"class":151,"line":11611},[149,45113,34058],{"class":155},[149,45115,166],{"class":325},[149,45117,34063],{"class":155},[149,45119,45120],{"class":151,"line":11620},[149,45121,34068],{"class":295},[149,45123,45124,45126,45128],{"class":151,"line":11626},[149,45125,34073],{"class":155},[149,45127,166],{"class":325},[149,45129,34063],{"class":155},[149,45131,45132],{"class":151,"line":11634},[149,45133,34082],{"class":295},[149,45135,45136,45138,45140],{"class":151,"line":11639},[149,45137,34087],{"class":155},[149,45139,166],{"class":325},[149,45141,34063],{"class":155},[149,45143,45144],{"class":151,"line":18314},[149,45145,34096],{"class":295},[149,45147,45148,45150,45152],{"class":151,"line":18320},[149,45149,34101],{"class":155},[149,45151,166],{"class":325},[149,45153,34063],{"class":155},[149,45155,45156],{"class":151,"line":18343},[149,45157,4119],{"emptyLinePlaceholder":1800},[149,45159,45160],{"class":151,"line":18349},[149,45161,34114],{"class":295},[149,45163,45164,45166,45168],{"class":151,"line":18372},[149,45165,34119],{"class":155},[149,45167,166],{"class":325},[149,45169,34124],{"class":155},[149,45171,45172],{"class":151,"line":18386},[149,45173,4119],{"emptyLinePlaceholder":1800},[149,45175,45176],{"class":151,"line":18406},[149,45177,4119],{"emptyLinePlaceholder":1800},[149,45179,45180],{"class":151,"line":18412},[149,45181,34137],{"class":295},[149,45183,45184,45186,45188,45190,45192],{"class":151,"line":18423},[149,45185,4919],{"class":325},[149,45187,34144],{"class":155},[149,45189,27752],{"class":325},[149,45191,34149],{"class":309},[149,45193,34152],{"class":155},[149,45195,45196,45198,45200,45202,45204,45206,45208,45210,45212,45214,45216],{"class":151,"line":18446},[149,45197,34157],{"class":309},[149,45199,319],{"class":155},[149,45201,34162],{"class":169},[149,45203,34165],{"class":309},[149,45205,2447],{"class":169},[149,45207,34165],{"class":309},[149,45209,2115],{"class":169},[149,45211,34174],{"class":155},[149,45213,2395],{"class":325},[149,45215,830],{"class":309},[149,45217,32203],{"class":155},[149,45219,45220,45222,45224,45226,45228,45230],{"class":151,"line":18468},[149,45221,34157],{"class":309},[149,45223,319],{"class":155},[149,45225,34189],{"class":169},[149,45227,2318],{"class":325},[149,45229,2309],{"class":309},[149,45231,1878],{"class":155},[149,45233,45234],{"class":151,"line":18473},[149,45235,4119],{"emptyLinePlaceholder":1800},[149,45237,45238],{"class":151,"line":18479},[149,45239,34204],{"class":295},[149,45241,45242],{"class":151,"line":18493},[149,45243,34209],{"class":295},[149,45245,45246,45248,45250],{"class":151,"line":18506},[149,45247,34214],{"class":155},[149,45249,166],{"class":325},[149,45251,34048],{"class":309},[149,45253,45254],{"class":151,"line":18511},[149,45255,34223],{"class":295},[149,45257,45258,45260,45262],{"class":151,"line":18525},[149,45259,34228],{"class":155},[149,45261,166],{"class":325},[149,45263,4803],{"class":309},[149,45265,45266],{"class":151,"line":18530},[149,45267,34237],{"class":295},[149,45269,45270,45272,45274],{"class":151,"line":18536},[149,45271,34242],{"class":155},[149,45273,166],{"class":325},[149,45275,34048],{"class":309},[149,45277,45278],{"class":151,"line":18541},[149,45279,34251],{"class":295},[149,45281,45282,45284,45286],{"class":151,"line":18555},[149,45283,34256],{"class":155},[149,45285,166],{"class":325},[149,45287,4803],{"class":309},[149,45289,45290],{"class":151,"line":18560},[149,45291,34265],{"class":295},[149,45293,45294,45296,45298],{"class":151,"line":18565},[149,45295,34270],{"class":155},[149,45297,166],{"class":325},[149,45299,4803],{"class":309},[149,45301,45302],{"class":151,"line":18579},[149,45303,34279],{"class":295},[149,45305,45306,45308,45310],{"class":151,"line":18591},[149,45307,34284],{"class":155},[149,45309,166],{"class":325},[149,45311,4803],{"class":309},[149,45313,45314],{"class":151,"line":18596},[149,45315,34293],{"class":295},[149,45317,45318,45320,45322,45324,45326],{"class":151,"line":18609},[149,45319,5121],{"class":325},[149,45321,33307],{"class":155},[149,45323,27752],{"class":325},[149,45325,33312],{"class":309},[149,45327,34306],{"class":155},[149,45329,45330],{"class":151,"line":18614},[149,45331,34311],{"class":295},[149,45333,45334,45336,45338],{"class":151,"line":18619},[149,45335,34316],{"class":155},[149,45337,166],{"class":325},[149,45339,34321],{"class":155},[149,45341,45342],{"class":151,"line":18624},[149,45343,34326],{"class":295},[149,45345,45346,45348,45350],{"class":151,"line":18637},[149,45347,34331],{"class":155},[149,45349,166],{"class":325},[149,45351,34336],{"class":155},[149,45353,45354],{"class":151,"line":18642},[149,45355,34342],{"class":295},[149,45357,45358],{"class":151,"line":34339},[149,45359,34348],{"class":155},[149,45361,45362],{"class":151,"line":34345},[149,45363,34354],{"class":295},[149,45365,45366],{"class":151,"line":34351},[149,45367,34360],{"class":295},[149,45369,45370,45372,45374],{"class":151,"line":34357},[149,45371,34366],{"class":155},[149,45373,166],{"class":325},[149,45375,34371],{"class":155},[149,45377,45378],{"class":151,"line":34363},[149,45379,34377],{"class":295},[149,45381,45382,45384,45386,45388,45390,45392,45394],{"class":151,"line":34374},[149,45383,34383],{"class":155},[149,45385,166],{"class":325},[149,45387,34388],{"class":155},[149,45389,34391],{"class":6932},[149,45391,166],{"class":325},[149,45393,830],{"class":309},[149,45395,1878],{"class":155},[149,45397,45398],{"class":151,"line":34380},[149,45399,34403],{"class":295},[149,45401,45402,45404,45406],{"class":151,"line":34400},[149,45403,34409],{"class":155},[149,45405,166],{"class":325},[149,45407,34414],{"class":155},[149,45409,45410],{"class":151,"line":34406},[149,45411,34420],{"class":295},[149,45413,45414],{"class":151,"line":34417},[149,45415,34426],{"class":155},[149,45417,45418],{"class":151,"line":34423},[149,45419,34432],{"class":295},[149,45421,45422],{"class":151,"line":34429},[149,45423,34438],{"class":155},[149,45425,45426],{"class":151,"line":34435},[149,45427,34444],{"class":295},[149,45429,45430],{"class":151,"line":34441},[149,45431,34450],{"class":155},[149,45433,45434],{"class":151,"line":34447},[149,45435,34456],{"class":295},[149,45437,45438,45440,45442,45444,45446,45448,45450],{"class":151,"line":34453},[149,45439,34462],{"class":155},[149,45441,11191],{"class":325},[149,45443,34467],{"class":155},[149,45445,2318],{"class":325},[149,45447,34472],{"class":155},[149,45449,2056],{"class":309},[149,45451,1878],{"class":155},[149,45453,45454],{"class":151,"line":34459},[149,45455,34482],{"class":295},[149,45457,45458,45460,45462,45464,45466],{"class":151,"line":34479},[149,45459,34488],{"class":155},[149,45461,11191],{"class":325},[149,45463,34493],{"class":155},[149,45465,4667],{"class":325},[149,45467,34498],{"class":155},[149,45469,45470],{"class":151,"line":34485},[149,45471,34504],{"class":295},[149,45473,45474,45476,45478,45480,45482],{"class":151,"line":34501},[149,45475,34510],{"class":155},[149,45477,11191],{"class":325},[149,45479,34472],{"class":155},[149,45481,2056],{"class":309},[149,45483,1878],{"class":155},[149,45485,45486],{"class":151,"line":34507},[149,45487,34524],{"class":295},[149,45489,45490,45492,45494,45496,45498],{"class":151,"line":34521},[149,45491,5121],{"class":325},[149,45493,34532],{"class":155},[149,45495,27752],{"class":325},[149,45497,33312],{"class":309},[149,45499,34539],{"class":155},[149,45501,45502],{"class":151,"line":34527},[149,45503,34545],{"class":295},[149,45505,45506,45508,45510],{"class":151,"line":34542},[149,45507,34316],{"class":155},[149,45509,166],{"class":325},[149,45511,34321],{"class":155},[149,45513,45514],{"class":151,"line":34548},[149,45515,34560],{"class":295},[149,45517,45518,45520,45522],{"class":151,"line":34557},[149,45519,34331],{"class":155},[149,45521,166],{"class":325},[149,45523,34336],{"class":155},[149,45525,45526],{"class":151,"line":34563},[149,45527,34575],{"class":295},[149,45529,45530],{"class":151,"line":34572},[149,45531,34581],{"class":155},[149,45533,45534],{"class":151,"line":34578},[149,45535,38062],{"class":295},[149,45537,45538,45540],{"class":151,"line":34584},[149,45539,34587],{"class":325},[149,45541,34590],{"class":155},[149,45543,45544],{"class":151,"line":34593},[149,45545,34596],{"class":295},[149,45547,45548,45550,45552],{"class":151,"line":34599},[149,45549,38077],{"class":155},[149,45551,166],{"class":325},[149,45553,34371],{"class":155},[149,45555,45556],{"class":151,"line":34610},[149,45557,34613],{"class":295},[149,45559,45560,45562,45564,45566,45568,45570,45572],{"class":151,"line":34616},[149,45561,38090],{"class":155},[149,45563,166],{"class":325},[149,45565,34388],{"class":155},[149,45567,34391],{"class":6932},[149,45569,166],{"class":325},[149,45571,830],{"class":309},[149,45573,1878],{"class":155},[149,45575,45576],{"class":151,"line":34635},[149,45577,34638],{"class":295},[149,45579,45580,45582,45584],{"class":151,"line":34641},[149,45581,38111],{"class":155},[149,45583,166],{"class":325},[149,45585,34414],{"class":155},[149,45587,45588],{"class":151,"line":34652},[149,45589,34655],{"class":295},[149,45591,45592,45594,45596,45598,45600,45602,45604],{"class":151,"line":34658},[149,45593,38124],{"class":155},[149,45595,11191],{"class":325},[149,45597,38129],{"class":155},[149,45599,2318],{"class":325},[149,45601,34472],{"class":155},[149,45603,2056],{"class":309},[149,45605,1878],{"class":155},[149,45607,45608,45610,45612,45614,45616],{"class":151,"line":34678},[149,45609,38142],{"class":155},[149,45611,11191],{"class":325},[149,45613,34493],{"class":155},[149,45615,4667],{"class":325},[149,45617,34498],{"class":155},[149,45619,45620],{"class":151,"line":34694},[149,45621,38155],{"class":295},[149,45623,45624,45626,45628,45630,45632],{"class":151,"line":34700},[149,45625,38160],{"class":155},[149,45627,11191],{"class":325},[149,45629,34472],{"class":155},[149,45631,2056],{"class":309},[149,45633,1878],{"class":155},[149,45635,45636],{"class":151,"line":34714},[149,45637,34717],{"class":295},[149,45639,45640],{"class":151,"line":34720},[149,45641,34723],{"class":295},[149,45643,45644,45646,45648],{"class":151,"line":34726},[149,45645,34729],{"class":155},[149,45647,2447],{"class":325},[149,45649,34734],{"class":155},[149,45651,45652],{"class":151,"line":34737},[149,45653,34740],{"class":295},[149,45655,45656],{"class":151,"line":34743},[149,45657,34746],{"class":295},[149,45659,45660,45662,45664],{"class":151,"line":34749},[149,45661,34752],{"class":155},[149,45663,2447],{"class":325},[149,45665,34734],{"class":155},[149,45667,45668],{"class":151,"line":34759},[149,45669,34762],{"class":295},[149,45671,45672,45674,45676],{"class":151,"line":34765},[149,45673,34768],{"class":155},[149,45675,2447],{"class":325},[149,45677,34773],{"class":155},[149,45679,45680],{"class":151,"line":34776},[149,45681,34779],{"class":295},[149,45683,45684,45686,45688],{"class":151,"line":34782},[149,45685,34785],{"class":155},[149,45687,2447],{"class":325},[149,45689,34773],{"class":155},[149,45691,45692],{"class":151,"line":34792},[149,45693,4119],{"emptyLinePlaceholder":1800},[149,45695,45696],{"class":151,"line":34797},[149,45697,34800],{"class":295},[149,45699,45700,45702,45704,45706,45708,45710,45712,45714,45716,45718,45720,45722,45724,45726,45728,45730,45732,45734,45736,45738],{"class":151,"line":34803},[149,45701,34157],{"class":309},[149,45703,319],{"class":155},[149,45705,5310],{"class":169},[149,45707,34165],{"class":309},[149,45709,34814],{"class":169},[149,45711,2756],{"class":309},[149,45713,34819],{"class":325},[149,45715,2805],{"class":309},[149,45717,34824],{"class":169},[149,45719,2756],{"class":309},[149,45721,34819],{"class":325},[149,45723,2805],{"class":309},[149,45725,5310],{"class":169},[149,45727,34835],{"class":155},[149,45729,2395],{"class":325},[149,45731,830],{"class":309},[149,45733,34842],{"class":155},[149,45735,2395],{"class":325},[149,45737,830],{"class":309},[149,45739,34849],{"class":155},[149,45741,45742,45744,45746,45748,45750,45752,45754,45756,45758,45760,45762,45764,45766,45768,45770,45772,45774,45776,45778,45780],{"class":151,"line":34852},[149,45743,34157],{"class":309},[149,45745,319],{"class":155},[149,45747,5310],{"class":169},[149,45749,34165],{"class":309},[149,45751,34863],{"class":169},[149,45753,2756],{"class":309},[149,45755,34819],{"class":325},[149,45757,2805],{"class":309},[149,45759,34872],{"class":169},[149,45761,2756],{"class":309},[149,45763,34819],{"class":325},[149,45765,2805],{"class":309},[149,45767,5310],{"class":169},[149,45769,34883],{"class":155},[149,45771,2395],{"class":325},[149,45773,830],{"class":309},[149,45775,34890],{"class":155},[149,45777,2395],{"class":325},[149,45779,830],{"class":309},[149,45781,34849],{"class":155},[149,45783,45784],{"class":151,"line":34899},[149,45785,4119],{"emptyLinePlaceholder":1800},[149,45787,45788],{"class":151,"line":34904},[149,45789,34907],{"class":295},[149,45791,45792,45794,45796,45798,45800,45802,45804],{"class":151,"line":34910},[149,45793,4216],{"class":325},[149,45795,34915],{"class":155},[149,45797,2395],{"class":325},[149,45799,830],{"class":309},[149,45801,2799],{"class":155},[149,45803,2819],{"class":325},[149,45805,34926],{"class":155},[149,45807,45808],{"class":151,"line":34929},[149,45809,34932],{"class":295},[149,45811,45812,45814,45816,45818,45820,45822,45824],{"class":151,"line":34935},[149,45813,34938],{"class":155},[149,45815,1910],{"class":309},[149,45817,166],{"class":325},[149,45819,34945],{"class":155},[149,45821,2395],{"class":325},[149,45823,830],{"class":309},[149,45825,34952],{"class":155},[149,45827,45828],{"class":151,"line":34955},[149,45829,34958],{"class":295},[149,45831,45832],{"class":151,"line":34961},[149,45833,34964],{"class":295},[149,45835,45836,45838,45840],{"class":151,"line":34967},[149,45837,34970],{"class":155},[149,45839,166],{"class":325},[149,45841,34020],{"class":155},[149,45843,45844],{"class":151,"line":34977},[149,45845,4119],{"emptyLinePlaceholder":1800},[149,45847,45848],{"class":151,"line":34982},[149,45849,34985],{"class":295},[149,45851,45852,45854,45856,45858,45860],{"class":151,"line":34988},[149,45853,34991],{"class":155},[149,45855,166],{"class":325},[149,45857,34996],{"class":155},[149,45859,2395],{"class":325},[149,45861,35001],{"class":155},[149,45863,45864,45866,45868,45870,45872,45874,45876,45878,45880,45882,45884,45886,45888,45890,45892,45894,45896,45898],{"class":151,"line":35004},[149,45865,34157],{"class":309},[149,45867,319],{"class":155},[149,45869,35011],{"class":169},[149,45871,2756],{"class":309},[149,45873,35016],{"class":325},[149,45875,2805],{"class":309},[149,45877,2407],{"class":169},[149,45879,2756],{"class":309},[149,45881,35016],{"class":325},[149,45883,2805],{"class":309},[149,45885,35029],{"class":169},[149,45887,35032],{"class":155},[149,45889,35035],{"class":325},[149,45891,2767],{"class":309},[149,45893,35040],{"class":155},[149,45895,2191],{"class":325},[149,45897,2767],{"class":309},[149,45899,32203],{"class":155},[149,45901,45902],{"class":151,"line":35049},[149,45903,38439],{"class":295},[149,45905,45906],{"class":151,"line":35055},[149,45907,38444],{"class":295},[149,45909,45910,45912,45914],{"class":151,"line":35061},[149,45911,38449],{"class":155},[149,45913,35073],{"class":169},[149,45915,1878],{"class":155},[149,45917,45918],{"class":151,"line":35067},[149,45919,35093],{"class":295},[149,45921,45922,45924,45926,45928,45930,45932],{"class":151,"line":35078},[149,45923,35099],{"class":155},[149,45925,166],{"class":325},[149,45927,35104],{"class":155},[149,45929,35107],{"class":6932},[149,45931,166],{"class":325},[149,45933,3270],{"class":155},[149,45935,45936,45938,45940,45942],{"class":151,"line":35084},[149,45937,35117],{"class":169},[149,45939,2720],{"class":155},[149,45941,35122],{"class":309},[149,45943,35125],{"class":155},[149,45945,45946,45948],{"class":151,"line":35090},[149,45947,35131],{"class":169},[149,45949,35134],{"class":155},[149,45951,45952,45954],{"class":151,"line":35096},[149,45953,35140],{"class":169},[149,45955,35143],{"class":155},[149,45957,45958,45960],{"class":151,"line":35114},[149,45959,35149],{"class":169},[149,45961,35152],{"class":155},[149,45963,45964,45966],{"class":151,"line":35128},[149,45965,35158],{"class":169},[149,45967,35161],{"class":155},[149,45969,45970],{"class":151,"line":35137},[149,45971,35167],{"class":155},[149,45973,45974],{"class":151,"line":35146},[149,45975,35173],{"class":295},[149,45977,45978,45980],{"class":151,"line":35155},[149,45979,5808],{"class":325},[149,45981,35181],{"class":155},[149,45983,45984],{"class":151,"line":35164},[149,45985,4119],{"emptyLinePlaceholder":1800},[149,45987,45988],{"class":151,"line":35170},[149,45989,35192],{"class":295},[149,45991,45992,45994,45996],{"class":151,"line":35176},[149,45993,33653],{"class":325},[149,45995,35200],{"class":162},[149,45997,35203],{"class":155},[149,45999,46000],{"class":151,"line":35184},[149,46001,35209],{"class":295},[149,46003,46004,46006,46008,46010,46012,46014,46016,46018],{"class":151,"line":35189},[149,46005,35215],{"class":155},[149,46007,33399],{"class":6932},[149,46009,166],{"class":325},[149,46011,319],{"class":155},[149,46013,2361],{"class":309},[149,46015,2241],{"class":155},[149,46017,2157],{"class":309},[149,46019,32203],{"class":155},[149,46021,46022],{"class":151,"line":35195},[149,46023,35235],{"class":295},[149,46025,46026],{"class":151,"line":35206},[149,46027,35241],{"class":295},[149,46029,46030],{"class":151,"line":35212},[149,46031,35247],{"class":295},[149,46033,46034,46036,46038,46040,46042,46044,46046],{"class":151,"line":35232},[149,46035,33433],{"class":155},[149,46037,830],{"class":309},[149,46039,2241],{"class":155},[149,46041,1045],{"class":309},[149,46043,2241],{"class":155},[149,46045,830],{"class":309},[149,46047,1878],{"class":155},[149,46049,46050],{"class":151,"line":35238},[149,46051,35270],{"class":295},[149,46053,46054],{"class":151,"line":35244},[149,46055,35276],{"class":295},[149,46057,46058],{"class":151,"line":35250},[149,46059,35282],{"class":295},[149,46061,46062],{"class":151,"line":35267},[149,46063,35288],{"class":295},[149,46065,46066],{"class":151,"line":35273},[149,46067,35294],{"class":295},[149,46069,46070,46072,46074,46076,46078,46080,46082,46084,46086],{"class":151,"line":35279},[149,46071,35300],{"class":155},[149,46073,35303],{"class":169},[149,46075,35306],{"class":155},[149,46077,35309],{"class":169},[149,46079,2241],{"class":155},[149,46081,35314],{"class":6932},[149,46083,166],{"class":325},[149,46085,35319],{"class":169},[149,46087,1878],{"class":155},[149,46089,46090,46092,46094,46096,46098,46100,46102,46104,46106],{"class":151,"line":35285},[149,46091,35300],{"class":155},[149,46093,35303],{"class":169},[149,46095,35331],{"class":155},[149,46097,35334],{"class":169},[149,46099,2241],{"class":155},[149,46101,35314],{"class":6932},[149,46103,166],{"class":325},[149,46105,35343],{"class":169},[149,46107,1878],{"class":155},[149,46109,46110],{"class":151,"line":35291},[149,46111,35351],{"class":295},[149,46113,46114],{"class":151,"line":35297},[149,46115,35357],{"class":155},[149,46117,46118],{"class":151,"line":35324},[149,46119,35363],{"class":295},[149,46121,46122,46124,46126],{"class":151,"line":35348},[149,46123,35369],{"class":155},[149,46125,35372],{"class":169},[149,46127,1878],{"class":155},[149,46129,46130,46132,46134],{"class":151,"line":35354},[149,46131,35380],{"class":155},[149,46133,35383],{"class":169},[149,46135,1878],{"class":155},[149,46137,46138],{"class":151,"line":35360},[149,46139,35391],{"class":295},[149,46141,46142,46144,46146,46148,46150,46152,46154],{"class":151,"line":35366},[149,46143,33433],{"class":155},[149,46145,830],{"class":309},[149,46147,2241],{"class":155},[149,46149,1045],{"class":309},[149,46151,2241],{"class":155},[149,46153,1045],{"class":309},[149,46155,1878],{"class":155},[149,46157,46158,46160,46162,46164,46166,46168,46170,46172,46174],{"class":151,"line":35377},[149,46159,35300],{"class":155},[149,46161,35303],{"class":169},[149,46163,35418],{"class":155},[149,46165,35309],{"class":169},[149,46167,2241],{"class":155},[149,46169,35314],{"class":6932},[149,46171,166],{"class":325},[149,46173,35429],{"class":169},[149,46175,1878],{"class":155},[149,46177,46178,46180,46182,46184,46186,46188,46190,46192,46194],{"class":151,"line":35388},[149,46179,35300],{"class":155},[149,46181,35303],{"class":169},[149,46183,35441],{"class":155},[149,46185,35334],{"class":169},[149,46187,2241],{"class":155},[149,46189,35314],{"class":6932},[149,46191,166],{"class":325},[149,46193,35452],{"class":169},[149,46195,1878],{"class":155},[149,46197,46198],{"class":151,"line":35394},[149,46199,35460],{"class":295},[149,46201,46202],{"class":151,"line":35411},[149,46203,35357],{"class":155},[149,46205,46206,46208,46210],{"class":151,"line":35434},[149,46207,35369],{"class":155},[149,46209,35303],{"class":169},[149,46211,1878],{"class":155},[149,46213,46214,46216,46218],{"class":151,"line":35457},[149,46215,35380],{"class":155},[149,46217,35482],{"class":169},[149,46219,1878],{"class":155},[149,46221,46222],{"class":151,"line":35463},[149,46223,35490],{"class":155},[149,46225,46226],{"class":151,"line":35468},[149,46227,4119],{"emptyLinePlaceholder":1800},[149,46229,46230],{"class":151,"line":35477},[149,46231,35501],{"class":295},[149,46233,46234,46236,46238,46240,46242],{"class":151,"line":35487},[149,46235,3255],{"class":325},[149,46237,32926],{"class":309},[149,46239,4667],{"class":325},[149,46241,32931],{"class":169},[149,46243,5457],{"class":155},[149,46245,46246],{"class":151,"line":35493},[149,46247,35520],{"class":295},[149,46249,46250,46253,46255],{"class":151,"line":35498},[149,46251,46252],{"class":155},"    GoogLeNet",[149,46254,166],{"class":325},[149,46256,46257],{"class":155},"GoogLeNet(Inception)\n",[149,46259,46260,46262,46264],{"class":151,"line":35504},[149,46261,35537],{"class":155},[149,46263,166],{"class":325},[149,46265,35542],{"class":155},[149,46267,46268,46270,46272,46275,46277,46279,46281],{"class":151,"line":35517},[149,46269,35099],{"class":155},[149,46271,166],{"class":325},[149,46273,46274],{"class":155},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[149,46276,35555],{"class":6932},[149,46278,166],{"class":325},[149,46280,2810],{"class":309},[149,46282,1878],{"class":155},[149,46284,46285],{"class":151,"line":35523},[149,46286,35567],{"class":155},[125,46288,46289],{"start":235},[45,46290,42280],{},[140,46292,46294],{"className":32084,"code":46293,"language":32086,"meta":145,"style":145},"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",[48,46295,46296,46302,46312,46322,46326,46336,46347,46351,46355,46359,46367,46383,46393,46409,46419,46433,46437,46447,46457,46467,46473,46477,46481,46489,46493,46509,46517,46521,46525,46533,46541,46545,46549,46553,46557,46563,46567,46577,46585,46593,46597,46601,46605,46613,46617,46633,46637,46641,46645,46657,46661,46673,46677,46681,46693,46697,46707,46711,46715,46727,46731,46739,46743,46747,46755,46759,46767,46771,46775,46779,46783,46787,46803,46811,46815,46819,46867,46873,46877,46887,46895,46903,46907,46911,46915,46919,46927,46931,46947,46951,46959,46967],{"__ignoreMap":145},[149,46297,46298,46300],{"class":151,"line":152},[149,46299,32098],{"class":325},[149,46301,32101],{"class":155},[149,46303,46304,46306,46308,46310],{"class":151,"line":193},[149,46305,32098],{"class":325},[149,46307,33121],{"class":155},[149,46309,33089],{"class":325},[149,46311,33126],{"class":155},[149,46313,46314,46316,46318,46320],{"class":151,"line":235},[149,46315,32443],{"class":325},[149,46317,33104],{"class":155},[149,46319,32098],{"class":325},[149,46321,33109],{"class":155},[149,46323,46324],{"class":151,"line":340},[149,46325,35628],{"class":295},[149,46327,46328,46330,46332,46334],{"class":151,"line":346},[149,46329,32443],{"class":325},[149,46331,33074],{"class":155},[149,46333,32098],{"class":325},[149,46335,33079],{"class":155},[149,46337,46338,46340,46342,46344],{"class":151,"line":352},[149,46339,32443],{"class":325},[149,46341,33620],{"class":155},[149,46343,32098],{"class":325},[149,46345,46346],{"class":155}," GoogLeNet,Inception\n",[149,46348,46349],{"class":151,"line":1021},[149,46350,4119],{"emptyLinePlaceholder":1800},[149,46352,46353],{"class":151,"line":1035},[149,46354,4119],{"emptyLinePlaceholder":1800},[149,46356,46357],{"class":151,"line":1054},[149,46358,35657],{"class":295},[149,46360,46361,46363,46365],{"class":151,"line":1072},[149,46362,33653],{"class":325},[149,46364,35664],{"class":162},[149,46366,33659],{"class":155},[149,46368,46369,46371,46373,46375,46377,46379,46381],{"class":151,"line":1090},[149,46370,35671],{"class":155},[149,46372,166],{"class":325},[149,46374,33161],{"class":155},[149,46376,33164],{"class":6932},[149,46378,166],{"class":325},[149,46380,33169],{"class":169},[149,46382,33172],{"class":155},[149,46384,46385,46387,46389,46391],{"class":151,"line":1633},[149,46386,35688],{"class":6932},[149,46388,166],{"class":325},[149,46390,35693],{"class":309},[149,46392,33172],{"class":155},[149,46394,46395,46397,46399,46401,46403,46405,46407],{"class":151,"line":1644},[149,46396,35700],{"class":6932},[149,46398,166],{"class":325},[149,46400,33199],{"class":155},[149,46402,33202],{"class":6932},[149,46404,166],{"class":325},[149,46406,37155],{"class":309},[149,46408,33210],{"class":155},[149,46410,46411,46413,46415,46417],{"class":151,"line":3348},[149,46412,35717],{"class":6932},[149,46414,166],{"class":325},[149,46416,33182],{"class":309},[149,46418,1878],{"class":155},[149,46420,46421,46423,46425,46427,46429,46431],{"class":151,"line":3362},[149,46422,35728],{"class":155},[149,46424,166],{"class":325},[149,46426,33240],{"class":155},[149,46428,33243],{"class":6932},[149,46430,166],{"class":325},[149,46432,35739],{"class":155},[149,46434,46435],{"class":151,"line":3367},[149,46436,35744],{"class":295},[149,46438,46439,46441,46443,46445],{"class":151,"line":3373},[149,46440,35749],{"class":6932},[149,46442,166],{"class":325},[149,46444,830],{"class":309},[149,46446,33172],{"class":155},[149,46448,46449,46451,46453,46455],{"class":151,"line":3394},[149,46450,35760],{"class":6932},[149,46452,166],{"class":325},[149,46454,33182],{"class":309},[149,46456,33172],{"class":155},[149,46458,46459,46461,46463,46465],{"class":151,"line":3399},[149,46460,35771],{"class":6932},[149,46462,166],{"class":325},[149,46464,2056],{"class":309},[149,46466,1878],{"class":155},[149,46468,46469,46471],{"class":151,"line":3413},[149,46470,5808],{"class":325},[149,46472,35784],{"class":155},[149,46474,46475],{"class":151,"line":3418},[149,46476,4119],{"emptyLinePlaceholder":1800},[149,46478,46479],{"class":151,"line":3447},[149,46480,35793],{"class":295},[149,46482,46483,46485,46487],{"class":151,"line":3452},[149,46484,33653],{"class":325},[149,46486,35800],{"class":162},[149,46488,35803],{"class":155},[149,46490,46491],{"class":151,"line":3469},[149,46492,35808],{"class":295},[149,46494,46495,46497,46499,46501,46503,46505,46507],{"class":151,"line":3474},[149,46496,32943],{"class":155},[149,46498,166],{"class":325},[149,46500,32950],{"class":169},[149,46502,3424],{"class":325},[149,46504,32955],{"class":155},[149,46506,3421],{"class":325},[149,46508,35825],{"class":169},[149,46510,46511,46513,46515],{"class":151,"line":3479},[149,46512,32995],{"class":155},[149,46514,166],{"class":325},[149,46516,33995],{"class":155},[149,46518,46519],{"class":151,"line":3484},[149,46520,4119],{"emptyLinePlaceholder":1800},[149,46522,46523],{"class":151,"line":3498},[149,46524,35842],{"class":295},[149,46526,46527,46529,46531],{"class":151,"line":3503},[149,46528,35847],{"class":155},[149,46530,166],{"class":325},[149,46532,34048],{"class":309},[149,46534,46535,46537,46539],{"class":151,"line":4296},[149,46536,35856],{"class":155},[149,46538,166],{"class":325},[149,46540,4803],{"class":309},[149,46542,46543],{"class":151,"line":4310},[149,46544,4119],{"emptyLinePlaceholder":1800},[149,46546,46547],{"class":151,"line":4318},[149,46548,35869],{"class":295},[149,46550,46551],{"class":151,"line":4323},[149,46552,35874],{"class":295},[149,46554,46555],{"class":151,"line":4329},[149,46556,35879],{"class":295},[149,46558,46559,46561],{"class":151,"line":4335},[149,46560,35884],{"class":325},[149,46562,34590],{"class":155},[149,46564,46565],{"class":151,"line":4340},[149,46566,35891],{"class":295},[149,46568,46569,46571,46573,46575],{"class":151,"line":9663},[149,46570,5121],{"class":325},[149,46572,35898],{"class":155},[149,46574,27752],{"class":325},[149,46576,35903],{"class":155},[149,46578,46579,46581,46583],{"class":151,"line":9687},[149,46580,35908],{"class":155},[149,46582,166],{"class":325},[149,46584,35913],{"class":155},[149,46586,46587,46589,46591],{"class":151,"line":9692},[149,46588,35918],{"class":155},[149,46590,166],{"class":325},[149,46592,35923],{"class":155},[149,46594,46595],{"class":151,"line":9698},[149,46596,35928],{"class":295},[149,46598,46599],{"class":151,"line":9725},[149,46600,34581],{"class":155},[149,46602,46603],{"class":151,"line":9730},[149,46604,35937],{"class":295},[149,46606,46607,46609,46611],{"class":151,"line":9736},[149,46608,34366],{"class":155},[149,46610,166],{"class":325},[149,46612,35946],{"class":155},[149,46614,46615],{"class":151,"line":9748},[149,46616,35951],{"class":295},[149,46618,46619,46621,46623,46625,46627,46629,46631],{"class":151,"line":9760},[149,46620,34383],{"class":155},[149,46622,166],{"class":325},[149,46624,34388],{"class":155},[149,46626,34391],{"class":6932},[149,46628,166],{"class":325},[149,46630,830],{"class":309},[149,46632,1878],{"class":155},[149,46634,46635],{"class":151,"line":9772},[149,46636,35972],{"class":295},[149,46638,46639],{"class":151,"line":11430},[149,46640,35977],{"class":295},[149,46642,46643],{"class":151,"line":11455},[149,46644,35982],{"class":295},[149,46646,46647,46649,46651,46653,46655],{"class":151,"line":11478},[149,46648,35987],{"class":155},[149,46650,11191],{"class":325},[149,46652,34493],{"class":155},[149,46654,4667],{"class":325},[149,46656,35996],{"class":155},[149,46658,46659],{"class":151,"line":11502},[149,46660,36001],{"class":295},[149,46662,46663,46665,46667,46669,46671],{"class":151,"line":11507},[149,46664,36006],{"class":155},[149,46666,11191],{"class":325},[149,46668,36011],{"class":155},[149,46670,2056],{"class":309},[149,46672,1878],{"class":155},[149,46674,46675],{"class":151,"line":11512},[149,46676,4119],{"emptyLinePlaceholder":1800},[149,46678,46679],{"class":151,"line":11517},[149,46680,36024],{"class":295},[149,46682,46683,46685,46687,46689,46691],{"class":151,"line":11526},[149,46684,36029],{"class":155},[149,46686,166],{"class":325},[149,46688,36034],{"class":155},[149,46690,2447],{"class":325},[149,46692,36039],{"class":155},[149,46694,46695],{"class":151,"line":11531},[149,46696,36044],{"class":295},[149,46698,46699,46701,46703,46705],{"class":151,"line":11537},[149,46700,34157],{"class":309},[149,46702,319],{"class":155},[149,46704,36053],{"class":169},[149,46706,36056],{"class":155},[149,46708,46709],{"class":151,"line":11558},[149,46710,4119],{"emptyLinePlaceholder":1800},[149,46712,46713],{"class":151,"line":11564},[149,46714,36065],{"class":295},[149,46716,46717,46719,46721,46723,46725],{"class":151,"line":11578},[149,46718,3255],{"class":325},[149,46720,32926],{"class":309},[149,46722,4667],{"class":325},[149,46724,32931],{"class":169},[149,46726,5457],{"class":155},[149,46728,46729],{"class":151,"line":11584},[149,46730,36082],{"class":295},[149,46732,46733,46735,46737],{"class":151,"line":11611},[149,46734,32995],{"class":155},[149,46736,166],{"class":325},[149,46738,46257],{"class":155},[149,46740,46741],{"class":151,"line":11620},[149,46742,36095],{"class":295},[149,46744,46745],{"class":151,"line":11626},[149,46746,36100],{"class":295},[149,46748,46749,46751,46753],{"class":151,"line":11634},[149,46750,36105],{"class":155},[149,46752,36108],{"class":169},[149,46754,32203],{"class":155},[149,46756,46757],{"class":151,"line":11639},[149,46758,36115],{"class":295},[149,46760,46761,46763,46765],{"class":151,"line":18314},[149,46762,35728],{"class":155},[149,46764,166],{"class":325},[149,46766,36124],{"class":155},[149,46768,46769],{"class":151,"line":18320},[149,46770,36129],{"class":295},[149,46772,46773],{"class":151,"line":18343},[149,46774,36134],{"class":155},[149,46776,46777],{"class":151,"line":18349},[149,46778,4119],{"emptyLinePlaceholder":1800},[149,46780,46781],{"class":151,"line":18372},[149,46782,36143],{"class":295},[149,46784,46785],{"class":151,"line":18386},[149,46786,36148],{"class":295},[149,46788,46789,46791,46793,46795,46797,46799,46801],{"class":151,"line":18406},[149,46790,32943],{"class":155},[149,46792,166],{"class":325},[149,46794,32950],{"class":169},[149,46796,3424],{"class":325},[149,46798,32955],{"class":155},[149,46800,3421],{"class":325},[149,46802,35825],{"class":169},[149,46804,46805,46807,46809],{"class":151,"line":18412},[149,46806,32995],{"class":155},[149,46808,166],{"class":325},[149,46810,33995],{"class":155},[149,46812,46813],{"class":151,"line":18423},[149,46814,36177],{"class":295},[149,46816,46817],{"class":151,"line":18446},[149,46818,36182],{"class":295},[149,46820,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863,46865],{"class":151,"line":18468},[149,46822,36187],{"class":155},[149,46824,166],{"class":325},[149,46826,810],{"class":155},[149,46828,36194],{"class":169},[149,46830,2241],{"class":155},[149,46832,36199],{"class":169},[149,46834,2241],{"class":155},[149,46836,36204],{"class":169},[149,46838,2241],{"class":155},[149,46840,36209],{"class":169},[149,46842,2241],{"class":155},[149,46844,36214],{"class":169},[149,46846,2241],{"class":155},[149,46848,36219],{"class":169},[149,46850,2241],{"class":155},[149,46852,36224],{"class":169},[149,46854,2241],{"class":155},[149,46856,36229],{"class":169},[149,46858,2241],{"class":155},[149,46860,36234],{"class":169},[149,46862,2241],{"class":155},[149,46864,36239],{"class":169},[149,46866,34952],{"class":155},[149,46868,46869,46871],{"class":151,"line":18473},[149,46870,35884],{"class":325},[149,46872,34590],{"class":155},[149,46874,46875],{"class":151,"line":18479},[149,46876,36252],{"class":295},[149,46878,46879,46881,46883,46885],{"class":151,"line":18493},[149,46880,5121],{"class":325},[149,46882,36259],{"class":155},[149,46884,27752],{"class":325},[149,46886,35903],{"class":155},[149,46888,46889,46891,46893],{"class":151,"line":18506},[149,46890,34316],{"class":155},[149,46892,166],{"class":325},[149,46894,34321],{"class":155},[149,46896,46897,46899,46901],{"class":151,"line":18511},[149,46898,34331],{"class":155},[149,46900,166],{"class":325},[149,46902,34336],{"class":155},[149,46904,46905],{"class":151,"line":18525},[149,46906,4119],{"emptyLinePlaceholder":1800},[149,46908,46909],{"class":151,"line":18530},[149,46910,36288],{"class":295},[149,46912,46913],{"class":151,"line":18536},[149,46914,34581],{"class":155},[149,46916,46917],{"class":151,"line":18541},[149,46918,36297],{"class":295},[149,46920,46921,46923,46925],{"class":151,"line":18555},[149,46922,34366],{"class":155},[149,46924,166],{"class":325},[149,46926,34371],{"class":155},[149,46928,46929],{"class":151,"line":18560},[149,46930,36310],{"class":295},[149,46932,46933,46935,46937,46939,46941,46943,46945],{"class":151,"line":18565},[149,46934,34383],{"class":155},[149,46936,166],{"class":325},[149,46938,34388],{"class":155},[149,46940,34391],{"class":6932},[149,46942,166],{"class":325},[149,46944,830],{"class":309},[149,46946,1878],{"class":155},[149,46948,46949],{"class":151,"line":18579},[149,46950,36331],{"class":295},[149,46952,46953,46955,46957],{"class":151,"line":18591},[149,46954,36336],{"class":155},[149,46956,166],{"class":325},[149,46958,36341],{"class":155},[149,46960,46961,46963,46965],{"class":151,"line":18596},[149,46962,36346],{"class":155},[149,46964,166],{"class":325},[149,46966,36351],{"class":155},[149,46968,46969,46971,46973,46975,46977,46979,46981,46983],{"class":151,"line":18609},[149,46970,36356],{"class":309},[149,46972,319],{"class":155},[149,46974,36361],{"class":169},[149,46976,36364],{"class":155},[149,46978,36367],{"class":169},[149,46980,2241],{"class":155},[149,46982,36372],{"class":169},[149,46984,36375],{"class":155},[19,46986,46988],{"id":46987},"_24训练自己的数据集","2.4.训练自己的数据集",[24,46990,46991],{},"猫狗分类任务",[24,46993,46994],{},"划分数据集和验证集",[140,46996,46998],{"className":32084,"code":46997,"language":32086,"meta":145,"style":145},"# 创建脚本，用于划分数据集和验证集\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",[48,46999,47000,47005,47012,47017,47028,47035,47039,47049,47063,47072,47076,47081,47091,47111,47115,47120,47130,47141,47154,47158,47163,47172,47182,47193,47197,47202,47212,47216,47221,47226,47231,47236,47241,47245,47255,47282,47295,47307,47334,47339,47344,47358,47363,47375,47390,47405,47413,47417,47422,47428,47440,47453,47458,47463,47468,47518,47524,47528],{"__ignoreMap":145},[149,47001,47002],{"class":151,"line":152},[149,47003,47004],{"class":295},"# 创建脚本，用于划分数据集和验证集\n",[149,47006,47007,47009],{"class":151,"line":193},[149,47008,32098],{"class":325},[149,47010,47011],{"class":155}," os\n",[149,47013,47014],{"class":151,"line":235},[149,47015,47016],{"class":295},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[149,47018,47019,47021,47024,47026],{"class":151,"line":340},[149,47020,32443],{"class":325},[149,47022,47023],{"class":155}," shutil ",[149,47025,32098],{"class":325},[149,47027,33528],{"class":155},[149,47029,47030,47032],{"class":151,"line":346},[149,47031,32098],{"class":325},[149,47033,47034],{"class":155}," random\n",[149,47036,47037],{"class":151,"line":352},[149,47038,4119],{"emptyLinePlaceholder":1800},[149,47040,47041,47043,47046],{"class":151,"line":1021},[149,47042,33653],{"class":325},[149,47044,47045],{"class":162}," mkfile",[149,47047,47048],{"class":155},"(file):\n",[149,47050,47051,47053,47055,47058,47061],{"class":151,"line":1035},[149,47052,4819],{"class":325},[149,47054,40636],{"class":325},[149,47056,47057],{"class":155}," os.path.exists(",[149,47059,47060],{"class":6932},"file",[149,47062,32492],{"class":155},[149,47064,47065,47068,47070],{"class":151,"line":1054},[149,47066,47067],{"class":155},"        os.makedirs(",[149,47069,47060],{"class":6932},[149,47071,1878],{"class":155},[149,47073,47074],{"class":151,"line":1072},[149,47075,4119],{"emptyLinePlaceholder":1800},[149,47077,47078],{"class":151,"line":1090},[149,47079,47080],{"class":295},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[149,47082,47083,47086,47088],{"class":151,"line":1633},[149,47084,47085],{"class":155},"file_path",[149,47087,166],{"class":325},[149,47089,47090],{"class":169},"'data_cat_dog'\n",[149,47092,47093,47096,47098,47101,47103,47106,47108],{"class":151,"line":1644},[149,47094,47095],{"class":155},"flower_class",[149,47097,166],{"class":325},[149,47099,47100],{"class":155},"[cla ",[149,47102,4743],{"class":325},[149,47104,47105],{"class":155}," cla ",[149,47107,27752],{"class":325},[149,47109,47110],{"class":155}," os.listdir(file_path)]\n",[149,47112,47113],{"class":151,"line":3348},[149,47114,4119],{"emptyLinePlaceholder":1800},[149,47116,47117],{"class":151,"line":3362},[149,47118,47119],{"class":295},"# 创建训练集train文件夹\n",[149,47121,47122,47125,47128],{"class":151,"line":3367},[149,47123,47124],{"class":155},"mkfile(",[149,47126,47127],{"class":169},"'data\u002Ftrain'",[149,47129,1878],{"class":155},[149,47131,47132,47134,47136,47138],{"class":151,"line":3373},[149,47133,4743],{"class":325},[149,47135,47105],{"class":155},[149,47137,27752],{"class":325},[149,47139,47140],{"class":155}," flower_class:\n",[149,47142,47143,47146,47149,47151],{"class":151,"line":3394},[149,47144,47145],{"class":155},"    mkfile(",[149,47147,47148],{"class":169},"'data\u002Ftrain\u002F'",[149,47150,2344],{"class":325},[149,47152,47153],{"class":155},"cla)\n",[149,47155,47156],{"class":151,"line":3399},[149,47157,4119],{"emptyLinePlaceholder":1800},[149,47159,47160],{"class":151,"line":3413},[149,47161,47162],{"class":295},"# 创建验证集val文件夹\n",[149,47164,47165,47167,47170],{"class":151,"line":3418},[149,47166,47124],{"class":155},[149,47168,47169],{"class":169},"'data\u002Ftest'",[149,47171,1878],{"class":155},[149,47173,47174,47176,47178,47180],{"class":151,"line":3447},[149,47175,4743],{"class":325},[149,47177,47105],{"class":155},[149,47179,27752],{"class":325},[149,47181,47140],{"class":155},[149,47183,47184,47186,47189,47191],{"class":151,"line":3452},[149,47185,47145],{"class":155},[149,47187,47188],{"class":169},"'data\u002Ftest\u002F'",[149,47190,2344],{"class":325},[149,47192,47153],{"class":155},[149,47194,47195],{"class":151,"line":3469},[149,47196,4119],{"emptyLinePlaceholder":1800},[149,47198,47199],{"class":151,"line":3474},[149,47200,47201],{"class":295},"# 划分比例，训练集：测试集=9：1\n",[149,47203,47204,47207,47209],{"class":151,"line":3479},[149,47205,47206],{"class":155},"split_rate",[149,47208,166],{"class":325},[149,47210,47211],{"class":309},"0.1\n",[149,47213,47214],{"class":151,"line":3484},[149,47215,4119],{"emptyLinePlaceholder":1800},[149,47217,47218],{"class":151,"line":3498},[149,47219,47220],{"class":295},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[149,47222,47223],{"class":151,"line":3503},[149,47224,47225],{"class":295},"# cla_path：当前类别的原始图片路径\n",[149,47227,47228],{"class":151,"line":4296},[149,47229,47230],{"class":295},"# images：当前类别下所有图片的文件名列表\n",[149,47232,47233],{"class":151,"line":4310},[149,47234,47235],{"class":295},"# num：该类别图片总数\n",[149,47237,47238],{"class":151,"line":4318},[149,47239,47240],{"class":295},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[149,47242,47243],{"class":151,"line":4323},[149,47244,4119],{"emptyLinePlaceholder":1800},[149,47246,47247,47249,47251,47253],{"class":151,"line":4329},[149,47248,4743],{"class":325},[149,47250,47105],{"class":155},[149,47252,27752],{"class":325},[149,47254,47140],{"class":155},[149,47256,47257,47260,47262,47265,47267,47270,47273,47275,47277,47279],{"class":151,"line":4335},[149,47258,47259],{"class":155},"    cla_path ",[149,47261,166],{"class":325},[149,47263,47264],{"class":155}," file_path ",[149,47266,2344],{"class":325},[149,47268,47269],{"class":169}," '\u002F'",[149,47271,47272],{"class":325}," +",[149,47274,47105],{"class":155},[149,47276,2344],{"class":325},[149,47278,47269],{"class":169},[149,47280,47281],{"class":295},"  # 某一类别的子目录\n",[149,47283,47284,47287,47289,47292],{"class":151,"line":4340},[149,47285,47286],{"class":155},"    images ",[149,47288,166],{"class":325},[149,47290,47291],{"class":155}," os.listdir(cla_path)  ",[149,47293,47294],{"class":295},"# iamges 列表存储了该目录下所有图像的名称\n",[149,47296,47297,47300,47302,47304],{"class":151,"line":9663},[149,47298,47299],{"class":155},"    num ",[149,47301,166],{"class":325},[149,47303,9047],{"class":309},[149,47305,47306],{"class":155},"(images)\n",[149,47308,47309,47312,47314,47317,47319,47321,47323,47326,47328,47331],{"class":151,"line":9687},[149,47310,47311],{"class":155},"    eval_index ",[149,47313,166],{"class":325},[149,47315,47316],{"class":155}," random.sample(images, ",[149,47318,2356],{"class":6932},[149,47320,166],{"class":325},[149,47322,1875],{"class":309},[149,47324,47325],{"class":155},"(num ",[149,47327,2318],{"class":325},[149,47329,47330],{"class":155}," split_rate))  ",[149,47332,47333],{"class":295},"# 从images列表中随机抽取 k 个图像名称\n",[149,47335,47336],{"class":151,"line":9692},[149,47337,47338],{"class":295},"    # 遍历该类别下的所有图片\n",[149,47340,47341],{"class":151,"line":9698},[149,47342,47343],{"class":295},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[149,47345,47346,47348,47351,47353,47355],{"class":151,"line":9725},[149,47347,4919],{"class":325},[149,47349,47350],{"class":155}," index, image ",[149,47352,27752],{"class":325},[149,47354,33312],{"class":309},[149,47356,47357],{"class":155},"(images):\n",[149,47359,47360],{"class":151,"line":9730},[149,47361,47362],{"class":295},"        # eval_index 中保存验证集val的图像名称\n",[149,47364,47365,47367,47370,47372],{"class":151,"line":9736},[149,47366,4216],{"class":325},[149,47368,47369],{"class":155}," image ",[149,47371,27752],{"class":325},[149,47373,47374],{"class":155}," eval_index:\n",[149,47376,47377,47380,47382,47385,47387],{"class":151,"line":9748},[149,47378,47379],{"class":155},"            image_path ",[149,47381,166],{"class":325},[149,47383,47384],{"class":155}," cla_path ",[149,47386,2344],{"class":325},[149,47388,47389],{"class":155}," image\n",[149,47391,47392,47395,47397,47400,47402],{"class":151,"line":9760},[149,47393,47394],{"class":155},"            new_path ",[149,47396,166],{"class":325},[149,47398,47399],{"class":169}," 'data\u002Ftest\u002F'",[149,47401,47272],{"class":325},[149,47403,47404],{"class":155}," cla\n",[149,47406,47407,47410],{"class":151,"line":9772},[149,47408,47409],{"class":155},"            copy(image_path, new_path)  ",[149,47411,47412],{"class":295},"# 将选中的图像复制到新路径\n",[149,47414,47415],{"class":151,"line":11430},[149,47416,4119],{"emptyLinePlaceholder":1800},[149,47418,47419],{"class":151,"line":11455},[149,47420,47421],{"class":295},"        # 其余的图像保存在训练集train中\n",[149,47423,47424,47426],{"class":151,"line":11478},[149,47425,4253],{"class":325},[149,47427,5457],{"class":155},[149,47429,47430,47432,47434,47436,47438],{"class":151,"line":11502},[149,47431,47379],{"class":155},[149,47433,166],{"class":325},[149,47435,47384],{"class":155},[149,47437,2344],{"class":325},[149,47439,47389],{"class":155},[149,47441,47442,47444,47446,47449,47451],{"class":151,"line":11507},[149,47443,47394],{"class":155},[149,47445,166],{"class":325},[149,47447,47448],{"class":169}," 'data\u002Ftrain\u002F'",[149,47450,47272],{"class":325},[149,47452,47404],{"class":155},[149,47454,47455],{"class":151,"line":11512},[149,47456,47457],{"class":155},"            copy(image_path, new_path)\n",[149,47459,47460],{"class":151,"line":11517},[149,47461,47462],{"class":295},"            # 打印进度条信息\n",[149,47464,47465],{"class":151,"line":11526},[149,47466,47467],{"class":295},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[149,47469,47470,47472,47474,47476,47479,47481,47483,47486,47488,47490,47492,47495,47498,47500,47502,47505,47508,47510,47512,47515],{"class":151,"line":11531},[149,47471,34157],{"class":309},[149,47473,319],{"class":155},[149,47475,2115],{"class":169},[149,47477,47478],{"class":309},"\\r",[149,47480,810],{"class":169},[149,47482,34165],{"class":309},[149,47484,47485],{"class":169},"] processing [",[149,47487,34165],{"class":309},[149,47489,2447],{"class":169},[149,47491,34165],{"class":309},[149,47493,47494],{"class":169},"]\"",[149,47496,47497],{"class":155},".format(cla, index ",[149,47499,2344],{"class":325},[149,47501,26827],{"class":309},[149,47503,47504],{"class":155},", num), ",[149,47506,47507],{"class":6932},"end",[149,47509,166],{"class":325},[149,47511,1382],{"class":169},[149,47513,47514],{"class":155},")  ",[149,47516,47517],{"class":295},"# processing bar\n",[149,47519,47520,47522],{"class":151,"line":11537},[149,47521,33005],{"class":309},[149,47523,3695],{"class":155},[149,47525,47526],{"class":151,"line":11558},[149,47527,4119],{"emptyLinePlaceholder":1800},[149,47529,47530,47532,47534,47537],{"class":151,"line":11564},[149,47531,32121],{"class":309},[149,47533,319],{"class":155},[149,47535,47536],{"class":169},"\"processing done!\"",[149,47538,1878],{"class":155},[24,47540,47541],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[120,47543,47545],{"id":47544},"_242模型代码","2.4.2.模型代码",[24,47547,47548],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[140,47550,47552],{"className":32084,"code":47551,"language":32086,"meta":145,"style":145},"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",[48,47553,47554,47560,47570,47580,47584,47600,47608,47622,47632,47636,47666,47670,47704,47750,47754,47788,47834,47838,47842,47876,47906,47910,47918,47932,47954,47976,47994,47998,48012,48016,48020,48036,48040,48048,48062,48072,48116,48120,48148,48152,48162,48190,48194,48230,48234,48262,48266,48276,48308,48340,48368,48372,48382,48414,48446,48478,48510,48542,48570,48574,48584,48616,48648,48660,48664,48676,48680,48684,48696,48704,48724,48728,48732,48736,48740,48744,48748,48762,48770,48778,48790,48804,48812,48816,48824,48834,48844,48854,48864,48874,48880,48884,48888,48900,48920,48928],{"__ignoreMap":145},[149,47555,47556,47558],{"class":151,"line":152},[149,47557,32098],{"class":325},[149,47559,32101],{"class":155},[149,47561,47562,47564,47566,47568],{"class":151,"line":193},[149,47563,32443],{"class":325},[149,47565,32446],{"class":155},[149,47567,32098],{"class":325},[149,47569,32451],{"class":155},[149,47571,47572,47574,47576,47578],{"class":151,"line":235},[149,47573,32443],{"class":325},[149,47575,32463],{"class":155},[149,47577,32098],{"class":325},[149,47579,32468],{"class":155},[149,47581,47582],{"class":151,"line":340},[149,47583,4119],{"emptyLinePlaceholder":1800},[149,47585,47586,47588,47590,47592,47594,47596,47598],{"class":151,"line":346},[149,47587,913],{"class":325},[149,47589,43199],{"class":162},[149,47591,319],{"class":155},[149,47593,32484],{"class":162},[149,47595,2421],{"class":155},[149,47597,32489],{"class":162},[149,47599,32492],{"class":155},[149,47601,47602,47604,47606],{"class":151,"line":352},[149,47603,32507],{"class":325},[149,47605,32510],{"class":309},[149,47607,43218],{"class":155},[149,47609,47610,47612,47614,47616,47618,47620],{"class":151,"line":1021},[149,47611,32523],{"class":309},[149,47613,43225],{"class":155},[149,47615,32529],{"class":309},[149,47617,32532],{"class":155},[149,47619,32535],{"class":309},[149,47621,3695],{"class":155},[149,47623,47624,47626,47628,47630],{"class":151,"line":1035},[149,47625,32551],{"class":309},[149,47627,36477],{"class":155},[149,47629,166],{"class":325},[149,47631,36482],{"class":155},[149,47633,47634],{"class":151,"line":1054},[149,47635,43248],{"class":295},[149,47637,47638,47640,47642,47644,47646,47648,47650,47652,47654,47656,47658,47660,47662,47664],{"class":151,"line":1072},[149,47639,32551],{"class":309},[149,47641,43255],{"class":155},[149,47643,166],{"class":325},[149,47645,32559],{"class":155},[149,47647,32562],{"class":6932},[149,47649,166],{"class":325},[149,47651,43266],{"class":155},[149,47653,32571],{"class":6932},[149,47655,166],{"class":325},[149,47657,43273],{"class":155},[149,47659,32580],{"class":6932},[149,47661,166],{"class":325},[149,47663,830],{"class":309},[149,47665,1878],{"class":155},[149,47667,47668],{"class":151,"line":1090},[149,47669,43286],{"class":295},[149,47671,47672,47674,47676,47678,47680,47682,47684,47686,47688,47690,47692,47694,47696,47698,47700,47702],{"class":151,"line":1633},[149,47673,32551],{"class":309},[149,47675,43293],{"class":155},[149,47677,166],{"class":325},[149,47679,32559],{"class":155},[149,47681,32562],{"class":6932},[149,47683,166],{"class":325},[149,47685,43266],{"class":155},[149,47687,32571],{"class":6932},[149,47689,166],{"class":325},[149,47691,43310],{"class":155},[149,47693,2056],{"class":309},[149,47695,43315],{"class":155},[149,47697,32580],{"class":6932},[149,47699,166],{"class":325},[149,47701,830],{"class":309},[149,47703,1878],{"class":155},[149,47705,47706,47708,47710,47712,47714,47716,47718,47720,47722,47724,47726,47728,47730,47732,47734,47736,47738,47740,47742,47744,47746,47748],{"class":151,"line":1644},[149,47707,32551],{"class":309},[149,47709,43330],{"class":155},[149,47711,166],{"class":325},[149,47713,32559],{"class":155},[149,47715,32562],{"class":6932},[149,47717,166],{"class":325},[149,47719,43310],{"class":155},[149,47721,2056],{"class":309},[149,47723,43315],{"class":155},[149,47725,32571],{"class":6932},[149,47727,166],{"class":325},[149,47729,43310],{"class":155},[149,47731,830],{"class":309},[149,47733,43315],{"class":155},[149,47735,32580],{"class":6932},[149,47737,166],{"class":325},[149,47739,1939],{"class":309},[149,47741,2241],{"class":155},[149,47743,32589],{"class":6932},[149,47745,166],{"class":325},[149,47747,830],{"class":309},[149,47749,1878],{"class":155},[149,47751,47752],{"class":151,"line":3348},[149,47753,43375],{"class":295},[149,47755,47756,47758,47760,47762,47764,47766,47768,47770,47772,47774,47776,47778,47780,47782,47784,47786],{"class":151,"line":3362},[149,47757,32551],{"class":309},[149,47759,43382],{"class":155},[149,47761,166],{"class":325},[149,47763,32559],{"class":155},[149,47765,32562],{"class":6932},[149,47767,166],{"class":325},[149,47769,43266],{"class":155},[149,47771,32571],{"class":6932},[149,47773,166],{"class":325},[149,47775,43399],{"class":155},[149,47777,2056],{"class":309},[149,47779,43315],{"class":155},[149,47781,32580],{"class":6932},[149,47783,166],{"class":325},[149,47785,830],{"class":309},[149,47787,1878],{"class":155},[149,47789,47790,47792,47794,47796,47798,47800,47802,47804,47806,47808,47810,47812,47814,47816,47818,47820,47822,47824,47826,47828,47830,47832],{"class":151,"line":3367},[149,47791,32551],{"class":309},[149,47793,43418],{"class":155},[149,47795,166],{"class":325},[149,47797,32559],{"class":155},[149,47799,32562],{"class":6932},[149,47801,166],{"class":325},[149,47803,43399],{"class":155},[149,47805,2056],{"class":309},[149,47807,43315],{"class":155},[149,47809,32571],{"class":6932},[149,47811,166],{"class":325},[149,47813,43399],{"class":155},[149,47815,830],{"class":309},[149,47817,43315],{"class":155},[149,47819,32580],{"class":6932},[149,47821,166],{"class":325},[149,47823,2182],{"class":309},[149,47825,2241],{"class":155},[149,47827,32589],{"class":6932},[149,47829,166],{"class":325},[149,47831,1045],{"class":309},[149,47833,1878],{"class":155},[149,47835,47836],{"class":151,"line":3373},[149,47837,43463],{"class":295},[149,47839,47840],{"class":151,"line":3394},[149,47841,43468],{"class":295},[149,47843,47844,47846,47848,47850,47852,47854,47856,47858,47860,47862,47864,47866,47868,47870,47872,47874],{"class":151,"line":3399},[149,47845,32551],{"class":309},[149,47847,43475],{"class":155},[149,47849,166],{"class":325},[149,47851,36535],{"class":155},[149,47853,32580],{"class":6932},[149,47855,166],{"class":325},[149,47857,1939],{"class":309},[149,47859,2241],{"class":155},[149,47861,32635],{"class":6932},[149,47863,166],{"class":325},[149,47865,830],{"class":309},[149,47867,2241],{"class":155},[149,47869,32589],{"class":6932},[149,47871,166],{"class":325},[149,47873,830],{"class":309},[149,47875,1878],{"class":155},[149,47877,47878,47880,47882,47884,47886,47888,47890,47892,47894,47896,47898,47900,47902,47904],{"class":151,"line":3413},[149,47879,32551],{"class":309},[149,47881,43510],{"class":155},[149,47883,166],{"class":325},[149,47885,32559],{"class":155},[149,47887,32562],{"class":6932},[149,47889,166],{"class":325},[149,47891,43266],{"class":155},[149,47893,32571],{"class":6932},[149,47895,166],{"class":325},[149,47897,43527],{"class":155},[149,47899,32580],{"class":6932},[149,47901,166],{"class":325},[149,47903,830],{"class":309},[149,47905,1878],{"class":155},[149,47907,47908],{"class":151,"line":3418},[149,47909,4119],{"emptyLinePlaceholder":1800},[149,47911,47912,47914,47916],{"class":151,"line":3447},[149,47913,32507],{"class":325},[149,47915,32799],{"class":162},[149,47917,32802],{"class":155},[149,47919,47920,47922,47924,47926,47928,47930],{"class":151,"line":3452},[149,47921,43552],{"class":155},[149,47923,166],{"class":325},[149,47925,32529],{"class":309},[149,47927,36890],{"class":155},[149,47929,32529],{"class":309},[149,47931,43563],{"class":155},[149,47933,47934,47936,47938,47940,47942,47944,47946,47948,47950,47952],{"class":151,"line":3469},[149,47935,8801],{"class":155},[149,47937,166],{"class":325},[149,47939,32529],{"class":309},[149,47941,36890],{"class":155},[149,47943,32529],{"class":309},[149,47945,43578],{"class":155},[149,47947,32529],{"class":309},[149,47949,36890],{"class":155},[149,47951,32529],{"class":309},[149,47953,43587],{"class":155},[149,47955,47956,47958,47960,47962,47964,47966,47968,47970,47972,47974],{"class":151,"line":3474},[149,47957,43592],{"class":155},[149,47959,166],{"class":325},[149,47961,32529],{"class":309},[149,47963,36890],{"class":155},[149,47965,32529],{"class":309},[149,47967,43603],{"class":155},[149,47969,32529],{"class":309},[149,47971,36890],{"class":155},[149,47973,32529],{"class":309},[149,47975,43612],{"class":155},[149,47977,47978,47980,47982,47984,47986,47988,47990,47992],{"class":151,"line":3479},[149,47979,43617],{"class":155},[149,47981,166],{"class":325},[149,47983,32529],{"class":309},[149,47985,36890],{"class":155},[149,47987,32529],{"class":309},[149,47989,43628],{"class":155},[149,47991,32529],{"class":309},[149,47993,43633],{"class":155},[149,47995,47996],{"class":151,"line":3484},[149,47997,43638],{"class":295},[149,47999,48000,48002,48004,48006,48008,48010],{"class":151,"line":3498},[149,48001,16464],{"class":325},[149,48003,43645],{"class":155},[149,48005,34391],{"class":6932},[149,48007,166],{"class":325},[149,48009,830],{"class":309},[149,48011,1878],{"class":155},[149,48013,48014],{"class":151,"line":3503},[149,48015,4119],{"emptyLinePlaceholder":1800},[149,48017,48018],{"class":151,"line":4296},[149,48019,43666],{"class":295},[149,48021,48022,48024,48026,48028,48030,48032,48034],{"class":151,"line":4310},[149,48023,913],{"class":325},[149,48025,43673],{"class":162},[149,48027,319],{"class":155},[149,48029,32484],{"class":162},[149,48031,2421],{"class":155},[149,48033,32489],{"class":162},[149,48035,32492],{"class":155},[149,48037,48038],{"class":151,"line":4318},[149,48039,43688],{"class":295},[149,48041,48042,48044,48046],{"class":151,"line":4323},[149,48043,32507],{"class":325},[149,48045,32510],{"class":309},[149,48047,43697],{"class":155},[149,48049,48050,48052,48054,48056,48058,48060],{"class":151,"line":4329},[149,48051,32523],{"class":309},[149,48053,43704],{"class":155},[149,48055,32529],{"class":309},[149,48057,32532],{"class":155},[149,48059,32535],{"class":309},[149,48061,3695],{"class":155},[149,48063,48064,48066,48068,48070],{"class":151,"line":4335},[149,48065,32551],{"class":309},[149,48067,43719],{"class":155},[149,48069,166],{"class":325},[149,48071,39715],{"class":155},[149,48073,48074,48076,48078,48080,48082,48084,48086,48088,48090,48092,48094,48096,48098,48100,48102,48104,48106,48108,48110,48112,48114],{"class":151,"line":4340},[149,48075,39720],{"class":155},[149,48077,32562],{"class":6932},[149,48079,166],{"class":325},[149,48081,1939],{"class":309},[149,48083,2241],{"class":155},[149,48085,32571],{"class":6932},[149,48087,166],{"class":325},[149,48089,2068],{"class":309},[149,48091,2241],{"class":155},[149,48093,32580],{"class":6932},[149,48095,166],{"class":325},[149,48097,2232],{"class":309},[149,48099,2241],{"class":155},[149,48101,32635],{"class":6932},[149,48103,166],{"class":325},[149,48105,1045],{"class":309},[149,48107,2241],{"class":155},[149,48109,32589],{"class":6932},[149,48111,166],{"class":325},[149,48113,1939],{"class":309},[149,48115,39753],{"class":155},[149,48117,48118],{"class":151,"line":9663},[149,48119,39758],{"class":155},[149,48121,48122,48124,48126,48128,48130,48132,48134,48136,48138,48140,48142,48144,48146],{"class":151,"line":9687},[149,48123,39803],{"class":155},[149,48125,32580],{"class":6932},[149,48127,166],{"class":325},[149,48129,1939],{"class":309},[149,48131,2241],{"class":155},[149,48133,32635],{"class":6932},[149,48135,166],{"class":325},[149,48137,1045],{"class":309},[149,48139,2241],{"class":155},[149,48141,32589],{"class":6932},[149,48143,166],{"class":325},[149,48145,830],{"class":309},[149,48147,1878],{"class":155},[149,48149,48150],{"class":151,"line":9692},[149,48151,39832],{"class":155},[149,48153,48154,48156,48158,48160],{"class":151,"line":9698},[149,48155,32551],{"class":309},[149,48157,43810],{"class":155},[149,48159,166],{"class":325},[149,48161,39715],{"class":155},[149,48163,48164,48166,48168,48170,48172,48174,48176,48178,48180,48182,48184,48186,48188],{"class":151,"line":9725},[149,48165,39720],{"class":155},[149,48167,32562],{"class":6932},[149,48169,166],{"class":325},[149,48171,2068],{"class":309},[149,48173,2241],{"class":155},[149,48175,32571],{"class":6932},[149,48177,166],{"class":325},[149,48179,2068],{"class":309},[149,48181,2241],{"class":155},[149,48183,32580],{"class":6932},[149,48185,166],{"class":325},[149,48187,830],{"class":309},[149,48189,39753],{"class":155},[149,48191,48192],{"class":151,"line":9730},[149,48193,39758],{"class":155},[149,48195,48196,48198,48200,48202,48204,48206,48208,48210,48212,48214,48216,48218,48220,48222,48224,48226,48228],{"class":151,"line":9736},[149,48197,39720],{"class":155},[149,48199,32562],{"class":6932},[149,48201,166],{"class":325},[149,48203,2068],{"class":309},[149,48205,2241],{"class":155},[149,48207,32571],{"class":6932},[149,48209,166],{"class":325},[149,48211,43865],{"class":309},[149,48213,2241],{"class":155},[149,48215,32580],{"class":6932},[149,48217,166],{"class":325},[149,48219,1939],{"class":309},[149,48221,2241],{"class":155},[149,48223,32589],{"class":6932},[149,48225,166],{"class":325},[149,48227,830],{"class":309},[149,48229,39753],{"class":155},[149,48231,48232],{"class":151,"line":9748},[149,48233,39758],{"class":155},[149,48235,48236,48238,48240,48242,48244,48246,48248,48250,48252,48254,48256,48258,48260],{"class":151,"line":9760},[149,48237,39803],{"class":155},[149,48239,32580],{"class":6932},[149,48241,166],{"class":325},[149,48243,1939],{"class":309},[149,48245,2241],{"class":155},[149,48247,32635],{"class":6932},[149,48249,166],{"class":325},[149,48251,1045],{"class":309},[149,48253,2241],{"class":155},[149,48255,32589],{"class":6932},[149,48257,166],{"class":325},[149,48259,830],{"class":309},[149,48261,1878],{"class":155},[149,48263,48264],{"class":151,"line":9772},[149,48265,39832],{"class":155},[149,48267,48268,48270,48272,48274],{"class":151,"line":11430},[149,48269,32551],{"class":309},[149,48271,43926],{"class":155},[149,48273,166],{"class":325},[149,48275,39715],{"class":155},[149,48277,48278,48280,48282,48284,48286,48288,48290,48292,48294,48296,48298,48300,48302,48304,48306],{"class":151,"line":11455},[149,48279,43935],{"class":155},[149,48281,43865],{"class":309},[149,48283,2241],{"class":155},[149,48285,2068],{"class":309},[149,48287,43944],{"class":155},[149,48289,2074],{"class":309},[149,48291,2241],{"class":155},[149,48293,33776],{"class":309},[149,48295,43953],{"class":155},[149,48297,2464],{"class":309},[149,48299,2241],{"class":155},[149,48301,2062],{"class":309},[149,48303,43962],{"class":155},[149,48305,2062],{"class":309},[149,48307,39753],{"class":155},[149,48309,48310,48312,48314,48316,48318,48320,48322,48324,48326,48328,48330,48332,48334,48336,48338],{"class":151,"line":11478},[149,48311,43935],{"class":155},[149,48313,36576],{"class":309},[149,48315,2241],{"class":155},[149,48317,33776],{"class":309},[149,48319,43944],{"class":155},[149,48321,33776],{"class":309},[149,48323,2241],{"class":155},[149,48325,43865],{"class":309},[149,48327,43953],{"class":155},[149,48329,2062],{"class":309},[149,48331,2241],{"class":155},[149,48333,2074],{"class":309},[149,48335,43962],{"class":155},[149,48337,2068],{"class":309},[149,48339,39753],{"class":155},[149,48341,48342,48344,48346,48348,48350,48352,48354,48356,48358,48360,48362,48364,48366],{"class":151,"line":11502},[149,48343,39803],{"class":155},[149,48345,32580],{"class":6932},[149,48347,166],{"class":325},[149,48349,1939],{"class":309},[149,48351,2241],{"class":155},[149,48353,32635],{"class":6932},[149,48355,166],{"class":325},[149,48357,1045],{"class":309},[149,48359,2241],{"class":155},[149,48361,32589],{"class":6932},[149,48363,166],{"class":325},[149,48365,830],{"class":309},[149,48367,1878],{"class":155},[149,48369,48370],{"class":151,"line":11507},[149,48371,39832],{"class":155},[149,48373,48374,48376,48378,48380],{"class":151,"line":11512},[149,48375,32551],{"class":309},[149,48377,44037],{"class":155},[149,48379,166],{"class":325},[149,48381,39715],{"class":155},[149,48383,48384,48386,48388,48390,48392,48394,48396,48398,48400,48402,48404,48406,48408,48410,48412],{"class":151,"line":11517},[149,48385,43935],{"class":155},[149,48387,44048],{"class":309},[149,48389,2241],{"class":155},[149,48391,43865],{"class":309},[149,48393,43944],{"class":155},[149,48395,2074],{"class":309},[149,48397,2241],{"class":155},[149,48399,44061],{"class":309},[149,48401,43953],{"class":155},[149,48403,2464],{"class":309},[149,48405,2241],{"class":155},[149,48407,2470],{"class":309},[149,48409,43962],{"class":155},[149,48411,2068],{"class":309},[149,48413,39753],{"class":155},[149,48415,48416,48418,48420,48422,48424,48426,48428,48430,48432,48434,48436,48438,48440,48442,48444],{"class":151,"line":11526},[149,48417,43935],{"class":155},[149,48419,40163],{"class":309},[149,48421,2241],{"class":155},[149,48423,22758],{"class":309},[149,48425,43944],{"class":155},[149,48427,2481],{"class":309},[149,48429,2241],{"class":155},[149,48431,33207],{"class":309},[149,48433,43953],{"class":155},[149,48435,2661],{"class":309},[149,48437,2241],{"class":155},[149,48439,2068],{"class":309},[149,48441,43962],{"class":155},[149,48443,2068],{"class":309},[149,48445,39753],{"class":155},[149,48447,48448,48450,48452,48454,48456,48458,48460,48462,48464,48466,48468,48470,48472,48474,48476],{"class":151,"line":11531},[149,48449,43935],{"class":155},[149,48451,40163],{"class":309},[149,48453,2241],{"class":155},[149,48455,33776],{"class":309},[149,48457,43944],{"class":155},[149,48459,33776],{"class":309},[149,48461,2241],{"class":155},[149,48463,36576],{"class":309},[149,48465,43953],{"class":155},[149,48467,2661],{"class":309},[149,48469,2241],{"class":155},[149,48471,2068],{"class":309},[149,48473,43962],{"class":155},[149,48475,2068],{"class":309},[149,48477,39753],{"class":155},[149,48479,48480,48482,48484,48486,48488,48490,48492,48494,48496,48498,48500,48502,48504,48506,48508],{"class":151,"line":11537},[149,48481,43935],{"class":155},[149,48483,40163],{"class":309},[149,48485,2241],{"class":155},[149,48487,2481],{"class":309},[149,48489,43944],{"class":155},[149,48491,33776],{"class":309},[149,48493,2241],{"class":155},[149,48495,44158],{"class":309},[149,48497,43953],{"class":155},[149,48499,2062],{"class":309},[149,48501,2241],{"class":155},[149,48503,2068],{"class":309},[149,48505,43962],{"class":155},[149,48507,2068],{"class":309},[149,48509,39753],{"class":155},[149,48511,48512,48514,48516,48518,48520,48522,48524,48526,48528,48530,48532,48534,48536,48538,48540],{"class":151,"line":11558},[149,48513,43935],{"class":155},[149,48515,44179],{"class":309},[149,48517,2241],{"class":155},[149,48519,36576],{"class":309},[149,48521,43944],{"class":155},[149,48523,22758],{"class":309},[149,48525,2241],{"class":155},[149,48527,44192],{"class":309},[149,48529,43953],{"class":155},[149,48531,2062],{"class":309},[149,48533,2241],{"class":155},[149,48535,33776],{"class":309},[149,48537,43962],{"class":155},[149,48539,33776],{"class":309},[149,48541,39753],{"class":155},[149,48543,48544,48546,48548,48550,48552,48554,48556,48558,48560,48562,48564,48566,48568],{"class":151,"line":11564},[149,48545,39803],{"class":155},[149,48547,32580],{"class":6932},[149,48549,166],{"class":325},[149,48551,1939],{"class":309},[149,48553,2241],{"class":155},[149,48555,32635],{"class":6932},[149,48557,166],{"class":325},[149,48559,1045],{"class":309},[149,48561,2241],{"class":155},[149,48563,32589],{"class":6932},[149,48565,166],{"class":325},[149,48567,830],{"class":309},[149,48569,1878],{"class":155},[149,48571,48572],{"class":151,"line":11578},[149,48573,39832],{"class":155},[149,48575,48576,48578,48580,48582],{"class":151,"line":11584},[149,48577,32551],{"class":309},[149,48579,44245],{"class":155},[149,48581,166],{"class":325},[149,48583,39715],{"class":155},[149,48585,48586,48588,48590,48592,48594,48596,48598,48600,48602,48604,48606,48608,48610,48612,48614],{"class":151,"line":11611},[149,48587,43935],{"class":155},[149,48589,44256],{"class":309},[149,48591,2241],{"class":155},[149,48593,36576],{"class":309},[149,48595,43944],{"class":155},[149,48597,22758],{"class":309},[149,48599,2241],{"class":155},[149,48601,44192],{"class":309},[149,48603,43953],{"class":155},[149,48605,2062],{"class":309},[149,48607,2241],{"class":155},[149,48609,33776],{"class":309},[149,48611,43962],{"class":155},[149,48613,33776],{"class":309},[149,48615,39753],{"class":155},[149,48617,48618,48620,48622,48624,48626,48628,48630,48632,48634,48636,48638,48640,48642,48644,48646],{"class":151,"line":11620},[149,48619,43935],{"class":155},[149,48621,44256],{"class":309},[149,48623,2241],{"class":155},[149,48625,36646],{"class":309},[149,48627,43944],{"class":155},[149,48629,43865],{"class":309},[149,48631,2241],{"class":155},[149,48633,36646],{"class":309},[149,48635,43953],{"class":155},[149,48637,2470],{"class":309},[149,48639,2241],{"class":155},[149,48641,33776],{"class":309},[149,48643,43962],{"class":155},[149,48645,33776],{"class":309},[149,48647,39753],{"class":155},[149,48649,48650,48652,48654,48656,48658],{"class":151,"line":11626},[149,48651,44319],{"class":155},[149,48653,830],{"class":309},[149,48655,2241],{"class":155},[149,48657,830],{"class":309},[149,48659,44328],{"class":155},[149,48661,48662],{"class":151,"line":11634},[149,48663,40496],{"class":155},[149,48665,48666,48668,48670,48672,48674],{"class":151,"line":11639},[149,48667,40501],{"class":155},[149,48669,44339],{"class":309},[149,48671,2241],{"class":155},[149,48673,1045],{"class":309},[149,48675,1878],{"class":155},[149,48677,48678],{"class":151,"line":18314},[149,48679,39832],{"class":155},[149,48681,48682],{"class":151,"line":18320},[149,48683,44354],{"class":295},[149,48685,48686,48688,48690,48692,48694],{"class":151,"line":18343},[149,48687,5121],{"class":325},[149,48689,40574],{"class":155},[149,48691,27752],{"class":325},[149,48693,40579],{"class":309},[149,48695,40582],{"class":155},[149,48697,48698,48700,48702],{"class":151,"line":18349},[149,48699,6360],{"class":325},[149,48701,40594],{"class":309},[149,48703,40597],{"class":155},[149,48705,48706,48708,48710,48712,48714,48716,48718,48720,48722],{"class":151,"line":18372},[149,48707,40607],{"class":155},[149,48709,44381],{"class":6932},[149,48711,166],{"class":325},[149,48713,44386],{"class":169},[149,48715,2241],{"class":155},[149,48717,40610],{"class":6932},[149,48719,166],{"class":325},[149,48721,40615],{"class":169},[149,48723,1878],{"class":155},[149,48725,48726],{"class":151,"line":18386},[149,48727,44401],{"class":295},[149,48729,48730],{"class":151,"line":18406},[149,48731,44406],{"class":295},[149,48733,48734],{"class":151,"line":18412},[149,48735,44411],{"class":295},[149,48737,48738],{"class":151,"line":18423},[149,48739,44416],{"class":295},[149,48741,48742],{"class":151,"line":18446},[149,48743,44421],{"class":295},[149,48745,48746],{"class":151,"line":18468},[149,48747,44426],{"class":295},[149,48749,48750,48752,48754,48756,48758,48760],{"class":151,"line":18473},[149,48751,40627],{"class":325},[149,48753,40630],{"class":155},[149,48755,40633],{"class":325},[149,48757,40636],{"class":325},[149,48759,40639],{"class":309},[149,48761,5457],{"class":155},[149,48763,48764,48766,48768],{"class":151,"line":18479},[149,48765,40651],{"class":155},[149,48767,2056],{"class":309},[149,48769,1878],{"class":155},[149,48771,48772,48774,48776],{"class":151,"line":18493},[149,48773,44453],{"class":325},[149,48775,40594],{"class":309},[149,48777,40670],{"class":155},[149,48779,48780,48782,48784,48786,48788],{"class":151,"line":18506},[149,48781,44462],{"class":155},[149,48783,2056],{"class":309},[149,48785,2241],{"class":155},[149,48787,40692],{"class":309},[149,48789,1878],{"class":155},[149,48791,48792,48794,48796,48798,48800,48802],{"class":151,"line":18511},[149,48793,44475],{"class":325},[149,48795,40630],{"class":155},[149,48797,40633],{"class":325},[149,48799,40636],{"class":325},[149,48801,40639],{"class":309},[149,48803,5457],{"class":155},[149,48805,48806,48808,48810],{"class":151,"line":18525},[149,48807,44490],{"class":155},[149,48809,2056],{"class":309},[149,48811,1878],{"class":155},[149,48813,48814],{"class":151,"line":18530},[149,48815,36871],{"class":295},[149,48817,48818,48820,48822],{"class":151,"line":18536},[149,48819,32507],{"class":325},[149,48821,32799],{"class":162},[149,48823,32802],{"class":155},[149,48825,48826,48828,48830,48832],{"class":151,"line":18541},[149,48827,32807],{"class":155},[149,48829,166],{"class":325},[149,48831,32529],{"class":309},[149,48833,44517],{"class":155},[149,48835,48836,48838,48840,48842],{"class":151,"line":18555},[149,48837,32807],{"class":155},[149,48839,166],{"class":325},[149,48841,32529],{"class":309},[149,48843,44528],{"class":155},[149,48845,48846,48848,48850,48852],{"class":151,"line":18560},[149,48847,32807],{"class":155},[149,48849,166],{"class":325},[149,48851,32529],{"class":309},[149,48853,44539],{"class":155},[149,48855,48856,48858,48860,48862],{"class":151,"line":18565},[149,48857,32807],{"class":155},[149,48859,166],{"class":325},[149,48861,32529],{"class":309},[149,48863,44550],{"class":155},[149,48865,48866,48868,48870,48872],{"class":151,"line":18579},[149,48867,32807],{"class":155},[149,48869,166],{"class":325},[149,48871,32529],{"class":309},[149,48873,44561],{"class":155},[149,48875,48876,48878],{"class":151,"line":18591},[149,48877,16464],{"class":325},[149,48879,32915],{"class":155},[149,48881,48882],{"class":151,"line":18596},[149,48883,4119],{"emptyLinePlaceholder":1800},[149,48885,48886],{"class":151,"line":18609},[149,48887,44576],{"class":295},[149,48889,48890,48892,48894,48896,48898],{"class":151,"line":18614},[149,48891,3255],{"class":325},[149,48893,32926],{"class":309},[149,48895,4667],{"class":325},[149,48897,32931],{"class":169},[149,48899,5457],{"class":155},[149,48901,48902,48904,48906,48908,48910,48912,48914,48916,48918],{"class":151,"line":18619},[149,48903,32943],{"class":155},[149,48905,166],{"class":325},[149,48907,32157],{"class":155},[149,48909,32950],{"class":169},[149,48911,3424],{"class":325},[149,48913,32955],{"class":155},[149,48915,3421],{"class":325},[149,48917,32182],{"class":169},[149,48919,1878],{"class":155},[149,48921,48922,48924,48926],{"class":151,"line":18624},[149,48923,32995],{"class":155},[149,48925,166],{"class":325},[149,48927,44617],{"class":155},[149,48929,48930,48932,48934,48936,48938,48940,48942,48944],{"class":151,"line":18637},[149,48931,33005],{"class":309},[149,48933,33008],{"class":155},[149,48935,830],{"class":309},[149,48937,2241],{"class":155},[149,48939,33207],{"class":309},[149,48941,2241],{"class":155},[149,48943,33207],{"class":309},[149,48945,33021],{"class":155},[120,48947,48949],{"id":48948},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[24,48951,48952],{},"计算图片的均值与方差，用于训练中归一化处理操作",[140,48954,48956],{"className":32084,"code":48955,"language":32086,"meta":145,"style":145},"# 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",[48,48957,48958,48963,48976,48981,48987,48992,49002,49006,49011,49021,49025,49030,49040,49057,49061,49066,49078,49090,49121,49130,49140,49150,49154,49159,49174,49178,49183,49188,49193,49203,49208,49233,49237,49242,49257,49261,49274,49278,49283,49288,49293,49298,49303,49313,49323,49346,49354,49362,49370,49374,49386,49390,49395,49399,49403,49410,49430,49454,49461,49475,49480,49485,49489,49503,49507,49519],{"__ignoreMap":145},[149,48959,48960],{"class":151,"line":152},[149,48961,48962],{"class":295},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[149,48964,48965,48967,48970,48973],{"class":151,"line":193},[149,48966,32443],{"class":325},[149,48968,48969],{"class":309}," PIL",[149,48971,48972],{"class":325}," import",[149,48974,48975],{"class":155}," Image\n",[149,48977,48978],{"class":151,"line":235},[149,48979,48980],{"class":295},"# os 用来处理文件夹和文件路径\n",[149,48982,48983,48985],{"class":151,"line":340},[149,48984,32098],{"class":325},[149,48986,47011],{"class":155},[149,48988,48989],{"class":151,"line":346},[149,48990,48991],{"class":295},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[149,48993,48994,48996,48998,49000],{"class":151,"line":352},[149,48995,32098],{"class":325},[149,48997,33086],{"class":155},[149,48999,33089],{"class":325},[149,49001,33092],{"class":155},[149,49003,49004],{"class":151,"line":1021},[149,49005,4119],{"emptyLinePlaceholder":1800},[149,49007,49008],{"class":151,"line":1035},[149,49009,49010],{"class":295},"# 文件夹路径，包含所有图片文件\n",[149,49012,49013,49016,49018],{"class":151,"line":1054},[149,49014,49015],{"class":155},"folder_path ",[149,49017,166],{"class":325},[149,49019,49020],{"class":169}," 'data_cat_dog'\n",[149,49022,49023],{"class":151,"line":1072},[149,49024,4119],{"emptyLinePlaceholder":1800},[149,49026,49027],{"class":151,"line":1090},[149,49028,49029],{"class":295},"# 初始化累积变量\n",[149,49031,49032,49035,49037],{"class":151,"line":1633},[149,49033,49034],{"class":155},"total_pixels ",[149,49036,166],{"class":325},[149,49038,49039],{"class":309}," 0\n",[149,49041,49042,49045,49047,49050,49052,49054],{"class":151,"line":1644},[149,49043,49044],{"class":155},"sum_normalized_pixel_values ",[149,49046,166],{"class":325},[149,49048,49049],{"class":155}," np.zeros(",[149,49051,1939],{"class":309},[149,49053,47514],{"class":155},[149,49055,49056],{"class":295},"# 如果是RGB图像，需要三个通道的均值和方差\n",[149,49058,49059],{"class":151,"line":3348},[149,49060,4119],{"emptyLinePlaceholder":1800},[149,49062,49063],{"class":151,"line":3362},[149,49064,49065],{"class":295},"# 遍历文件夹中的图片文件\n",[149,49067,49068,49070,49073,49075],{"class":151,"line":3367},[149,49069,4743],{"class":325},[149,49071,49072],{"class":155}," root, dirs, files ",[149,49074,27752],{"class":325},[149,49076,49077],{"class":155}," os.walk(folder_path):\n",[149,49079,49080,49082,49085,49087],{"class":151,"line":3373},[149,49081,4919],{"class":325},[149,49083,49084],{"class":155}," filename ",[149,49086,27752],{"class":325},[149,49088,49089],{"class":155}," files:\n",[149,49091,49092,49094,49097,49100,49102,49105,49107,49110,49112,49115,49118],{"class":151,"line":3394},[149,49093,4216],{"class":325},[149,49095,49096],{"class":155}," filename.endswith((",[149,49098,49099],{"class":169},"'.jpg'",[149,49101,329],{"class":155},[149,49103,49104],{"class":169},"'.jpeg'",[149,49106,329],{"class":155},[149,49108,49109],{"class":169},"'.png'",[149,49111,329],{"class":155},[149,49113,49114],{"class":169},"'.bmp'",[149,49116,49117],{"class":155},")):  ",[149,49119,49120],{"class":295},"# 可根据实际情况添加其他格式\n",[149,49122,49123,49125,49127],{"class":151,"line":3399},[149,49124,47379],{"class":155},[149,49126,166],{"class":325},[149,49128,49129],{"class":155}," os.path.join(root, filename)\n",[149,49131,49132,49135,49137],{"class":151,"line":3413},[149,49133,49134],{"class":155},"            image ",[149,49136,166],{"class":325},[149,49138,49139],{"class":155}," Image.open(image_path)\n",[149,49141,49142,49145,49147],{"class":151,"line":3418},[149,49143,49144],{"class":155},"            image_array ",[149,49146,166],{"class":325},[149,49148,49149],{"class":155}," np.array(image)\n",[149,49151,49152],{"class":151,"line":3447},[149,49153,4119],{"emptyLinePlaceholder":1800},[149,49155,49156],{"class":151,"line":3452},[149,49157,49158],{"class":295},"            # 归一化像素值到0-1之间\n",[149,49160,49161,49164,49166,49169,49171],{"class":151,"line":3469},[149,49162,49163],{"class":155},"            normalized_image_array ",[149,49165,166],{"class":325},[149,49167,49168],{"class":155}," image_array ",[149,49170,2447],{"class":325},[149,49172,49173],{"class":309}," 255.0\n",[149,49175,49176],{"class":151,"line":3474},[149,49177,4119],{"emptyLinePlaceholder":1800},[149,49179,49180],{"class":151,"line":3479},[149,49181,49182],{"class":295},"            # print(image_path)\n",[149,49184,49185],{"class":151,"line":3484},[149,49186,49187],{"class":295},"            # print(normalized_image_array.shape)\n",[149,49189,49190],{"class":151,"line":3498},[149,49191,49192],{"class":295},"            # 累积归一化后的像素值和像素数量\n",[149,49194,49195,49198,49200],{"class":151,"line":3503},[149,49196,49197],{"class":155},"            total_pixels ",[149,49199,11191],{"class":325},[149,49201,49202],{"class":155}," normalized_image_array.size\n",[149,49204,49205],{"class":151,"line":4296},[149,49206,49207],{"class":295},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[149,49209,49210,49213,49215,49218,49221,49223,49225,49227,49229,49231],{"class":151,"line":4310},[149,49211,49212],{"class":155},"            sum_normalized_pixel_values ",[149,49214,11191],{"class":325},[149,49216,49217],{"class":155}," np.sum(normalized_image_array, ",[149,49219,49220],{"class":6932},"axis",[149,49222,166],{"class":325},[149,49224,319],{"class":155},[149,49226,2056],{"class":309},[149,49228,329],{"class":155},[149,49230,830],{"class":309},[149,49232,32203],{"class":155},[149,49234,49235],{"class":151,"line":4318},[149,49236,4119],{"emptyLinePlaceholder":1800},[149,49238,49239],{"class":151,"line":4323},[149,49240,49241],{"class":295},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[149,49243,49244,49247,49249,49252,49254],{"class":151,"line":4329},[149,49245,49246],{"class":155},"mean ",[149,49248,166],{"class":325},[149,49250,49251],{"class":155}," sum_normalized_pixel_values ",[149,49253,2447],{"class":325},[149,49255,49256],{"class":155}," total_pixels\n",[149,49258,49259],{"class":151,"line":4335},[149,49260,4119],{"emptyLinePlaceholder":1800},[149,49262,49263,49266,49268,49270,49272],{"class":151,"line":4340},[149,49264,49265],{"class":155},"sum_squared_diff ",[149,49267,166],{"class":325},[149,49269,49049],{"class":155},[149,49271,1939],{"class":309},[149,49273,1878],{"class":155},[149,49275,49276],{"class":151,"line":9663},[149,49277,4119],{"emptyLinePlaceholder":1800},[149,49279,49280],{"class":151,"line":9687},[149,49281,49282],{"class":295},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[149,49284,49285],{"class":151,"line":9692},[149,49286,49287],{"class":295},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[149,49289,49290],{"class":151,"line":9698},[149,49291,49292],{"class":295},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[149,49294,49295],{"class":151,"line":9725},[149,49296,49297],{"class":295},"# Image.open(image_path)：打开图片\n",[149,49299,49300],{"class":151,"line":9730},[149,49301,49302],{"class":295},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[149,49304,49305,49307,49309,49311],{"class":151,"line":9736},[149,49306,4743],{"class":325},[149,49308,49072],{"class":155},[149,49310,27752],{"class":325},[149,49312,49077],{"class":155},[149,49314,49315,49317,49319,49321],{"class":151,"line":9748},[149,49316,4919],{"class":325},[149,49318,49084],{"class":155},[149,49320,27752],{"class":325},[149,49322,49089],{"class":155},[149,49324,49325,49327,49329,49331,49333,49335,49337,49339,49341,49343],{"class":151,"line":9760},[149,49326,4216],{"class":325},[149,49328,49096],{"class":155},[149,49330,49099],{"class":169},[149,49332,329],{"class":155},[149,49334,49104],{"class":169},[149,49336,329],{"class":155},[149,49338,49109],{"class":169},[149,49340,329],{"class":155},[149,49342,49114],{"class":169},[149,49344,49345],{"class":155},")):\n",[149,49347,49348,49350,49352],{"class":151,"line":9772},[149,49349,47379],{"class":155},[149,49351,166],{"class":325},[149,49353,49129],{"class":155},[149,49355,49356,49358,49360],{"class":151,"line":11430},[149,49357,49134],{"class":155},[149,49359,166],{"class":325},[149,49361,49139],{"class":155},[149,49363,49364,49366,49368],{"class":151,"line":11455},[149,49365,49144],{"class":155},[149,49367,166],{"class":325},[149,49369,49149],{"class":155},[149,49371,49372],{"class":151,"line":11478},[149,49373,49158],{"class":295},[149,49375,49376,49378,49380,49382,49384],{"class":151,"line":11502},[149,49377,49163],{"class":155},[149,49379,166],{"class":325},[149,49381,49168],{"class":155},[149,49383,2447],{"class":325},[149,49385,49173],{"class":309},[149,49387,49388],{"class":151,"line":11507},[149,49389,49187],{"class":295},[149,49391,49392],{"class":151,"line":11512},[149,49393,49394],{"class":295},"            # print(mean.shape)\n",[149,49396,49397],{"class":151,"line":11517},[149,49398,49182],{"class":295},[149,49400,49401],{"class":151,"line":11526},[149,49402,4119],{"emptyLinePlaceholder":1800},[149,49404,49405,49408],{"class":151,"line":11531},[149,49406,49407],{"class":325},"            try",[149,49409,5457],{"class":155},[149,49411,49412,49415,49417,49420,49422,49425,49427],{"class":151,"line":11537},[149,49413,49414],{"class":155},"                diff ",[149,49416,166],{"class":325},[149,49418,49419],{"class":155}," (normalized_image_array ",[149,49421,2395],{"class":325},[149,49423,49424],{"class":155}," mean) ",[149,49426,12375],{"class":325},[149,49428,49429],{"class":309}," 2\n",[149,49431,49432,49435,49437,49440,49442,49444,49446,49448,49450,49452],{"class":151,"line":11558},[149,49433,49434],{"class":155},"                sum_squared_diff ",[149,49436,11191],{"class":325},[149,49438,49439],{"class":155}," np.sum(diff, ",[149,49441,49220],{"class":6932},[149,49443,166],{"class":325},[149,49445,319],{"class":155},[149,49447,2056],{"class":309},[149,49449,329],{"class":155},[149,49451,830],{"class":309},[149,49453,32203],{"class":155},[149,49455,49456,49459],{"class":151,"line":11564},[149,49457,49458],{"class":325},"            except",[149,49460,5457],{"class":155},[149,49462,49463,49466,49468,49470,49473],{"class":151,"line":11578},[149,49464,49465],{"class":309},"                print",[149,49467,319],{"class":155},[149,49469,1921],{"class":325},[149,49471,49472],{"class":169},"\"捕获到自定义异常\"",[149,49474,1878],{"class":155},[149,49476,49477],{"class":151,"line":11584},[149,49478,49479],{"class":295},"            # diff = (normalized_image_array - mean) ** 2\n",[149,49481,49482],{"class":151,"line":11611},[149,49483,49484],{"class":295},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[149,49486,49487],{"class":151,"line":11620},[149,49488,4119],{"emptyLinePlaceholder":1800},[149,49490,49491,49494,49496,49499,49501],{"class":151,"line":11626},[149,49492,49493],{"class":155},"variance ",[149,49495,166],{"class":325},[149,49497,49498],{"class":155}," sum_squared_diff ",[149,49500,2447],{"class":325},[149,49502,49256],{"class":155},[149,49504,49505],{"class":151,"line":11634},[149,49506,4119],{"emptyLinePlaceholder":1800},[149,49508,49509,49511,49513,49516],{"class":151,"line":11639},[149,49510,32121],{"class":309},[149,49512,319],{"class":155},[149,49514,49515],{"class":169},"\"Mean:\"",[149,49517,49518],{"class":155},", mean)\n",[149,49520,49521,49523,49525,49528],{"class":151,"line":18314},[149,49522,32121],{"class":309},[149,49524,319],{"class":155},[149,49526,49527],{"class":169},"\"Variance:\"",[149,49529,49530],{"class":155},", variance)\n",[140,49532,49534],{"className":32084,"code":49533,"language":32086,"meta":145,"style":145},"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",[48,49535,49536,49542,49548,49558,49564,49574,49588,49598,49608,49618,49622,49632,49642,49646,49650,49658,49663,49668,49687,49691,49696,49701,49706,49711,49752,49757,49767,49772,49785,49790,49795,49800,49805,49810,49814,49819,49824,49846,49850,49882,49896,49906,49916,49920,49930,49944,49954,49964,49974,49980,49984,49988,49992,49996,50000,50008,50028,50032,50036,50040,50044,50060,50064,50068,50076,50080,50084,50092,50096,50100,50104,50112,50116,50120,50124,50132,50136,50144,50148,50156,50160,50168,50172,50180,50184,50188,50196,50200,50204,50216,50240,50254,50258,50262,50266,50274,50278,50286,50290,50298,50302,50310,50314,50322,50326,50334,50338,50350,50354,50362,50366,50374,50378,50382,50386,50390,50398,50402,50418,50422,50430,50434,50438,50442,50446,50450,50454,50458,50474,50478,50490,50494,50506,50510,50522,50526,50534,50538,50546,50550,50554,50558,50564,50568,50576,50580,50596,50600,50608,50612,50628,50640,50644,50656,50660,50664,50672,50676,50680,50688,50692,50700,50704,50712,50716,50720,50762,50804,50808,50812,50828,50832,50848,50852,50856,50864,50868,50872,50884,50922,50926,50930,50938,50942,50956,50966,50972,50978,50984,50990,50994,50998,51004,51008,51012,51020,51024,51042,51046,51050,51054,51070,51074,51078,51082,51086,51090,51110,51130,51134,51138,51142,51150,51158,51162,51178,51198,51218,51222,51227,51236,51245,51250,51255,51260,51273,51278,51287,51296,51313],{"__ignoreMap":145},[149,49537,49538,49540],{"class":151,"line":152},[149,49539,32098],{"class":325},[149,49541,33528],{"class":155},[149,49543,49544,49546],{"class":151,"line":193},[149,49545,32098],{"class":325},[149,49547,33535],{"class":155},[149,49549,49550,49552,49554,49556],{"class":151,"line":235},[149,49551,32098],{"class":325},[149,49553,33546],{"class":155},[149,49555,33089],{"class":325},[149,49557,33551],{"class":155},[149,49559,49560,49562],{"class":151,"line":340},[149,49561,32098],{"class":325},[149,49563,32101],{"class":155},[149,49565,49566,49568,49570,49572],{"class":151,"line":346},[149,49567,32443],{"class":325},[149,49569,33121],{"class":155},[149,49571,32098],{"class":325},[149,49573,33568],{"class":155},[149,49575,49576,49578,49580,49582,49585],{"class":151,"line":352},[149,49577,32443],{"class":325},[149,49579,33074],{"class":155},[149,49581,32098],{"class":325},[149,49583,49584],{"class":155}," ImageFolder ",[149,49586,49587],{"class":295},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[149,49589,49590,49592,49594,49596],{"class":151,"line":1021},[149,49591,32443],{"class":325},[149,49593,33104],{"class":155},[149,49595,32098],{"class":325},[149,49597,33109],{"class":155},[149,49599,49600,49602,49604,49606],{"class":151,"line":1035},[149,49601,32098],{"class":325},[149,49603,33121],{"class":155},[149,49605,33089],{"class":325},[149,49607,33126],{"class":155},[149,49609,49610,49612,49614,49616],{"class":151,"line":1054},[149,49611,32098],{"class":325},[149,49613,33138],{"class":155},[149,49615,33089],{"class":325},[149,49617,33143],{"class":155},[149,49619,49620],{"class":151,"line":1072},[149,49621,33613],{"class":295},[149,49623,49624,49626,49628,49630],{"class":151,"line":1090},[149,49625,32443],{"class":325},[149,49627,33620],{"class":155},[149,49629,32098],{"class":325},[149,49631,44737],{"class":155},[149,49633,49634,49636,49638,49640],{"class":151,"line":1633},[149,49635,32443],{"class":325},[149,49637,32446],{"class":155},[149,49639,32098],{"class":325},[149,49641,32451],{"class":155},[149,49643,49644],{"class":151,"line":1644},[149,49645,4119],{"emptyLinePlaceholder":1800},[149,49647,49648],{"class":151,"line":3348},[149,49649,33648],{"class":295},[149,49651,49652,49654,49656],{"class":151,"line":3362},[149,49653,33653],{"class":325},[149,49655,33656],{"class":162},[149,49657,33659],{"class":155},[149,49659,49660],{"class":151,"line":3367},[149,49661,49662],{"class":295},"    # 导入自己的数据集，并进行数据处理\n",[149,49664,49665],{"class":151,"line":3373},[149,49666,49667],{"class":295},"    # 定义数据集的路径\n",[149,49669,49670,49673,49675,49677,49679,49681,49685],{"class":151,"line":3394},[149,49671,49672],{"class":309},"    ROOT_PATH",[149,49674,166],{"class":325},[149,49676,2532],{"class":325},[149,49678,2115],{"class":169},[149,49680,2421],{"class":309},[149,49682,49684],{"class":49683},"sA_wV","\u002Fdata\u002Ftrain",[149,49686,26842],{"class":169},[149,49688,49689],{"class":151,"line":3399},[149,49690,4119],{"emptyLinePlaceholder":1800},[149,49692,49693],{"class":151,"line":3413},[149,49694,49695],{"class":295},"    # 定义归一化方法\n",[149,49697,49698],{"class":151,"line":3418},[149,49699,49700],{"class":295},"    # 这里需要先计算一下数据集的均值和方差\n",[149,49702,49703],{"class":151,"line":3447},[149,49704,49705],{"class":295},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[149,49707,49708],{"class":151,"line":3452},[149,49709,49710],{"class":295},"    # 第一个参数是均值，第二个参数是方差\n",[149,49712,49713,49716,49718,49721,49724,49726,49729,49731,49734,49737,49740,49742,49745,49747,49750],{"class":151,"line":3469},[149,49714,49715],{"class":155},"    normalize",[149,49717,166],{"class":325},[149,49719,49720],{"class":155},"transforms.Normalize([",[149,49722,49723],{"class":309},"0.162",[149,49725,2241],{"class":155},[149,49727,49728],{"class":309},"0.151",[149,49730,2241],{"class":155},[149,49732,49733],{"class":309},"0.138",[149,49735,49736],{"class":155},"],[",[149,49738,49739],{"class":309},"0.058",[149,49741,2241],{"class":155},[149,49743,49744],{"class":309},"0.052",[149,49746,2241],{"class":155},[149,49748,49749],{"class":309},"0.048",[149,49751,6375],{"class":155},[149,49753,49754],{"class":151,"line":3474},[149,49755,49756],{"class":295},"    # 定义数据集处理方法变量\n",[149,49758,49759,49762,49764],{"class":151,"line":3479},[149,49760,49761],{"class":155},"    train_transform",[149,49763,166],{"class":325},[149,49765,49766],{"class":155},"transforms.Compose([\n",[149,49768,49769],{"class":151,"line":3484},[149,49770,49771],{"class":295},"        # 调整图像大小为224*224\n",[149,49773,49774,49777,49779,49781,49783],{"class":151,"line":3498},[149,49775,49776],{"class":155},"        transforms.Resize((",[149,49778,33207],{"class":309},[149,49780,2241],{"class":155},[149,49782,33207],{"class":309},[149,49784,44328],{"class":155},[149,49786,49787],{"class":151,"line":3503},[149,49788,49789],{"class":295},"        # 将图像转换为张量\n",[149,49791,49792],{"class":151,"line":4296},[149,49793,49794],{"class":155},"        transforms.ToTensor(),\n",[149,49796,49797],{"class":151,"line":4310},[149,49798,49799],{"class":155},"        normalize])\n",[149,49801,49802],{"class":151,"line":4318},[149,49803,49804],{"class":295},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[149,49806,49807],{"class":151,"line":4323},[149,49808,49809],{"class":295},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[149,49811,49812],{"class":151,"line":4329},[149,49813,4119],{"emptyLinePlaceholder":1800},[149,49815,49816],{"class":151,"line":4335},[149,49817,49818],{"class":295},"    # 加载数据集\n",[149,49820,49821],{"class":151,"line":4340},[149,49822,49823],{"class":295},"    # 传入数据集路径与处理方法\n",[149,49825,49826,49828,49830,49833,49836,49838,49841,49843],{"class":151,"line":9663},[149,49827,33664],{"class":155},[149,49829,166],{"class":325},[149,49831,49832],{"class":155},"ImageFolder(",[149,49834,49835],{"class":309},"ROOT_PATH",[149,49837,2241],{"class":155},[149,49839,49840],{"class":6932},"transform",[149,49842,166],{"class":325},[149,49844,49845],{"class":155},"train_transform)\n",[149,49847,49848],{"class":151,"line":9687},[149,49849,4119],{"emptyLinePlaceholder":1800},[149,49851,49852,49854,49856,49858,49860,49862,49864,49866,49868,49870,49872,49874,49876,49878,49880],{"class":151,"line":9692},[149,49853,33716],{"class":155},[149,49855,166],{"class":325},[149,49857,33721],{"class":155},[149,49859,33724],{"class":309},[149,49861,319],{"class":155},[149,49863,33729],{"class":309},[149,49865,2318],{"class":325},[149,49867,9074],{"class":309},[149,49869,33736],{"class":155},[149,49871,33724],{"class":309},[149,49873,319],{"class":155},[149,49875,33743],{"class":309},[149,49877,2318],{"class":325},[149,49879,9074],{"class":309},[149,49881,33750],{"class":155},[149,49883,49884,49886,49888,49890,49892,49894],{"class":151,"line":9698},[149,49885,33755],{"class":155},[149,49887,166],{"class":325},[149,49889,33760],{"class":155},[149,49891,33243],{"class":6932},[149,49893,166],{"class":325},[149,49895,33248],{"class":155},[149,49897,49898,49900,49902,49904],{"class":151,"line":9725},[149,49899,33771],{"class":6932},[149,49901,166],{"class":325},[149,49903,2062],{"class":309},[149,49905,33172],{"class":155},[149,49907,49908,49910,49912,49914],{"class":151,"line":9730},[149,49909,33783],{"class":6932},[149,49911,166],{"class":325},[149,49913,33182],{"class":309},[149,49915,33172],{"class":155},[149,49917,49918],{"class":151,"line":9736},[149,49919,33794],{"class":295},[149,49921,49922,49924,49926,49928],{"class":151,"line":9748},[149,49923,33799],{"class":6932},[149,49925,166],{"class":325},[149,49927,2258],{"class":309},[149,49929,1878],{"class":155},[149,49931,49932,49934,49936,49938,49940,49942],{"class":151,"line":9760},[149,49933,33810],{"class":155},[149,49935,166],{"class":325},[149,49937,33240],{"class":155},[149,49939,33243],{"class":6932},[149,49941,166],{"class":325},[149,49943,33821],{"class":155},[149,49945,49946,49948,49950,49952],{"class":151,"line":9772},[149,49947,33826],{"class":6932},[149,49949,166],{"class":325},[149,49951,2062],{"class":309},[149,49953,33172],{"class":155},[149,49955,49956,49958,49960,49962],{"class":151,"line":11430},[149,49957,33837],{"class":6932},[149,49959,166],{"class":325},[149,49961,33182],{"class":309},[149,49963,33172],{"class":155},[149,49965,49966,49968,49970,49972],{"class":151,"line":11455},[149,49967,33848],{"class":6932},[149,49969,166],{"class":325},[149,49971,2258],{"class":309},[149,49973,1878],{"class":155},[149,49975,49976,49978],{"class":151,"line":11478},[149,49977,5808],{"class":325},[149,49979,33861],{"class":155},[149,49981,49982],{"class":151,"line":11502},[149,49983,4119],{"emptyLinePlaceholder":1800},[149,49985,49986],{"class":151,"line":11507},[149,49987,33870],{"class":295},[149,49989,49990],{"class":151,"line":11512},[149,49991,33875],{"class":295},[149,49993,49994],{"class":151,"line":11517},[149,49995,4119],{"emptyLinePlaceholder":1800},[149,49997,49998],{"class":151,"line":11526},[149,49999,33884],{"class":295},[149,50001,50002,50004,50006],{"class":151,"line":11531},[149,50003,33653],{"class":325},[149,50005,33891],{"class":162},[149,50007,33894],{"class":155},[149,50009,50010,50012,50014,50016,50018,50020,50022,50024,50026],{"class":151,"line":11537},[149,50011,32943],{"class":155},[149,50013,166],{"class":325},[149,50015,32157],{"class":155},[149,50017,32950],{"class":169},[149,50019,3424],{"class":325},[149,50021,32955],{"class":155},[149,50023,3421],{"class":325},[149,50025,33913],{"class":169},[149,50027,1878],{"class":155},[149,50029,50030],{"class":151,"line":11558},[149,50031,4119],{"emptyLinePlaceholder":1800},[149,50033,50034],{"class":151,"line":11564},[149,50035,33928],{"class":295},[149,50037,50038],{"class":151,"line":11578},[149,50039,33933],{"class":295},[149,50041,50042],{"class":151,"line":11584},[149,50043,33938],{"class":295},[149,50045,50046,50048,50050,50052,50054,50056,50058],{"class":151,"line":11611},[149,50047,33943],{"class":155},[149,50049,166],{"class":325},[149,50051,33948],{"class":155},[149,50053,33951],{"class":6932},[149,50055,166],{"class":325},[149,50057,33956],{"class":309},[149,50059,1878],{"class":155},[149,50061,50062],{"class":151,"line":11620},[149,50063,4119],{"emptyLinePlaceholder":1800},[149,50065,50066],{"class":151,"line":11626},[149,50067,33967],{"class":295},[149,50069,50070,50072,50074],{"class":151,"line":11634},[149,50071,33972],{"class":155},[149,50073,166],{"class":325},[149,50075,33977],{"class":155},[149,50077,50078],{"class":151,"line":11639},[149,50079,4119],{"emptyLinePlaceholder":1800},[149,50081,50082],{"class":151,"line":18314},[149,50083,33986],{"class":295},[149,50085,50086,50088,50090],{"class":151,"line":18320},[149,50087,32995],{"class":155},[149,50089,166],{"class":325},[149,50091,33995],{"class":155},[149,50093,50094],{"class":151,"line":18343},[149,50095,34000],{"class":295},[149,50097,50098],{"class":151,"line":18349},[149,50099,34005],{"class":295},[149,50101,50102],{"class":151,"line":18372},[149,50103,34010],{"class":295},[149,50105,50106,50108,50110],{"class":151,"line":18386},[149,50107,34015],{"class":155},[149,50109,166],{"class":325},[149,50111,34020],{"class":155},[149,50113,50114],{"class":151,"line":18406},[149,50115,4119],{"emptyLinePlaceholder":1800},[149,50117,50118],{"class":151,"line":18412},[149,50119,34033],{"class":295},[149,50121,50122],{"class":151,"line":18423},[149,50123,34038],{"class":295},[149,50125,50126,50128,50130],{"class":151,"line":18446},[149,50127,34043],{"class":155},[149,50129,166],{"class":325},[149,50131,34048],{"class":309},[149,50133,50134],{"class":151,"line":18468},[149,50135,34053],{"class":295},[149,50137,50138,50140,50142],{"class":151,"line":18473},[149,50139,34058],{"class":155},[149,50141,166],{"class":325},[149,50143,34063],{"class":155},[149,50145,50146],{"class":151,"line":18479},[149,50147,34068],{"class":295},[149,50149,50150,50152,50154],{"class":151,"line":18493},[149,50151,34073],{"class":155},[149,50153,166],{"class":325},[149,50155,34063],{"class":155},[149,50157,50158],{"class":151,"line":18506},[149,50159,34082],{"class":295},[149,50161,50162,50164,50166],{"class":151,"line":18511},[149,50163,34087],{"class":155},[149,50165,166],{"class":325},[149,50167,34063],{"class":155},[149,50169,50170],{"class":151,"line":18525},[149,50171,34096],{"class":295},[149,50173,50174,50176,50178],{"class":151,"line":18530},[149,50175,34101],{"class":155},[149,50177,166],{"class":325},[149,50179,34063],{"class":155},[149,50181,50182],{"class":151,"line":18536},[149,50183,4119],{"emptyLinePlaceholder":1800},[149,50185,50186],{"class":151,"line":18541},[149,50187,34114],{"class":295},[149,50189,50190,50192,50194],{"class":151,"line":18555},[149,50191,34119],{"class":155},[149,50193,166],{"class":325},[149,50195,34124],{"class":155},[149,50197,50198],{"class":151,"line":18560},[149,50199,4119],{"emptyLinePlaceholder":1800},[149,50201,50202],{"class":151,"line":18565},[149,50203,34137],{"class":295},[149,50205,50206,50208,50210,50212,50214],{"class":151,"line":18579},[149,50207,4919],{"class":325},[149,50209,34144],{"class":155},[149,50211,27752],{"class":325},[149,50213,34149],{"class":309},[149,50215,34152],{"class":155},[149,50217,50218,50220,50222,50224,50226,50228,50230,50232,50234,50236,50238],{"class":151,"line":18591},[149,50219,34157],{"class":309},[149,50221,319],{"class":155},[149,50223,34162],{"class":169},[149,50225,34165],{"class":309},[149,50227,2447],{"class":169},[149,50229,34165],{"class":309},[149,50231,2115],{"class":169},[149,50233,34174],{"class":155},[149,50235,2395],{"class":325},[149,50237,830],{"class":309},[149,50239,32203],{"class":155},[149,50241,50242,50244,50246,50248,50250,50252],{"class":151,"line":18596},[149,50243,34157],{"class":309},[149,50245,319],{"class":155},[149,50247,34189],{"class":169},[149,50249,2318],{"class":325},[149,50251,2309],{"class":309},[149,50253,1878],{"class":155},[149,50255,50256],{"class":151,"line":18609},[149,50257,4119],{"emptyLinePlaceholder":1800},[149,50259,50260],{"class":151,"line":18614},[149,50261,34204],{"class":295},[149,50263,50264],{"class":151,"line":18619},[149,50265,34209],{"class":295},[149,50267,50268,50270,50272],{"class":151,"line":18624},[149,50269,34214],{"class":155},[149,50271,166],{"class":325},[149,50273,34048],{"class":309},[149,50275,50276],{"class":151,"line":18637},[149,50277,34223],{"class":295},[149,50279,50280,50282,50284],{"class":151,"line":18642},[149,50281,34228],{"class":155},[149,50283,166],{"class":325},[149,50285,4803],{"class":309},[149,50287,50288],{"class":151,"line":34339},[149,50289,34237],{"class":295},[149,50291,50292,50294,50296],{"class":151,"line":34345},[149,50293,34242],{"class":155},[149,50295,166],{"class":325},[149,50297,34048],{"class":309},[149,50299,50300],{"class":151,"line":34351},[149,50301,34251],{"class":295},[149,50303,50304,50306,50308],{"class":151,"line":34357},[149,50305,34256],{"class":155},[149,50307,166],{"class":325},[149,50309,4803],{"class":309},[149,50311,50312],{"class":151,"line":34363},[149,50313,34265],{"class":295},[149,50315,50316,50318,50320],{"class":151,"line":34374},[149,50317,34270],{"class":155},[149,50319,166],{"class":325},[149,50321,4803],{"class":309},[149,50323,50324],{"class":151,"line":34380},[149,50325,34279],{"class":295},[149,50327,50328,50330,50332],{"class":151,"line":34400},[149,50329,34284],{"class":155},[149,50331,166],{"class":325},[149,50333,4803],{"class":309},[149,50335,50336],{"class":151,"line":34406},[149,50337,34293],{"class":295},[149,50339,50340,50342,50344,50346,50348],{"class":151,"line":34417},[149,50341,5121],{"class":325},[149,50343,33307],{"class":155},[149,50345,27752],{"class":325},[149,50347,33312],{"class":309},[149,50349,34306],{"class":155},[149,50351,50352],{"class":151,"line":34423},[149,50353,34311],{"class":295},[149,50355,50356,50358,50360],{"class":151,"line":34429},[149,50357,34316],{"class":155},[149,50359,166],{"class":325},[149,50361,34321],{"class":155},[149,50363,50364],{"class":151,"line":34435},[149,50365,34326],{"class":295},[149,50367,50368,50370,50372],{"class":151,"line":34441},[149,50369,34331],{"class":155},[149,50371,166],{"class":325},[149,50373,34336],{"class":155},[149,50375,50376],{"class":151,"line":34447},[149,50377,34342],{"class":295},[149,50379,50380],{"class":151,"line":34453},[149,50381,34348],{"class":155},[149,50383,50384],{"class":151,"line":34459},[149,50385,34354],{"class":295},[149,50387,50388],{"class":151,"line":34479},[149,50389,34360],{"class":295},[149,50391,50392,50394,50396],{"class":151,"line":34485},[149,50393,34366],{"class":155},[149,50395,166],{"class":325},[149,50397,34371],{"class":155},[149,50399,50400],{"class":151,"line":34501},[149,50401,34377],{"class":295},[149,50403,50404,50406,50408,50410,50412,50414,50416],{"class":151,"line":34507},[149,50405,34383],{"class":155},[149,50407,166],{"class":325},[149,50409,34388],{"class":155},[149,50411,34391],{"class":6932},[149,50413,166],{"class":325},[149,50415,830],{"class":309},[149,50417,1878],{"class":155},[149,50419,50420],{"class":151,"line":34521},[149,50421,34403],{"class":295},[149,50423,50424,50426,50428],{"class":151,"line":34527},[149,50425,34409],{"class":155},[149,50427,166],{"class":325},[149,50429,34414],{"class":155},[149,50431,50432],{"class":151,"line":34542},[149,50433,34420],{"class":295},[149,50435,50436],{"class":151,"line":34548},[149,50437,34426],{"class":155},[149,50439,50440],{"class":151,"line":34557},[149,50441,34432],{"class":295},[149,50443,50444],{"class":151,"line":34563},[149,50445,34438],{"class":155},[149,50447,50448],{"class":151,"line":34572},[149,50449,34444],{"class":295},[149,50451,50452],{"class":151,"line":34578},[149,50453,34450],{"class":155},[149,50455,50456],{"class":151,"line":34584},[149,50457,34456],{"class":295},[149,50459,50460,50462,50464,50466,50468,50470,50472],{"class":151,"line":34593},[149,50461,34462],{"class":155},[149,50463,11191],{"class":325},[149,50465,34467],{"class":155},[149,50467,2318],{"class":325},[149,50469,34472],{"class":155},[149,50471,2056],{"class":309},[149,50473,1878],{"class":155},[149,50475,50476],{"class":151,"line":34599},[149,50477,34482],{"class":295},[149,50479,50480,50482,50484,50486,50488],{"class":151,"line":34610},[149,50481,34488],{"class":155},[149,50483,11191],{"class":325},[149,50485,34493],{"class":155},[149,50487,4667],{"class":325},[149,50489,34498],{"class":155},[149,50491,50492],{"class":151,"line":34616},[149,50493,34504],{"class":295},[149,50495,50496,50498,50500,50502,50504],{"class":151,"line":34635},[149,50497,34510],{"class":155},[149,50499,11191],{"class":325},[149,50501,34472],{"class":155},[149,50503,2056],{"class":309},[149,50505,1878],{"class":155},[149,50507,50508],{"class":151,"line":34641},[149,50509,34524],{"class":295},[149,50511,50512,50514,50516,50518,50520],{"class":151,"line":34652},[149,50513,5121],{"class":325},[149,50515,34532],{"class":155},[149,50517,27752],{"class":325},[149,50519,33312],{"class":309},[149,50521,34539],{"class":155},[149,50523,50524],{"class":151,"line":34658},[149,50525,34545],{"class":295},[149,50527,50528,50530,50532],{"class":151,"line":34678},[149,50529,34316],{"class":155},[149,50531,166],{"class":325},[149,50533,34321],{"class":155},[149,50535,50536],{"class":151,"line":34694},[149,50537,34560],{"class":295},[149,50539,50540,50542,50544],{"class":151,"line":34700},[149,50541,34331],{"class":155},[149,50543,166],{"class":325},[149,50545,34336],{"class":155},[149,50547,50548],{"class":151,"line":34714},[149,50549,34575],{"class":295},[149,50551,50552],{"class":151,"line":34720},[149,50553,34581],{"class":155},[149,50555,50556],{"class":151,"line":34726},[149,50557,38062],{"class":295},[149,50559,50560,50562],{"class":151,"line":34737},[149,50561,34587],{"class":325},[149,50563,34590],{"class":155},[149,50565,50566],{"class":151,"line":34743},[149,50567,34596],{"class":295},[149,50569,50570,50572,50574],{"class":151,"line":34749},[149,50571,38077],{"class":155},[149,50573,166],{"class":325},[149,50575,34371],{"class":155},[149,50577,50578],{"class":151,"line":34759},[149,50579,34613],{"class":295},[149,50581,50582,50584,50586,50588,50590,50592,50594],{"class":151,"line":34765},[149,50583,38090],{"class":155},[149,50585,166],{"class":325},[149,50587,34388],{"class":155},[149,50589,34391],{"class":6932},[149,50591,166],{"class":325},[149,50593,830],{"class":309},[149,50595,1878],{"class":155},[149,50597,50598],{"class":151,"line":34776},[149,50599,34638],{"class":295},[149,50601,50602,50604,50606],{"class":151,"line":34782},[149,50603,38111],{"class":155},[149,50605,166],{"class":325},[149,50607,34414],{"class":155},[149,50609,50610],{"class":151,"line":34792},[149,50611,34655],{"class":295},[149,50613,50614,50616,50618,50620,50622,50624,50626],{"class":151,"line":34797},[149,50615,38124],{"class":155},[149,50617,11191],{"class":325},[149,50619,38129],{"class":155},[149,50621,2318],{"class":325},[149,50623,34472],{"class":155},[149,50625,2056],{"class":309},[149,50627,1878],{"class":155},[149,50629,50630,50632,50634,50636,50638],{"class":151,"line":34803},[149,50631,38142],{"class":155},[149,50633,11191],{"class":325},[149,50635,34493],{"class":155},[149,50637,4667],{"class":325},[149,50639,34498],{"class":155},[149,50641,50642],{"class":151,"line":34852},[149,50643,38155],{"class":295},[149,50645,50646,50648,50650,50652,50654],{"class":151,"line":34899},[149,50647,38160],{"class":155},[149,50649,11191],{"class":325},[149,50651,34472],{"class":155},[149,50653,2056],{"class":309},[149,50655,1878],{"class":155},[149,50657,50658],{"class":151,"line":34904},[149,50659,34717],{"class":295},[149,50661,50662],{"class":151,"line":34910},[149,50663,34723],{"class":295},[149,50665,50666,50668,50670],{"class":151,"line":34929},[149,50667,34729],{"class":155},[149,50669,2447],{"class":325},[149,50671,34734],{"class":155},[149,50673,50674],{"class":151,"line":34935},[149,50675,34740],{"class":295},[149,50677,50678],{"class":151,"line":34955},[149,50679,34746],{"class":295},[149,50681,50682,50684,50686],{"class":151,"line":34961},[149,50683,34752],{"class":155},[149,50685,2447],{"class":325},[149,50687,34734],{"class":155},[149,50689,50690],{"class":151,"line":34967},[149,50691,34762],{"class":295},[149,50693,50694,50696,50698],{"class":151,"line":34977},[149,50695,34768],{"class":155},[149,50697,2447],{"class":325},[149,50699,34773],{"class":155},[149,50701,50702],{"class":151,"line":34982},[149,50703,34779],{"class":295},[149,50705,50706,50708,50710],{"class":151,"line":34988},[149,50707,34785],{"class":155},[149,50709,2447],{"class":325},[149,50711,34773],{"class":155},[149,50713,50714],{"class":151,"line":35004},[149,50715,4119],{"emptyLinePlaceholder":1800},[149,50717,50718],{"class":151,"line":35049},[149,50719,34800],{"class":295},[149,50721,50722,50724,50726,50728,50730,50732,50734,50736,50738,50740,50742,50744,50746,50748,50750,50752,50754,50756,50758,50760],{"class":151,"line":35055},[149,50723,34157],{"class":309},[149,50725,319],{"class":155},[149,50727,5310],{"class":169},[149,50729,34165],{"class":309},[149,50731,34814],{"class":169},[149,50733,2756],{"class":309},[149,50735,34819],{"class":325},[149,50737,2805],{"class":309},[149,50739,34824],{"class":169},[149,50741,2756],{"class":309},[149,50743,34819],{"class":325},[149,50745,2805],{"class":309},[149,50747,5310],{"class":169},[149,50749,34835],{"class":155},[149,50751,2395],{"class":325},[149,50753,830],{"class":309},[149,50755,34842],{"class":155},[149,50757,2395],{"class":325},[149,50759,830],{"class":309},[149,50761,34849],{"class":155},[149,50763,50764,50766,50768,50770,50772,50774,50776,50778,50780,50782,50784,50786,50788,50790,50792,50794,50796,50798,50800,50802],{"class":151,"line":35061},[149,50765,34157],{"class":309},[149,50767,319],{"class":155},[149,50769,5310],{"class":169},[149,50771,34165],{"class":309},[149,50773,34863],{"class":169},[149,50775,2756],{"class":309},[149,50777,34819],{"class":325},[149,50779,2805],{"class":309},[149,50781,34872],{"class":169},[149,50783,2756],{"class":309},[149,50785,34819],{"class":325},[149,50787,2805],{"class":309},[149,50789,5310],{"class":169},[149,50791,34883],{"class":155},[149,50793,2395],{"class":325},[149,50795,830],{"class":309},[149,50797,34890],{"class":155},[149,50799,2395],{"class":325},[149,50801,830],{"class":309},[149,50803,34849],{"class":155},[149,50805,50806],{"class":151,"line":35067},[149,50807,4119],{"emptyLinePlaceholder":1800},[149,50809,50810],{"class":151,"line":35078},[149,50811,34907],{"class":295},[149,50813,50814,50816,50818,50820,50822,50824,50826],{"class":151,"line":35084},[149,50815,4216],{"class":325},[149,50817,34915],{"class":155},[149,50819,2395],{"class":325},[149,50821,830],{"class":309},[149,50823,2799],{"class":155},[149,50825,2819],{"class":325},[149,50827,34926],{"class":155},[149,50829,50830],{"class":151,"line":35090},[149,50831,34932],{"class":295},[149,50833,50834,50836,50838,50840,50842,50844,50846],{"class":151,"line":35096},[149,50835,34938],{"class":155},[149,50837,1910],{"class":309},[149,50839,166],{"class":325},[149,50841,34945],{"class":155},[149,50843,2395],{"class":325},[149,50845,830],{"class":309},[149,50847,34952],{"class":155},[149,50849,50850],{"class":151,"line":35114},[149,50851,34958],{"class":295},[149,50853,50854],{"class":151,"line":35128},[149,50855,34964],{"class":295},[149,50857,50858,50860,50862],{"class":151,"line":35137},[149,50859,34970],{"class":155},[149,50861,166],{"class":325},[149,50863,34020],{"class":155},[149,50865,50866],{"class":151,"line":35146},[149,50867,4119],{"emptyLinePlaceholder":1800},[149,50869,50870],{"class":151,"line":35155},[149,50871,34985],{"class":295},[149,50873,50874,50876,50878,50880,50882],{"class":151,"line":35164},[149,50875,34991],{"class":155},[149,50877,166],{"class":325},[149,50879,34996],{"class":155},[149,50881,2395],{"class":325},[149,50883,35001],{"class":155},[149,50885,50886,50888,50890,50892,50894,50896,50898,50900,50902,50904,50906,50908,50910,50912,50914,50916,50918,50920],{"class":151,"line":35170},[149,50887,34157],{"class":309},[149,50889,319],{"class":155},[149,50891,35011],{"class":169},[149,50893,2756],{"class":309},[149,50895,35016],{"class":325},[149,50897,2805],{"class":309},[149,50899,2407],{"class":169},[149,50901,2756],{"class":309},[149,50903,35016],{"class":325},[149,50905,2805],{"class":309},[149,50907,35029],{"class":169},[149,50909,35032],{"class":155},[149,50911,35035],{"class":325},[149,50913,2767],{"class":309},[149,50915,35040],{"class":155},[149,50917,2191],{"class":325},[149,50919,2767],{"class":309},[149,50921,32203],{"class":155},[149,50923,50924],{"class":151,"line":35176},[149,50925,38439],{"class":295},[149,50927,50928],{"class":151,"line":35184},[149,50929,38444],{"class":295},[149,50931,50932,50934,50936],{"class":151,"line":35189},[149,50933,38449],{"class":155},[149,50935,35073],{"class":169},[149,50937,1878],{"class":155},[149,50939,50940],{"class":151,"line":35195},[149,50941,35093],{"class":295},[149,50943,50944,50946,50948,50950,50952,50954],{"class":151,"line":35206},[149,50945,35099],{"class":155},[149,50947,166],{"class":325},[149,50949,35104],{"class":155},[149,50951,35107],{"class":6932},[149,50953,166],{"class":325},[149,50955,3270],{"class":155},[149,50957,50958,50960,50962,50964],{"class":151,"line":35212},[149,50959,35117],{"class":169},[149,50961,2720],{"class":155},[149,50963,35122],{"class":309},[149,50965,35125],{"class":155},[149,50967,50968,50970],{"class":151,"line":35232},[149,50969,35131],{"class":169},[149,50971,35134],{"class":155},[149,50973,50974,50976],{"class":151,"line":35238},[149,50975,35140],{"class":169},[149,50977,35143],{"class":155},[149,50979,50980,50982],{"class":151,"line":35244},[149,50981,35149],{"class":169},[149,50983,35152],{"class":155},[149,50985,50986,50988],{"class":151,"line":35250},[149,50987,35158],{"class":169},[149,50989,35161],{"class":155},[149,50991,50992],{"class":151,"line":35267},[149,50993,35167],{"class":155},[149,50995,50996],{"class":151,"line":35273},[149,50997,35173],{"class":295},[149,50999,51000,51002],{"class":151,"line":35279},[149,51001,5808],{"class":325},[149,51003,35181],{"class":155},[149,51005,51006],{"class":151,"line":35285},[149,51007,4119],{"emptyLinePlaceholder":1800},[149,51009,51010],{"class":151,"line":35291},[149,51011,35192],{"class":295},[149,51013,51014,51016,51018],{"class":151,"line":35297},[149,51015,33653],{"class":325},[149,51017,35200],{"class":162},[149,51019,35203],{"class":155},[149,51021,51022],{"class":151,"line":35324},[149,51023,35209],{"class":295},[149,51025,51026,51028,51030,51032,51034,51036,51038,51040],{"class":151,"line":35348},[149,51027,35215],{"class":155},[149,51029,33399],{"class":6932},[149,51031,166],{"class":325},[149,51033,319],{"class":155},[149,51035,2361],{"class":309},[149,51037,2241],{"class":155},[149,51039,2157],{"class":309},[149,51041,32203],{"class":155},[149,51043,51044],{"class":151,"line":35354},[149,51045,35235],{"class":295},[149,51047,51048],{"class":151,"line":35360},[149,51049,35241],{"class":295},[149,51051,51052],{"class":151,"line":35366},[149,51053,35247],{"class":295},[149,51055,51056,51058,51060,51062,51064,51066,51068],{"class":151,"line":35377},[149,51057,33433],{"class":155},[149,51059,830],{"class":309},[149,51061,2241],{"class":155},[149,51063,1045],{"class":309},[149,51065,2241],{"class":155},[149,51067,830],{"class":309},[149,51069,1878],{"class":155},[149,51071,51072],{"class":151,"line":35388},[149,51073,35270],{"class":295},[149,51075,51076],{"class":151,"line":35394},[149,51077,35276],{"class":295},[149,51079,51080],{"class":151,"line":35411},[149,51081,35282],{"class":295},[149,51083,51084],{"class":151,"line":35434},[149,51085,35288],{"class":295},[149,51087,51088],{"class":151,"line":35457},[149,51089,35294],{"class":295},[149,51091,51092,51094,51096,51098,51100,51102,51104,51106,51108],{"class":151,"line":35463},[149,51093,35300],{"class":155},[149,51095,35303],{"class":169},[149,51097,35306],{"class":155},[149,51099,35309],{"class":169},[149,51101,2241],{"class":155},[149,51103,35314],{"class":6932},[149,51105,166],{"class":325},[149,51107,35319],{"class":169},[149,51109,1878],{"class":155},[149,51111,51112,51114,51116,51118,51120,51122,51124,51126,51128],{"class":151,"line":35468},[149,51113,35300],{"class":155},[149,51115,35303],{"class":169},[149,51117,35331],{"class":155},[149,51119,35334],{"class":169},[149,51121,2241],{"class":155},[149,51123,35314],{"class":6932},[149,51125,166],{"class":325},[149,51127,35343],{"class":169},[149,51129,1878],{"class":155},[149,51131,51132],{"class":151,"line":35477},[149,51133,35351],{"class":295},[149,51135,51136],{"class":151,"line":35487},[149,51137,35357],{"class":155},[149,51139,51140],{"class":151,"line":35493},[149,51141,35363],{"class":295},[149,51143,51144,51146,51148],{"class":151,"line":35498},[149,51145,35369],{"class":155},[149,51147,35372],{"class":169},[149,51149,1878],{"class":155},[149,51151,51152,51154,51156],{"class":151,"line":35504},[149,51153,35380],{"class":155},[149,51155,35383],{"class":169},[149,51157,1878],{"class":155},[149,51159,51160],{"class":151,"line":35517},[149,51161,35391],{"class":295},[149,51163,51164,51166,51168,51170,51172,51174,51176],{"class":151,"line":35523},[149,51165,33433],{"class":155},[149,51167,830],{"class":309},[149,51169,2241],{"class":155},[149,51171,1045],{"class":309},[149,51173,2241],{"class":155},[149,51175,1045],{"class":309},[149,51177,1878],{"class":155},[149,51179,51180,51182,51184,51186,51188,51190,51192,51194,51196],{"class":151,"line":35534},[149,51181,35300],{"class":155},[149,51183,35303],{"class":169},[149,51185,35418],{"class":155},[149,51187,35309],{"class":169},[149,51189,2241],{"class":155},[149,51191,35314],{"class":6932},[149,51193,166],{"class":325},[149,51195,35429],{"class":169},[149,51197,1878],{"class":155},[149,51199,51200,51202,51204,51206,51208,51210,51212,51214,51216],{"class":151,"line":35545},[149,51201,35300],{"class":155},[149,51203,35303],{"class":169},[149,51205,35441],{"class":155},[149,51207,35334],{"class":169},[149,51209,2241],{"class":155},[149,51211,35314],{"class":6932},[149,51213,166],{"class":325},[149,51215,35452],{"class":169},[149,51217,1878],{"class":155},[149,51219,51220],{"class":151,"line":35564},[149,51221,35460],{"class":295},[149,51223,51225],{"class":151,"line":51224},219,[149,51226,35357],{"class":155},[149,51228,51230,51232,51234],{"class":151,"line":51229},220,[149,51231,35369],{"class":155},[149,51233,35303],{"class":169},[149,51235,1878],{"class":155},[149,51237,51239,51241,51243],{"class":151,"line":51238},221,[149,51240,35380],{"class":155},[149,51242,35482],{"class":169},[149,51244,1878],{"class":155},[149,51246,51248],{"class":151,"line":51247},222,[149,51249,35490],{"class":155},[149,51251,51253],{"class":151,"line":51252},223,[149,51254,4119],{"emptyLinePlaceholder":1800},[149,51256,51258],{"class":151,"line":51257},224,[149,51259,35501],{"class":295},[149,51261,51263,51265,51267,51269,51271],{"class":151,"line":51262},225,[149,51264,3255],{"class":325},[149,51266,32926],{"class":309},[149,51268,4667],{"class":325},[149,51270,32931],{"class":169},[149,51272,5457],{"class":155},[149,51274,51276],{"class":151,"line":51275},226,[149,51277,35520],{"class":295},[149,51279,51281,51283,51285],{"class":151,"line":51280},227,[149,51282,46252],{"class":155},[149,51284,166],{"class":325},[149,51286,46257],{"class":155},[149,51288,51290,51292,51294],{"class":151,"line":51289},228,[149,51291,35537],{"class":155},[149,51293,166],{"class":325},[149,51295,35542],{"class":155},[149,51297,51299,51301,51303,51305,51307,51309,51311],{"class":151,"line":51298},229,[149,51300,35099],{"class":155},[149,51302,166],{"class":325},[149,51304,46274],{"class":155},[149,51306,35555],{"class":6932},[149,51308,166],{"class":325},[149,51310,2767],{"class":309},[149,51312,1878],{"class":155},[149,51314,51316],{"class":151,"line":51315},230,[149,51317,35567],{"class":155},[120,51319,51321],{"id":51320},"_242测试代码","2.4.2.测试代码",[24,51323,51324],{},"使用测试集进行测试与推理",[140,51326,51328],{"className":32084,"code":51327,"language":32086,"meta":145,"style":145},"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",[48,51329,51330,51336,51346,51356,51367,51377,51381,51385,51393,51398,51402,51419,51423,51427,51431,51435,51439,51471,51475,51483,51487,51499,51503,51507,51511,51515,51519,51523,51527,51531,51549,51563,51567,51577,51587,51597,51603,51607,51611,51619,51623,51639,51647,51651,51655,51663,51671,51675,51679,51683,51687,51693,51697,51707,51715,51723,51727,51731,51735,51743,51747,51763,51767,51771,51775,51787,51791,51803,51807,51811,51823,51827,51837,51841,51845,51857,51861,51869,51873,51877,51885,51889,51897,51901,51905,51909,51913,51917,51933,51941,51945,51949,51967,51973,51977,51987,51995,52003,52007,52011,52015,52019,52027,52031,52047,52051,52059,52067],{"__ignoreMap":145},[149,51331,51332,51334],{"class":151,"line":152},[149,51333,32098],{"class":325},[149,51335,32101],{"class":155},[149,51337,51338,51340,51342,51344],{"class":151,"line":193},[149,51339,32098],{"class":325},[149,51341,33121],{"class":155},[149,51343,33089],{"class":325},[149,51345,33126],{"class":155},[149,51347,51348,51350,51352,51354],{"class":151,"line":235},[149,51349,32443],{"class":325},[149,51351,33104],{"class":155},[149,51353,32098],{"class":325},[149,51355,33109],{"class":155},[149,51357,51358,51360,51362,51364],{"class":151,"line":340},[149,51359,32443],{"class":325},[149,51361,33074],{"class":155},[149,51363,32098],{"class":325},[149,51365,51366],{"class":155}," ImageFolder\n",[149,51368,51369,51371,51373,51375],{"class":151,"line":346},[149,51370,32443],{"class":325},[149,51372,33620],{"class":155},[149,51374,32098],{"class":325},[149,51376,46346],{"class":155},[149,51378,51379],{"class":151,"line":352},[149,51380,4119],{"emptyLinePlaceholder":1800},[149,51382,51383],{"class":151,"line":1021},[149,51384,35657],{"class":295},[149,51386,51387,51389,51391],{"class":151,"line":1035},[149,51388,33653],{"class":325},[149,51390,35664],{"class":162},[149,51392,33659],{"class":155},[149,51394,51395],{"class":151,"line":1054},[149,51396,51397],{"class":295},"   # 导入自己的数据集，并进行数据处理\n",[149,51399,51400],{"class":151,"line":1072},[149,51401,49667],{"class":295},[149,51403,51404,51406,51408,51410,51412,51414,51417],{"class":151,"line":1090},[149,51405,49672],{"class":309},[149,51407,166],{"class":325},[149,51409,2532],{"class":325},[149,51411,2115],{"class":169},[149,51413,2421],{"class":309},[149,51415,51416],{"class":49683},"\u002Fdata\u002Ftest",[149,51418,26842],{"class":169},[149,51420,51421],{"class":151,"line":1633},[149,51422,4119],{"emptyLinePlaceholder":1800},[149,51424,51425],{"class":151,"line":1644},[149,51426,49695],{"class":295},[149,51428,51429],{"class":151,"line":3348},[149,51430,49700],{"class":295},[149,51432,51433],{"class":151,"line":3362},[149,51434,49705],{"class":295},[149,51436,51437],{"class":151,"line":3367},[149,51438,49710],{"class":295},[149,51440,51441,51443,51445,51447,51449,51451,51453,51455,51457,51459,51461,51463,51465,51467,51469],{"class":151,"line":3373},[149,51442,49715],{"class":155},[149,51444,166],{"class":325},[149,51446,49720],{"class":155},[149,51448,49723],{"class":309},[149,51450,2241],{"class":155},[149,51452,49728],{"class":309},[149,51454,2241],{"class":155},[149,51456,49733],{"class":309},[149,51458,49736],{"class":155},[149,51460,49739],{"class":309},[149,51462,2241],{"class":155},[149,51464,49744],{"class":309},[149,51466,2241],{"class":155},[149,51468,49749],{"class":309},[149,51470,6375],{"class":155},[149,51472,51473],{"class":151,"line":3394},[149,51474,49756],{"class":295},[149,51476,51477,51479,51481],{"class":151,"line":3399},[149,51478,49761],{"class":155},[149,51480,166],{"class":325},[149,51482,49766],{"class":155},[149,51484,51485],{"class":151,"line":3413},[149,51486,49771],{"class":295},[149,51488,51489,51491,51493,51495,51497],{"class":151,"line":3418},[149,51490,49776],{"class":155},[149,51492,33207],{"class":309},[149,51494,2241],{"class":155},[149,51496,33207],{"class":309},[149,51498,44328],{"class":155},[149,51500,51501],{"class":151,"line":3447},[149,51502,49789],{"class":295},[149,51504,51505],{"class":151,"line":3452},[149,51506,49794],{"class":155},[149,51508,51509],{"class":151,"line":3469},[149,51510,49799],{"class":155},[149,51512,51513],{"class":151,"line":3474},[149,51514,49804],{"class":295},[149,51516,51517],{"class":151,"line":3479},[149,51518,49809],{"class":295},[149,51520,51521],{"class":151,"line":3484},[149,51522,4119],{"emptyLinePlaceholder":1800},[149,51524,51525],{"class":151,"line":3498},[149,51526,49818],{"class":295},[149,51528,51529],{"class":151,"line":3503},[149,51530,49823],{"class":295},[149,51532,51533,51535,51537,51539,51541,51543,51545,51547],{"class":151,"line":4296},[149,51534,35671],{"class":155},[149,51536,166],{"class":325},[149,51538,49832],{"class":155},[149,51540,49835],{"class":309},[149,51542,2241],{"class":155},[149,51544,49840],{"class":6932},[149,51546,166],{"class":325},[149,51548,49845],{"class":155},[149,51550,51551,51553,51555,51557,51559,51561],{"class":151,"line":4310},[149,51552,35728],{"class":155},[149,51554,166],{"class":325},[149,51556,33240],{"class":155},[149,51558,33243],{"class":6932},[149,51560,166],{"class":325},[149,51562,35739],{"class":155},[149,51564,51565],{"class":151,"line":4318},[149,51566,35744],{"class":295},[149,51568,51569,51571,51573,51575],{"class":151,"line":4323},[149,51570,35749],{"class":6932},[149,51572,166],{"class":325},[149,51574,830],{"class":309},[149,51576,33172],{"class":155},[149,51578,51579,51581,51583,51585],{"class":151,"line":4329},[149,51580,35760],{"class":6932},[149,51582,166],{"class":325},[149,51584,33182],{"class":309},[149,51586,33172],{"class":155},[149,51588,51589,51591,51593,51595],{"class":151,"line":4335},[149,51590,35771],{"class":6932},[149,51592,166],{"class":325},[149,51594,2056],{"class":309},[149,51596,1878],{"class":155},[149,51598,51599,51601],{"class":151,"line":4340},[149,51600,5808],{"class":325},[149,51602,35784],{"class":155},[149,51604,51605],{"class":151,"line":9663},[149,51606,4119],{"emptyLinePlaceholder":1800},[149,51608,51609],{"class":151,"line":9687},[149,51610,35793],{"class":295},[149,51612,51613,51615,51617],{"class":151,"line":9692},[149,51614,33653],{"class":325},[149,51616,35800],{"class":162},[149,51618,35803],{"class":155},[149,51620,51621],{"class":151,"line":9698},[149,51622,35808],{"class":295},[149,51624,51625,51627,51629,51631,51633,51635,51637],{"class":151,"line":9725},[149,51626,32943],{"class":155},[149,51628,166],{"class":325},[149,51630,32950],{"class":169},[149,51632,3424],{"class":325},[149,51634,32955],{"class":155},[149,51636,3421],{"class":325},[149,51638,35825],{"class":169},[149,51640,51641,51643,51645],{"class":151,"line":9730},[149,51642,32995],{"class":155},[149,51644,166],{"class":325},[149,51646,33995],{"class":155},[149,51648,51649],{"class":151,"line":9736},[149,51650,4119],{"emptyLinePlaceholder":1800},[149,51652,51653],{"class":151,"line":9748},[149,51654,35842],{"class":295},[149,51656,51657,51659,51661],{"class":151,"line":9760},[149,51658,35847],{"class":155},[149,51660,166],{"class":325},[149,51662,34048],{"class":309},[149,51664,51665,51667,51669],{"class":151,"line":9772},[149,51666,35856],{"class":155},[149,51668,166],{"class":325},[149,51670,4803],{"class":309},[149,51672,51673],{"class":151,"line":11430},[149,51674,4119],{"emptyLinePlaceholder":1800},[149,51676,51677],{"class":151,"line":11455},[149,51678,35869],{"class":295},[149,51680,51681],{"class":151,"line":11478},[149,51682,35874],{"class":295},[149,51684,51685],{"class":151,"line":11502},[149,51686,35879],{"class":295},[149,51688,51689,51691],{"class":151,"line":11507},[149,51690,35884],{"class":325},[149,51692,34590],{"class":155},[149,51694,51695],{"class":151,"line":11512},[149,51696,35891],{"class":295},[149,51698,51699,51701,51703,51705],{"class":151,"line":11517},[149,51700,5121],{"class":325},[149,51702,35898],{"class":155},[149,51704,27752],{"class":325},[149,51706,35903],{"class":155},[149,51708,51709,51711,51713],{"class":151,"line":11526},[149,51710,35908],{"class":155},[149,51712,166],{"class":325},[149,51714,35913],{"class":155},[149,51716,51717,51719,51721],{"class":151,"line":11531},[149,51718,35918],{"class":155},[149,51720,166],{"class":325},[149,51722,35923],{"class":155},[149,51724,51725],{"class":151,"line":11537},[149,51726,35928],{"class":295},[149,51728,51729],{"class":151,"line":11558},[149,51730,34581],{"class":155},[149,51732,51733],{"class":151,"line":11564},[149,51734,35937],{"class":295},[149,51736,51737,51739,51741],{"class":151,"line":11578},[149,51738,34366],{"class":155},[149,51740,166],{"class":325},[149,51742,35946],{"class":155},[149,51744,51745],{"class":151,"line":11584},[149,51746,35951],{"class":295},[149,51748,51749,51751,51753,51755,51757,51759,51761],{"class":151,"line":11611},[149,51750,34383],{"class":155},[149,51752,166],{"class":325},[149,51754,34388],{"class":155},[149,51756,34391],{"class":6932},[149,51758,166],{"class":325},[149,51760,830],{"class":309},[149,51762,1878],{"class":155},[149,51764,51765],{"class":151,"line":11620},[149,51766,35972],{"class":295},[149,51768,51769],{"class":151,"line":11626},[149,51770,35977],{"class":295},[149,51772,51773],{"class":151,"line":11634},[149,51774,35982],{"class":295},[149,51776,51777,51779,51781,51783,51785],{"class":151,"line":11639},[149,51778,35987],{"class":155},[149,51780,11191],{"class":325},[149,51782,34493],{"class":155},[149,51784,4667],{"class":325},[149,51786,35996],{"class":155},[149,51788,51789],{"class":151,"line":18314},[149,51790,36001],{"class":295},[149,51792,51793,51795,51797,51799,51801],{"class":151,"line":18320},[149,51794,36006],{"class":155},[149,51796,11191],{"class":325},[149,51798,36011],{"class":155},[149,51800,2056],{"class":309},[149,51802,1878],{"class":155},[149,51804,51805],{"class":151,"line":18343},[149,51806,4119],{"emptyLinePlaceholder":1800},[149,51808,51809],{"class":151,"line":18349},[149,51810,36024],{"class":295},[149,51812,51813,51815,51817,51819,51821],{"class":151,"line":18372},[149,51814,36029],{"class":155},[149,51816,166],{"class":325},[149,51818,36034],{"class":155},[149,51820,2447],{"class":325},[149,51822,36039],{"class":155},[149,51824,51825],{"class":151,"line":18386},[149,51826,36044],{"class":295},[149,51828,51829,51831,51833,51835],{"class":151,"line":18406},[149,51830,34157],{"class":309},[149,51832,319],{"class":155},[149,51834,36053],{"class":169},[149,51836,36056],{"class":155},[149,51838,51839],{"class":151,"line":18412},[149,51840,4119],{"emptyLinePlaceholder":1800},[149,51842,51843],{"class":151,"line":18423},[149,51844,36065],{"class":295},[149,51846,51847,51849,51851,51853,51855],{"class":151,"line":18446},[149,51848,3255],{"class":325},[149,51850,32926],{"class":309},[149,51852,4667],{"class":325},[149,51854,32931],{"class":169},[149,51856,5457],{"class":155},[149,51858,51859],{"class":151,"line":18468},[149,51860,36082],{"class":295},[149,51862,51863,51865,51867],{"class":151,"line":18473},[149,51864,32995],{"class":155},[149,51866,166],{"class":325},[149,51868,46257],{"class":155},[149,51870,51871],{"class":151,"line":18479},[149,51872,36095],{"class":295},[149,51874,51875],{"class":151,"line":18493},[149,51876,36100],{"class":295},[149,51878,51879,51881,51883],{"class":151,"line":18506},[149,51880,36105],{"class":155},[149,51882,36108],{"class":169},[149,51884,32203],{"class":155},[149,51886,51887],{"class":151,"line":18511},[149,51888,36115],{"class":295},[149,51890,51891,51893,51895],{"class":151,"line":18525},[149,51892,35728],{"class":155},[149,51894,166],{"class":325},[149,51896,36124],{"class":155},[149,51898,51899],{"class":151,"line":18530},[149,51900,36129],{"class":295},[149,51902,51903],{"class":151,"line":18536},[149,51904,36134],{"class":155},[149,51906,51907],{"class":151,"line":18541},[149,51908,4119],{"emptyLinePlaceholder":1800},[149,51910,51911],{"class":151,"line":18555},[149,51912,36143],{"class":295},[149,51914,51915],{"class":151,"line":18560},[149,51916,36148],{"class":295},[149,51918,51919,51921,51923,51925,51927,51929,51931],{"class":151,"line":18565},[149,51920,32943],{"class":155},[149,51922,166],{"class":325},[149,51924,32950],{"class":169},[149,51926,3424],{"class":325},[149,51928,32955],{"class":155},[149,51930,3421],{"class":325},[149,51932,35825],{"class":169},[149,51934,51935,51937,51939],{"class":151,"line":18579},[149,51936,32995],{"class":155},[149,51938,166],{"class":325},[149,51940,33995],{"class":155},[149,51942,51943],{"class":151,"line":18591},[149,51944,36177],{"class":295},[149,51946,51947],{"class":151,"line":18596},[149,51948,36182],{"class":295},[149,51950,51951,51953,51955,51957,51960,51962,51965],{"class":151,"line":18609},[149,51952,36187],{"class":155},[149,51954,166],{"class":325},[149,51956,810],{"class":155},[149,51958,51959],{"class":169},"'猫'",[149,51961,2241],{"class":155},[149,51963,51964],{"class":169},"'狗'",[149,51966,34952],{"class":155},[149,51968,51969,51971],{"class":151,"line":18614},[149,51970,35884],{"class":325},[149,51972,34590],{"class":155},[149,51974,51975],{"class":151,"line":18619},[149,51976,36252],{"class":295},[149,51978,51979,51981,51983,51985],{"class":151,"line":18624},[149,51980,5121],{"class":325},[149,51982,36259],{"class":155},[149,51984,27752],{"class":325},[149,51986,35903],{"class":155},[149,51988,51989,51991,51993],{"class":151,"line":18637},[149,51990,34316],{"class":155},[149,51992,166],{"class":325},[149,51994,34321],{"class":155},[149,51996,51997,51999,52001],{"class":151,"line":18642},[149,51998,34331],{"class":155},[149,52000,166],{"class":325},[149,52002,34336],{"class":155},[149,52004,52005],{"class":151,"line":34339},[149,52006,4119],{"emptyLinePlaceholder":1800},[149,52008,52009],{"class":151,"line":34345},[149,52010,36288],{"class":295},[149,52012,52013],{"class":151,"line":34351},[149,52014,34581],{"class":155},[149,52016,52017],{"class":151,"line":34357},[149,52018,36297],{"class":295},[149,52020,52021,52023,52025],{"class":151,"line":34363},[149,52022,34366],{"class":155},[149,52024,166],{"class":325},[149,52026,34371],{"class":155},[149,52028,52029],{"class":151,"line":34374},[149,52030,36310],{"class":295},[149,52032,52033,52035,52037,52039,52041,52043,52045],{"class":151,"line":34380},[149,52034,34383],{"class":155},[149,52036,166],{"class":325},[149,52038,34388],{"class":155},[149,52040,34391],{"class":6932},[149,52042,166],{"class":325},[149,52044,830],{"class":309},[149,52046,1878],{"class":155},[149,52048,52049],{"class":151,"line":34400},[149,52050,36331],{"class":295},[149,52052,52053,52055,52057],{"class":151,"line":34406},[149,52054,36336],{"class":155},[149,52056,166],{"class":325},[149,52058,36341],{"class":155},[149,52060,52061,52063,52065],{"class":151,"line":34417},[149,52062,36346],{"class":155},[149,52064,166],{"class":325},[149,52066,36351],{"class":155},[149,52068,52069,52071,52073,52075,52077,52079,52081,52083],{"class":151,"line":34423},[149,52070,36356],{"class":309},[149,52072,319],{"class":155},[149,52074,36361],{"class":169},[149,52076,36364],{"class":155},[149,52078,36367],{"class":169},[149,52080,2241],{"class":155},[149,52082,36372],{"class":169},[149,52084,36375],{"class":155},[1783,52086,52087],{},"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":145,"searchDepth":193,"depth":193,"links":52089},[52090,52091,52092,52093],{"id":32297,"depth":235,"text":32298},{"id":39545,"depth":235,"text":39546},{"id":42978,"depth":235,"text":42979},{"id":46987,"depth":235,"text":46988},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32289,"description":1797},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52100,"title":52101,"body":52102,"description":1797,"extension":1798,"meta":52109,"navigation":1800,"path":52110,"seo":52111,"stem":52112,"__hash__":52113},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52103,"toc":52107},[52104],[10,52105,52101],{"id":52106},"_3yolo模型学习",{"title":145,"searchDepth":193,"depth":193,"links":52108},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52101,"description":1797},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52115,"title":52116,"body":52117,"description":52124,"extension":1798,"meta":52125,"navigation":1800,"path":52127,"seo":52128,"stem":52129,"__hash__":52130},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52118,"toc":52122},[52119],[24,52120,52121],{},"yolo模型还未补充",{"title":145,"searchDepth":193,"depth":193,"links":52123},[],"深度学习学习",{"category":52126},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52116,"description":52124},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52132,"title":52133,"body":52134,"description":1797,"extension":1798,"meta":52159,"navigation":1800,"path":52160,"seo":52161,"stem":52162,"__hash__":52163},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52135,"toc":52157},[52136,52139,52142,52147,52154],[10,52137,52133],{"id":52138},"_1工具",[24,52140,52141],{},"提示错误插件：有问题会提前报错",[24,52143,52144],{},[83,52145],{"alt":145,"src":52146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[24,52148,52149],{},[2102,52150,52153],{"href":52151,"rel":52152},"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",[25573],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[24,52155,52156],{},"alt键加上下箭头可以实现语句的移动",{"title":145,"searchDepth":193,"depth":193,"links":52158},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52133,"description":1797},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52165,"title":52166,"body":52167,"description":1797,"extension":1798,"meta":55023,"navigation":1800,"path":55024,"seo":55025,"stem":55026,"__hash__":55027},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52168,"toc":54974},[52169,52172,52176,52180,52185,52188,52193,52197,52204,52209,52216,52221,52228,52233,52237,52242,52245,52249,52254,52258,52263,52266,52269,52272,52275,52278,52281,52284,52287,52292,52297,52302,52306,52309,52312,52316,52321,52324,52332,52337,52354,52362,52367,52372,52377,52382,52387,52390,52395,52400,52404,52413,52418,52423,52427,52432,52435,52439,52444,52452,52457,52462,52465,52470,52475,52480,52483,52486,52489,52494,52499,52502,52507,52510,52515,52518,52521,52524,52529,52532,52535,52550,52555,52560,52565,52568,52571,52574,52588,52591,52596,52601,52604,52607,52610,52613,52616,52619,52622,52626,52630,52635,52639,52642,52647,52652,52655,52660,52663,52667,52672,52675,52678,52681,52684,52687,52690,52693,52696,52699,52703,52708,52713,52718,52721,52724,52728,52733,52736,52740,52743,52746,52751,52754,52757,52761,52765,52768,52773,52778,52781,52810,52815,52820,52825,52830,52834,52839,52843,52848,52851,52855,52859,52864,52868,52873,52878,52882,52887,52890,52892,52895,52900,52904,52909,52913,52917,52922,52927,52932,52937,52941,52946,52951,52956,52959,52962,52967,52970,52975,52980,52985,52990,52994,53794,53798,54140,54145,54148,54151,54154,54157,54160,54163,54166,54169,54171,54174,54176,54179,54183,54188,54191,54194,54197,54201,54206,54211,54231,54234,54238,54243,54248,54265,54269,54298,54302,54324,54326,54365,54373,54379,54383,54386,54389,54394,54399,54402,54405,54408,54413,54418,54421,54424,54427,54430,54433,54436,54439,54442,54445,54448,54451,54453,54456,54459,54462,54465,54468,54471,54474,54477,54481,54486,54489,54494,54497,54500,54503,54506,54509,54512,54515,54517,54520,54523,54526,54529,54532,54535,54539,54542,54551,54554,54559,54562,54567,54570,54573,54576,54579,54582,54585,54588,54592,54596,54599,54602,54607,54612,54617,54621,54626,54631,54634,54637,54640,54643,54646,54651,54654,54659,54661,54666,54669,54673,54678,54681,54684,54689,54693,54696,54701,54704,54707,54736,54741,54744,54747,54750,54753,54756,54760,54763,54849,54853,54856,54861,54866,54873,54876,54879,54882,54885,54888,54893,54898,54901,54904,54907,54910,54913,54916,54919,54922,54925,54927,54930,54934,54939,54944,54949,54952,54957,54962,54965,54968,54971],[10,52170,52166],{"id":52171},"_2基础语法",[14,52173,52175],{"id":52174},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[19,52177,52179],{"id":52178},"_211-js组成","2.1.1 js组成",[125,52181,52182],{},[45,52183,52184],{},"js是编程语言，html和css不是编程语言，是标记语言",[24,52186,52187],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[125,52189,52190],{"start":193},[45,52191,52192],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[19,52194,52196],{"id":52195},"_212-js书写位置","2.1.2 js书写位置",[125,52198,52199],{},[45,52200,52201],{},[31,52202,52203],{},"内部 JavaScript",[24,52205,52206],{},[83,52207],{"alt":145,"src":52208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[125,52210,52211],{"start":193},[45,52212,52213],{},[31,52214,52215],{},"外部 JavaScript",[24,52217,52218],{},[83,52219],{"alt":145,"src":52220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[125,52222,52223],{"start":235},[45,52224,52225],{},[31,52226,52227],{},"内联 JavaScript",[24,52229,52230],{},[83,52231],{"alt":145,"src":52232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[19,52234,52236],{"id":52235},"_213-javascript注释","2.1.3 JavaScript注释",[24,52238,52239],{},[83,52240],{"alt":145,"src":52241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[24,52243,52244],{},"alt+shift+a一定要记住！",[19,52246,52248],{"id":52247},"_214-javascript结束符","2.1.4 JavaScript结束符",[24,52250,52251],{},[83,52252],{"alt":145,"src":52253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[19,52255,52257],{"id":52256},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[125,52259,52260],{},[45,52261,52262],{},"输出语法：",[24,52264,52265],{},"①document.write('要出的内容')",[24,52267,52268],{},"向body内输出内容；",[24,52270,52271],{},"如果输出的内容写的是标签，也会被解析cheng",[24,52273,52274],{},"②alert('要出的内容')",[24,52276,52277],{},"页面弹出警告对话框",[24,52279,52280],{},"③console.log('控制台打印')",[24,52282,52283],{},"控制台输出语法，程序员调试使用",[24,52285,52286],{},"输入log就行，自动生成：",[24,52288,52289],{},[83,52290],{"alt":145,"src":52291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[125,52293,52294],{"start":193},[45,52295,52296],{},"输入语法：",[24,52298,52299],{},[83,52300],{"alt":145,"src":52301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[19,52303,52305],{"id":52304},"_2116-字面量","21.1.6 字面量",[24,52307,52308],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[24,52310,52311],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52313,52315],{"id":52314},"_22-变量","2.2 变量",[125,52317,52318],{},[45,52319,52320],{},"变量声明",[24,52322,52323],{},"let 变量名",[42,52325,52326,52329],{},[45,52327,52328],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[45,52330,52331],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[125,52333,52334],{"start":193},[45,52335,52336],{},"变量赋值",[140,52338,52342],{"className":52339,"code":52340,"language":52341,"meta":145,"style":145},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[48,52343,52344,52349],{"__ignoreMap":145},[149,52345,52346],{"class":151,"line":152},[149,52347,52348],{"class":155},"let age\n",[149,52350,52351],{"class":151,"line":193},[149,52352,52353],{"class":155},"age=18\n",[125,52355,52356,52359],{"start":235},[45,52357,52358],{},"连这些（变量的初始化）：let age=18",[45,52360,52361],{},"更新变量",[24,52363,52364],{},[83,52365],{"alt":145,"src":52366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[125,52368,52369],{"start":346},[45,52370,52371],{},"声明多个变量",[24,52373,52374],{},[83,52375],{"alt":145,"src":52376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[125,52378,52379],{"start":352},[45,52380,52381],{},"变量命名规则与规范",[24,52383,52384],{},[83,52385],{"alt":145,"src":52386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[24,52388,52389],{},"遵守小驼峰！",[125,52391,52392],{"start":1021},[45,52393,52394],{},"变量拓展-let和var的区别",[24,52396,52397],{},[83,52398],{"alt":145,"src":52399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52401,52403],{"id":52402},"_23-数组","2.3 数组",[140,52405,52407],{"className":52339,"code":52406,"language":52341,"meta":145,"style":145},"let arr = []\n",[48,52408,52409],{"__ignoreMap":145},[149,52410,52411],{"class":151,"line":152},[149,52412,52406],{"class":155},[24,52414,52415],{},[83,52416],{"alt":145,"src":52417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[24,52419,52420],{},[83,52421],{"alt":145,"src":52422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52424,52426],{"id":52425},"_24-常量","2.4 常量",[24,52428,52429],{},[83,52430],{"alt":145,"src":52431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[24,52433,52434],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52436,52438],{"id":52437},"_25-数据类型","2.5 数据类型",[24,52440,52441],{},[83,52442],{"alt":145,"src":52443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[125,52445,52446,52449],{},[45,52447,52448],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[45,52450,52451],{},"算数运算符：",[24,52453,52454],{},[83,52455],{"alt":145,"src":52456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[125,52458,52459],{"start":235},[45,52460,52461],{},"数字类型（Number）",[24,52463,52464],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[24,52466,52467],{},[83,52468],{"alt":145,"src":52469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[125,52471,52472],{"start":340},[45,52473,52474],{},"字符串类型（string）",[24,52476,52477],{},[83,52478],{"alt":145,"src":52479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[24,52481,52482],{},"反引号也是可以使用的",[24,52484,52485],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[24,52487,52488],{},"例如：document.write(\"我今年\"+age+\"岁\")",[125,52490,52491],{"start":346},[45,52492,52493],{},"模板字符串",[24,52495,52496],{},[83,52497],{"alt":145,"src":52498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[24,52500,52501],{},"类似于python的字符串格式化",[125,52503,52504],{"start":352},[45,52505,52506],{},"布尔类型",[24,52508,52509],{},"true 和 false",[125,52511,52512],{"start":1021},[45,52513,52514],{},"未定义类型（underfined）",[24,52516,52517],{},"表示没有赋值",[24,52519,52520],{},"未定义类型是比较特殊的类型，只有一个值undefined",[24,52522,52523],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[125,52525,52526],{"start":1035},[45,52527,52528],{},"null（空类型）",[24,52530,52531],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[24,52533,52534],{},"赋值了，但是内容为空",[140,52536,52538],{"className":52339,"code":52537,"language":52341,"meta":145,"style":145},"typeof null\n输出的是'object'，是一个对象数据类型\n",[48,52539,52540,52545],{"__ignoreMap":145},[149,52541,52542],{"class":151,"line":152},[149,52543,52544],{"class":155},"typeof null\n",[149,52546,52547],{"class":151,"line":193},[149,52548,52549],{"class":155},"输出的是'object'，是一个对象数据类型\n",[125,52551,52552],{"start":1054},[45,52553,52554],{},"控制台检测数据类型",[24,52556,52557],{},[83,52558],{"alt":145,"src":52559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[125,52561,52562],{"start":1072},[45,52563,52564],{},"类型转换",[24,52566,52567],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[24,52569,52570],{},"转换方式：隐式转换和显示转换",[24,52572,52573],{},"①隐式转换",[42,52575,52576,52579,52582,52585],{},[45,52577,52578],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[45,52580,52581],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[45,52583,52584],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[45,52586,52587],{},"任何数据和字符串相加结果都是字符串",[24,52589,52590],{},"②显示转换",[24,52592,52593],{},[83,52594],{"alt":145,"src":52595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[24,52597,52598],{},[83,52599],{"alt":145,"src":52600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[24,52602,52603],{},"在输入的时候要用好隐式转换，简单写起来",[24,52605,52606],{},"let num = +prompt(’请输入数字：‘)",[24,52608,52609],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[24,52611,52612],{},"console.log(parseInt('12.333px'))",[24,52614,52615],{},"输出为：12",[24,52617,52618],{},"console.log(parseInt('a'a'a12.333px'))",[24,52620,52621],{},"输出：NaN",[14,52623,52625],{"id":52624},"_26-运算符","2.6 运算符",[19,52627,52629],{"id":52628},"_261-赋值运算符","2.6.1 赋值运算符",[24,52631,52632],{},[83,52633],{"alt":145,"src":52634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[19,52636,52638],{"id":52637},"_262-一元运算符","2.6.2 一元运算符",[24,52640,52641],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[24,52643,52644],{},[83,52645],{"alt":145,"src":52646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[24,52648,52649],{},[83,52650],{"alt":145,"src":52651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[24,52653,52654],{},"两者的区别：",[24,52656,52657],{},[83,52658],{"alt":145,"src":52659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[24,52661,52662],{},"前置先自加；后置后加，代码执行完之后再加",[19,52664,52666],{"id":52665},"_263-比较运算符","2.6.3 比较运算符",[24,52668,52669],{},[83,52670],{"alt":145,"src":52671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[24,52673,52674],{},"比较运算符也有隐式转换",[24,52676,52677],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[24,52679,52680],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[24,52682,52683],{},"要使用三等，开发的时候",[24,52685,52686],{},"NaN不等于任何人，包括它自己",[24,52688,52689],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[24,52691,52692],{},"7\u002F10=0.7",[24,52694,52695],{},"最后：0.5+0.2=0.7",[24,52697,52698],{},"字符串比较，比较的是字符对应的ASCII码",[19,52700,52702],{"id":52701},"_264-逻辑运算符","2.6.4 逻辑运算符",[24,52704,52705],{},[83,52706],{"alt":145,"src":52707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[24,52709,52710],{},[83,52711],{"alt":145,"src":52712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[24,52714,52715],{},[83,52716],{"alt":145,"src":52717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[24,52719,52720],{},"上述题目选D",[24,52722,52723],{},"与真2假1；或真1假2",[19,52725,52727],{"id":52726},"_265-运算符优先级","2.6.5 运算符优先级",[24,52729,52730],{},[83,52731],{"alt":145,"src":52732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[24,52734,52735],{},"先算逻辑与，后算逻辑或",[14,52737,52739],{"id":52738},"_27-语句","2.7 语句",[24,52741,52742],{},"表达式：是可以被求值的代码，会有结果给我们",[24,52744,52745],{},"语句：语句是可以被执行的代码，例如prompt()",[24,52747,52748],{},[83,52749],{"alt":145,"src":52750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[24,52752,52753],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[24,52755,52756],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[19,52758,52760],{"id":52759},"_271-分支语句","2.7.1 分支语句",[120,52762,52764],{"id":52763},"_2711-if分支语句","2.7.1.1 if分支语句",[24,52766,52767],{},"if语句单行简单的话，可以不写{}，写在一行就行",[125,52769,52770],{},[45,52771,52772],{},"单分支语句",[24,52774,52775],{},[83,52776],{"alt":145,"src":52777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[24,52779,52780],{},"除了0，所有数字都为真",[140,52782,52784],{"className":52339,"code":52783,"language":52341,"meta":145,"style":145},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[48,52785,52786,52791,52796,52801,52805],{"__ignoreMap":145},[149,52787,52788],{"class":151,"line":152},[149,52789,52790],{"class":155},"if（0) {\n",[149,52792,52793],{"class":151,"line":193},[149,52794,52795],{"class":155},"    let a=1\n",[149,52797,52798],{"class":151,"line":235},[149,52799,52800],{"class":155},"    alert(typeof a)\n",[149,52802,52803],{"class":151,"line":340},[149,52804,355],{"class":155},[149,52806,52807],{"class":151,"line":346},[149,52808,52809],{"class":155},"不输出，括号为假\n",[125,52811,52812],{"start":193},[45,52813,52814],{},"双分支语句",[24,52816,52817],{},[83,52818],{"alt":145,"src":52819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[125,52821,52822],{"start":235},[45,52823,52824],{},"多分支语句",[24,52826,52827],{},[83,52828],{"alt":145,"src":52829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[120,52831,52833],{"id":52832},"_2712-三元运算符","2.7.1.2 三元运算符",[24,52835,52836],{},[83,52837],{"alt":145,"src":52838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[120,52840,52842],{"id":52841},"_2713-switch语句","2.7.1.3 switch语句",[24,52844,52845],{},[83,52846],{"alt":145,"src":52847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[24,52849,52850],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[19,52852,52854],{"id":52853},"_272-循环语句","2.7.2 循环语句",[120,52856,52858],{"id":52857},"_2721-断点演示","2.7.2.1 断点演示",[24,52860,52861],{},[83,52862],{"alt":145,"src":52863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[120,52865,52867],{"id":52866},"_2722-while循环","2.7.2.2 while循环",[24,52869,52870],{},[83,52871],{"alt":145,"src":52872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[24,52874,52875],{},[83,52876],{"alt":145,"src":52877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[120,52879,52881],{"id":52880},"_2723-for循环","2.7.2.3 for循环",[24,52883,52884],{},[83,52885],{"alt":145,"src":52886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[24,52888,52889],{},"for(;;) {",[24,52891,2805],{},[24,52893,52894],{},"表示无限循环",[24,52896,52897],{},[83,52898],{"alt":145,"src":52899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[120,52901,52903],{"id":52902},"_2724-循环的退出","2.7.2.4 循环的退出",[24,52905,52906],{},[83,52907],{"alt":145,"src":52908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52910,52912],{"id":52911},"_28-数组","2.8 数组",[19,52914,52916],{"id":52915},"_281-基础认识","2.8.1 基础认识",[24,52918,52919],{},[83,52920],{"alt":145,"src":52921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[24,52923,52924],{},[83,52925],{"alt":145,"src":52926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[24,52928,52929],{},[83,52930],{"alt":145,"src":52931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[24,52933,52934],{},[83,52935],{"alt":145,"src":52936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[19,52938,52940],{"id":52939},"_282-操作数组","2.8.2 操作数组",[24,52942,52943],{},[83,52944],{"alt":145,"src":52945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[125,52947,52948],{},[45,52949,52950],{},"添加元素",[24,52952,52953],{},[83,52954],{"alt":145,"src":52955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[24,52957,52958],{},"console.log(arr.push('green'))",[24,52960,52961],{},"输出结果：为新数组的长度",[24,52963,52964],{},[83,52965],{"alt":145,"src":52966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[24,52968,52969],{},"push用的非常多，一定要记住",[125,52971,52972],{},[45,52973,52974],{},"删除元素",[24,52976,52977],{},[83,52978],{"alt":145,"src":52979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[24,52981,52982],{},[83,52983],{"alt":145,"src":52984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[24,52986,52987],{},[83,52988],{"alt":145,"src":52989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[19,52991,52993],{"id":52992},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[140,52995,52997],{"className":52339,"code":52996,"language":52341,"meta":145,"style":145},"\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",[48,52998,52999,53012,53028,53032,53041,53059,53083,53105,53119,53127,53134,53145,53156,53160,53164,53171,53183,53197,53210,53228,53245,53260,53272,53284,53296,53300,53304,53314,53324,53336,53348,53360,53371,53375,53379,53391,53395,53409,53413,53417,53428,53442,53454,53468,53472,53481,53489,53493,53502,53506,53515,53520,53525,53538,53566,53571,53576,53601,53606,53610,53615,53620,53635,53639,53644,53674,53686,53702,53718,53732,53737,53744,53748,53753,53766,53774,53782,53786],{"__ignoreMap":145},[149,53000,53001,53004,53007,53010],{"class":151,"line":152},[149,53002,53003],{"class":155},"\u003C!",[149,53005,53006],{"class":159},"DOCTYPE",[149,53008,53009],{"class":162}," html",[149,53011,190],{"class":155},[149,53013,53014,53016,53018,53021,53023,53026],{"class":151,"line":193},[149,53015,156],{"class":155},[149,53017,52341],{"class":159},[149,53019,53020],{"class":162}," lang",[149,53022,166],{"class":155},[149,53024,53025],{"class":169},"\"en\"",[149,53027,190],{"class":155},[149,53029,53030],{"class":151,"line":235},[149,53031,4119],{"emptyLinePlaceholder":1800},[149,53033,53034,53036,53039],{"class":151,"line":340},[149,53035,156],{"class":155},[149,53037,53038],{"class":159},"head",[149,53040,190],{"class":155},[149,53042,53043,53046,53049,53052,53054,53057],{"class":151,"line":346},[149,53044,53045],{"class":155},"    \u003C",[149,53047,53048],{"class":159},"meta",[149,53050,53051],{"class":162}," charset",[149,53053,166],{"class":155},[149,53055,53056],{"class":169},"\"UTF-8\"",[149,53058,190],{"class":155},[149,53060,53061,53063,53065,53068,53070,53073,53076,53078,53081],{"class":151,"line":352},[149,53062,53045],{"class":155},[149,53064,53048],{"class":159},[149,53066,53067],{"class":162}," http-equiv",[149,53069,166],{"class":155},[149,53071,53072],{"class":169},"\"X-UA-Compatible\"",[149,53074,53075],{"class":162}," content",[149,53077,166],{"class":155},[149,53079,53080],{"class":169},"\"IE=edge\"",[149,53082,190],{"class":155},[149,53084,53085,53087,53089,53091,53093,53096,53098,53100,53103],{"class":151,"line":1021},[149,53086,53045],{"class":155},[149,53088,53048],{"class":159},[149,53090,515],{"class":162},[149,53092,166],{"class":155},[149,53094,53095],{"class":169},"\"viewport\"",[149,53097,53075],{"class":162},[149,53099,166],{"class":155},[149,53101,53102],{"class":169},"\"width=device-width, initial-scale=1.0\"",[149,53104,190],{"class":155},[149,53106,53107,53109,53112,53115,53117],{"class":151,"line":1035},[149,53108,53045],{"class":155},[149,53110,53111],{"class":159},"title",[149,53113,53114],{"class":155},">Document\u003C\u002F",[149,53116,53111],{"class":159},[149,53118,190],{"class":155},[149,53120,53121,53123,53125],{"class":151,"line":1054},[149,53122,53045],{"class":155},[149,53124,1783],{"class":159},[149,53126,190],{"class":155},[149,53128,53129,53132],{"class":151,"line":1072},[149,53130,53131],{"class":159},"        *",[149,53133,304],{"class":155},[149,53135,53136,53139,53141,53143],{"class":151,"line":1090},[149,53137,53138],{"class":309},"            margin",[149,53140,313],{"class":155},[149,53142,2056],{"class":309},[149,53144,841],{"class":155},[149,53146,53147,53150,53152,53154],{"class":151,"line":1633},[149,53148,53149],{"class":309},"            padding",[149,53151,313],{"class":155},[149,53153,2056],{"class":309},[149,53155,841],{"class":155},[149,53157,53158],{"class":151,"line":1644},[149,53159,4248],{"class":155},[149,53161,53162],{"class":151,"line":3348},[149,53163,4119],{"emptyLinePlaceholder":1800},[149,53165,53166,53169],{"class":151,"line":3362},[149,53167,53168],{"class":162},"        .box",[149,53170,304],{"class":155},[149,53172,53173,53176,53178,53181],{"class":151,"line":3367},[149,53174,53175],{"class":309},"            display",[149,53177,313],{"class":155},[149,53179,53180],{"class":309},"flex",[149,53182,841],{"class":155},[149,53184,53185,53188,53190,53193,53195],{"class":151,"line":3373},[149,53186,53187],{"class":309},"            width",[149,53189,313],{"class":155},[149,53191,53192],{"class":309},"700",[149,53194,326],{"class":325},[149,53196,841],{"class":155},[149,53198,53199,53202,53204,53206,53208],{"class":151,"line":3394},[149,53200,53201],{"class":309},"            height",[149,53203,313],{"class":155},[149,53205,5691],{"class":309},[149,53207,326],{"class":325},[149,53209,841],{"class":155},[149,53211,53212,53215,53217,53219,53221,53223,53226],{"class":151,"line":3399},[149,53213,53214],{"class":309},"            border-left",[149,53216,313],{"class":155},[149,53218,830],{"class":309},[149,53220,326],{"class":325},[149,53222,835],{"class":309},[149,53224,53225],{"class":309}," pink",[149,53227,841],{"class":155},[149,53229,53230,53233,53235,53237,53239,53241,53243],{"class":151,"line":3413},[149,53231,53232],{"class":309},"            border-bottom",[149,53234,313],{"class":155},[149,53236,830],{"class":309},[149,53238,326],{"class":325},[149,53240,835],{"class":309},[149,53242,53225],{"class":309},[149,53244,841],{"class":155},[149,53246,53247,53249,53251,53253,53255,53258],{"class":151,"line":3418},[149,53248,53138],{"class":309},[149,53250,313],{"class":155},[149,53252,332],{"class":309},[149,53254,326],{"class":325},[149,53256,53257],{"class":309}," auto",[149,53259,841],{"class":155},[149,53261,53262,53265,53267,53270],{"class":151,"line":3447},[149,53263,53264],{"class":309},"            justify-content",[149,53266,313],{"class":155},[149,53268,53269],{"class":309},"space-around",[149,53271,841],{"class":155},[149,53273,53274,53277,53279,53282],{"class":151,"line":3452},[149,53275,53276],{"class":309},"            align-items",[149,53278,313],{"class":155},[149,53280,53281],{"class":309},"flex-end",[149,53283,841],{"class":155},[149,53285,53286,53289,53291,53294],{"class":151,"line":3469},[149,53287,53288],{"class":309},"            text-align",[149,53290,313],{"class":155},[149,53292,53293],{"class":309},"center",[149,53295,841],{"class":155},[149,53297,53298],{"class":151,"line":3474},[149,53299,4248],{"class":155},[149,53301,53302],{"class":151,"line":3479},[149,53303,4119],{"emptyLinePlaceholder":1800},[149,53305,53306,53308,53310,53312],{"class":151,"line":3484},[149,53307,53168],{"class":162},[149,53309,2819],{"class":325},[149,53311,301],{"class":159},[149,53313,304],{"class":155},[149,53315,53316,53318,53320,53322],{"class":151,"line":3498},[149,53317,53175],{"class":309},[149,53319,313],{"class":155},[149,53321,53180],{"class":309},[149,53323,841],{"class":155},[149,53325,53326,53328,53330,53332,53334],{"class":151,"line":3503},[149,53327,53187],{"class":309},[149,53329,313],{"class":155},[149,53331,332],{"class":309},[149,53333,326],{"class":325},[149,53335,841],{"class":155},[149,53337,53338,53341,53343,53346],{"class":151,"line":4296},[149,53339,53340],{"class":309},"            background-color",[149,53342,313],{"class":155},[149,53344,53345],{"class":309},"pink",[149,53347,841],{"class":155},[149,53349,53350,53353,53355,53358],{"class":151,"line":4310},[149,53351,53352],{"class":309},"            flex-direction",[149,53354,313],{"class":155},[149,53356,53357],{"class":309},"column",[149,53359,841],{"class":155},[149,53361,53362,53364,53366,53369],{"class":151,"line":4318},[149,53363,53264],{"class":309},[149,53365,313],{"class":155},[149,53367,53368],{"class":309},"space-between",[149,53370,841],{"class":155},[149,53372,53373],{"class":151,"line":4323},[149,53374,4248],{"class":155},[149,53376,53377],{"class":151,"line":4329},[149,53378,4119],{"emptyLinePlaceholder":1800},[149,53380,53381,53383,53386,53389],{"class":151,"line":4335},[149,53382,53168],{"class":162},[149,53384,53385],{"class":159}," div",[149,53387,53388],{"class":159}," span",[149,53390,304],{"class":155},[149,53392,53393],{"class":151,"line":4340},[149,53394,4119],{"emptyLinePlaceholder":1800},[149,53396,53397,53400,53402,53405,53407],{"class":151,"line":9663},[149,53398,53399],{"class":309},"            margin-top",[149,53401,313],{"class":155},[149,53403,53404],{"class":309},"-20",[149,53406,326],{"class":325},[149,53408,841],{"class":155},[149,53410,53411],{"class":151,"line":9687},[149,53412,4248],{"class":155},[149,53414,53415],{"class":151,"line":9692},[149,53416,4119],{"emptyLinePlaceholder":1800},[149,53418,53419,53421,53423,53426],{"class":151,"line":9698},[149,53420,53168],{"class":162},[149,53422,53385],{"class":159},[149,53424,53425],{"class":159}," h4",[149,53427,304],{"class":155},[149,53429,53430,53433,53435,53438,53440],{"class":151,"line":9725},[149,53431,53432],{"class":309},"            margin-bottom",[149,53434,313],{"class":155},[149,53436,53437],{"class":309},"-35",[149,53439,326],{"class":325},[149,53441,841],{"class":155},[149,53443,53444,53446,53448,53450,53452],{"class":151,"line":9730},[149,53445,53187],{"class":309},[149,53447,313],{"class":155},[149,53449,2219],{"class":309},[149,53451,326],{"class":325},[149,53453,841],{"class":155},[149,53455,53456,53459,53461,53464,53466],{"class":151,"line":9736},[149,53457,53458],{"class":309},"            margin-left",[149,53460,313],{"class":155},[149,53462,53463],{"class":309},"-10",[149,53465,326],{"class":325},[149,53467,841],{"class":155},[149,53469,53470],{"class":151,"line":9748},[149,53471,4248],{"class":155},[149,53473,53474,53477,53479],{"class":151,"line":9760},[149,53475,53476],{"class":155},"    \u003C\u002F",[149,53478,1783],{"class":159},[149,53480,190],{"class":155},[149,53482,53483,53485,53487],{"class":151,"line":9772},[149,53484,665],{"class":155},[149,53486,53038],{"class":159},[149,53488,190],{"class":155},[149,53490,53491],{"class":151,"line":11430},[149,53492,4119],{"emptyLinePlaceholder":1800},[149,53494,53495,53497,53500],{"class":151,"line":11455},[149,53496,156],{"class":155},[149,53498,53499],{"class":159},"body",[149,53501,190],{"class":155},[149,53503,53504],{"class":151,"line":11478},[149,53505,4119],{"emptyLinePlaceholder":1800},[149,53507,53508,53510,53513],{"class":151,"line":11502},[149,53509,53045],{"class":155},[149,53511,53512],{"class":159},"script",[149,53514,190],{"class":155},[149,53516,53517],{"class":151,"line":11507},[149,53518,53519],{"class":295},"        \u002F\u002F 1. 四次弹框效果\n",[149,53521,53522],{"class":151,"line":11512},[149,53523,53524],{"class":295},"        \u002F\u002F 声明一个新的数组\n",[149,53526,53527,53530,53533,53535],{"class":151,"line":11517},[149,53528,53529],{"class":325},"        let",[149,53531,53532],{"class":155}," arr ",[149,53534,166],{"class":325},[149,53536,53537],{"class":155}," []\n",[149,53539,53540,53542,53544,53547,53549,53551,53553,53555,53557,53560,53562,53564],{"class":151,"line":11526},[149,53541,5121],{"class":325},[149,53543,3378],{"class":155},[149,53545,53546],{"class":325},"let",[149,53548,11152],{"class":155},[149,53550,166],{"class":325},[149,53552,26827],{"class":309},[149,53554,11159],{"class":155},[149,53556,3311],{"class":325},[149,53558,53559],{"class":309}," 4",[149,53561,4932],{"class":155},[149,53563,4011],{"class":325},[149,53565,14155],{"class":155},[149,53567,53568],{"class":151,"line":11531},[149,53569,53570],{"class":295},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[149,53572,53573],{"class":151,"line":11537},[149,53574,53575],{"class":295},"            \u002F\u002F arr.push(num)\n",[149,53577,53578,53581,53584,53586,53589,53591,53594,53596,53599],{"class":151,"line":11558},[149,53579,53580],{"class":155},"            arr.",[149,53582,53583],{"class":162},"push",[149,53585,319],{"class":155},[149,53587,53588],{"class":162},"prompt",[149,53590,319],{"class":155},[149,53592,53593],{"class":169},"`请输入第${",[149,53595,2304],{"class":155},[149,53597,53598],{"class":169},"}季度的数据:`",[149,53600,32203],{"class":155},[149,53602,53603],{"class":151,"line":11564},[149,53604,53605],{"class":295},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[149,53607,53608],{"class":151,"line":11578},[149,53609,4248],{"class":155},[149,53611,53612],{"class":151,"line":11584},[149,53613,53614],{"class":295},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[149,53616,53617],{"class":151,"line":11611},[149,53618,53619],{"class":295},"        \u002F\u002F 盒子开头\n",[149,53621,53622,53625,53628,53630,53633],{"class":151,"line":11620},[149,53623,53624],{"class":155},"        document.",[149,53626,53627],{"class":162},"write",[149,53629,319],{"class":155},[149,53631,53632],{"class":169},"` \u003Cdiv class=\"box\">`",[149,53634,1878],{"class":155},[149,53636,53637],{"class":151,"line":11626},[149,53638,4119],{"emptyLinePlaceholder":1800},[149,53640,53641],{"class":151,"line":11634},[149,53642,53643],{"class":295},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[149,53645,53646,53648,53650,53652,53654,53656,53658,53660,53662,53665,53668,53670,53672],{"class":151,"line":11639},[149,53647,5121],{"class":325},[149,53649,3378],{"class":155},[149,53651,53546],{"class":325},[149,53653,11152],{"class":155},[149,53655,166],{"class":325},[149,53657,5811],{"class":309},[149,53659,11159],{"class":155},[149,53661,156],{"class":325},[149,53663,53664],{"class":155}," arr.",[149,53666,53667],{"class":309},"length",[149,53669,4932],{"class":155},[149,53671,4011],{"class":325},[149,53673,14155],{"class":155},[149,53675,53676,53679,53681,53683],{"class":151,"line":18314},[149,53677,53678],{"class":155},"            document.",[149,53680,53627],{"class":162},[149,53682,319],{"class":155},[149,53684,53685],{"class":169},"`\n",[149,53687,53688,53691,53693,53695,53697,53699],{"class":151,"line":18320},[149,53689,53690],{"class":169},"              \u003Cdiv style=\"height: ${",[149,53692,5598],{"class":155},[149,53694,810],{"class":169},[149,53696,2304],{"class":155},[149,53698,2799],{"class":169},[149,53700,53701],{"class":169},"}px;\">\n",[149,53703,53704,53707,53709,53711,53713,53715],{"class":151,"line":18343},[149,53705,53706],{"class":169},"                \u003Cspan>${",[149,53708,5598],{"class":155},[149,53710,810],{"class":169},[149,53712,2304],{"class":155},[149,53714,2799],{"class":169},[149,53716,53717],{"class":169},"}\u003C\u002Fspan>\n",[149,53719,53720,53723,53725,53727,53729],{"class":151,"line":18349},[149,53721,53722],{"class":169},"                \u003Ch4>第${",[149,53724,2304],{"class":155},[149,53726,47272],{"class":325},[149,53728,26827],{"class":309},[149,53730,53731],{"class":169},"}季度\u003C\u002Fh4>\n",[149,53733,53734],{"class":151,"line":18372},[149,53735,53736],{"class":169},"              \u003C\u002Fdiv>          \n",[149,53738,53739,53742],{"class":151,"line":18386},[149,53740,53741],{"class":169},"            `",[149,53743,1878],{"class":155},[149,53745,53746],{"class":151,"line":18406},[149,53747,4248],{"class":155},[149,53749,53750],{"class":151,"line":18412},[149,53751,53752],{"class":295},"        \u002F\u002F 盒子结尾\n",[149,53754,53755,53757,53759,53761,53764],{"class":151,"line":18423},[149,53756,53624],{"class":155},[149,53758,53627],{"class":162},[149,53760,319],{"class":155},[149,53762,53763],{"class":169},"` \u003C\u002Fdiv>`",[149,53765,1878],{"class":155},[149,53767,53768,53770,53772],{"class":151,"line":18446},[149,53769,53476],{"class":155},[149,53771,53512],{"class":159},[149,53773,190],{"class":155},[149,53775,53776,53778,53780],{"class":151,"line":18468},[149,53777,665],{"class":155},[149,53779,53499],{"class":159},[149,53781,190],{"class":155},[149,53783,53784],{"class":151,"line":18473},[149,53785,4119],{"emptyLinePlaceholder":1800},[149,53787,53788,53790,53792],{"class":151,"line":18479},[149,53789,665],{"class":155},[149,53791,52341],{"class":159},[149,53793,190],{"class":155},[19,53795,53797],{"id":53796},"_284-冒泡排序","2.8.4 冒泡排序",[140,53799,53801],{"className":52339,"code":53800,"language":52341,"meta":145,"style":145},"\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",[48,53802,53803,53813,53827,53831,53839,53853,53873,53885,53893,53897,53905,53913,53945,53978,54015,54020,54039,54044,54057,54072,54088,54092,54097,54101,54111,54120,54128,54132],{"__ignoreMap":145},[149,53804,53805,53807,53809,53811],{"class":151,"line":152},[149,53806,53003],{"class":155},[149,53808,53006],{"class":159},[149,53810,53009],{"class":162},[149,53812,190],{"class":155},[149,53814,53815,53817,53819,53821,53823,53825],{"class":151,"line":193},[149,53816,156],{"class":155},[149,53818,52341],{"class":159},[149,53820,53020],{"class":162},[149,53822,166],{"class":155},[149,53824,53025],{"class":169},[149,53826,190],{"class":155},[149,53828,53829],{"class":151,"line":235},[149,53830,4119],{"emptyLinePlaceholder":1800},[149,53832,53833,53835,53837],{"class":151,"line":340},[149,53834,156],{"class":155},[149,53836,53038],{"class":159},[149,53838,190],{"class":155},[149,53840,53841,53843,53845,53847,53849,53851],{"class":151,"line":346},[149,53842,587],{"class":155},[149,53844,53048],{"class":159},[149,53846,53051],{"class":162},[149,53848,166],{"class":155},[149,53850,53056],{"class":169},[149,53852,190],{"class":155},[149,53854,53855,53857,53859,53861,53863,53865,53867,53869,53871],{"class":151,"line":352},[149,53856,587],{"class":155},[149,53858,53048],{"class":159},[149,53860,515],{"class":162},[149,53862,166],{"class":155},[149,53864,53095],{"class":169},[149,53866,53075],{"class":162},[149,53868,166],{"class":155},[149,53870,53102],{"class":169},[149,53872,190],{"class":155},[149,53874,53875,53877,53879,53881,53883],{"class":151,"line":1021},[149,53876,587],{"class":155},[149,53878,53111],{"class":159},[149,53880,53114],{"class":155},[149,53882,53111],{"class":159},[149,53884,190],{"class":155},[149,53886,53887,53889,53891],{"class":151,"line":1035},[149,53888,665],{"class":155},[149,53890,53038],{"class":159},[149,53892,190],{"class":155},[149,53894,53895],{"class":151,"line":1054},[149,53896,4119],{"emptyLinePlaceholder":1800},[149,53898,53899,53901,53903],{"class":151,"line":1072},[149,53900,156],{"class":155},[149,53902,53499],{"class":159},[149,53904,190],{"class":155},[149,53906,53907,53909,53911],{"class":151,"line":1090},[149,53908,587],{"class":155},[149,53910,53512],{"class":159},[149,53912,190],{"class":155},[149,53914,53915,53918,53920,53922,53925,53927,53929,53931,53933,53935,53937,53939,53941,53943],{"class":151,"line":1633},[149,53916,53917],{"class":325},"    let",[149,53919,53532],{"class":155},[149,53921,166],{"class":325},[149,53923,53924],{"class":155}," [",[149,53926,2182],{"class":309},[149,53928,329],{"class":155},[149,53930,2157],{"class":309},[149,53932,329],{"class":155},[149,53934,1939],{"class":309},[149,53936,329],{"class":155},[149,53938,1045],{"class":309},[149,53940,329],{"class":155},[149,53942,830],{"class":309},[149,53944,34952],{"class":155},[149,53946,53947,53949,53951,53953,53955,53957,53959,53961,53963,53965,53967,53970,53972,53974,53976],{"class":151,"line":1644},[149,53948,4919],{"class":325},[149,53950,3378],{"class":155},[149,53952,53546],{"class":325},[149,53954,11152],{"class":155},[149,53956,166],{"class":325},[149,53958,5811],{"class":309},[149,53960,11159],{"class":155},[149,53962,156],{"class":325},[149,53964,53664],{"class":155},[149,53966,53667],{"class":309},[149,53968,53969],{"class":325}," -",[149,53971,26827],{"class":309},[149,53973,4932],{"class":155},[149,53975,4011],{"class":325},[149,53977,14155],{"class":155},[149,53979,53980,53983,53985,53987,53989,53991,53993,53995,53997,53999,54001,54003,54005,54007,54009,54011,54013],{"class":151,"line":3348},[149,53981,53982],{"class":325},"      for",[149,53984,3378],{"class":155},[149,53986,53546],{"class":325},[149,53988,11214],{"class":155},[149,53990,166],{"class":325},[149,53992,5811],{"class":309},[149,53994,11221],{"class":155},[149,53996,156],{"class":325},[149,53998,53664],{"class":155},[149,54000,53667],{"class":309},[149,54002,53969],{"class":325},[149,54004,11152],{"class":155},[149,54006,2395],{"class":325},[149,54008,26827],{"class":309},[149,54010,11228],{"class":155},[149,54012,4011],{"class":325},[149,54014,14155],{"class":155},[149,54016,54017],{"class":151,"line":3362},[149,54018,54019],{"class":295},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[149,54021,54022,54024,54027,54029,54032,54034,54036],{"class":151,"line":3367},[149,54023,4216],{"class":325},[149,54025,54026],{"class":155}," (arr[j] ",[149,54028,2819],{"class":325},[149,54030,54031],{"class":155}," arr[j ",[149,54033,2344],{"class":325},[149,54035,26827],{"class":309},[149,54037,54038],{"class":155},"]) {\n",[149,54040,54041],{"class":151,"line":3373},[149,54042,54043],{"class":295},"          \u002F\u002F 交换两个变量\n",[149,54045,54046,54049,54052,54054],{"class":151,"line":3394},[149,54047,54048],{"class":325},"          let",[149,54050,54051],{"class":155}," tmp ",[149,54053,166],{"class":325},[149,54055,54056],{"class":155}," arr[j]\n",[149,54058,54059,54062,54064,54066,54068,54070],{"class":151,"line":3399},[149,54060,54061],{"class":155},"          arr[j] ",[149,54063,166],{"class":325},[149,54065,54031],{"class":155},[149,54067,2344],{"class":325},[149,54069,26827],{"class":309},[149,54071,34952],{"class":155},[149,54073,54074,54077,54079,54081,54083,54085],{"class":151,"line":3413},[149,54075,54076],{"class":155},"          arr[j ",[149,54078,2344],{"class":325},[149,54080,26827],{"class":309},[149,54082,6161],{"class":155},[149,54084,166],{"class":325},[149,54086,54087],{"class":155}," tmp\n",[149,54089,54090],{"class":151,"line":3418},[149,54091,4248],{"class":155},[149,54093,54094],{"class":151,"line":3447},[149,54095,54096],{"class":155},"      }\n",[149,54098,54099],{"class":151,"line":3452},[149,54100,3906],{"class":155},[149,54102,54103,54106,54108],{"class":151,"line":3469},[149,54104,54105],{"class":155},"    document.",[149,54107,53627],{"class":162},[149,54109,54110],{"class":155},"(arr)\n",[149,54112,54113,54116,54118],{"class":151,"line":3474},[149,54114,54115],{"class":155},"  \u003C\u002F",[149,54117,53512],{"class":159},[149,54119,190],{"class":155},[149,54121,54122,54124,54126],{"class":151,"line":3479},[149,54123,665],{"class":155},[149,54125,53499],{"class":159},[149,54127,190],{"class":155},[149,54129,54130],{"class":151,"line":3484},[149,54131,4119],{"emptyLinePlaceholder":1800},[149,54133,54134,54136,54138],{"class":151,"line":3498},[149,54135,665],{"class":155},[149,54137,52341],{"class":159},[149,54139,190],{"class":155},[24,54141,54142],{},[83,54143],{"alt":145,"src":54144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[24,54146,54147],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[24,54149,54150],{},"let arr = [4, 2, 5, 1, 3]",[24,54152,54153],{},"\u002F\u002F 1.升序排列写法",[24,54155,54156],{},"arr.sort(function (a, b) {",[24,54158,54159],{},"return a - b",[24,54161,54162],{},"})",[24,54164,54165],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[24,54167,54168],{},"\u002F\u002F 降序排列写法",[24,54170,54156],{},[24,54172,54173],{},"return b - a",[24,54175,54162],{},[24,54177,54178],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54180,54182],{"id":54181},"_29-函数","2.9 函数",[24,54184,54185],{},[83,54186],{"alt":145,"src":54187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[24,54189,54190],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[24,54192,54193],{},"函数的声明用function",[24,54195,54196],{},"函数里边可以嵌套函数",[19,54198,54200],{"id":54199},"_291-函数传参","2.9.1 函数传参",[24,54202,54203],{},[83,54204],{"alt":145,"src":54205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[24,54207,54208],{},[83,54209],{"alt":145,"src":54210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[42,54212,54213,54216,54219,54222,54225,54228],{},[45,54214,54215],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[45,54217,54218],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[45,54220,54221],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[45,54223,54224],{},"开发中尽量保持形参和实参个数一致",[45,54226,54227],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[45,54229,54230],{},"形参只在函数中有用，所以不需要进行声明这个变量",[24,54232,54233],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[19,54235,54237],{"id":54236},"_292-函数的返回值","2.9.2 函数的返回值",[24,54239,54240],{},[83,54241],{"alt":145,"src":54242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[24,54244,54245],{},[83,54246],{"alt":145,"src":54247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[42,54249,54250,54253,54256,54259,54262],{},[45,54251,54252],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[45,54254,54255],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[45,54257,54258],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[45,54260,54261],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[45,54263,54264],{},"断点调试:进入函数内部看执行过程F11",[19,54266,54268],{"id":54267},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[140,54270,54272],{"className":52339,"code":54271,"language":52341,"meta":145,"style":145},"    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",[48,54273,54274,54279,54284,54288,54293],{"__ignoreMap":145},[149,54275,54276],{"class":151,"line":152},[149,54277,54278],{"class":155},"    function fn(a, b) {\n",[149,54280,54281],{"class":151,"line":193},[149,54282,54283],{"class":155},"      console.log(a + b);\n",[149,54285,54286],{"class":151,"line":235},[149,54287,3906],{"class":155},[149,54289,54290],{"class":151,"line":340},[149,54291,54292],{"class":155},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[149,54294,54295],{"class":151,"line":346},[149,54296,54297],{"class":155},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[19,54299,54301],{"id":54300},"_294-作用域","2.9.4 作用域",[42,54303,54304,54310,54315,54318,54321],{},[45,54305,54306,54307],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[31,54308,54309],{},"作用域",[45,54311,54312],{},[31,54313,54314],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[45,54316,54317],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[45,54319,54320],{},"函数内部可以直接所使用全局变量",[45,54322,54323],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[24,54325,16346],{},[140,54327,54329],{"className":52339,"code":54328,"language":52341,"meta":145,"style":145},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[48,54330,54331,54336,54341,54345,54350,54355,54360],{"__ignoreMap":145},[149,54332,54333],{"class":151,"line":152},[149,54334,54335],{"class":155},"    function fun() {\n",[149,54337,54338],{"class":151,"line":193},[149,54339,54340],{"class":155},"      num = 10\n",[149,54342,54343],{"class":151,"line":235},[149,54344,3906],{"class":155},[149,54346,54347],{"class":151,"line":340},[149,54348,54349],{"class":155},"    fun()\n",[149,54351,54352],{"class":151,"line":346},[149,54353,54354],{"class":155},"    console.log(num)\n",[149,54356,54357],{"class":151,"line":352},[149,54358,54359],{"class":155},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[149,54361,54362],{"class":151,"line":1021},[149,54363,54364],{"class":155},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[42,54366,54367,54370],{},[45,54368,54369],{},"函数内部的形参可以看做是局部变量",[45,54371,54372],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[24,54374,54375,54376],{},"变量访问原则： ",[31,54377,54378],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[19,54380,54382],{"id":54381},"_295-匿名函数","2.9.5 匿名函数",[24,54384,54385],{},"函数可以分为具名函数和匿名函数",[24,54387,54388],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[125,54390,54391],{},[45,54392,54393],{},"函数表达式",[24,54395,54396],{},[83,54397],{"alt":145,"src":54398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[24,54400,54401],{},"里边也可以写参数",[24,54403,54404],{},"具名函数调用位置可以随意调整；",[24,54406,54407],{},"匿名函数函数表达式形式只能在声明后才可以使用",[125,54409,54410],{"start":193},[45,54411,54412],{},"立即执行函数",[24,54414,54415],{},[83,54416],{"alt":145,"src":54417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[24,54419,54420],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[24,54422,54423],{},"写法：两个小括号，然后在第一个小括号中写function",[24,54425,54426],{},"(function () {})();",[24,54428,54429],{},"不要落下最后的;",[24,54431,54432],{},"立即执行函数必须要加;",[24,54434,54435],{},"分号写前写后都没问题",[24,54437,54438],{},"写前：",[24,54440,54441],{},"(function() {})()",[24,54443,54444],{},";(function () {})();",[24,54446,54447],{},"写后:",[24,54449,54450],{},"(function() {})();",[24,54452,54426],{},[24,54454,54455],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[24,54457,54458],{},"还有一种写法：",[24,54460,54461],{},"(function(){}());",[24,54463,54464],{},"或者:",[24,54466,54467],{},"!function(){}();",[24,54469,54470],{},"立即执行函数有时候也是可以加名字的：",[24,54472,54473],{},"(function flexible(window,document) {}(window,document));",[24,54475,54476],{},"省一些调用方法",[19,54478,54480],{"id":54479},"_296-逻辑中断","2.9.6 逻辑中断!!!",[24,54482,54483],{},[83,54484],{"alt":145,"src":54485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[24,54487,54488],{},"这样就不用非得给x,y初始化了",[24,54490,54491],{},[83,54492],{"alt":145,"src":54493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[24,54495,54496],{},"代码执行时先看左边",[24,54498,54499],{},"例如：console.log(false && 3+5)",[24,54501,54502],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[24,54504,54505],{},"&&都是真时，就返回最后一个真值",[24,54507,54508],{},"console.log(11 && 22)",[24,54510,54511],{},"输出22",[24,54513,54514],{},"逻辑与：遇真则真",[24,54516,16346],{},[24,54518,54519],{},"let age=1",[24,54521,54522],{},"console.log(11 || age++)",[24,54524,54525],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[24,54527,54528],{},"console.log(11 || 22)",[24,54530,54531],{},"||逻辑或遇到真就直接输出，输出结果为11",[24,54533,54534],{},"||如果都是假的话，就取最后一个假的值了",[19,54536,54538],{"id":54537},"_297-转换为boolean型","2.9.7 转换为Boolean型",[24,54540,54541],{},"显示转换：",[24,54543,54544,54547,54548],{},[31,54545,54546],{},"记忆","： ",[31,54549,54550],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[24,54552,54553],{},"空字符串为假，其他字符串全为真",[24,54555,54556],{},[83,54557],{"alt":145,"src":54558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[24,54560,54561],{},"隐式转换：",[24,54563,54564],{},[83,54565],{"alt":145,"src":54566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[24,54568,54569],{},"隐式转换:",[24,54571,54572],{},"null+3=3",[24,54574,54575],{},"undefined+3=NaN",[24,54577,54578],{},"null==undefined 输出true,他两个都当0看",[24,54580,54581],{},"null===undefined 输出false",[24,54583,54584],{},"undefined做任何操作都是NaN",[24,54586,54587],{},"NaN不等于NaN，NaN表示计算错误",[14,54589,54591],{"id":54590},"_210-对象","2.10 对象",[19,54593,54595],{"id":54594},"_2101-对象的介绍","2.10.1 对象的介绍",[24,54597,54598],{},"对象也是一种数据类型，里边的数据是无序的",[24,54600,54601],{},"对象由属性和方法组成",[24,54603,54604],{},[83,54605],{"alt":145,"src":54606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[24,54608,54609],{},[83,54610],{"alt":145,"src":54611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[24,54613,54614],{},[83,54615],{"alt":145,"src":54616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[19,54618,54620],{"id":54619},"_2102-对象属性","2.10.2 对象属性",[24,54622,54623],{},[83,54624],{"alt":145,"src":54625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[125,54627,54628],{},[45,54629,54630],{},"查询对象",[24,54632,54633],{},"对象名.属性 goods.uname",[24,54635,54636],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[24,54638,54639],{},"不带字符串的属性名也可以使用 对象名['属性名']",[24,54641,54642],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[24,54644,54645],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[125,54647,54648],{"start":193},[45,54649,54650],{},"重新赋值",[24,54652,54653],{},"对象名.属性=新值",[125,54655,54656],{"start":235},[45,54657,54658],{},"增加新数据",[24,54660,54653],{},[125,54662,54663],{"start":340},[45,54664,54665],{},"删除对象中的属性",[24,54667,54668],{},"delete 对象名.属性",[19,54670,54672],{"id":54671},"_2103-对象方法","2.10.3 对象方法",[24,54674,54675],{},[83,54676],{"alt":145,"src":54677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[24,54679,54680],{},"后边跟的是匿名函数",[24,54682,54683],{},"对象外面的叫函数；对象内部的叫方法",[24,54685,54686],{},[83,54687],{"alt":145,"src":54688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[19,54690,54692],{"id":54691},"_2104-遍历对象","2.10.4 遍历对象",[24,54694,54695],{},"理解为加括号的python字典遍历",[24,54697,54698],{},[83,54699],{"alt":145,"src":54700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[24,54702,54703],{},"k是字符串类型",[24,54705,54706],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[140,54708,54710],{"className":52339,"code":54709,"language":52341,"meta":145,"style":145},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[48,54711,54712,54717,54722,54727,54732],{"__ignoreMap":145},[149,54713,54714],{"class":151,"line":152},[149,54715,54716],{"class":155},"   let arr = [1, 2, 3]\n",[149,54718,54719],{"class":151,"line":193},[149,54720,54721],{"class":155},"    for (let k in arr) {\n",[149,54723,54724],{"class":151,"line":235},[149,54725,54726],{"class":155},"      console.log(k)\n",[149,54728,54729],{"class":151,"line":340},[149,54730,54731],{"class":155},"      console.log(arr[k])\n",[149,54733,54734],{"class":151,"line":346},[149,54735,3906],{"class":155},[24,54737,54738],{},[83,54739],{"alt":145,"src":54740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[24,54742,54743],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[24,54745,54746],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[24,54748,54749],{},"for in 得到的k是属性名",[53512,54751,54752],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[24,54754,54755],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[19,54757,54759],{"id":54758},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[24,54761,54762],{},"数组中放对象信息",[140,54764,54768],{"className":54765,"code":54766,"language":54767,"meta":145,"style":145},"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",[48,54769,54770,54778,54783,54788,54793,54798,54803,54808,54813,54818,54823,54828,54833,54837,54841],{"__ignoreMap":145},[149,54771,54772,54774,54776],{"class":151,"line":152},[149,54773,156],{"class":155},[149,54775,53512],{"class":159},[149,54777,190],{"class":155},[149,54779,54780],{"class":151,"line":193},[149,54781,54782],{"class":155},"    let students = [\n",[149,54784,54785],{"class":151,"line":235},[149,54786,54787],{"class":155},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[149,54789,54790],{"class":151,"line":340},[149,54791,54792],{"class":155},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[149,54794,54795],{"class":151,"line":346},[149,54796,54797],{"class":155},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[149,54799,54800],{"class":151,"line":352},[149,54801,54802],{"class":155},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[149,54804,54805],{"class":151,"line":1021},[149,54806,54807],{"class":155},"    ]\n",[149,54809,54810],{"class":151,"line":1035},[149,54811,54812],{"class":155},"    for (let i = 0; i \u003C students.length; i++) {\n",[149,54814,54815],{"class":151,"line":1054},[149,54816,54817],{"class":155},"      for (let k in students[i]) {\n",[149,54819,54820],{"class":151,"line":1072},[149,54821,54822],{"class":155},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[149,54824,54825],{"class":151,"line":1090},[149,54826,54827],{"class":155},"        \u002F\u002F输出每个人的名字：\n",[149,54829,54830],{"class":151,"line":1633},[149,54831,54832],{"class":155},"        \u002F\u002Fconsole.log(students[i].name)\n",[149,54834,54835],{"class":151,"line":1644},[149,54836,54096],{"class":155},[149,54838,54839],{"class":151,"line":3348},[149,54840,3906],{"class":155},[149,54842,54843,54845,54847],{"class":151,"line":3362},[149,54844,54115],{"class":155},[149,54846,53512],{"class":159},[149,54848,190],{"class":155},[19,54850,54852],{"id":54851},"_2106-内置对象","2.10.6 内置对象",[24,54854,54855],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[125,54857,54858],{},[45,54859,54860],{},"数学对象Math",[24,54862,54863],{},[83,54864],{"alt":145,"src":54865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[24,54867,54868],{},[2102,54869,54872],{"href":54870,"rel":54871},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25573],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[24,54874,54875],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[24,54877,54878],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[24,54880,54881],{},"数组不可以使用Math中的max,min来求最大值与最小值",[24,54883,54884],{},"null是一个空对象，可以认为：null类似于let obj={}",[24,54886,54887],{},"null属于对象数据类型",[125,54889,54890],{"start":193},[45,54891,54892],{},"生成任意范围随机数",[24,54894,54895],{},[83,54896],{"alt":145,"src":54897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[24,54899,54900],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[24,54902,54903],{},"乘以几就取不到几",[24,54905,54906],{},"取数组中的随机元素：",[24,54908,54909],{},"let arr = ['red', 'green', 'blue']",[24,54911,54912],{},"let random = Math.floor(Math.random() * arr.length)",[24,54914,54915],{},"console.log(arr[random])",[24,54917,54918],{},"这个函数得到的是全闭区间",[24,54920,54921],{},"function getRandom(N, M) {",[24,54923,54924],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[24,54926,2805],{},[24,54928,54929],{},"console.log(getRandom(4, 8))",[19,54931,54933],{"id":54932},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[24,54935,54936],{},[83,54937],{"alt":145,"src":54938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[24,54940,54941],{},[83,54942],{"alt":145,"src":54943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[24,54945,54946],{},[83,54947],{"alt":145,"src":54948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[24,54950,54951],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[24,54953,54954],{},[83,54955],{"alt":145,"src":54956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[24,54958,54959],{},[83,54960],{"alt":145,"src":54961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[24,54963,54964],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[24,54966,54967],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[24,54969,54970],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1783,54972,54973],{},"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":145,"searchDepth":193,"depth":193,"links":54975},[54976,54984,54985,54986,54987,54988,54995,54999,55005,55014],{"id":52174,"depth":193,"text":52175,"children":54977},[54978,54979,54980,54981,54982,54983],{"id":52178,"depth":235,"text":52179},{"id":52195,"depth":235,"text":52196},{"id":52235,"depth":235,"text":52236},{"id":52247,"depth":235,"text":52248},{"id":52256,"depth":235,"text":52257},{"id":52304,"depth":235,"text":52305},{"id":52314,"depth":193,"text":52315},{"id":52402,"depth":193,"text":52403},{"id":52425,"depth":193,"text":52426},{"id":52437,"depth":193,"text":52438},{"id":52624,"depth":193,"text":52625,"children":54989},[54990,54991,54992,54993,54994],{"id":52628,"depth":235,"text":52629},{"id":52637,"depth":235,"text":52638},{"id":52665,"depth":235,"text":52666},{"id":52701,"depth":235,"text":52702},{"id":52726,"depth":235,"text":52727},{"id":52738,"depth":193,"text":52739,"children":54996},[54997,54998],{"id":52759,"depth":235,"text":52760},{"id":52853,"depth":235,"text":52854},{"id":52911,"depth":193,"text":52912,"children":55000},[55001,55002,55003,55004],{"id":52915,"depth":235,"text":52916},{"id":52939,"depth":235,"text":52940},{"id":52992,"depth":235,"text":52993},{"id":53796,"depth":235,"text":53797},{"id":54181,"depth":193,"text":54182,"children":55006},[55007,55008,55009,55010,55011,55012,55013],{"id":54199,"depth":235,"text":54200},{"id":54236,"depth":235,"text":54237},{"id":54267,"depth":235,"text":54268},{"id":54300,"depth":235,"text":54301},{"id":54381,"depth":235,"text":54382},{"id":54479,"depth":235,"text":54480},{"id":54537,"depth":235,"text":54538},{"id":54590,"depth":193,"text":54591,"children":55015},[55016,55017,55018,55019,55020,55021,55022],{"id":54594,"depth":235,"text":54595},{"id":54619,"depth":235,"text":54620},{"id":54671,"depth":235,"text":54672},{"id":54691,"depth":235,"text":54692},{"id":54758,"depth":235,"text":54759},{"id":54851,"depth":235,"text":54852},{"id":54932,"depth":235,"text":54933},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52166,"description":1797},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55029,"title":55030,"body":55031,"description":1797,"extension":1798,"meta":78355,"navigation":1800,"path":78356,"seo":78357,"stem":78358,"__hash__":78359},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55032,"toc":78295},[55033,55036,55039,55042,55047,55050,55053,55056,55060,55064,55070,55075,55083,55090,55093,55097,55102,55107,55112,55115,55118,55129,55132,55136,55139,55142,55147,55152,55157,55160,55163,55255,55258,55263,55266,55271,55274,55277,55282,55285,55290,55294,55297,55311,55315,55320,55323,55326,55330,55335,55338,55342,55346,55351,55355,55360,55363,55366,55369,55372,55375,55378,55383,55388,55416,55419,55422,55425,55430,55433,55436,55439,55442,55446,55475,55479,55484,55489,55492,55495,55498,55503,55615,55620,55625,55786,55791,55794,55798,55803,55808,55811,55814,55817,55820,55823,55826,55829,55832,55835,55838,55841,55844,55847,55850,55852,55855,55858,55861,55866,55870,56267,56270,56276,56280,56285,57564,57569,57572,57575,57578,57583,58779,58783,58789,58794,58797,58802,58807,58811,58815,58820,58823,58828,58831,58834,58838,59745,59748,59752,59973,59976,59979,59982,60208,60211,60435,60438,60442,60447,60450,60453,60681,60684,60717,60720,60724,60729,60733,60736,60739,60742,60745,60748,60751,60754,60759,62039,62043,62046,63137,63141,63144,63147,63150,63153,63157,63160,63163,63165,63173,64652,64656,64659,64662,64665,64874,64877,64881,64885,64890,64895,64898,64901,64906,64910,64915,64918,65027,65031,65036,65041,65044,65047,65051,65056,65061,65066,65069,65072,65083,65086,65091,65096,65099,65102,65175,65179,65184,65187,65189,65200,65204,65209,66535,66538,66541,66544,66546,66549,66552,66555,66558,66561,66564,66567,66570,66573,66576,66579,66582,66584,66586,66589,66593,67687,67690,67693,67709,67723,67726,67731,67737,67742,67746,67750,67755,67759,67764,68206,68211,68214,68218,68223,68226,68229,68233,68238,68242,68247,68252,68256,68261,68266,68269,68274,68279,68283,68288,68293,68394,68397,68401,68406,68772,68775,68778,68781,68784,68787,68790,68793,68796,70092,70096,70101,70106,70109,70112,70115,70118,70120,70125,70130,70133,70137,70142,70147,70152,70155,70158,70161,70164,70167,70172,70175,70179,70184,70189,70193,70198,70201,70206,70209,70212,70215,70218,70221,70226,70229,70232,70235,70238,70242,70247,70250,70254,70259,70262,70265,70269,70298,70301,70305,70309,70314,70318,70323,70326,70329,70332,70335,70338,70341,70344,70347,70350,70353,70356,70359,70362,70365,70369,70374,70379,70382,70386,70390,70395,70398,70402,70405,70408,70413,70418,70423,70428,70433,70436,70439,70444,70449,70453,70458,70461,70466,70469,70472,70475,70478,70483,70486,70495,70499,70504,70507,70510,70514,70517,70522,70526,70529,70535,70541,70545,70571,70574,72135,72138,72632,72635,72640,72645,72650,72654,72659,72664,72669,72673,72678,72681,72684,72687,72690,72694,72697,72702,72705,72710,72714,72719,72722,72727,72732,72737,72740,72743,72748,72753,72756,72759,72763,72766,72771,72774,72779,72782,72787,72792,72797,72800,72805,72870,72873,72884,72888,72893,73065,73069,73074,73077,73080,73083,73087,73098,73102,73105,73110,73115,73118,73121,73124,73127,73130,73132,73135,73138,73141,73146,73149,73154,73157,73161,73164,73167,73181,73185,73188,73243,73248,73251,73254,73259,73262,73266,73271,73401,73405,73410,73415,73496,73501,73505,73508,73513,73518,73524,73527,73530,73533,73537,73542,73545,73556,73560,73577,76624,76628,76631,76634,76637,76658,76662,76665,76673,76676,76681,76684,76687,76692,76697,76701,76722,76726,76731,76734,76737,76740,76743,76747,76752,76755,76759,76764,76767,76772,76775,76780,76783,76788,77991,77995,78000,78003,78008,78292],[10,55034,55030],{"id":55035},"_3web-apis",[24,55037,55038],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[24,55040,55041],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[24,55043,55044],{},[83,55045],{"alt":145,"src":55046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[24,55048,55049],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[24,55051,55052],{},"建议数组和对象使用 const 来声明",[24,55054,55055],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55057,55059],{"id":55058},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[19,55061,55063],{"id":55062},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[24,55065,55066,55069],{},[48,55067,55068],{},"document"," = HTML 文件解析后的对象化表示；",[24,55071,55072,55074],{},[48,55073,55068],{}," ≠ HTML 文件本身",[24,55076,55077,55082],{},[31,55078,55079],{},[48,55080,55081],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[24,55084,55085,55089],{},[31,55086,55087],{},[48,55088,55068],{}," ：容器里的内容，代表当前加载的网页（DOM）",[24,55091,55092],{},"document实际上为window.document的简写",[19,55094,55096],{"id":55095},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[24,55098,55099],{},[83,55100],{"alt":145,"src":55101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[24,55103,55104],{},[83,55105],{"alt":145,"src":55106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[24,55108,55109],{},[83,55110],{"alt":145,"src":55111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[24,55113,55114],{},"console.dir()",[24,55116,55117],{},"dir用来打印对象",[42,55119,55120,55123,55126],{},[45,55121,55122],{},"任何一个标签，都是一个对象",[45,55124,55125],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[45,55127,55128],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[24,55130,55131],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[19,55133,55135],{"id":55134},"_312-获取dom对象","3.1.2 获取DoM对象",[24,55137,55138],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[24,55140,55141],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[24,55143,55144],{},[31,55145,55146],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[125,55148,55149],{},[45,55150,55151],{},"利用CSS选择器来获取标签元素",[24,55153,55154],{},[83,55155],{"alt":145,"src":55156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[24,55158,55159],{},"里边的选择器必须必须加引号！！！",[24,55161,55162],{},"只选择第一个元素",[140,55164,55166],{"className":54765,"code":55165,"language":54767,"meta":145,"style":145},"\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",[48,55167,55168,55176,55197,55216,55224,55229,55234,55239,55247],{"__ignoreMap":145},[149,55169,55170,55172,55174],{"class":151,"line":152},[149,55171,156],{"class":155},[149,55173,53499],{"class":159},[149,55175,190],{"class":155},[149,55177,55178,55180,55182,55185,55187,55190,55193,55195],{"class":151,"line":193},[149,55179,587],{"class":155},[149,55181,301],{"class":159},[149,55183,55184],{"class":162}," class",[149,55186,166],{"class":155},[149,55188,55189],{"class":169},"\"box\"",[149,55191,55192],{"class":155},">123\u003C\u002F",[149,55194,301],{"class":159},[149,55196,190],{"class":155},[149,55198,55199,55201,55203,55205,55207,55209,55212,55214],{"class":151,"line":235},[149,55200,587],{"class":155},[149,55202,301],{"class":159},[149,55204,55184],{"class":162},[149,55206,166],{"class":155},[149,55208,55189],{"class":169},[149,55210,55211],{"class":155},">456\u003C\u002F",[149,55213,301],{"class":159},[149,55215,190],{"class":155},[149,55217,55218,55220,55222],{"class":151,"line":340},[149,55219,587],{"class":155},[149,55221,53512],{"class":159},[149,55223,190],{"class":155},[149,55225,55226],{"class":151,"line":346},[149,55227,55228],{"class":155},"    \u002F\u002F 1.获取匹配的第一个元素\n",[149,55230,55231],{"class":151,"line":352},[149,55232,55233],{"class":155},"    const box = document.querySelector('div')\n",[149,55235,55236],{"class":151,"line":1021},[149,55237,55238],{"class":155},"    console.dir(box)\n",[149,55240,55241,55243,55245],{"class":151,"line":1035},[149,55242,54115],{"class":155},[149,55244,53512],{"class":159},[149,55246,190],{"class":155},[149,55248,55249,55251,55253],{"class":151,"line":1054},[149,55250,665],{"class":155},[149,55252,53499],{"class":159},[149,55254,190],{"class":155},[24,55256,55257],{},"只选123，不选456",[24,55259,55260],{},[83,55261],{"alt":145,"src":55262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[24,55264,55265],{},"返回的是一个数组的集合，不能对其进行直接修改",[24,55267,55268],{},[83,55269],{"alt":145,"src":55270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[24,55272,55273],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[24,55275,55276],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[125,55278,55279],{"start":193},[45,55280,55281],{},"其他方法来获取标签元素",[24,55283,55284],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[24,55286,55287],{},[83,55288],{"alt":145,"src":55289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[19,55291,55293],{"id":55292},"_313-操作元素的内容","3.1.3 操作元素的内容",[24,55295,55296],{},"设置修改DOM元素内容有两种方式：",[42,55298,55299,55302,55305,55308],{},[45,55300,55301],{},"元素.innerText=''",[45,55303,55304],{},"元素.innerHTML=''",[45,55306,55307],{},"不写字符串输出数字也是可以的",[45,55309,55310],{},"元素.innerHtml=1",[120,55312,55314],{"id":55313},"_3131-innertext","3.1.3.1 innerText",[24,55316,55317],{},[83,55318],{"alt":145,"src":55319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[24,55321,55322],{},"思路：实现了修改盒子中的内容！",[24,55324,55325],{},"它只显示纯文本，不解析标签",[120,55327,55329],{"id":55328},"_3132-innerhtml","3.1.3.2 innerHTML",[24,55331,55332],{},[83,55333],{"alt":145,"src":55334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[24,55336,55337],{},"相比于innerText，他的强大之处在于可以解析标签",[19,55339,55341],{"id":55340},"_314-操作元素属性","3.1.4 操作元素属性",[120,55343,55345],{"id":55344},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[24,55347,55348],{},[83,55349],{"alt":145,"src":55350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[120,55352,55354],{"id":55353},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[24,55356,55357],{},[83,55358],{"alt":145,"src":55359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[24,55361,55362],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[24,55364,55365],{},"div.style.backgroundColor = 'hotpink'",[24,55367,55368],{},"如果按照css的写法，-表示减，就会出错",[24,55370,55371],{},"body元素不需要再获取，直接用就行！！！！！！",[24,55373,55374],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[24,55376,55377],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[24,55379,55380],{},[83,55381],{"alt":145,"src":55382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[24,55384,55385],{},[83,55386],{"alt":145,"src":55387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[125,55389,55390,55393,55396,55399,55402,55405],{},[45,55391,55392],{},"className这个方式就是修改很多样式的时候来使用的！",[45,55394,55395],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[45,55397,55398],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[45,55400,55401],{},"className为属性名，如果还用class的话就导致与关键字冲突",[45,55403,55404],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[45,55406,55407,55408,55413],{},"解析标签的时候就变为了",[301,55409],{"className":55410},[55411,55412],"nav","box",[55414,55415],"br",{},[24,55417,55418],{},"例子：",[301,55420],{"className":55421},[55411],[53512,55423,55424],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[24,55426,55427],{},[83,55428],{"alt":145,"src":55429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[24,55431,55432],{},"追加和删除类名用classList",[24,55434,55435],{},"常用于类似于开关的操作",[24,55437,55438],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[24,55440,55441],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[120,55443,55445],{"id":55444},"_3143-牢记点","3.1.4.3 牢记点",[125,55447,55448,55451,55454,55457,55460,55463,55466,55469,55472],{},[45,55449,55450],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[45,55452,55453],{},"使用style属性操作css时不要忘记引号",[45,55455,55456],{},"使用className或者classList时也不要忘记引号",[45,55458,55459],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[45,55461,55462],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[45,55464,55465],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[45,55467,55468],{},"若： let arr=['1','2',3] arr[0]=1",[45,55470,55471],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[45,55473,55474],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[19,55476,55478],{"id":55477},"_315-操作表单元素","3.1.5 操作表单元素",[125,55480,55481],{},[45,55482,55483],{},"天生的属性",[24,55485,55486],{},[83,55487],{"alt":145,"src":55488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[24,55490,55491],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[24,55493,55494],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[24,55496,55497],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[24,55499,55500],{},[83,55501],{"alt":145,"src":55502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[140,55504,55506],{"className":52339,"code":55505,"language":52341,"meta":145,"style":145},"在复选框中如果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",[48,55507,55508,55513,55543,55548,55553,55558,55563,55567,55572,55577,55593,55605,55610],{"__ignoreMap":145},[149,55509,55510],{"class":151,"line":152},[149,55511,55512],{"class":155},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[149,55514,55515,55517,55519,55521,55523,55526,55528,55530,55532,55534,55536,55538,55541],{"class":151,"line":193},[149,55516,156],{"class":155},[149,55518,504],{"class":159},[149,55520,507],{"class":162},[149,55522,166],{"class":155},[149,55524,55525],{"class":169},"\"checkbox\"",[149,55527,515],{"class":162},[149,55529,166],{"class":155},[149,55531,1382],{"class":169},[149,55533,16670],{"class":162},[149,55535,166],{"class":155},[149,55537,1382],{"class":169},[149,55539,55540],{"class":162}," checked",[149,55542,190],{"class":155},[149,55544,55545],{"class":151,"line":235},[149,55546,55547],{"class":155},"不选的话：\n",[149,55549,55550],{"class":151,"line":340},[149,55551,55552],{"class":155},"const input = document.querySelector('input')\n",[149,55554,55555],{"class":151,"line":346},[149,55556,55557],{"class":155},"input.checked=false\n",[149,55559,55560],{"class":151,"line":352},[149,55561,55562],{"class":155},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[149,55564,55565],{"class":151,"line":1021},[149,55566,4119],{"emptyLinePlaceholder":1800},[149,55568,55569],{"class":151,"line":1035},[149,55570,55571],{"class":155},"禁用按钮：\n",[149,55573,55574],{"class":151,"line":1054},[149,55575,55576],{"class":155},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[149,55578,55579,55581,55583,55586,55589,55591],{"class":151,"line":1072},[149,55580,156],{"class":155},[149,55582,646],{"class":159},[149,55584,55585],{"class":162}," disabled",[149,55587,55588],{"class":155},">点击\u003C\u002F",[149,55590,646],{"class":159},[149,55592,190],{"class":155},[149,55594,55595,55597,55599,55601,55603],{"class":151,"line":1090},[149,55596,156],{"class":155},[149,55598,646],{"class":159},[149,55600,55588],{"class":155},[149,55602,646],{"class":159},[149,55604,190],{"class":155},[149,55606,55607],{"class":151,"line":1633},[149,55608,55609],{"class":155},"const bt = document.querySelector('button')\n",[149,55611,55612],{"class":151,"line":1644},[149,55613,55614],{"class":155},"bt.disabled = false\n",[125,55616,55617],{"start":193},[45,55618,55619],{},"自定义属性",[24,55621,55622],{},[83,55623],{"alt":145,"src":55624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[140,55626,55628],{"className":54765,"code":55627,"language":54767,"meta":145,"style":145},"\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",[48,55629,55630,55638,55666,55685,55704,55723,55742,55750,55755,55760,55765,55770,55778],{"__ignoreMap":145},[149,55631,55632,55634,55636],{"class":151,"line":152},[149,55633,156],{"class":155},[149,55635,53499],{"class":159},[149,55637,190],{"class":155},[149,55639,55640,55642,55644,55647,55649,55651,55654,55656,55659,55662,55664],{"class":151,"line":193},[149,55641,587],{"class":155},[149,55643,301],{"class":159},[149,55645,55646],{"class":162}," data-id",[149,55648,166],{"class":155},[149,55650,5396],{"class":169},[149,55652,55653],{"class":162}," data-spm",[149,55655,166],{"class":155},[149,55657,55658],{"class":169},"\"我不知道\"",[149,55660,55661],{"class":155},">1\u003C\u002F",[149,55663,301],{"class":159},[149,55665,190],{"class":155},[149,55667,55668,55670,55672,55674,55676,55678,55681,55683],{"class":151,"line":235},[149,55669,587],{"class":155},[149,55671,301],{"class":159},[149,55673,55646],{"class":162},[149,55675,166],{"class":155},[149,55677,5419],{"class":169},[149,55679,55680],{"class":155},">2\u003C\u002F",[149,55682,301],{"class":159},[149,55684,190],{"class":155},[149,55686,55687,55689,55691,55693,55695,55697,55700,55702],{"class":151,"line":340},[149,55688,587],{"class":155},[149,55690,301],{"class":159},[149,55692,55646],{"class":162},[149,55694,166],{"class":155},[149,55696,5432],{"class":169},[149,55698,55699],{"class":155},">3\u003C\u002F",[149,55701,301],{"class":159},[149,55703,190],{"class":155},[149,55705,55706,55708,55710,55712,55714,55716,55719,55721],{"class":151,"line":346},[149,55707,587],{"class":155},[149,55709,301],{"class":159},[149,55711,55646],{"class":162},[149,55713,166],{"class":155},[149,55715,5445],{"class":169},[149,55717,55718],{"class":155},">4\u003C\u002F",[149,55720,301],{"class":159},[149,55722,190],{"class":155},[149,55724,55725,55727,55729,55731,55733,55735,55738,55740],{"class":151,"line":352},[149,55726,587],{"class":155},[149,55728,301],{"class":159},[149,55730,55646],{"class":162},[149,55732,166],{"class":155},[149,55734,5466],{"class":169},[149,55736,55737],{"class":155},">5\u003C\u002F",[149,55739,301],{"class":159},[149,55741,190],{"class":155},[149,55743,55744,55746,55748],{"class":151,"line":1021},[149,55745,587],{"class":155},[149,55747,53512],{"class":159},[149,55749,190],{"class":155},[149,55751,55752],{"class":151,"line":1035},[149,55753,55754],{"class":155},"    const one = document.querySelector('div')\n",[149,55756,55757],{"class":151,"line":1054},[149,55758,55759],{"class":155},"    console.log(one.dataset)\n",[149,55761,55762],{"class":151,"line":1072},[149,55763,55764],{"class":155},"    console.log(one.dataset.id)\n",[149,55766,55767],{"class":151,"line":1090},[149,55768,55769],{"class":155},"    console.log(one.dataset.spm)\n",[149,55771,55772,55774,55776],{"class":151,"line":1633},[149,55773,54115],{"class":155},[149,55775,53512],{"class":159},[149,55777,190],{"class":155},[149,55779,55780,55782,55784],{"class":151,"line":1644},[149,55781,665],{"class":155},[149,55783,53499],{"class":159},[149,55785,190],{"class":155},[24,55787,55788],{},[83,55789],{"alt":145,"src":55790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[24,55792,55793],{},"document.querySelector选择的是第一个对象（元素）",[19,55795,55797],{"id":55796},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[24,55799,55800],{},[83,55801],{"alt":145,"src":55802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[24,55804,55805],{},[83,55806],{"alt":145,"src":55807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[24,55809,55810],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53512,55812,55813],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[24,55815,55816],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53512,55818,55819],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[24,55821,55822],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[24,55824,55825],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[24,55827,55828],{},"单位为毫秒！！！",[24,55830,55831],{},"可以搭配匿名函数来用！！！",[24,55833,55834],{},"setInterval(function () {",[24,55836,55837],{},"alert('两秒执行一次')",[24,55839,55840],{},"}, 2000)",[24,55842,55843],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[24,55845,55846],{},"function fn() {",[24,55848,55849],{},"document.write(1)",[24,55851,2805],{},[24,55853,55854],{},"setInterval(fn, 1000)",[24,55856,55857],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[24,55859,55860],{},"setInterval('fn()', 1000)",[24,55862,55863],{},[83,55864],{"alt":145,"src":55865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[120,55867,55869],{"id":55868},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[140,55871,55873],{"className":52339,"code":55872,"language":52341,"meta":145,"style":145},"\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",[48,55874,55875,55885,55899,55903,55911,55925,55945,55957,55965,55969,55977,56014,56019,56024,56029,56037,56045,56067,56075,56080,56102,56107,56112,56123,56128,56148,56156,56171,56186,56197,56202,56212,56222,56226,56235,56239,56247,56255,56259],{"__ignoreMap":145},[149,55876,55877,55879,55881,55883],{"class":151,"line":152},[149,55878,53003],{"class":155},[149,55880,53006],{"class":159},[149,55882,53009],{"class":162},[149,55884,190],{"class":155},[149,55886,55887,55889,55891,55893,55895,55897],{"class":151,"line":193},[149,55888,156],{"class":155},[149,55890,52341],{"class":159},[149,55892,53020],{"class":162},[149,55894,166],{"class":155},[149,55896,53025],{"class":169},[149,55898,190],{"class":155},[149,55900,55901],{"class":151,"line":235},[149,55902,4119],{"emptyLinePlaceholder":1800},[149,55904,55905,55907,55909],{"class":151,"line":340},[149,55906,156],{"class":155},[149,55908,53038],{"class":159},[149,55910,190],{"class":155},[149,55912,55913,55915,55917,55919,55921,55923],{"class":151,"line":346},[149,55914,587],{"class":155},[149,55916,53048],{"class":159},[149,55918,53051],{"class":162},[149,55920,166],{"class":155},[149,55922,53056],{"class":169},[149,55924,190],{"class":155},[149,55926,55927,55929,55931,55933,55935,55937,55939,55941,55943],{"class":151,"line":352},[149,55928,587],{"class":155},[149,55930,53048],{"class":159},[149,55932,515],{"class":162},[149,55934,166],{"class":155},[149,55936,53095],{"class":169},[149,55938,53075],{"class":162},[149,55940,166],{"class":155},[149,55942,53102],{"class":169},[149,55944,190],{"class":155},[149,55946,55947,55949,55951,55953,55955],{"class":151,"line":1021},[149,55948,587],{"class":155},[149,55950,53111],{"class":159},[149,55952,53114],{"class":155},[149,55954,53111],{"class":159},[149,55956,190],{"class":155},[149,55958,55959,55961,55963],{"class":151,"line":1035},[149,55960,665],{"class":155},[149,55962,53038],{"class":159},[149,55964,190],{"class":155},[149,55966,55967],{"class":151,"line":1054},[149,55968,4119],{"emptyLinePlaceholder":1800},[149,55970,55971,55973,55975],{"class":151,"line":1072},[149,55972,156],{"class":155},[149,55974,53499],{"class":159},[149,55976,190],{"class":155},[149,55978,55979,55981,55984,55986,55988,55990,55992,55994,55996,55999,56001,56004,56007,56009,56012],{"class":151,"line":1090},[149,55980,587],{"class":155},[149,55982,55983],{"class":159},"textarea",[149,55985,515],{"class":162},[149,55987,166],{"class":155},[149,55989,1382],{"class":169},[149,55991,16670],{"class":162},[149,55993,166],{"class":155},[149,55995,1382],{"class":169},[149,55997,55998],{"class":162}," cols",[149,56000,166],{"class":155},[149,56002,56003],{"class":169},"\"30\"",[149,56005,56006],{"class":162}," rows",[149,56008,166],{"class":155},[149,56010,56011],{"class":169},"\"10\"",[149,56013,190],{"class":155},[149,56015,56016],{"class":151,"line":1633},[149,56017,56018],{"class":155},"        用户注册协议\n",[149,56020,56021],{"class":151,"line":1644},[149,56022,56023],{"class":155},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[149,56025,56026],{"class":151,"line":3348},[149,56027,56028],{"class":155},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[149,56030,56031,56033,56035],{"class":151,"line":3362},[149,56032,53476],{"class":155},[149,56034,55983],{"class":159},[149,56036,190],{"class":155},[149,56038,56039,56041,56043],{"class":151,"line":3367},[149,56040,587],{"class":155},[149,56042,55414],{"class":159},[149,56044,190],{"class":155},[149,56046,56047,56049,56051,56053,56055,56058,56060,56063,56065],{"class":151,"line":3373},[149,56048,587],{"class":155},[149,56050,646],{"class":159},[149,56052,55184],{"class":162},[149,56054,166],{"class":155},[149,56056,56057],{"class":169},"\"btn\"",[149,56059,55585],{"class":162},[149,56061,56062],{"class":155},">我已经阅读用户协议(5)\u003C\u002F",[149,56064,646],{"class":159},[149,56066,190],{"class":155},[149,56068,56069,56071,56073],{"class":151,"line":3394},[149,56070,587],{"class":155},[149,56072,53512],{"class":159},[149,56074,190],{"class":155},[149,56076,56077],{"class":151,"line":3399},[149,56078,56079],{"class":295},"    \u002F\u002F 1. 获取元素\n",[149,56081,56082,56084,56087,56089,56092,56095,56097,56100],{"class":151,"line":3413},[149,56083,12935],{"class":325},[149,56085,56086],{"class":309}," btn",[149,56088,15277],{"class":325},[149,56090,56091],{"class":155}," document.",[149,56093,56094],{"class":162},"querySelector",[149,56096,319],{"class":155},[149,56098,56099],{"class":169},"'.btn'",[149,56101,1878],{"class":155},[149,56103,56104],{"class":151,"line":3418},[149,56105,56106],{"class":295},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[149,56108,56109],{"class":151,"line":3447},[149,56110,56111],{"class":295},"    \u002F\u002F 2. 倒计时\n",[149,56113,56114,56116,56118,56120],{"class":151,"line":3452},[149,56115,53917],{"class":325},[149,56117,11152],{"class":155},[149,56119,166],{"class":325},[149,56121,56122],{"class":309}," 5\n",[149,56124,56125],{"class":151,"line":3469},[149,56126,56127],{"class":295},"    \u002F\u002F 2.1 开启定时器\n",[149,56129,56130,56132,56135,56137,56140,56142,56145],{"class":151,"line":3474},[149,56131,53917],{"class":325},[149,56133,56134],{"class":155}," n ",[149,56136,166],{"class":325},[149,56138,56139],{"class":162}," setInterval",[149,56141,319],{"class":155},[149,56143,56144],{"class":325},"function",[149,56146,56147],{"class":155}," () {\n",[149,56149,56150,56153],{"class":151,"line":3479},[149,56151,56152],{"class":155},"      i",[149,56154,56155],{"class":325},"--\n",[149,56157,56158,56161,56163,56166,56168],{"class":151,"line":3484},[149,56159,56160],{"class":155},"      btn.innerHTML ",[149,56162,166],{"class":325},[149,56164,56165],{"class":169}," `我已经阅读用户协议(${",[149,56167,2304],{"class":155},[149,56169,56170],{"class":169},"})`\n",[149,56172,56173,56176,56179,56182,56184],{"class":151,"line":3498},[149,56174,56175],{"class":325},"      if",[149,56177,56178],{"class":155}," (i ",[149,56180,56181],{"class":325},"===",[149,56183,5811],{"class":309},[149,56185,14155],{"class":155},[149,56187,56188,56191,56194],{"class":151,"line":3503},[149,56189,56190],{"class":162},"        clearInterval",[149,56192,56193],{"class":155},"(n)  ",[149,56195,56196],{"class":295},"\u002F\u002F 关闭定时器\n",[149,56198,56199],{"class":151,"line":4296},[149,56200,56201],{"class":295},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[149,56203,56204,56207,56209],{"class":151,"line":4310},[149,56205,56206],{"class":155},"        btn.disabled ",[149,56208,166],{"class":325},[149,56210,56211],{"class":309}," false\n",[149,56213,56214,56217,56219],{"class":151,"line":4318},[149,56215,56216],{"class":155},"        btn.innerHTML ",[149,56218,166],{"class":325},[149,56220,56221],{"class":169}," '同意'\n",[149,56223,56224],{"class":151,"line":4323},[149,56225,54096],{"class":155},[149,56227,56228,56231,56233],{"class":151,"line":4329},[149,56229,56230],{"class":155},"    }, ",[149,56232,8126],{"class":309},[149,56234,1878],{"class":155},[149,56236,56237],{"class":151,"line":4335},[149,56238,4119],{"emptyLinePlaceholder":1800},[149,56240,56241,56243,56245],{"class":151,"line":4340},[149,56242,54115],{"class":155},[149,56244,53512],{"class":159},[149,56246,190],{"class":155},[149,56248,56249,56251,56253],{"class":151,"line":9663},[149,56250,665],{"class":155},[149,56252,53499],{"class":159},[149,56254,190],{"class":155},[149,56256,56257],{"class":151,"line":9687},[149,56258,4119],{"emptyLinePlaceholder":1800},[149,56260,56261,56263,56265],{"class":151,"line":9692},[149,56262,665],{"class":155},[149,56264,52341],{"class":159},[149,56266,190],{"class":155},[24,56268,56269],{},"不要一直想着用死循环,避免死循环",[24,56271,56272,56275],{},[48,56273,56274],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[120,56277,56279],{"id":56278},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[125,56281,56282],{},[45,56283,56284],{},"法1",[140,56286,56288],{"className":52339,"code":56287,"language":52341,"meta":145,"style":145},"\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",[48,56289,56290,56300,56314,56318,56326,56340,56360,56372,56380,56386,56397,56408,56412,56416,56423,56435,56439,56443,56450,56462,56476,56489,56503,56507,56511,56518,56529,56540,56551,56563,56575,56587,56591,56595,56603,56613,56626,56638,56651,56655,56659,56666,56676,56688,56700,56711,56722,56732,56744,56756,56760,56764,56773,56785,56797,56825,56838,56842,56846,56853,56864,56868,56876,56884,56888,56896,56910,56925,56947,56955,56970,56983,56991,57011,57023,57035,57047,57059,57071,57083,57095,57104,57112,57120,57128,57140,57163,57182,57201,57220,57239,57258,57277,57297,57301,57321,57340,57360,57381,57392,57409,57419,57429,57439,57444,57449,57454,57459,57484,57497,57501,57524,57528,57536,57544,57552,57556],{"__ignoreMap":145},[149,56291,56292,56294,56296,56298],{"class":151,"line":152},[149,56293,53003],{"class":155},[149,56295,53006],{"class":159},[149,56297,53009],{"class":162},[149,56299,190],{"class":155},[149,56301,56302,56304,56306,56308,56310,56312],{"class":151,"line":193},[149,56303,156],{"class":155},[149,56305,52341],{"class":159},[149,56307,53020],{"class":162},[149,56309,166],{"class":155},[149,56311,53025],{"class":169},[149,56313,190],{"class":155},[149,56315,56316],{"class":151,"line":235},[149,56317,4119],{"emptyLinePlaceholder":1800},[149,56319,56320,56322,56324],{"class":151,"line":340},[149,56321,156],{"class":155},[149,56323,53038],{"class":159},[149,56325,190],{"class":155},[149,56327,56328,56330,56332,56334,56336,56338],{"class":151,"line":346},[149,56329,587],{"class":155},[149,56331,53048],{"class":159},[149,56333,53051],{"class":162},[149,56335,166],{"class":155},[149,56337,53056],{"class":169},[149,56339,190],{"class":155},[149,56341,56342,56344,56346,56348,56350,56352,56354,56356,56358],{"class":151,"line":352},[149,56343,587],{"class":155},[149,56345,53048],{"class":159},[149,56347,515],{"class":162},[149,56349,166],{"class":155},[149,56351,53095],{"class":169},[149,56353,53075],{"class":162},[149,56355,166],{"class":155},[149,56357,53102],{"class":169},[149,56359,190],{"class":155},[149,56361,56362,56364,56366,56368,56370],{"class":151,"line":1021},[149,56363,587],{"class":155},[149,56365,53111],{"class":159},[149,56367,53114],{"class":155},[149,56369,53111],{"class":159},[149,56371,190],{"class":155},[149,56373,56374,56376,56378],{"class":151,"line":1035},[149,56375,587],{"class":155},[149,56377,1783],{"class":159},[149,56379,190],{"class":155},[149,56381,56382,56384],{"class":151,"line":1054},[149,56383,8119],{"class":159},[149,56385,304],{"class":155},[149,56387,56388,56391,56393,56395],{"class":151,"line":1072},[149,56389,56390],{"class":309},"      padding",[149,56392,313],{"class":155},[149,56394,2056],{"class":309},[149,56396,841],{"class":155},[149,56398,56399,56402,56404,56406],{"class":151,"line":1090},[149,56400,56401],{"class":309},"      margin",[149,56403,313],{"class":155},[149,56405,2056],{"class":309},[149,56407,841],{"class":155},[149,56409,56410],{"class":151,"line":1633},[149,56411,3906],{"class":155},[149,56413,56414],{"class":151,"line":1644},[149,56415,4119],{"emptyLinePlaceholder":1800},[149,56417,56418,56421],{"class":151,"line":3348},[149,56419,56420],{"class":159},"    li",[149,56422,304],{"class":155},[149,56424,56425,56428,56430,56433],{"class":151,"line":3362},[149,56426,56427],{"class":309},"      list-style",[149,56429,313],{"class":155},[149,56431,56432],{"class":309},"none",[149,56434,841],{"class":155},[149,56436,56437],{"class":151,"line":3367},[149,56438,3906],{"class":155},[149,56440,56441],{"class":151,"line":3373},[149,56442,4119],{"emptyLinePlaceholder":1800},[149,56444,56445,56448],{"class":151,"line":3394},[149,56446,56447],{"class":162},"    .box",[149,56449,304],{"class":155},[149,56451,56452,56455,56457,56460],{"class":151,"line":3399},[149,56453,56454],{"class":309},"      position",[149,56456,313],{"class":155},[149,56458,56459],{"class":309},"relative",[149,56461,841],{"class":155},[149,56463,56464,56467,56469,56472,56474],{"class":151,"line":3413},[149,56465,56466],{"class":309},"      width",[149,56468,313],{"class":155},[149,56470,56471],{"class":309},"976",[149,56473,326],{"class":325},[149,56475,841],{"class":155},[149,56477,56478,56481,56483,56485,56487],{"class":151,"line":3418},[149,56479,56480],{"class":309},"      height",[149,56482,313],{"class":155},[149,56484,3263],{"class":309},[149,56486,326],{"class":325},[149,56488,841],{"class":155},[149,56490,56491,56493,56495,56497,56499,56501],{"class":151,"line":3447},[149,56492,56401],{"class":309},[149,56494,313],{"class":155},[149,56496,322],{"class":309},[149,56498,326],{"class":325},[149,56500,53257],{"class":309},[149,56502,841],{"class":155},[149,56504,56505],{"class":151,"line":3452},[149,56506,3906],{"class":155},[149,56508,56509],{"class":151,"line":3469},[149,56510,4119],{"emptyLinePlaceholder":1800},[149,56512,56513,56516],{"class":151,"line":3474},[149,56514,56515],{"class":162},"    .slider-footer",[149,56517,304],{"class":155},[149,56519,56520,56522,56524,56527],{"class":151,"line":3479},[149,56521,56454],{"class":309},[149,56523,313],{"class":155},[149,56525,56526],{"class":309},"absolute",[149,56528,841],{"class":155},[149,56530,56531,56534,56536,56538],{"class":151,"line":3484},[149,56532,56533],{"class":309},"      left",[149,56535,313],{"class":155},[149,56537,2056],{"class":309},[149,56539,841],{"class":155},[149,56541,56542,56545,56547,56549],{"class":151,"line":3498},[149,56543,56544],{"class":309},"      bottom",[149,56546,313],{"class":155},[149,56548,2056],{"class":309},[149,56550,841],{"class":155},[149,56552,56553,56555,56557,56559,56561],{"class":151,"line":3503},[149,56554,56466],{"class":309},[149,56556,313],{"class":155},[149,56558,322],{"class":309},[149,56560,2191],{"class":325},[149,56562,841],{"class":155},[149,56564,56565,56567,56569,56571,56573],{"class":151,"line":4296},[149,56566,56480],{"class":309},[149,56568,313],{"class":155},[149,56570,2438],{"class":309},[149,56572,2191],{"class":325},[149,56574,841],{"class":155},[149,56576,56577,56580,56582,56585],{"class":151,"line":4310},[149,56578,56579],{"class":309},"      background-color",[149,56581,313],{"class":155},[149,56583,56584],{"class":309},"skyblue",[149,56586,841],{"class":155},[149,56588,56589],{"class":151,"line":4318},[149,56590,3906],{"class":155},[149,56592,56593],{"class":151,"line":4323},[149,56594,4119],{"emptyLinePlaceholder":1800},[149,56596,56597,56599,56601],{"class":151,"line":4329},[149,56598,56515],{"class":162},[149,56600,8541],{"class":159},[149,56602,304],{"class":155},[149,56604,56605,56607,56609,56611],{"class":151,"line":4335},[149,56606,56454],{"class":309},[149,56608,313],{"class":155},[149,56610,56526],{"class":309},[149,56612,841],{"class":155},[149,56614,56615,56618,56620,56622,56624],{"class":151,"line":4340},[149,56616,56617],{"class":309},"      font-size",[149,56619,313],{"class":155},[149,56621,2761],{"class":309},[149,56623,326],{"class":325},[149,56625,841],{"class":155},[149,56627,56628,56630,56632,56634,56636],{"class":151,"line":9663},[149,56629,56533],{"class":309},[149,56631,313],{"class":155},[149,56633,2561],{"class":309},[149,56635,326],{"class":325},[149,56637,841],{"class":155},[149,56639,56640,56643,56645,56647,56649],{"class":151,"line":9687},[149,56641,56642],{"class":309},"      top",[149,56644,313],{"class":155},[149,56646,2182],{"class":309},[149,56648,326],{"class":325},[149,56650,841],{"class":155},[149,56652,56653],{"class":151,"line":9692},[149,56654,3906],{"class":155},[149,56656,56657],{"class":151,"line":9698},[149,56658,4119],{"emptyLinePlaceholder":1800},[149,56660,56661,56664],{"class":151,"line":9725},[149,56662,56663],{"class":159},"    ul",[149,56665,304],{"class":155},[149,56667,56668,56670,56672,56674],{"class":151,"line":9730},[149,56669,56454],{"class":309},[149,56671,313],{"class":155},[149,56673,56526],{"class":309},[149,56675,841],{"class":155},[149,56677,56678,56680,56682,56684,56686],{"class":151,"line":9736},[149,56679,56642],{"class":309},[149,56681,313],{"class":155},[149,56683,2642],{"class":309},[149,56685,326],{"class":325},[149,56687,841],{"class":155},[149,56689,56690,56692,56694,56696,56698],{"class":151,"line":9748},[149,56691,56533],{"class":309},[149,56693,313],{"class":155},[149,56695,2561],{"class":309},[149,56697,326],{"class":325},[149,56699,841],{"class":155},[149,56701,56702,56705,56707,56709],{"class":151,"line":9760},[149,56703,56704],{"class":309},"      display",[149,56706,313],{"class":155},[149,56708,53180],{"class":309},[149,56710,841],{"class":155},[149,56712,56713,56716,56718,56720],{"class":151,"line":9772},[149,56714,56715],{"class":309},"      justify-content",[149,56717,313],{"class":155},[149,56719,53368],{"class":309},[149,56721,841],{"class":155},[149,56723,56724,56726,56728,56730],{"class":151,"line":11430},[149,56725,56454],{"class":309},[149,56727,313],{"class":155},[149,56729,56526],{"class":309},[149,56731,841],{"class":155},[149,56733,56734,56736,56738,56740,56742],{"class":151,"line":11455},[149,56735,56466],{"class":309},[149,56737,313],{"class":155},[149,56739,5710],{"class":309},[149,56741,326],{"class":325},[149,56743,841],{"class":155},[149,56745,56746,56748,56750,56752,56754],{"class":151,"line":11478},[149,56747,56480],{"class":309},[149,56749,313],{"class":155},[149,56751,2561],{"class":309},[149,56753,326],{"class":325},[149,56755,841],{"class":155},[149,56757,56758],{"class":151,"line":11502},[149,56759,3906],{"class":155},[149,56761,56762],{"class":151,"line":11507},[149,56763,4119],{"emptyLinePlaceholder":1800},[149,56765,56766,56768,56771],{"class":151,"line":11512},[149,56767,56663],{"class":159},[149,56769,56770],{"class":159}," li",[149,56772,304],{"class":155},[149,56774,56775,56777,56779,56781,56783],{"class":151,"line":11517},[149,56776,56466],{"class":309},[149,56778,313],{"class":155},[149,56780,2561],{"class":309},[149,56782,326],{"class":325},[149,56784,841],{"class":155},[149,56786,56787,56789,56791,56793,56795],{"class":151,"line":11526},[149,56788,56480],{"class":309},[149,56790,313],{"class":155},[149,56792,2561],{"class":309},[149,56794,326],{"class":325},[149,56796,841],{"class":155},[149,56798,56799,56801,56803,56806,56808,56810,56812,56814,56816,56818,56820,56823],{"class":151,"line":11531},[149,56800,56579],{"class":309},[149,56802,313],{"class":155},[149,56804,56805],{"class":309},"rgba",[149,56807,319],{"class":155},[149,56809,2056],{"class":309},[149,56811,329],{"class":155},[149,56813,2056],{"class":309},[149,56815,329],{"class":155},[149,56817,2056],{"class":309},[149,56819,329],{"class":155},[149,56821,56822],{"class":309},".4",[149,56824,337],{"class":155},[149,56826,56827,56830,56832,56834,56836],{"class":151,"line":11537},[149,56828,56829],{"class":309},"      border-radius",[149,56831,313],{"class":155},[149,56833,2309],{"class":309},[149,56835,326],{"class":325},[149,56837,841],{"class":155},[149,56839,56840],{"class":151,"line":11558},[149,56841,3906],{"class":155},[149,56843,56844],{"class":151,"line":11564},[149,56845,4119],{"emptyLinePlaceholder":1800},[149,56847,56848,56851],{"class":151,"line":11578},[149,56849,56850],{"class":162},"    .activate",[149,56852,304],{"class":155},[149,56854,56855,56857,56859,56862],{"class":151,"line":11584},[149,56856,56579],{"class":309},[149,56858,313],{"class":155},[149,56860,56861],{"class":309},"#f7f7f7",[149,56863,841],{"class":155},[149,56865,56866],{"class":151,"line":11611},[149,56867,3906],{"class":155},[149,56869,56870,56872,56874],{"class":151,"line":11620},[149,56871,54115],{"class":155},[149,56873,1783],{"class":159},[149,56875,190],{"class":155},[149,56877,56878,56880,56882],{"class":151,"line":11626},[149,56879,665],{"class":155},[149,56881,53038],{"class":159},[149,56883,190],{"class":155},[149,56885,56886],{"class":151,"line":11634},[149,56887,4119],{"emptyLinePlaceholder":1800},[149,56889,56890,56892,56894],{"class":151,"line":11639},[149,56891,156],{"class":155},[149,56893,53499],{"class":159},[149,56895,190],{"class":155},[149,56897,56898,56900,56902,56904,56906,56908],{"class":151,"line":18314},[149,56899,587],{"class":155},[149,56901,301],{"class":159},[149,56903,55184],{"class":162},[149,56905,166],{"class":155},[149,56907,55189],{"class":169},[149,56909,190],{"class":155},[149,56911,56912,56914,56916,56918,56920,56923],{"class":151,"line":18320},[149,56913,53045],{"class":155},[149,56915,301],{"class":159},[149,56917,55184],{"class":162},[149,56919,166],{"class":155},[149,56921,56922],{"class":169},"\"slider-wrapper\"",[149,56924,190],{"class":155},[149,56926,56927,56930,56932,56934,56936,56939,56941,56943,56945],{"class":151,"line":18343},[149,56928,56929],{"class":155},"      \u003C",[149,56931,83],{"class":159},[149,56933,163],{"class":162},[149,56935,166],{"class":155},[149,56937,56938],{"class":169},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[149,56940,265],{"class":162},[149,56942,166],{"class":155},[149,56944,1382],{"class":169},[149,56946,190],{"class":155},[149,56948,56949,56951,56953],{"class":151,"line":18349},[149,56950,53476],{"class":155},[149,56952,301],{"class":159},[149,56954,190],{"class":155},[149,56956,56957,56959,56961,56963,56965,56968],{"class":151,"line":18372},[149,56958,53045],{"class":155},[149,56960,301],{"class":159},[149,56962,55184],{"class":162},[149,56964,166],{"class":155},[149,56966,56967],{"class":169},"\"slider-footer\"",[149,56969,190],{"class":155},[149,56971,56972,56974,56976,56979,56981],{"class":151,"line":18386},[149,56973,56929],{"class":155},[149,56975,24],{"class":159},[149,56977,56978],{"class":155},">对人类来说会不会太超前了?\u003C\u002F",[149,56980,24],{"class":159},[149,56982,190],{"class":155},[149,56984,56985,56987,56989],{"class":151,"line":18406},[149,56986,56929],{"class":155},[149,56988,42],{"class":159},[149,56990,190],{"class":155},[149,56992,56993,56996,56998,57000,57002,57005,57007,57009],{"class":151,"line":18412},[149,56994,56995],{"class":155},"        \u003C",[149,56997,45],{"class":159},[149,56999,55184],{"class":162},[149,57001,166],{"class":155},[149,57003,57004],{"class":169},"\"activate\"",[149,57006,185],{"class":155},[149,57008,45],{"class":159},[149,57010,190],{"class":155},[149,57012,57013,57015,57017,57019,57021],{"class":151,"line":18423},[149,57014,56995],{"class":155},[149,57016,45],{"class":159},[149,57018,185],{"class":155},[149,57020,45],{"class":159},[149,57022,190],{"class":155},[149,57024,57025,57027,57029,57031,57033],{"class":151,"line":18446},[149,57026,56995],{"class":155},[149,57028,45],{"class":159},[149,57030,185],{"class":155},[149,57032,45],{"class":159},[149,57034,190],{"class":155},[149,57036,57037,57039,57041,57043,57045],{"class":151,"line":18468},[149,57038,56995],{"class":155},[149,57040,45],{"class":159},[149,57042,185],{"class":155},[149,57044,45],{"class":159},[149,57046,190],{"class":155},[149,57048,57049,57051,57053,57055,57057],{"class":151,"line":18473},[149,57050,56995],{"class":155},[149,57052,45],{"class":159},[149,57054,185],{"class":155},[149,57056,45],{"class":159},[149,57058,190],{"class":155},[149,57060,57061,57063,57065,57067,57069],{"class":151,"line":18479},[149,57062,56995],{"class":155},[149,57064,45],{"class":159},[149,57066,185],{"class":155},[149,57068,45],{"class":159},[149,57070,190],{"class":155},[149,57072,57073,57075,57077,57079,57081],{"class":151,"line":18493},[149,57074,56995],{"class":155},[149,57076,45],{"class":159},[149,57078,185],{"class":155},[149,57080,45],{"class":159},[149,57082,190],{"class":155},[149,57084,57085,57087,57089,57091,57093],{"class":151,"line":18506},[149,57086,56995],{"class":155},[149,57088,45],{"class":159},[149,57090,185],{"class":155},[149,57092,45],{"class":159},[149,57094,190],{"class":155},[149,57096,57097,57100,57102],{"class":151,"line":18511},[149,57098,57099],{"class":155},"      \u003C\u002F",[149,57101,42],{"class":159},[149,57103,190],{"class":155},[149,57105,57106,57108,57110],{"class":151,"line":18525},[149,57107,53476],{"class":155},[149,57109,301],{"class":159},[149,57111,190],{"class":155},[149,57113,57114,57116,57118],{"class":151,"line":18530},[149,57115,54115],{"class":155},[149,57117,301],{"class":159},[149,57119,190],{"class":155},[149,57121,57122,57124,57126],{"class":151,"line":18536},[149,57123,587],{"class":155},[149,57125,53512],{"class":159},[149,57127,190],{"class":155},[149,57129,57130,57132,57135,57137],{"class":151,"line":18541},[149,57131,12935],{"class":325},[149,57133,57134],{"class":309}," arrImage",[149,57136,15277],{"class":325},[149,57138,57139],{"class":155}," [\n",[149,57141,57142,57145,57148,57151,57154,57157,57160],{"class":151,"line":18555},[149,57143,57144],{"class":155},"      { url: ",[149,57146,57147],{"class":169},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[149,57149,57150],{"class":155},", title: ",[149,57152,57153],{"class":169},"'对人类来说会不会太超前了?'",[149,57155,57156],{"class":155},", color: ",[149,57158,57159],{"class":169},"'rgba(100,67,68)'",[149,57161,57162],{"class":155}," },\n",[149,57164,57165,57167,57170,57172,57175,57177,57180],{"class":151,"line":18560},[149,57166,57144],{"class":155},[149,57168,57169],{"class":169},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[149,57171,57150],{"class":155},[149,57173,57174],{"class":169},"'开启剑与雪的黑暗传说!'",[149,57176,57156],{"class":155},[149,57178,57179],{"class":169},"'rgba(43,35,26)'",[149,57181,57162],{"class":155},[149,57183,57184,57186,57189,57191,57194,57196,57199],{"class":151,"line":18565},[149,57185,57144],{"class":155},[149,57187,57188],{"class":169},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[149,57190,57150],{"class":155},[149,57192,57193],{"class":169},"'真正的jo厨出现了!'",[149,57195,57156],{"class":155},[149,57197,57198],{"class":169},"'rgba(36,31,33)'",[149,57200,57162],{"class":155},[149,57202,57203,57205,57208,57210,57213,57215,57218],{"class":151,"line":18579},[149,57204,57144],{"class":155},[149,57206,57207],{"class":169},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[149,57209,57150],{"class":155},[149,57211,57212],{"class":169},"'李玉刚:让世界通过b站看到东方大国文化'",[149,57214,57156],{"class":155},[149,57216,57217],{"class":169},"'rgba(139,98,66)'",[149,57219,57162],{"class":155},[149,57221,57222,57224,57227,57229,57232,57234,57237],{"class":151,"line":18591},[149,57223,57144],{"class":155},[149,57225,57226],{"class":169},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[149,57228,57150],{"class":155},[149,57230,57231],{"class":169},"'快来分享你的寒假日常吧'",[149,57233,57156],{"class":155},[149,57235,57236],{"class":169},"'rgba(67,90,92)'",[149,57238,57162],{"class":155},[149,57240,57241,57243,57246,57248,57251,57253,57256],{"class":151,"line":18596},[149,57242,57144],{"class":155},[149,57244,57245],{"class":169},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[149,57247,57150],{"class":155},[149,57249,57250],{"class":169},"'哔哩哔哩小年YEAR'",[149,57252,57156],{"class":155},[149,57254,57255],{"class":169},"'rgba(166,131,143)'",[149,57257,57162],{"class":155},[149,57259,57260,57262,57265,57267,57270,57272,57275],{"class":151,"line":18609},[149,57261,57144],{"class":155},[149,57263,57264],{"class":169},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[149,57266,57150],{"class":155},[149,57268,57269],{"class":169},"'一站式解决你的电脑配置问题'",[149,57271,57156],{"class":155},[149,57273,57274],{"class":169},"'rgba(53,29,25)'",[149,57276,57162],{"class":155},[149,57278,57279,57281,57284,57286,57289,57291,57294],{"class":151,"line":18614},[149,57280,57144],{"class":155},[149,57282,57283],{"class":169},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[149,57285,57150],{"class":155},[149,57287,57288],{"class":169},"'谁不想和小猫咪贴贴呢?'",[149,57290,57156],{"class":155},[149,57292,57293],{"class":169},"'rgba(99,72,114)'",[149,57295,57296],{"class":155}," }\n",[149,57298,57299],{"class":151,"line":18619},[149,57300,54807],{"class":155},[149,57302,57303,57305,57308,57310,57312,57314,57316,57319],{"class":151,"line":18624},[149,57304,12935],{"class":325},[149,57306,57307],{"class":309}," img",[149,57309,15277],{"class":325},[149,57311,56091],{"class":155},[149,57313,56094],{"class":162},[149,57315,319],{"class":155},[149,57317,57318],{"class":169},"'.slider-wrapper img'",[149,57320,1878],{"class":155},[149,57322,57323,57325,57327,57329,57331,57333,57335,57338],{"class":151,"line":18637},[149,57324,12935],{"class":325},[149,57326,8541],{"class":309},[149,57328,15277],{"class":325},[149,57330,56091],{"class":155},[149,57332,56094],{"class":162},[149,57334,319],{"class":155},[149,57336,57337],{"class":169},"'.slider-footer p'",[149,57339,1878],{"class":155},[149,57341,57342,57344,57347,57349,57351,57353,57355,57358],{"class":151,"line":18642},[149,57343,12935],{"class":325},[149,57345,57346],{"class":309}," color",[149,57348,15277],{"class":325},[149,57350,56091],{"class":155},[149,57352,56094],{"class":162},[149,57354,319],{"class":155},[149,57356,57357],{"class":169},"'.slider-footer'",[149,57359,1878],{"class":155},[149,57361,57362,57364,57367,57369,57371,57374,57376,57379],{"class":151,"line":34339},[149,57363,12935],{"class":325},[149,57365,57366],{"class":309}," lis",[149,57368,15277],{"class":325},[149,57370,56091],{"class":155},[149,57372,57373],{"class":162},"querySelectorAll",[149,57375,319],{"class":155},[149,57377,57378],{"class":169},"'.slider-footer ul li'",[149,57380,1878],{"class":155},[149,57382,57383,57385,57387,57389],{"class":151,"line":34345},[149,57384,53917],{"class":325},[149,57386,11152],{"class":155},[149,57388,166],{"class":325},[149,57390,57391],{"class":309}," 1\n",[149,57393,57394,57396,57399,57401,57403,57405,57407],{"class":151,"line":34351},[149,57395,53917],{"class":325},[149,57397,57398],{"class":155}," timer ",[149,57400,166],{"class":325},[149,57402,56139],{"class":162},[149,57404,319],{"class":155},[149,57406,56144],{"class":325},[149,57408,56147],{"class":155},[149,57410,57411,57414,57416],{"class":151,"line":34357},[149,57412,57413],{"class":155},"      img.src ",[149,57415,166],{"class":325},[149,57417,57418],{"class":155}," arrImage[i].url\n",[149,57420,57421,57424,57426],{"class":151,"line":34363},[149,57422,57423],{"class":155},"      p.innerHTML ",[149,57425,166],{"class":325},[149,57427,57428],{"class":155}," arrImage[i].title\n",[149,57430,57431,57434,57436],{"class":151,"line":34374},[149,57432,57433],{"class":155},"      color.style.backgroundColor ",[149,57435,166],{"class":325},[149,57437,57438],{"class":155}," arrImage[i].color\n",[149,57440,57441],{"class":151,"line":34380},[149,57442,57443],{"class":295},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[149,57445,57446],{"class":151,"line":34400},[149,57447,57448],{"class":295},"      \u002F\u002F li.classList.add('activate')\n",[149,57450,57451],{"class":151,"line":34406},[149,57452,57453],{"class":295},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[149,57455,57456],{"class":151,"line":34417},[149,57457,57458],{"class":295},"      \u002F\u002F lis[i].classList.remove('activate')\n",[149,57460,57461,57464,57466,57468,57471,57474,57477,57479,57482],{"class":151,"line":34423},[149,57462,57463],{"class":155},"      document.",[149,57465,56094],{"class":162},[149,57467,319],{"class":155},[149,57469,57470],{"class":169},"'.activate'",[149,57472,57473],{"class":155},")?.classList.",[149,57475,57476],{"class":162},"toggle",[149,57478,319],{"class":155},[149,57480,57481],{"class":169},"'activate'",[149,57483,1878],{"class":155},[149,57485,57486,57489,57491,57493,57495],{"class":151,"line":34429},[149,57487,57488],{"class":155},"      lis[i].classList.",[149,57490,7050],{"class":162},[149,57492,319],{"class":155},[149,57494,57481],{"class":169},[149,57496,1878],{"class":155},[149,57498,57499],{"class":151,"line":34435},[149,57500,4119],{"emptyLinePlaceholder":1800},[149,57502,57503,57506,57508,57510,57512,57514,57516,57518,57521],{"class":151,"line":34441},[149,57504,57505],{"class":155},"      i ",[149,57507,166],{"class":325},[149,57509,56178],{"class":155},[149,57511,2344],{"class":325},[149,57513,26827],{"class":309},[149,57515,15427],{"class":155},[149,57517,2191],{"class":325},[149,57519,57520],{"class":155}," arrImage.",[149,57522,57523],{"class":309},"length\n",[149,57525,57526],{"class":151,"line":34447},[149,57527,4119],{"emptyLinePlaceholder":1800},[149,57529,57530,57532,57534],{"class":151,"line":34453},[149,57531,56230],{"class":155},[149,57533,8126],{"class":309},[149,57535,1878],{"class":155},[149,57537,57538,57540,57542],{"class":151,"line":34459},[149,57539,54115],{"class":155},[149,57541,53512],{"class":159},[149,57543,190],{"class":155},[149,57545,57546,57548,57550],{"class":151,"line":34479},[149,57547,665],{"class":155},[149,57549,53499],{"class":159},[149,57551,190],{"class":155},[149,57553,57554],{"class":151,"line":34485},[149,57555,4119],{"emptyLinePlaceholder":1800},[149,57557,57558,57560,57562],{"class":151,"line":34501},[149,57559,665],{"class":155},[149,57561,52341],{"class":159},[149,57563,190],{"class":155},[24,57565,57566],{},[83,57567],{"alt":145,"src":57568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[24,57570,57571],{},"?.就是短路保护,确保输出正常进行",[24,57573,57574],{},"不要忘记取余%,有时候可以用",[24,57576,57577],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[125,57579,57580],{"start":193},[45,57581,57582],{},"法2",[140,57584,57586],{"className":52339,"code":57585,"language":52341,"meta":145,"style":145},"\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",[48,57587,57588,57598,57612,57616,57624,57638,57658,57670,57678,57684,57694,57704,57708,57712,57718,57728,57732,57736,57742,57752,57764,57776,57790,57794,57798,57804,57814,57824,57834,57846,57858,57868,57872,57876,57884,57894,57906,57918,57930,57934,57938,57944,57954,57966,57978,57988,57998,58008,58020,58032,58036,58040,58048,58060,58072,58098,58110,58114,58118,58124,58134,58138,58146,58154,58158,58166,58180,58194,58214,58222,58236,58248,58256,58274,58286,58298,58310,58322,58334,58346,58358,58366,58374,58382,58390,58401,58417,58433,58449,58465,58481,58497,58513,58529,58533,58538,58556,58574,58584,58589,58594,58605,58611,58626,58635,58639,58644,58653,58658,58667,58672,58677,58682,58705,58735,58739,58747,58751,58759,58767,58771],{"__ignoreMap":145},[149,57589,57590,57592,57594,57596],{"class":151,"line":152},[149,57591,53003],{"class":155},[149,57593,53006],{"class":159},[149,57595,53009],{"class":162},[149,57597,190],{"class":155},[149,57599,57600,57602,57604,57606,57608,57610],{"class":151,"line":193},[149,57601,156],{"class":155},[149,57603,52341],{"class":159},[149,57605,53020],{"class":162},[149,57607,166],{"class":155},[149,57609,53025],{"class":169},[149,57611,190],{"class":155},[149,57613,57614],{"class":151,"line":235},[149,57615,4119],{"emptyLinePlaceholder":1800},[149,57617,57618,57620,57622],{"class":151,"line":340},[149,57619,156],{"class":155},[149,57621,53038],{"class":159},[149,57623,190],{"class":155},[149,57625,57626,57628,57630,57632,57634,57636],{"class":151,"line":346},[149,57627,587],{"class":155},[149,57629,53048],{"class":159},[149,57631,53051],{"class":162},[149,57633,166],{"class":155},[149,57635,53056],{"class":169},[149,57637,190],{"class":155},[149,57639,57640,57642,57644,57646,57648,57650,57652,57654,57656],{"class":151,"line":352},[149,57641,587],{"class":155},[149,57643,53048],{"class":159},[149,57645,515],{"class":162},[149,57647,166],{"class":155},[149,57649,53095],{"class":169},[149,57651,53075],{"class":162},[149,57653,166],{"class":155},[149,57655,53102],{"class":169},[149,57657,190],{"class":155},[149,57659,57660,57662,57664,57666,57668],{"class":151,"line":1021},[149,57661,587],{"class":155},[149,57663,53111],{"class":159},[149,57665,53114],{"class":155},[149,57667,53111],{"class":159},[149,57669,190],{"class":155},[149,57671,57672,57674,57676],{"class":151,"line":1035},[149,57673,587],{"class":155},[149,57675,1783],{"class":159},[149,57677,190],{"class":155},[149,57679,57680,57682],{"class":151,"line":1054},[149,57681,8119],{"class":159},[149,57683,304],{"class":155},[149,57685,57686,57688,57690,57692],{"class":151,"line":1072},[149,57687,56390],{"class":309},[149,57689,313],{"class":155},[149,57691,2056],{"class":309},[149,57693,841],{"class":155},[149,57695,57696,57698,57700,57702],{"class":151,"line":1090},[149,57697,56401],{"class":309},[149,57699,313],{"class":155},[149,57701,2056],{"class":309},[149,57703,841],{"class":155},[149,57705,57706],{"class":151,"line":1633},[149,57707,3906],{"class":155},[149,57709,57710],{"class":151,"line":1644},[149,57711,4119],{"emptyLinePlaceholder":1800},[149,57713,57714,57716],{"class":151,"line":3348},[149,57715,56420],{"class":159},[149,57717,304],{"class":155},[149,57719,57720,57722,57724,57726],{"class":151,"line":3362},[149,57721,56427],{"class":309},[149,57723,313],{"class":155},[149,57725,56432],{"class":309},[149,57727,841],{"class":155},[149,57729,57730],{"class":151,"line":3367},[149,57731,3906],{"class":155},[149,57733,57734],{"class":151,"line":3373},[149,57735,4119],{"emptyLinePlaceholder":1800},[149,57737,57738,57740],{"class":151,"line":3394},[149,57739,56447],{"class":162},[149,57741,304],{"class":155},[149,57743,57744,57746,57748,57750],{"class":151,"line":3399},[149,57745,56454],{"class":309},[149,57747,313],{"class":155},[149,57749,56459],{"class":309},[149,57751,841],{"class":155},[149,57753,57754,57756,57758,57760,57762],{"class":151,"line":3413},[149,57755,56466],{"class":309},[149,57757,313],{"class":155},[149,57759,56471],{"class":309},[149,57761,326],{"class":325},[149,57763,841],{"class":155},[149,57765,57766,57768,57770,57772,57774],{"class":151,"line":3418},[149,57767,56480],{"class":309},[149,57769,313],{"class":155},[149,57771,3263],{"class":309},[149,57773,326],{"class":325},[149,57775,841],{"class":155},[149,57777,57778,57780,57782,57784,57786,57788],{"class":151,"line":3447},[149,57779,56401],{"class":309},[149,57781,313],{"class":155},[149,57783,322],{"class":309},[149,57785,326],{"class":325},[149,57787,53257],{"class":309},[149,57789,841],{"class":155},[149,57791,57792],{"class":151,"line":3452},[149,57793,3906],{"class":155},[149,57795,57796],{"class":151,"line":3469},[149,57797,4119],{"emptyLinePlaceholder":1800},[149,57799,57800,57802],{"class":151,"line":3474},[149,57801,56515],{"class":162},[149,57803,304],{"class":155},[149,57805,57806,57808,57810,57812],{"class":151,"line":3479},[149,57807,56454],{"class":309},[149,57809,313],{"class":155},[149,57811,56526],{"class":309},[149,57813,841],{"class":155},[149,57815,57816,57818,57820,57822],{"class":151,"line":3484},[149,57817,56533],{"class":309},[149,57819,313],{"class":155},[149,57821,2056],{"class":309},[149,57823,841],{"class":155},[149,57825,57826,57828,57830,57832],{"class":151,"line":3498},[149,57827,56544],{"class":309},[149,57829,313],{"class":155},[149,57831,2056],{"class":309},[149,57833,841],{"class":155},[149,57835,57836,57838,57840,57842,57844],{"class":151,"line":3503},[149,57837,56466],{"class":309},[149,57839,313],{"class":155},[149,57841,322],{"class":309},[149,57843,2191],{"class":325},[149,57845,841],{"class":155},[149,57847,57848,57850,57852,57854,57856],{"class":151,"line":4296},[149,57849,56480],{"class":309},[149,57851,313],{"class":155},[149,57853,2438],{"class":309},[149,57855,2191],{"class":325},[149,57857,841],{"class":155},[149,57859,57860,57862,57864,57866],{"class":151,"line":4310},[149,57861,56579],{"class":309},[149,57863,313],{"class":155},[149,57865,56584],{"class":309},[149,57867,841],{"class":155},[149,57869,57870],{"class":151,"line":4318},[149,57871,3906],{"class":155},[149,57873,57874],{"class":151,"line":4323},[149,57875,4119],{"emptyLinePlaceholder":1800},[149,57877,57878,57880,57882],{"class":151,"line":4329},[149,57879,56515],{"class":162},[149,57881,8541],{"class":159},[149,57883,304],{"class":155},[149,57885,57886,57888,57890,57892],{"class":151,"line":4335},[149,57887,56454],{"class":309},[149,57889,313],{"class":155},[149,57891,56526],{"class":309},[149,57893,841],{"class":155},[149,57895,57896,57898,57900,57902,57904],{"class":151,"line":4340},[149,57897,56617],{"class":309},[149,57899,313],{"class":155},[149,57901,2761],{"class":309},[149,57903,326],{"class":325},[149,57905,841],{"class":155},[149,57907,57908,57910,57912,57914,57916],{"class":151,"line":9663},[149,57909,56533],{"class":309},[149,57911,313],{"class":155},[149,57913,2561],{"class":309},[149,57915,326],{"class":325},[149,57917,841],{"class":155},[149,57919,57920,57922,57924,57926,57928],{"class":151,"line":9687},[149,57921,56642],{"class":309},[149,57923,313],{"class":155},[149,57925,2182],{"class":309},[149,57927,326],{"class":325},[149,57929,841],{"class":155},[149,57931,57932],{"class":151,"line":9692},[149,57933,3906],{"class":155},[149,57935,57936],{"class":151,"line":9698},[149,57937,4119],{"emptyLinePlaceholder":1800},[149,57939,57940,57942],{"class":151,"line":9725},[149,57941,56663],{"class":159},[149,57943,304],{"class":155},[149,57945,57946,57948,57950,57952],{"class":151,"line":9730},[149,57947,56454],{"class":309},[149,57949,313],{"class":155},[149,57951,56526],{"class":309},[149,57953,841],{"class":155},[149,57955,57956,57958,57960,57962,57964],{"class":151,"line":9736},[149,57957,56642],{"class":309},[149,57959,313],{"class":155},[149,57961,2642],{"class":309},[149,57963,326],{"class":325},[149,57965,841],{"class":155},[149,57967,57968,57970,57972,57974,57976],{"class":151,"line":9748},[149,57969,56533],{"class":309},[149,57971,313],{"class":155},[149,57973,2561],{"class":309},[149,57975,326],{"class":325},[149,57977,841],{"class":155},[149,57979,57980,57982,57984,57986],{"class":151,"line":9760},[149,57981,56704],{"class":309},[149,57983,313],{"class":155},[149,57985,53180],{"class":309},[149,57987,841],{"class":155},[149,57989,57990,57992,57994,57996],{"class":151,"line":9772},[149,57991,56715],{"class":309},[149,57993,313],{"class":155},[149,57995,53368],{"class":309},[149,57997,841],{"class":155},[149,57999,58000,58002,58004,58006],{"class":151,"line":11430},[149,58001,56454],{"class":309},[149,58003,313],{"class":155},[149,58005,56526],{"class":309},[149,58007,841],{"class":155},[149,58009,58010,58012,58014,58016,58018],{"class":151,"line":11455},[149,58011,56466],{"class":309},[149,58013,313],{"class":155},[149,58015,5710],{"class":309},[149,58017,326],{"class":325},[149,58019,841],{"class":155},[149,58021,58022,58024,58026,58028,58030],{"class":151,"line":11478},[149,58023,56480],{"class":309},[149,58025,313],{"class":155},[149,58027,2561],{"class":309},[149,58029,326],{"class":325},[149,58031,841],{"class":155},[149,58033,58034],{"class":151,"line":11502},[149,58035,3906],{"class":155},[149,58037,58038],{"class":151,"line":11507},[149,58039,4119],{"emptyLinePlaceholder":1800},[149,58041,58042,58044,58046],{"class":151,"line":11512},[149,58043,56663],{"class":159},[149,58045,56770],{"class":159},[149,58047,304],{"class":155},[149,58049,58050,58052,58054,58056,58058],{"class":151,"line":11517},[149,58051,56466],{"class":309},[149,58053,313],{"class":155},[149,58055,2561],{"class":309},[149,58057,326],{"class":325},[149,58059,841],{"class":155},[149,58061,58062,58064,58066,58068,58070],{"class":151,"line":11526},[149,58063,56480],{"class":309},[149,58065,313],{"class":155},[149,58067,2561],{"class":309},[149,58069,326],{"class":325},[149,58071,841],{"class":155},[149,58073,58074,58076,58078,58080,58082,58084,58086,58088,58090,58092,58094,58096],{"class":151,"line":11531},[149,58075,56579],{"class":309},[149,58077,313],{"class":155},[149,58079,56805],{"class":309},[149,58081,319],{"class":155},[149,58083,2056],{"class":309},[149,58085,329],{"class":155},[149,58087,2056],{"class":309},[149,58089,329],{"class":155},[149,58091,2056],{"class":309},[149,58093,329],{"class":155},[149,58095,56822],{"class":309},[149,58097,337],{"class":155},[149,58099,58100,58102,58104,58106,58108],{"class":151,"line":11537},[149,58101,56829],{"class":309},[149,58103,313],{"class":155},[149,58105,2309],{"class":309},[149,58107,326],{"class":325},[149,58109,841],{"class":155},[149,58111,58112],{"class":151,"line":11558},[149,58113,3906],{"class":155},[149,58115,58116],{"class":151,"line":11564},[149,58117,4119],{"emptyLinePlaceholder":1800},[149,58119,58120,58122],{"class":151,"line":11578},[149,58121,56850],{"class":162},[149,58123,304],{"class":155},[149,58125,58126,58128,58130,58132],{"class":151,"line":11584},[149,58127,56579],{"class":309},[149,58129,313],{"class":155},[149,58131,56861],{"class":309},[149,58133,841],{"class":155},[149,58135,58136],{"class":151,"line":11611},[149,58137,3906],{"class":155},[149,58139,58140,58142,58144],{"class":151,"line":11620},[149,58141,54115],{"class":155},[149,58143,1783],{"class":159},[149,58145,190],{"class":155},[149,58147,58148,58150,58152],{"class":151,"line":11626},[149,58149,665],{"class":155},[149,58151,53038],{"class":159},[149,58153,190],{"class":155},[149,58155,58156],{"class":151,"line":11634},[149,58157,4119],{"emptyLinePlaceholder":1800},[149,58159,58160,58162,58164],{"class":151,"line":11639},[149,58161,156],{"class":155},[149,58163,53499],{"class":159},[149,58165,190],{"class":155},[149,58167,58168,58170,58172,58174,58176,58178],{"class":151,"line":18314},[149,58169,587],{"class":155},[149,58171,301],{"class":159},[149,58173,55184],{"class":162},[149,58175,166],{"class":155},[149,58177,55189],{"class":169},[149,58179,190],{"class":155},[149,58181,58182,58184,58186,58188,58190,58192],{"class":151,"line":18320},[149,58183,53045],{"class":155},[149,58185,301],{"class":159},[149,58187,55184],{"class":162},[149,58189,166],{"class":155},[149,58191,56922],{"class":169},[149,58193,190],{"class":155},[149,58195,58196,58198,58200,58202,58204,58206,58208,58210,58212],{"class":151,"line":18343},[149,58197,56929],{"class":155},[149,58199,83],{"class":159},[149,58201,163],{"class":162},[149,58203,166],{"class":155},[149,58205,56938],{"class":169},[149,58207,265],{"class":162},[149,58209,166],{"class":155},[149,58211,1382],{"class":169},[149,58213,190],{"class":155},[149,58215,58216,58218,58220],{"class":151,"line":18349},[149,58217,53476],{"class":155},[149,58219,301],{"class":159},[149,58221,190],{"class":155},[149,58223,58224,58226,58228,58230,58232,58234],{"class":151,"line":18372},[149,58225,53045],{"class":155},[149,58227,301],{"class":159},[149,58229,55184],{"class":162},[149,58231,166],{"class":155},[149,58233,56967],{"class":169},[149,58235,190],{"class":155},[149,58237,58238,58240,58242,58244,58246],{"class":151,"line":18386},[149,58239,56929],{"class":155},[149,58241,24],{"class":159},[149,58243,56978],{"class":155},[149,58245,24],{"class":159},[149,58247,190],{"class":155},[149,58249,58250,58252,58254],{"class":151,"line":18406},[149,58251,56929],{"class":155},[149,58253,42],{"class":159},[149,58255,190],{"class":155},[149,58257,58258,58260,58262,58264,58266,58268,58270,58272],{"class":151,"line":18412},[149,58259,56995],{"class":155},[149,58261,45],{"class":159},[149,58263,55184],{"class":162},[149,58265,166],{"class":155},[149,58267,57004],{"class":169},[149,58269,185],{"class":155},[149,58271,45],{"class":159},[149,58273,190],{"class":155},[149,58275,58276,58278,58280,58282,58284],{"class":151,"line":18423},[149,58277,56995],{"class":155},[149,58279,45],{"class":159},[149,58281,185],{"class":155},[149,58283,45],{"class":159},[149,58285,190],{"class":155},[149,58287,58288,58290,58292,58294,58296],{"class":151,"line":18446},[149,58289,56995],{"class":155},[149,58291,45],{"class":159},[149,58293,185],{"class":155},[149,58295,45],{"class":159},[149,58297,190],{"class":155},[149,58299,58300,58302,58304,58306,58308],{"class":151,"line":18468},[149,58301,56995],{"class":155},[149,58303,45],{"class":159},[149,58305,185],{"class":155},[149,58307,45],{"class":159},[149,58309,190],{"class":155},[149,58311,58312,58314,58316,58318,58320],{"class":151,"line":18473},[149,58313,56995],{"class":155},[149,58315,45],{"class":159},[149,58317,185],{"class":155},[149,58319,45],{"class":159},[149,58321,190],{"class":155},[149,58323,58324,58326,58328,58330,58332],{"class":151,"line":18479},[149,58325,56995],{"class":155},[149,58327,45],{"class":159},[149,58329,185],{"class":155},[149,58331,45],{"class":159},[149,58333,190],{"class":155},[149,58335,58336,58338,58340,58342,58344],{"class":151,"line":18493},[149,58337,56995],{"class":155},[149,58339,45],{"class":159},[149,58341,185],{"class":155},[149,58343,45],{"class":159},[149,58345,190],{"class":155},[149,58347,58348,58350,58352,58354,58356],{"class":151,"line":18506},[149,58349,56995],{"class":155},[149,58351,45],{"class":159},[149,58353,185],{"class":155},[149,58355,45],{"class":159},[149,58357,190],{"class":155},[149,58359,58360,58362,58364],{"class":151,"line":18511},[149,58361,57099],{"class":155},[149,58363,42],{"class":159},[149,58365,190],{"class":155},[149,58367,58368,58370,58372],{"class":151,"line":18525},[149,58369,53476],{"class":155},[149,58371,301],{"class":159},[149,58373,190],{"class":155},[149,58375,58376,58378,58380],{"class":151,"line":18530},[149,58377,54115],{"class":155},[149,58379,301],{"class":159},[149,58381,190],{"class":155},[149,58383,58384,58386,58388],{"class":151,"line":18536},[149,58385,587],{"class":155},[149,58387,53512],{"class":159},[149,58389,190],{"class":155},[149,58391,58392,58394,58397,58399],{"class":151,"line":18541},[149,58393,12935],{"class":325},[149,58395,58396],{"class":309}," sliderData",[149,58398,15277],{"class":325},[149,58400,57139],{"class":155},[149,58402,58403,58405,58407,58409,58411,58413,58415],{"class":151,"line":18555},[149,58404,57144],{"class":155},[149,58406,57147],{"class":169},[149,58408,57150],{"class":155},[149,58410,57153],{"class":169},[149,58412,57156],{"class":155},[149,58414,57159],{"class":169},[149,58416,57162],{"class":155},[149,58418,58419,58421,58423,58425,58427,58429,58431],{"class":151,"line":18560},[149,58420,57144],{"class":155},[149,58422,57169],{"class":169},[149,58424,57150],{"class":155},[149,58426,57174],{"class":169},[149,58428,57156],{"class":155},[149,58430,57179],{"class":169},[149,58432,57162],{"class":155},[149,58434,58435,58437,58439,58441,58443,58445,58447],{"class":151,"line":18565},[149,58436,57144],{"class":155},[149,58438,57188],{"class":169},[149,58440,57150],{"class":155},[149,58442,57193],{"class":169},[149,58444,57156],{"class":155},[149,58446,57198],{"class":169},[149,58448,57162],{"class":155},[149,58450,58451,58453,58455,58457,58459,58461,58463],{"class":151,"line":18579},[149,58452,57144],{"class":155},[149,58454,57207],{"class":169},[149,58456,57150],{"class":155},[149,58458,57212],{"class":169},[149,58460,57156],{"class":155},[149,58462,57217],{"class":169},[149,58464,57162],{"class":155},[149,58466,58467,58469,58471,58473,58475,58477,58479],{"class":151,"line":18591},[149,58468,57144],{"class":155},[149,58470,57226],{"class":169},[149,58472,57150],{"class":155},[149,58474,57231],{"class":169},[149,58476,57156],{"class":155},[149,58478,57236],{"class":169},[149,58480,57162],{"class":155},[149,58482,58483,58485,58487,58489,58491,58493,58495],{"class":151,"line":18596},[149,58484,57144],{"class":155},[149,58486,57245],{"class":169},[149,58488,57150],{"class":155},[149,58490,57250],{"class":169},[149,58492,57156],{"class":155},[149,58494,57255],{"class":169},[149,58496,57162],{"class":155},[149,58498,58499,58501,58503,58505,58507,58509,58511],{"class":151,"line":18609},[149,58500,57144],{"class":155},[149,58502,57264],{"class":169},[149,58504,57150],{"class":155},[149,58506,57269],{"class":169},[149,58508,57156],{"class":155},[149,58510,57274],{"class":169},[149,58512,57162],{"class":155},[149,58514,58515,58517,58519,58521,58523,58525,58527],{"class":151,"line":18614},[149,58516,57144],{"class":155},[149,58518,57283],{"class":169},[149,58520,57150],{"class":155},[149,58522,57288],{"class":169},[149,58524,57156],{"class":155},[149,58526,57293],{"class":169},[149,58528,57296],{"class":155},[149,58530,58531],{"class":151,"line":18619},[149,58532,54807],{"class":155},[149,58534,58535],{"class":151,"line":18624},[149,58536,58537],{"class":295},"    \u002F\u002F 1.获取元素\n",[149,58539,58540,58542,58544,58546,58548,58550,58552,58554],{"class":151,"line":18637},[149,58541,12935],{"class":325},[149,58543,57307],{"class":309},[149,58545,15277],{"class":325},[149,58547,56091],{"class":155},[149,58549,56094],{"class":162},[149,58551,319],{"class":155},[149,58553,57318],{"class":169},[149,58555,1878],{"class":155},[149,58557,58558,58560,58562,58564,58566,58568,58570,58572],{"class":151,"line":18642},[149,58559,12935],{"class":325},[149,58561,8541],{"class":309},[149,58563,15277],{"class":325},[149,58565,56091],{"class":155},[149,58567,56094],{"class":162},[149,58569,319],{"class":155},[149,58571,57337],{"class":169},[149,58573,1878],{"class":155},[149,58575,58576,58578,58580,58582],{"class":151,"line":34339},[149,58577,53917],{"class":325},[149,58579,11152],{"class":155},[149,58581,166],{"class":325},[149,58583,49039],{"class":309},[149,58585,58586],{"class":151,"line":34345},[149,58587,58588],{"class":295},"    \u002F\u002F 2.开启定时器\n",[149,58590,58591],{"class":151,"line":34351},[149,58592,58593],{"class":295},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[149,58595,58596,58599,58601,58603],{"class":151,"line":34357},[149,58597,58598],{"class":162},"    setInterval",[149,58600,319],{"class":155},[149,58602,56144],{"class":325},[149,58604,56147],{"class":155},[149,58606,58607,58609],{"class":151,"line":34363},[149,58608,56152],{"class":155},[149,58610,4421],{"class":325},[149,58612,58613,58615,58617,58619,58622,58624],{"class":151,"line":34374},[149,58614,56175],{"class":325},[149,58616,56178],{"class":155},[149,58618,3430],{"class":325},[149,58620,58621],{"class":155}," sliderData.",[149,58623,53667],{"class":309},[149,58625,14155],{"class":155},[149,58627,58628,58631,58633],{"class":151,"line":34380},[149,58629,58630],{"class":155},"        i ",[149,58632,166],{"class":325},[149,58634,49039],{"class":309},[149,58636,58637],{"class":151,"line":34400},[149,58638,54096],{"class":155},[149,58640,58641],{"class":151,"line":34406},[149,58642,58643],{"class":295},"      \u002F\u002F 更换图片路径\n",[149,58645,58646,58648,58650],{"class":151,"line":34417},[149,58647,57413],{"class":155},[149,58649,166],{"class":325},[149,58651,58652],{"class":155}," sliderData[i].url\n",[149,58654,58655],{"class":151,"line":34423},[149,58656,58657],{"class":295},"      \u002F\u002F 把文字写到p里面\n",[149,58659,58660,58662,58664],{"class":151,"line":34429},[149,58661,57423],{"class":155},[149,58663,166],{"class":325},[149,58665,58666],{"class":155}," sliderData[i].title\n",[149,58668,58669],{"class":151,"line":34435},[149,58670,58671],{"class":295},"      \u002F\u002F 小圆点\n",[149,58673,58674],{"class":151,"line":34441},[149,58675,58676],{"class":295},"      \u002F\u002F 先删除以前的active\n",[149,58678,58679],{"class":151,"line":34447},[149,58680,58681],{"class":295},"      \u002F\u002F 只让当前li添加active\n",[149,58683,58684,58686,58688,58690,58693,58696,58699,58701,58703],{"class":151,"line":34453},[149,58685,57463],{"class":155},[149,58687,56094],{"class":162},[149,58689,319],{"class":155},[149,58691,58692],{"class":169},"'.slider-footer .activate'",[149,58694,58695],{"class":155},").classList.",[149,58697,58698],{"class":162},"remove",[149,58700,319],{"class":155},[149,58702,57481],{"class":169},[149,58704,1878],{"class":155},[149,58706,58707,58709,58711,58713,58716,58718,58720,58722,58725,58727,58729,58731,58733],{"class":151,"line":34459},[149,58708,57463],{"class":155},[149,58710,56094],{"class":162},[149,58712,319],{"class":155},[149,58714,58715],{"class":169},"`.slider-footer ul li:nth-child(${",[149,58717,2304],{"class":155},[149,58719,47272],{"class":325},[149,58721,26827],{"class":309},[149,58723,58724],{"class":169},"})`",[149,58726,58695],{"class":155},[149,58728,7050],{"class":162},[149,58730,319],{"class":155},[149,58732,57481],{"class":169},[149,58734,1878],{"class":155},[149,58736,58737],{"class":151,"line":34479},[149,58738,4119],{"emptyLinePlaceholder":1800},[149,58740,58741,58743,58745],{"class":151,"line":34485},[149,58742,56230],{"class":155},[149,58744,8126],{"class":309},[149,58746,1878],{"class":155},[149,58748,58749],{"class":151,"line":34501},[149,58750,4119],{"emptyLinePlaceholder":1800},[149,58752,58753,58755,58757],{"class":151,"line":34507},[149,58754,54115],{"class":155},[149,58756,53512],{"class":159},[149,58758,190],{"class":155},[149,58760,58761,58763,58765],{"class":151,"line":34521},[149,58762,665],{"class":155},[149,58764,53499],{"class":159},[149,58766,190],{"class":155},[149,58768,58769],{"class":151,"line":34527},[149,58770,4119],{"emptyLinePlaceholder":1800},[149,58772,58773,58775,58777],{"class":151,"line":34542},[149,58774,665],{"class":155},[149,58776,52341],{"class":159},[149,58778,190],{"class":155},[19,58780,58782],{"id":58781},"_317-重要知识点","3.1.7 重要知识点",[24,58784,58785,58786],{},"浏览器在渲染文本时， ",[31,58787,58788],{},"没有空格或换行符就没有“断行点”",[24,58790,58791],{},[83,58792],{"alt":145,"src":58793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[24,58795,58796],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[24,58798,58799],{},[83,58800],{"alt":145,"src":58801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[24,58803,58804],{},[83,58805],{"alt":145,"src":58806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58808,58810],{"id":58809},"_32-dom事件基础","3.2 DOM事件基础",[19,58812,58814],{"id":58813},"_321-事件监听","3.2.1 事件监听",[24,58816,58817],{},[83,58818],{"alt":145,"src":58819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[24,58821,58822],{},"事件监听有响应的发生",[24,58824,58825],{},[83,58826],{"alt":145,"src":58827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[24,58829,58830],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[24,58832,58833],{},"对于有名函数,要执行的函数名后边不要加()",[19,58835,58837],{"id":58836},"_322-随机点名案例","3.2.2 随机点名案例",[140,58839,58841],{"className":52339,"code":58840,"language":52341,"meta":145,"style":145},"\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",[48,58842,58843,58853,58867,58871,58879,58893,58913,58925,58933,58939,58949,58959,58963,58967,58974,58985,58989,58993,58999,59011,59025,59035,59047,59060,59064,59068,59075,59079,59092,59104,59115,59119,59123,59127,59134,59144,59148,59152,59161,59173,59185,59200,59204,59212,59220,59224,59232,59245,59259,59272,59292,59300,59315,59335,59355,59363,59367,59375,59380,59416,59436,59441,59460,59465,59476,59481,59492,59497,59516,59531,59536,59562,59572,59581,59586,59602,59607,59612,59617,59632,59636,59640,59645,59664,59681,59689,59694,59709,59713,59717,59725,59733,59737],{"__ignoreMap":145},[149,58844,58845,58847,58849,58851],{"class":151,"line":152},[149,58846,53003],{"class":155},[149,58848,53006],{"class":159},[149,58850,53009],{"class":162},[149,58852,190],{"class":155},[149,58854,58855,58857,58859,58861,58863,58865],{"class":151,"line":193},[149,58856,156],{"class":155},[149,58858,52341],{"class":159},[149,58860,53020],{"class":162},[149,58862,166],{"class":155},[149,58864,53025],{"class":169},[149,58866,190],{"class":155},[149,58868,58869],{"class":151,"line":235},[149,58870,4119],{"emptyLinePlaceholder":1800},[149,58872,58873,58875,58877],{"class":151,"line":340},[149,58874,156],{"class":155},[149,58876,53038],{"class":159},[149,58878,190],{"class":155},[149,58880,58881,58883,58885,58887,58889,58891],{"class":151,"line":346},[149,58882,587],{"class":155},[149,58884,53048],{"class":159},[149,58886,53051],{"class":162},[149,58888,166],{"class":155},[149,58890,53056],{"class":169},[149,58892,190],{"class":155},[149,58894,58895,58897,58899,58901,58903,58905,58907,58909,58911],{"class":151,"line":352},[149,58896,587],{"class":155},[149,58898,53048],{"class":159},[149,58900,515],{"class":162},[149,58902,166],{"class":155},[149,58904,53095],{"class":169},[149,58906,53075],{"class":162},[149,58908,166],{"class":155},[149,58910,53102],{"class":169},[149,58912,190],{"class":155},[149,58914,58915,58917,58919,58921,58923],{"class":151,"line":1021},[149,58916,587],{"class":155},[149,58918,53111],{"class":159},[149,58920,53114],{"class":155},[149,58922,53111],{"class":159},[149,58924,190],{"class":155},[149,58926,58927,58929,58931],{"class":151,"line":1035},[149,58928,587],{"class":155},[149,58930,1783],{"class":159},[149,58932,190],{"class":155},[149,58934,58935,58937],{"class":151,"line":1054},[149,58936,8119],{"class":159},[149,58938,304],{"class":155},[149,58940,58941,58943,58945,58947],{"class":151,"line":1072},[149,58942,56401],{"class":309},[149,58944,313],{"class":155},[149,58946,2056],{"class":309},[149,58948,841],{"class":155},[149,58950,58951,58953,58955,58957],{"class":151,"line":1090},[149,58952,56390],{"class":309},[149,58954,313],{"class":155},[149,58956,2056],{"class":309},[149,58958,841],{"class":155},[149,58960,58961],{"class":151,"line":1633},[149,58962,3906],{"class":155},[149,58964,58965],{"class":151,"line":1644},[149,58966,4119],{"emptyLinePlaceholder":1800},[149,58968,58969,58972],{"class":151,"line":3348},[149,58970,58971],{"class":159},"    h2",[149,58973,304],{"class":155},[149,58975,58976,58979,58981,58983],{"class":151,"line":3362},[149,58977,58978],{"class":309},"      text-align",[149,58980,313],{"class":155},[149,58982,53293],{"class":309},[149,58984,841],{"class":155},[149,58986,58987],{"class":151,"line":3367},[149,58988,3906],{"class":155},[149,58990,58991],{"class":151,"line":3373},[149,58992,4119],{"emptyLinePlaceholder":1800},[149,58994,58995,58997],{"class":151,"line":3394},[149,58996,56447],{"class":162},[149,58998,304],{"class":155},[149,59000,59001,59003,59005,59007,59009],{"class":151,"line":3399},[149,59002,56466],{"class":309},[149,59004,313],{"class":155},[149,59006,3263],{"class":309},[149,59008,326],{"class":325},[149,59010,841],{"class":155},[149,59012,59013,59015,59017,59019,59021,59023],{"class":151,"line":3413},[149,59014,56401],{"class":309},[149,59016,313],{"class":155},[149,59018,332],{"class":309},[149,59020,326],{"class":325},[149,59022,53257],{"class":309},[149,59024,841],{"class":155},[149,59026,59027,59029,59031,59033],{"class":151,"line":3418},[149,59028,56704],{"class":309},[149,59030,313],{"class":155},[149,59032,53180],{"class":309},[149,59034,841],{"class":155},[149,59036,59037,59039,59041,59043,59045],{"class":151,"line":3447},[149,59038,56617],{"class":309},[149,59040,313],{"class":155},[149,59042,2686],{"class":309},[149,59044,326],{"class":325},[149,59046,841],{"class":155},[149,59048,59049,59052,59054,59056,59058],{"class":151,"line":3452},[149,59050,59051],{"class":309},"      line-height",[149,59053,313],{"class":155},[149,59055,2264],{"class":309},[149,59057,326],{"class":325},[149,59059,841],{"class":155},[149,59061,59062],{"class":151,"line":3469},[149,59063,3906],{"class":155},[149,59065,59066],{"class":151,"line":3474},[149,59067,4119],{"emptyLinePlaceholder":1800},[149,59069,59070,59073],{"class":151,"line":3479},[149,59071,59072],{"class":162},"    .qs",[149,59074,304],{"class":155},[149,59076,59077],{"class":151,"line":3484},[149,59078,4119],{"emptyLinePlaceholder":1800},[149,59080,59081,59083,59085,59088,59090],{"class":151,"line":3498},[149,59082,56466],{"class":309},[149,59084,313],{"class":155},[149,59086,59087],{"class":309},"450",[149,59089,326],{"class":325},[149,59091,841],{"class":155},[149,59093,59094,59096,59098,59100,59102],{"class":151,"line":3503},[149,59095,56480],{"class":309},[149,59097,313],{"class":155},[149,59099,2264],{"class":309},[149,59101,326],{"class":325},[149,59103,841],{"class":155},[149,59105,59106,59109,59111,59113],{"class":151,"line":4296},[149,59107,59108],{"class":309},"      color",[149,59110,313],{"class":155},[149,59112,989],{"class":309},[149,59114,841],{"class":155},[149,59116,59117],{"class":151,"line":4310},[149,59118,4119],{"emptyLinePlaceholder":1800},[149,59120,59121],{"class":151,"line":4318},[149,59122,3906],{"class":155},[149,59124,59125],{"class":151,"line":4323},[149,59126,4119],{"emptyLinePlaceholder":1800},[149,59128,59129,59132],{"class":151,"line":4329},[149,59130,59131],{"class":162},"    .btns",[149,59133,304],{"class":155},[149,59135,59136,59138,59140,59142],{"class":151,"line":4335},[149,59137,58978],{"class":309},[149,59139,313],{"class":155},[149,59141,53293],{"class":309},[149,59143,841],{"class":155},[149,59145,59146],{"class":151,"line":4340},[149,59147,3906],{"class":155},[149,59149,59150],{"class":151,"line":9663},[149,59151,4119],{"emptyLinePlaceholder":1800},[149,59153,59154,59156,59159],{"class":151,"line":9687},[149,59155,59131],{"class":162},[149,59157,59158],{"class":159}," button",[149,59160,304],{"class":155},[149,59162,59163,59165,59167,59169,59171],{"class":151,"line":9692},[149,59164,56466],{"class":309},[149,59166,313],{"class":155},[149,59168,2678],{"class":309},[149,59170,326],{"class":325},[149,59172,841],{"class":155},[149,59174,59175,59177,59179,59181,59183],{"class":151,"line":9698},[149,59176,56480],{"class":309},[149,59178,313],{"class":155},[149,59180,2137],{"class":309},[149,59182,326],{"class":325},[149,59184,841],{"class":155},[149,59186,59187,59189,59191,59193,59196,59198],{"class":151,"line":9725},[149,59188,56401],{"class":309},[149,59190,313],{"class":155},[149,59192,2056],{"class":309},[149,59194,59195],{"class":309}," 50",[149,59197,326],{"class":325},[149,59199,841],{"class":155},[149,59201,59202],{"class":151,"line":9730},[149,59203,3906],{"class":155},[149,59205,59206,59208,59210],{"class":151,"line":9736},[149,59207,54115],{"class":155},[149,59209,1783],{"class":159},[149,59211,190],{"class":155},[149,59213,59214,59216,59218],{"class":151,"line":9748},[149,59215,665],{"class":155},[149,59217,53038],{"class":159},[149,59219,190],{"class":155},[149,59221,59222],{"class":151,"line":9760},[149,59223,4119],{"emptyLinePlaceholder":1800},[149,59225,59226,59228,59230],{"class":151,"line":9772},[149,59227,156],{"class":155},[149,59229,53499],{"class":159},[149,59231,190],{"class":155},[149,59233,59234,59236,59238,59241,59243],{"class":151,"line":11430},[149,59235,587],{"class":155},[149,59237,14],{"class":159},[149,59239,59240],{"class":155},">随机点名\u003C\u002F",[149,59242,14],{"class":159},[149,59244,190],{"class":155},[149,59246,59247,59249,59251,59253,59255,59257],{"class":151,"line":11455},[149,59248,587],{"class":155},[149,59250,301],{"class":159},[149,59252,55184],{"class":162},[149,59254,166],{"class":155},[149,59256,55189],{"class":169},[149,59258,190],{"class":155},[149,59260,59261,59263,59265,59268,59270],{"class":151,"line":11478},[149,59262,53045],{"class":155},[149,59264,149],{"class":159},[149,59266,59267],{"class":155},">名字是：\u003C\u002F",[149,59269,149],{"class":159},[149,59271,190],{"class":155},[149,59273,59274,59276,59278,59280,59282,59285,59288,59290],{"class":151,"line":11502},[149,59275,53045],{"class":155},[149,59277,301],{"class":159},[149,59279,55184],{"class":162},[149,59281,166],{"class":155},[149,59283,59284],{"class":169},"\"qs\"",[149,59286,59287],{"class":155},">这里显示姓名\u003C\u002F",[149,59289,301],{"class":159},[149,59291,190],{"class":155},[149,59293,59294,59296,59298],{"class":151,"line":11507},[149,59295,54115],{"class":155},[149,59297,301],{"class":159},[149,59299,190],{"class":155},[149,59301,59302,59304,59306,59308,59310,59313],{"class":151,"line":11512},[149,59303,587],{"class":155},[149,59305,301],{"class":159},[149,59307,55184],{"class":162},[149,59309,166],{"class":155},[149,59311,59312],{"class":169},"\"btns\"",[149,59314,190],{"class":155},[149,59316,59317,59319,59321,59323,59325,59328,59331,59333],{"class":151,"line":11517},[149,59318,53045],{"class":155},[149,59320,646],{"class":159},[149,59322,55184],{"class":162},[149,59324,166],{"class":155},[149,59326,59327],{"class":169},"\"start\"",[149,59329,59330],{"class":155},">开始\u003C\u002F",[149,59332,646],{"class":159},[149,59334,190],{"class":155},[149,59336,59337,59339,59341,59343,59345,59348,59351,59353],{"class":151,"line":11526},[149,59338,53045],{"class":155},[149,59340,646],{"class":159},[149,59342,55184],{"class":162},[149,59344,166],{"class":155},[149,59346,59347],{"class":169},"\"end\"",[149,59349,59350],{"class":155},">结束\u003C\u002F",[149,59352,646],{"class":159},[149,59354,190],{"class":155},[149,59356,59357,59359,59361],{"class":151,"line":11531},[149,59358,54115],{"class":155},[149,59360,301],{"class":159},[149,59362,190],{"class":155},[149,59364,59365],{"class":151,"line":11537},[149,59366,4119],{"emptyLinePlaceholder":1800},[149,59368,59369,59371,59373],{"class":151,"line":11558},[149,59370,587],{"class":155},[149,59372,53512],{"class":159},[149,59374,190],{"class":155},[149,59376,59377],{"class":151,"line":11564},[149,59378,59379],{"class":295},"    \u002F\u002F 数据数组\n",[149,59381,59382,59384,59387,59389,59391,59394,59396,59399,59401,59404,59406,59409,59411,59414],{"class":151,"line":11578},[149,59383,12935],{"class":325},[149,59385,59386],{"class":309}," arr",[149,59388,15277],{"class":325},[149,59390,53924],{"class":155},[149,59392,59393],{"class":169},"'马超'",[149,59395,329],{"class":155},[149,59397,59398],{"class":169},"'黄忠'",[149,59400,329],{"class":155},[149,59402,59403],{"class":169},"'赵云'",[149,59405,329],{"class":155},[149,59407,59408],{"class":169},"'关羽'",[149,59410,329],{"class":155},[149,59412,59413],{"class":169},"'张飞'",[149,59415,34952],{"class":155},[149,59417,59418,59420,59423,59425,59427,59429,59431,59434],{"class":151,"line":11584},[149,59419,12935],{"class":325},[149,59421,59422],{"class":309}," qs",[149,59424,15277],{"class":325},[149,59426,56091],{"class":155},[149,59428,56094],{"class":162},[149,59430,319],{"class":155},[149,59432,59433],{"class":169},"'.qs'",[149,59435,1878],{"class":155},[149,59437,59438],{"class":151,"line":11611},[149,59439,59440],{"class":295},"    \u002F\u002F 1.业务1.开始按钮模块\n",[149,59442,59443,59445,59447,59449,59451,59453,59455,59458],{"class":151,"line":11620},[149,59444,12935],{"class":325},[149,59446,5902],{"class":309},[149,59448,15277],{"class":325},[149,59450,56091],{"class":155},[149,59452,56094],{"class":162},[149,59454,319],{"class":155},[149,59456,59457],{"class":169},"'.start'",[149,59459,1878],{"class":155},[149,59461,59462],{"class":151,"line":11626},[149,59463,59464],{"class":295},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[149,59466,59467,59469,59472,59474],{"class":151,"line":11634},[149,59468,53917],{"class":325},[149,59470,59471],{"class":155}," timerId ",[149,59473,166],{"class":325},[149,59475,49039],{"class":309},[149,59477,59478],{"class":151,"line":11639},[149,59479,59480],{"class":295},"    \u002F\u002F 随机号要全局变量\n",[149,59482,59483,59485,59488,59490],{"class":151,"line":18314},[149,59484,53917],{"class":325},[149,59486,59487],{"class":155}," random ",[149,59489,166],{"class":325},[149,59491,49039],{"class":309},[149,59493,59494],{"class":151,"line":18320},[149,59495,59496],{"class":295},"    \u002F\u002F 1.1 添加点击事件\n",[149,59498,59499,59502,59505,59507,59510,59512,59514],{"class":151,"line":18343},[149,59500,59501],{"class":155},"    start.",[149,59503,59504],{"class":162},"addEventListener",[149,59506,319],{"class":155},[149,59508,59509],{"class":169},"'click'",[149,59511,329],{"class":155},[149,59513,56144],{"class":325},[149,59515,56147],{"class":155},[149,59517,59518,59521,59523,59525,59527,59529],{"class":151,"line":18349},[149,59519,59520],{"class":155},"      timerId ",[149,59522,166],{"class":325},[149,59524,56139],{"class":162},[149,59526,319],{"class":155},[149,59528,56144],{"class":325},[149,59530,56147],{"class":155},[149,59532,59533],{"class":151,"line":18372},[149,59534,59535],{"class":295},"        \u002F\u002F 随机数\n",[149,59537,59538,59541,59543,59546,59549,59552,59554,59556,59558,59560],{"class":151,"line":18386},[149,59539,59540],{"class":155},"        random ",[149,59542,166],{"class":325},[149,59544,59545],{"class":162}," parseInt",[149,59547,59548],{"class":155},"(Math.",[149,59550,59551],{"class":162},"random",[149,59553,14763],{"class":155},[149,59555,2318],{"class":325},[149,59557,53664],{"class":155},[149,59559,53667],{"class":309},[149,59561,1878],{"class":155},[149,59563,59564,59567,59569],{"class":151,"line":18406},[149,59565,59566],{"class":155},"        qs.innerHTML ",[149,59568,166],{"class":325},[149,59570,59571],{"class":155}," arr[random]\n",[149,59573,59574,59577,59579],{"class":151,"line":18412},[149,59575,59576],{"class":155},"      }, ",[149,59578,2137],{"class":309},[149,59580,1878],{"class":155},[149,59582,59583],{"class":151,"line":18423},[149,59584,59585],{"class":295},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[149,59587,59588,59590,59593,59595,59598,59600],{"class":151,"line":18446},[149,59589,56175],{"class":325},[149,59591,59592],{"class":155}," (arr.",[149,59594,53667],{"class":309},[149,59596,59597],{"class":325}," ===",[149,59599,26827],{"class":309},[149,59601,14155],{"class":155},[149,59603,59604],{"class":151,"line":18468},[149,59605,59606],{"class":295},"        \u002F\u002F start.disabled = true\n",[149,59608,59609],{"class":151,"line":18473},[149,59610,59611],{"class":295},"        \u002F\u002F end.disabled = true\n",[149,59613,59614],{"class":151,"line":18479},[149,59615,59616],{"class":295},"        \u002F\u002F 可以合起来写\n",[149,59618,59619,59622,59624,59627,59629],{"class":151,"line":18493},[149,59620,59621],{"class":155},"        start.disabled ",[149,59623,166],{"class":325},[149,59625,59626],{"class":155}," end.disabled ",[149,59628,166],{"class":325},[149,59630,59631],{"class":309}," true\n",[149,59633,59634],{"class":151,"line":18506},[149,59635,54096],{"class":155},[149,59637,59638],{"class":151,"line":18511},[149,59639,35167],{"class":155},[149,59641,59642],{"class":151,"line":18525},[149,59643,59644],{"class":295},"    \u002F\u002F 1.2 关闭按钮模块\n",[149,59646,59647,59649,59651,59653,59655,59657,59659,59662],{"class":151,"line":18530},[149,59648,12935],{"class":325},[149,59650,5918],{"class":309},[149,59652,15277],{"class":325},[149,59654,56091],{"class":155},[149,59656,56094],{"class":162},[149,59658,319],{"class":155},[149,59660,59661],{"class":169},"'.end'",[149,59663,1878],{"class":155},[149,59665,59666,59669,59671,59673,59675,59677,59679],{"class":151,"line":18536},[149,59667,59668],{"class":155},"    end.",[149,59670,59504],{"class":162},[149,59672,319],{"class":155},[149,59674,59509],{"class":169},[149,59676,329],{"class":155},[149,59678,56144],{"class":325},[149,59680,56147],{"class":155},[149,59682,59683,59686],{"class":151,"line":18541},[149,59684,59685],{"class":162},"      clearInterval",[149,59687,59688],{"class":155},"(timerId)\n",[149,59690,59691],{"class":151,"line":18555},[149,59692,59693],{"class":295},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[149,59695,59696,59699,59702,59705,59707],{"class":151,"line":18560},[149,59697,59698],{"class":155},"      arr.",[149,59700,59701],{"class":162},"splice",[149,59703,59704],{"class":155},"(random, ",[149,59706,830],{"class":309},[149,59708,1878],{"class":155},[149,59710,59711],{"class":151,"line":18565},[149,59712,35167],{"class":155},[149,59714,59715],{"class":151,"line":18579},[149,59716,4119],{"emptyLinePlaceholder":1800},[149,59718,59719,59721,59723],{"class":151,"line":18591},[149,59720,54115],{"class":155},[149,59722,53512],{"class":159},[149,59724,190],{"class":155},[149,59726,59727,59729,59731],{"class":151,"line":18596},[149,59728,665],{"class":155},[149,59730,53499],{"class":159},[149,59732,190],{"class":155},[149,59734,59735],{"class":151,"line":18609},[149,59736,4119],{"emptyLinePlaceholder":1800},[149,59738,59739,59741,59743],{"class":151,"line":18614},[149,59740,665],{"class":155},[149,59742,52341],{"class":159},[149,59744,190],{"class":155},[24,59746,59747],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[19,59749,59751],{"id":59750},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[140,59753,59755],{"className":52339,"code":59754,"language":52341,"meta":145,"style":145},"\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",[48,59756,59757,59767,59781,59785,59793,59807,59827,59839,59847,59851,59859,59871,59879,59898,59915,59931,59941,59945,59953,59961,59965],{"__ignoreMap":145},[149,59758,59759,59761,59763,59765],{"class":151,"line":152},[149,59760,53003],{"class":155},[149,59762,53006],{"class":159},[149,59764,53009],{"class":162},[149,59766,190],{"class":155},[149,59768,59769,59771,59773,59775,59777,59779],{"class":151,"line":193},[149,59770,156],{"class":155},[149,59772,52341],{"class":159},[149,59774,53020],{"class":162},[149,59776,166],{"class":155},[149,59778,53025],{"class":169},[149,59780,190],{"class":155},[149,59782,59783],{"class":151,"line":235},[149,59784,4119],{"emptyLinePlaceholder":1800},[149,59786,59787,59789,59791],{"class":151,"line":340},[149,59788,156],{"class":155},[149,59790,53038],{"class":159},[149,59792,190],{"class":155},[149,59794,59795,59797,59799,59801,59803,59805],{"class":151,"line":346},[149,59796,587],{"class":155},[149,59798,53048],{"class":159},[149,59800,53051],{"class":162},[149,59802,166],{"class":155},[149,59804,53056],{"class":169},[149,59806,190],{"class":155},[149,59808,59809,59811,59813,59815,59817,59819,59821,59823,59825],{"class":151,"line":352},[149,59810,587],{"class":155},[149,59812,53048],{"class":159},[149,59814,515],{"class":162},[149,59816,166],{"class":155},[149,59818,53095],{"class":169},[149,59820,53075],{"class":162},[149,59822,166],{"class":155},[149,59824,53102],{"class":169},[149,59826,190],{"class":155},[149,59828,59829,59831,59833,59835,59837],{"class":151,"line":1021},[149,59830,587],{"class":155},[149,59832,53111],{"class":159},[149,59834,53114],{"class":155},[149,59836,53111],{"class":159},[149,59838,190],{"class":155},[149,59840,59841,59843,59845],{"class":151,"line":1035},[149,59842,665],{"class":155},[149,59844,53038],{"class":159},[149,59846,190],{"class":155},[149,59848,59849],{"class":151,"line":1054},[149,59850,4119],{"emptyLinePlaceholder":1800},[149,59852,59853,59855,59857],{"class":151,"line":1072},[149,59854,156],{"class":155},[149,59856,53499],{"class":159},[149,59858,190],{"class":155},[149,59860,59861,59863,59865,59867,59869],{"class":151,"line":1090},[149,59862,587],{"class":155},[149,59864,646],{"class":159},[149,59866,55588],{"class":155},[149,59868,646],{"class":159},[149,59870,190],{"class":155},[149,59872,59873,59875,59877],{"class":151,"line":1633},[149,59874,587],{"class":155},[149,59876,53512],{"class":159},[149,59878,190],{"class":155},[149,59880,59881,59883,59885,59887,59889,59891,59893,59896],{"class":151,"line":1644},[149,59882,12935],{"class":325},[149,59884,56086],{"class":309},[149,59886,15277],{"class":325},[149,59888,56091],{"class":155},[149,59890,56094],{"class":162},[149,59892,319],{"class":155},[149,59894,59895],{"class":169},"'button'",[149,59897,1878],{"class":155},[149,59899,59900,59903,59905,59907,59909,59911,59913],{"class":151,"line":3348},[149,59901,59902],{"class":155},"    btn.",[149,59904,59504],{"class":162},[149,59906,319],{"class":155},[149,59908,59509],{"class":169},[149,59910,329],{"class":155},[149,59912,56144],{"class":325},[149,59914,56147],{"class":155},[149,59916,59917,59920,59922,59924,59927,59929],{"class":151,"line":3362},[149,59918,59919],{"class":325},"      const",[149,59921,3959],{"class":309},[149,59923,15277],{"class":325},[149,59925,59926],{"class":155}," Math.",[149,59928,59551],{"class":162},[149,59930,3695],{"class":155},[149,59932,59933,59936,59939],{"class":151,"line":3367},[149,59934,59935],{"class":155},"      console.",[149,59937,59938],{"class":162},"log",[149,59940,1885],{"class":155},[149,59942,59943],{"class":151,"line":3373},[149,59944,35167],{"class":155},[149,59946,59947,59949,59951],{"class":151,"line":3394},[149,59948,54115],{"class":155},[149,59950,53512],{"class":159},[149,59952,190],{"class":155},[149,59954,59955,59957,59959],{"class":151,"line":3399},[149,59956,665],{"class":155},[149,59958,53499],{"class":159},[149,59960,190],{"class":155},[149,59962,59963],{"class":151,"line":3413},[149,59964,4119],{"emptyLinePlaceholder":1800},[149,59966,59967,59969,59971],{"class":151,"line":3418},[149,59968,665],{"class":155},[149,59970,52341],{"class":159},[149,59972,190],{"class":155},[24,59974,59975],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[24,59977,59978],{},"常量不可以重新赋值",[24,59980,59981],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[140,59983,59985],{"className":52339,"code":59984,"language":52341,"meta":145,"style":145},"\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",[48,59986,59987,59997,60011,60015,60023,60037,60057,60069,60077,60081,60089,60101,60109,60120,60138,60154,60168,60176,60180,60188,60196,60200],{"__ignoreMap":145},[149,59988,59989,59991,59993,59995],{"class":151,"line":152},[149,59990,53003],{"class":155},[149,59992,53006],{"class":159},[149,59994,53009],{"class":162},[149,59996,190],{"class":155},[149,59998,59999,60001,60003,60005,60007,60009],{"class":151,"line":193},[149,60000,156],{"class":155},[149,60002,52341],{"class":159},[149,60004,53020],{"class":162},[149,60006,166],{"class":155},[149,60008,53025],{"class":169},[149,60010,190],{"class":155},[149,60012,60013],{"class":151,"line":235},[149,60014,4119],{"emptyLinePlaceholder":1800},[149,60016,60017,60019,60021],{"class":151,"line":340},[149,60018,156],{"class":155},[149,60020,53038],{"class":159},[149,60022,190],{"class":155},[149,60024,60025,60027,60029,60031,60033,60035],{"class":151,"line":346},[149,60026,587],{"class":155},[149,60028,53048],{"class":159},[149,60030,53051],{"class":162},[149,60032,166],{"class":155},[149,60034,53056],{"class":169},[149,60036,190],{"class":155},[149,60038,60039,60041,60043,60045,60047,60049,60051,60053,60055],{"class":151,"line":352},[149,60040,587],{"class":155},[149,60042,53048],{"class":159},[149,60044,515],{"class":162},[149,60046,166],{"class":155},[149,60048,53095],{"class":169},[149,60050,53075],{"class":162},[149,60052,166],{"class":155},[149,60054,53102],{"class":169},[149,60056,190],{"class":155},[149,60058,60059,60061,60063,60065,60067],{"class":151,"line":1021},[149,60060,587],{"class":155},[149,60062,53111],{"class":159},[149,60064,53114],{"class":155},[149,60066,53111],{"class":159},[149,60068,190],{"class":155},[149,60070,60071,60073,60075],{"class":151,"line":1035},[149,60072,665],{"class":155},[149,60074,53038],{"class":159},[149,60076,190],{"class":155},[149,60078,60079],{"class":151,"line":1054},[149,60080,4119],{"emptyLinePlaceholder":1800},[149,60082,60083,60085,60087],{"class":151,"line":1072},[149,60084,156],{"class":155},[149,60086,53499],{"class":159},[149,60088,190],{"class":155},[149,60090,60091,60093,60095,60097,60099],{"class":151,"line":1090},[149,60092,587],{"class":155},[149,60094,646],{"class":159},[149,60096,55588],{"class":155},[149,60098,646],{"class":159},[149,60100,190],{"class":155},[149,60102,60103,60105,60107],{"class":151,"line":1633},[149,60104,587],{"class":155},[149,60106,53512],{"class":159},[149,60108,190],{"class":155},[149,60110,60111,60113,60115,60117],{"class":151,"line":1644},[149,60112,12935],{"class":325},[149,60114,3959],{"class":309},[149,60116,15277],{"class":325},[149,60118,60119],{"class":309}," 10\n",[149,60121,60122,60124,60126,60128,60130,60132,60134,60136],{"class":151,"line":3348},[149,60123,12935],{"class":325},[149,60125,56086],{"class":309},[149,60127,15277],{"class":325},[149,60129,56091],{"class":155},[149,60131,56094],{"class":162},[149,60133,319],{"class":155},[149,60135,59895],{"class":169},[149,60137,1878],{"class":155},[149,60139,60140,60142,60144,60146,60148,60150,60152],{"class":151,"line":3362},[149,60141,59902],{"class":155},[149,60143,59504],{"class":162},[149,60145,319],{"class":155},[149,60147,59509],{"class":169},[149,60149,329],{"class":155},[149,60151,56144],{"class":325},[149,60153,56147],{"class":155},[149,60155,60156,60158,60160,60162,60164,60166],{"class":151,"line":3367},[149,60157,59919],{"class":325},[149,60159,3959],{"class":309},[149,60161,15277],{"class":325},[149,60163,59926],{"class":155},[149,60165,59551],{"class":162},[149,60167,3695],{"class":155},[149,60169,60170,60172,60174],{"class":151,"line":3373},[149,60171,59935],{"class":155},[149,60173,59938],{"class":162},[149,60175,1885],{"class":155},[149,60177,60178],{"class":151,"line":3394},[149,60179,35167],{"class":155},[149,60181,60182,60184,60186],{"class":151,"line":3399},[149,60183,54115],{"class":155},[149,60185,53512],{"class":159},[149,60187,190],{"class":155},[149,60189,60190,60192,60194],{"class":151,"line":3413},[149,60191,665],{"class":155},[149,60193,53499],{"class":159},[149,60195,190],{"class":155},[149,60197,60198],{"class":151,"line":3418},[149,60199,4119],{"emptyLinePlaceholder":1800},[149,60201,60202,60204,60206],{"class":151,"line":3447},[149,60203,665],{"class":155},[149,60205,52341],{"class":159},[149,60207,190],{"class":155},[24,60209,60210],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[140,60212,60214],{"className":52339,"code":60213,"language":52341,"meta":145,"style":145},"\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",[48,60215,60216,60226,60240,60244,60252,60266,60286,60298,60306,60310,60318,60330,60338,60348,60366,60382,60395,60403,60407,60415,60423,60427],{"__ignoreMap":145},[149,60217,60218,60220,60222,60224],{"class":151,"line":152},[149,60219,53003],{"class":155},[149,60221,53006],{"class":159},[149,60223,53009],{"class":162},[149,60225,190],{"class":155},[149,60227,60228,60230,60232,60234,60236,60238],{"class":151,"line":193},[149,60229,156],{"class":155},[149,60231,52341],{"class":159},[149,60233,53020],{"class":162},[149,60235,166],{"class":155},[149,60237,53025],{"class":169},[149,60239,190],{"class":155},[149,60241,60242],{"class":151,"line":235},[149,60243,4119],{"emptyLinePlaceholder":1800},[149,60245,60246,60248,60250],{"class":151,"line":340},[149,60247,156],{"class":155},[149,60249,53038],{"class":159},[149,60251,190],{"class":155},[149,60253,60254,60256,60258,60260,60262,60264],{"class":151,"line":346},[149,60255,587],{"class":155},[149,60257,53048],{"class":159},[149,60259,53051],{"class":162},[149,60261,166],{"class":155},[149,60263,53056],{"class":169},[149,60265,190],{"class":155},[149,60267,60268,60270,60272,60274,60276,60278,60280,60282,60284],{"class":151,"line":352},[149,60269,587],{"class":155},[149,60271,53048],{"class":159},[149,60273,515],{"class":162},[149,60275,166],{"class":155},[149,60277,53095],{"class":169},[149,60279,53075],{"class":162},[149,60281,166],{"class":155},[149,60283,53102],{"class":169},[149,60285,190],{"class":155},[149,60287,60288,60290,60292,60294,60296],{"class":151,"line":1021},[149,60289,587],{"class":155},[149,60291,53111],{"class":159},[149,60293,53114],{"class":155},[149,60295,53111],{"class":159},[149,60297,190],{"class":155},[149,60299,60300,60302,60304],{"class":151,"line":1035},[149,60301,665],{"class":155},[149,60303,53038],{"class":159},[149,60305,190],{"class":155},[149,60307,60308],{"class":151,"line":1054},[149,60309,4119],{"emptyLinePlaceholder":1800},[149,60311,60312,60314,60316],{"class":151,"line":1072},[149,60313,156],{"class":155},[149,60315,53499],{"class":159},[149,60317,190],{"class":155},[149,60319,60320,60322,60324,60326,60328],{"class":151,"line":1090},[149,60321,587],{"class":155},[149,60323,646],{"class":159},[149,60325,55588],{"class":155},[149,60327,646],{"class":159},[149,60329,190],{"class":155},[149,60331,60332,60334,60336],{"class":151,"line":1633},[149,60333,587],{"class":155},[149,60335,53512],{"class":159},[149,60337,190],{"class":155},[149,60339,60340,60342,60344,60346],{"class":151,"line":1644},[149,60341,12935],{"class":325},[149,60343,3959],{"class":309},[149,60345,15277],{"class":325},[149,60347,60119],{"class":309},[149,60349,60350,60352,60354,60356,60358,60360,60362,60364],{"class":151,"line":3348},[149,60351,12935],{"class":325},[149,60353,56086],{"class":309},[149,60355,15277],{"class":325},[149,60357,56091],{"class":155},[149,60359,56094],{"class":162},[149,60361,319],{"class":155},[149,60363,59895],{"class":169},[149,60365,1878],{"class":155},[149,60367,60368,60370,60372,60374,60376,60378,60380],{"class":151,"line":3362},[149,60369,59902],{"class":155},[149,60371,59504],{"class":162},[149,60373,319],{"class":155},[149,60375,59509],{"class":169},[149,60377,329],{"class":155},[149,60379,56144],{"class":325},[149,60381,56147],{"class":155},[149,60383,60384,60387,60389,60391,60393],{"class":151,"line":3367},[149,60385,60386],{"class":155},"      num ",[149,60388,166],{"class":325},[149,60390,59926],{"class":155},[149,60392,59551],{"class":162},[149,60394,3695],{"class":155},[149,60396,60397,60399,60401],{"class":151,"line":3373},[149,60398,59935],{"class":155},[149,60400,59938],{"class":162},[149,60402,1885],{"class":155},[149,60404,60405],{"class":151,"line":3394},[149,60406,35167],{"class":155},[149,60408,60409,60411,60413],{"class":151,"line":3399},[149,60410,54115],{"class":155},[149,60412,53512],{"class":159},[149,60414,190],{"class":155},[149,60416,60417,60419,60421],{"class":151,"line":3413},[149,60418,665],{"class":155},[149,60420,53499],{"class":159},[149,60422,190],{"class":155},[149,60424,60425],{"class":151,"line":3418},[149,60426,4119],{"emptyLinePlaceholder":1800},[149,60428,60429,60431,60433],{"class":151,"line":3447},[149,60430,665],{"class":155},[149,60432,52341],{"class":159},[149,60434,190],{"class":155},[24,60436,60437],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[19,60439,60441],{"id":60440},"_324-事件监听版本","3.2.4 事件监听版本",[24,60443,60444],{},[83,60445],{"alt":145,"src":60446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[24,60448,60449],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[24,60451,60452],{},"这种方式会覆盖前边的事件监听:",[140,60454,60456],{"className":52339,"code":60455,"language":52341,"meta":145,"style":145},"\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",[48,60457,60458,60468,60482,60486,60494,60508,60528,60540,60548,60552,60560,60572,60580,60598,60612,60623,60627,60639,60649,60653,60661,60669,60673],{"__ignoreMap":145},[149,60459,60460,60462,60464,60466],{"class":151,"line":152},[149,60461,53003],{"class":155},[149,60463,53006],{"class":159},[149,60465,53009],{"class":162},[149,60467,190],{"class":155},[149,60469,60470,60472,60474,60476,60478,60480],{"class":151,"line":193},[149,60471,156],{"class":155},[149,60473,52341],{"class":159},[149,60475,53020],{"class":162},[149,60477,166],{"class":155},[149,60479,53025],{"class":169},[149,60481,190],{"class":155},[149,60483,60484],{"class":151,"line":235},[149,60485,4119],{"emptyLinePlaceholder":1800},[149,60487,60488,60490,60492],{"class":151,"line":340},[149,60489,156],{"class":155},[149,60491,53038],{"class":159},[149,60493,190],{"class":155},[149,60495,60496,60498,60500,60502,60504,60506],{"class":151,"line":346},[149,60497,587],{"class":155},[149,60499,53048],{"class":159},[149,60501,53051],{"class":162},[149,60503,166],{"class":155},[149,60505,53056],{"class":169},[149,60507,190],{"class":155},[149,60509,60510,60512,60514,60516,60518,60520,60522,60524,60526],{"class":151,"line":352},[149,60511,587],{"class":155},[149,60513,53048],{"class":159},[149,60515,515],{"class":162},[149,60517,166],{"class":155},[149,60519,53095],{"class":169},[149,60521,53075],{"class":162},[149,60523,166],{"class":155},[149,60525,53102],{"class":169},[149,60527,190],{"class":155},[149,60529,60530,60532,60534,60536,60538],{"class":151,"line":1021},[149,60531,587],{"class":155},[149,60533,53111],{"class":159},[149,60535,53114],{"class":155},[149,60537,53111],{"class":159},[149,60539,190],{"class":155},[149,60541,60542,60544,60546],{"class":151,"line":1035},[149,60543,665],{"class":155},[149,60545,53038],{"class":159},[149,60547,190],{"class":155},[149,60549,60550],{"class":151,"line":1054},[149,60551,4119],{"emptyLinePlaceholder":1800},[149,60553,60554,60556,60558],{"class":151,"line":1072},[149,60555,156],{"class":155},[149,60557,53499],{"class":159},[149,60559,190],{"class":155},[149,60561,60562,60564,60566,60568,60570],{"class":151,"line":1090},[149,60563,587],{"class":155},[149,60565,646],{"class":159},[149,60567,55588],{"class":155},[149,60569,646],{"class":159},[149,60571,190],{"class":155},[149,60573,60574,60576,60578],{"class":151,"line":1633},[149,60575,587],{"class":155},[149,60577,53512],{"class":159},[149,60579,190],{"class":155},[149,60581,60582,60584,60586,60588,60590,60592,60594,60596],{"class":151,"line":1644},[149,60583,12935],{"class":325},[149,60585,56086],{"class":309},[149,60587,15277],{"class":325},[149,60589,56091],{"class":155},[149,60591,56094],{"class":162},[149,60593,319],{"class":155},[149,60595,59895],{"class":169},[149,60597,1878],{"class":155},[149,60599,60600,60602,60605,60607,60610],{"class":151,"line":3348},[149,60601,59902],{"class":155},[149,60603,60604],{"class":162},"onclick",[149,60606,15277],{"class":325},[149,60608,60609],{"class":325}," function",[149,60611,56147],{"class":155},[149,60613,60614,60617,60619,60621],{"class":151,"line":3362},[149,60615,60616],{"class":162},"      alert",[149,60618,319],{"class":155},[149,60620,2335],{"class":309},[149,60622,1878],{"class":155},[149,60624,60625],{"class":151,"line":3367},[149,60626,3906],{"class":155},[149,60628,60629,60631,60633,60635,60637],{"class":151,"line":3373},[149,60630,59902],{"class":155},[149,60632,60604],{"class":162},[149,60634,15277],{"class":325},[149,60636,60609],{"class":325},[149,60638,56147],{"class":155},[149,60640,60641,60643,60645,60647],{"class":151,"line":3394},[149,60642,60616],{"class":162},[149,60644,319],{"class":155},[149,60646,2611],{"class":309},[149,60648,1878],{"class":155},[149,60650,60651],{"class":151,"line":3399},[149,60652,3906],{"class":155},[149,60654,60655,60657,60659],{"class":151,"line":3413},[149,60656,54115],{"class":155},[149,60658,53512],{"class":159},[149,60660,190],{"class":155},[149,60662,60663,60665,60667],{"class":151,"line":3418},[149,60664,665],{"class":155},[149,60666,53499],{"class":159},[149,60668,190],{"class":155},[149,60670,60671],{"class":151,"line":3447},[149,60672,4119],{"emptyLinePlaceholder":1800},[149,60674,60675,60677,60679],{"class":151,"line":3452},[149,60676,665],{"class":155},[149,60678,52341],{"class":159},[149,60680,190],{"class":155},[24,60682,60683],{},"只要点击就输出结果为22,前边11被覆盖了",[140,60685,60687],{"className":52339,"code":60686,"language":52341,"meta":145,"style":145},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[48,60688,60689,60694,60699,60703,60708,60713],{"__ignoreMap":145},[149,60690,60691],{"class":151,"line":152},[149,60692,60693],{"class":155},"  btn.addEventListener('click', function () {\n",[149,60695,60696],{"class":151,"line":193},[149,60697,60698],{"class":155},"      alert(11)\n",[149,60700,60701],{"class":151,"line":235},[149,60702,35167],{"class":155},[149,60704,60705],{"class":151,"line":340},[149,60706,60707],{"class":155},"    btn.addEventListener('click', function () {\n",[149,60709,60710],{"class":151,"line":346},[149,60711,60712],{"class":155},"      alert(22)\n",[149,60714,60715],{"class":151,"line":352},[149,60716,35167],{"class":155},[24,60718,60719],{},"点击第一次输出11,第二次点击为22",[19,60721,60723],{"id":60722},"_325-事件类型","3.2.5 事件类型",[24,60725,60726],{},[83,60727],{"alt":145,"src":60728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[120,60730,60732],{"id":60731},"_3251-鼠标事件","3.2.5.1 鼠标事件",[24,60734,60735],{},"补充知识:",[24,60737,60738],{},"轮播图自动播放模块,可以使用",[24,60740,60741],{},"let timerId = setInterval(function () {",[24,60743,60744],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[24,60746,60747],{},"用js方法模拟进行点击事件,click必须加()",[24,60749,60750],{},"next.click()",[24,60752,60753],{},"}, 1000)",[24,60755,60756],{},[83,60757],{"alt":145,"src":60758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[140,60760,60762],{"className":54765,"code":60761,"language":54767,"meta":145,"style":145},"\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",[48,60763,60764,60768,60778,60792,60796,60804,60819,60839,60859,60872,60880,60885,60890,60894,60898,60903,60908,60913,60918,60922,60926,60931,60936,60941,60945,60949,60954,60958,60963,60968,60972,60976,60981,60986,60991,60996,61001,61005,61009,61014,61019,61024,61029,61034,61038,61042,61047,61052,61057,61062,61067,61072,61077,61082,61087,61092,61096,61100,61105,61110,61114,61118,61123,61128,61132,61137,61142,61146,61150,61155,61159,61164,61169,61173,61178,61182,61186,61191,61196,61201,61206,61211,61216,61221,61225,61229,61233,61238,61243,61248,61253,61257,61265,61273,61277,61285,61300,61314,61335,61343,61357,61370,61385,61404,61416,61428,61440,61452,61464,61476,61488,61496,61511,61535,61559,61567,61575,61583,61591,61596,61601,61606,61611,61616,61621,61626,61631,61636,61641,61645,61650,61655,61660,61665,61670,61675,61680,61685,61690,61694,61699,61704,61709,61714,61719,61724,61729,61734,61739,61744,61749,61754,61758,61762,61767,61772,61777,61781,61786,61791,61796,61801,61806,61810,61815,61819,61823,61827,61831,61835,61839,61844,61849,61854,61859,61864,61869,61874,61879,61884,61888,61892,61897,61902,61907,61912,61917,61921,61926,61931,61936,61941,61946,61951,61955,61959,61964,61968,61973,61977,61982,61987,61992,61997,62002,62007,62011,62019,62027,62031],{"__ignoreMap":145},[149,60765,60766],{"class":151,"line":152},[149,60767,4119],{"emptyLinePlaceholder":1800},[149,60769,60770,60772,60774,60776],{"class":151,"line":193},[149,60771,53003],{"class":155},[149,60773,53006],{"class":325},[149,60775,53009],{"class":309},[149,60777,190],{"class":155},[149,60779,60780,60782,60784,60786,60788,60790],{"class":151,"line":235},[149,60781,156],{"class":155},[149,60783,52341],{"class":159},[149,60785,53020],{"class":162},[149,60787,166],{"class":155},[149,60789,53025],{"class":169},[149,60791,190],{"class":155},[149,60793,60794],{"class":151,"line":340},[149,60795,4119],{"emptyLinePlaceholder":1800},[149,60797,60798,60800,60802],{"class":151,"line":346},[149,60799,156],{"class":155},[149,60801,53038],{"class":159},[149,60803,190],{"class":155},[149,60805,60806,60808,60810,60812,60814,60816],{"class":151,"line":352},[149,60807,587],{"class":155},[149,60809,53048],{"class":159},[149,60811,53051],{"class":162},[149,60813,166],{"class":155},[149,60815,53056],{"class":169},[149,60817,60818],{"class":155}," \u002F>\n",[149,60820,60821,60823,60825,60827,60829,60831,60833,60835,60837],{"class":151,"line":1021},[149,60822,587],{"class":155},[149,60824,53048],{"class":159},[149,60826,53067],{"class":162},[149,60828,166],{"class":155},[149,60830,53072],{"class":169},[149,60832,53075],{"class":162},[149,60834,166],{"class":155},[149,60836,53080],{"class":169},[149,60838,60818],{"class":155},[149,60840,60841,60843,60845,60847,60849,60851,60853,60855,60857],{"class":151,"line":1035},[149,60842,587],{"class":155},[149,60844,53048],{"class":159},[149,60846,515],{"class":162},[149,60848,166],{"class":155},[149,60850,53095],{"class":169},[149,60852,53075],{"class":162},[149,60854,166],{"class":155},[149,60856,53102],{"class":169},[149,60858,60818],{"class":155},[149,60860,60861,60863,60865,60868,60870],{"class":151,"line":1054},[149,60862,587],{"class":155},[149,60864,53111],{"class":159},[149,60866,60867],{"class":155},">轮播图点击切换\u003C\u002F",[149,60869,53111],{"class":159},[149,60871,190],{"class":155},[149,60873,60874,60876,60878],{"class":151,"line":1072},[149,60875,587],{"class":155},[149,60877,1783],{"class":159},[149,60879,190],{"class":155},[149,60881,60882],{"class":151,"line":1090},[149,60883,60884],{"class":155},"    * {\n",[149,60886,60887],{"class":151,"line":1633},[149,60888,60889],{"class":155},"      box-sizing: border-box;\n",[149,60891,60892],{"class":151,"line":1644},[149,60893,3906],{"class":155},[149,60895,60896],{"class":151,"line":3348},[149,60897,4119],{"emptyLinePlaceholder":1800},[149,60899,60900],{"class":151,"line":3362},[149,60901,60902],{"class":155},"    .slider {\n",[149,60904,60905],{"class":151,"line":3367},[149,60906,60907],{"class":155},"      width: 560px;\n",[149,60909,60910],{"class":151,"line":3373},[149,60911,60912],{"class":155},"      height: 400px;\n",[149,60914,60915],{"class":151,"line":3394},[149,60916,60917],{"class":155},"      overflow: hidden;\n",[149,60919,60920],{"class":151,"line":3399},[149,60921,3906],{"class":155},[149,60923,60924],{"class":151,"line":3413},[149,60925,4119],{"emptyLinePlaceholder":1800},[149,60927,60928],{"class":151,"line":3418},[149,60929,60930],{"class":155},"    .slider-wrapper {\n",[149,60932,60933],{"class":151,"line":3447},[149,60934,60935],{"class":155},"      width: 100%;\n",[149,60937,60938],{"class":151,"line":3452},[149,60939,60940],{"class":155},"      height: 320px;\n",[149,60942,60943],{"class":151,"line":3469},[149,60944,3906],{"class":155},[149,60946,60947],{"class":151,"line":3474},[149,60948,4119],{"emptyLinePlaceholder":1800},[149,60950,60951],{"class":151,"line":3479},[149,60952,60953],{"class":155},"    .slider-wrapper img {\n",[149,60955,60956],{"class":151,"line":3484},[149,60957,60935],{"class":155},[149,60959,60960],{"class":151,"line":3498},[149,60961,60962],{"class":155},"      height: 100%;\n",[149,60964,60965],{"class":151,"line":3503},[149,60966,60967],{"class":155},"      display: block;\n",[149,60969,60970],{"class":151,"line":4296},[149,60971,3906],{"class":155},[149,60973,60974],{"class":151,"line":4310},[149,60975,4119],{"emptyLinePlaceholder":1800},[149,60977,60978],{"class":151,"line":4318},[149,60979,60980],{"class":155},"    .slider-footer {\n",[149,60982,60983],{"class":151,"line":4323},[149,60984,60985],{"class":155},"      height: 80px;\n",[149,60987,60988],{"class":151,"line":4329},[149,60989,60990],{"class":155},"      background-color: rgb(100, 67, 68);\n",[149,60992,60993],{"class":151,"line":4335},[149,60994,60995],{"class":155},"      padding: 12px 12px 0 12px;\n",[149,60997,60998],{"class":151,"line":4340},[149,60999,61000],{"class":155},"      position: relative;\n",[149,61002,61003],{"class":151,"line":9663},[149,61004,3906],{"class":155},[149,61006,61007],{"class":151,"line":9687},[149,61008,4119],{"emptyLinePlaceholder":1800},[149,61010,61011],{"class":151,"line":9692},[149,61012,61013],{"class":155},"    .slider-footer .toggle {\n",[149,61015,61016],{"class":151,"line":9698},[149,61017,61018],{"class":155},"      position: absolute;\n",[149,61020,61021],{"class":151,"line":9725},[149,61022,61023],{"class":155},"      right: 0;\n",[149,61025,61026],{"class":151,"line":9730},[149,61027,61028],{"class":155},"      top: 12px;\n",[149,61030,61031],{"class":151,"line":9736},[149,61032,61033],{"class":155},"      display: flex;\n",[149,61035,61036],{"class":151,"line":9748},[149,61037,3906],{"class":155},[149,61039,61040],{"class":151,"line":9760},[149,61041,4119],{"emptyLinePlaceholder":1800},[149,61043,61044],{"class":151,"line":9772},[149,61045,61046],{"class":155},"    .slider-footer .toggle button {\n",[149,61048,61049],{"class":151,"line":11430},[149,61050,61051],{"class":155},"      margin-right: 12px;\n",[149,61053,61054],{"class":151,"line":11455},[149,61055,61056],{"class":155},"      width: 28px;\n",[149,61058,61059],{"class":151,"line":11478},[149,61060,61061],{"class":155},"      height: 28px;\n",[149,61063,61064],{"class":151,"line":11502},[149,61065,61066],{"class":155},"      appearance: none;\n",[149,61068,61069],{"class":151,"line":11507},[149,61070,61071],{"class":155},"      border: none;\n",[149,61073,61074],{"class":151,"line":11512},[149,61075,61076],{"class":155},"      background: rgba(255, 255, 255, 0.1);\n",[149,61078,61079],{"class":151,"line":11517},[149,61080,61081],{"class":155},"      color: #fff;\n",[149,61083,61084],{"class":151,"line":11526},[149,61085,61086],{"class":155},"      border-radius: 4px;\n",[149,61088,61089],{"class":151,"line":11531},[149,61090,61091],{"class":155},"      cursor: pointer;\n",[149,61093,61094],{"class":151,"line":11537},[149,61095,3906],{"class":155},[149,61097,61098],{"class":151,"line":11558},[149,61099,4119],{"emptyLinePlaceholder":1800},[149,61101,61102],{"class":151,"line":11564},[149,61103,61104],{"class":155},"    .slider-footer .toggle button:hover {\n",[149,61106,61107],{"class":151,"line":11578},[149,61108,61109],{"class":155},"      background: rgba(255, 255, 255, 0.2);\n",[149,61111,61112],{"class":151,"line":11584},[149,61113,3906],{"class":155},[149,61115,61116],{"class":151,"line":11611},[149,61117,4119],{"emptyLinePlaceholder":1800},[149,61119,61120],{"class":151,"line":11620},[149,61121,61122],{"class":155},"    .slider-footer p {\n",[149,61124,61125],{"class":151,"line":11626},[149,61126,61127],{"class":155},"      margin: 0;\n",[149,61129,61130],{"class":151,"line":11634},[149,61131,61081],{"class":155},[149,61133,61134],{"class":151,"line":11639},[149,61135,61136],{"class":155},"      font-size: 18px;\n",[149,61138,61139],{"class":151,"line":18314},[149,61140,61141],{"class":155},"      margin-bottom: 10px;\n",[149,61143,61144],{"class":151,"line":18320},[149,61145,3906],{"class":155},[149,61147,61148],{"class":151,"line":18343},[149,61149,4119],{"emptyLinePlaceholder":1800},[149,61151,61152],{"class":151,"line":18349},[149,61153,61154],{"class":155},"    .slider-indicator {\n",[149,61156,61157],{"class":151,"line":18372},[149,61158,61127],{"class":155},[149,61160,61161],{"class":151,"line":18386},[149,61162,61163],{"class":155},"      padding: 0;\n",[149,61165,61166],{"class":151,"line":18406},[149,61167,61168],{"class":155},"      list-style: none;\n",[149,61170,61171],{"class":151,"line":18412},[149,61172,61033],{"class":155},[149,61174,61175],{"class":151,"line":18423},[149,61176,61177],{"class":155},"      align-items: center;\n",[149,61179,61180],{"class":151,"line":18446},[149,61181,3906],{"class":155},[149,61183,61184],{"class":151,"line":18468},[149,61185,4119],{"emptyLinePlaceholder":1800},[149,61187,61188],{"class":151,"line":18473},[149,61189,61190],{"class":155},"    .slider-indicator li {\n",[149,61192,61193],{"class":151,"line":18479},[149,61194,61195],{"class":155},"      width: 8px;\n",[149,61197,61198],{"class":151,"line":18493},[149,61199,61200],{"class":155},"      height: 8px;\n",[149,61202,61203],{"class":151,"line":18506},[149,61204,61205],{"class":155},"      margin: 4px;\n",[149,61207,61208],{"class":151,"line":18511},[149,61209,61210],{"class":155},"      border-radius: 50%;\n",[149,61212,61213],{"class":151,"line":18525},[149,61214,61215],{"class":155},"      background: #fff;\n",[149,61217,61218],{"class":151,"line":18530},[149,61219,61220],{"class":155},"      opacity: 0.4;\n",[149,61222,61223],{"class":151,"line":18536},[149,61224,61091],{"class":155},[149,61226,61227],{"class":151,"line":18541},[149,61228,3906],{"class":155},[149,61230,61231],{"class":151,"line":18555},[149,61232,4119],{"emptyLinePlaceholder":1800},[149,61234,61235],{"class":151,"line":18560},[149,61236,61237],{"class":155},"    .slider-indicator li.active {\n",[149,61239,61240],{"class":151,"line":18565},[149,61241,61242],{"class":155},"      width: 12px;\n",[149,61244,61245],{"class":151,"line":18579},[149,61246,61247],{"class":155},"      height: 12px;\n",[149,61249,61250],{"class":151,"line":18591},[149,61251,61252],{"class":155},"      opacity: 1;\n",[149,61254,61255],{"class":151,"line":18596},[149,61256,3906],{"class":155},[149,61258,61259,61261,61263],{"class":151,"line":18609},[149,61260,54115],{"class":155},[149,61262,1783],{"class":159},[149,61264,190],{"class":155},[149,61266,61267,61269,61271],{"class":151,"line":18614},[149,61268,665],{"class":155},[149,61270,53038],{"class":159},[149,61272,190],{"class":155},[149,61274,61275],{"class":151,"line":18619},[149,61276,4119],{"emptyLinePlaceholder":1800},[149,61278,61279,61281,61283],{"class":151,"line":18624},[149,61280,156],{"class":155},[149,61282,53499],{"class":159},[149,61284,190],{"class":155},[149,61286,61287,61289,61291,61293,61295,61298],{"class":151,"line":18637},[149,61288,587],{"class":155},[149,61290,301],{"class":159},[149,61292,55184],{"class":162},[149,61294,166],{"class":155},[149,61296,61297],{"class":169},"\"slider\"",[149,61299,190],{"class":155},[149,61301,61302,61304,61306,61308,61310,61312],{"class":151,"line":18642},[149,61303,53045],{"class":155},[149,61305,301],{"class":159},[149,61307,55184],{"class":162},[149,61309,166],{"class":155},[149,61311,56922],{"class":169},[149,61313,190],{"class":155},[149,61315,61316,61318,61320,61322,61324,61327,61329,61331,61333],{"class":151,"line":34339},[149,61317,56929],{"class":155},[149,61319,83],{"class":159},[149,61321,163],{"class":162},[149,61323,166],{"class":155},[149,61325,61326],{"class":169},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[149,61328,265],{"class":162},[149,61330,166],{"class":155},[149,61332,1382],{"class":169},[149,61334,60818],{"class":155},[149,61336,61337,61339,61341],{"class":151,"line":34345},[149,61338,53476],{"class":155},[149,61340,301],{"class":159},[149,61342,190],{"class":155},[149,61344,61345,61347,61349,61351,61353,61355],{"class":151,"line":34351},[149,61346,53045],{"class":155},[149,61348,301],{"class":159},[149,61350,55184],{"class":162},[149,61352,166],{"class":155},[149,61354,56967],{"class":169},[149,61356,190],{"class":155},[149,61358,61359,61361,61363,61366,61368],{"class":151,"line":34357},[149,61360,56929],{"class":155},[149,61362,24],{"class":159},[149,61364,61365],{"class":155},">对人类来说会不会太超前了？\u003C\u002F",[149,61367,24],{"class":159},[149,61369,190],{"class":155},[149,61371,61372,61374,61376,61378,61380,61383],{"class":151,"line":34363},[149,61373,56929],{"class":155},[149,61375,42],{"class":159},[149,61377,55184],{"class":162},[149,61379,166],{"class":155},[149,61381,61382],{"class":169},"\"slider-indicator\"",[149,61384,190],{"class":155},[149,61386,61387,61389,61391,61393,61395,61398,61400,61402],{"class":151,"line":34374},[149,61388,56995],{"class":155},[149,61390,45],{"class":159},[149,61392,55184],{"class":162},[149,61394,166],{"class":155},[149,61396,61397],{"class":169},"\"active\"",[149,61399,185],{"class":155},[149,61401,45],{"class":159},[149,61403,190],{"class":155},[149,61405,61406,61408,61410,61412,61414],{"class":151,"line":34380},[149,61407,56995],{"class":155},[149,61409,45],{"class":159},[149,61411,185],{"class":155},[149,61413,45],{"class":159},[149,61415,190],{"class":155},[149,61417,61418,61420,61422,61424,61426],{"class":151,"line":34400},[149,61419,56995],{"class":155},[149,61421,45],{"class":159},[149,61423,185],{"class":155},[149,61425,45],{"class":159},[149,61427,190],{"class":155},[149,61429,61430,61432,61434,61436,61438],{"class":151,"line":34406},[149,61431,56995],{"class":155},[149,61433,45],{"class":159},[149,61435,185],{"class":155},[149,61437,45],{"class":159},[149,61439,190],{"class":155},[149,61441,61442,61444,61446,61448,61450],{"class":151,"line":34417},[149,61443,56995],{"class":155},[149,61445,45],{"class":159},[149,61447,185],{"class":155},[149,61449,45],{"class":159},[149,61451,190],{"class":155},[149,61453,61454,61456,61458,61460,61462],{"class":151,"line":34423},[149,61455,56995],{"class":155},[149,61457,45],{"class":159},[149,61459,185],{"class":155},[149,61461,45],{"class":159},[149,61463,190],{"class":155},[149,61465,61466,61468,61470,61472,61474],{"class":151,"line":34429},[149,61467,56995],{"class":155},[149,61469,45],{"class":159},[149,61471,185],{"class":155},[149,61473,45],{"class":159},[149,61475,190],{"class":155},[149,61477,61478,61480,61482,61484,61486],{"class":151,"line":34435},[149,61479,56995],{"class":155},[149,61481,45],{"class":159},[149,61483,185],{"class":155},[149,61485,45],{"class":159},[149,61487,190],{"class":155},[149,61489,61490,61492,61494],{"class":151,"line":34441},[149,61491,57099],{"class":155},[149,61493,42],{"class":159},[149,61495,190],{"class":155},[149,61497,61498,61500,61502,61504,61506,61509],{"class":151,"line":34447},[149,61499,56929],{"class":155},[149,61501,301],{"class":159},[149,61503,55184],{"class":162},[149,61505,166],{"class":155},[149,61507,61508],{"class":169},"\"toggle\"",[149,61510,190],{"class":155},[149,61512,61513,61515,61517,61519,61521,61524,61526,61529,61531,61533],{"class":151,"line":34453},[149,61514,56995],{"class":155},[149,61516,646],{"class":159},[149,61518,55184],{"class":162},[149,61520,166],{"class":155},[149,61522,61523],{"class":169},"\"prev\"",[149,61525,2819],{"class":155},[149,61527,61528],{"class":309},"&lt;",[149,61530,665],{"class":155},[149,61532,646],{"class":159},[149,61534,190],{"class":155},[149,61536,61537,61539,61541,61543,61545,61548,61550,61553,61555,61557],{"class":151,"line":34459},[149,61538,56995],{"class":155},[149,61540,646],{"class":159},[149,61542,55184],{"class":162},[149,61544,166],{"class":155},[149,61546,61547],{"class":169},"\"next\"",[149,61549,2819],{"class":155},[149,61551,61552],{"class":309},"&gt;",[149,61554,665],{"class":155},[149,61556,646],{"class":159},[149,61558,190],{"class":155},[149,61560,61561,61563,61565],{"class":151,"line":34479},[149,61562,57099],{"class":155},[149,61564,301],{"class":159},[149,61566,190],{"class":155},[149,61568,61569,61571,61573],{"class":151,"line":34485},[149,61570,53476],{"class":155},[149,61572,301],{"class":159},[149,61574,190],{"class":155},[149,61576,61577,61579,61581],{"class":151,"line":34501},[149,61578,54115],{"class":155},[149,61580,301],{"class":159},[149,61582,190],{"class":155},[149,61584,61585,61587,61589],{"class":151,"line":34507},[149,61586,587],{"class":155},[149,61588,53512],{"class":159},[149,61590,190],{"class":155},[149,61592,61593],{"class":151,"line":34521},[149,61594,61595],{"class":155},"    \u002F\u002F 1. 初始数据\n",[149,61597,61598],{"class":151,"line":34527},[149,61599,61600],{"class":155},"    const data = [\n",[149,61602,61603],{"class":151,"line":34542},[149,61604,61605],{"class":155},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[149,61607,61608],{"class":151,"line":34548},[149,61609,61610],{"class":155},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[149,61612,61613],{"class":151,"line":34557},[149,61614,61615],{"class":155},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[149,61617,61618],{"class":151,"line":34563},[149,61619,61620],{"class":155},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[149,61622,61623],{"class":151,"line":34572},[149,61624,61625],{"class":155},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[149,61627,61628],{"class":151,"line":34578},[149,61629,61630],{"class":155},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[149,61632,61633],{"class":151,"line":34584},[149,61634,61635],{"class":155},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[149,61637,61638],{"class":151,"line":34593},[149,61639,61640],{"class":155},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[149,61642,61643],{"class":151,"line":34599},[149,61644,54807],{"class":155},[149,61646,61647],{"class":151,"line":34610},[149,61648,61649],{"class":155},"    \u002F\u002F 获取元素\n",[149,61651,61652],{"class":151,"line":34616},[149,61653,61654],{"class":155},"    const img = document.querySelector('.slider-wrapper img')\n",[149,61656,61657],{"class":151,"line":34635},[149,61658,61659],{"class":155},"    const p = document.querySelector('.slider-footer p')\n",[149,61661,61662],{"class":151,"line":34641},[149,61663,61664],{"class":155},"    const footer = document.querySelector('.slider-footer')\n",[149,61666,61667],{"class":151,"line":34652},[149,61668,61669],{"class":155},"    \u002F\u002F 1. 右按钮业务\n",[149,61671,61672],{"class":151,"line":34658},[149,61673,61674],{"class":155},"    \u002F\u002F 1.1 获取右侧按钮 \n",[149,61676,61677],{"class":151,"line":34678},[149,61678,61679],{"class":155},"    const next = document.querySelector('.next')\n",[149,61681,61682],{"class":151,"line":34694},[149,61683,61684],{"class":155},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[149,61686,61687],{"class":151,"line":34700},[149,61688,61689],{"class":155},"    \u002F\u002F 1.2 注册点击事件\n",[149,61691,61692],{"class":151,"line":34714},[149,61693,4119],{"emptyLinePlaceholder":1800},[149,61695,61696],{"class":151,"line":34720},[149,61697,61698],{"class":155},"    next.addEventListener('click', function () {\n",[149,61700,61701],{"class":151,"line":34726},[149,61702,61703],{"class":155},"      \u002F\u002F console.log(11)\n",[149,61705,61706],{"class":151,"line":34737},[149,61707,61708],{"class":155},"      i++\n",[149,61710,61711],{"class":151,"line":34743},[149,61712,61713],{"class":155},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[149,61715,61716],{"class":151,"line":34749},[149,61717,61718],{"class":155},"      \u002F\u002F if (i >= 8) {\n",[149,61720,61721],{"class":151,"line":34759},[149,61722,61723],{"class":155},"      \u002F\u002F   i = 0\n",[149,61725,61726],{"class":151,"line":34765},[149,61727,61728],{"class":155},"      \u002F\u002F }\n",[149,61730,61731],{"class":151,"line":34776},[149,61732,61733],{"class":155},"      i = i >= data.length ? 0 : i\n",[149,61735,61736],{"class":151,"line":34782},[149,61737,61738],{"class":155},"      \u002F\u002F 1.3 得到对应的对象\n",[149,61740,61741],{"class":151,"line":34792},[149,61742,61743],{"class":155},"      \u002F\u002F console.log(data[i])\n",[149,61745,61746],{"class":151,"line":34797},[149,61747,61748],{"class":155},"      \u002F\u002F 调用函数\n",[149,61750,61751],{"class":151,"line":34803},[149,61752,61753],{"class":155},"      toggle()\n",[149,61755,61756],{"class":151,"line":34852},[149,61757,35167],{"class":155},[149,61759,61760],{"class":151,"line":34899},[149,61761,4119],{"emptyLinePlaceholder":1800},[149,61763,61764],{"class":151,"line":34904},[149,61765,61766],{"class":155},"    \u002F\u002F 2. 左侧按钮业务\n",[149,61768,61769],{"class":151,"line":34910},[149,61770,61771],{"class":155},"    \u002F\u002F 2.1 获取左侧按钮 \n",[149,61773,61774],{"class":151,"line":34929},[149,61775,61776],{"class":155},"    const prev = document.querySelector('.prev')\n",[149,61778,61779],{"class":151,"line":34935},[149,61780,61689],{"class":155},[149,61782,61783],{"class":151,"line":34955},[149,61784,61785],{"class":155},"    prev.addEventListener('click', function () {\n",[149,61787,61788],{"class":151,"line":34961},[149,61789,61790],{"class":155},"      i--\n",[149,61792,61793],{"class":151,"line":34967},[149,61794,61795],{"class":155},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[149,61797,61798],{"class":151,"line":34977},[149,61799,61800],{"class":155},"      \u002F\u002F if (i \u003C 0) {\n",[149,61802,61803],{"class":151,"line":34982},[149,61804,61805],{"class":155},"      \u002F\u002F   i = 7\n",[149,61807,61808],{"class":151,"line":34988},[149,61809,61728],{"class":155},[149,61811,61812],{"class":151,"line":35004},[149,61813,61814],{"class":155},"      i = i \u003C 0 ? data.length - 1 : i\n",[149,61816,61817],{"class":151,"line":35049},[149,61818,61738],{"class":155},[149,61820,61821],{"class":151,"line":35055},[149,61822,61743],{"class":155},[149,61824,61825],{"class":151,"line":35061},[149,61826,61748],{"class":155},[149,61828,61829],{"class":151,"line":35067},[149,61830,61753],{"class":155},[149,61832,61833],{"class":151,"line":35078},[149,61834,35167],{"class":155},[149,61836,61837],{"class":151,"line":35084},[149,61838,4119],{"emptyLinePlaceholder":1800},[149,61840,61841],{"class":151,"line":35090},[149,61842,61843],{"class":155},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[149,61845,61846],{"class":151,"line":35096},[149,61847,61848],{"class":155},"    function toggle() {\n",[149,61850,61851],{"class":151,"line":35114},[149,61852,61853],{"class":155},"      \u002F\u002F 1.4 渲染对应的数据\n",[149,61855,61856],{"class":151,"line":35128},[149,61857,61858],{"class":155},"      img.src = data[i].url\n",[149,61860,61861],{"class":151,"line":35137},[149,61862,61863],{"class":155},"      p.innerHTML = data[i].title\n",[149,61865,61866],{"class":151,"line":35146},[149,61867,61868],{"class":155},"      footer.style.backgroundColor = data[i].color\n",[149,61870,61871],{"class":151,"line":35155},[149,61872,61873],{"class":155},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[149,61875,61876],{"class":151,"line":35164},[149,61877,61878],{"class":155},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[149,61880,61881],{"class":151,"line":35170},[149,61882,61883],{"class":155},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[149,61885,61886],{"class":151,"line":35176},[149,61887,3906],{"class":155},[149,61889,61890],{"class":151,"line":35184},[149,61891,4119],{"emptyLinePlaceholder":1800},[149,61893,61894],{"class":151,"line":35189},[149,61895,61896],{"class":155},"    \u002F\u002F 3. 自动播放模块\n",[149,61898,61899],{"class":151,"line":35195},[149,61900,61901],{"class":155},"    let timerId = setInterval(function () {\n",[149,61903,61904],{"class":151,"line":35206},[149,61905,61906],{"class":155},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[149,61908,61909],{"class":151,"line":35212},[149,61910,61911],{"class":155},"      next.click()\n",[149,61913,61914],{"class":151,"line":35232},[149,61915,61916],{"class":155},"    }, 1000)\n",[149,61918,61919],{"class":151,"line":35238},[149,61920,4119],{"emptyLinePlaceholder":1800},[149,61922,61923],{"class":151,"line":35244},[149,61924,61925],{"class":155},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[149,61927,61928],{"class":151,"line":35250},[149,61929,61930],{"class":155},"    const slider = document.querySelector('.slider')\n",[149,61932,61933],{"class":151,"line":35267},[149,61934,61935],{"class":155},"    \u002F\u002F 注册事件\n",[149,61937,61938],{"class":151,"line":35273},[149,61939,61940],{"class":155},"    slider.addEventListener('mouseenter', function () {\n",[149,61942,61943],{"class":151,"line":35279},[149,61944,61945],{"class":155},"      \u002F\u002F 停止定时器\n",[149,61947,61948],{"class":151,"line":35285},[149,61949,61950],{"class":155},"      clearInterval(timerId)\n",[149,61952,61953],{"class":151,"line":35291},[149,61954,35167],{"class":155},[149,61956,61957],{"class":151,"line":35297},[149,61958,4119],{"emptyLinePlaceholder":1800},[149,61960,61961],{"class":151,"line":35324},[149,61962,61963],{"class":155},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[149,61965,61966],{"class":151,"line":35348},[149,61967,61935],{"class":155},[149,61969,61970],{"class":151,"line":35354},[149,61971,61972],{"class":155},"    slider.addEventListener('mouseleave', function () {\n",[149,61974,61975],{"class":151,"line":35360},[149,61976,61945],{"class":155},[149,61978,61979],{"class":151,"line":35366},[149,61980,61981],{"class":155},"      if (timerId) clearInterval(timerId)\n",[149,61983,61984],{"class":151,"line":35377},[149,61985,61986],{"class":155},"      \u002F\u002F 开启定时器\n",[149,61988,61989],{"class":151,"line":35388},[149,61990,61991],{"class":155},"      timerId = setInterval(function () {\n",[149,61993,61994],{"class":151,"line":35394},[149,61995,61996],{"class":155},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[149,61998,61999],{"class":151,"line":35411},[149,62000,62001],{"class":155},"        next.click()\n",[149,62003,62004],{"class":151,"line":35434},[149,62005,62006],{"class":155},"      }, 1000)\n",[149,62008,62009],{"class":151,"line":35457},[149,62010,35167],{"class":155},[149,62012,62013,62015,62017],{"class":151,"line":35463},[149,62014,54115],{"class":155},[149,62016,53512],{"class":159},[149,62018,190],{"class":155},[149,62020,62021,62023,62025],{"class":151,"line":35468},[149,62022,665],{"class":155},[149,62024,53499],{"class":159},[149,62026,190],{"class":155},[149,62028,62029],{"class":151,"line":35477},[149,62030,4119],{"emptyLinePlaceholder":1800},[149,62032,62033,62035,62037],{"class":151,"line":35487},[149,62034,665],{"class":155},[149,62036,52341],{"class":159},[149,62038,190],{"class":155},[120,62040,62042],{"id":62041},"_3252-焦点事件","3.2.5.2 焦点事件",[24,62044,62045],{},"小米搜索框案例：",[140,62047,62049],{"className":52339,"code":62048,"language":52341,"meta":145,"style":145},"\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",[48,62050,62051,62061,62075,62079,62087,62101,62121,62141,62153,62161,62167,62177,62187,62199,62203,62207,62214,62218,62229,62233,62237,62244,62255,62268,62282,62286,62290,62299,62311,62323,62337,62350,62363,62381,62392,62396,62400,62409,62426,62430,62434,62441,62451,62461,62472,62485,62497,62513,62524,62536,62540,62544,62552,62562,62579,62591,62603,62614,62618,62622,62633,62644,62648,62656,62660,62668,62672,62680,62695,62717,62732,62763,62790,62817,62844,62871,62898,62925,62934,62942,62950,62955,62975,62995,63000,63005,63023,63028,63038,63043,63057,63062,63067,63084,63093,63105,63109,63117,63125,63129],{"__ignoreMap":145},[149,62052,62053,62055,62057,62059],{"class":151,"line":152},[149,62054,53003],{"class":155},[149,62056,53006],{"class":159},[149,62058,53009],{"class":162},[149,62060,190],{"class":155},[149,62062,62063,62065,62067,62069,62071,62073],{"class":151,"line":193},[149,62064,156],{"class":155},[149,62066,52341],{"class":159},[149,62068,53020],{"class":162},[149,62070,166],{"class":155},[149,62072,53025],{"class":169},[149,62074,190],{"class":155},[149,62076,62077],{"class":151,"line":235},[149,62078,4119],{"emptyLinePlaceholder":1800},[149,62080,62081,62083,62085],{"class":151,"line":340},[149,62082,156],{"class":155},[149,62084,53038],{"class":159},[149,62086,190],{"class":155},[149,62088,62089,62091,62093,62095,62097,62099],{"class":151,"line":346},[149,62090,53045],{"class":155},[149,62092,53048],{"class":159},[149,62094,53051],{"class":162},[149,62096,166],{"class":155},[149,62098,53056],{"class":169},[149,62100,190],{"class":155},[149,62102,62103,62105,62107,62109,62111,62113,62115,62117,62119],{"class":151,"line":352},[149,62104,53045],{"class":155},[149,62106,53048],{"class":159},[149,62108,53067],{"class":162},[149,62110,166],{"class":155},[149,62112,53072],{"class":169},[149,62114,53075],{"class":162},[149,62116,166],{"class":155},[149,62118,53080],{"class":169},[149,62120,190],{"class":155},[149,62122,62123,62125,62127,62129,62131,62133,62135,62137,62139],{"class":151,"line":1021},[149,62124,53045],{"class":155},[149,62126,53048],{"class":159},[149,62128,515],{"class":162},[149,62130,166],{"class":155},[149,62132,53095],{"class":169},[149,62134,53075],{"class":162},[149,62136,166],{"class":155},[149,62138,53102],{"class":169},[149,62140,190],{"class":155},[149,62142,62143,62145,62147,62149,62151],{"class":151,"line":1035},[149,62144,53045],{"class":155},[149,62146,53111],{"class":159},[149,62148,53114],{"class":155},[149,62150,53111],{"class":159},[149,62152,190],{"class":155},[149,62154,62155,62157,62159],{"class":151,"line":1054},[149,62156,53045],{"class":155},[149,62158,1783],{"class":159},[149,62160,190],{"class":155},[149,62162,62163,62165],{"class":151,"line":1072},[149,62164,53131],{"class":159},[149,62166,304],{"class":155},[149,62168,62169,62171,62173,62175],{"class":151,"line":1090},[149,62170,53138],{"class":309},[149,62172,313],{"class":155},[149,62174,2056],{"class":309},[149,62176,841],{"class":155},[149,62178,62179,62181,62183,62185],{"class":151,"line":1633},[149,62180,53149],{"class":309},[149,62182,313],{"class":155},[149,62184,2056],{"class":309},[149,62186,841],{"class":155},[149,62188,62189,62192,62194,62197],{"class":151,"line":1644},[149,62190,62191],{"class":309},"            box-sizing",[149,62193,313],{"class":155},[149,62195,62196],{"class":309},"border-box",[149,62198,841],{"class":155},[149,62200,62201],{"class":151,"line":3348},[149,62202,4248],{"class":155},[149,62204,62205],{"class":151,"line":3362},[149,62206,4119],{"emptyLinePlaceholder":1800},[149,62208,62209,62212],{"class":151,"line":3367},[149,62210,62211],{"class":159},"        ul",[149,62213,304],{"class":155},[149,62215,62216],{"class":151,"line":3373},[149,62217,4119],{"emptyLinePlaceholder":1800},[149,62219,62220,62223,62225,62227],{"class":151,"line":3394},[149,62221,62222],{"class":309},"            list-style",[149,62224,313],{"class":155},[149,62226,56432],{"class":309},[149,62228,841],{"class":155},[149,62230,62231],{"class":151,"line":3399},[149,62232,4248],{"class":155},[149,62234,62235],{"class":151,"line":3413},[149,62236,4119],{"emptyLinePlaceholder":1800},[149,62238,62239,62242],{"class":151,"line":3418},[149,62240,62241],{"class":162},"        .mi",[149,62243,304],{"class":155},[149,62245,62246,62249,62251,62253],{"class":151,"line":3447},[149,62247,62248],{"class":309},"            position",[149,62250,313],{"class":155},[149,62252,56459],{"class":309},[149,62254,841],{"class":155},[149,62256,62257,62259,62261,62264,62266],{"class":151,"line":3452},[149,62258,53187],{"class":309},[149,62260,313],{"class":155},[149,62262,62263],{"class":309},"223",[149,62265,326],{"class":325},[149,62267,841],{"class":155},[149,62269,62270,62272,62274,62276,62278,62280],{"class":151,"line":3469},[149,62271,53138],{"class":309},[149,62273,313],{"class":155},[149,62275,322],{"class":309},[149,62277,326],{"class":325},[149,62279,53257],{"class":309},[149,62281,841],{"class":155},[149,62283,62284],{"class":151,"line":3474},[149,62285,4248],{"class":155},[149,62287,62288],{"class":151,"line":3479},[149,62289,4119],{"emptyLinePlaceholder":1800},[149,62291,62292,62294,62297],{"class":151,"line":3484},[149,62293,62241],{"class":162},[149,62295,62296],{"class":159}," input",[149,62298,304],{"class":155},[149,62300,62301,62303,62305,62307,62309],{"class":151,"line":3498},[149,62302,53187],{"class":309},[149,62304,313],{"class":155},[149,62306,62263],{"class":309},[149,62308,326],{"class":325},[149,62310,841],{"class":155},[149,62312,62313,62315,62317,62319,62321],{"class":151,"line":3503},[149,62314,53201],{"class":309},[149,62316,313],{"class":155},[149,62318,2470],{"class":309},[149,62320,326],{"class":325},[149,62322,841],{"class":155},[149,62324,62325,62327,62329,62331,62333,62335],{"class":151,"line":4296},[149,62326,53149],{"class":309},[149,62328,313],{"class":155},[149,62330,2056],{"class":309},[149,62332,3757],{"class":309},[149,62334,326],{"class":325},[149,62336,841],{"class":155},[149,62338,62339,62342,62344,62346,62348],{"class":151,"line":4310},[149,62340,62341],{"class":309},"            font-size",[149,62343,313],{"class":155},[149,62345,2412],{"class":309},[149,62347,326],{"class":325},[149,62349,841],{"class":155},[149,62351,62352,62355,62357,62359,62361],{"class":151,"line":4318},[149,62353,62354],{"class":309},"            line-height",[149,62356,313],{"class":155},[149,62358,2470],{"class":309},[149,62360,326],{"class":325},[149,62362,841],{"class":155},[149,62364,62365,62368,62370,62372,62374,62376,62379],{"class":151,"line":4323},[149,62366,62367],{"class":309},"            border",[149,62369,313],{"class":155},[149,62371,830],{"class":309},[149,62373,326],{"class":325},[149,62375,835],{"class":309},[149,62377,62378],{"class":309}," #e0e0e0",[149,62380,841],{"class":155},[149,62382,62383,62386,62388,62390],{"class":151,"line":4329},[149,62384,62385],{"class":309},"            outline",[149,62387,313],{"class":155},[149,62389,56432],{"class":309},[149,62391,841],{"class":155},[149,62393,62394],{"class":151,"line":4335},[149,62395,4248],{"class":155},[149,62397,62398],{"class":151,"line":4340},[149,62399,4119],{"emptyLinePlaceholder":1800},[149,62401,62402,62404,62407],{"class":151,"line":9663},[149,62403,62241],{"class":162},[149,62405,62406],{"class":162}," .search",[149,62408,304],{"class":155},[149,62410,62411,62413,62415,62417,62419,62421,62424],{"class":151,"line":9687},[149,62412,62367],{"class":309},[149,62414,313],{"class":155},[149,62416,830],{"class":309},[149,62418,326],{"class":325},[149,62420,835],{"class":309},[149,62422,62423],{"class":309}," #ff6700",[149,62425,841],{"class":155},[149,62427,62428],{"class":151,"line":9692},[149,62429,4248],{"class":155},[149,62431,62432],{"class":151,"line":9698},[149,62433,4119],{"emptyLinePlaceholder":1800},[149,62435,62436,62439],{"class":151,"line":9725},[149,62437,62438],{"class":162},"        .result-list",[149,62440,304],{"class":155},[149,62442,62443,62445,62447,62449],{"class":151,"line":9730},[149,62444,53175],{"class":309},[149,62446,313],{"class":155},[149,62448,56432],{"class":309},[149,62450,841],{"class":155},[149,62452,62453,62455,62457,62459],{"class":151,"line":9736},[149,62454,62248],{"class":309},[149,62456,313],{"class":155},[149,62458,56526],{"class":309},[149,62460,841],{"class":155},[149,62462,62463,62466,62468,62470],{"class":151,"line":9748},[149,62464,62465],{"class":309},"            left",[149,62467,313],{"class":155},[149,62469,2056],{"class":309},[149,62471,841],{"class":155},[149,62473,62474,62477,62479,62481,62483],{"class":151,"line":9760},[149,62475,62476],{"class":309},"            top",[149,62478,313],{"class":155},[149,62480,2470],{"class":309},[149,62482,326],{"class":325},[149,62484,841],{"class":155},[149,62486,62487,62489,62491,62493,62495],{"class":151,"line":9772},[149,62488,53187],{"class":309},[149,62490,313],{"class":155},[149,62492,62263],{"class":309},[149,62494,326],{"class":325},[149,62496,841],{"class":155},[149,62498,62499,62501,62503,62505,62507,62509,62511],{"class":151,"line":11430},[149,62500,62367],{"class":309},[149,62502,313],{"class":155},[149,62504,830],{"class":309},[149,62506,326],{"class":325},[149,62508,835],{"class":309},[149,62510,62423],{"class":309},[149,62512,841],{"class":155},[149,62514,62515,62518,62520,62522],{"class":151,"line":11455},[149,62516,62517],{"class":309},"            border-top",[149,62519,313],{"class":155},[149,62521,2056],{"class":309},[149,62523,841],{"class":155},[149,62525,62526,62529,62531,62534],{"class":151,"line":11478},[149,62527,62528],{"class":309},"            background",[149,62530,313],{"class":155},[149,62532,62533],{"class":309},"#fff",[149,62535,841],{"class":155},[149,62537,62538],{"class":151,"line":11502},[149,62539,4248],{"class":155},[149,62541,62542],{"class":151,"line":11507},[149,62543,4119],{"emptyLinePlaceholder":1800},[149,62545,62546,62548,62550],{"class":151,"line":11512},[149,62547,62438],{"class":162},[149,62549,3123],{"class":159},[149,62551,304],{"class":155},[149,62553,62554,62556,62558,62560],{"class":151,"line":11517},[149,62555,53175],{"class":309},[149,62557,313],{"class":155},[149,62559,1394],{"class":309},[149,62561,841],{"class":155},[149,62563,62564,62566,62568,62570,62572,62575,62577],{"class":151,"line":11526},[149,62565,53149],{"class":309},[149,62567,313],{"class":155},[149,62569,2207],{"class":309},[149,62571,326],{"class":325},[149,62573,62574],{"class":309}," 15",[149,62576,326],{"class":325},[149,62578,841],{"class":155},[149,62580,62581,62583,62585,62587,62589],{"class":151,"line":11531},[149,62582,62341],{"class":309},[149,62584,313],{"class":155},[149,62586,2361],{"class":309},[149,62588,326],{"class":325},[149,62590,841],{"class":155},[149,62592,62593,62596,62598,62601],{"class":151,"line":11537},[149,62594,62595],{"class":309},"            color",[149,62597,313],{"class":155},[149,62599,62600],{"class":309},"#424242",[149,62602,841],{"class":155},[149,62604,62605,62608,62610,62612],{"class":151,"line":11558},[149,62606,62607],{"class":309},"            text-decoration",[149,62609,313],{"class":155},[149,62611,56432],{"class":309},[149,62613,841],{"class":155},[149,62615,62616],{"class":151,"line":11564},[149,62617,4248],{"class":155},[149,62619,62620],{"class":151,"line":11578},[149,62621,4119],{"emptyLinePlaceholder":1800},[149,62623,62624,62626,62628,62631],{"class":151,"line":11584},[149,62625,62438],{"class":162},[149,62627,3123],{"class":159},[149,62629,62630],{"class":162},":hover",[149,62632,304],{"class":155},[149,62634,62635,62637,62639,62642],{"class":151,"line":11611},[149,62636,53340],{"class":309},[149,62638,313],{"class":155},[149,62640,62641],{"class":309},"#eee",[149,62643,841],{"class":155},[149,62645,62646],{"class":151,"line":11620},[149,62647,4248],{"class":155},[149,62649,62650,62652,62654],{"class":151,"line":11626},[149,62651,53476],{"class":155},[149,62653,1783],{"class":159},[149,62655,190],{"class":155},[149,62657,62658],{"class":151,"line":11634},[149,62659,4119],{"emptyLinePlaceholder":1800},[149,62661,62662,62664,62666],{"class":151,"line":11639},[149,62663,665],{"class":155},[149,62665,53038],{"class":159},[149,62667,190],{"class":155},[149,62669,62670],{"class":151,"line":18314},[149,62671,4119],{"emptyLinePlaceholder":1800},[149,62673,62674,62676,62678],{"class":151,"line":18320},[149,62675,156],{"class":155},[149,62677,53499],{"class":159},[149,62679,190],{"class":155},[149,62681,62682,62684,62686,62688,62690,62693],{"class":151,"line":18343},[149,62683,53045],{"class":155},[149,62685,301],{"class":159},[149,62687,55184],{"class":162},[149,62689,166],{"class":155},[149,62691,62692],{"class":169},"\"mi\"",[149,62694,190],{"class":155},[149,62696,62697,62699,62701,62703,62705,62708,62710,62712,62715],{"class":151,"line":18349},[149,62698,56995],{"class":155},[149,62700,504],{"class":159},[149,62702,507],{"class":162},[149,62704,166],{"class":155},[149,62706,62707],{"class":169},"\"search\"",[149,62709,523],{"class":162},[149,62711,166],{"class":155},[149,62713,62714],{"class":169},"\"小米笔记本\"",[149,62716,190],{"class":155},[149,62718,62719,62721,62723,62725,62727,62730],{"class":151,"line":18372},[149,62720,56995],{"class":155},[149,62722,42],{"class":159},[149,62724,55184],{"class":162},[149,62726,166],{"class":155},[149,62728,62729],{"class":169},"\"result-list\"",[149,62731,190],{"class":155},[149,62733,62734,62737,62739,62742,62744,62747,62749,62752,62755,62757,62759,62761],{"class":151,"line":18386},[149,62735,62736],{"class":155},"            \u003C",[149,62738,45],{"class":159},[149,62740,62741],{"class":155},">\u003C",[149,62743,2102],{"class":159},[149,62745,62746],{"class":162}," href",[149,62748,166],{"class":155},[149,62750,62751],{"class":169},"\"#\"",[149,62753,62754],{"class":155},">全部商品\u003C\u002F",[149,62756,2102],{"class":159},[149,62758,185],{"class":155},[149,62760,45],{"class":159},[149,62762,190],{"class":155},[149,62764,62765,62767,62769,62771,62773,62775,62777,62779,62782,62784,62786,62788],{"class":151,"line":18406},[149,62766,62736],{"class":155},[149,62768,45],{"class":159},[149,62770,62741],{"class":155},[149,62772,2102],{"class":159},[149,62774,62746],{"class":162},[149,62776,166],{"class":155},[149,62778,62751],{"class":169},[149,62780,62781],{"class":155},">小米11\u003C\u002F",[149,62783,2102],{"class":159},[149,62785,185],{"class":155},[149,62787,45],{"class":159},[149,62789,190],{"class":155},[149,62791,62792,62794,62796,62798,62800,62802,62804,62806,62809,62811,62813,62815],{"class":151,"line":18412},[149,62793,62736],{"class":155},[149,62795,45],{"class":159},[149,62797,62741],{"class":155},[149,62799,2102],{"class":159},[149,62801,62746],{"class":162},[149,62803,166],{"class":155},[149,62805,62751],{"class":169},[149,62807,62808],{"class":155},">小米10S\u003C\u002F",[149,62810,2102],{"class":159},[149,62812,185],{"class":155},[149,62814,45],{"class":159},[149,62816,190],{"class":155},[149,62818,62819,62821,62823,62825,62827,62829,62831,62833,62836,62838,62840,62842],{"class":151,"line":18423},[149,62820,62736],{"class":155},[149,62822,45],{"class":159},[149,62824,62741],{"class":155},[149,62826,2102],{"class":159},[149,62828,62746],{"class":162},[149,62830,166],{"class":155},[149,62832,62751],{"class":169},[149,62834,62835],{"class":155},">小米笔记本\u003C\u002F",[149,62837,2102],{"class":159},[149,62839,185],{"class":155},[149,62841,45],{"class":159},[149,62843,190],{"class":155},[149,62845,62846,62848,62850,62852,62854,62856,62858,62860,62863,62865,62867,62869],{"class":151,"line":18446},[149,62847,62736],{"class":155},[149,62849,45],{"class":159},[149,62851,62741],{"class":155},[149,62853,2102],{"class":159},[149,62855,62746],{"class":162},[149,62857,166],{"class":155},[149,62859,62751],{"class":169},[149,62861,62862],{"class":155},">小米手机\u003C\u002F",[149,62864,2102],{"class":159},[149,62866,185],{"class":155},[149,62868,45],{"class":159},[149,62870,190],{"class":155},[149,62872,62873,62875,62877,62879,62881,62883,62885,62887,62890,62892,62894,62896],{"class":151,"line":18468},[149,62874,62736],{"class":155},[149,62876,45],{"class":159},[149,62878,62741],{"class":155},[149,62880,2102],{"class":159},[149,62882,62746],{"class":162},[149,62884,166],{"class":155},[149,62886,62751],{"class":169},[149,62888,62889],{"class":155},">黑鲨4\u003C\u002F",[149,62891,2102],{"class":159},[149,62893,185],{"class":155},[149,62895,45],{"class":159},[149,62897,190],{"class":155},[149,62899,62900,62902,62904,62906,62908,62910,62912,62914,62917,62919,62921,62923],{"class":151,"line":18473},[149,62901,62736],{"class":155},[149,62903,45],{"class":159},[149,62905,62741],{"class":155},[149,62907,2102],{"class":159},[149,62909,62746],{"class":162},[149,62911,166],{"class":155},[149,62913,62751],{"class":169},[149,62915,62916],{"class":155},">空调\u003C\u002F",[149,62918,2102],{"class":159},[149,62920,185],{"class":155},[149,62922,45],{"class":159},[149,62924,190],{"class":155},[149,62926,62927,62930,62932],{"class":151,"line":18479},[149,62928,62929],{"class":155},"        \u003C\u002F",[149,62931,42],{"class":159},[149,62933,190],{"class":155},[149,62935,62936,62938,62940],{"class":151,"line":18493},[149,62937,53476],{"class":155},[149,62939,301],{"class":159},[149,62941,190],{"class":155},[149,62943,62944,62946,62948],{"class":151,"line":18506},[149,62945,53045],{"class":155},[149,62947,53512],{"class":159},[149,62949,190],{"class":155},[149,62951,62952],{"class":151,"line":18511},[149,62953,62954],{"class":295},"        \u002F\u002F 1. 获取元素\n",[149,62956,62957,62960,62962,62964,62966,62968,62970,62973],{"class":151,"line":18525},[149,62958,62959],{"class":325},"        const",[149,62961,62296],{"class":309},[149,62963,15277],{"class":325},[149,62965,56091],{"class":155},[149,62967,56094],{"class":162},[149,62969,319],{"class":155},[149,62971,62972],{"class":169},"'[type=search]'",[149,62974,1878],{"class":155},[149,62976,62977,62979,62982,62984,62986,62988,62990,62993],{"class":151,"line":18530},[149,62978,62959],{"class":325},[149,62980,62981],{"class":309}," ul",[149,62983,15277],{"class":325},[149,62985,56091],{"class":155},[149,62987,56094],{"class":162},[149,62989,319],{"class":155},[149,62991,62992],{"class":169},"'.result-list'",[149,62994,1878],{"class":155},[149,62996,62997],{"class":151,"line":18536},[149,62998,62999],{"class":295},"        \u002F\u002F console.log(input)\n",[149,63001,63002],{"class":151,"line":18541},[149,63003,63004],{"class":295},"        \u002F\u002F 2. 监听事件 获得焦点\n",[149,63006,63007,63010,63012,63014,63017,63019,63021],{"class":151,"line":18555},[149,63008,63009],{"class":155},"        input.",[149,63011,59504],{"class":162},[149,63013,319],{"class":155},[149,63015,63016],{"class":169},"'focus'",[149,63018,329],{"class":155},[149,63020,56144],{"class":325},[149,63022,56147],{"class":155},[149,63024,63025],{"class":151,"line":18560},[149,63026,63027],{"class":295},"            \u002F\u002F ul显示\n",[149,63029,63030,63033,63035],{"class":151,"line":18565},[149,63031,63032],{"class":155},"            ul.style.display ",[149,63034,166],{"class":325},[149,63036,63037],{"class":169}," 'block'\n",[149,63039,63040],{"class":151,"line":18579},[149,63041,63042],{"class":295},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[149,63044,63045,63048,63050,63052,63055],{"class":151,"line":18591},[149,63046,63047],{"class":155},"            input.classList.",[149,63049,7050],{"class":162},[149,63051,319],{"class":155},[149,63053,63054],{"class":169},"'search'",[149,63056,1878],{"class":155},[149,63058,63059],{"class":151,"line":18596},[149,63060,63061],{"class":155},"        })\n",[149,63063,63064],{"class":151,"line":18609},[149,63065,63066],{"class":295},"        \u002F\u002F 3. 监听事件 失去焦点\n",[149,63068,63069,63071,63073,63075,63078,63080,63082],{"class":151,"line":18614},[149,63070,63009],{"class":155},[149,63072,59504],{"class":162},[149,63074,319],{"class":155},[149,63076,63077],{"class":169},"'blur'",[149,63079,329],{"class":155},[149,63081,56144],{"class":325},[149,63083,56147],{"class":155},[149,63085,63086,63088,63090],{"class":151,"line":18619},[149,63087,63032],{"class":155},[149,63089,166],{"class":325},[149,63091,63092],{"class":169}," 'none'\n",[149,63094,63095,63097,63099,63101,63103],{"class":151,"line":18624},[149,63096,63047],{"class":155},[149,63098,58698],{"class":162},[149,63100,319],{"class":155},[149,63102,63054],{"class":169},[149,63104,1878],{"class":155},[149,63106,63107],{"class":151,"line":18637},[149,63108,63061],{"class":155},[149,63110,63111,63113,63115],{"class":151,"line":18642},[149,63112,53476],{"class":155},[149,63114,53512],{"class":159},[149,63116,190],{"class":155},[149,63118,63119,63121,63123],{"class":151,"line":34339},[149,63120,665],{"class":155},[149,63122,53499],{"class":159},[149,63124,190],{"class":155},[149,63126,63127],{"class":151,"line":34345},[149,63128,4119],{"emptyLinePlaceholder":1800},[149,63130,63131,63133,63135],{"class":151,"line":34351},[149,63132,665],{"class":155},[149,63134,52341],{"class":159},[149,63136,190],{"class":155},[120,63138,63140],{"id":63139},"_3253-键盘事件","3.2.5.3 键盘事件",[24,63142,63143],{},"评论字数统计案例",[24,63145,63146],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[24,63148,63149],{},"牢记focus伪类选择器",[53048,63151],{"charSet":63152},"UTF-8",[53048,63154],{"name":63155,"content":63156},"viewport","width=device-width, initial-scale=1.0",[53111,63158,63159],{},"Document",[1783,63161,63162],{},"\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",[504,63164],{"type":1655},[42,63166,63167,63170],{},[45,63168,63169],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[45,63171,63172],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[140,63174,63176],{"className":52339,"code":63175,"language":52341,"meta":145,"style":145},"\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",[48,63177,63178,63188,63202,63206,63214,63228,63248,63268,63281,63289,63296,63309,63323,63333,63343,63347,63351,63358,63370,63382,63394,63406,63435,63448,63452,63456,63465,63476,63488,63499,63510,63522,63533,63545,63561,63573,63577,63581,63592,63603,63613,63625,63629,63633,63641,63652,63662,63673,63685,63698,63710,63722,63726,63730,63739,63751,63761,63774,63785,63799,63803,63807,63814,63826,63838,63848,63852,63856,63865,63877,63887,63891,63895,63906,63916,63935,63948,63952,63956,63966,63976,63980,63984,63995,64006,64018,64030,64034,64038,64049,64060,64074,64078,64082,64093,64103,64115,64119,64127,64135,64139,64147,64162,64181,64221,64234,64242,64256,64276,64284,64299,64322,64340,64355,64375,64394,64414,64422,64430,64438,64446,64466,64486,64491,64508,64517,64521,64526,64542,64550,64554,64559,64576,64581,64606,64610,64614,64619,64624,64632,64640,64644],{"__ignoreMap":145},[149,63179,63180,63182,63184,63186],{"class":151,"line":152},[149,63181,53003],{"class":155},[149,63183,53006],{"class":159},[149,63185,53009],{"class":162},[149,63187,190],{"class":155},[149,63189,63190,63192,63194,63196,63198,63200],{"class":151,"line":193},[149,63191,156],{"class":155},[149,63193,52341],{"class":159},[149,63195,53020],{"class":162},[149,63197,166],{"class":155},[149,63199,53025],{"class":169},[149,63201,190],{"class":155},[149,63203,63204],{"class":151,"line":235},[149,63205,4119],{"emptyLinePlaceholder":1800},[149,63207,63208,63210,63212],{"class":151,"line":340},[149,63209,156],{"class":155},[149,63211,53038],{"class":159},[149,63213,190],{"class":155},[149,63215,63216,63218,63220,63222,63224,63226],{"class":151,"line":346},[149,63217,587],{"class":155},[149,63219,53048],{"class":159},[149,63221,53051],{"class":162},[149,63223,166],{"class":155},[149,63225,53056],{"class":169},[149,63227,190],{"class":155},[149,63229,63230,63232,63234,63236,63238,63240,63242,63244,63246],{"class":151,"line":352},[149,63231,587],{"class":155},[149,63233,53048],{"class":159},[149,63235,53067],{"class":162},[149,63237,166],{"class":155},[149,63239,53072],{"class":169},[149,63241,53075],{"class":162},[149,63243,166],{"class":155},[149,63245,53080],{"class":169},[149,63247,190],{"class":155},[149,63249,63250,63252,63254,63256,63258,63260,63262,63264,63266],{"class":151,"line":1021},[149,63251,587],{"class":155},[149,63253,53048],{"class":159},[149,63255,515],{"class":162},[149,63257,166],{"class":155},[149,63259,53095],{"class":169},[149,63261,53075],{"class":162},[149,63263,166],{"class":155},[149,63265,53102],{"class":169},[149,63267,190],{"class":155},[149,63269,63270,63272,63274,63277,63279],{"class":151,"line":1035},[149,63271,587],{"class":155},[149,63273,53111],{"class":159},[149,63275,63276],{"class":155},">评论回车发布\u003C\u002F",[149,63278,53111],{"class":159},[149,63280,190],{"class":155},[149,63282,63283,63285,63287],{"class":151,"line":1054},[149,63284,587],{"class":155},[149,63286,1783],{"class":159},[149,63288,190],{"class":155},[149,63290,63291,63294],{"class":151,"line":1072},[149,63292,63293],{"class":162},"    .wrapper",[149,63295,304],{"class":155},[149,63297,63298,63301,63303,63305,63307],{"class":151,"line":1090},[149,63299,63300],{"class":309},"      min-width",[149,63302,313],{"class":155},[149,63304,5705],{"class":309},[149,63306,326],{"class":325},[149,63308,841],{"class":155},[149,63310,63311,63314,63316,63319,63321],{"class":151,"line":1633},[149,63312,63313],{"class":309},"      max-width",[149,63315,313],{"class":155},[149,63317,63318],{"class":309},"800",[149,63320,326],{"class":325},[149,63322,841],{"class":155},[149,63324,63325,63327,63329,63331],{"class":151,"line":1644},[149,63326,56704],{"class":309},[149,63328,313],{"class":155},[149,63330,53180],{"class":309},[149,63332,841],{"class":155},[149,63334,63335,63337,63339,63341],{"class":151,"line":3348},[149,63336,56715],{"class":309},[149,63338,313],{"class":155},[149,63340,53281],{"class":309},[149,63342,841],{"class":155},[149,63344,63345],{"class":151,"line":3362},[149,63346,3906],{"class":155},[149,63348,63349],{"class":151,"line":3367},[149,63350,4119],{"emptyLinePlaceholder":1800},[149,63352,63353,63356],{"class":151,"line":3373},[149,63354,63355],{"class":162},"    .avatar",[149,63357,304],{"class":155},[149,63359,63360,63362,63364,63366,63368],{"class":151,"line":3394},[149,63361,56466],{"class":309},[149,63363,313],{"class":155},[149,63365,2470],{"class":309},[149,63367,326],{"class":325},[149,63369,841],{"class":155},[149,63371,63372,63374,63376,63378,63380],{"class":151,"line":3399},[149,63373,56480],{"class":309},[149,63375,313],{"class":155},[149,63377,2470],{"class":309},[149,63379,326],{"class":325},[149,63381,841],{"class":155},[149,63383,63384,63386,63388,63390,63392],{"class":151,"line":3413},[149,63385,56829],{"class":309},[149,63387,313],{"class":155},[149,63389,332],{"class":309},[149,63391,2191],{"class":325},[149,63393,841],{"class":155},[149,63395,63396,63399,63401,63404],{"class":151,"line":3418},[149,63397,63398],{"class":309},"      overflow",[149,63400,313],{"class":155},[149,63402,63403],{"class":309},"hidden",[149,63405,841],{"class":155},[149,63407,63408,63411,63413,63416,63418,63421,63423,63426,63428,63430,63433],{"class":151,"line":3447},[149,63409,63410],{"class":309},"      background",[149,63412,313],{"class":155},[149,63414,63415],{"class":309},"url",[149,63417,319],{"class":155},[149,63419,63420],{"class":6932},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[149,63422,15427],{"class":155},[149,63424,63425],{"class":309},"no-repeat",[149,63427,18854],{"class":309},[149,63429,26687],{"class":155},[149,63431,63432],{"class":309},"cover",[149,63434,841],{"class":155},[149,63436,63437,63440,63442,63444,63446],{"class":151,"line":3452},[149,63438,63439],{"class":309},"      margin-right",[149,63441,313],{"class":155},[149,63443,2561],{"class":309},[149,63445,326],{"class":325},[149,63447,841],{"class":155},[149,63449,63450],{"class":151,"line":3469},[149,63451,3906],{"class":155},[149,63453,63454],{"class":151,"line":3474},[149,63455,4119],{"emptyLinePlaceholder":1800},[149,63457,63458,63460,63463],{"class":151,"line":3479},[149,63459,63293],{"class":162},[149,63461,63462],{"class":159}," textarea",[149,63464,304],{"class":155},[149,63466,63467,63470,63472,63474],{"class":151,"line":3484},[149,63468,63469],{"class":309},"      outline",[149,63471,313],{"class":155},[149,63473,56432],{"class":309},[149,63475,841],{"class":155},[149,63477,63478,63481,63483,63486],{"class":151,"line":3498},[149,63479,63480],{"class":309},"      border-color",[149,63482,313],{"class":155},[149,63484,63485],{"class":309},"transparent",[149,63487,841],{"class":155},[149,63489,63490,63493,63495,63497],{"class":151,"line":3503},[149,63491,63492],{"class":309},"      resize",[149,63494,313],{"class":155},[149,63496,56432],{"class":309},[149,63498,841],{"class":155},[149,63500,63501,63503,63505,63508],{"class":151,"line":4296},[149,63502,63410],{"class":309},[149,63504,313],{"class":155},[149,63506,63507],{"class":309},"#f5f5f5",[149,63509,841],{"class":155},[149,63511,63512,63514,63516,63518,63520],{"class":151,"line":4310},[149,63513,56829],{"class":309},[149,63515,313],{"class":155},[149,63517,2157],{"class":309},[149,63519,326],{"class":325},[149,63521,841],{"class":155},[149,63523,63524,63527,63529,63531],{"class":151,"line":4318},[149,63525,63526],{"class":309},"      flex",[149,63528,313],{"class":155},[149,63530,830],{"class":309},[149,63532,841],{"class":155},[149,63534,63535,63537,63539,63541,63543],{"class":151,"line":4323},[149,63536,56390],{"class":309},[149,63538,313],{"class":155},[149,63540,2309],{"class":309},[149,63542,326],{"class":325},[149,63544,841],{"class":155},[149,63546,63547,63550,63552,63554,63557,63559],{"class":151,"line":4329},[149,63548,63549],{"class":309},"      transition",[149,63551,313],{"class":155},[149,63553,1714],{"class":309},[149,63555,63556],{"class":309}," 0.5",[149,63558,1720],{"class":325},[149,63560,841],{"class":155},[149,63562,63563,63565,63567,63569,63571],{"class":151,"line":4335},[149,63564,56480],{"class":309},[149,63566,313],{"class":155},[149,63568,2810],{"class":309},[149,63570,326],{"class":325},[149,63572,841],{"class":155},[149,63574,63575],{"class":151,"line":4340},[149,63576,3906],{"class":155},[149,63578,63579],{"class":151,"line":9663},[149,63580,4119],{"emptyLinePlaceholder":1800},[149,63582,63583,63585,63587,63590],{"class":151,"line":9687},[149,63584,63293],{"class":162},[149,63586,63462],{"class":159},[149,63588,63589],{"class":162},":focus",[149,63591,304],{"class":155},[149,63593,63594,63596,63598,63601],{"class":151,"line":9692},[149,63595,63480],{"class":309},[149,63597,313],{"class":155},[149,63599,63600],{"class":309},"#e4e4e4",[149,63602,841],{"class":155},[149,63604,63605,63607,63609,63611],{"class":151,"line":9698},[149,63606,63410],{"class":309},[149,63608,313],{"class":155},[149,63610,62533],{"class":309},[149,63612,841],{"class":155},[149,63614,63615,63617,63619,63621,63623],{"class":151,"line":9725},[149,63616,56480],{"class":309},[149,63618,313],{"class":155},[149,63620,332],{"class":309},[149,63622,326],{"class":325},[149,63624,841],{"class":155},[149,63626,63627],{"class":151,"line":9730},[149,63628,3906],{"class":155},[149,63630,63631],{"class":151,"line":9736},[149,63632,4119],{"emptyLinePlaceholder":1800},[149,63634,63635,63637,63639],{"class":151,"line":9748},[149,63636,63293],{"class":162},[149,63638,59158],{"class":159},[149,63640,304],{"class":155},[149,63642,63643,63645,63647,63650],{"class":151,"line":9760},[149,63644,63410],{"class":309},[149,63646,313],{"class":155},[149,63648,63649],{"class":309},"#00aeec",[149,63651,841],{"class":155},[149,63653,63654,63656,63658,63660],{"class":151,"line":9772},[149,63655,59108],{"class":309},[149,63657,313],{"class":155},[149,63659,62533],{"class":309},[149,63661,841],{"class":155},[149,63663,63664,63667,63669,63671],{"class":151,"line":11430},[149,63665,63666],{"class":309},"      border",[149,63668,313],{"class":155},[149,63670,56432],{"class":309},[149,63672,841],{"class":155},[149,63674,63675,63677,63679,63681,63683],{"class":151,"line":11455},[149,63676,56829],{"class":309},[149,63678,313],{"class":155},[149,63680,2157],{"class":309},[149,63682,326],{"class":325},[149,63684,841],{"class":155},[149,63686,63687,63690,63692,63694,63696],{"class":151,"line":11478},[149,63688,63689],{"class":309},"      margin-left",[149,63691,313],{"class":155},[149,63693,2309],{"class":309},[149,63695,326],{"class":325},[149,63697,841],{"class":155},[149,63699,63700,63702,63704,63706,63708],{"class":151,"line":11502},[149,63701,56466],{"class":309},[149,63703,313],{"class":155},[149,63705,2219],{"class":309},[149,63707,326],{"class":325},[149,63709,841],{"class":155},[149,63711,63712,63715,63717,63720],{"class":151,"line":11507},[149,63713,63714],{"class":309},"      cursor",[149,63716,313],{"class":155},[149,63718,63719],{"class":309},"pointer",[149,63721,841],{"class":155},[149,63723,63724],{"class":151,"line":11512},[149,63725,3906],{"class":155},[149,63727,63728],{"class":151,"line":11517},[149,63729,4119],{"emptyLinePlaceholder":1800},[149,63731,63732,63734,63737],{"class":151,"line":11526},[149,63733,63293],{"class":162},[149,63735,63736],{"class":162}," .total",[149,63738,304],{"class":155},[149,63740,63741,63743,63745,63747,63749],{"class":151,"line":11531},[149,63742,63439],{"class":309},[149,63744,313],{"class":155},[149,63746,2475],{"class":309},[149,63748,326],{"class":325},[149,63750,841],{"class":155},[149,63752,63753,63755,63757,63759],{"class":151,"line":11537},[149,63754,59108],{"class":309},[149,63756,313],{"class":155},[149,63758,1429],{"class":309},[149,63760,841],{"class":155},[149,63762,63763,63766,63768,63770,63772],{"class":151,"line":11558},[149,63764,63765],{"class":309},"      margin-top",[149,63767,313],{"class":155},[149,63769,2182],{"class":309},[149,63771,326],{"class":325},[149,63773,841],{"class":155},[149,63775,63776,63779,63781,63783],{"class":151,"line":11564},[149,63777,63778],{"class":309},"      opacity",[149,63780,313],{"class":155},[149,63782,2056],{"class":309},[149,63784,841],{"class":155},[149,63786,63787,63789,63791,63793,63795,63797],{"class":151,"line":11578},[149,63788,63549],{"class":309},[149,63790,313],{"class":155},[149,63792,1714],{"class":309},[149,63794,63556],{"class":309},[149,63796,1720],{"class":325},[149,63798,841],{"class":155},[149,63800,63801],{"class":151,"line":11584},[149,63802,3906],{"class":155},[149,63804,63805],{"class":151,"line":11611},[149,63806,4119],{"emptyLinePlaceholder":1800},[149,63808,63809,63812],{"class":151,"line":11620},[149,63810,63811],{"class":162},"    .list",[149,63813,304],{"class":155},[149,63815,63816,63818,63820,63822,63824],{"class":151,"line":11626},[149,63817,63300],{"class":309},[149,63819,313],{"class":155},[149,63821,5705],{"class":309},[149,63823,326],{"class":325},[149,63825,841],{"class":155},[149,63827,63828,63830,63832,63834,63836],{"class":151,"line":11634},[149,63829,63313],{"class":309},[149,63831,313],{"class":155},[149,63833,63318],{"class":309},[149,63835,326],{"class":325},[149,63837,841],{"class":155},[149,63839,63840,63842,63844,63846],{"class":151,"line":11639},[149,63841,56704],{"class":309},[149,63843,313],{"class":155},[149,63845,53180],{"class":309},[149,63847,841],{"class":155},[149,63849,63850],{"class":151,"line":18314},[149,63851,3906],{"class":155},[149,63853,63854],{"class":151,"line":18320},[149,63855,4119],{"emptyLinePlaceholder":1800},[149,63857,63858,63860,63863],{"class":151,"line":18343},[149,63859,63811],{"class":162},[149,63861,63862],{"class":162}," .item",[149,63864,304],{"class":155},[149,63866,63867,63869,63871,63873,63875],{"class":151,"line":18349},[149,63868,56466],{"class":309},[149,63870,313],{"class":155},[149,63872,322],{"class":309},[149,63874,2191],{"class":325},[149,63876,841],{"class":155},[149,63878,63879,63881,63883,63885],{"class":151,"line":18372},[149,63880,56704],{"class":309},[149,63882,313],{"class":155},[149,63884,53180],{"class":309},[149,63886,841],{"class":155},[149,63888,63889],{"class":151,"line":18386},[149,63890,3906],{"class":155},[149,63892,63893],{"class":151,"line":18406},[149,63894,4119],{"emptyLinePlaceholder":1800},[149,63896,63897,63899,63901,63904],{"class":151,"line":18412},[149,63898,63811],{"class":162},[149,63900,63862],{"class":162},[149,63902,63903],{"class":162}," .info",[149,63905,304],{"class":155},[149,63907,63908,63910,63912,63914],{"class":151,"line":18423},[149,63909,63526],{"class":309},[149,63911,313],{"class":155},[149,63913,830],{"class":309},[149,63915,841],{"class":155},[149,63917,63918,63921,63923,63925,63927,63930,63933],{"class":151,"line":18446},[149,63919,63920],{"class":309},"      border-bottom",[149,63922,313],{"class":155},[149,63924,830],{"class":309},[149,63926,326],{"class":325},[149,63928,63929],{"class":309}," dashed",[149,63931,63932],{"class":309}," #e4e4e4",[149,63934,841],{"class":155},[149,63936,63937,63940,63942,63944,63946],{"class":151,"line":18468},[149,63938,63939],{"class":309},"      padding-bottom",[149,63941,313],{"class":155},[149,63943,2309],{"class":309},[149,63945,326],{"class":325},[149,63947,841],{"class":155},[149,63949,63950],{"class":151,"line":18473},[149,63951,3906],{"class":155},[149,63953,63954],{"class":151,"line":18479},[149,63955,4119],{"emptyLinePlaceholder":1800},[149,63957,63958,63960,63962,63964],{"class":151,"line":18493},[149,63959,63811],{"class":162},[149,63961,63862],{"class":162},[149,63963,8541],{"class":159},[149,63965,304],{"class":155},[149,63967,63968,63970,63972,63974],{"class":151,"line":18506},[149,63969,56401],{"class":309},[149,63971,313],{"class":155},[149,63973,2056],{"class":309},[149,63975,841],{"class":155},[149,63977,63978],{"class":151,"line":18511},[149,63979,3906],{"class":155},[149,63981,63982],{"class":151,"line":18525},[149,63983,4119],{"emptyLinePlaceholder":1800},[149,63985,63986,63988,63990,63993],{"class":151,"line":18530},[149,63987,63811],{"class":162},[149,63989,63862],{"class":162},[149,63991,63992],{"class":162}," .name",[149,63994,304],{"class":155},[149,63996,63997,63999,64001,64004],{"class":151,"line":18536},[149,63998,59108],{"class":309},[149,64000,313],{"class":155},[149,64002,64003],{"class":309},"#FB7299",[149,64005,841],{"class":155},[149,64007,64008,64010,64012,64014,64016],{"class":151,"line":18541},[149,64009,56617],{"class":309},[149,64011,313],{"class":155},[149,64013,2412],{"class":309},[149,64015,326],{"class":325},[149,64017,841],{"class":155},[149,64019,64020,64023,64025,64028],{"class":151,"line":18555},[149,64021,64022],{"class":309},"      font-weight",[149,64024,313],{"class":155},[149,64026,64027],{"class":309},"bold",[149,64029,841],{"class":155},[149,64031,64032],{"class":151,"line":18560},[149,64033,3906],{"class":155},[149,64035,64036],{"class":151,"line":18565},[149,64037,4119],{"emptyLinePlaceholder":1800},[149,64039,64040,64042,64044,64047],{"class":151,"line":18579},[149,64041,63811],{"class":162},[149,64043,63862],{"class":162},[149,64045,64046],{"class":162}," .text",[149,64048,304],{"class":155},[149,64050,64051,64053,64055,64058],{"class":151,"line":18591},[149,64052,59108],{"class":309},[149,64054,313],{"class":155},[149,64056,64057],{"class":309},"#333",[149,64059,841],{"class":155},[149,64061,64062,64064,64066,64068,64070,64072],{"class":151,"line":18596},[149,64063,56390],{"class":309},[149,64065,313],{"class":155},[149,64067,2309],{"class":309},[149,64069,326],{"class":325},[149,64071,5811],{"class":309},[149,64073,841],{"class":155},[149,64075,64076],{"class":151,"line":18609},[149,64077,3906],{"class":155},[149,64079,64080],{"class":151,"line":18614},[149,64081,4119],{"emptyLinePlaceholder":1800},[149,64083,64084,64086,64088,64091],{"class":151,"line":18619},[149,64085,63811],{"class":162},[149,64087,63862],{"class":162},[149,64089,64090],{"class":162}," .time",[149,64092,304],{"class":155},[149,64094,64095,64097,64099,64101],{"class":151,"line":18624},[149,64096,59108],{"class":309},[149,64098,313],{"class":155},[149,64100,1429],{"class":309},[149,64102,841],{"class":155},[149,64104,64105,64107,64109,64111,64113],{"class":151,"line":18637},[149,64106,56617],{"class":309},[149,64108,313],{"class":155},[149,64110,2361],{"class":309},[149,64112,326],{"class":325},[149,64114,841],{"class":155},[149,64116,64117],{"class":151,"line":18642},[149,64118,3906],{"class":155},[149,64120,64121,64123,64125],{"class":151,"line":34339},[149,64122,54115],{"class":155},[149,64124,1783],{"class":159},[149,64126,190],{"class":155},[149,64128,64129,64131,64133],{"class":151,"line":34345},[149,64130,665],{"class":155},[149,64132,53038],{"class":159},[149,64134,190],{"class":155},[149,64136,64137],{"class":151,"line":34351},[149,64138,4119],{"emptyLinePlaceholder":1800},[149,64140,64141,64143,64145],{"class":151,"line":34357},[149,64142,156],{"class":155},[149,64144,53499],{"class":159},[149,64146,190],{"class":155},[149,64148,64149,64151,64153,64155,64157,64160],{"class":151,"line":34363},[149,64150,587],{"class":155},[149,64152,301],{"class":159},[149,64154,55184],{"class":162},[149,64156,166],{"class":155},[149,64158,64159],{"class":169},"\"wrapper\"",[149,64161,190],{"class":155},[149,64163,64164,64166,64168,64170,64172,64175,64177,64179],{"class":151,"line":34374},[149,64165,53045],{"class":155},[149,64167,2304],{"class":159},[149,64169,55184],{"class":162},[149,64171,166],{"class":155},[149,64173,64174],{"class":169},"\"avatar\"",[149,64176,185],{"class":155},[149,64178,2304],{"class":159},[149,64180,190],{"class":155},[149,64182,64183,64185,64187,64189,64191,64194,64196,64198,64201,64203,64205,64207,64210,64212,64215,64217,64219],{"class":151,"line":34380},[149,64184,53045],{"class":155},[149,64186,55983],{"class":159},[149,64188,16670],{"class":162},[149,64190,166],{"class":155},[149,64192,64193],{"class":169},"\"tx\"",[149,64195,523],{"class":162},[149,64197,166],{"class":155},[149,64199,64200],{"class":169},"\"发一条友善的评论\"",[149,64202,56006],{"class":162},[149,64204,166],{"class":155},[149,64206,5419],{"class":169},[149,64208,64209],{"class":162}," maxlength",[149,64211,166],{"class":155},[149,64213,64214],{"class":169},"\"200\"",[149,64216,185],{"class":155},[149,64218,55983],{"class":159},[149,64220,190],{"class":155},[149,64222,64223,64225,64227,64230,64232],{"class":151,"line":34400},[149,64224,53045],{"class":155},[149,64226,646],{"class":159},[149,64228,64229],{"class":155},">发布\u003C\u002F",[149,64231,646],{"class":159},[149,64233,190],{"class":155},[149,64235,64236,64238,64240],{"class":151,"line":34406},[149,64237,54115],{"class":155},[149,64239,301],{"class":159},[149,64241,190],{"class":155},[149,64243,64244,64246,64248,64250,64252,64254],{"class":151,"line":34417},[149,64245,587],{"class":155},[149,64247,301],{"class":159},[149,64249,55184],{"class":162},[149,64251,166],{"class":155},[149,64253,64159],{"class":169},[149,64255,190],{"class":155},[149,64257,64258,64260,64262,64264,64266,64269,64272,64274],{"class":151,"line":34423},[149,64259,53045],{"class":155},[149,64261,149],{"class":159},[149,64263,55184],{"class":162},[149,64265,166],{"class":155},[149,64267,64268],{"class":169},"\"total\"",[149,64270,64271],{"class":155},">0\u002F200字\u003C\u002F",[149,64273,149],{"class":159},[149,64275,190],{"class":155},[149,64277,64278,64280,64282],{"class":151,"line":34429},[149,64279,54115],{"class":155},[149,64281,301],{"class":159},[149,64283,190],{"class":155},[149,64285,64286,64288,64290,64292,64294,64297],{"class":151,"line":34435},[149,64287,587],{"class":155},[149,64289,301],{"class":159},[149,64291,55184],{"class":162},[149,64293,166],{"class":155},[149,64295,64296],{"class":169},"\"list\"",[149,64298,190],{"class":155},[149,64300,64301,64303,64305,64307,64309,64312,64315,64317,64320],{"class":151,"line":34441},[149,64302,53045],{"class":155},[149,64304,301],{"class":159},[149,64306,55184],{"class":162},[149,64308,166],{"class":155},[149,64310,64311],{"class":169},"\"item\"",[149,64313,64314],{"class":162}," style",[149,64316,166],{"class":155},[149,64318,64319],{"class":169},"\"display: none;\"",[149,64321,190],{"class":155},[149,64323,64324,64326,64328,64330,64332,64334,64336,64338],{"class":151,"line":34447},[149,64325,56929],{"class":155},[149,64327,2304],{"class":159},[149,64329,55184],{"class":162},[149,64331,166],{"class":155},[149,64333,64174],{"class":169},[149,64335,185],{"class":155},[149,64337,2304],{"class":159},[149,64339,190],{"class":155},[149,64341,64342,64344,64346,64348,64350,64353],{"class":151,"line":34453},[149,64343,56929],{"class":155},[149,64345,301],{"class":159},[149,64347,55184],{"class":162},[149,64349,166],{"class":155},[149,64351,64352],{"class":169},"\"info\"",[149,64354,190],{"class":155},[149,64356,64357,64359,64361,64363,64365,64368,64371,64373],{"class":151,"line":34459},[149,64358,56995],{"class":155},[149,64360,24],{"class":159},[149,64362,55184],{"class":162},[149,64364,166],{"class":155},[149,64366,64367],{"class":169},"\"name\"",[149,64369,64370],{"class":155},">清风徐来\u003C\u002F",[149,64372,24],{"class":159},[149,64374,190],{"class":155},[149,64376,64377,64379,64381,64383,64385,64387,64390,64392],{"class":151,"line":34479},[149,64378,56995],{"class":155},[149,64380,24],{"class":159},[149,64382,55184],{"class":162},[149,64384,166],{"class":155},[149,64386,512],{"class":169},[149,64388,64389],{"class":155},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[149,64391,24],{"class":159},[149,64393,190],{"class":155},[149,64395,64396,64398,64400,64402,64404,64407,64410,64412],{"class":151,"line":34485},[149,64397,56995],{"class":155},[149,64399,24],{"class":159},[149,64401,55184],{"class":162},[149,64403,166],{"class":155},[149,64405,64406],{"class":169},"\"time\"",[149,64408,64409],{"class":155},">2022-10-10 20:29:21\u003C\u002F",[149,64411,24],{"class":159},[149,64413,190],{"class":155},[149,64415,64416,64418,64420],{"class":151,"line":34501},[149,64417,57099],{"class":155},[149,64419,301],{"class":159},[149,64421,190],{"class":155},[149,64423,64424,64426,64428],{"class":151,"line":34507},[149,64425,53476],{"class":155},[149,64427,301],{"class":159},[149,64429,190],{"class":155},[149,64431,64432,64434,64436],{"class":151,"line":34521},[149,64433,54115],{"class":155},[149,64435,301],{"class":159},[149,64437,190],{"class":155},[149,64439,64440,64442,64444],{"class":151,"line":34527},[149,64441,587],{"class":155},[149,64443,53512],{"class":159},[149,64445,190],{"class":155},[149,64447,64448,64450,64453,64455,64457,64459,64461,64464],{"class":151,"line":34542},[149,64449,12935],{"class":325},[149,64451,64452],{"class":309}," tx",[149,64454,15277],{"class":325},[149,64456,56091],{"class":155},[149,64458,56094],{"class":162},[149,64460,319],{"class":155},[149,64462,64463],{"class":169},"'#tx'",[149,64465,1878],{"class":155},[149,64467,64468,64470,64473,64475,64477,64479,64481,64484],{"class":151,"line":34548},[149,64469,12935],{"class":325},[149,64471,64472],{"class":309}," total",[149,64474,15277],{"class":325},[149,64476,56091],{"class":155},[149,64478,56094],{"class":162},[149,64480,319],{"class":155},[149,64482,64483],{"class":169},"'.total'",[149,64485,1878],{"class":155},[149,64487,64488],{"class":151,"line":34557},[149,64489,64490],{"class":295},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[149,64492,64493,64496,64498,64500,64502,64504,64506],{"class":151,"line":34563},[149,64494,64495],{"class":155},"    tx.",[149,64497,59504],{"class":162},[149,64499,319],{"class":155},[149,64501,63016],{"class":169},[149,64503,329],{"class":155},[149,64505,56144],{"class":325},[149,64507,56147],{"class":155},[149,64509,64510,64513,64515],{"class":151,"line":34572},[149,64511,64512],{"class":155},"      total.style.opacity ",[149,64514,166],{"class":325},[149,64516,57391],{"class":309},[149,64518,64519],{"class":151,"line":34578},[149,64520,35167],{"class":155},[149,64522,64523],{"class":151,"line":34584},[149,64524,64525],{"class":295},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[149,64527,64528,64530,64532,64534,64536,64538,64540],{"class":151,"line":34593},[149,64529,64495],{"class":155},[149,64531,59504],{"class":162},[149,64533,319],{"class":155},[149,64535,63077],{"class":169},[149,64537,329],{"class":155},[149,64539,56144],{"class":325},[149,64541,56147],{"class":155},[149,64543,64544,64546,64548],{"class":151,"line":34599},[149,64545,64512],{"class":155},[149,64547,166],{"class":325},[149,64549,49039],{"class":309},[149,64551,64552],{"class":151,"line":34610},[149,64553,35167],{"class":155},[149,64555,64556],{"class":151,"line":34616},[149,64557,64558],{"class":295},"    \u002F\u002F 3. 检测用户输入\n",[149,64560,64561,64563,64565,64567,64570,64572,64574],{"class":151,"line":34635},[149,64562,64495],{"class":155},[149,64564,59504],{"class":162},[149,64566,319],{"class":155},[149,64568,64569],{"class":169},"'input'",[149,64571,329],{"class":155},[149,64573,56144],{"class":325},[149,64575,56147],{"class":155},[149,64577,64578],{"class":151,"line":34641},[149,64579,64580],{"class":295},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[149,64582,64583,64586,64588,64591,64594,64596,64599,64601,64603],{"class":151,"line":34652},[149,64584,64585],{"class":155},"      total.innerHTML ",[149,64587,166],{"class":325},[149,64589,64590],{"class":169}," `${",[149,64592,64593],{"class":155},"tx",[149,64595,2421],{"class":169},[149,64597,64598],{"class":155},"value",[149,64600,2421],{"class":169},[149,64602,53667],{"class":309},[149,64604,64605],{"class":169},"}\u002F200字`\n",[149,64607,64608],{"class":151,"line":34658},[149,64609,35167],{"class":155},[149,64611,64612],{"class":151,"line":34678},[149,64613,4119],{"emptyLinePlaceholder":1800},[149,64615,64616],{"class":151,"line":34694},[149,64617,64618],{"class":295},"    \u002F\u002F const str = 'andy'\n",[149,64620,64621],{"class":151,"line":34700},[149,64622,64623],{"class":295},"    \u002F\u002F console.log(str.length)\n",[149,64625,64626,64628,64630],{"class":151,"line":34714},[149,64627,54115],{"class":155},[149,64629,53512],{"class":159},[149,64631,190],{"class":155},[149,64633,64634,64636,64638],{"class":151,"line":34720},[149,64635,665],{"class":155},[149,64637,53499],{"class":159},[149,64639,190],{"class":155},[149,64641,64642],{"class":151,"line":34726},[149,64643,4119],{"emptyLinePlaceholder":1800},[149,64645,64646,64648,64650],{"class":151,"line":34737},[149,64647,665],{"class":155},[149,64649,52341],{"class":159},[149,64651,190],{"class":155},[120,64653,64655],{"id":64654},"_3254-change事件","3.2.5.4 change事件",[24,64657,64658],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[24,64660,64661],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[24,64663,64664],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[140,64666,64668],{"className":52339,"code":64667,"language":52341,"meta":145,"style":145},"\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",[48,64669,64670,64680,64694,64698,64706,64720,64740,64752,64760,64764,64772,64786,64794,64812,64830,64842,64846,64854,64862,64866],{"__ignoreMap":145},[149,64671,64672,64674,64676,64678],{"class":151,"line":152},[149,64673,53003],{"class":155},[149,64675,53006],{"class":159},[149,64677,53009],{"class":162},[149,64679,190],{"class":155},[149,64681,64682,64684,64686,64688,64690,64692],{"class":151,"line":193},[149,64683,156],{"class":155},[149,64685,52341],{"class":159},[149,64687,53020],{"class":162},[149,64689,166],{"class":155},[149,64691,53025],{"class":169},[149,64693,190],{"class":155},[149,64695,64696],{"class":151,"line":235},[149,64697,4119],{"emptyLinePlaceholder":1800},[149,64699,64700,64702,64704],{"class":151,"line":340},[149,64701,156],{"class":155},[149,64703,53038],{"class":159},[149,64705,190],{"class":155},[149,64707,64708,64710,64712,64714,64716,64718],{"class":151,"line":346},[149,64709,587],{"class":155},[149,64711,53048],{"class":159},[149,64713,53051],{"class":162},[149,64715,166],{"class":155},[149,64717,53056],{"class":169},[149,64719,190],{"class":155},[149,64721,64722,64724,64726,64728,64730,64732,64734,64736,64738],{"class":151,"line":352},[149,64723,587],{"class":155},[149,64725,53048],{"class":159},[149,64727,515],{"class":162},[149,64729,166],{"class":155},[149,64731,53095],{"class":169},[149,64733,53075],{"class":162},[149,64735,166],{"class":155},[149,64737,53102],{"class":169},[149,64739,190],{"class":155},[149,64741,64742,64744,64746,64748,64750],{"class":151,"line":1021},[149,64743,587],{"class":155},[149,64745,53111],{"class":159},[149,64747,53114],{"class":155},[149,64749,53111],{"class":159},[149,64751,190],{"class":155},[149,64753,64754,64756,64758],{"class":151,"line":1035},[149,64755,665],{"class":155},[149,64757,53038],{"class":159},[149,64759,190],{"class":155},[149,64761,64762],{"class":151,"line":1054},[149,64763,4119],{"emptyLinePlaceholder":1800},[149,64765,64766,64768,64770],{"class":151,"line":1072},[149,64767,156],{"class":155},[149,64769,53499],{"class":159},[149,64771,190],{"class":155},[149,64773,64774,64776,64778,64780,64782,64784],{"class":151,"line":1090},[149,64775,587],{"class":155},[149,64777,504],{"class":159},[149,64779,507],{"class":162},[149,64781,166],{"class":155},[149,64783,512],{"class":169},[149,64785,190],{"class":155},[149,64787,64788,64790,64792],{"class":151,"line":1633},[149,64789,587],{"class":155},[149,64791,53512],{"class":159},[149,64793,190],{"class":155},[149,64795,64796,64798,64800,64802,64804,64806,64808,64810],{"class":151,"line":1644},[149,64797,12935],{"class":325},[149,64799,62296],{"class":309},[149,64801,15277],{"class":325},[149,64803,56091],{"class":155},[149,64805,56094],{"class":162},[149,64807,319],{"class":155},[149,64809,64569],{"class":169},[149,64811,1878],{"class":155},[149,64813,64814,64817,64819,64821,64824,64826,64828],{"class":151,"line":3348},[149,64815,64816],{"class":155},"    input.",[149,64818,59504],{"class":162},[149,64820,319],{"class":155},[149,64822,64823],{"class":169},"'change'",[149,64825,329],{"class":155},[149,64827,56144],{"class":325},[149,64829,56147],{"class":155},[149,64831,64832,64834,64836,64838,64840],{"class":151,"line":3362},[149,64833,59935],{"class":155},[149,64835,59938],{"class":162},[149,64837,319],{"class":155},[149,64839,2456],{"class":309},[149,64841,1878],{"class":155},[149,64843,64844],{"class":151,"line":3367},[149,64845,35167],{"class":155},[149,64847,64848,64850,64852],{"class":151,"line":3373},[149,64849,54115],{"class":155},[149,64851,53512],{"class":159},[149,64853,190],{"class":155},[149,64855,64856,64858,64860],{"class":151,"line":3394},[149,64857,665],{"class":155},[149,64859,53499],{"class":159},[149,64861,190],{"class":155},[149,64863,64864],{"class":151,"line":3399},[149,64865,4119],{"emptyLinePlaceholder":1800},[149,64867,64868,64870,64872],{"class":151,"line":3413},[149,64869,665],{"class":155},[149,64871,52341],{"class":159},[149,64873,190],{"class":155},[24,64875,64876],{},"总结：内容发生改变才回去触发",[19,64878,64880],{"id":64879},"_326-事件对象","3.2.6 事件对象",[120,64882,64884],{"id":64883},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[24,64886,64887],{},[83,64888],{"alt":145,"src":64889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[24,64891,64892],{},[83,64893],{"alt":145,"src":64894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[24,64896,64897],{},"点击一次，就输出了事件对象，它是个对象",[24,64899,64900],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[24,64902,64903],{},[83,64904],{"alt":145,"src":64905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[120,64907,64909],{"id":64908},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[24,64911,64912],{},[83,64913],{"alt":145,"src":64914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[24,64916,64917],{},"实现按特殊字符才是实现打印输出效果：",[140,64919,64921],{"className":54765,"code":64920,"language":54767,"meta":145,"style":145},"\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",[48,64922,64923,64931,64936,64950,64958,64963,64968,64973,64978,64983,64988,64993,64998,65003,65007,65011,65019],{"__ignoreMap":145},[149,64924,64925,64927,64929],{"class":151,"line":152},[149,64926,156],{"class":155},[149,64928,53499],{"class":159},[149,64930,190],{"class":155},[149,64932,64933],{"class":151,"line":193},[149,64934,64935],{"class":295},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[149,64937,64938,64940,64942,64944,64946,64948],{"class":151,"line":235},[149,64939,587],{"class":155},[149,64941,504],{"class":159},[149,64943,507],{"class":162},[149,64945,166],{"class":155},[149,64947,512],{"class":169},[149,64949,190],{"class":155},[149,64951,64952,64954,64956],{"class":151,"line":340},[149,64953,587],{"class":155},[149,64955,53512],{"class":159},[149,64957,190],{"class":155},[149,64959,64960],{"class":151,"line":346},[149,64961,64962],{"class":155},"    \u002F\u002F const btn = document.querySelector('button')\n",[149,64964,64965],{"class":151,"line":352},[149,64966,64967],{"class":155},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[149,64969,64970],{"class":151,"line":1021},[149,64971,64972],{"class":155},"    \u002F\u002F   console.log(e);\n",[149,64974,64975],{"class":151,"line":1035},[149,64976,64977],{"class":155},"    \u002F\u002F })\n",[149,64979,64980],{"class":151,"line":1054},[149,64981,64982],{"class":155},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[149,64984,64985],{"class":151,"line":1072},[149,64986,64987],{"class":155},"    const input = document.querySelector('input')\n",[149,64989,64990],{"class":151,"line":1090},[149,64991,64992],{"class":155},"    input.addEventListener('keyup', function (e) {\n",[149,64994,64995],{"class":151,"line":1633},[149,64996,64997],{"class":155},"      if (e.key === 'Enter') {\n",[149,64999,65000],{"class":151,"line":1644},[149,65001,65002],{"class":155},"        console.log('我按下了回车键')\n",[149,65004,65005],{"class":151,"line":3348},[149,65006,54096],{"class":155},[149,65008,65009],{"class":151,"line":3362},[149,65010,35167],{"class":155},[149,65012,65013,65015,65017],{"class":151,"line":3367},[149,65014,54115],{"class":155},[149,65016,53512],{"class":159},[149,65018,190],{"class":155},[149,65020,65021,65023,65025],{"class":151,"line":3373},[149,65022,665],{"class":155},[149,65024,53499],{"class":159},[149,65026,190],{"class":155},[120,65028,65030],{"id":65029},"_3263-trim方法","3.2.6.3 trim方法",[24,65032,65033],{},[83,65034],{"alt":145,"src":65035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[24,65037,65038],{},[83,65039],{"alt":145,"src":65040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[24,65042,65043],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[24,65045,65046],{},"str.trim()",[19,65048,65050],{"id":65049},"_327-环境对象","3.2.7 环境对象",[24,65052,65053],{},[83,65054],{"alt":145,"src":65055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[24,65057,65058],{},[83,65059],{"alt":145,"src":65060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[24,65062,65063],{},[83,65064],{"alt":145,"src":65065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[24,65067,65068],{},"实际函数调用是window.fn()",[24,65070,65071],{},"普通函数里面this指向的是window",[42,65073,65074,65077,65080],{},[45,65075,65076],{},"在普通函数下，this指向的是window",[45,65078,65079],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[45,65081,65082],{},"箭头函数没有this",[24,65084,65085],{},"粗略记法就是：谁调用，this就指向谁",[24,65087,65088],{},[83,65089],{"alt":145,"src":65090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[24,65092,65093],{},[83,65094],{"alt":145,"src":65095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[24,65097,65098],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[24,65100,65101],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[140,65103,65105],{"className":54765,"code":65104,"language":54767,"meta":145,"style":145},"\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",[48,65106,65107,65115,65127,65135,65140,65145,65150,65155,65159,65167],{"__ignoreMap":145},[149,65108,65109,65111,65113],{"class":151,"line":152},[149,65110,156],{"class":155},[149,65112,53499],{"class":159},[149,65114,190],{"class":155},[149,65116,65117,65119,65121,65123,65125],{"class":151,"line":193},[149,65118,587],{"class":155},[149,65120,646],{"class":159},[149,65122,55588],{"class":155},[149,65124,646],{"class":159},[149,65126,190],{"class":155},[149,65128,65129,65131,65133],{"class":151,"line":235},[149,65130,587],{"class":155},[149,65132,53512],{"class":159},[149,65134,190],{"class":155},[149,65136,65137],{"class":151,"line":340},[149,65138,65139],{"class":155},"    const button = document.querySelector('button')\n",[149,65141,65142],{"class":151,"line":346},[149,65143,65144],{"class":155},"    button.addEventListener('click', function () {\n",[149,65146,65147],{"class":151,"line":352},[149,65148,65149],{"class":155},"      \u002F\u002F console.log(this);\n",[149,65151,65152],{"class":151,"line":1021},[149,65153,65154],{"class":155},"      this.style.color = 'pink'\n",[149,65156,65157],{"class":151,"line":1035},[149,65158,35167],{"class":155},[149,65160,65161,65163,65165],{"class":151,"line":1054},[149,65162,54115],{"class":155},[149,65164,53512],{"class":159},[149,65166,190],{"class":155},[149,65168,65169,65171,65173],{"class":151,"line":1072},[149,65170,665],{"class":155},[149,65172,53499],{"class":159},[149,65174,190],{"class":155},[19,65176,65178],{"id":65177},"_328-回调函数","3.2.8 回调函数",[24,65180,65181],{},[83,65182],{"alt":145,"src":65183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[24,65185,65186],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[24,65188,13046],{},[42,65190,65191,65194,65197],{},[45,65192,65193],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[45,65195,65196],{},"回调函数本质还是函数，只不过把它当成参数使用",[45,65198,65199],{},"使用匿名函数做为回调函数比较常见",[19,65201,65203],{"id":65202},"_329-tab栏切换","3.2.9 tab栏切换",[24,65205,65206],{},[83,65207],{"alt":145,"src":65208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[140,65210,65212],{"className":52339,"code":65211,"language":52341,"meta":145,"style":145},"\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",[48,65213,65214,65224,65238,65242,65250,65264,65284,65304,65317,65325,65331,65341,65351,65355,65359,65366,65379,65392,65404,65420,65424,65428,65435,65447,65459,65471,65481,65491,65495,65499,65508,65520,65531,65543,65547,65551,65559,65569,65579,65589,65593,65597,65607,65621,65633,65637,65641,65653,65664,65681,65691,65695,65699,65714,65725,65735,65739,65743,65750,65765,65769,65773,65781,65791,65795,65799,65808,65818,65822,65830,65838,65842,65850,65865,65880,65893,65901,65935,65962,65989,66016,66043,66051,66059,66074,66111,66146,66181,66216,66251,66259,66267,66275,66280,66285,66305,66310,66339,66344,66349,66367,66372,66377,66382,66404,66409,66425,66429,66434,66439,66460,66465,66494,66498,66503,66507,66515,66523,66527],{"__ignoreMap":145},[149,65215,65216,65218,65220,65222],{"class":151,"line":152},[149,65217,53003],{"class":155},[149,65219,53006],{"class":159},[149,65221,53009],{"class":162},[149,65223,190],{"class":155},[149,65225,65226,65228,65230,65232,65234,65236],{"class":151,"line":193},[149,65227,156],{"class":155},[149,65229,52341],{"class":159},[149,65231,53020],{"class":162},[149,65233,166],{"class":155},[149,65235,53025],{"class":169},[149,65237,190],{"class":155},[149,65239,65240],{"class":151,"line":235},[149,65241,4119],{"emptyLinePlaceholder":1800},[149,65243,65244,65246,65248],{"class":151,"line":340},[149,65245,156],{"class":155},[149,65247,53038],{"class":159},[149,65249,190],{"class":155},[149,65251,65252,65254,65256,65258,65260,65262],{"class":151,"line":346},[149,65253,587],{"class":155},[149,65255,53048],{"class":159},[149,65257,53051],{"class":162},[149,65259,166],{"class":155},[149,65261,53056],{"class":169},[149,65263,60818],{"class":155},[149,65265,65266,65268,65270,65272,65274,65276,65278,65280,65282],{"class":151,"line":352},[149,65267,587],{"class":155},[149,65269,53048],{"class":159},[149,65271,53067],{"class":162},[149,65273,166],{"class":155},[149,65275,53072],{"class":169},[149,65277,53075],{"class":162},[149,65279,166],{"class":155},[149,65281,53080],{"class":169},[149,65283,60818],{"class":155},[149,65285,65286,65288,65290,65292,65294,65296,65298,65300,65302],{"class":151,"line":1021},[149,65287,587],{"class":155},[149,65289,53048],{"class":159},[149,65291,515],{"class":162},[149,65293,166],{"class":155},[149,65295,53095],{"class":169},[149,65297,53075],{"class":162},[149,65299,166],{"class":155},[149,65301,53102],{"class":169},[149,65303,60818],{"class":155},[149,65305,65306,65308,65310,65313,65315],{"class":151,"line":1035},[149,65307,587],{"class":155},[149,65309,53111],{"class":159},[149,65311,65312],{"class":155},">tab栏切换\u003C\u002F",[149,65314,53111],{"class":159},[149,65316,190],{"class":155},[149,65318,65319,65321,65323],{"class":151,"line":1054},[149,65320,587],{"class":155},[149,65322,1783],{"class":159},[149,65324,190],{"class":155},[149,65326,65327,65329],{"class":151,"line":1072},[149,65328,8119],{"class":159},[149,65330,304],{"class":155},[149,65332,65333,65335,65337,65339],{"class":151,"line":1090},[149,65334,56401],{"class":309},[149,65336,313],{"class":155},[149,65338,2056],{"class":309},[149,65340,841],{"class":155},[149,65342,65343,65345,65347,65349],{"class":151,"line":1633},[149,65344,56390],{"class":309},[149,65346,313],{"class":155},[149,65348,2056],{"class":309},[149,65350,841],{"class":155},[149,65352,65353],{"class":151,"line":1644},[149,65354,3906],{"class":155},[149,65356,65357],{"class":151,"line":3348},[149,65358,4119],{"emptyLinePlaceholder":1800},[149,65360,65361,65364],{"class":151,"line":3362},[149,65362,65363],{"class":162},"    .tab",[149,65365,304],{"class":155},[149,65367,65368,65370,65372,65375,65377],{"class":151,"line":3367},[149,65369,56466],{"class":309},[149,65371,313],{"class":155},[149,65373,65374],{"class":309},"590",[149,65376,326],{"class":325},[149,65378,841],{"class":155},[149,65380,65381,65383,65385,65388,65390],{"class":151,"line":3373},[149,65382,56480],{"class":309},[149,65384,313],{"class":155},[149,65386,65387],{"class":309},"340",[149,65389,326],{"class":325},[149,65391,841],{"class":155},[149,65393,65394,65396,65398,65400,65402],{"class":151,"line":3394},[149,65395,56401],{"class":309},[149,65397,313],{"class":155},[149,65399,2561],{"class":309},[149,65401,326],{"class":325},[149,65403,841],{"class":155},[149,65405,65406,65408,65410,65412,65414,65416,65418],{"class":151,"line":3399},[149,65407,63666],{"class":309},[149,65409,313],{"class":155},[149,65411,830],{"class":309},[149,65413,326],{"class":325},[149,65415,835],{"class":309},[149,65417,63932],{"class":309},[149,65419,841],{"class":155},[149,65421,65422],{"class":151,"line":3413},[149,65423,3906],{"class":155},[149,65425,65426],{"class":151,"line":3418},[149,65427,4119],{"emptyLinePlaceholder":1800},[149,65429,65430,65433],{"class":151,"line":3447},[149,65431,65432],{"class":162},"    .tab-nav",[149,65434,304],{"class":155},[149,65436,65437,65439,65441,65443,65445],{"class":151,"line":3452},[149,65438,56466],{"class":309},[149,65440,313],{"class":155},[149,65442,322],{"class":309},[149,65444,2191],{"class":325},[149,65446,841],{"class":155},[149,65448,65449,65451,65453,65455,65457],{"class":151,"line":3469},[149,65450,56480],{"class":309},[149,65452,313],{"class":155},[149,65454,2767],{"class":309},[149,65456,326],{"class":325},[149,65458,841],{"class":155},[149,65460,65461,65463,65465,65467,65469],{"class":151,"line":3474},[149,65462,59051],{"class":309},[149,65464,313],{"class":155},[149,65466,2767],{"class":309},[149,65468,326],{"class":325},[149,65470,841],{"class":155},[149,65472,65473,65475,65477,65479],{"class":151,"line":3479},[149,65474,56704],{"class":309},[149,65476,313],{"class":155},[149,65478,53180],{"class":309},[149,65480,841],{"class":155},[149,65482,65483,65485,65487,65489],{"class":151,"line":3484},[149,65484,56715],{"class":309},[149,65486,313],{"class":155},[149,65488,53368],{"class":309},[149,65490,841],{"class":155},[149,65492,65493],{"class":151,"line":3498},[149,65494,3906],{"class":155},[149,65496,65497],{"class":151,"line":3503},[149,65498,4119],{"emptyLinePlaceholder":1800},[149,65500,65501,65503,65506],{"class":151,"line":4296},[149,65502,65432],{"class":162},[149,65504,65505],{"class":159}," h3",[149,65507,304],{"class":155},[149,65509,65510,65512,65514,65516,65518],{"class":151,"line":4310},[149,65511,56617],{"class":309},[149,65513,313],{"class":155},[149,65515,2661],{"class":309},[149,65517,326],{"class":325},[149,65519,841],{"class":155},[149,65521,65522,65524,65526,65529],{"class":151,"line":4318},[149,65523,64022],{"class":309},[149,65525,313],{"class":155},[149,65527,65528],{"class":309},"normal",[149,65530,841],{"class":155},[149,65532,65533,65535,65537,65539,65541],{"class":151,"line":4323},[149,65534,63689],{"class":309},[149,65536,313],{"class":155},[149,65538,2561],{"class":309},[149,65540,326],{"class":325},[149,65542,841],{"class":155},[149,65544,65545],{"class":151,"line":4329},[149,65546,3906],{"class":155},[149,65548,65549],{"class":151,"line":4335},[149,65550,4119],{"emptyLinePlaceholder":1800},[149,65552,65553,65555,65557],{"class":151,"line":4340},[149,65554,65432],{"class":162},[149,65556,62981],{"class":159},[149,65558,304],{"class":155},[149,65560,65561,65563,65565,65567],{"class":151,"line":9663},[149,65562,56427],{"class":309},[149,65564,313],{"class":155},[149,65566,56432],{"class":309},[149,65568,841],{"class":155},[149,65570,65571,65573,65575,65577],{"class":151,"line":9687},[149,65572,56704],{"class":309},[149,65574,313],{"class":155},[149,65576,53180],{"class":309},[149,65578,841],{"class":155},[149,65580,65581,65583,65585,65587],{"class":151,"line":9692},[149,65582,56715],{"class":309},[149,65584,313],{"class":155},[149,65586,53281],{"class":309},[149,65588,841],{"class":155},[149,65590,65591],{"class":151,"line":9698},[149,65592,3906],{"class":155},[149,65594,65595],{"class":151,"line":9725},[149,65596,4119],{"emptyLinePlaceholder":1800},[149,65598,65599,65601,65603,65605],{"class":151,"line":9730},[149,65600,65432],{"class":162},[149,65602,62981],{"class":159},[149,65604,56770],{"class":159},[149,65606,304],{"class":155},[149,65608,65609,65611,65613,65615,65617,65619],{"class":151,"line":9736},[149,65610,56401],{"class":309},[149,65612,313],{"class":155},[149,65614,2056],{"class":309},[149,65616,10665],{"class":309},[149,65618,326],{"class":325},[149,65620,841],{"class":155},[149,65622,65623,65625,65627,65629,65631],{"class":151,"line":9748},[149,65624,56617],{"class":309},[149,65626,313],{"class":155},[149,65628,2412],{"class":309},[149,65630,326],{"class":325},[149,65632,841],{"class":155},[149,65634,65635],{"class":151,"line":9760},[149,65636,3906],{"class":155},[149,65638,65639],{"class":151,"line":9772},[149,65640,4119],{"emptyLinePlaceholder":1800},[149,65642,65643,65645,65647,65649,65651],{"class":151,"line":11430},[149,65644,65432],{"class":162},[149,65646,62981],{"class":159},[149,65648,56770],{"class":159},[149,65650,3123],{"class":159},[149,65652,304],{"class":155},[149,65654,65655,65658,65660,65662],{"class":151,"line":11455},[149,65656,65657],{"class":309},"      text-decoration",[149,65659,313],{"class":155},[149,65661,56432],{"class":309},[149,65663,841],{"class":155},[149,65665,65666,65668,65670,65672,65674,65676,65679],{"class":151,"line":11478},[149,65667,63920],{"class":309},[149,65669,313],{"class":155},[149,65671,1045],{"class":309},[149,65673,326],{"class":325},[149,65675,835],{"class":309},[149,65677,65678],{"class":309}," transparent",[149,65680,841],{"class":155},[149,65682,65683,65685,65687,65689],{"class":151,"line":11502},[149,65684,59108],{"class":309},[149,65686,313],{"class":155},[149,65688,64057],{"class":309},[149,65690,841],{"class":155},[149,65692,65693],{"class":151,"line":11507},[149,65694,3906],{"class":155},[149,65696,65697],{"class":151,"line":11512},[149,65698,4119],{"emptyLinePlaceholder":1800},[149,65700,65701,65703,65705,65707,65709,65712],{"class":151,"line":11517},[149,65702,65432],{"class":162},[149,65704,62981],{"class":159},[149,65706,56770],{"class":159},[149,65708,3123],{"class":159},[149,65710,65711],{"class":162},".active",[149,65713,304],{"class":155},[149,65715,65716,65718,65720,65723],{"class":151,"line":11526},[149,65717,63480],{"class":309},[149,65719,313],{"class":155},[149,65721,65722],{"class":309},"#e1251b",[149,65724,841],{"class":155},[149,65726,65727,65729,65731,65733],{"class":151,"line":11531},[149,65728,59108],{"class":309},[149,65730,313],{"class":155},[149,65732,65722],{"class":309},[149,65734,841],{"class":155},[149,65736,65737],{"class":151,"line":11537},[149,65738,3906],{"class":155},[149,65740,65741],{"class":151,"line":11558},[149,65742,4119],{"emptyLinePlaceholder":1800},[149,65744,65745,65748],{"class":151,"line":11564},[149,65746,65747],{"class":162},"    .tab-content",[149,65749,304],{"class":155},[149,65751,65752,65754,65756,65758,65761,65763],{"class":151,"line":11578},[149,65753,56390],{"class":309},[149,65755,313],{"class":155},[149,65757,2056],{"class":309},[149,65759,65760],{"class":309}," 16",[149,65762,326],{"class":325},[149,65764,841],{"class":155},[149,65766,65767],{"class":151,"line":11584},[149,65768,3906],{"class":155},[149,65770,65771],{"class":151,"line":11611},[149,65772,4119],{"emptyLinePlaceholder":1800},[149,65774,65775,65777,65779],{"class":151,"line":11620},[149,65776,65747],{"class":162},[149,65778,63862],{"class":162},[149,65780,304],{"class":155},[149,65782,65783,65785,65787,65789],{"class":151,"line":11626},[149,65784,56704],{"class":309},[149,65786,313],{"class":155},[149,65788,56432],{"class":309},[149,65790,841],{"class":155},[149,65792,65793],{"class":151,"line":11634},[149,65794,3906],{"class":155},[149,65796,65797],{"class":151,"line":11639},[149,65798,4119],{"emptyLinePlaceholder":1800},[149,65800,65801,65803,65806],{"class":151,"line":18314},[149,65802,65747],{"class":162},[149,65804,65805],{"class":162}," .item.active",[149,65807,304],{"class":155},[149,65809,65810,65812,65814,65816],{"class":151,"line":18320},[149,65811,56704],{"class":309},[149,65813,313],{"class":155},[149,65815,1394],{"class":309},[149,65817,841],{"class":155},[149,65819,65820],{"class":151,"line":18343},[149,65821,3906],{"class":155},[149,65823,65824,65826,65828],{"class":151,"line":18349},[149,65825,54115],{"class":155},[149,65827,1783],{"class":159},[149,65829,190],{"class":155},[149,65831,65832,65834,65836],{"class":151,"line":18372},[149,65833,665],{"class":155},[149,65835,53038],{"class":159},[149,65837,190],{"class":155},[149,65839,65840],{"class":151,"line":18386},[149,65841,4119],{"emptyLinePlaceholder":1800},[149,65843,65844,65846,65848],{"class":151,"line":18406},[149,65845,156],{"class":155},[149,65847,53499],{"class":159},[149,65849,190],{"class":155},[149,65851,65852,65854,65856,65858,65860,65863],{"class":151,"line":18412},[149,65853,587],{"class":155},[149,65855,301],{"class":159},[149,65857,55184],{"class":162},[149,65859,166],{"class":155},[149,65861,65862],{"class":169},"\"tab\"",[149,65864,190],{"class":155},[149,65866,65867,65869,65871,65873,65875,65878],{"class":151,"line":18423},[149,65868,53045],{"class":155},[149,65870,301],{"class":159},[149,65872,55184],{"class":162},[149,65874,166],{"class":155},[149,65876,65877],{"class":169},"\"tab-nav\"",[149,65879,190],{"class":155},[149,65881,65882,65884,65886,65889,65891],{"class":151,"line":18446},[149,65883,56929],{"class":155},[149,65885,19],{"class":159},[149,65887,65888],{"class":155},">每日特价\u003C\u002F",[149,65890,19],{"class":159},[149,65892,190],{"class":155},[149,65894,65895,65897,65899],{"class":151,"line":18468},[149,65896,56929],{"class":155},[149,65898,42],{"class":159},[149,65900,190],{"class":155},[149,65902,65903,65905,65907,65909,65911,65913,65915,65917,65919,65921,65924,65927,65929,65931,65933],{"class":151,"line":18473},[149,65904,56995],{"class":155},[149,65906,45],{"class":159},[149,65908,62741],{"class":155},[149,65910,2102],{"class":159},[149,65912,55184],{"class":162},[149,65914,166],{"class":155},[149,65916,61397],{"class":169},[149,65918,62746],{"class":162},[149,65920,166],{"class":155},[149,65922,65923],{"class":169},"\"javascript:;\"",[149,65925,65926],{"class":155},">精选\u003C\u002F",[149,65928,2102],{"class":159},[149,65930,185],{"class":155},[149,65932,45],{"class":159},[149,65934,190],{"class":155},[149,65936,65937,65939,65941,65943,65945,65947,65949,65951,65954,65956,65958,65960],{"class":151,"line":18479},[149,65938,56995],{"class":155},[149,65940,45],{"class":159},[149,65942,62741],{"class":155},[149,65944,2102],{"class":159},[149,65946,62746],{"class":162},[149,65948,166],{"class":155},[149,65950,65923],{"class":169},[149,65952,65953],{"class":155},">美食\u003C\u002F",[149,65955,2102],{"class":159},[149,65957,185],{"class":155},[149,65959,45],{"class":159},[149,65961,190],{"class":155},[149,65963,65964,65966,65968,65970,65972,65974,65976,65978,65981,65983,65985,65987],{"class":151,"line":18493},[149,65965,56995],{"class":155},[149,65967,45],{"class":159},[149,65969,62741],{"class":155},[149,65971,2102],{"class":159},[149,65973,62746],{"class":162},[149,65975,166],{"class":155},[149,65977,65923],{"class":169},[149,65979,65980],{"class":155},">百货\u003C\u002F",[149,65982,2102],{"class":159},[149,65984,185],{"class":155},[149,65986,45],{"class":159},[149,65988,190],{"class":155},[149,65990,65991,65993,65995,65997,65999,66001,66003,66005,66008,66010,66012,66014],{"class":151,"line":18506},[149,65992,56995],{"class":155},[149,65994,45],{"class":159},[149,65996,62741],{"class":155},[149,65998,2102],{"class":159},[149,66000,62746],{"class":162},[149,66002,166],{"class":155},[149,66004,65923],{"class":169},[149,66006,66007],{"class":155},">个护\u003C\u002F",[149,66009,2102],{"class":159},[149,66011,185],{"class":155},[149,66013,45],{"class":159},[149,66015,190],{"class":155},[149,66017,66018,66020,66022,66024,66026,66028,66030,66032,66035,66037,66039,66041],{"class":151,"line":18511},[149,66019,56995],{"class":155},[149,66021,45],{"class":159},[149,66023,62741],{"class":155},[149,66025,2102],{"class":159},[149,66027,62746],{"class":162},[149,66029,166],{"class":155},[149,66031,65923],{"class":169},[149,66033,66034],{"class":155},">预告\u003C\u002F",[149,66036,2102],{"class":159},[149,66038,185],{"class":155},[149,66040,45],{"class":159},[149,66042,190],{"class":155},[149,66044,66045,66047,66049],{"class":151,"line":18525},[149,66046,57099],{"class":155},[149,66048,42],{"class":159},[149,66050,190],{"class":155},[149,66052,66053,66055,66057],{"class":151,"line":18530},[149,66054,53476],{"class":155},[149,66056,301],{"class":159},[149,66058,190],{"class":155},[149,66060,66061,66063,66065,66067,66069,66072],{"class":151,"line":18536},[149,66062,53045],{"class":155},[149,66064,301],{"class":159},[149,66066,55184],{"class":162},[149,66068,166],{"class":155},[149,66070,66071],{"class":169},"\"tab-content\"",[149,66073,190],{"class":155},[149,66075,66076,66078,66080,66082,66084,66087,66089,66091,66093,66095,66098,66100,66102,66104,66107,66109],{"class":151,"line":18541},[149,66077,56929],{"class":155},[149,66079,301],{"class":159},[149,66081,55184],{"class":162},[149,66083,166],{"class":155},[149,66085,66086],{"class":169},"\"item active\"",[149,66088,62741],{"class":155},[149,66090,83],{"class":159},[149,66092,163],{"class":162},[149,66094,166],{"class":155},[149,66096,66097],{"class":169},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[149,66099,265],{"class":162},[149,66101,166],{"class":155},[149,66103,1382],{"class":169},[149,66105,66106],{"class":155}," \u002F>\u003C\u002F",[149,66108,301],{"class":159},[149,66110,190],{"class":155},[149,66112,66113,66115,66117,66119,66121,66123,66125,66127,66129,66131,66134,66136,66138,66140,66142,66144],{"class":151,"line":18555},[149,66114,56929],{"class":155},[149,66116,301],{"class":159},[149,66118,55184],{"class":162},[149,66120,166],{"class":155},[149,66122,64311],{"class":169},[149,66124,62741],{"class":155},[149,66126,83],{"class":159},[149,66128,163],{"class":162},[149,66130,166],{"class":155},[149,66132,66133],{"class":169},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[149,66135,265],{"class":162},[149,66137,166],{"class":155},[149,66139,1382],{"class":169},[149,66141,66106],{"class":155},[149,66143,301],{"class":159},[149,66145,190],{"class":155},[149,66147,66148,66150,66152,66154,66156,66158,66160,66162,66164,66166,66169,66171,66173,66175,66177,66179],{"class":151,"line":18560},[149,66149,56929],{"class":155},[149,66151,301],{"class":159},[149,66153,55184],{"class":162},[149,66155,166],{"class":155},[149,66157,64311],{"class":169},[149,66159,62741],{"class":155},[149,66161,83],{"class":159},[149,66163,163],{"class":162},[149,66165,166],{"class":155},[149,66167,66168],{"class":169},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[149,66170,265],{"class":162},[149,66172,166],{"class":155},[149,66174,1382],{"class":169},[149,66176,66106],{"class":155},[149,66178,301],{"class":159},[149,66180,190],{"class":155},[149,66182,66183,66185,66187,66189,66191,66193,66195,66197,66199,66201,66204,66206,66208,66210,66212,66214],{"class":151,"line":18565},[149,66184,56929],{"class":155},[149,66186,301],{"class":159},[149,66188,55184],{"class":162},[149,66190,166],{"class":155},[149,66192,64311],{"class":169},[149,66194,62741],{"class":155},[149,66196,83],{"class":159},[149,66198,163],{"class":162},[149,66200,166],{"class":155},[149,66202,66203],{"class":169},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[149,66205,265],{"class":162},[149,66207,166],{"class":155},[149,66209,1382],{"class":169},[149,66211,66106],{"class":155},[149,66213,301],{"class":159},[149,66215,190],{"class":155},[149,66217,66218,66220,66222,66224,66226,66228,66230,66232,66234,66236,66239,66241,66243,66245,66247,66249],{"class":151,"line":18579},[149,66219,56929],{"class":155},[149,66221,301],{"class":159},[149,66223,55184],{"class":162},[149,66225,166],{"class":155},[149,66227,64311],{"class":169},[149,66229,62741],{"class":155},[149,66231,83],{"class":159},[149,66233,163],{"class":162},[149,66235,166],{"class":155},[149,66237,66238],{"class":169},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[149,66240,265],{"class":162},[149,66242,166],{"class":155},[149,66244,1382],{"class":169},[149,66246,66106],{"class":155},[149,66248,301],{"class":159},[149,66250,190],{"class":155},[149,66252,66253,66255,66257],{"class":151,"line":18591},[149,66254,53476],{"class":155},[149,66256,301],{"class":159},[149,66258,190],{"class":155},[149,66260,66261,66263,66265],{"class":151,"line":18596},[149,66262,54115],{"class":155},[149,66264,301],{"class":159},[149,66266,190],{"class":155},[149,66268,66269,66271,66273],{"class":151,"line":18609},[149,66270,587],{"class":155},[149,66272,53512],{"class":159},[149,66274,190],{"class":155},[149,66276,66277],{"class":151,"line":18614},[149,66278,66279],{"class":295},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[149,66281,66282],{"class":151,"line":18619},[149,66283,66284],{"class":295},"    \u002F\u002F 1.1 获取 a 元素 \n",[149,66286,66287,66289,66292,66294,66296,66298,66300,66303],{"class":151,"line":18624},[149,66288,12935],{"class":325},[149,66290,66291],{"class":309}," as",[149,66293,15277],{"class":325},[149,66295,56091],{"class":155},[149,66297,57373],{"class":162},[149,66299,319],{"class":155},[149,66301,66302],{"class":169},"'.tab-nav a'",[149,66304,1878],{"class":155},[149,66306,66307],{"class":151,"line":18637},[149,66308,66309],{"class":295},"    \u002F\u002F console.log(as) \n",[149,66311,66312,66314,66316,66318,66320,66322,66324,66326,66328,66331,66333,66335,66337],{"class":151,"line":18642},[149,66313,4919],{"class":325},[149,66315,3378],{"class":155},[149,66317,53546],{"class":325},[149,66319,11152],{"class":155},[149,66321,166],{"class":325},[149,66323,5811],{"class":309},[149,66325,11159],{"class":155},[149,66327,156],{"class":325},[149,66329,66330],{"class":155}," as.",[149,66332,53667],{"class":309},[149,66334,4932],{"class":155},[149,66336,4011],{"class":325},[149,66338,14155],{"class":155},[149,66340,66341],{"class":151,"line":34339},[149,66342,66343],{"class":295},"      \u002F\u002F console.log(as[i])\n",[149,66345,66346],{"class":151,"line":34345},[149,66347,66348],{"class":295},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[149,66350,66351,66354,66356,66358,66361,66363,66365],{"class":151,"line":34351},[149,66352,66353],{"class":155},"      as[i].",[149,66355,59504],{"class":162},[149,66357,319],{"class":155},[149,66359,66360],{"class":169},"'mouseenter'",[149,66362,329],{"class":155},[149,66364,56144],{"class":325},[149,66366,56147],{"class":155},[149,66368,66369],{"class":151,"line":34357},[149,66370,66371],{"class":295},"        \u002F\u002F console.log('鼠标经过')\n",[149,66373,66374],{"class":151,"line":34363},[149,66375,66376],{"class":295},"        \u002F\u002F 排他思想  \n",[149,66378,66379],{"class":151,"line":34374},[149,66380,66381],{"class":295},"        \u002F\u002F 干掉别人 移除类active\n",[149,66383,66384,66386,66388,66390,66393,66395,66397,66399,66402],{"class":151,"line":34380},[149,66385,53624],{"class":155},[149,66387,56094],{"class":162},[149,66389,319],{"class":155},[149,66391,66392],{"class":169},"'.tab-nav .active'",[149,66394,58695],{"class":155},[149,66396,58698],{"class":162},[149,66398,319],{"class":155},[149,66400,66401],{"class":169},"'active'",[149,66403,1878],{"class":155},[149,66405,66406],{"class":151,"line":34400},[149,66407,66408],{"class":295},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[149,66410,66411,66414,66417,66419,66421,66423],{"class":151,"line":34406},[149,66412,66413],{"class":309},"        this",[149,66415,66416],{"class":155},".classList.",[149,66418,7050],{"class":162},[149,66420,319],{"class":155},[149,66422,66401],{"class":169},[149,66424,1878],{"class":155},[149,66426,66427],{"class":151,"line":34417},[149,66428,4119],{"emptyLinePlaceholder":1800},[149,66430,66431],{"class":151,"line":34423},[149,66432,66433],{"class":295},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[149,66435,66436],{"class":151,"line":34429},[149,66437,66438],{"class":295},"        \u002F\u002F 干掉别人\n",[149,66440,66441,66443,66445,66447,66450,66452,66454,66456,66458],{"class":151,"line":34435},[149,66442,53624],{"class":155},[149,66444,56094],{"class":162},[149,66446,319],{"class":155},[149,66448,66449],{"class":169},"'.tab-content .active'",[149,66451,58695],{"class":155},[149,66453,58698],{"class":162},[149,66455,319],{"class":155},[149,66457,66401],{"class":169},[149,66459,1878],{"class":155},[149,66461,66462],{"class":151,"line":34441},[149,66463,66464],{"class":295},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[149,66466,66467,66469,66471,66473,66476,66478,66480,66482,66484,66486,66488,66490,66492],{"class":151,"line":34447},[149,66468,53624],{"class":155},[149,66470,56094],{"class":162},[149,66472,319],{"class":155},[149,66474,66475],{"class":169},"`.tab-content .item:nth-child(${",[149,66477,2304],{"class":155},[149,66479,47272],{"class":325},[149,66481,26827],{"class":309},[149,66483,58724],{"class":169},[149,66485,58695],{"class":155},[149,66487,7050],{"class":162},[149,66489,319],{"class":155},[149,66491,66401],{"class":169},[149,66493,1878],{"class":155},[149,66495,66496],{"class":151,"line":34453},[149,66497,4119],{"emptyLinePlaceholder":1800},[149,66499,66500],{"class":151,"line":34459},[149,66501,66502],{"class":155},"      })\n",[149,66504,66505],{"class":151,"line":34479},[149,66506,3906],{"class":155},[149,66508,66509,66511,66513],{"class":151,"line":34485},[149,66510,54115],{"class":155},[149,66512,53512],{"class":159},[149,66514,190],{"class":155},[149,66516,66517,66519,66521],{"class":151,"line":34501},[149,66518,665],{"class":155},[149,66520,53499],{"class":159},[149,66522,190],{"class":155},[149,66524,66525],{"class":151,"line":34507},[149,66526,4119],{"emptyLinePlaceholder":1800},[149,66528,66529,66531,66533],{"class":151,"line":34521},[149,66530,665],{"class":155},[149,66532,52341],{"class":159},[149,66534,190],{"class":155},[24,66536,66537],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[24,66539,66540],{},"在监听事件中，this指向的就是他的调用者",[24,66542,66543],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[24,66545,55418],{},[24,66547,66548],{},"(function () {",[24,66550,66551],{},"const list = document.querySelector('.xtx-elevator-list')",[24,66553,66554],{},"list.addEventListener('click', function (e) {",[24,66556,66557],{},"if (e.target.tagName === 'A') {",[24,66559,66560],{},"\u002F\u002F 排他思想",[24,66562,66563],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[24,66565,66566],{},"const old = document.querySelector('.xtx-elevator-list .active')",[24,66568,66569],{},"\u002F\u002F console.log(old);",[24,66571,66572],{},"\u002F\u002F 判断",[24,66574,66575],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[24,66577,66578],{},"if (old) old.classList.remove('active')",[24,66580,66581],{},"e.target.classList.add('active')",[24,66583,2805],{},[24,66585,54162],{},[24,66587,66588],{},"})();",[19,66590,66592],{"id":66591},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[140,66594,66596],{"className":52339,"code":66595,"language":52341,"meta":145,"style":145},"\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",[48,66597,66598,66608,66612,66620,66624,66638,66652,66664,66672,66678,66688,66698,66702,66706,66713,66725,66736,66753,66766,66780,66790,66794,66798,66805,66816,66834,66844,66856,66860,66864,66871,66888,66899,66911,66915,66919,66926,66938,66942,66950,66958,66962,66970,66978,66986,67001,67045,67053,67066,67079,67092,67100,67108,67116,67144,67152,67164,67177,67190,67198,67206,67214,67240,67248,67261,67273,67286,67294,67302,67310,67336,67344,67357,67369,67382,67390,67398,67406,67411,67431,67436,67456,67461,67478,67483,67491,67496,67525,67538,67542,67546,67551,67555,67583,67588,67605,67610,67615,67620,67625,67651,67655,67659,67667,67675,67679],{"__ignoreMap":145},[149,66599,66600,66602,66604,66606],{"class":151,"line":152},[149,66601,53003],{"class":155},[149,66603,53006],{"class":159},[149,66605,53009],{"class":162},[149,66607,190],{"class":155},[149,66609,66610],{"class":151,"line":193},[149,66611,4119],{"emptyLinePlaceholder":1800},[149,66613,66614,66616,66618],{"class":151,"line":235},[149,66615,156],{"class":155},[149,66617,52341],{"class":159},[149,66619,190],{"class":155},[149,66621,66622],{"class":151,"line":340},[149,66623,4119],{"emptyLinePlaceholder":1800},[149,66625,66626,66628,66630,66632,66634,66636],{"class":151,"line":346},[149,66627,156],{"class":155},[149,66629,53038],{"class":159},[149,66631,53020],{"class":162},[149,66633,166],{"class":155},[149,66635,53025],{"class":169},[149,66637,190],{"class":155},[149,66639,66640,66642,66644,66646,66648,66650],{"class":151,"line":352},[149,66641,587],{"class":155},[149,66643,53048],{"class":159},[149,66645,53051],{"class":162},[149,66647,166],{"class":155},[149,66649,53056],{"class":169},[149,66651,190],{"class":155},[149,66653,66654,66656,66658,66660,66662],{"class":151,"line":1021},[149,66655,587],{"class":155},[149,66657,53111],{"class":159},[149,66659,185],{"class":155},[149,66661,53111],{"class":159},[149,66663,190],{"class":155},[149,66665,66666,66668,66670],{"class":151,"line":1035},[149,66667,587],{"class":155},[149,66669,1783],{"class":159},[149,66671,190],{"class":155},[149,66673,66674,66676],{"class":151,"line":1054},[149,66675,8119],{"class":159},[149,66677,304],{"class":155},[149,66679,66680,66682,66684,66686],{"class":151,"line":1072},[149,66681,56401],{"class":309},[149,66683,313],{"class":155},[149,66685,2056],{"class":309},[149,66687,841],{"class":155},[149,66689,66690,66692,66694,66696],{"class":151,"line":1090},[149,66691,56390],{"class":309},[149,66693,313],{"class":155},[149,66695,2056],{"class":309},[149,66697,841],{"class":155},[149,66699,66700],{"class":151,"line":1633},[149,66701,3906],{"class":155},[149,66703,66704],{"class":151,"line":1644},[149,66705,4119],{"emptyLinePlaceholder":1800},[149,66707,66708,66711],{"class":151,"line":3348},[149,66709,66710],{"class":159},"    table",[149,66712,304],{"class":155},[149,66714,66715,66718,66720,66723],{"class":151,"line":3362},[149,66716,66717],{"class":309},"      border-collapse",[149,66719,313],{"class":155},[149,66721,66722],{"class":309},"collapse",[149,66724,841],{"class":155},[149,66726,66727,66730,66732,66734],{"class":151,"line":3367},[149,66728,66729],{"class":309},"      border-spacing",[149,66731,313],{"class":155},[149,66733,2056],{"class":309},[149,66735,841],{"class":155},[149,66737,66738,66740,66742,66744,66746,66748,66751],{"class":151,"line":3373},[149,66739,63666],{"class":309},[149,66741,313],{"class":155},[149,66743,830],{"class":309},[149,66745,326],{"class":325},[149,66747,835],{"class":309},[149,66749,66750],{"class":309}," #c0c0c0",[149,66752,841],{"class":155},[149,66754,66755,66757,66759,66762,66764],{"class":151,"line":3394},[149,66756,56466],{"class":309},[149,66758,313],{"class":155},[149,66760,66761],{"class":309},"500",[149,66763,326],{"class":325},[149,66765,841],{"class":155},[149,66767,66768,66770,66772,66774,66776,66778],{"class":151,"line":3399},[149,66769,56401],{"class":309},[149,66771,313],{"class":155},[149,66773,322],{"class":309},[149,66775,326],{"class":325},[149,66777,53257],{"class":309},[149,66779,841],{"class":155},[149,66781,66782,66784,66786,66788],{"class":151,"line":3413},[149,66783,58978],{"class":309},[149,66785,313],{"class":155},[149,66787,53293],{"class":309},[149,66789,841],{"class":155},[149,66791,66792],{"class":151,"line":3418},[149,66793,3906],{"class":155},[149,66795,66796],{"class":151,"line":3447},[149,66797,4119],{"emptyLinePlaceholder":1800},[149,66799,66800,66803],{"class":151,"line":3452},[149,66801,66802],{"class":159},"    th",[149,66804,304],{"class":155},[149,66806,66807,66809,66811,66814],{"class":151,"line":3469},[149,66808,56579],{"class":309},[149,66810,313],{"class":155},[149,66812,66813],{"class":309},"#09c",[149,66815,841],{"class":155},[149,66817,66818,66821,66823,66825,66827,66829,66832],{"class":151,"line":3474},[149,66819,66820],{"class":309},"      font",[149,66822,313],{"class":155},[149,66824,64027],{"class":309},[149,66826,65760],{"class":309},[149,66828,326],{"class":325},[149,66830,66831],{"class":169}," \"微软雅黑\"",[149,66833,841],{"class":155},[149,66835,66836,66838,66840,66842],{"class":151,"line":3479},[149,66837,59108],{"class":309},[149,66839,313],{"class":155},[149,66841,62533],{"class":309},[149,66843,841],{"class":155},[149,66845,66846,66848,66850,66852,66854],{"class":151,"line":3484},[149,66847,56480],{"class":309},[149,66849,313],{"class":155},[149,66851,2661],{"class":309},[149,66853,326],{"class":325},[149,66855,841],{"class":155},[149,66857,66858],{"class":151,"line":3498},[149,66859,3906],{"class":155},[149,66861,66862],{"class":151,"line":3503},[149,66863,4119],{"emptyLinePlaceholder":1800},[149,66865,66866,66869],{"class":151,"line":4296},[149,66867,66868],{"class":159},"    td",[149,66870,304],{"class":155},[149,66872,66873,66875,66877,66879,66881,66883,66886],{"class":151,"line":4310},[149,66874,63666],{"class":309},[149,66876,313],{"class":155},[149,66878,830],{"class":309},[149,66880,326],{"class":325},[149,66882,835],{"class":309},[149,66884,66885],{"class":309}," #d0d0d0",[149,66887,841],{"class":155},[149,66889,66890,66892,66894,66897],{"class":151,"line":4318},[149,66891,59108],{"class":309},[149,66893,313],{"class":155},[149,66895,66896],{"class":309},"#404060",[149,66898,841],{"class":155},[149,66900,66901,66903,66905,66907,66909],{"class":151,"line":4323},[149,66902,56390],{"class":309},[149,66904,313],{"class":155},[149,66906,2309],{"class":309},[149,66908,326],{"class":325},[149,66910,841],{"class":155},[149,66912,66913],{"class":151,"line":4329},[149,66914,3906],{"class":155},[149,66916,66917],{"class":151,"line":4335},[149,66918,4119],{"emptyLinePlaceholder":1800},[149,66920,66921,66924],{"class":151,"line":4340},[149,66922,66923],{"class":162},"    .allCheck",[149,66925,304],{"class":155},[149,66927,66928,66930,66932,66934,66936],{"class":151,"line":9663},[149,66929,56466],{"class":309},[149,66931,313],{"class":155},[149,66933,2475],{"class":309},[149,66935,326],{"class":325},[149,66937,841],{"class":155},[149,66939,66940],{"class":151,"line":9687},[149,66941,3906],{"class":155},[149,66943,66944,66946,66948],{"class":151,"line":9692},[149,66945,54115],{"class":155},[149,66947,1783],{"class":159},[149,66949,190],{"class":155},[149,66951,66952,66954,66956],{"class":151,"line":9698},[149,66953,665],{"class":155},[149,66955,53038],{"class":159},[149,66957,190],{"class":155},[149,66959,66960],{"class":151,"line":9725},[149,66961,4119],{"emptyLinePlaceholder":1800},[149,66963,66964,66966,66968],{"class":151,"line":9730},[149,66965,156],{"class":155},[149,66967,53499],{"class":159},[149,66969,190],{"class":155},[149,66971,66972,66974,66976],{"class":151,"line":9736},[149,66973,587],{"class":155},[149,66975,2003],{"class":159},[149,66977,190],{"class":155},[149,66979,66980,66982,66984],{"class":151,"line":9748},[149,66981,53045],{"class":155},[149,66983,2009],{"class":159},[149,66985,190],{"class":155},[149,66987,66988,66990,66992,66994,66996,66999],{"class":151,"line":9760},[149,66989,56929],{"class":155},[149,66991,2012],{"class":159},[149,66993,55184],{"class":162},[149,66995,166],{"class":155},[149,66997,66998],{"class":169},"\"allCheck\"",[149,67000,190],{"class":155},[149,67002,67003,67005,67007,67009,67011,67013,67015,67017,67019,67021,67023,67026,67029,67031,67033,67035,67038,67041,67043],{"class":151,"line":9772},[149,67004,56995],{"class":155},[149,67006,504],{"class":159},[149,67008,507],{"class":162},[149,67010,166],{"class":155},[149,67012,55525],{"class":169},[149,67014,515],{"class":162},[149,67016,166],{"class":155},[149,67018,1382],{"class":169},[149,67020,16670],{"class":162},[149,67022,166],{"class":155},[149,67024,67025],{"class":169},"\"checkAll\"",[149,67027,67028],{"class":155},"> \u003C",[149,67030,149],{"class":159},[149,67032,55184],{"class":162},[149,67034,166],{"class":155},[149,67036,67037],{"class":169},"\"all\"",[149,67039,67040],{"class":155},">全选\u003C\u002F",[149,67042,149],{"class":159},[149,67044,190],{"class":155},[149,67046,67047,67049,67051],{"class":151,"line":11430},[149,67048,57099],{"class":155},[149,67050,2012],{"class":159},[149,67052,190],{"class":155},[149,67054,67055,67057,67059,67062,67064],{"class":151,"line":11455},[149,67056,56929],{"class":155},[149,67058,2012],{"class":159},[149,67060,67061],{"class":155},">商品\u003C\u002F",[149,67063,2012],{"class":159},[149,67065,190],{"class":155},[149,67067,67068,67070,67072,67075,67077],{"class":151,"line":11478},[149,67069,56929],{"class":155},[149,67071,2012],{"class":159},[149,67073,67074],{"class":155},">商家\u003C\u002F",[149,67076,2012],{"class":159},[149,67078,190],{"class":155},[149,67080,67081,67083,67085,67088,67090],{"class":151,"line":11502},[149,67082,56929],{"class":155},[149,67084,2012],{"class":159},[149,67086,67087],{"class":155},">价格\u003C\u002F",[149,67089,2012],{"class":159},[149,67091,190],{"class":155},[149,67093,67094,67096,67098],{"class":151,"line":11507},[149,67095,53476],{"class":155},[149,67097,2009],{"class":159},[149,67099,190],{"class":155},[149,67101,67102,67104,67106],{"class":151,"line":11512},[149,67103,53045],{"class":155},[149,67105,2009],{"class":159},[149,67107,190],{"class":155},[149,67109,67110,67112,67114],{"class":151,"line":11517},[149,67111,56929],{"class":155},[149,67113,2054],{"class":159},[149,67115,190],{"class":155},[149,67117,67118,67120,67122,67124,67126,67128,67130,67132,67135,67137,67139,67142],{"class":151,"line":11526},[149,67119,56995],{"class":155},[149,67121,504],{"class":159},[149,67123,507],{"class":162},[149,67125,166],{"class":155},[149,67127,55525],{"class":169},[149,67129,515],{"class":162},[149,67131,166],{"class":155},[149,67133,67134],{"class":169},"\"check\"",[149,67136,55184],{"class":162},[149,67138,166],{"class":155},[149,67140,67141],{"class":169},"\"ck\"",[149,67143,190],{"class":155},[149,67145,67146,67148,67150],{"class":151,"line":11531},[149,67147,57099],{"class":155},[149,67149,2054],{"class":159},[149,67151,190],{"class":155},[149,67153,67154,67156,67158,67160,67162],{"class":151,"line":11537},[149,67155,56929],{"class":155},[149,67157,2054],{"class":159},[149,67159,62862],{"class":155},[149,67161,2054],{"class":159},[149,67163,190],{"class":155},[149,67165,67166,67168,67170,67173,67175],{"class":151,"line":11558},[149,67167,56929],{"class":155},[149,67169,2054],{"class":159},[149,67171,67172],{"class":155},">小米\u003C\u002F",[149,67174,2054],{"class":159},[149,67176,190],{"class":155},[149,67178,67179,67181,67183,67186,67188],{"class":151,"line":11564},[149,67180,56929],{"class":155},[149,67182,2054],{"class":159},[149,67184,67185],{"class":155},">￥1999\u003C\u002F",[149,67187,2054],{"class":159},[149,67189,190],{"class":155},[149,67191,67192,67194,67196],{"class":151,"line":11578},[149,67193,53476],{"class":155},[149,67195,2009],{"class":159},[149,67197,190],{"class":155},[149,67199,67200,67202,67204],{"class":151,"line":11584},[149,67201,53045],{"class":155},[149,67203,2009],{"class":159},[149,67205,190],{"class":155},[149,67207,67208,67210,67212],{"class":151,"line":11611},[149,67209,56929],{"class":155},[149,67211,2054],{"class":159},[149,67213,190],{"class":155},[149,67215,67216,67218,67220,67222,67224,67226,67228,67230,67232,67234,67236,67238],{"class":151,"line":11620},[149,67217,56995],{"class":155},[149,67219,504],{"class":159},[149,67221,507],{"class":162},[149,67223,166],{"class":155},[149,67225,55525],{"class":169},[149,67227,515],{"class":162},[149,67229,166],{"class":155},[149,67231,67134],{"class":169},[149,67233,55184],{"class":162},[149,67235,166],{"class":155},[149,67237,67141],{"class":169},[149,67239,190],{"class":155},[149,67241,67242,67244,67246],{"class":151,"line":11626},[149,67243,57099],{"class":155},[149,67245,2054],{"class":159},[149,67247,190],{"class":155},[149,67249,67250,67252,67254,67257,67259],{"class":151,"line":11634},[149,67251,56929],{"class":155},[149,67253,2054],{"class":159},[149,67255,67256],{"class":155},">小米净水器\u003C\u002F",[149,67258,2054],{"class":159},[149,67260,190],{"class":155},[149,67262,67263,67265,67267,67269,67271],{"class":151,"line":11639},[149,67264,56929],{"class":155},[149,67266,2054],{"class":159},[149,67268,67172],{"class":155},[149,67270,2054],{"class":159},[149,67272,190],{"class":155},[149,67274,67275,67277,67279,67282,67284],{"class":151,"line":18314},[149,67276,56929],{"class":155},[149,67278,2054],{"class":159},[149,67280,67281],{"class":155},">￥4999\u003C\u002F",[149,67283,2054],{"class":159},[149,67285,190],{"class":155},[149,67287,67288,67290,67292],{"class":151,"line":18320},[149,67289,53476],{"class":155},[149,67291,2009],{"class":159},[149,67293,190],{"class":155},[149,67295,67296,67298,67300],{"class":151,"line":18343},[149,67297,53045],{"class":155},[149,67299,2009],{"class":159},[149,67301,190],{"class":155},[149,67303,67304,67306,67308],{"class":151,"line":18349},[149,67305,56929],{"class":155},[149,67307,2054],{"class":159},[149,67309,190],{"class":155},[149,67311,67312,67314,67316,67318,67320,67322,67324,67326,67328,67330,67332,67334],{"class":151,"line":18372},[149,67313,56995],{"class":155},[149,67315,504],{"class":159},[149,67317,507],{"class":162},[149,67319,166],{"class":155},[149,67321,55525],{"class":169},[149,67323,515],{"class":162},[149,67325,166],{"class":155},[149,67327,67134],{"class":169},[149,67329,55184],{"class":162},[149,67331,166],{"class":155},[149,67333,67141],{"class":169},[149,67335,190],{"class":155},[149,67337,67338,67340,67342],{"class":151,"line":18386},[149,67339,57099],{"class":155},[149,67341,2054],{"class":159},[149,67343,190],{"class":155},[149,67345,67346,67348,67350,67353,67355],{"class":151,"line":18406},[149,67347,56929],{"class":155},[149,67349,2054],{"class":159},[149,67351,67352],{"class":155},">小米电视\u003C\u002F",[149,67354,2054],{"class":159},[149,67356,190],{"class":155},[149,67358,67359,67361,67363,67365,67367],{"class":151,"line":18412},[149,67360,56929],{"class":155},[149,67362,2054],{"class":159},[149,67364,67172],{"class":155},[149,67366,2054],{"class":159},[149,67368,190],{"class":155},[149,67370,67371,67373,67375,67378,67380],{"class":151,"line":18423},[149,67372,56929],{"class":155},[149,67374,2054],{"class":159},[149,67376,67377],{"class":155},">￥5999\u003C\u002F",[149,67379,2054],{"class":159},[149,67381,190],{"class":155},[149,67383,67384,67386,67388],{"class":151,"line":18446},[149,67385,53476],{"class":155},[149,67387,2009],{"class":159},[149,67389,190],{"class":155},[149,67391,67392,67394,67396],{"class":151,"line":18468},[149,67393,54115],{"class":155},[149,67395,2003],{"class":159},[149,67397,190],{"class":155},[149,67399,67400,67402,67404],{"class":151,"line":18473},[149,67401,587],{"class":155},[149,67403,53512],{"class":159},[149,67405,190],{"class":155},[149,67407,67408],{"class":151,"line":18479},[149,67409,67410],{"class":295},"    \u002F\u002F 1. 获取大复选框\n",[149,67412,67413,67415,67418,67420,67422,67424,67426,67429],{"class":151,"line":18493},[149,67414,12935],{"class":325},[149,67416,67417],{"class":309}," checkAll",[149,67419,15277],{"class":325},[149,67421,56091],{"class":155},[149,67423,56094],{"class":162},[149,67425,319],{"class":155},[149,67427,67428],{"class":169},"'#checkAll'",[149,67430,1878],{"class":155},[149,67432,67433],{"class":151,"line":18506},[149,67434,67435],{"class":295},"    \u002F\u002F 2. 获取所有的小复选框\n",[149,67437,67438,67440,67443,67445,67447,67449,67451,67454],{"class":151,"line":18511},[149,67439,12935],{"class":325},[149,67441,67442],{"class":309}," cks",[149,67444,15277],{"class":325},[149,67446,56091],{"class":155},[149,67448,57373],{"class":162},[149,67450,319],{"class":155},[149,67452,67453],{"class":169},"'.ck'",[149,67455,1878],{"class":155},[149,67457,67458],{"class":151,"line":18525},[149,67459,67460],{"class":295},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[149,67462,67463,67466,67468,67470,67472,67474,67476],{"class":151,"line":18530},[149,67464,67465],{"class":155},"    checkAll.",[149,67467,59504],{"class":162},[149,67469,319],{"class":155},[149,67471,59509],{"class":169},[149,67473,329],{"class":155},[149,67475,56144],{"class":325},[149,67477,56147],{"class":155},[149,67479,67480],{"class":151,"line":18536},[149,67481,67482],{"class":295},"      \u002F\u002F 得到当前大复选框的选中状态\n",[149,67484,67485,67488],{"class":151,"line":18541},[149,67486,67487],{"class":295},"      \u002F\u002F console.log(checkAll.checked)",[149,67489,67490],{"class":295},"  \u002F\u002F 得到 是 true 或者是 false\n",[149,67492,67493],{"class":151,"line":18555},[149,67494,67495],{"class":295},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[149,67497,67498,67500,67502,67504,67506,67508,67510,67512,67514,67517,67519,67521,67523],{"class":151,"line":18560},[149,67499,53982],{"class":325},[149,67501,3378],{"class":155},[149,67503,53546],{"class":325},[149,67505,11152],{"class":155},[149,67507,166],{"class":325},[149,67509,5811],{"class":309},[149,67511,11159],{"class":155},[149,67513,156],{"class":325},[149,67515,67516],{"class":155}," cks.",[149,67518,53667],{"class":309},[149,67520,4932],{"class":155},[149,67522,4011],{"class":325},[149,67524,14155],{"class":155},[149,67526,67527,67530,67532,67535],{"class":151,"line":18565},[149,67528,67529],{"class":155},"        cks[i].checked ",[149,67531,166],{"class":325},[149,67533,67534],{"class":309}," this",[149,67536,67537],{"class":155},".checked\n",[149,67539,67540],{"class":151,"line":18579},[149,67541,54096],{"class":155},[149,67543,67544],{"class":151,"line":18591},[149,67545,35167],{"class":155},[149,67547,67548],{"class":151,"line":18596},[149,67549,67550],{"class":295},"    \u002F\u002F 5. 小复选框控制大复选框\n",[149,67552,67553],{"class":151,"line":18609},[149,67554,4119],{"emptyLinePlaceholder":1800},[149,67556,67557,67559,67561,67563,67565,67567,67569,67571,67573,67575,67577,67579,67581],{"class":151,"line":18614},[149,67558,4919],{"class":325},[149,67560,3378],{"class":155},[149,67562,53546],{"class":325},[149,67564,11152],{"class":155},[149,67566,166],{"class":325},[149,67568,5811],{"class":309},[149,67570,11159],{"class":155},[149,67572,156],{"class":325},[149,67574,67516],{"class":155},[149,67576,53667],{"class":309},[149,67578,4932],{"class":155},[149,67580,4011],{"class":325},[149,67582,14155],{"class":155},[149,67584,67585],{"class":151,"line":18619},[149,67586,67587],{"class":295},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[149,67589,67590,67593,67595,67597,67599,67601,67603],{"class":151,"line":18624},[149,67591,67592],{"class":155},"      cks[i].",[149,67594,59504],{"class":162},[149,67596,319],{"class":155},[149,67598,59509],{"class":169},[149,67600,329],{"class":155},[149,67602,56144],{"class":325},[149,67604,56147],{"class":155},[149,67606,67607],{"class":151,"line":18637},[149,67608,67609],{"class":295},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[149,67611,67612],{"class":151,"line":18642},[149,67613,67614],{"class":295},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[149,67616,67617],{"class":151,"line":34339},[149,67618,67619],{"class":295},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[149,67621,67622],{"class":151,"line":34345},[149,67623,67624],{"class":295},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[149,67626,67627,67630,67632,67634,67636,67638,67641,67643,67645,67647,67649],{"class":151,"line":34351},[149,67628,67629],{"class":155},"        checkAll.checked ",[149,67631,166],{"class":325},[149,67633,56091],{"class":155},[149,67635,57373],{"class":162},[149,67637,319],{"class":155},[149,67639,67640],{"class":169},"'.ck:checked'",[149,67642,32532],{"class":155},[149,67644,53667],{"class":309},[149,67646,59597],{"class":325},[149,67648,67516],{"class":155},[149,67650,57523],{"class":309},[149,67652,67653],{"class":151,"line":34357},[149,67654,66502],{"class":155},[149,67656,67657],{"class":151,"line":34363},[149,67658,3906],{"class":155},[149,67660,67661,67663,67665],{"class":151,"line":34374},[149,67662,54115],{"class":155},[149,67664,53512],{"class":159},[149,67666,190],{"class":155},[149,67668,67669,67671,67673],{"class":151,"line":34380},[149,67670,665],{"class":155},[149,67672,53499],{"class":159},[149,67674,190],{"class":155},[149,67676,67677],{"class":151,"line":34400},[149,67678,4119],{"emptyLinePlaceholder":1800},[149,67680,67681,67683,67685],{"class":151,"line":34406},[149,67682,665],{"class":155},[149,67684,52341],{"class":159},[149,67686,190],{"class":155},[24,67688,67689],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[24,67691,67692],{},"用好之间比较得到的布尔值！！！",[24,67694,67695,67696,67699,67700,3378,67703,2447,67705,67708],{},"在 JS 里访问的时候，",[48,67697,67698],{},"checkbox.checked"," 是一个 ",[31,67701,67702],{},"布尔值",[48,67704,3087],{},[48,67706,67707],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[24,67710,67711,67712,67715,67716],{},"HTML 的 ",[48,67713,67714],{},"checked=\"checked\""," 只是 ",[31,67717,67718,67719,67722],{},"初始值；JS 的 ",[48,67720,67721],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[24,67724,67725],{},"：checked是一个伪类选择器",[24,67727,67728],{},[83,67729],{"alt":145,"src":67730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[24,67732,67733,67736],{},[67734,67735],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[24,67738,67739],{},[83,67740],{"alt":145,"src":67741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67743,67745],{"id":67744},"_33-dom事件进阶","3.3 DOM事件进阶",[19,67747,67749],{"id":67748},"_331-事件流","3.3.1 事件流",[24,67751,67752],{},[83,67753],{"alt":145,"src":67754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[120,67756,67758],{"id":67757},"_3311-事件捕获","3.3.1.1 事件捕获",[24,67760,67761],{},[83,67762],{"alt":145,"src":67763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[140,67765,67767],{"className":52339,"code":67766,"language":52341,"meta":145,"style":145},"\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",[48,67768,67769,67779,67793,67797,67805,67819,67839,67851,67859,67866,67878,67890,67900,67904,67908,67915,67927,67939,67949,67953,67961,67969,67973,67981,67996,68015,68023,68031,68051,68071,68087,68098,68106,68123,68134,68142,68159,68170,68178,68186,68194,68198],{"__ignoreMap":145},[149,67770,67771,67773,67775,67777],{"class":151,"line":152},[149,67772,53003],{"class":155},[149,67774,53006],{"class":159},[149,67776,53009],{"class":162},[149,67778,190],{"class":155},[149,67780,67781,67783,67785,67787,67789,67791],{"class":151,"line":193},[149,67782,156],{"class":155},[149,67784,52341],{"class":159},[149,67786,53020],{"class":162},[149,67788,166],{"class":155},[149,67790,53025],{"class":169},[149,67792,190],{"class":155},[149,67794,67795],{"class":151,"line":235},[149,67796,4119],{"emptyLinePlaceholder":1800},[149,67798,67799,67801,67803],{"class":151,"line":340},[149,67800,156],{"class":155},[149,67802,53038],{"class":159},[149,67804,190],{"class":155},[149,67806,67807,67809,67811,67813,67815,67817],{"class":151,"line":346},[149,67808,587],{"class":155},[149,67810,53048],{"class":159},[149,67812,53051],{"class":162},[149,67814,166],{"class":155},[149,67816,53056],{"class":169},[149,67818,190],{"class":155},[149,67820,67821,67823,67825,67827,67829,67831,67833,67835,67837],{"class":151,"line":352},[149,67822,587],{"class":155},[149,67824,53048],{"class":159},[149,67826,515],{"class":162},[149,67828,166],{"class":155},[149,67830,53095],{"class":169},[149,67832,53075],{"class":162},[149,67834,166],{"class":155},[149,67836,53102],{"class":169},[149,67838,190],{"class":155},[149,67840,67841,67843,67845,67847,67849],{"class":151,"line":1021},[149,67842,587],{"class":155},[149,67844,53111],{"class":159},[149,67846,53114],{"class":155},[149,67848,53111],{"class":159},[149,67850,190],{"class":155},[149,67852,67853,67855,67857],{"class":151,"line":1035},[149,67854,587],{"class":155},[149,67856,1783],{"class":159},[149,67858,190],{"class":155},[149,67860,67861,67864],{"class":151,"line":1054},[149,67862,67863],{"class":162},"    .father",[149,67865,304],{"class":155},[149,67867,67868,67870,67872,67874,67876],{"class":151,"line":1072},[149,67869,56466],{"class":309},[149,67871,313],{"class":155},[149,67873,66761],{"class":309},[149,67875,326],{"class":325},[149,67877,841],{"class":155},[149,67879,67880,67882,67884,67886,67888],{"class":151,"line":1090},[149,67881,56480],{"class":309},[149,67883,313],{"class":155},[149,67885,66761],{"class":309},[149,67887,326],{"class":325},[149,67889,841],{"class":155},[149,67891,67892,67894,67896,67898],{"class":151,"line":1633},[149,67893,56579],{"class":309},[149,67895,313],{"class":155},[149,67897,53345],{"class":309},[149,67899,841],{"class":155},[149,67901,67902],{"class":151,"line":1644},[149,67903,3906],{"class":155},[149,67905,67906],{"class":151,"line":3348},[149,67907,4119],{"emptyLinePlaceholder":1800},[149,67909,67910,67913],{"class":151,"line":3362},[149,67911,67912],{"class":162},"    .son",[149,67914,304],{"class":155},[149,67916,67917,67919,67921,67923,67925],{"class":151,"line":3367},[149,67918,56466],{"class":309},[149,67920,313],{"class":155},[149,67922,3442],{"class":309},[149,67924,326],{"class":325},[149,67926,841],{"class":155},[149,67928,67929,67931,67933,67935,67937],{"class":151,"line":3373},[149,67930,56480],{"class":309},[149,67932,313],{"class":155},[149,67934,3442],{"class":309},[149,67936,326],{"class":325},[149,67938,841],{"class":155},[149,67940,67941,67943,67945,67947],{"class":151,"line":3394},[149,67942,56579],{"class":309},[149,67944,313],{"class":155},[149,67946,56584],{"class":309},[149,67948,841],{"class":155},[149,67950,67951],{"class":151,"line":3399},[149,67952,3906],{"class":155},[149,67954,67955,67957,67959],{"class":151,"line":3413},[149,67956,54115],{"class":155},[149,67958,1783],{"class":159},[149,67960,190],{"class":155},[149,67962,67963,67965,67967],{"class":151,"line":3418},[149,67964,665],{"class":155},[149,67966,53038],{"class":159},[149,67968,190],{"class":155},[149,67970,67971],{"class":151,"line":3447},[149,67972,4119],{"emptyLinePlaceholder":1800},[149,67974,67975,67977,67979],{"class":151,"line":3452},[149,67976,156],{"class":155},[149,67978,53499],{"class":159},[149,67980,190],{"class":155},[149,67982,67983,67985,67987,67989,67991,67994],{"class":151,"line":3469},[149,67984,587],{"class":155},[149,67986,301],{"class":159},[149,67988,55184],{"class":162},[149,67990,166],{"class":155},[149,67992,67993],{"class":169},"\"father\"",[149,67995,190],{"class":155},[149,67997,67998,68000,68002,68004,68006,68009,68011,68013],{"class":151,"line":3474},[149,67999,53045],{"class":155},[149,68001,301],{"class":159},[149,68003,55184],{"class":162},[149,68005,166],{"class":155},[149,68007,68008],{"class":169},"\"son\"",[149,68010,185],{"class":155},[149,68012,301],{"class":159},[149,68014,190],{"class":155},[149,68016,68017,68019,68021],{"class":151,"line":3479},[149,68018,54115],{"class":155},[149,68020,301],{"class":159},[149,68022,190],{"class":155},[149,68024,68025,68027,68029],{"class":151,"line":3484},[149,68026,587],{"class":155},[149,68028,53512],{"class":159},[149,68030,190],{"class":155},[149,68032,68033,68035,68038,68040,68042,68044,68046,68049],{"class":151,"line":3498},[149,68034,12935],{"class":325},[149,68036,68037],{"class":309}," fa",[149,68039,15277],{"class":325},[149,68041,56091],{"class":155},[149,68043,56094],{"class":162},[149,68045,319],{"class":155},[149,68047,68048],{"class":169},"'.father'",[149,68050,1878],{"class":155},[149,68052,68053,68055,68058,68060,68062,68064,68066,68069],{"class":151,"line":3503},[149,68054,12935],{"class":325},[149,68056,68057],{"class":309}," son",[149,68059,15277],{"class":325},[149,68061,56091],{"class":155},[149,68063,56094],{"class":162},[149,68065,319],{"class":155},[149,68067,68068],{"class":169},"'.son'",[149,68070,1878],{"class":155},[149,68072,68073,68075,68077,68079,68081,68083,68085],{"class":151,"line":4296},[149,68074,54105],{"class":155},[149,68076,59504],{"class":162},[149,68078,319],{"class":155},[149,68080,59509],{"class":169},[149,68082,329],{"class":155},[149,68084,56144],{"class":325},[149,68086,56147],{"class":155},[149,68088,68089,68091,68093,68096],{"class":151,"line":4310},[149,68090,60616],{"class":162},[149,68092,319],{"class":155},[149,68094,68095],{"class":169},"'woshiu1'",[149,68097,1878],{"class":155},[149,68099,68100,68102,68104],{"class":151,"line":4318},[149,68101,56230],{"class":155},[149,68103,3087],{"class":309},[149,68105,1878],{"class":155},[149,68107,68108,68111,68113,68115,68117,68119,68121],{"class":151,"line":4323},[149,68109,68110],{"class":155},"    fa.",[149,68112,59504],{"class":162},[149,68114,319],{"class":155},[149,68116,59509],{"class":169},[149,68118,329],{"class":155},[149,68120,56144],{"class":325},[149,68122,56147],{"class":155},[149,68124,68125,68127,68129,68132],{"class":151,"line":4329},[149,68126,60616],{"class":162},[149,68128,319],{"class":155},[149,68130,68131],{"class":169},"'1'",[149,68133,1878],{"class":155},[149,68135,68136,68138,68140],{"class":151,"line":4335},[149,68137,56230],{"class":155},[149,68139,3087],{"class":309},[149,68141,1878],{"class":155},[149,68143,68144,68147,68149,68151,68153,68155,68157],{"class":151,"line":4340},[149,68145,68146],{"class":155},"    son.",[149,68148,59504],{"class":162},[149,68150,319],{"class":155},[149,68152,59509],{"class":169},[149,68154,329],{"class":155},[149,68156,56144],{"class":325},[149,68158,56147],{"class":155},[149,68160,68161,68163,68165,68168],{"class":151,"line":9663},[149,68162,60616],{"class":162},[149,68164,319],{"class":155},[149,68166,68167],{"class":169},"'2'",[149,68169,1878],{"class":155},[149,68171,68172,68174,68176],{"class":151,"line":9687},[149,68173,56230],{"class":155},[149,68175,3087],{"class":309},[149,68177,1878],{"class":155},[149,68179,68180,68182,68184],{"class":151,"line":9692},[149,68181,54115],{"class":155},[149,68183,53512],{"class":159},[149,68185,190],{"class":155},[149,68187,68188,68190,68192],{"class":151,"line":9698},[149,68189,665],{"class":155},[149,68191,53499],{"class":159},[149,68193,190],{"class":155},[149,68195,68196],{"class":151,"line":9725},[149,68197,4119],{"emptyLinePlaceholder":1800},[149,68199,68200,68202,68204],{"class":151,"line":9730},[149,68201,665],{"class":155},[149,68203,52341],{"class":159},[149,68205,190],{"class":155},[24,68207,68208],{},[83,68209],{"alt":145,"src":68210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[24,68212,68213],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[120,68215,68217],{"id":68216},"_3312-事件冒泡","3.3.1.2 事件冒泡",[24,68219,68220],{},[83,68221],{"alt":145,"src":68222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[24,68224,68225],{},"反着来",[24,68227,68228],{},"注意是同名事件，比如都是‘click’",[120,68230,68232],{"id":68231},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[24,68234,68235],{},[83,68236],{"alt":145,"src":68237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[120,68239,68241],{"id":68240},"_3314-解绑事件","3.3.1.4 解绑事件",[24,68243,68244],{},[83,68245],{"alt":145,"src":68246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[24,68248,68249],{},[83,68250],{"alt":145,"src":68251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[120,68253,68255],{"id":68254},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[125,68257,68258],{},[45,68259,68260],{},"事件类型的区别",[24,68262,68263],{},[83,68264],{"alt":145,"src":68265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[24,68267,68268],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[125,68270,68271],{"start":193},[45,68272,68273],{},"注册事件的区别",[24,68275,68276],{},[83,68277],{"alt":145,"src":68278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[120,68280,68282],{"id":68281},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[24,68284,68285],{},[83,68286],{"alt":145,"src":68287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[24,68289,68290],{},[83,68291],{"alt":145,"src":68292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[140,68294,68296],{"className":54765,"code":68295,"language":54767,"meta":145,"style":145},"\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",[48,68297,68298,68306,68321,68343,68351,68356,68361,68366,68370,68378,68386],{"__ignoreMap":145},[149,68299,68300,68302,68304],{"class":151,"line":152},[149,68301,156],{"class":155},[149,68303,53499],{"class":159},[149,68305,190],{"class":155},[149,68307,68308,68310,68312,68314,68316,68319],{"class":151,"line":193},[149,68309,587],{"class":155},[149,68311,564],{"class":159},[149,68313,567],{"class":162},[149,68315,166],{"class":155},[149,68317,68318],{"class":169},"\"http:\u002F\u002Fwww.itcast.cn\"",[149,68320,190],{"class":155},[149,68322,68323,68325,68327,68329,68331,68333,68336,68338,68341],{"class":151,"line":235},[149,68324,53045],{"class":155},[149,68326,504],{"class":159},[149,68328,507],{"class":162},[149,68330,166],{"class":155},[149,68332,653],{"class":169},[149,68334,68335],{"class":162}," value",[149,68337,166],{"class":155},[149,68339,68340],{"class":169},"\"免费注册\"",[149,68342,190],{"class":155},[149,68344,68345,68347,68349],{"class":151,"line":340},[149,68346,53045],{"class":155},[149,68348,53512],{"class":159},[149,68350,190],{"class":155},[149,68352,68353],{"class":151,"line":346},[149,68354,68355],{"class":155},"      const form = document.querySelector('form')\n",[149,68357,68358],{"class":151,"line":352},[149,68359,68360],{"class":155},"      form.addEventListener('submit', function (e) {\n",[149,68362,68363],{"class":151,"line":1021},[149,68364,68365],{"class":155},"        e.preventDefault()\n",[149,68367,68368],{"class":151,"line":1035},[149,68369,66502],{"class":155},[149,68371,68372,68374,68376],{"class":151,"line":1054},[149,68373,53476],{"class":155},[149,68375,53512],{"class":159},[149,68377,190],{"class":155},[149,68379,68380,68382,68384],{"class":151,"line":1072},[149,68381,54115],{"class":155},[149,68383,564],{"class":159},[149,68385,190],{"class":155},[149,68387,68388,68390,68392],{"class":151,"line":1090},[149,68389,665],{"class":155},[149,68391,53499],{"class":159},[149,68393,190],{"class":155},[24,68395,68396],{},"点击不在跳转！！！",[19,68398,68400],{"id":68399},"_332-事件委托","3.3.2 事件委托",[24,68402,68403],{},[83,68404],{"alt":145,"src":68405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[140,68407,68409],{"className":52339,"code":68408,"language":52341,"meta":145,"style":145},"\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",[48,68410,68411,68421,68435,68439,68447,68461,68481,68493,68501,68505,68513,68521,68533,68545,68557,68569,68581,68594,68602,68610,68615,68634,68655,68660,68665,68670,68675,68684,68688,68698,68702,68707,68712,68726,68736,68740,68744,68752,68760,68764],{"__ignoreMap":145},[149,68412,68413,68415,68417,68419],{"class":151,"line":152},[149,68414,53003],{"class":155},[149,68416,53006],{"class":159},[149,68418,53009],{"class":162},[149,68420,190],{"class":155},[149,68422,68423,68425,68427,68429,68431,68433],{"class":151,"line":193},[149,68424,156],{"class":155},[149,68426,52341],{"class":159},[149,68428,53020],{"class":162},[149,68430,166],{"class":155},[149,68432,53025],{"class":169},[149,68434,190],{"class":155},[149,68436,68437],{"class":151,"line":235},[149,68438,4119],{"emptyLinePlaceholder":1800},[149,68440,68441,68443,68445],{"class":151,"line":340},[149,68442,156],{"class":155},[149,68444,53038],{"class":159},[149,68446,190],{"class":155},[149,68448,68449,68451,68453,68455,68457,68459],{"class":151,"line":346},[149,68450,587],{"class":155},[149,68452,53048],{"class":159},[149,68454,53051],{"class":162},[149,68456,166],{"class":155},[149,68458,53056],{"class":169},[149,68460,190],{"class":155},[149,68462,68463,68465,68467,68469,68471,68473,68475,68477,68479],{"class":151,"line":352},[149,68464,587],{"class":155},[149,68466,53048],{"class":159},[149,68468,515],{"class":162},[149,68470,166],{"class":155},[149,68472,53095],{"class":169},[149,68474,53075],{"class":162},[149,68476,166],{"class":155},[149,68478,53102],{"class":169},[149,68480,190],{"class":155},[149,68482,68483,68485,68487,68489,68491],{"class":151,"line":1021},[149,68484,587],{"class":155},[149,68486,53111],{"class":159},[149,68488,53114],{"class":155},[149,68490,53111],{"class":159},[149,68492,190],{"class":155},[149,68494,68495,68497,68499],{"class":151,"line":1035},[149,68496,665],{"class":155},[149,68498,53038],{"class":159},[149,68500,190],{"class":155},[149,68502,68503],{"class":151,"line":1054},[149,68504,4119],{"emptyLinePlaceholder":1800},[149,68506,68507,68509,68511],{"class":151,"line":1072},[149,68508,156],{"class":155},[149,68510,53499],{"class":159},[149,68512,190],{"class":155},[149,68514,68515,68517,68519],{"class":151,"line":1090},[149,68516,587],{"class":155},[149,68518,42],{"class":159},[149,68520,190],{"class":155},[149,68522,68523,68525,68527,68529,68531],{"class":151,"line":1633},[149,68524,53045],{"class":155},[149,68526,45],{"class":159},[149,68528,55661],{"class":155},[149,68530,45],{"class":159},[149,68532,190],{"class":155},[149,68534,68535,68537,68539,68541,68543],{"class":151,"line":1644},[149,68536,53045],{"class":155},[149,68538,45],{"class":159},[149,68540,55680],{"class":155},[149,68542,45],{"class":159},[149,68544,190],{"class":155},[149,68546,68547,68549,68551,68553,68555],{"class":151,"line":3348},[149,68548,53045],{"class":155},[149,68550,45],{"class":159},[149,68552,55699],{"class":155},[149,68554,45],{"class":159},[149,68556,190],{"class":155},[149,68558,68559,68561,68563,68565,68567],{"class":151,"line":3362},[149,68560,53045],{"class":155},[149,68562,45],{"class":159},[149,68564,55718],{"class":155},[149,68566,45],{"class":159},[149,68568,190],{"class":155},[149,68570,68571,68573,68575,68577,68579],{"class":151,"line":3367},[149,68572,53045],{"class":155},[149,68574,45],{"class":159},[149,68576,55737],{"class":155},[149,68578,45],{"class":159},[149,68580,190],{"class":155},[149,68582,68583,68585,68587,68590,68592],{"class":151,"line":3373},[149,68584,53045],{"class":155},[149,68586,24],{"class":159},[149,68588,68589],{"class":155},">我不需要变色\u003C\u002F",[149,68591,24],{"class":159},[149,68593,190],{"class":155},[149,68595,68596,68598,68600],{"class":151,"line":3394},[149,68597,54115],{"class":155},[149,68599,42],{"class":159},[149,68601,190],{"class":155},[149,68603,68604,68606,68608],{"class":151,"line":3399},[149,68605,587],{"class":155},[149,68607,53512],{"class":159},[149,68609,190],{"class":155},[149,68611,68612],{"class":151,"line":3413},[149,68613,68614],{"class":295},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[149,68616,68617,68619,68621,68623,68625,68627,68629,68632],{"class":151,"line":3418},[149,68618,12935],{"class":325},[149,68620,62981],{"class":309},[149,68622,15277],{"class":325},[149,68624,56091],{"class":155},[149,68626,56094],{"class":162},[149,68628,319],{"class":155},[149,68630,68631],{"class":169},"'ul'",[149,68633,1878],{"class":155},[149,68635,68636,68639,68641,68643,68645,68647,68649,68651,68653],{"class":151,"line":3447},[149,68637,68638],{"class":155},"    ul.",[149,68640,59504],{"class":162},[149,68642,319],{"class":155},[149,68644,59509],{"class":169},[149,68646,329],{"class":155},[149,68648,56144],{"class":325},[149,68650,3378],{"class":155},[149,68652,1942],{"class":6932},[149,68654,14155],{"class":155},[149,68656,68657],{"class":151,"line":3452},[149,68658,68659],{"class":295},"      \u002F\u002F alert(1)\n",[149,68661,68662],{"class":151,"line":3469},[149,68663,68664],{"class":295},"      \u002F\u002F e.target就是我们点击的对象\n",[149,68666,68667],{"class":151,"line":3474},[149,68668,68669],{"class":295},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[149,68671,68672],{"class":151,"line":3479},[149,68673,68674],{"class":295},"      \u002F\u002F e.target.style.color = 'red'\n",[149,68676,68677,68679,68681],{"class":151,"line":3484},[149,68678,59935],{"class":155},[149,68680,59938],{"class":162},[149,68682,68683],{"class":155},"(e)\n",[149,68685,68686],{"class":151,"line":3498},[149,68687,4119],{"emptyLinePlaceholder":1800},[149,68689,68690,68692,68695],{"class":151,"line":3503},[149,68691,59935],{"class":155},[149,68693,68694],{"class":162},"dir",[149,68696,68697],{"class":155},"(e.target)\n",[149,68699,68700],{"class":151,"line":4296},[149,68701,4119],{"emptyLinePlaceholder":1800},[149,68703,68704],{"class":151,"line":4310},[149,68705,68706],{"class":295},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[149,68708,68709],{"class":151,"line":4318},[149,68710,68711],{"class":295},"      \u002F\u002F 通过tagName来进行判断\n",[149,68713,68714,68716,68719,68721,68724],{"class":151,"line":4323},[149,68715,56175],{"class":325},[149,68717,68718],{"class":155}," (e.target.tagName ",[149,68720,56181],{"class":325},[149,68722,68723],{"class":169}," 'LI'",[149,68725,14155],{"class":155},[149,68727,68728,68731,68733],{"class":151,"line":4329},[149,68729,68730],{"class":155},"        e.target.style.color ",[149,68732,166],{"class":325},[149,68734,68735],{"class":169}," 'red'\n",[149,68737,68738],{"class":151,"line":4335},[149,68739,54096],{"class":155},[149,68741,68742],{"class":151,"line":4340},[149,68743,35167],{"class":155},[149,68745,68746,68748,68750],{"class":151,"line":9663},[149,68747,54115],{"class":155},[149,68749,53512],{"class":159},[149,68751,190],{"class":155},[149,68753,68754,68756,68758],{"class":151,"line":9687},[149,68755,665],{"class":155},[149,68757,53499],{"class":159},[149,68759,190],{"class":155},[149,68761,68762],{"class":151,"line":9692},[149,68763,4119],{"emptyLinePlaceholder":1800},[149,68765,68766,68768,68770],{"class":151,"line":9698},[149,68767,665],{"class":155},[149,68769,52341],{"class":159},[149,68771,190],{"class":155},[24,68773,68774],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[24,68776,68777],{},"if(e.target.ragName==='P') {}",[24,68779,68780],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[24,68782,68783],{},"通过事件委托的方式实现tab栏切换改造：",[24,68785,68786],{},"一定要记住自定义属性！！！！！！",[24,68788,68789],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[24,68791,68792],{},"id是自定义的属性名",[24,68794,68795],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[140,68797,68799],{"className":52339,"code":68798,"language":52341,"meta":145,"style":145},"\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",[48,68800,68801,68811,68825,68829,68837,68851,68871,68891,68903,68911,68917,68927,68937,68941,68945,68951,68963,68975,68987,69003,69007,69011,69017,69029,69041,69053,69063,69073,69077,69081,69089,69101,69111,69123,69127,69131,69139,69149,69159,69169,69173,69177,69187,69201,69213,69217,69221,69233,69243,69259,69269,69273,69277,69291,69301,69311,69315,69319,69325,69339,69343,69347,69355,69365,69369,69373,69382,69392,69396,69404,69412,69416,69424,69438,69452,69464,69472,69511,69543,69575,69607,69639,69647,69655,69669,69703,69737,69771,69805,69839,69847,69855,69863,69868,69873,69892,69897,69917,69925,69930,69943,69964,69977,69981,69986,69991,70004,70024,70052,70056,70060,70064,70072,70080,70084],{"__ignoreMap":145},[149,68802,68803,68805,68807,68809],{"class":151,"line":152},[149,68804,53003],{"class":155},[149,68806,53006],{"class":159},[149,68808,53009],{"class":162},[149,68810,190],{"class":155},[149,68812,68813,68815,68817,68819,68821,68823],{"class":151,"line":193},[149,68814,156],{"class":155},[149,68816,52341],{"class":159},[149,68818,53020],{"class":162},[149,68820,166],{"class":155},[149,68822,53025],{"class":169},[149,68824,190],{"class":155},[149,68826,68827],{"class":151,"line":235},[149,68828,4119],{"emptyLinePlaceholder":1800},[149,68830,68831,68833,68835],{"class":151,"line":340},[149,68832,156],{"class":155},[149,68834,53038],{"class":159},[149,68836,190],{"class":155},[149,68838,68839,68841,68843,68845,68847,68849],{"class":151,"line":346},[149,68840,587],{"class":155},[149,68842,53048],{"class":159},[149,68844,53051],{"class":162},[149,68846,166],{"class":155},[149,68848,53056],{"class":169},[149,68850,60818],{"class":155},[149,68852,68853,68855,68857,68859,68861,68863,68865,68867,68869],{"class":151,"line":352},[149,68854,587],{"class":155},[149,68856,53048],{"class":159},[149,68858,53067],{"class":162},[149,68860,166],{"class":155},[149,68862,53072],{"class":169},[149,68864,53075],{"class":162},[149,68866,166],{"class":155},[149,68868,53080],{"class":169},[149,68870,60818],{"class":155},[149,68872,68873,68875,68877,68879,68881,68883,68885,68887,68889],{"class":151,"line":1021},[149,68874,587],{"class":155},[149,68876,53048],{"class":159},[149,68878,515],{"class":162},[149,68880,166],{"class":155},[149,68882,53095],{"class":169},[149,68884,53075],{"class":162},[149,68886,166],{"class":155},[149,68888,53102],{"class":169},[149,68890,60818],{"class":155},[149,68892,68893,68895,68897,68899,68901],{"class":151,"line":1035},[149,68894,587],{"class":155},[149,68896,53111],{"class":159},[149,68898,65312],{"class":155},[149,68900,53111],{"class":159},[149,68902,190],{"class":155},[149,68904,68905,68907,68909],{"class":151,"line":1054},[149,68906,587],{"class":155},[149,68908,1783],{"class":159},[149,68910,190],{"class":155},[149,68912,68913,68915],{"class":151,"line":1072},[149,68914,8119],{"class":159},[149,68916,304],{"class":155},[149,68918,68919,68921,68923,68925],{"class":151,"line":1090},[149,68920,56401],{"class":309},[149,68922,313],{"class":155},[149,68924,2056],{"class":309},[149,68926,841],{"class":155},[149,68928,68929,68931,68933,68935],{"class":151,"line":1633},[149,68930,56390],{"class":309},[149,68932,313],{"class":155},[149,68934,2056],{"class":309},[149,68936,841],{"class":155},[149,68938,68939],{"class":151,"line":1644},[149,68940,3906],{"class":155},[149,68942,68943],{"class":151,"line":3348},[149,68944,4119],{"emptyLinePlaceholder":1800},[149,68946,68947,68949],{"class":151,"line":3362},[149,68948,65363],{"class":162},[149,68950,304],{"class":155},[149,68952,68953,68955,68957,68959,68961],{"class":151,"line":3367},[149,68954,56466],{"class":309},[149,68956,313],{"class":155},[149,68958,65374],{"class":309},[149,68960,326],{"class":325},[149,68962,841],{"class":155},[149,68964,68965,68967,68969,68971,68973],{"class":151,"line":3373},[149,68966,56480],{"class":309},[149,68968,313],{"class":155},[149,68970,65387],{"class":309},[149,68972,326],{"class":325},[149,68974,841],{"class":155},[149,68976,68977,68979,68981,68983,68985],{"class":151,"line":3394},[149,68978,56401],{"class":309},[149,68980,313],{"class":155},[149,68982,2561],{"class":309},[149,68984,326],{"class":325},[149,68986,841],{"class":155},[149,68988,68989,68991,68993,68995,68997,68999,69001],{"class":151,"line":3399},[149,68990,63666],{"class":309},[149,68992,313],{"class":155},[149,68994,830],{"class":309},[149,68996,326],{"class":325},[149,68998,835],{"class":309},[149,69000,63932],{"class":309},[149,69002,841],{"class":155},[149,69004,69005],{"class":151,"line":3413},[149,69006,3906],{"class":155},[149,69008,69009],{"class":151,"line":3418},[149,69010,4119],{"emptyLinePlaceholder":1800},[149,69012,69013,69015],{"class":151,"line":3447},[149,69014,65432],{"class":162},[149,69016,304],{"class":155},[149,69018,69019,69021,69023,69025,69027],{"class":151,"line":3452},[149,69020,56466],{"class":309},[149,69022,313],{"class":155},[149,69024,322],{"class":309},[149,69026,2191],{"class":325},[149,69028,841],{"class":155},[149,69030,69031,69033,69035,69037,69039],{"class":151,"line":3469},[149,69032,56480],{"class":309},[149,69034,313],{"class":155},[149,69036,2767],{"class":309},[149,69038,326],{"class":325},[149,69040,841],{"class":155},[149,69042,69043,69045,69047,69049,69051],{"class":151,"line":3474},[149,69044,59051],{"class":309},[149,69046,313],{"class":155},[149,69048,2767],{"class":309},[149,69050,326],{"class":325},[149,69052,841],{"class":155},[149,69054,69055,69057,69059,69061],{"class":151,"line":3479},[149,69056,56704],{"class":309},[149,69058,313],{"class":155},[149,69060,53180],{"class":309},[149,69062,841],{"class":155},[149,69064,69065,69067,69069,69071],{"class":151,"line":3484},[149,69066,56715],{"class":309},[149,69068,313],{"class":155},[149,69070,53368],{"class":309},[149,69072,841],{"class":155},[149,69074,69075],{"class":151,"line":3498},[149,69076,3906],{"class":155},[149,69078,69079],{"class":151,"line":3503},[149,69080,4119],{"emptyLinePlaceholder":1800},[149,69082,69083,69085,69087],{"class":151,"line":4296},[149,69084,65432],{"class":162},[149,69086,65505],{"class":159},[149,69088,304],{"class":155},[149,69090,69091,69093,69095,69097,69099],{"class":151,"line":4310},[149,69092,56617],{"class":309},[149,69094,313],{"class":155},[149,69096,2661],{"class":309},[149,69098,326],{"class":325},[149,69100,841],{"class":155},[149,69102,69103,69105,69107,69109],{"class":151,"line":4318},[149,69104,64022],{"class":309},[149,69106,313],{"class":155},[149,69108,65528],{"class":309},[149,69110,841],{"class":155},[149,69112,69113,69115,69117,69119,69121],{"class":151,"line":4323},[149,69114,63689],{"class":309},[149,69116,313],{"class":155},[149,69118,2561],{"class":309},[149,69120,326],{"class":325},[149,69122,841],{"class":155},[149,69124,69125],{"class":151,"line":4329},[149,69126,3906],{"class":155},[149,69128,69129],{"class":151,"line":4335},[149,69130,4119],{"emptyLinePlaceholder":1800},[149,69132,69133,69135,69137],{"class":151,"line":4340},[149,69134,65432],{"class":162},[149,69136,62981],{"class":159},[149,69138,304],{"class":155},[149,69140,69141,69143,69145,69147],{"class":151,"line":9663},[149,69142,56427],{"class":309},[149,69144,313],{"class":155},[149,69146,56432],{"class":309},[149,69148,841],{"class":155},[149,69150,69151,69153,69155,69157],{"class":151,"line":9687},[149,69152,56704],{"class":309},[149,69154,313],{"class":155},[149,69156,53180],{"class":309},[149,69158,841],{"class":155},[149,69160,69161,69163,69165,69167],{"class":151,"line":9692},[149,69162,56715],{"class":309},[149,69164,313],{"class":155},[149,69166,53281],{"class":309},[149,69168,841],{"class":155},[149,69170,69171],{"class":151,"line":9698},[149,69172,3906],{"class":155},[149,69174,69175],{"class":151,"line":9725},[149,69176,4119],{"emptyLinePlaceholder":1800},[149,69178,69179,69181,69183,69185],{"class":151,"line":9730},[149,69180,65432],{"class":162},[149,69182,62981],{"class":159},[149,69184,56770],{"class":159},[149,69186,304],{"class":155},[149,69188,69189,69191,69193,69195,69197,69199],{"class":151,"line":9736},[149,69190,56401],{"class":309},[149,69192,313],{"class":155},[149,69194,2056],{"class":309},[149,69196,10665],{"class":309},[149,69198,326],{"class":325},[149,69200,841],{"class":155},[149,69202,69203,69205,69207,69209,69211],{"class":151,"line":9748},[149,69204,56617],{"class":309},[149,69206,313],{"class":155},[149,69208,2412],{"class":309},[149,69210,326],{"class":325},[149,69212,841],{"class":155},[149,69214,69215],{"class":151,"line":9760},[149,69216,3906],{"class":155},[149,69218,69219],{"class":151,"line":9772},[149,69220,4119],{"emptyLinePlaceholder":1800},[149,69222,69223,69225,69227,69229,69231],{"class":151,"line":11430},[149,69224,65432],{"class":162},[149,69226,62981],{"class":159},[149,69228,56770],{"class":159},[149,69230,3123],{"class":159},[149,69232,304],{"class":155},[149,69234,69235,69237,69239,69241],{"class":151,"line":11455},[149,69236,65657],{"class":309},[149,69238,313],{"class":155},[149,69240,56432],{"class":309},[149,69242,841],{"class":155},[149,69244,69245,69247,69249,69251,69253,69255,69257],{"class":151,"line":11478},[149,69246,63920],{"class":309},[149,69248,313],{"class":155},[149,69250,1045],{"class":309},[149,69252,326],{"class":325},[149,69254,835],{"class":309},[149,69256,65678],{"class":309},[149,69258,841],{"class":155},[149,69260,69261,69263,69265,69267],{"class":151,"line":11502},[149,69262,59108],{"class":309},[149,69264,313],{"class":155},[149,69266,64057],{"class":309},[149,69268,841],{"class":155},[149,69270,69271],{"class":151,"line":11507},[149,69272,3906],{"class":155},[149,69274,69275],{"class":151,"line":11512},[149,69276,4119],{"emptyLinePlaceholder":1800},[149,69278,69279,69281,69283,69285,69287,69289],{"class":151,"line":11517},[149,69280,65432],{"class":162},[149,69282,62981],{"class":159},[149,69284,56770],{"class":159},[149,69286,3123],{"class":159},[149,69288,65711],{"class":162},[149,69290,304],{"class":155},[149,69292,69293,69295,69297,69299],{"class":151,"line":11526},[149,69294,63480],{"class":309},[149,69296,313],{"class":155},[149,69298,65722],{"class":309},[149,69300,841],{"class":155},[149,69302,69303,69305,69307,69309],{"class":151,"line":11531},[149,69304,59108],{"class":309},[149,69306,313],{"class":155},[149,69308,65722],{"class":309},[149,69310,841],{"class":155},[149,69312,69313],{"class":151,"line":11537},[149,69314,3906],{"class":155},[149,69316,69317],{"class":151,"line":11558},[149,69318,4119],{"emptyLinePlaceholder":1800},[149,69320,69321,69323],{"class":151,"line":11564},[149,69322,65747],{"class":162},[149,69324,304],{"class":155},[149,69326,69327,69329,69331,69333,69335,69337],{"class":151,"line":11578},[149,69328,56390],{"class":309},[149,69330,313],{"class":155},[149,69332,2056],{"class":309},[149,69334,65760],{"class":309},[149,69336,326],{"class":325},[149,69338,841],{"class":155},[149,69340,69341],{"class":151,"line":11584},[149,69342,3906],{"class":155},[149,69344,69345],{"class":151,"line":11611},[149,69346,4119],{"emptyLinePlaceholder":1800},[149,69348,69349,69351,69353],{"class":151,"line":11620},[149,69350,65747],{"class":162},[149,69352,63862],{"class":162},[149,69354,304],{"class":155},[149,69356,69357,69359,69361,69363],{"class":151,"line":11626},[149,69358,56704],{"class":309},[149,69360,313],{"class":155},[149,69362,56432],{"class":309},[149,69364,841],{"class":155},[149,69366,69367],{"class":151,"line":11634},[149,69368,3906],{"class":155},[149,69370,69371],{"class":151,"line":11639},[149,69372,4119],{"emptyLinePlaceholder":1800},[149,69374,69375,69377,69380],{"class":151,"line":18314},[149,69376,65747],{"class":162},[149,69378,69379],{"class":162}," .active",[149,69381,304],{"class":155},[149,69383,69384,69386,69388,69390],{"class":151,"line":18320},[149,69385,56704],{"class":309},[149,69387,313],{"class":155},[149,69389,1394],{"class":309},[149,69391,841],{"class":155},[149,69393,69394],{"class":151,"line":18343},[149,69395,3906],{"class":155},[149,69397,69398,69400,69402],{"class":151,"line":18349},[149,69399,54115],{"class":155},[149,69401,1783],{"class":159},[149,69403,190],{"class":155},[149,69405,69406,69408,69410],{"class":151,"line":18372},[149,69407,665],{"class":155},[149,69409,53038],{"class":159},[149,69411,190],{"class":155},[149,69413,69414],{"class":151,"line":18386},[149,69415,4119],{"emptyLinePlaceholder":1800},[149,69417,69418,69420,69422],{"class":151,"line":18406},[149,69419,156],{"class":155},[149,69421,53499],{"class":159},[149,69423,190],{"class":155},[149,69425,69426,69428,69430,69432,69434,69436],{"class":151,"line":18412},[149,69427,587],{"class":155},[149,69429,301],{"class":159},[149,69431,55184],{"class":162},[149,69433,166],{"class":155},[149,69435,65862],{"class":169},[149,69437,190],{"class":155},[149,69439,69440,69442,69444,69446,69448,69450],{"class":151,"line":18423},[149,69441,53045],{"class":155},[149,69443,301],{"class":159},[149,69445,55184],{"class":162},[149,69447,166],{"class":155},[149,69449,65877],{"class":169},[149,69451,190],{"class":155},[149,69453,69454,69456,69458,69460,69462],{"class":151,"line":18446},[149,69455,56929],{"class":155},[149,69457,19],{"class":159},[149,69459,65888],{"class":155},[149,69461,19],{"class":159},[149,69463,190],{"class":155},[149,69465,69466,69468,69470],{"class":151,"line":18468},[149,69467,56929],{"class":155},[149,69469,42],{"class":159},[149,69471,190],{"class":155},[149,69473,69474,69476,69478,69480,69482,69484,69486,69488,69490,69492,69494,69496,69498,69501,69503,69505,69507,69509],{"class":151,"line":18473},[149,69475,56995],{"class":155},[149,69477,45],{"class":159},[149,69479,62741],{"class":155},[149,69481,2102],{"class":159},[149,69483,55184],{"class":162},[149,69485,166],{"class":155},[149,69487,61397],{"class":169},[149,69489,62746],{"class":162},[149,69491,166],{"class":155},[149,69493,65923],{"class":169},[149,69495,55646],{"class":162},[149,69497,166],{"class":155},[149,69499,69500],{"class":169},"\"0\"",[149,69502,65926],{"class":155},[149,69504,2102],{"class":159},[149,69506,185],{"class":155},[149,69508,45],{"class":159},[149,69510,190],{"class":155},[149,69512,69513,69515,69517,69519,69521,69523,69525,69527,69529,69531,69533,69535,69537,69539,69541],{"class":151,"line":18479},[149,69514,56995],{"class":155},[149,69516,45],{"class":159},[149,69518,62741],{"class":155},[149,69520,2102],{"class":159},[149,69522,62746],{"class":162},[149,69524,166],{"class":155},[149,69526,65923],{"class":169},[149,69528,55646],{"class":162},[149,69530,166],{"class":155},[149,69532,5396],{"class":169},[149,69534,65953],{"class":155},[149,69536,2102],{"class":159},[149,69538,185],{"class":155},[149,69540,45],{"class":159},[149,69542,190],{"class":155},[149,69544,69545,69547,69549,69551,69553,69555,69557,69559,69561,69563,69565,69567,69569,69571,69573],{"class":151,"line":18493},[149,69546,56995],{"class":155},[149,69548,45],{"class":159},[149,69550,62741],{"class":155},[149,69552,2102],{"class":159},[149,69554,62746],{"class":162},[149,69556,166],{"class":155},[149,69558,65923],{"class":169},[149,69560,55646],{"class":162},[149,69562,166],{"class":155},[149,69564,5419],{"class":169},[149,69566,65980],{"class":155},[149,69568,2102],{"class":159},[149,69570,185],{"class":155},[149,69572,45],{"class":159},[149,69574,190],{"class":155},[149,69576,69577,69579,69581,69583,69585,69587,69589,69591,69593,69595,69597,69599,69601,69603,69605],{"class":151,"line":18506},[149,69578,56995],{"class":155},[149,69580,45],{"class":159},[149,69582,62741],{"class":155},[149,69584,2102],{"class":159},[149,69586,62746],{"class":162},[149,69588,166],{"class":155},[149,69590,65923],{"class":169},[149,69592,55646],{"class":162},[149,69594,166],{"class":155},[149,69596,5432],{"class":169},[149,69598,66007],{"class":155},[149,69600,2102],{"class":159},[149,69602,185],{"class":155},[149,69604,45],{"class":159},[149,69606,190],{"class":155},[149,69608,69609,69611,69613,69615,69617,69619,69621,69623,69625,69627,69629,69631,69633,69635,69637],{"class":151,"line":18511},[149,69610,56995],{"class":155},[149,69612,45],{"class":159},[149,69614,62741],{"class":155},[149,69616,2102],{"class":159},[149,69618,62746],{"class":162},[149,69620,166],{"class":155},[149,69622,65923],{"class":169},[149,69624,55646],{"class":162},[149,69626,166],{"class":155},[149,69628,5445],{"class":169},[149,69630,66034],{"class":155},[149,69632,2102],{"class":159},[149,69634,185],{"class":155},[149,69636,45],{"class":159},[149,69638,190],{"class":155},[149,69640,69641,69643,69645],{"class":151,"line":18525},[149,69642,57099],{"class":155},[149,69644,42],{"class":159},[149,69646,190],{"class":155},[149,69648,69649,69651,69653],{"class":151,"line":18530},[149,69650,53476],{"class":155},[149,69652,301],{"class":159},[149,69654,190],{"class":155},[149,69656,69657,69659,69661,69663,69665,69667],{"class":151,"line":18536},[149,69658,53045],{"class":155},[149,69660,301],{"class":159},[149,69662,55184],{"class":162},[149,69664,166],{"class":155},[149,69666,66071],{"class":169},[149,69668,190],{"class":155},[149,69670,69671,69673,69675,69677,69679,69681,69683,69685,69687,69689,69691,69693,69695,69697,69699,69701],{"class":151,"line":18541},[149,69672,56929],{"class":155},[149,69674,301],{"class":159},[149,69676,55184],{"class":162},[149,69678,166],{"class":155},[149,69680,66086],{"class":169},[149,69682,62741],{"class":155},[149,69684,83],{"class":159},[149,69686,163],{"class":162},[149,69688,166],{"class":155},[149,69690,66097],{"class":169},[149,69692,265],{"class":162},[149,69694,166],{"class":155},[149,69696,1382],{"class":169},[149,69698,66106],{"class":155},[149,69700,301],{"class":159},[149,69702,190],{"class":155},[149,69704,69705,69707,69709,69711,69713,69715,69717,69719,69721,69723,69725,69727,69729,69731,69733,69735],{"class":151,"line":18555},[149,69706,56929],{"class":155},[149,69708,301],{"class":159},[149,69710,55184],{"class":162},[149,69712,166],{"class":155},[149,69714,64311],{"class":169},[149,69716,62741],{"class":155},[149,69718,83],{"class":159},[149,69720,163],{"class":162},[149,69722,166],{"class":155},[149,69724,66133],{"class":169},[149,69726,265],{"class":162},[149,69728,166],{"class":155},[149,69730,1382],{"class":169},[149,69732,66106],{"class":155},[149,69734,301],{"class":159},[149,69736,190],{"class":155},[149,69738,69739,69741,69743,69745,69747,69749,69751,69753,69755,69757,69759,69761,69763,69765,69767,69769],{"class":151,"line":18560},[149,69740,56929],{"class":155},[149,69742,301],{"class":159},[149,69744,55184],{"class":162},[149,69746,166],{"class":155},[149,69748,64311],{"class":169},[149,69750,62741],{"class":155},[149,69752,83],{"class":159},[149,69754,163],{"class":162},[149,69756,166],{"class":155},[149,69758,66168],{"class":169},[149,69760,265],{"class":162},[149,69762,166],{"class":155},[149,69764,1382],{"class":169},[149,69766,66106],{"class":155},[149,69768,301],{"class":159},[149,69770,190],{"class":155},[149,69772,69773,69775,69777,69779,69781,69783,69785,69787,69789,69791,69793,69795,69797,69799,69801,69803],{"class":151,"line":18565},[149,69774,56929],{"class":155},[149,69776,301],{"class":159},[149,69778,55184],{"class":162},[149,69780,166],{"class":155},[149,69782,64311],{"class":169},[149,69784,62741],{"class":155},[149,69786,83],{"class":159},[149,69788,163],{"class":162},[149,69790,166],{"class":155},[149,69792,66203],{"class":169},[149,69794,265],{"class":162},[149,69796,166],{"class":155},[149,69798,1382],{"class":169},[149,69800,66106],{"class":155},[149,69802,301],{"class":159},[149,69804,190],{"class":155},[149,69806,69807,69809,69811,69813,69815,69817,69819,69821,69823,69825,69827,69829,69831,69833,69835,69837],{"class":151,"line":18579},[149,69808,56929],{"class":155},[149,69810,301],{"class":159},[149,69812,55184],{"class":162},[149,69814,166],{"class":155},[149,69816,64311],{"class":169},[149,69818,62741],{"class":155},[149,69820,83],{"class":159},[149,69822,163],{"class":162},[149,69824,166],{"class":155},[149,69826,66238],{"class":169},[149,69828,265],{"class":162},[149,69830,166],{"class":155},[149,69832,1382],{"class":169},[149,69834,66106],{"class":155},[149,69836,301],{"class":159},[149,69838,190],{"class":155},[149,69840,69841,69843,69845],{"class":151,"line":18591},[149,69842,53476],{"class":155},[149,69844,301],{"class":159},[149,69846,190],{"class":155},[149,69848,69849,69851,69853],{"class":151,"line":18596},[149,69850,54115],{"class":155},[149,69852,301],{"class":159},[149,69854,190],{"class":155},[149,69856,69857,69859,69861],{"class":151,"line":18609},[149,69858,587],{"class":155},[149,69860,53512],{"class":159},[149,69862,190],{"class":155},[149,69864,69865],{"class":151,"line":18614},[149,69866,69867],{"class":295},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[149,69869,69870],{"class":151,"line":18619},[149,69871,69872],{"class":295},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[149,69874,69875,69877,69879,69881,69883,69885,69887,69890],{"class":151,"line":18624},[149,69876,12935],{"class":325},[149,69878,62981],{"class":309},[149,69880,15277],{"class":325},[149,69882,56091],{"class":155},[149,69884,56094],{"class":162},[149,69886,319],{"class":155},[149,69888,69889],{"class":169},"'.tab-nav ul'",[149,69891,1878],{"class":155},[149,69893,69894],{"class":151,"line":18637},[149,69895,69896],{"class":295},"    \u002F\u002F 2.添加事件\n",[149,69898,69899,69901,69903,69905,69907,69909,69911,69913,69915],{"class":151,"line":18642},[149,69900,68638],{"class":155},[149,69902,59504],{"class":162},[149,69904,319],{"class":155},[149,69906,59509],{"class":169},[149,69908,329],{"class":155},[149,69910,56144],{"class":325},[149,69912,3378],{"class":155},[149,69914,1942],{"class":6932},[149,69916,14155],{"class":155},[149,69918,69919,69921,69923],{"class":151,"line":34339},[149,69920,59935],{"class":155},[149,69922,68694],{"class":162},[149,69924,68697],{"class":155},[149,69926,69927],{"class":151,"line":34345},[149,69928,69929],{"class":295},"      \u002F\u002Fe.targer是我们点击的对象\n",[149,69931,69932,69934,69936,69938,69941],{"class":151,"line":34351},[149,69933,56175],{"class":325},[149,69935,68718],{"class":155},[149,69937,56181],{"class":325},[149,69939,69940],{"class":169}," 'A'",[149,69942,14155],{"class":155},[149,69944,69945,69947,69949,69951,69954,69956,69958,69960,69962],{"class":151,"line":34357},[149,69946,53624],{"class":155},[149,69948,56094],{"class":162},[149,69950,319],{"class":155},[149,69952,69953],{"class":169},"'.active'",[149,69955,58695],{"class":155},[149,69957,58698],{"class":162},[149,69959,319],{"class":155},[149,69961,66401],{"class":169},[149,69963,1878],{"class":155},[149,69965,69966,69969,69971,69973,69975],{"class":151,"line":34363},[149,69967,69968],{"class":155},"        e.target.classList.",[149,69970,7050],{"class":162},[149,69972,319],{"class":155},[149,69974,66401],{"class":169},[149,69976,1878],{"class":155},[149,69978,69979],{"class":151,"line":34374},[149,69980,4119],{"emptyLinePlaceholder":1800},[149,69982,69983],{"class":151,"line":34380},[149,69984,69985],{"class":295},"        \u002F\u002F 下面大盒子模块\n",[149,69987,69988],{"class":151,"line":34400},[149,69989,69990],{"class":295},"        \u002F\u002F console.log(e.target.dataset.id)\n",[149,69992,69993,69995,69997,69999,70001],{"class":151,"line":34406},[149,69994,62959],{"class":325},[149,69996,4750],{"class":309},[149,69998,15277],{"class":325},[149,70000,47272],{"class":325},[149,70002,70003],{"class":155},"e.target.dataset.id\n",[149,70005,70006,70008,70010,70012,70014,70016,70018,70020,70022],{"class":151,"line":34417},[149,70007,53624],{"class":155},[149,70009,56094],{"class":162},[149,70011,319],{"class":155},[149,70013,66449],{"class":169},[149,70015,58695],{"class":155},[149,70017,58698],{"class":162},[149,70019,319],{"class":155},[149,70021,66401],{"class":169},[149,70023,1878],{"class":155},[149,70025,70026,70028,70030,70032,70034,70036,70038,70040,70042,70044,70046,70048,70050],{"class":151,"line":34423},[149,70027,53624],{"class":155},[149,70029,56094],{"class":162},[149,70031,319],{"class":155},[149,70033,66475],{"class":169},[149,70035,2304],{"class":155},[149,70037,47272],{"class":325},[149,70039,26827],{"class":309},[149,70041,58724],{"class":169},[149,70043,58695],{"class":155},[149,70045,7050],{"class":162},[149,70047,319],{"class":155},[149,70049,66401],{"class":169},[149,70051,1878],{"class":155},[149,70053,70054],{"class":151,"line":34429},[149,70055,4119],{"emptyLinePlaceholder":1800},[149,70057,70058],{"class":151,"line":34435},[149,70059,54096],{"class":155},[149,70061,70062],{"class":151,"line":34441},[149,70063,35167],{"class":155},[149,70065,70066,70068,70070],{"class":151,"line":34447},[149,70067,54115],{"class":155},[149,70069,53512],{"class":159},[149,70071,190],{"class":155},[149,70073,70074,70076,70078],{"class":151,"line":34453},[149,70075,665],{"class":155},[149,70077,53499],{"class":159},[149,70079,190],{"class":155},[149,70081,70082],{"class":151,"line":34459},[149,70083,4119],{"emptyLinePlaceholder":1800},[149,70085,70086,70088,70090],{"class":151,"line":34479},[149,70087,665],{"class":155},[149,70089,52341],{"class":159},[149,70091,190],{"class":155},[19,70093,70095],{"id":70094},"_333-页面加载事件","3.3.3 页面加载事件",[125,70097,70098],{},[45,70099,70100],{},"load",[24,70102,70103],{},[83,70104],{"alt":145,"src":70105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[24,70107,70108],{},"window代表整个窗口，比document还要大",[24,70110,70111],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[24,70113,70114],{},"img.addEventListener('load', function () {",[24,70116,70117],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[24,70119,54162],{},[125,70121,70122],{"start":193},[45,70123,70124],{},"DOMContentLoaded",[24,70126,70127],{},[83,70128],{"alt":145,"src":70129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[24,70131,70132],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[19,70134,70136],{"id":70135},"_334-元素滚动事件","3.3.4 元素滚动事件",[24,70138,70139],{},[83,70140],{"alt":145,"src":70141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[24,70143,70144],{},[83,70145],{"alt":145,"src":70146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[24,70148,70149],{},[83,70150],{"alt":145,"src":70151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[24,70153,70154],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[24,70156,70157],{},"获得的是数字型数据，不带单位",[24,70159,70160],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[24,70162,70163],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[24,70165,70166],{},"它是通过document.documentElement来获取",[24,70168,70169],{},[83,70170],{"alt":145,"src":70171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[24,70173,70174],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[19,70176,70178],{"id":70177},"_335-页面缩放事件","3.3.5 页面缩放事件",[24,70180,70181],{},[83,70182],{"alt":145,"src":70183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[24,70185,70186],{},[83,70187],{"alt":145,"src":70188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[19,70190,70192],{"id":70191},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[24,70194,70195],{},[83,70196],{"alt":145,"src":70197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[24,70199,70200],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[24,70202,70203],{},[83,70204],{"alt":145,"src":70205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[24,70207,70208],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[24,70210,70211],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[24,70213,70214],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[24,70216,70217],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[24,70219,70220],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[24,70222,70223],{},[83,70224],{"alt":145,"src":70225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[24,70227,70228],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[24,70230,70231],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[24,70233,70234],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[24,70236,70237],{},"e.pageX-box.getBoundingClientRect()",[19,70239,70241],{"id":70240},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[24,70243,70244],{},[83,70245],{"alt":145,"src":70246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[24,70248,70249],{},"这个是相对于视口来说的，它是个方法，不是属性值",[19,70251,70253],{"id":70252},"_338-总结","3.3.8 总结",[24,70255,70256],{},[83,70257],{"alt":145,"src":70258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[24,70260,70261],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[24,70263,70264],{},"修改盒子的宽高只能通过width和height来实现",[19,70266,70268],{"id":70267},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[140,70270,70272],{"className":52339,"code":70271,"language":52341,"meta":145,"style":145},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[48,70273,70274,70279,70284,70289,70294],{"__ignoreMap":145},[149,70275,70276],{"class":151,"line":152},[149,70277,70278],{"class":155},"\u002F* 页面滑动 *\u002F\n",[149,70280,70281],{"class":151,"line":193},[149,70282,70283],{"class":155},"html {\n",[149,70285,70286],{"class":151,"line":235},[149,70287,70288],{"class":155},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[149,70290,70291],{"class":151,"line":340},[149,70292,70293],{"class":155},"  scroll-behavior: smooth;\n",[149,70295,70296],{"class":151,"line":346},[149,70297,355],{"class":155},[24,70299,70300],{},"默认是auto",[19,70302,70304],{"id":70303},"_3310-日期对象","3.3.10 日期对象",[120,70306,70308],{"id":70307},"_33101-实例化","3.3.10.1 实例化",[24,70310,70311],{},[83,70312],{"alt":145,"src":70313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[120,70315,70317],{"id":70316},"_33102-时期对象方法","3.3.10.2 时期对象方法",[24,70319,70320],{},[83,70321],{"alt":145,"src":70322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[24,70324,70325],{},"月份+1",[24,70327,70328],{},"老外认为第一天为0，星期天",[24,70330,70331],{},"方法使用的时候必须要跟括号",[24,70333,70334],{},"快速获得日期",[24,70336,70337],{},"\u002F\u002F 得到年月日",[24,70339,70340],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[24,70342,70343],{},"\u002F\u002F 得到当地日期",[24,70345,70346],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[24,70348,70349],{},"\u002F\u002F 得到当地时间",[24,70351,70352],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[24,70354,70355],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[24,70357,70358],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53512,70360,70361],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[24,70363,70364],{},"学会去封装函数！",[120,70366,70368],{"id":70367},"_33103-时间戳","3.3.10.3 时间戳",[24,70370,70371],{},[83,70372],{"alt":145,"src":70373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[24,70375,70376],{},[83,70377],{"alt":145,"src":70378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[24,70380,70381],{},"三种方法记住一个就可以",[19,70383,70385],{"id":70384},"_3311-节点操作","3.3.11 节点操作",[120,70387,70389],{"id":70388},"_33111-dom节点","3.3.11.1 DOM节点",[24,70391,70392],{},[83,70393],{"alt":145,"src":70394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[24,70396,70397],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[120,70399,70401],{"id":70400},"_33112-查找节点","3.3.11.2 查找节点",[24,70403,70404],{},"前边的document.querySelector()是获取的元素",[24,70406,70407],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[24,70409,70410],{},[83,70411],{"alt":145,"src":70412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[125,70414,70415],{},[45,70416,70417],{},"父节点",[24,70419,70420],{},[83,70421],{"alt":145,"src":70422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[125,70424,70425],{"start":193},[45,70426,70427],{},"子节点",[24,70429,70430],{},[83,70431],{"alt":145,"src":70432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[24,70434,70435],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[24,70437,70438],{},"children获得的是伪数组，是亲儿子",[125,70440,70441],{"start":235},[45,70442,70443],{},"兄弟节点",[24,70445,70446],{},[83,70447],{"alt":145,"src":70448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[120,70450,70452],{"id":70451},"_33113-增加节点","3.3.11.3 增加节点",[24,70454,70455],{},[83,70456],{"alt":145,"src":70457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[24,70459,70460],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[24,70462,70463],{},[83,70464],{"alt":145,"src":70465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[24,70467,70468],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[24,70470,70471],{},"下面是写法的部分展示，就按照下边的格式来写",[24,70473,70474],{},"例：",[53512,70476,70477],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[24,70479,70480],{},[83,70481],{"alt":145,"src":70482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[24,70484,70485],{},"false只克隆标签，里边的内容不会克隆过来",[140,70487,70489],{"className":52339,"code":70488,"language":52341,"meta":145,"style":145},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[48,70490,70491],{"__ignoreMap":145},[149,70492,70493],{"class":151,"line":152},[149,70494,70488],{"class":155},[120,70496,70498],{"id":70497},"_33114-删除节点","3.3.11.4 删除节点",[24,70500,70501],{},[83,70502],{"alt":145,"src":70503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[24,70505,70506],{},"父亲删儿子",[24,70508,70509],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[19,70511,70513],{"id":70512},"_3312-m端事件","3.3.12 M端事件",[24,70515,70516],{},"M端就是移动端",[24,70518,70519],{},[83,70520],{"alt":145,"src":70521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[19,70523,70525],{"id":70524},"_3313-插件","3.3.13 插件",[24,70527,70528],{},"要熟悉官网！！！",[24,70530,70531],{},[2102,70532,70533],{"href":70533,"rel":70534},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25573],[24,70536,70537],{},[2102,70538,70539],{"href":70539,"rel":70540},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25573],[19,70542,70544],{"id":70543},"_3314-学生信息表","3.3.14 学生信息表",[125,70546,70547,70550,70553,70556,70559,70562,70565,70568],{},[45,70548,70549],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[45,70551,70552],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[45,70554,70555],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[45,70557,70558],{},"用好表单元素自带的属性，value,name等",[45,70560,70561],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[45,70563,70564],{},"不要忘记事件对象",[45,70566,70567],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[45,70569,70570],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[24,70572,70573],{},"结构：",[140,70575,70577],{"className":52339,"code":70576,"language":52341,"meta":145,"style":145},"\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",[48,70578,70579,70589,70603,70607,70615,70629,70649,70670,70683,70707,70715,70719,70727,70740,70761,70789,70817,70822,70844,70864,70883,70891,70919,70941,70961,70981,71001,71021,71041,71049,71069,71077,71081,71094,71102,71110,71118,71131,71144,71157,71170,71183,71196,71209,71217,71225,71233,71238,71243,71248,71253,71258,71263,71268,71273,71278,71283,71288,71293,71298,71306,71314,71322,71326,71346,71365,71385,71405,71425,71445,71449,71454,71474,71479,71489,71494,71499,71519,71541,71546,71556,71560,71564,71569,71574,71603,71617,71632,71636,71640,71644,71649,71660,71673,71678,71683,71688,71693,71698,71702,71707,71712,71721,71726,71731,71743,71748,71755,71759,71764,71774,71779,71789,71794,71822,71843,71853,71873,71891,71908,71925,71942,71959,71963,71973,71978,71983,71988,71999,72003,72007,72011,72016,72021,72042,72054,72059,72064,72069,72083,72088,72095,72099,72103,72111,72115,72123,72127],{"__ignoreMap":145},[149,70580,70581,70583,70585,70587],{"class":151,"line":152},[149,70582,53003],{"class":155},[149,70584,53006],{"class":159},[149,70586,53009],{"class":162},[149,70588,190],{"class":155},[149,70590,70591,70593,70595,70597,70599,70601],{"class":151,"line":193},[149,70592,156],{"class":155},[149,70594,52341],{"class":159},[149,70596,53020],{"class":162},[149,70598,166],{"class":155},[149,70600,53025],{"class":169},[149,70602,190],{"class":155},[149,70604,70605],{"class":151,"line":235},[149,70606,4119],{"emptyLinePlaceholder":1800},[149,70608,70609,70611,70613],{"class":151,"line":340},[149,70610,156],{"class":155},[149,70612,53038],{"class":159},[149,70614,190],{"class":155},[149,70616,70617,70619,70621,70623,70625,70627],{"class":151,"line":346},[149,70618,587],{"class":155},[149,70620,53048],{"class":159},[149,70622,53051],{"class":162},[149,70624,166],{"class":155},[149,70626,53056],{"class":169},[149,70628,60818],{"class":155},[149,70630,70631,70633,70635,70637,70639,70641,70643,70645,70647],{"class":151,"line":352},[149,70632,587],{"class":155},[149,70634,53048],{"class":159},[149,70636,515],{"class":162},[149,70638,166],{"class":155},[149,70640,53095],{"class":169},[149,70642,53075],{"class":162},[149,70644,166],{"class":155},[149,70646,53102],{"class":169},[149,70648,60818],{"class":155},[149,70650,70651,70653,70655,70657,70659,70661,70663,70665,70668],{"class":151,"line":1021},[149,70652,587],{"class":155},[149,70654,53048],{"class":159},[149,70656,53067],{"class":162},[149,70658,166],{"class":155},[149,70660,53072],{"class":169},[149,70662,53075],{"class":162},[149,70664,166],{"class":155},[149,70666,70667],{"class":169},"\"ie=edge\"",[149,70669,60818],{"class":155},[149,70671,70672,70674,70676,70679,70681],{"class":151,"line":1035},[149,70673,587],{"class":155},[149,70675,53111],{"class":159},[149,70677,70678],{"class":155},">学生信息管理\u003C\u002F",[149,70680,53111],{"class":159},[149,70682,190],{"class":155},[149,70684,70685,70687,70690,70693,70695,70698,70700,70702,70705],{"class":151,"line":1054},[149,70686,587],{"class":155},[149,70688,70689],{"class":159},"link",[149,70691,70692],{"class":162}," rel",[149,70694,166],{"class":155},[149,70696,70697],{"class":169},"\"stylesheet\"",[149,70699,62746],{"class":162},[149,70701,166],{"class":155},[149,70703,70704],{"class":169},"\"css\u002Findex.css\"",[149,70706,60818],{"class":155},[149,70708,70709,70711,70713],{"class":151,"line":1072},[149,70710,665],{"class":155},[149,70712,53038],{"class":159},[149,70714,190],{"class":155},[149,70716,70717],{"class":151,"line":1090},[149,70718,4119],{"emptyLinePlaceholder":1800},[149,70720,70721,70723,70725],{"class":151,"line":1633},[149,70722,156],{"class":155},[149,70724,53499],{"class":159},[149,70726,190],{"class":155},[149,70728,70729,70731,70733,70736,70738],{"class":151,"line":1644},[149,70730,587],{"class":155},[149,70732,10],{"class":159},[149,70734,70735],{"class":155},">新增学员\u003C\u002F",[149,70737,10],{"class":159},[149,70739,190],{"class":155},[149,70741,70742,70744,70746,70748,70750,70752,70755,70757,70759],{"class":151,"line":3348},[149,70743,587],{"class":155},[149,70745,564],{"class":159},[149,70747,55184],{"class":162},[149,70749,166],{"class":155},[149,70751,64352],{"class":169},[149,70753,70754],{"class":162}," autocomplete",[149,70756,166],{"class":155},[149,70758,33482],{"class":169},[149,70760,190],{"class":155},[149,70762,70763,70766,70768,70770,70772,70774,70776,70778,70781,70783,70785,70787],{"class":151,"line":3362},[149,70764,70765],{"class":155},"    姓名：\u003C",[149,70767,504],{"class":159},[149,70769,507],{"class":162},[149,70771,166],{"class":155},[149,70773,512],{"class":169},[149,70775,55184],{"class":162},[149,70777,166],{"class":155},[149,70779,70780],{"class":169},"\"uname\"",[149,70782,515],{"class":162},[149,70784,166],{"class":155},[149,70786,70780],{"class":169},[149,70788,60818],{"class":155},[149,70790,70791,70794,70796,70798,70800,70802,70804,70806,70809,70811,70813,70815],{"class":151,"line":3367},[149,70792,70793],{"class":155},"    年龄：\u003C",[149,70795,504],{"class":159},[149,70797,507],{"class":162},[149,70799,166],{"class":155},[149,70801,512],{"class":169},[149,70803,55184],{"class":162},[149,70805,166],{"class":155},[149,70807,70808],{"class":169},"\"age\"",[149,70810,515],{"class":162},[149,70812,166],{"class":155},[149,70814,70808],{"class":169},[149,70816,60818],{"class":155},[149,70818,70819],{"class":151,"line":3373},[149,70820,70821],{"class":155},"    性别:\n",[149,70823,70824,70826,70829,70831,70833,70836,70838,70840,70842],{"class":151,"line":3394},[149,70825,53045],{"class":155},[149,70827,70828],{"class":159},"select",[149,70830,515],{"class":162},[149,70832,166],{"class":155},[149,70834,70835],{"class":169},"\"gender\"",[149,70837,55184],{"class":162},[149,70839,166],{"class":155},[149,70841,70835],{"class":169},[149,70843,190],{"class":155},[149,70845,70846,70848,70851,70853,70855,70857,70860,70862],{"class":151,"line":3399},[149,70847,56929],{"class":155},[149,70849,70850],{"class":159},"option",[149,70852,68335],{"class":162},[149,70854,166],{"class":155},[149,70856,11675],{"class":169},[149,70858,70859],{"class":155},">男\u003C\u002F",[149,70861,70850],{"class":159},[149,70863,190],{"class":155},[149,70865,70866,70868,70870,70872,70874,70876,70879,70881],{"class":151,"line":3413},[149,70867,56929],{"class":155},[149,70869,70850],{"class":159},[149,70871,68335],{"class":162},[149,70873,166],{"class":155},[149,70875,11744],{"class":169},[149,70877,70878],{"class":155},">女\u003C\u002F",[149,70880,70850],{"class":159},[149,70882,190],{"class":155},[149,70884,70885,70887,70889],{"class":151,"line":3418},[149,70886,53476],{"class":155},[149,70888,70828],{"class":159},[149,70890,190],{"class":155},[149,70892,70893,70896,70898,70900,70902,70904,70906,70908,70911,70913,70915,70917],{"class":151,"line":3447},[149,70894,70895],{"class":155},"    薪资：\u003C",[149,70897,504],{"class":159},[149,70899,507],{"class":162},[149,70901,166],{"class":155},[149,70903,512],{"class":169},[149,70905,55184],{"class":162},[149,70907,166],{"class":155},[149,70909,70910],{"class":169},"\"salary\"",[149,70912,515],{"class":162},[149,70914,166],{"class":155},[149,70916,70910],{"class":169},[149,70918,60818],{"class":155},[149,70920,70921,70924,70926,70928,70930,70933,70935,70937,70939],{"class":151,"line":3452},[149,70922,70923],{"class":155},"    就业城市：\u003C",[149,70925,70828],{"class":159},[149,70927,515],{"class":162},[149,70929,166],{"class":155},[149,70931,70932],{"class":169},"\"city\"",[149,70934,55184],{"class":162},[149,70936,166],{"class":155},[149,70938,70932],{"class":169},[149,70940,190],{"class":155},[149,70942,70943,70945,70947,70949,70951,70954,70957,70959],{"class":151,"line":3469},[149,70944,56929],{"class":155},[149,70946,70850],{"class":159},[149,70948,68335],{"class":162},[149,70950,166],{"class":155},[149,70952,70953],{"class":169},"\"北京\"",[149,70955,70956],{"class":155},">北京\u003C\u002F",[149,70958,70850],{"class":159},[149,70960,190],{"class":155},[149,70962,70963,70965,70967,70969,70971,70974,70977,70979],{"class":151,"line":3474},[149,70964,56929],{"class":155},[149,70966,70850],{"class":159},[149,70968,68335],{"class":162},[149,70970,166],{"class":155},[149,70972,70973],{"class":169},"\"上海\"",[149,70975,70976],{"class":155},">上海\u003C\u002F",[149,70978,70850],{"class":159},[149,70980,190],{"class":155},[149,70982,70983,70985,70987,70989,70991,70994,70997,70999],{"class":151,"line":3479},[149,70984,56929],{"class":155},[149,70986,70850],{"class":159},[149,70988,68335],{"class":162},[149,70990,166],{"class":155},[149,70992,70993],{"class":169},"\"广州\"",[149,70995,70996],{"class":155},">广州\u003C\u002F",[149,70998,70850],{"class":159},[149,71000,190],{"class":155},[149,71002,71003,71005,71007,71009,71011,71014,71017,71019],{"class":151,"line":3484},[149,71004,56929],{"class":155},[149,71006,70850],{"class":159},[149,71008,68335],{"class":162},[149,71010,166],{"class":155},[149,71012,71013],{"class":169},"\"深圳\"",[149,71015,71016],{"class":155},">深圳\u003C\u002F",[149,71018,70850],{"class":159},[149,71020,190],{"class":155},[149,71022,71023,71025,71027,71029,71031,71034,71037,71039],{"class":151,"line":3498},[149,71024,56929],{"class":155},[149,71026,70850],{"class":159},[149,71028,68335],{"class":162},[149,71030,166],{"class":155},[149,71032,71033],{"class":169},"\"曹县\"",[149,71035,71036],{"class":155},">曹县\u003C\u002F",[149,71038,70850],{"class":159},[149,71040,190],{"class":155},[149,71042,71043,71045,71047],{"class":151,"line":3503},[149,71044,53476],{"class":155},[149,71046,70828],{"class":159},[149,71048,190],{"class":155},[149,71050,71051,71053,71055,71057,71059,71062,71065,71067],{"class":151,"line":4296},[149,71052,53045],{"class":155},[149,71054,646],{"class":159},[149,71056,55184],{"class":162},[149,71058,166],{"class":155},[149,71060,71061],{"class":169},"\"add\"",[149,71063,71064],{"class":155},">录入\u003C\u002F",[149,71066,646],{"class":159},[149,71068,190],{"class":155},[149,71070,71071,71073,71075],{"class":151,"line":4310},[149,71072,54115],{"class":155},[149,71074,564],{"class":159},[149,71076,190],{"class":155},[149,71078,71079],{"class":151,"line":4318},[149,71080,4119],{"emptyLinePlaceholder":1800},[149,71082,71083,71085,71087,71090,71092],{"class":151,"line":4323},[149,71084,587],{"class":155},[149,71086,10],{"class":159},[149,71088,71089],{"class":155},">就业榜\u003C\u002F",[149,71091,10],{"class":159},[149,71093,190],{"class":155},[149,71095,71096,71098,71100],{"class":151,"line":4329},[149,71097,587],{"class":155},[149,71099,2003],{"class":159},[149,71101,190],{"class":155},[149,71103,71104,71106,71108],{"class":151,"line":4335},[149,71105,53045],{"class":155},[149,71107,2006],{"class":159},[149,71109,190],{"class":155},[149,71111,71112,71114,71116],{"class":151,"line":4340},[149,71113,56929],{"class":155},[149,71115,2009],{"class":159},[149,71117,190],{"class":155},[149,71119,71120,71122,71124,71127,71129],{"class":151,"line":9663},[149,71121,56995],{"class":155},[149,71123,2012],{"class":159},[149,71125,71126],{"class":155},">序号\u003C\u002F",[149,71128,2012],{"class":159},[149,71130,190],{"class":155},[149,71132,71133,71135,71137,71140,71142],{"class":151,"line":9687},[149,71134,56995],{"class":155},[149,71136,2012],{"class":159},[149,71138,71139],{"class":155},">姓名\u003C\u002F",[149,71141,2012],{"class":159},[149,71143,190],{"class":155},[149,71145,71146,71148,71150,71153,71155],{"class":151,"line":9692},[149,71147,56995],{"class":155},[149,71149,2012],{"class":159},[149,71151,71152],{"class":155},">年龄\u003C\u002F",[149,71154,2012],{"class":159},[149,71156,190],{"class":155},[149,71158,71159,71161,71163,71166,71168],{"class":151,"line":9698},[149,71160,56995],{"class":155},[149,71162,2012],{"class":159},[149,71164,71165],{"class":155},">性别\u003C\u002F",[149,71167,2012],{"class":159},[149,71169,190],{"class":155},[149,71171,71172,71174,71176,71179,71181],{"class":151,"line":9725},[149,71173,56995],{"class":155},[149,71175,2012],{"class":159},[149,71177,71178],{"class":155},">薪资\u003C\u002F",[149,71180,2012],{"class":159},[149,71182,190],{"class":155},[149,71184,71185,71187,71189,71192,71194],{"class":151,"line":9730},[149,71186,56995],{"class":155},[149,71188,2012],{"class":159},[149,71190,71191],{"class":155},">就业城市\u003C\u002F",[149,71193,2012],{"class":159},[149,71195,190],{"class":155},[149,71197,71198,71200,71202,71205,71207],{"class":151,"line":9736},[149,71199,56995],{"class":155},[149,71201,2012],{"class":159},[149,71203,71204],{"class":155},">操作\u003C\u002F",[149,71206,2012],{"class":159},[149,71208,190],{"class":155},[149,71210,71211,71213,71215],{"class":151,"line":9748},[149,71212,57099],{"class":155},[149,71214,2009],{"class":159},[149,71216,190],{"class":155},[149,71218,71219,71221,71223],{"class":151,"line":9760},[149,71220,53476],{"class":155},[149,71222,2006],{"class":159},[149,71224,190],{"class":155},[149,71226,71227,71229,71231],{"class":151,"line":9772},[149,71228,53045],{"class":155},[149,71230,2049],{"class":159},[149,71232,190],{"class":155},[149,71234,71235],{"class":151,"line":11430},[149,71236,71237],{"class":295},"      \u003C!-- \n",[149,71239,71240],{"class":151,"line":11455},[149,71241,71242],{"class":295},"        \u003Ctr>\n",[149,71244,71245],{"class":151,"line":11478},[149,71246,71247],{"class":295},"          \u003Ctd>1001\u003C\u002Ftd>\n",[149,71249,71250],{"class":151,"line":11502},[149,71251,71252],{"class":295},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[149,71254,71255],{"class":151,"line":11507},[149,71256,71257],{"class":295},"          \u003Ctd>19\u003C\u002Ftd>\n",[149,71259,71260],{"class":151,"line":11512},[149,71261,71262],{"class":295},"          \u003Ctd>男\u003C\u002Ftd>\n",[149,71264,71265],{"class":151,"line":11517},[149,71266,71267],{"class":295},"          \u003Ctd>15000\u003C\u002Ftd>\n",[149,71269,71270],{"class":151,"line":11526},[149,71271,71272],{"class":295},"          \u003Ctd>上海\u003C\u002Ftd>\n",[149,71274,71275],{"class":151,"line":11531},[149,71276,71277],{"class":295},"          \u003Ctd>\n",[149,71279,71280],{"class":151,"line":11537},[149,71281,71282],{"class":295},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[149,71284,71285],{"class":151,"line":11558},[149,71286,71287],{"class":295},"          \u003C\u002Ftd>\n",[149,71289,71290],{"class":151,"line":11564},[149,71291,71292],{"class":295},"        \u003C\u002Ftr> \n",[149,71294,71295],{"class":151,"line":11578},[149,71296,71297],{"class":295},"        -->\n",[149,71299,71300,71302,71304],{"class":151,"line":11584},[149,71301,53476],{"class":155},[149,71303,2049],{"class":159},[149,71305,190],{"class":155},[149,71307,71308,71310,71312],{"class":151,"line":11611},[149,71309,54115],{"class":155},[149,71311,2003],{"class":159},[149,71313,190],{"class":155},[149,71315,71316,71318,71320],{"class":151,"line":11620},[149,71317,587],{"class":155},[149,71319,53512],{"class":159},[149,71321,190],{"class":155},[149,71323,71324],{"class":151,"line":11626},[149,71325,61649],{"class":295},[149,71327,71328,71330,71333,71335,71337,71339,71341,71344],{"class":151,"line":11634},[149,71329,12935],{"class":325},[149,71331,71332],{"class":309}," uname",[149,71334,15277],{"class":325},[149,71336,56091],{"class":155},[149,71338,56094],{"class":162},[149,71340,319],{"class":155},[149,71342,71343],{"class":169},"'.uname'",[149,71345,1878],{"class":155},[149,71347,71348,71350,71352,71354,71356,71358,71360,71363],{"class":151,"line":11639},[149,71349,12935],{"class":325},[149,71351,17399],{"class":309},[149,71353,15277],{"class":325},[149,71355,56091],{"class":155},[149,71357,56094],{"class":162},[149,71359,319],{"class":155},[149,71361,71362],{"class":169},"'.age'",[149,71364,1878],{"class":155},[149,71366,71367,71369,71372,71374,71376,71378,71380,71383],{"class":151,"line":18314},[149,71368,12935],{"class":325},[149,71370,71371],{"class":309}," gender",[149,71373,15277],{"class":325},[149,71375,56091],{"class":155},[149,71377,56094],{"class":162},[149,71379,319],{"class":155},[149,71381,71382],{"class":169},"'.gender'",[149,71384,1878],{"class":155},[149,71386,71387,71389,71392,71394,71396,71398,71400,71403],{"class":151,"line":18320},[149,71388,12935],{"class":325},[149,71390,71391],{"class":309}," salary",[149,71393,15277],{"class":325},[149,71395,56091],{"class":155},[149,71397,56094],{"class":162},[149,71399,319],{"class":155},[149,71401,71402],{"class":169},"'.salary'",[149,71404,1878],{"class":155},[149,71406,71407,71409,71412,71414,71416,71418,71420,71423],{"class":151,"line":18343},[149,71408,12935],{"class":325},[149,71410,71411],{"class":309}," city",[149,71413,15277],{"class":325},[149,71415,56091],{"class":155},[149,71417,56094],{"class":162},[149,71419,319],{"class":155},[149,71421,71422],{"class":169},"'.city'",[149,71424,1878],{"class":155},[149,71426,71427,71429,71432,71434,71436,71438,71440,71443],{"class":151,"line":18349},[149,71428,12935],{"class":325},[149,71430,71431],{"class":309}," tbody",[149,71433,15277],{"class":325},[149,71435,56091],{"class":155},[149,71437,56094],{"class":162},[149,71439,319],{"class":155},[149,71441,71442],{"class":169},"'tbody'",[149,71444,1878],{"class":155},[149,71446,71447],{"class":151,"line":18372},[149,71448,4119],{"emptyLinePlaceholder":1800},[149,71450,71451],{"class":151,"line":18386},[149,71452,71453],{"class":295},"    \u002F\u002F 获取所有带有name属性的元素\n",[149,71455,71456,71458,71461,71463,71465,71467,71469,71472],{"class":151,"line":18406},[149,71457,12935],{"class":325},[149,71459,71460],{"class":309}," items",[149,71462,15277],{"class":325},[149,71464,56091],{"class":155},[149,71466,57373],{"class":162},[149,71468,319],{"class":155},[149,71470,71471],{"class":169},"'[name]'",[149,71473,1878],{"class":155},[149,71475,71476],{"class":151,"line":18412},[149,71477,71478],{"class":295},"    \u002F\u002F 声明一个空的数组\n",[149,71480,71481,71483,71485,71487],{"class":151,"line":18423},[149,71482,12935],{"class":325},[149,71484,59386],{"class":309},[149,71486,15277],{"class":325},[149,71488,53537],{"class":155},[149,71490,71491],{"class":151,"line":18446},[149,71492,71493],{"class":295},"    \u002F\u002F 1.录入模块\n",[149,71495,71496],{"class":151,"line":18468},[149,71497,71498],{"class":295},"    \u002F\u002F 1.1这是一个表单提交事件\n",[149,71500,71501,71503,71506,71508,71510,71512,71514,71517],{"class":151,"line":18473},[149,71502,12935],{"class":325},[149,71504,71505],{"class":309}," info",[149,71507,15277],{"class":325},[149,71509,56091],{"class":155},[149,71511,56094],{"class":162},[149,71513,319],{"class":155},[149,71515,71516],{"class":169},"'.info'",[149,71518,1878],{"class":155},[149,71520,71521,71524,71526,71528,71531,71533,71535,71537,71539],{"class":151,"line":18479},[149,71522,71523],{"class":155},"    info.",[149,71525,59504],{"class":162},[149,71527,319],{"class":155},[149,71529,71530],{"class":169},"'submit'",[149,71532,329],{"class":155},[149,71534,56144],{"class":325},[149,71536,3378],{"class":155},[149,71538,1942],{"class":6932},[149,71540,14155],{"class":155},[149,71542,71543],{"class":151,"line":18493},[149,71544,71545],{"class":295},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[149,71547,71548,71551,71554],{"class":151,"line":18506},[149,71549,71550],{"class":155},"      e.",[149,71552,71553],{"class":162},"preventDefault",[149,71555,3695],{"class":155},[149,71557,71558],{"class":151,"line":18511},[149,71559,61703],{"class":295},[149,71561,71562],{"class":151,"line":18525},[149,71563,4119],{"emptyLinePlaceholder":1800},[149,71565,71566],{"class":151,"line":18530},[149,71567,71568],{"class":295},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[149,71570,71571],{"class":151,"line":18536},[149,71572,71573],{"class":295},"      \u002F\u002F 先遍历循环\n",[149,71575,71576,71578,71580,71582,71584,71586,71588,71590,71592,71595,71597,71599,71601],{"class":151,"line":18541},[149,71577,53982],{"class":325},[149,71579,3378],{"class":155},[149,71581,53546],{"class":325},[149,71583,11152],{"class":155},[149,71585,166],{"class":325},[149,71587,5811],{"class":309},[149,71589,11159],{"class":155},[149,71591,156],{"class":325},[149,71593,71594],{"class":155}," items.",[149,71596,53667],{"class":309},[149,71598,4932],{"class":155},[149,71600,4011],{"class":325},[149,71602,14155],{"class":155},[149,71604,71605,71607,71610,71612,71615],{"class":151,"line":18555},[149,71606,4216],{"class":325},[149,71608,71609],{"class":155}," (items[i].value ",[149,71611,56181],{"class":325},[149,71613,71614],{"class":169}," ''",[149,71616,14155],{"class":155},[149,71618,71619,71622,71625,71627,71630],{"class":151,"line":18560},[149,71620,71621],{"class":325},"          return",[149,71623,71624],{"class":162}," alert",[149,71626,319],{"class":155},[149,71628,71629],{"class":169},"'输入内容不能为空'",[149,71631,1878],{"class":155},[149,71633,71634],{"class":151,"line":18565},[149,71635,4248],{"class":155},[149,71637,71638],{"class":151,"line":18579},[149,71639,54096],{"class":155},[149,71641,71642],{"class":151,"line":18591},[149,71643,4119],{"emptyLinePlaceholder":1800},[149,71645,71646],{"class":151,"line":18596},[149,71647,71648],{"class":295},"      \u002F\u002F 创建新的对象\n",[149,71650,71651,71653,71656,71658],{"class":151,"line":18609},[149,71652,59919],{"class":325},[149,71654,71655],{"class":309}," obj",[149,71657,15277],{"class":325},[149,71659,304],{"class":155},[149,71661,71662,71665,71667,71669,71671],{"class":151,"line":18614},[149,71663,71664],{"class":155},"        stuID: arr.",[149,71666,53667],{"class":309},[149,71668,47272],{"class":325},[149,71670,26827],{"class":309},[149,71672,33172],{"class":155},[149,71674,71675],{"class":151,"line":18619},[149,71676,71677],{"class":155},"        uname: uname.value,\n",[149,71679,71680],{"class":151,"line":18624},[149,71681,71682],{"class":155},"        age: age.value,\n",[149,71684,71685],{"class":151,"line":18637},[149,71686,71687],{"class":155},"        gender: gender.value,\n",[149,71689,71690],{"class":151,"line":18642},[149,71691,71692],{"class":155},"        salary: salary.value,\n",[149,71694,71695],{"class":151,"line":34339},[149,71696,71697],{"class":155},"        city: city.value\n",[149,71699,71700],{"class":151,"line":34345},[149,71701,54096],{"class":155},[149,71703,71704],{"class":151,"line":34351},[149,71705,71706],{"class":295},"      \u002F\u002F console.log(obj);\n",[149,71708,71709],{"class":151,"line":34357},[149,71710,71711],{"class":295},"      \u002F\u002F 追加到数组里面\n",[149,71713,71714,71716,71718],{"class":151,"line":34363},[149,71715,59698],{"class":155},[149,71717,53583],{"class":162},[149,71719,71720],{"class":155},"(obj)\n",[149,71722,71723],{"class":151,"line":34374},[149,71724,71725],{"class":295},"      \u002F\u002F console.log(arr);\n",[149,71727,71728],{"class":151,"line":34380},[149,71729,71730],{"class":295},"      \u002F\u002F 清空表单  reset重置表单\n",[149,71732,71733,71736,71738,71741],{"class":151,"line":34400},[149,71734,71735],{"class":309},"      this",[149,71737,2421],{"class":155},[149,71739,71740],{"class":162},"reset",[149,71742,3695],{"class":155},[149,71744,71745],{"class":151,"line":34406},[149,71746,71747],{"class":295},"      \u002F\u002F 调用渲染函数\n",[149,71749,71750,71753],{"class":151,"line":34417},[149,71751,71752],{"class":162},"      render",[149,71754,3695],{"class":155},[149,71756,71757],{"class":151,"line":34423},[149,71758,35167],{"class":155},[149,71760,71761],{"class":151,"line":34429},[149,71762,71763],{"class":295},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[149,71765,71766,71769,71772],{"class":151,"line":34435},[149,71767,71768],{"class":325},"    function",[149,71770,71771],{"class":162}," render",[149,71773,12567],{"class":155},[149,71775,71776],{"class":151,"line":34441},[149,71777,71778],{"class":295},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[149,71780,71781,71784,71786],{"class":151,"line":34447},[149,71782,71783],{"class":155},"      tbody.innerHTML ",[149,71785,166],{"class":325},[149,71787,71788],{"class":169}," ''\n",[149,71790,71791],{"class":151,"line":34453},[149,71792,71793],{"class":295},"      \u002F\u002F 遍历数组\n",[149,71795,71796,71798,71800,71802,71804,71806,71808,71810,71812,71814,71816,71818,71820],{"class":151,"line":34459},[149,71797,53982],{"class":325},[149,71799,3378],{"class":155},[149,71801,53546],{"class":325},[149,71803,11152],{"class":155},[149,71805,166],{"class":325},[149,71807,5811],{"class":309},[149,71809,11159],{"class":155},[149,71811,156],{"class":325},[149,71813,53664],{"class":155},[149,71815,53667],{"class":309},[149,71817,4932],{"class":155},[149,71819,4011],{"class":325},[149,71821,14155],{"class":155},[149,71823,71824,71826,71829,71831,71833,71836,71838,71841],{"class":151,"line":34479},[149,71825,62959],{"class":325},[149,71827,71828],{"class":309}," tr",[149,71830,15277],{"class":325},[149,71832,56091],{"class":155},[149,71834,71835],{"class":162},"createElement",[149,71837,319],{"class":155},[149,71839,71840],{"class":169},"'tr'",[149,71842,1878],{"class":155},[149,71844,71845,71848,71850],{"class":151,"line":34485},[149,71846,71847],{"class":155},"        tr.innerHTML ",[149,71849,166],{"class":325},[149,71851,71852],{"class":169}," `\n",[149,71854,71855,71858,71860,71862,71864,71867,71870],{"class":151,"line":34501},[149,71856,71857],{"class":169},"        \u003Ctd>${",[149,71859,5598],{"class":155},[149,71861,810],{"class":169},[149,71863,2304],{"class":155},[149,71865,71866],{"class":169},"].",[149,71868,71869],{"class":155},"stuID",[149,71871,71872],{"class":169},"}\u003C\u002Ftd>\n",[149,71874,71875,71878,71880,71882,71884,71886,71889],{"class":151,"line":34507},[149,71876,71877],{"class":169},"          \u003Ctd>${",[149,71879,5598],{"class":155},[149,71881,810],{"class":169},[149,71883,2304],{"class":155},[149,71885,71866],{"class":169},[149,71887,71888],{"class":155},"uname",[149,71890,71872],{"class":169},[149,71892,71893,71895,71897,71899,71901,71903,71906],{"class":151,"line":34521},[149,71894,71877],{"class":169},[149,71896,5598],{"class":155},[149,71898,810],{"class":169},[149,71900,2304],{"class":155},[149,71902,71866],{"class":169},[149,71904,71905],{"class":155},"age",[149,71907,71872],{"class":169},[149,71909,71910,71912,71914,71916,71918,71920,71923],{"class":151,"line":34527},[149,71911,71877],{"class":169},[149,71913,5598],{"class":155},[149,71915,810],{"class":169},[149,71917,2304],{"class":155},[149,71919,71866],{"class":169},[149,71921,71922],{"class":155},"gender",[149,71924,71872],{"class":169},[149,71926,71927,71929,71931,71933,71935,71937,71940],{"class":151,"line":34542},[149,71928,71877],{"class":169},[149,71930,5598],{"class":155},[149,71932,810],{"class":169},[149,71934,2304],{"class":155},[149,71936,71866],{"class":169},[149,71938,71939],{"class":155},"salary",[149,71941,71872],{"class":169},[149,71943,71944,71946,71948,71950,71952,71954,71957],{"class":151,"line":34548},[149,71945,71877],{"class":169},[149,71947,5598],{"class":155},[149,71949,810],{"class":169},[149,71951,2304],{"class":155},[149,71953,71866],{"class":169},[149,71955,71956],{"class":155},"city",[149,71958,71872],{"class":169},[149,71960,71961],{"class":151,"line":34557},[149,71962,71277],{"class":169},[149,71964,71965,71968,71970],{"class":151,"line":34563},[149,71966,71967],{"class":169},"            \u003Ca href=\"javascript:\" data-id=${",[149,71969,2304],{"class":155},[149,71971,71972],{"class":169},"}>删除\u003C\u002Fa>\n",[149,71974,71975],{"class":151,"line":34572},[149,71976,71977],{"class":169},"          \u003C\u002Ftd> \n",[149,71979,71980],{"class":151,"line":34578},[149,71981,71982],{"class":169},"          `\n",[149,71984,71985],{"class":151,"line":34584},[149,71986,71987],{"class":295},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[149,71989,71990,71993,71996],{"class":151,"line":34593},[149,71991,71992],{"class":155},"        tbody.",[149,71994,71995],{"class":162},"appendChild",[149,71997,71998],{"class":155},"(tr)\n",[149,72000,72001],{"class":151,"line":34599},[149,72002,54096],{"class":155},[149,72004,72005],{"class":151,"line":34610},[149,72006,3906],{"class":155},[149,72008,72009],{"class":151,"line":34616},[149,72010,4119],{"emptyLinePlaceholder":1800},[149,72012,72013],{"class":151,"line":34635},[149,72014,72015],{"class":295},"    \u002F\u002F 3.删除委托\n",[149,72017,72018],{"class":151,"line":34641},[149,72019,72020],{"class":295},"    \u002F\u002F 3.1 事件委托 tbody\n",[149,72022,72023,72026,72028,72030,72032,72034,72036,72038,72040],{"class":151,"line":34652},[149,72024,72025],{"class":155},"    tbody.",[149,72027,59504],{"class":162},[149,72029,319],{"class":155},[149,72031,59509],{"class":169},[149,72033,329],{"class":155},[149,72035,56144],{"class":325},[149,72037,3378],{"class":155},[149,72039,1942],{"class":6932},[149,72041,14155],{"class":155},[149,72043,72044,72046,72048,72050,72052],{"class":151,"line":34658},[149,72045,56175],{"class":325},[149,72047,68718],{"class":155},[149,72049,56181],{"class":325},[149,72051,69940],{"class":169},[149,72053,14155],{"class":155},[149,72055,72056],{"class":151,"line":34678},[149,72057,72058],{"class":295},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[149,72060,72061],{"class":151,"line":34694},[149,72062,72063],{"class":295},"        \u002F\u002F console.log(e.target.dataset.id);\n",[149,72065,72066],{"class":151,"line":34700},[149,72067,72068],{"class":295},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[149,72070,72071,72074,72076,72079,72081],{"class":151,"line":34714},[149,72072,72073],{"class":155},"        arr.",[149,72075,59701],{"class":162},[149,72077,72078],{"class":155},"(e.target.dataset.id, ",[149,72080,830],{"class":309},[149,72082,1878],{"class":155},[149,72084,72085],{"class":151,"line":34720},[149,72086,72087],{"class":295},"        \u002F\u002F 重新渲染一次\n",[149,72089,72090,72093],{"class":151,"line":34726},[149,72091,72092],{"class":162},"        render",[149,72094,3695],{"class":155},[149,72096,72097],{"class":151,"line":34737},[149,72098,54096],{"class":155},[149,72100,72101],{"class":151,"line":34743},[149,72102,35167],{"class":155},[149,72104,72105,72107,72109],{"class":151,"line":34749},[149,72106,54115],{"class":155},[149,72108,53512],{"class":159},[149,72110,190],{"class":155},[149,72112,72113],{"class":151,"line":34759},[149,72114,4119],{"emptyLinePlaceholder":1800},[149,72116,72117,72119,72121],{"class":151,"line":34765},[149,72118,665],{"class":155},[149,72120,53499],{"class":159},[149,72122,190],{"class":155},[149,72124,72125],{"class":151,"line":34776},[149,72126,4119],{"emptyLinePlaceholder":1800},[149,72128,72129,72131,72133],{"class":151,"line":34782},[149,72130,665],{"class":155},[149,72132,52341],{"class":159},[149,72134,190],{"class":155},[24,72136,72137],{},"样式：",[140,72139,72143],{"className":72140,"code":72141,"language":72142,"meta":145,"style":145},"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",[48,72144,72145,72150,72160,72169,72173,72177,72182,72192,72197,72201,72206,72216,72221,72230,72234,72238,72243,72248,72258,72268,72273,72277,72282,72291,72301,72306,72316,72326,72330,72335,72343,72347,72352,72357,72362,72370,72379,72383,72388,72397,72401,72406,72415,72419,72424,72433,72442,72450,72454,72459,72468,72478,72487,72497,72503,72512,72522,72532,72536,72541,72550,72558,72568,72576,72584,72592,72602,72610,72614,72619,72628],{"__ignoreMap":145},[149,72146,72147],{"class":151,"line":152},[149,72148,72149],{"class":155},"* {\n",[149,72151,72152,72155,72157],{"class":151,"line":193},[149,72153,72154],{"class":159},"  margin",[149,72156,313],{"class":155},[149,72158,72159],{"class":169},"0;\n",[149,72161,72162,72165,72167],{"class":151,"line":235},[149,72163,72164],{"class":169},"  padding",[149,72166,313],{"class":155},[149,72168,72159],{"class":169},[149,72170,72171],{"class":151,"line":340},[149,72172,355],{"class":155},[149,72174,72175],{"class":151,"line":346},[149,72176,4119],{"emptyLinePlaceholder":1800},[149,72178,72179],{"class":151,"line":352},[149,72180,72181],{"class":169},"a {\n",[149,72183,72184,72187,72189],{"class":151,"line":1021},[149,72185,72186],{"class":159},"  text-decoration",[149,72188,313],{"class":155},[149,72190,72191],{"class":169},"none;\n",[149,72193,72194],{"class":151,"line":1035},[149,72195,72196],{"class":169},"  color:#721c24;\n",[149,72198,72199],{"class":151,"line":1054},[149,72200,355],{"class":155},[149,72202,72203],{"class":151,"line":1072},[149,72204,72205],{"class":169},"h1 {\n",[149,72207,72208,72211,72213],{"class":151,"line":1090},[149,72209,72210],{"class":159},"  text-align",[149,72212,313],{"class":155},[149,72214,72215],{"class":169},"center;\n",[149,72217,72218],{"class":151,"line":1633},[149,72219,72220],{"class":169},"  color:#333;\n",[149,72222,72223,72225,72227],{"class":151,"line":1644},[149,72224,72154],{"class":159},[149,72226,313],{"class":155},[149,72228,72229],{"class":169},"20px 0;\n",[149,72231,72232],{"class":151,"line":3348},[149,72233,4393],{"class":155},[149,72235,72236],{"class":151,"line":3362},[149,72237,355],{"class":155},[149,72239,72240],{"class":151,"line":3367},[149,72241,72242],{"class":169},"table {\n",[149,72244,72245],{"class":151,"line":3373},[149,72246,72247],{"class":169},"  margin:0 auto;\n",[149,72249,72250,72253,72255],{"class":151,"line":3394},[149,72251,72252],{"class":159},"  width",[149,72254,313],{"class":155},[149,72256,72257],{"class":169},"800px;\n",[149,72259,72260,72263,72265],{"class":151,"line":3399},[149,72261,72262],{"class":159},"  border-collapse",[149,72264,313],{"class":155},[149,72266,72267],{"class":169},"collapse;\n",[149,72269,72270],{"class":151,"line":3413},[149,72271,72272],{"class":169},"  color:#004085;\n",[149,72274,72275],{"class":151,"line":3418},[149,72276,355],{"class":155},[149,72278,72279],{"class":151,"line":3447},[149,72280,72281],{"class":169},"th {\n",[149,72283,72284,72286,72288],{"class":151,"line":3452},[149,72285,72164],{"class":159},[149,72287,313],{"class":155},[149,72289,72290],{"class":169},"10px;\n",[149,72292,72293,72296,72298],{"class":151,"line":3469},[149,72294,72295],{"class":159},"  background",[149,72297,313],{"class":155},[149,72299,72300],{"class":295},"#cfe5ff;\n",[149,72302,72303],{"class":151,"line":3474},[149,72304,72305],{"class":155},"  \n",[149,72307,72308,72311,72313],{"class":151,"line":3479},[149,72309,72310],{"class":159},"  font-size",[149,72312,313],{"class":155},[149,72314,72315],{"class":169},"20px;\n",[149,72317,72318,72321,72323],{"class":151,"line":3484},[149,72319,72320],{"class":159},"  font-weight",[149,72322,313],{"class":155},[149,72324,72325],{"class":169},"400;\n",[149,72327,72328],{"class":151,"line":3498},[149,72329,355],{"class":155},[149,72331,72332],{"class":151,"line":3503},[149,72333,72334],{"class":169},"td,th {\n",[149,72336,72337,72340],{"class":151,"line":4296},[149,72338,72339],{"class":169},"  border:1px solid",[149,72341,72342],{"class":295}," #b8daff;\n",[149,72344,72345],{"class":151,"line":4310},[149,72346,355],{"class":155},[149,72348,72349],{"class":151,"line":4318},[149,72350,72351],{"class":169},"td {\n",[149,72353,72354],{"class":151,"line":4323},[149,72355,72356],{"class":169},"  padding:10px;\n",[149,72358,72359],{"class":151,"line":4329},[149,72360,72361],{"class":169},"  color:#666;\n",[149,72363,72364,72366,72368],{"class":151,"line":4335},[149,72365,72210],{"class":159},[149,72367,313],{"class":155},[149,72369,72215],{"class":169},[149,72371,72372,72374,72376],{"class":151,"line":4340},[149,72373,72310],{"class":159},[149,72375,313],{"class":155},[149,72377,72378],{"class":169},"16px;\n",[149,72380,72381],{"class":151,"line":9663},[149,72382,355],{"class":155},[149,72384,72385],{"class":151,"line":9687},[149,72386,72387],{"class":169},"tbody tr {\n",[149,72389,72390,72392,72394],{"class":151,"line":9692},[149,72391,72295],{"class":159},[149,72393,313],{"class":155},[149,72395,72396],{"class":295},"#fff;\n",[149,72398,72399],{"class":151,"line":9698},[149,72400,355],{"class":155},[149,72402,72403],{"class":151,"line":9725},[149,72404,72405],{"class":169},"tbody tr:hover {\n",[149,72407,72408,72410,72412],{"class":151,"line":9730},[149,72409,72295],{"class":159},[149,72411,313],{"class":155},[149,72413,72414],{"class":295},"#e1ecf8;\n",[149,72416,72417],{"class":151,"line":9736},[149,72418,355],{"class":155},[149,72420,72421],{"class":151,"line":9748},[149,72422,72423],{"class":169},".info {\n",[149,72425,72426,72428,72430],{"class":151,"line":9760},[149,72427,72252],{"class":159},[149,72429,313],{"class":155},[149,72431,72432],{"class":169},"900px;\n",[149,72434,72435,72437,72439],{"class":151,"line":9772},[149,72436,72154],{"class":159},[149,72438,313],{"class":155},[149,72440,72441],{"class":169},"50px auto;\n",[149,72443,72444,72446,72448],{"class":151,"line":11430},[149,72445,72210],{"class":159},[149,72447,313],{"class":155},[149,72449,72215],{"class":169},[149,72451,72452],{"class":151,"line":11455},[149,72453,355],{"class":155},[149,72455,72456],{"class":151,"line":11478},[149,72457,72458],{"class":169},".info  input, .info select {\n",[149,72460,72461,72463,72465],{"class":151,"line":11502},[149,72462,72252],{"class":159},[149,72464,313],{"class":155},[149,72466,72467],{"class":169},"80px;\n",[149,72469,72470,72473,72475],{"class":151,"line":11507},[149,72471,72472],{"class":159},"  height",[149,72474,313],{"class":155},[149,72476,72477],{"class":169},"27px;\n",[149,72479,72480,72483,72485],{"class":151,"line":11512},[149,72481,72482],{"class":159},"  outline",[149,72484,313],{"class":155},[149,72486,72191],{"class":169},[149,72488,72489,72492,72494],{"class":151,"line":11517},[149,72490,72491],{"class":159},"  border-radius",[149,72493,313],{"class":155},[149,72495,72496],{"class":169},"5px;\n",[149,72498,72499,72501],{"class":151,"line":11526},[149,72500,72339],{"class":169},[149,72502,72342],{"class":295},[149,72504,72505,72508,72510],{"class":151,"line":11531},[149,72506,72507],{"class":159},"  padding-left",[149,72509,313],{"class":155},[149,72511,72496],{"class":169},[149,72513,72514,72517,72519],{"class":151,"line":11537},[149,72515,72516],{"class":159},"  box-sizing",[149,72518,313],{"class":155},[149,72520,72521],{"class":169},"border-box;\n",[149,72523,72524,72527,72529],{"class":151,"line":11558},[149,72525,72526],{"class":159},"  margin-right",[149,72528,313],{"class":155},[149,72530,72531],{"class":169},"15px;\n",[149,72533,72534],{"class":151,"line":11564},[149,72535,355],{"class":155},[149,72537,72538],{"class":151,"line":11578},[149,72539,72540],{"class":169},".info button {\n",[149,72542,72543,72545,72547],{"class":151,"line":11584},[149,72544,72252],{"class":159},[149,72546,313],{"class":155},[149,72548,72549],{"class":169},"60px;\n",[149,72551,72552,72554,72556],{"class":151,"line":11611},[149,72553,72472],{"class":159},[149,72555,313],{"class":155},[149,72557,72477],{"class":169},[149,72559,72560,72563,72565],{"class":151,"line":11620},[149,72561,72562],{"class":159},"  background-color",[149,72564,313],{"class":155},[149,72566,72567],{"class":295},"#004085;\n",[149,72569,72570,72572,72574],{"class":151,"line":11626},[149,72571,72482],{"class":159},[149,72573,313],{"class":155},[149,72575,72191],{"class":169},[149,72577,72578,72580,72582],{"class":151,"line":11634},[149,72579,825],{"class":159},[149,72581,313],{"class":155},[149,72583,72159],{"class":169},[149,72585,72586,72588,72590],{"class":151,"line":11639},[149,72587,984],{"class":159},[149,72589,313],{"class":155},[149,72591,72396],{"class":295},[149,72593,72594,72597,72599],{"class":151,"line":18314},[149,72595,72596],{"class":159},"  cursor",[149,72598,313],{"class":155},[149,72600,72601],{"class":169},"pointer;\n",[149,72603,72604,72606,72608],{"class":151,"line":18320},[149,72605,72491],{"class":159},[149,72607,313],{"class":155},[149,72609,72496],{"class":169},[149,72611,72612],{"class":151,"line":18343},[149,72613,355],{"class":155},[149,72615,72616],{"class":151,"line":18349},[149,72617,72618],{"class":169},".info .age {\n",[149,72620,72621,72623,72625],{"class":151,"line":18372},[149,72622,72252],{"class":159},[149,72624,313],{"class":155},[149,72626,72627],{"class":169},"50px;\n",[149,72629,72630],{"class":151,"line":18386},[149,72631,355],{"class":155},[24,72633,72634],{},"思路：",[24,72636,72637],{},[83,72638],{"alt":145,"src":72639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[24,72641,72642],{},[83,72643],{"alt":145,"src":72644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[24,72646,72647],{},[83,72648],{"alt":145,"src":72649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[19,72651,72653],{"id":72652},"_3315-重绘回流","3.3.15 重绘回流",[24,72655,72656],{},[83,72657],{"alt":145,"src":72658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[24,72660,72661],{},[83,72662],{"alt":145,"src":72663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[24,72665,72666],{},[83,72667],{"alt":145,"src":72668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72670,72672],{"id":72671},"_34-bom","3.4 BOM",[24,72674,72675],{},[83,72676],{"alt":145,"src":72677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[24,72679,72680],{},"平时写的document省略了window而已，实际上是window.document",[24,72682,72683],{},"函数也是这样，调用的时候实际为window.fn()",[24,72685,72686],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[24,72688,72689],{},"window大部分情况下可以省略",[19,72691,72693],{"id":72692},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[24,72695,72696],{},"只执行一次",[24,72698,72699],{},[83,72700],{"alt":145,"src":72701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[24,72703,72704],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[24,72706,72707],{},[83,72708],{"alt":145,"src":72709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[19,72711,72713],{"id":72712},"_342-js执行机制","3.4.2 JS执行机制",[24,72715,72716],{},[83,72717],{"alt":145,"src":72718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[24,72720,72721],{},"两个的结果都是1111 3333 2222",[24,72723,72724],{},[83,72725],{"alt":145,"src":72726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[24,72728,72729],{},[83,72730],{"alt":145,"src":72731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[24,72733,72734],{},[83,72735],{"alt":145,"src":72736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[24,72738,72739],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[24,72741,72742],{},"工作流程：",[24,72744,72745],{},[83,72746],{"alt":145,"src":72747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[24,72749,72750],{},[83,72751],{"alt":145,"src":72752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[24,72754,72755],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[24,72757,72758],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[19,72760,72762],{"id":72761},"_343-location对象","3.4.3 location对象",[24,72764,72765],{},"location对象属于window这个全局对象下的，可以 省略window",[24,72767,72768],{},[83,72769],{"alt":145,"src":72770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[24,72772,72773],{},"href可以跳转页面",[125,72775,72776],{},[45,72777,72778],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[24,72780,72781],{},"search得到提交信息之后网站后边的地址",[24,72783,72784],{},[83,72785],{"alt":145,"src":72786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[24,72788,72789],{},[83,72790],{"alt":145,"src":72791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[125,72793,72794],{"start":193},[45,72795,72796],{},"hash:这个获取单页面应用#后边的地址",[24,72798,72799],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[24,72801,72802],{},[83,72803],{"alt":145,"src":72804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[140,72806,72808],{"className":54765,"code":72807,"language":54767,"meta":145,"style":145},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[48,72809,72810,72830,72850],{"__ignoreMap":145},[149,72811,72812,72814,72816,72818,72820,72823,72826,72828],{"class":151,"line":152},[149,72813,587],{"class":155},[149,72815,2102],{"class":159},[149,72817,62746],{"class":162},[149,72819,166],{"class":155},[149,72821,72822],{"class":169},"\"#\u002Fmy\"",[149,72824,72825],{"class":155},">我的\u003C\u002F",[149,72827,2102],{"class":159},[149,72829,190],{"class":155},[149,72831,72832,72834,72836,72838,72840,72843,72846,72848],{"class":151,"line":193},[149,72833,587],{"class":155},[149,72835,2102],{"class":159},[149,72837,62746],{"class":162},[149,72839,166],{"class":155},[149,72841,72842],{"class":169},"\"#\u002Ffriend\"",[149,72844,72845],{"class":155},">关注\u003C\u002F",[149,72847,2102],{"class":159},[149,72849,190],{"class":155},[149,72851,72852,72854,72856,72858,72860,72863,72866,72868],{"class":151,"line":235},[149,72853,587],{"class":155},[149,72855,2102],{"class":159},[149,72857,62746],{"class":162},[149,72859,166],{"class":155},[149,72861,72862],{"class":169},"\"#\u002Fdownload\"",[149,72864,72865],{"class":155},">下载\u003C\u002F",[149,72867,2102],{"class":159},[149,72869,190],{"class":155},[24,72871,72872],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[125,72874,72875],{"start":235},[45,72876,72877,72878,72880,72881,72883],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55414,72879],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55414,72882],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[19,72885,72887],{"id":72886},"_345-navigator对象","3.4.5 navigator对象",[24,72889,72890],{},[83,72891],{"alt":145,"src":72892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[140,72894,72898],{"className":72895,"code":72896,"language":72897,"meta":145,"style":145},"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",[48,72899,72900,72905,72916,72928,72933,72984,73025,73030,73043,73055,73060],{"__ignoreMap":145},[149,72901,72902],{"class":151,"line":152},[149,72903,72904],{"class":295},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[149,72906,72907,72909,72911,72913],{"class":151,"line":193},[149,72908,2090],{"class":325},[149,72910,319],{"class":155},[149,72912,56144],{"class":325},[149,72914,72915],{"class":155}," () { \n",[149,72917,72918,72920,72923,72925],{"class":151,"line":235},[149,72919,8508],{"class":325},[149,72921,72922],{"class":309}," userAgent",[149,72924,15277],{"class":325},[149,72926,72927],{"class":155}," navigator.userAgent \n",[149,72929,72930],{"class":151,"line":340},[149,72931,72932],{"class":295},"\u002F\u002F 验证是否为Android或iPhone \n",[149,72934,72935,72937,72940,72942,72945,72948,72950,72952,72955,72957,72960,72964,72966,72968,72970,72973,72975,72977,72979,72981],{"class":151,"line":346},[149,72936,8508],{"class":325},[149,72938,72939],{"class":309}," android",[149,72941,15277],{"class":325},[149,72943,72944],{"class":155}," userAgent.",[149,72946,72947],{"class":162},"match",[149,72949,319],{"class":155},[149,72951,2447],{"class":169},[149,72953,72954],{"class":49683},"(Android);",[149,72956,2845],{"class":325},[149,72958,72959],{"class":309},"[\\s",[149,72961,72963],{"class":72962},"snhLl","\\\u002F",[149,72965,2799],{"class":309},[149,72967,2344],{"class":325},[149,72969,319],{"class":49683},[149,72971,72972],{"class":309},"[\\d.]",[149,72974,2344],{"class":325},[149,72976,2292],{"class":49683},[149,72978,2845],{"class":325},[149,72980,2447],{"class":169},[149,72982,72983],{"class":155},") \n",[149,72985,72986,72988,72991,72993,72995,72997,72999,73001,73004,73007,73010,73012,73014,73017,73019,73021,73023],{"class":151,"line":352},[149,72987,8508],{"class":325},[149,72989,72990],{"class":309}," iphone",[149,72992,15277],{"class":325},[149,72994,72944],{"class":155},[149,72996,72947],{"class":162},[149,72998,319],{"class":155},[149,73000,2447],{"class":169},[149,73002,73003],{"class":49683},"(iPhone",[149,73005,73006],{"class":309},"\\s",[149,73008,73009],{"class":49683},"OS)",[149,73011,73006],{"class":309},[149,73013,319],{"class":49683},[149,73015,73016],{"class":309},"[\\d_]",[149,73018,2344],{"class":325},[149,73020,2292],{"class":49683},[149,73022,2447],{"class":169},[149,73024,72983],{"class":155},[149,73026,73027],{"class":151,"line":1021},[149,73028,73029],{"class":295},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[149,73031,73032,73034,73037,73040],{"class":151,"line":1035},[149,73033,3255],{"class":325},[149,73035,73036],{"class":155}," (android ",[149,73038,73039],{"class":325},"||",[149,73041,73042],{"class":155}," iphone) { \n",[149,73044,73045,73048,73050,73053],{"class":151,"line":1054},[149,73046,73047],{"class":155},"location.href ",[149,73049,166],{"class":325},[149,73051,73052],{"class":169}," 'http:\u002F\u002Fm.itcast.cn'",[149,73054,4393],{"class":155},[149,73056,73057],{"class":151,"line":1072},[149,73058,73059],{"class":155},"} \n",[149,73061,73062],{"class":151,"line":1090},[149,73063,73064],{"class":155},"})()\n",[19,73066,73068],{"id":73067},"_346-histroy对象","3.4.6 histroy对象",[24,73070,73071],{},[83,73072],{"alt":145,"src":73073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[24,73075,73076],{},"浏览器地址的前进与后退!!!",[24,73078,73079],{},"history.back() 等效于 history.go(-1)",[24,73081,73082],{},"history.forward() 等效于 history.go(1)",[14,73084,73086],{"id":73085},"_35-本地存储","3.5 本地存储",[125,73088,73089,73092,73095],{},[45,73090,73091],{},"数据存储在用户浏览器中",[45,73093,73094],{},"设置、读取方便、甚至页面刷新不丢失数据",[45,73096,73097],{},"容量较大，sessionStorage和localStorage约 5M 左右",[19,73099,73101],{"id":73100},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[24,73103,73104],{},"只能存储字符串",[24,73106,73107],{},[83,73108],{"alt":145,"src":73109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[24,73111,73112],{},[83,73113],{"alt":145,"src":73114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[24,73116,73117],{},"键值对要加引号,不然就会当变量来看了",[24,73119,73120],{},"localStorage.setItem('uname', 'pink')",[24,73122,73123],{},"刷新之后信息不再丢失",[24,73125,73126],{},"操作key,value会跟着变",[24,73128,73129],{},"删除只删除键就可以,即名字",[24,73131,73120],{},[24,73133,73134],{},"改:",[24,73136,73137],{},"localStorage.setItem('uname','red')",[24,73139,73140],{},"有这个键就是改,没有这个键就是改",[24,73142,73143],{},[83,73144],{"alt":145,"src":73145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[24,73147,73148],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[24,73150,73151],{},[83,73152],{"alt":145,"src":73153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[24,73155,73156],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[19,73158,73160],{"id":73159},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[24,73162,73163],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[24,73165,73166],{},"特性:",[125,73168,73169,73172,73175,73178],{},[45,73170,73171],{},"生命周期为关闭浏览器窗口",[45,73173,73174],{},"在同一个窗口(页面)下数据可以共享",[45,73176,73177],{},"以键值对的形式存储使用",[45,73179,73180],{},"用法跟localStorage 基本相同",[19,73182,73184],{"id":73183},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[24,73186,73187],{},"本地只能存储字符串,无法直接存储复杂数据类型",[140,73189,73191],{"className":54765,"code":73190,"language":54767,"meta":145,"style":145},"\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",[48,73192,73193,73201,73206,73211,73216,73221,73225,73230,73235],{"__ignoreMap":145},[149,73194,73195,73197,73199],{"class":151,"line":152},[149,73196,156],{"class":155},[149,73198,53512],{"class":159},[149,73200,190],{"class":155},[149,73202,73203],{"class":151,"line":193},[149,73204,73205],{"class":155},"    const obj = {\n",[149,73207,73208],{"class":151,"line":235},[149,73209,73210],{"class":155},"      uname: 'pink老师',\n",[149,73212,73213],{"class":151,"line":340},[149,73214,73215],{"class":155},"      age: 18,\n",[149,73217,73218],{"class":151,"line":346},[149,73219,73220],{"class":155},"      gender: '女'\n",[149,73222,73223],{"class":151,"line":352},[149,73224,3906],{"class":155},[149,73226,73227],{"class":151,"line":1021},[149,73228,73229],{"class":155},"    \u002F\u002F 存储复杂数据类型\n",[149,73231,73232],{"class":151,"line":1035},[149,73233,73234],{"class":155},"    localStorage.setItem('obj', obj)\n",[149,73236,73237,73239,73241],{"class":151,"line":1054},[149,73238,54115],{"class":155},[149,73240,53512],{"class":159},[149,73242,190],{"class":155},[24,73244,73245],{},[83,73246],{"alt":145,"src":73247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[24,73249,73250],{},"如果获取一下数据:",[24,73252,73253],{},"log(localStorage.getItem('obj'))",[24,73255,73256],{},[83,73257],{"alt":145,"src":73258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[24,73260,73261],{},"发现直接存对象是使用不了的!!!",[120,73263,73265],{"id":73264},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[24,73267,73268],{},[83,73269],{"alt":145,"src":73270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[140,73272,73274],{"className":52339,"code":73273,"language":52341,"meta":145,"style":145},"\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",[48,73275,73276,73284,73294,73304,73313,73321,73325,73329,73355,73374,73382,73386,73391,73396],{"__ignoreMap":145},[149,73277,73278,73280,73282],{"class":151,"line":152},[149,73279,156],{"class":155},[149,73281,53512],{"class":159},[149,73283,190],{"class":155},[149,73285,73286,73288,73290,73292],{"class":151,"line":193},[149,73287,12935],{"class":325},[149,73289,71655],{"class":309},[149,73291,15277],{"class":325},[149,73293,304],{"class":155},[149,73295,73296,73299,73302],{"class":151,"line":235},[149,73297,73298],{"class":155},"      uname: ",[149,73300,73301],{"class":169},"'pink老师'",[149,73303,33172],{"class":155},[149,73305,73306,73309,73311],{"class":151,"line":340},[149,73307,73308],{"class":155},"      age: ",[149,73310,2513],{"class":309},[149,73312,33172],{"class":155},[149,73314,73315,73318],{"class":151,"line":346},[149,73316,73317],{"class":155},"      gender: ",[149,73319,73320],{"class":169},"'女'\n",[149,73322,73323],{"class":151,"line":352},[149,73324,3906],{"class":155},[149,73326,73327],{"class":151,"line":1021},[149,73328,73229],{"class":295},[149,73330,73331,73334,73337,73339,73342,73344,73347,73349,73352],{"class":151,"line":1035},[149,73332,73333],{"class":155},"  localStorage.",[149,73335,73336],{"class":162},"setItem",[149,73338,319],{"class":155},[149,73340,73341],{"class":169},"'obj'",[149,73343,329],{"class":155},[149,73345,73346],{"class":309},"JSON",[149,73348,2421],{"class":155},[149,73350,73351],{"class":162},"stringify",[149,73353,73354],{"class":155},"(obj))\n",[149,73356,73357,73360,73362,73365,73368,73370,73372],{"class":151,"line":1054},[149,73358,73359],{"class":155},"  console.",[149,73361,59938],{"class":162},[149,73363,73364],{"class":155},"(localStorage.",[149,73366,73367],{"class":162},"getItem",[149,73369,319],{"class":155},[149,73371,73341],{"class":169},[149,73373,32203],{"class":155},[149,73375,73376,73378,73380],{"class":151,"line":1072},[149,73377,54115],{"class":155},[149,73379,53512],{"class":159},[149,73381,190],{"class":155},[149,73383,73384],{"class":151,"line":1090},[149,73385,72305],{"class":155},[149,73387,73388],{"class":151,"line":1633},[149,73389,73390],{"class":155},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[149,73392,73393],{"class":151,"line":1644},[149,73394,73395],{"class":155},"  类型是字符串的\n",[149,73397,73398],{"class":151,"line":3348},[149,73399,73400],{"class":155},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[120,73402,73404],{"id":73403},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[24,73406,73407],{},[83,73408],{"alt":145,"src":73409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[24,73411,73412],{},[83,73413],{"alt":145,"src":73414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[140,73416,73418],{"className":54765,"code":73417,"language":54767,"meta":145,"style":145},"  \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",[48,73419,73420,73428,73432,73436,73440,73444,73448,73453,73458,73463,73468,73473,73478,73483,73488],{"__ignoreMap":145},[149,73421,73422,73424,73426],{"class":151,"line":152},[149,73423,587],{"class":155},[149,73425,53512],{"class":159},[149,73427,190],{"class":155},[149,73429,73430],{"class":151,"line":193},[149,73431,73205],{"class":155},[149,73433,73434],{"class":151,"line":235},[149,73435,73210],{"class":155},[149,73437,73438],{"class":151,"line":340},[149,73439,73215],{"class":155},[149,73441,73442],{"class":151,"line":346},[149,73443,73220],{"class":155},[149,73445,73446],{"class":151,"line":352},[149,73447,3906],{"class":155},[149,73449,73450],{"class":151,"line":1021},[149,73451,73452],{"class":155},"    \u002F\u002F 1.存储复杂数据类型\n",[149,73454,73455],{"class":151,"line":1035},[149,73456,73457],{"class":155},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[149,73459,73460],{"class":151,"line":1054},[149,73461,73462],{"class":155},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[149,73464,73465],{"class":151,"line":1072},[149,73466,73467],{"class":155},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[149,73469,73470],{"class":151,"line":1090},[149,73471,73472],{"class":155},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[149,73474,73475],{"class":151,"line":1633},[149,73476,73477],{"class":155},"    \u002F\u002F 取\n",[149,73479,73480],{"class":151,"line":1644},[149,73481,73482],{"class":155},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[149,73484,73485],{"class":151,"line":3348},[149,73486,73487],{"class":155},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[149,73489,73490,73492,73494],{"class":151,"line":3362},[149,73491,54115],{"class":155},[149,73493,53512],{"class":159},[149,73495,190],{"class":155},[24,73497,73498],{},[83,73499],{"alt":145,"src":73500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[19,73502,73504],{"id":73503},"_356-数组map方法","3.5.6 数组map方法",[24,73506,73507],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[24,73509,73510],{},[83,73511],{"alt":145,"src":73512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[24,73514,73515],{},[83,73516],{"alt":145,"src":73517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[24,73519,73520,73523],{},[31,73521,73522],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[24,73525,73526],{},"map有返回值，但是forEach没有返回值",[24,73528,73529],{},"map是个方法。用的时候要加 ()",[24,73531,73532],{},"map返回的是一个数组",[19,73534,73536],{"id":73535},"_357-数组中join方法","3.5.7 数组中join方法",[24,73538,73539],{},[83,73540],{"alt":145,"src":73541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[24,73543,73544],{},"类似于python中拼接字符串一样！",[125,73546,73547,73550,73553],{},[45,73548,73549],{},"小括号为空则逗号分开",[45,73551,73552],{},"小括号为空字符串 ''，则元素之间没有分隔符",[45,73554,73555],{},"小括号用啥符号就用进行分割",[19,73557,73559],{"id":73558},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[125,73561,73562,73565,73568,73571,73574],{},[45,73563,73564],{},"记住本地时间获取快速方式：new Date().toDateString()",[45,73566,73567],{},"尽量减少DOM操作，用好map+join的渲染方式",[45,73569,73570],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[45,73572,73573],{},"return可以实现函数的结束",[45,73575,73576],{},"禁止跳转是 preventDefault() 不要忘记",[140,73578,73580],{"className":52339,"code":73579,"language":52341,"meta":145,"style":145},"\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",[48,73581,73582,73592,73606,73610,73618,73632,73652,73664,73672,73678,73688,73698,73702,73706,73712,73722,73734,73738,73742,73749,73761,73775,73785,73789,73793,73800,73807,73814,73826,73838,73848,73860,73864,73868,73875,73882,73894,73906,73916,73928,73958,73962,73966,73973,73985,73997,74021,74031,74041,74045,74049,74057,74068,74080,74092,74104,74121,74133,74145,74149,74153,74160,74172,74184,74196,74207,74225,74238,74250,74274,74285,74289,74293,74301,74311,74315,74319,74325,74337,74348,74358,74362,74366,74372,74394,74398,74402,74408,74414,74426,74436,74448,74478,74491,74508,74512,74516,74527,74549,74559,74563,74567,74580,74590,74602,74614,74626,74638,74648,74658,74668,74679,74692,74696,74704,74712,74716,74724,74737,74757,74790,74823,74856,74882,74900,74918,74926,74952,74970,74988,75006,75024,75042,75050,75058,75076,75084,75113,75121,75129,75137,75150,75162,75174,75186,75198,75210,75223,75235,75243,75251,75259,75264,75269,75273,75277,75281,75285,75289,75293,75298,75303,75308,75313,75321,75329,75337,75342,75347,75352,75357,75362,75367,75372,75377,75382,75387,75392,75397,75402,75407,75411,75416,75421,75431,75440,75444,75449,75458,75474,75516,75556,75595,75660,75668,75672,75677,75695,75703,75708,75713,75743,75749,75754,75767,75779,75791,75803,75815,75827,75839,75843,75853,75857,75862,75867,75871,75880,75884,75889,75894,75913,75918,75938,75942,75947,75951,75956,75974,75992,76010,76029,76048,76067,76072,76078,76099,76105,76114,76120,76126,76132,76159,76172,76177,76187,76193,76199,76205,76211,76216,76222,76228,76234,76240,76273,76278,76283,76288,76293,76299,76305,76311,76322,76327,76333,76340,76354,76360,76384,76389,76394,76400,76406,76427,76433,76446,76452,76458,76464,76470,76475,76481,76487,76493,76511,76525,76531,76539,76545,76567,76572,76577,76582,76587,76592,76601,76610,76615],{"__ignoreMap":145},[149,73583,73584,73586,73588,73590],{"class":151,"line":152},[149,73585,53003],{"class":155},[149,73587,53006],{"class":159},[149,73589,53009],{"class":162},[149,73591,190],{"class":155},[149,73593,73594,73596,73598,73600,73602,73604],{"class":151,"line":193},[149,73595,156],{"class":155},[149,73597,52341],{"class":159},[149,73599,53020],{"class":162},[149,73601,166],{"class":155},[149,73603,53025],{"class":169},[149,73605,190],{"class":155},[149,73607,73608],{"class":151,"line":235},[149,73609,4119],{"emptyLinePlaceholder":1800},[149,73611,73612,73614,73616],{"class":151,"line":340},[149,73613,156],{"class":155},[149,73615,53038],{"class":159},[149,73617,190],{"class":155},[149,73619,73620,73622,73624,73626,73628,73630],{"class":151,"line":346},[149,73621,587],{"class":155},[149,73623,53048],{"class":159},[149,73625,53051],{"class":162},[149,73627,166],{"class":155},[149,73629,53056],{"class":169},[149,73631,190],{"class":155},[149,73633,73634,73636,73638,73640,73642,73644,73646,73648,73650],{"class":151,"line":352},[149,73635,587],{"class":155},[149,73637,53048],{"class":159},[149,73639,515],{"class":162},[149,73641,166],{"class":155},[149,73643,53095],{"class":169},[149,73645,53075],{"class":162},[149,73647,166],{"class":155},[149,73649,53102],{"class":169},[149,73651,190],{"class":155},[149,73653,73654,73656,73658,73660,73662],{"class":151,"line":1021},[149,73655,587],{"class":155},[149,73657,53111],{"class":159},[149,73659,53114],{"class":155},[149,73661,53111],{"class":159},[149,73663,190],{"class":155},[149,73665,73666,73668,73670],{"class":151,"line":1035},[149,73667,587],{"class":155},[149,73669,1783],{"class":159},[149,73671,190],{"class":155},[149,73673,73674,73676],{"class":151,"line":1054},[149,73675,8119],{"class":159},[149,73677,304],{"class":155},[149,73679,73680,73682,73684,73686],{"class":151,"line":1072},[149,73681,56390],{"class":309},[149,73683,313],{"class":155},[149,73685,2056],{"class":309},[149,73687,841],{"class":155},[149,73689,73690,73692,73694,73696],{"class":151,"line":1090},[149,73691,56401],{"class":309},[149,73693,313],{"class":155},[149,73695,2056],{"class":309},[149,73697,841],{"class":155},[149,73699,73700],{"class":151,"line":1633},[149,73701,3906],{"class":155},[149,73703,73704],{"class":151,"line":1644},[149,73705,4119],{"emptyLinePlaceholder":1800},[149,73707,73708,73710],{"class":151,"line":3348},[149,73709,58971],{"class":159},[149,73711,304],{"class":155},[149,73713,73714,73716,73718,73720],{"class":151,"line":3362},[149,73715,58978],{"class":309},[149,73717,313],{"class":155},[149,73719,53293],{"class":309},[149,73721,841],{"class":155},[149,73723,73724,73726,73728,73730,73732],{"class":151,"line":3367},[149,73725,63765],{"class":309},[149,73727,313],{"class":155},[149,73729,2561],{"class":309},[149,73731,326],{"class":325},[149,73733,841],{"class":155},[149,73735,73736],{"class":151,"line":3373},[149,73737,3906],{"class":155},[149,73739,73740],{"class":151,"line":3394},[149,73741,4119],{"emptyLinePlaceholder":1800},[149,73743,73744,73747],{"class":151,"line":3399},[149,73745,73746],{"class":162},"    .info",[149,73748,304],{"class":155},[149,73750,73751,73753,73755,73757,73759],{"class":151,"line":3413},[149,73752,56466],{"class":309},[149,73754,313],{"class":155},[149,73756,53192],{"class":309},[149,73758,326],{"class":325},[149,73760,841],{"class":155},[149,73762,73763,73765,73767,73769,73771,73773],{"class":151,"line":3418},[149,73764,56401],{"class":309},[149,73766,313],{"class":155},[149,73768,2309],{"class":309},[149,73770,326],{"class":325},[149,73772,53257],{"class":309},[149,73774,841],{"class":155},[149,73776,73777,73779,73781,73783],{"class":151,"line":3447},[149,73778,58978],{"class":309},[149,73780,313],{"class":155},[149,73782,53293],{"class":309},[149,73784,841],{"class":155},[149,73786,73787],{"class":151,"line":3452},[149,73788,3906],{"class":155},[149,73790,73791],{"class":151,"line":3469},[149,73792,4119],{"emptyLinePlaceholder":1800},[149,73794,73795,73798],{"class":151,"line":3474},[149,73796,73797],{"class":162},"    .uname",[149,73799,33172],{"class":155},[149,73801,73802,73805],{"class":151,"line":3479},[149,73803,73804],{"class":162},"    .age",[149,73806,33172],{"class":155},[149,73808,73809,73812],{"class":151,"line":3484},[149,73810,73811],{"class":162},"    .salary",[149,73813,304],{"class":155},[149,73815,73816,73818,73820,73822,73824],{"class":151,"line":3498},[149,73817,56466],{"class":309},[149,73819,313],{"class":155},[149,73821,322],{"class":309},[149,73823,326],{"class":325},[149,73825,841],{"class":155},[149,73827,73828,73830,73832,73834,73836],{"class":151,"line":3503},[149,73829,56480],{"class":309},[149,73831,313],{"class":155},[149,73833,2561],{"class":309},[149,73835,326],{"class":325},[149,73837,841],{"class":155},[149,73839,73840,73842,73844,73846],{"class":151,"line":4296},[149,73841,63469],{"class":309},[149,73843,313],{"class":155},[149,73845,56432],{"class":309},[149,73847,841],{"class":155},[149,73849,73850,73852,73854,73856,73858],{"class":151,"line":4310},[149,73851,63439],{"class":309},[149,73853,313],{"class":155},[149,73855,2438],{"class":309},[149,73857,326],{"class":325},[149,73859,841],{"class":155},[149,73861,73862],{"class":151,"line":4318},[149,73863,3906],{"class":155},[149,73865,73866],{"class":151,"line":4323},[149,73867,4119],{"emptyLinePlaceholder":1800},[149,73869,73870,73873],{"class":151,"line":4329},[149,73871,73872],{"class":162},"    .gender",[149,73874,33172],{"class":155},[149,73876,73877,73880],{"class":151,"line":4335},[149,73878,73879],{"class":162},"    .city",[149,73881,304],{"class":155},[149,73883,73884,73886,73888,73890,73892],{"class":151,"line":4340},[149,73885,56466],{"class":309},[149,73887,313],{"class":155},[149,73889,322],{"class":309},[149,73891,326],{"class":325},[149,73893,841],{"class":155},[149,73895,73896,73898,73900,73902,73904],{"class":151,"line":9663},[149,73897,56480],{"class":309},[149,73899,313],{"class":155},[149,73901,2686],{"class":309},[149,73903,326],{"class":325},[149,73905,841],{"class":155},[149,73907,73908,73910,73912,73914],{"class":151,"line":9687},[149,73909,63469],{"class":309},[149,73911,313],{"class":155},[149,73913,56432],{"class":309},[149,73915,841],{"class":155},[149,73917,73918,73920,73922,73924,73926],{"class":151,"line":9692},[149,73919,63439],{"class":309},[149,73921,313],{"class":155},[149,73923,2438],{"class":309},[149,73925,326],{"class":325},[149,73927,841],{"class":155},[149,73929,73930,73932,73934,73936,73938,73940,73943,73945,73947,73949,73952,73954,73956],{"class":151,"line":9698},[149,73931,63666],{"class":309},[149,73933,313],{"class":155},[149,73935,830],{"class":309},[149,73937,326],{"class":325},[149,73939,835],{"class":309},[149,73941,73942],{"class":309}," rgb",[149,73944,319],{"class":155},[149,73946,3442],{"class":309},[149,73948,329],{"class":155},[149,73950,73951],{"class":309},"197",[149,73953,329],{"class":155},[149,73955,73951],{"class":309},[149,73957,337],{"class":155},[149,73959,73960],{"class":151,"line":9725},[149,73961,3906],{"class":155},[149,73963,73964],{"class":151,"line":9730},[149,73965,4119],{"emptyLinePlaceholder":1800},[149,73967,73968,73971],{"class":151,"line":9736},[149,73969,73970],{"class":159},"    button",[149,73972,304],{"class":155},[149,73974,73975,73977,73979,73981,73983],{"class":151,"line":9748},[149,73976,56480],{"class":309},[149,73978,313],{"class":155},[149,73980,2686],{"class":309},[149,73982,326],{"class":325},[149,73984,841],{"class":155},[149,73986,73987,73989,73991,73993,73995],{"class":151,"line":9760},[149,73988,56466],{"class":309},[149,73990,313],{"class":155},[149,73992,2347],{"class":309},[149,73994,326],{"class":325},[149,73996,841],{"class":155},[149,73998,73999,74001,74003,74006,74008,74010,74012,74015,74017,74019],{"class":151,"line":9772},[149,74000,56579],{"class":309},[149,74002,313],{"class":155},[149,74004,74005],{"class":309},"rgb",[149,74007,319],{"class":155},[149,74009,2828],{"class":309},[149,74011,329],{"class":155},[149,74013,74014],{"class":309},"187",[149,74016,329],{"class":155},[149,74018,2163],{"class":309},[149,74020,337],{"class":155},[149,74022,74023,74025,74027,74029],{"class":151,"line":11430},[149,74024,59108],{"class":309},[149,74026,313],{"class":155},[149,74028,62533],{"class":309},[149,74030,841],{"class":155},[149,74032,74033,74035,74037,74039],{"class":151,"line":11455},[149,74034,63666],{"class":309},[149,74036,313],{"class":155},[149,74038,2056],{"class":309},[149,74040,841],{"class":155},[149,74042,74043],{"class":151,"line":11478},[149,74044,3906],{"class":155},[149,74046,74047],{"class":151,"line":11502},[149,74048,4119],{"emptyLinePlaceholder":1800},[149,74050,74051,74053,74055],{"class":151,"line":11507},[149,74052,73970],{"class":159},[149,74054,53388],{"class":159},[149,74056,304],{"class":155},[149,74058,74059,74061,74063,74066],{"class":151,"line":11512},[149,74060,56704],{"class":309},[149,74062,313],{"class":155},[149,74064,74065],{"class":309},"inline-block",[149,74067,841],{"class":155},[149,74069,74070,74072,74074,74076,74078],{"class":151,"line":11517},[149,74071,56466],{"class":309},[149,74073,313],{"class":155},[149,74075,2309],{"class":309},[149,74077,326],{"class":325},[149,74079,841],{"class":155},[149,74081,74082,74084,74086,74088,74090],{"class":151,"line":11526},[149,74083,56480],{"class":309},[149,74085,313],{"class":155},[149,74087,2309],{"class":309},[149,74089,326],{"class":325},[149,74091,841],{"class":155},[149,74093,74094,74096,74098,74100,74102],{"class":151,"line":11531},[149,74095,59051],{"class":309},[149,74097,313],{"class":155},[149,74099,2335],{"class":309},[149,74101,326],{"class":325},[149,74103,841],{"class":155},[149,74105,74106,74108,74110,74112,74114,74116,74119],{"class":151,"line":11537},[149,74107,63666],{"class":309},[149,74109,313],{"class":155},[149,74111,830],{"class":309},[149,74113,326],{"class":325},[149,74115,835],{"class":309},[149,74117,74118],{"class":309}," #fff",[149,74120,841],{"class":155},[149,74122,74123,74125,74127,74129,74131],{"class":151,"line":11558},[149,74124,56829],{"class":309},[149,74126,313],{"class":155},[149,74128,2182],{"class":309},[149,74130,326],{"class":325},[149,74132,841],{"class":155},[149,74134,74135,74137,74139,74141,74143],{"class":151,"line":11564},[149,74136,63439],{"class":309},[149,74138,313],{"class":155},[149,74140,830],{"class":309},[149,74142,326],{"class":325},[149,74144,841],{"class":155},[149,74146,74147],{"class":151,"line":11578},[149,74148,3906],{"class":155},[149,74150,74151],{"class":151,"line":11584},[149,74152,4119],{"emptyLinePlaceholder":1800},[149,74154,74155,74158],{"class":151,"line":11611},[149,74156,74157],{"class":162},"    .total",[149,74159,304],{"class":155},[149,74161,74162,74164,74166,74168,74170],{"class":151,"line":11620},[149,74163,56466],{"class":309},[149,74165,313],{"class":155},[149,74167,63318],{"class":309},[149,74169,326],{"class":325},[149,74171,841],{"class":155},[149,74173,74174,74176,74178,74180,74182],{"class":151,"line":11626},[149,74175,56480],{"class":309},[149,74177,313],{"class":155},[149,74179,2264],{"class":309},[149,74181,326],{"class":325},[149,74183,841],{"class":155},[149,74185,74186,74188,74190,74192,74194],{"class":151,"line":11634},[149,74187,59051],{"class":309},[149,74189,313],{"class":155},[149,74191,2264],{"class":309},[149,74193,326],{"class":325},[149,74195,841],{"class":155},[149,74197,74198,74200,74202,74205],{"class":151,"line":11639},[149,74199,58978],{"class":309},[149,74201,313],{"class":155},[149,74203,74204],{"class":309},"right",[149,74206,841],{"class":155},[149,74208,74209,74211,74213,74215,74217,74219,74221,74223],{"class":151,"line":18314},[149,74210,56401],{"class":309},[149,74212,313],{"class":155},[149,74214,2264],{"class":309},[149,74216,326],{"class":325},[149,74218,53257],{"class":309},[149,74220,3757],{"class":309},[149,74222,326],{"class":325},[149,74224,841],{"class":155},[149,74226,74227,74230,74232,74234,74236],{"class":151,"line":18320},[149,74228,74229],{"class":309},"      padding-right",[149,74231,313],{"class":155},[149,74233,2309],{"class":309},[149,74235,326],{"class":325},[149,74237,841],{"class":155},[149,74239,74240,74242,74244,74246,74248],{"class":151,"line":18343},[149,74241,56617],{"class":309},[149,74243,313],{"class":155},[149,74245,2386],{"class":309},[149,74247,326],{"class":325},[149,74249,841],{"class":155},[149,74251,74252,74254,74256,74258,74260,74263,74265,74268,74270,74272],{"class":151,"line":18349},[149,74253,56579],{"class":309},[149,74255,313],{"class":155},[149,74257,74005],{"class":309},[149,74259,319],{"class":155},[149,74261,74262],{"class":309},"237",[149,74264,329],{"class":155},[149,74266,74267],{"class":309},"235",[149,74269,329],{"class":155},[149,74271,74267],{"class":309},[149,74273,337],{"class":155},[149,74275,74276,74279,74281,74283],{"class":151,"line":18372},[149,74277,74278],{"class":309},"      box-sizing",[149,74280,313],{"class":155},[149,74282,62196],{"class":309},[149,74284,841],{"class":155},[149,74286,74287],{"class":151,"line":18386},[149,74288,3906],{"class":155},[149,74290,74291],{"class":151,"line":18406},[149,74292,4119],{"emptyLinePlaceholder":1800},[149,74294,74295,74297,74299],{"class":151,"line":18412},[149,74296,74157],{"class":162},[149,74298,53388],{"class":159},[149,74300,304],{"class":155},[149,74302,74303,74305,74307,74309],{"class":151,"line":18423},[149,74304,59108],{"class":309},[149,74306,313],{"class":155},[149,74308,989],{"class":309},[149,74310,841],{"class":155},[149,74312,74313],{"class":151,"line":18446},[149,74314,3906],{"class":155},[149,74316,74317],{"class":151,"line":18468},[149,74318,4119],{"emptyLinePlaceholder":1800},[149,74320,74321,74323],{"class":151,"line":18473},[149,74322,66710],{"class":159},[149,74324,304],{"class":155},[149,74326,74327,74329,74331,74333,74335],{"class":151,"line":18479},[149,74328,56466],{"class":309},[149,74330,313],{"class":155},[149,74332,63318],{"class":309},[149,74334,326],{"class":325},[149,74336,841],{"class":155},[149,74338,74339,74341,74343,74346],{"class":151,"line":18493},[149,74340,56401],{"class":309},[149,74342,313],{"class":155},[149,74344,74345],{"class":309},"auto",[149,74347,841],{"class":155},[149,74349,74350,74352,74354,74356],{"class":151,"line":18506},[149,74351,66717],{"class":309},[149,74353,313],{"class":155},[149,74355,66722],{"class":309},[149,74357,841],{"class":155},[149,74359,74360],{"class":151,"line":18511},[149,74361,3906],{"class":155},[149,74363,74364],{"class":151,"line":18525},[149,74365,4119],{"emptyLinePlaceholder":1800},[149,74367,74368,74370],{"class":151,"line":18530},[149,74369,66802],{"class":159},[149,74371,304],{"class":155},[149,74373,74374,74376,74378,74380,74382,74384,74386,74388,74390,74392],{"class":151,"line":18536},[149,74375,56579],{"class":309},[149,74377,313],{"class":155},[149,74379,74005],{"class":309},[149,74381,319],{"class":155},[149,74383,74262],{"class":309},[149,74385,329],{"class":155},[149,74387,74267],{"class":309},[149,74389,329],{"class":155},[149,74391,74267],{"class":309},[149,74393,337],{"class":155},[149,74395,74396],{"class":151,"line":18541},[149,74397,3906],{"class":155},[149,74399,74400],{"class":151,"line":18555},[149,74401,4119],{"emptyLinePlaceholder":1800},[149,74403,74404,74406],{"class":151,"line":18560},[149,74405,66802],{"class":159},[149,74407,33172],{"class":155},[149,74409,74410,74412],{"class":151,"line":18565},[149,74411,66868],{"class":159},[149,74413,304],{"class":155},[149,74415,74416,74418,74420,74422,74424],{"class":151,"line":18579},[149,74417,56480],{"class":309},[149,74419,313],{"class":155},[149,74421,2137],{"class":309},[149,74423,326],{"class":325},[149,74425,841],{"class":155},[149,74427,74428,74430,74432,74434],{"class":151,"line":18591},[149,74429,58978],{"class":309},[149,74431,313],{"class":155},[149,74433,1566],{"class":309},[149,74435,841],{"class":155},[149,74437,74438,74440,74442,74444,74446],{"class":151,"line":18596},[149,74439,56617],{"class":309},[149,74441,313],{"class":155},[149,74443,2412],{"class":309},[149,74445,326],{"class":325},[149,74447,841],{"class":155},[149,74449,74450,74452,74454,74456,74458,74460,74462,74464,74467,74469,74472,74474,74476],{"class":151,"line":18609},[149,74451,63666],{"class":309},[149,74453,313],{"class":155},[149,74455,830],{"class":309},[149,74457,326],{"class":325},[149,74459,835],{"class":309},[149,74461,73942],{"class":309},[149,74463,319],{"class":155},[149,74465,74466],{"class":309},"228",[149,74468,329],{"class":155},[149,74470,74471],{"class":309},"225",[149,74473,329],{"class":155},[149,74475,74471],{"class":309},[149,74477,337],{"class":155},[149,74479,74480,74483,74485,74487,74489],{"class":151,"line":18614},[149,74481,74482],{"class":309},"      padding-left",[149,74484,313],{"class":155},[149,74486,2182],{"class":309},[149,74488,326],{"class":325},[149,74490,841],{"class":155},[149,74492,74493,74495,74497,74499,74502,74504,74506],{"class":151,"line":18619},[149,74494,63549],{"class":309},[149,74496,313],{"class":155},[149,74498,1714],{"class":309},[149,74500,74501],{"class":309}," linear",[149,74503,63556],{"class":309},[149,74505,1720],{"class":325},[149,74507,841],{"class":155},[149,74509,74510],{"class":151,"line":18624},[149,74511,3906],{"class":155},[149,74513,74514],{"class":151,"line":18637},[149,74515,4119],{"emptyLinePlaceholder":1800},[149,74517,74518,74521,74523,74525],{"class":151,"line":18642},[149,74519,74520],{"class":159},"    tbody",[149,74522,71828],{"class":159},[149,74524,62630],{"class":162},[149,74526,304],{"class":155},[149,74528,74529,74531,74533,74535,74537,74539,74541,74543,74545,74547],{"class":151,"line":34339},[149,74530,56579],{"class":309},[149,74532,313],{"class":155},[149,74534,74005],{"class":309},[149,74536,319],{"class":155},[149,74538,74262],{"class":309},[149,74540,329],{"class":155},[149,74542,74267],{"class":309},[149,74544,329],{"class":155},[149,74546,74267],{"class":309},[149,74548,337],{"class":155},[149,74550,74551,74553,74555,74557],{"class":151,"line":34345},[149,74552,63714],{"class":309},[149,74554,313],{"class":155},[149,74556,63719],{"class":309},[149,74558,841],{"class":155},[149,74560,74561],{"class":151,"line":34351},[149,74562,3906],{"class":155},[149,74564,74565],{"class":151,"line":34357},[149,74566,4119],{"emptyLinePlaceholder":1800},[149,74568,74569,74571,74573,74576,74578],{"class":151,"line":34363},[149,74570,74520],{"class":159},[149,74572,71828],{"class":159},[149,74574,74575],{"class":159}," td",[149,74577,3123],{"class":159},[149,74579,304],{"class":155},[149,74581,74582,74584,74586,74588],{"class":151,"line":34374},[149,74583,56704],{"class":309},[149,74585,313],{"class":155},[149,74587,1394],{"class":309},[149,74589,841],{"class":155},[149,74591,74592,74594,74596,74598,74600],{"class":151,"line":34380},[149,74593,56466],{"class":309},[149,74595,313],{"class":155},[149,74597,2767],{"class":309},[149,74599,326],{"class":325},[149,74601,841],{"class":155},[149,74603,74604,74606,74608,74610,74612],{"class":151,"line":34400},[149,74605,56480],{"class":309},[149,74607,313],{"class":155},[149,74609,2686],{"class":309},[149,74611,326],{"class":325},[149,74613,841],{"class":155},[149,74615,74616,74618,74620,74622,74624],{"class":151,"line":34406},[149,74617,59051],{"class":309},[149,74619,313],{"class":155},[149,74621,2686],{"class":309},[149,74623,326],{"class":325},[149,74625,841],{"class":155},[149,74627,74628,74630,74632,74634,74636],{"class":151,"line":34417},[149,74629,63765],{"class":309},[149,74631,313],{"class":155},[149,74633,1045],{"class":309},[149,74635,326],{"class":325},[149,74637,841],{"class":155},[149,74639,74640,74642,74644,74646],{"class":151,"line":34423},[149,74641,59108],{"class":309},[149,74643,313],{"class":155},[149,74645,62533],{"class":309},[149,74647,841],{"class":155},[149,74649,74650,74652,74654,74656],{"class":151,"line":34429},[149,74651,58978],{"class":309},[149,74653,313],{"class":155},[149,74655,53293],{"class":309},[149,74657,841],{"class":155},[149,74659,74660,74662,74664,74666],{"class":151,"line":34435},[149,74661,65657],{"class":309},[149,74663,313],{"class":155},[149,74665,56432],{"class":309},[149,74667,841],{"class":155},[149,74669,74670,74672,74674,74677],{"class":151,"line":34441},[149,74671,56579],{"class":309},[149,74673,313],{"class":155},[149,74675,74676],{"class":309},"orange",[149,74678,841],{"class":155},[149,74680,74681,74683,74685,74688,74690],{"class":151,"line":34447},[149,74682,56829],{"class":309},[149,74684,313],{"class":155},[149,74686,74687],{"class":309},"12.5",[149,74689,326],{"class":325},[149,74691,841],{"class":155},[149,74693,74694],{"class":151,"line":34453},[149,74695,3906],{"class":155},[149,74697,74698,74700,74702],{"class":151,"line":34459},[149,74699,54115],{"class":155},[149,74701,1783],{"class":159},[149,74703,190],{"class":155},[149,74705,74706,74708,74710],{"class":151,"line":34479},[149,74707,665],{"class":155},[149,74709,53038],{"class":159},[149,74711,190],{"class":155},[149,74713,74714],{"class":151,"line":34485},[149,74715,4119],{"emptyLinePlaceholder":1800},[149,74717,74718,74720,74722],{"class":151,"line":34501},[149,74719,156],{"class":155},[149,74721,53499],{"class":159},[149,74723,190],{"class":155},[149,74725,74726,74728,74730,74733,74735],{"class":151,"line":34507},[149,74727,587],{"class":155},[149,74729,14],{"class":159},[149,74731,74732],{"class":155},">学生就业统计表\u003C\u002F",[149,74734,14],{"class":159},[149,74736,190],{"class":155},[149,74738,74739,74741,74743,74745,74747,74749,74751,74753,74755],{"class":151,"line":34521},[149,74740,587],{"class":155},[149,74742,564],{"class":159},[149,74744,55184],{"class":162},[149,74746,166],{"class":155},[149,74748,64352],{"class":169},[149,74750,70754],{"class":162},[149,74752,166],{"class":155},[149,74754,33482],{"class":169},[149,74756,190],{"class":155},[149,74758,74759,74761,74763,74765,74767,74769,74771,74773,74775,74777,74779,74782,74784,74786,74788],{"class":151,"line":34527},[149,74760,53045],{"class":155},[149,74762,504],{"class":159},[149,74764,507],{"class":162},[149,74766,166],{"class":155},[149,74768,512],{"class":169},[149,74770,515],{"class":162},[149,74772,166],{"class":155},[149,74774,70780],{"class":169},[149,74776,523],{"class":162},[149,74778,166],{"class":155},[149,74780,74781],{"class":169},"\"姓名\"",[149,74783,55184],{"class":162},[149,74785,166],{"class":155},[149,74787,70780],{"class":169},[149,74789,190],{"class":155},[149,74791,74792,74794,74796,74798,74800,74802,74804,74806,74808,74810,74812,74815,74817,74819,74821],{"class":151,"line":34542},[149,74793,53045],{"class":155},[149,74795,504],{"class":159},[149,74797,507],{"class":162},[149,74799,166],{"class":155},[149,74801,512],{"class":169},[149,74803,515],{"class":162},[149,74805,166],{"class":155},[149,74807,70808],{"class":169},[149,74809,523],{"class":162},[149,74811,166],{"class":155},[149,74813,74814],{"class":169},"\"年龄\"",[149,74816,55184],{"class":162},[149,74818,166],{"class":155},[149,74820,70808],{"class":169},[149,74822,190],{"class":155},[149,74824,74825,74827,74829,74831,74833,74835,74837,74839,74841,74843,74845,74848,74850,74852,74854],{"class":151,"line":34548},[149,74826,53045],{"class":155},[149,74828,504],{"class":159},[149,74830,507],{"class":162},[149,74832,166],{"class":155},[149,74834,512],{"class":169},[149,74836,515],{"class":162},[149,74838,166],{"class":155},[149,74840,70910],{"class":169},[149,74842,523],{"class":162},[149,74844,166],{"class":155},[149,74846,74847],{"class":169},"\"薪资\"",[149,74849,55184],{"class":162},[149,74851,166],{"class":155},[149,74853,70910],{"class":169},[149,74855,190],{"class":155},[149,74857,74858,74860,74862,74864,74866,74868,74870,74872,74874,74876,74878,74880],{"class":151,"line":34557},[149,74859,53045],{"class":155},[149,74861,70828],{"class":159},[149,74863,515],{"class":162},[149,74865,166],{"class":155},[149,74867,70835],{"class":169},[149,74869,16670],{"class":162},[149,74871,166],{"class":155},[149,74873,1382],{"class":169},[149,74875,55184],{"class":162},[149,74877,166],{"class":155},[149,74879,70835],{"class":169},[149,74881,190],{"class":155},[149,74883,74884,74886,74888,74890,74892,74894,74896,74898],{"class":151,"line":34563},[149,74885,56929],{"class":155},[149,74887,70850],{"class":159},[149,74889,68335],{"class":162},[149,74891,166],{"class":155},[149,74893,11675],{"class":169},[149,74895,70859],{"class":155},[149,74897,70850],{"class":159},[149,74899,190],{"class":155},[149,74901,74902,74904,74906,74908,74910,74912,74914,74916],{"class":151,"line":34572},[149,74903,56929],{"class":155},[149,74905,70850],{"class":159},[149,74907,68335],{"class":162},[149,74909,166],{"class":155},[149,74911,11744],{"class":169},[149,74913,70878],{"class":155},[149,74915,70850],{"class":159},[149,74917,190],{"class":155},[149,74919,74920,74922,74924],{"class":151,"line":34578},[149,74921,53476],{"class":155},[149,74923,70828],{"class":159},[149,74925,190],{"class":155},[149,74927,74928,74930,74932,74934,74936,74938,74940,74942,74944,74946,74948,74950],{"class":151,"line":34584},[149,74929,53045],{"class":155},[149,74931,70828],{"class":159},[149,74933,515],{"class":162},[149,74935,166],{"class":155},[149,74937,70932],{"class":169},[149,74939,16670],{"class":162},[149,74941,166],{"class":155},[149,74943,1382],{"class":169},[149,74945,55184],{"class":162},[149,74947,166],{"class":155},[149,74949,70932],{"class":169},[149,74951,190],{"class":155},[149,74953,74954,74956,74958,74960,74962,74964,74966,74968],{"class":151,"line":34593},[149,74955,56929],{"class":155},[149,74957,70850],{"class":159},[149,74959,68335],{"class":162},[149,74961,166],{"class":155},[149,74963,70953],{"class":169},[149,74965,70956],{"class":155},[149,74967,70850],{"class":159},[149,74969,190],{"class":155},[149,74971,74972,74974,74976,74978,74980,74982,74984,74986],{"class":151,"line":34599},[149,74973,56929],{"class":155},[149,74975,70850],{"class":159},[149,74977,68335],{"class":162},[149,74979,166],{"class":155},[149,74981,70973],{"class":169},[149,74983,70976],{"class":155},[149,74985,70850],{"class":159},[149,74987,190],{"class":155},[149,74989,74990,74992,74994,74996,74998,75000,75002,75004],{"class":151,"line":34610},[149,74991,56929],{"class":155},[149,74993,70850],{"class":159},[149,74995,68335],{"class":162},[149,74997,166],{"class":155},[149,74999,70993],{"class":169},[149,75001,70996],{"class":155},[149,75003,70850],{"class":159},[149,75005,190],{"class":155},[149,75007,75008,75010,75012,75014,75016,75018,75020,75022],{"class":151,"line":34616},[149,75009,56929],{"class":155},[149,75011,70850],{"class":159},[149,75013,68335],{"class":162},[149,75015,166],{"class":155},[149,75017,71013],{"class":169},[149,75019,71016],{"class":155},[149,75021,70850],{"class":159},[149,75023,190],{"class":155},[149,75025,75026,75028,75030,75032,75034,75036,75038,75040],{"class":151,"line":34635},[149,75027,56929],{"class":155},[149,75029,70850],{"class":159},[149,75031,68335],{"class":162},[149,75033,166],{"class":155},[149,75035,71033],{"class":169},[149,75037,71036],{"class":155},[149,75039,70850],{"class":159},[149,75041,190],{"class":155},[149,75043,75044,75046,75048],{"class":151,"line":34641},[149,75045,53476],{"class":155},[149,75047,70828],{"class":159},[149,75049,190],{"class":155},[149,75051,75052,75054,75056],{"class":151,"line":34652},[149,75053,53045],{"class":155},[149,75055,646],{"class":159},[149,75057,190],{"class":155},[149,75059,75060,75062,75064,75067,75069,75072,75074],{"class":151,"line":34658},[149,75061,56929],{"class":155},[149,75063,149],{"class":159},[149,75065,75066],{"class":155},">+\u003C\u002F",[149,75068,149],{"class":159},[149,75070,75071],{"class":155},">添加\u003C\u002F",[149,75073,646],{"class":159},[149,75075,190],{"class":155},[149,75077,75078,75080,75082],{"class":151,"line":34678},[149,75079,54115],{"class":155},[149,75081,564],{"class":159},[149,75083,190],{"class":155},[149,75085,75086,75088,75090,75092,75094,75096,75099,75101,75104,75106,75109,75111],{"class":151,"line":34694},[149,75087,587],{"class":155},[149,75089,301],{"class":159},[149,75091,55184],{"class":162},[149,75093,166],{"class":155},[149,75095,64268],{"class":169},[149,75097,75098],{"class":155},">共有数据 \u003C",[149,75100,149],{"class":159},[149,75102,75103],{"class":155},">0\u003C\u002F",[149,75105,149],{"class":159},[149,75107,75108],{"class":155},"> 条\u003C\u002F",[149,75110,301],{"class":159},[149,75112,190],{"class":155},[149,75114,75115,75117,75119],{"class":151,"line":34700},[149,75116,587],{"class":155},[149,75118,2003],{"class":159},[149,75120,190],{"class":155},[149,75122,75123,75125,75127],{"class":151,"line":34714},[149,75124,53045],{"class":155},[149,75126,2006],{"class":159},[149,75128,190],{"class":155},[149,75130,75131,75133,75135],{"class":151,"line":34720},[149,75132,56929],{"class":155},[149,75134,2009],{"class":159},[149,75136,190],{"class":155},[149,75138,75139,75141,75143,75146,75148],{"class":151,"line":34726},[149,75140,56995],{"class":155},[149,75142,2012],{"class":159},[149,75144,75145],{"class":155},">ID\u003C\u002F",[149,75147,2012],{"class":159},[149,75149,190],{"class":155},[149,75151,75152,75154,75156,75158,75160],{"class":151,"line":34737},[149,75153,56995],{"class":155},[149,75155,2012],{"class":159},[149,75157,71139],{"class":155},[149,75159,2012],{"class":159},[149,75161,190],{"class":155},[149,75163,75164,75166,75168,75170,75172],{"class":151,"line":34743},[149,75165,56995],{"class":155},[149,75167,2012],{"class":159},[149,75169,71152],{"class":155},[149,75171,2012],{"class":159},[149,75173,190],{"class":155},[149,75175,75176,75178,75180,75182,75184],{"class":151,"line":34749},[149,75177,56995],{"class":155},[149,75179,2012],{"class":159},[149,75181,71165],{"class":155},[149,75183,2012],{"class":159},[149,75185,190],{"class":155},[149,75187,75188,75190,75192,75194,75196],{"class":151,"line":34759},[149,75189,56995],{"class":155},[149,75191,2012],{"class":159},[149,75193,71178],{"class":155},[149,75195,2012],{"class":159},[149,75197,190],{"class":155},[149,75199,75200,75202,75204,75206,75208],{"class":151,"line":34765},[149,75201,56995],{"class":155},[149,75203,2012],{"class":159},[149,75205,71191],{"class":155},[149,75207,2012],{"class":159},[149,75209,190],{"class":155},[149,75211,75212,75214,75216,75219,75221],{"class":151,"line":34776},[149,75213,56995],{"class":155},[149,75215,2012],{"class":159},[149,75217,75218],{"class":155},">录入时间\u003C\u002F",[149,75220,2012],{"class":159},[149,75222,190],{"class":155},[149,75224,75225,75227,75229,75231,75233],{"class":151,"line":34782},[149,75226,56995],{"class":155},[149,75228,2012],{"class":159},[149,75230,71204],{"class":155},[149,75232,2012],{"class":159},[149,75234,190],{"class":155},[149,75236,75237,75239,75241],{"class":151,"line":34792},[149,75238,57099],{"class":155},[149,75240,2009],{"class":159},[149,75242,190],{"class":155},[149,75244,75245,75247,75249],{"class":151,"line":34797},[149,75246,53476],{"class":155},[149,75248,2006],{"class":159},[149,75250,190],{"class":155},[149,75252,75253,75255,75257],{"class":151,"line":34803},[149,75254,53045],{"class":155},[149,75256,2049],{"class":159},[149,75258,190],{"class":155},[149,75260,75261],{"class":151,"line":34852},[149,75262,75263],{"class":295},"      \u003C!-- \u003Ctr>\n",[149,75265,75266],{"class":151,"line":34899},[149,75267,75268],{"class":295},"        \u003Ctd>1\u003C\u002Ftd>\n",[149,75270,75271],{"class":151,"line":34904},[149,75272,75268],{"class":295},[149,75274,75275],{"class":151,"line":34910},[149,75276,75268],{"class":295},[149,75278,75279],{"class":151,"line":34929},[149,75280,75268],{"class":295},[149,75282,75283],{"class":151,"line":34935},[149,75284,75268],{"class":295},[149,75286,75287],{"class":151,"line":34955},[149,75288,75268],{"class":295},[149,75290,75291],{"class":151,"line":34961},[149,75292,75268],{"class":295},[149,75294,75295],{"class":151,"line":34967},[149,75296,75297],{"class":295},"        \u003Ctd>\n",[149,75299,75300],{"class":151,"line":34977},[149,75301,75302],{"class":295},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[149,75304,75305],{"class":151,"line":34982},[149,75306,75307],{"class":295},"        \u003C\u002Ftd>\n",[149,75309,75310],{"class":151,"line":34988},[149,75311,75312],{"class":295},"      \u003C\u002Ftr> -->\n",[149,75314,75315,75317,75319],{"class":151,"line":35004},[149,75316,53476],{"class":155},[149,75318,2049],{"class":159},[149,75320,190],{"class":155},[149,75322,75323,75325,75327],{"class":151,"line":35049},[149,75324,54115],{"class":155},[149,75326,2003],{"class":159},[149,75328,190],{"class":155},[149,75330,75331,75333,75335],{"class":151,"line":35055},[149,75332,587],{"class":155},[149,75334,53512],{"class":159},[149,75336,190],{"class":155},[149,75338,75339],{"class":151,"line":35061},[149,75340,75341],{"class":295},"    \u002F\u002F const initData = [{\n",[149,75343,75344],{"class":151,"line":35067},[149,75345,75346],{"class":295},"    \u002F\u002F   unameId: 1,\n",[149,75348,75349],{"class":151,"line":35078},[149,75350,75351],{"class":295},"    \u002F\u002F   uname: '华晨宇',\n",[149,75353,75354],{"class":151,"line":35084},[149,75355,75356],{"class":295},"    \u002F\u002F   age: 22,\n",[149,75358,75359],{"class":151,"line":35090},[149,75360,75361],{"class":295},"    \u002F\u002F   salary: 12000,\n",[149,75363,75364],{"class":151,"line":35096},[149,75365,75366],{"class":295},"    \u002F\u002F   gender: '男',\n",[149,75368,75369],{"class":151,"line":35114},[149,75370,75371],{"class":295},"    \u002F\u002F   city: '北京',\n",[149,75373,75374],{"class":151,"line":35128},[149,75375,75376],{"class":295},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[149,75378,75379],{"class":151,"line":35137},[149,75380,75381],{"class":295},"    \u002F\u002F }]\n",[149,75383,75384],{"class":151,"line":35146},[149,75385,75386],{"class":295},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[149,75388,75389],{"class":151,"line":35155},[149,75390,75391],{"class":295},"    \u002F\u002F 1.渲染业务\n",[149,75393,75394],{"class":151,"line":35164},[149,75395,75396],{"class":295},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[149,75398,75399],{"class":151,"line":35170},[149,75400,75401],{"class":295},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[149,75403,75404],{"class":151,"line":35176},[149,75405,75406],{"class":295},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[149,75408,75409],{"class":151,"line":35184},[149,75410,4119],{"emptyLinePlaceholder":1800},[149,75412,75413],{"class":151,"line":35189},[149,75414,75415],{"class":295},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[149,75417,75418],{"class":151,"line":35195},[149,75419,75420],{"class":295},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[149,75422,75423,75425,75427,75429],{"class":151,"line":35206},[149,75424,12935],{"class":325},[149,75426,59386],{"class":309},[149,75428,15277],{"class":325},[149,75430,53537],{"class":155},[149,75432,75433,75436,75438],{"class":151,"line":35212},[149,75434,75435],{"class":155},"    console.",[149,75437,59938],{"class":162},[149,75439,54110],{"class":155},[149,75441,75442],{"class":151,"line":35232},[149,75443,4119],{"emptyLinePlaceholder":1800},[149,75445,75446],{"class":151,"line":35238},[149,75447,75448],{"class":295},"    \u002F\u002F 时间函数\n",[149,75450,75451,75453,75456],{"class":151,"line":35244},[149,75452,71768],{"class":325},[149,75454,75455],{"class":162}," getTime",[149,75457,12567],{"class":155},[149,75459,75460,75462,75465,75467,75469,75472],{"class":151,"line":35250},[149,75461,59919],{"class":325},[149,75463,75464],{"class":309}," date",[149,75466,15277],{"class":325},[149,75468,13292],{"class":325},[149,75470,75471],{"class":162}," Date",[149,75473,3695],{"class":155},[149,75475,75476,75478,75480,75482,75485,75488,75490,75492,75494,75497,75500,75502,75504,75506,75508,75510,75512,75514],{"class":151,"line":35267},[149,75477,59919],{"class":325},[149,75479,17801],{"class":309},[149,75481,15277],{"class":325},[149,75483,75484],{"class":155}," date.",[149,75486,75487],{"class":162},"getHours",[149,75489,14763],{"class":155},[149,75491,156],{"class":325},[149,75493,3757],{"class":309},[149,75495,75496],{"class":325}," ?",[149,75498,75499],{"class":169}," '0'",[149,75501,47272],{"class":325},[149,75503,75484],{"class":155},[149,75505,75487],{"class":162},[149,75507,14763],{"class":155},[149,75509,2720],{"class":325},[149,75511,75484],{"class":155},[149,75513,75487],{"class":162},[149,75515,3695],{"class":155},[149,75517,75518,75520,75523,75525,75527,75530,75532,75534,75536,75538,75540,75542,75544,75546,75548,75550,75552,75554],{"class":151,"line":35273},[149,75519,59919],{"class":325},[149,75521,75522],{"class":309}," m",[149,75524,15277],{"class":325},[149,75526,75484],{"class":155},[149,75528,75529],{"class":162},"getMinutes",[149,75531,14763],{"class":155},[149,75533,156],{"class":325},[149,75535,3757],{"class":309},[149,75537,75496],{"class":325},[149,75539,75499],{"class":169},[149,75541,47272],{"class":325},[149,75543,75484],{"class":155},[149,75545,75529],{"class":162},[149,75547,14763],{"class":155},[149,75549,2720],{"class":325},[149,75551,75484],{"class":155},[149,75553,75529],{"class":162},[149,75555,3695],{"class":155},[149,75557,75558,75560,75562,75564,75566,75569,75571,75573,75575,75577,75579,75581,75583,75585,75587,75589,75591,75593],{"class":151,"line":35279},[149,75559,59919],{"class":325},[149,75561,10143],{"class":309},[149,75563,15277],{"class":325},[149,75565,75484],{"class":155},[149,75567,75568],{"class":162},"getSeconds",[149,75570,14763],{"class":155},[149,75572,156],{"class":325},[149,75574,3757],{"class":309},[149,75576,75496],{"class":325},[149,75578,75499],{"class":169},[149,75580,47272],{"class":325},[149,75582,75484],{"class":155},[149,75584,75568],{"class":162},[149,75586,14763],{"class":155},[149,75588,2720],{"class":325},[149,75590,75484],{"class":155},[149,75592,75568],{"class":162},[149,75594,3695],{"class":155},[149,75596,75597,75599,75602,75604,75606,75609,75611,75614,75616,75619,75621,75623,75626,75628,75630,75632,75634,75636,75638,75641,75643,75646,75648,75651,75653,75655,75657],{"class":151,"line":35285},[149,75598,59919],{"class":325},[149,75600,75601],{"class":309}," str",[149,75603,15277],{"class":325},[149,75605,64590],{"class":169},[149,75607,75608],{"class":155},"date",[149,75610,2421],{"class":169},[149,75612,75613],{"class":162},"getFullYear",[149,75615,4146],{"class":169},[149,75617,75618],{"class":169},"}\u002F${",[149,75620,75608],{"class":155},[149,75622,2421],{"class":169},[149,75624,75625],{"class":162},"getMonth",[149,75627,14763],{"class":169},[149,75629,2344],{"class":325},[149,75631,26827],{"class":309},[149,75633,75618],{"class":169},[149,75635,75608],{"class":155},[149,75637,2421],{"class":169},[149,75639,75640],{"class":162},"getDate",[149,75642,4146],{"class":169},[149,75644,75645],{"class":169},"} ${",[149,75647,2278],{"class":155},[149,75649,75650],{"class":169},"}:${",[149,75652,2407],{"class":155},[149,75654,75650],{"class":169},[149,75656,1720],{"class":155},[149,75658,75659],{"class":169},"}`\n",[149,75661,75662,75665],{"class":151,"line":35291},[149,75663,75664],{"class":325},"      return",[149,75666,75667],{"class":155}," str\n",[149,75669,75670],{"class":151,"line":35297},[149,75671,3906],{"class":155},[149,75673,75674],{"class":151,"line":35324},[149,75675,75676],{"class":295},"    \u002F\u002F 渲染函数\n",[149,75678,75679,75681,75683,75685,75687,75689,75691,75693],{"class":151,"line":35348},[149,75680,12935],{"class":325},[149,75682,71431],{"class":309},[149,75684,15277],{"class":325},[149,75686,56091],{"class":155},[149,75688,56094],{"class":162},[149,75690,319],{"class":155},[149,75692,71442],{"class":169},[149,75694,1878],{"class":155},[149,75696,75697,75699,75701],{"class":151,"line":35354},[149,75698,71768],{"class":325},[149,75700,71771],{"class":162},[149,75702,12567],{"class":155},[149,75704,75705],{"class":151,"line":35360},[149,75706,75707],{"class":295},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[149,75709,75710],{"class":151,"line":35366},[149,75711,75712],{"class":295},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[149,75714,75715,75717,75720,75722,75724,75727,75729,75731,75733,75736,75738,75741],{"class":151,"line":35377},[149,75716,59919],{"class":325},[149,75718,75719],{"class":309}," trArr",[149,75721,15277],{"class":325},[149,75723,53664],{"class":155},[149,75725,75726],{"class":162},"map",[149,75728,319],{"class":155},[149,75730,56144],{"class":325},[149,75732,3378],{"class":155},[149,75734,75735],{"class":6932},"ele",[149,75737,329],{"class":155},[149,75739,75740],{"class":6932},"index",[149,75742,14155],{"class":155},[149,75744,75745,75747],{"class":151,"line":35388},[149,75746,16464],{"class":325},[149,75748,71852],{"class":169},[149,75750,75751],{"class":151,"line":35394},[149,75752,75753],{"class":169},"      \u003Ctr>\n",[149,75755,75756,75758,75760,75762,75765],{"class":151,"line":35411},[149,75757,71857],{"class":169},[149,75759,75735],{"class":155},[149,75761,2421],{"class":169},[149,75763,75764],{"class":155},"unameId",[149,75766,71872],{"class":169},[149,75768,75769,75771,75773,75775,75777],{"class":151,"line":35434},[149,75770,71857],{"class":169},[149,75772,75735],{"class":155},[149,75774,2421],{"class":169},[149,75776,71888],{"class":155},[149,75778,71872],{"class":169},[149,75780,75781,75783,75785,75787,75789],{"class":151,"line":35457},[149,75782,71857],{"class":169},[149,75784,75735],{"class":155},[149,75786,2421],{"class":169},[149,75788,71905],{"class":155},[149,75790,71872],{"class":169},[149,75792,75793,75795,75797,75799,75801],{"class":151,"line":35463},[149,75794,71857],{"class":169},[149,75796,75735],{"class":155},[149,75798,2421],{"class":169},[149,75800,71922],{"class":155},[149,75802,71872],{"class":169},[149,75804,75805,75807,75809,75811,75813],{"class":151,"line":35468},[149,75806,71857],{"class":169},[149,75808,75735],{"class":155},[149,75810,2421],{"class":169},[149,75812,71939],{"class":155},[149,75814,71872],{"class":169},[149,75816,75817,75819,75821,75823,75825],{"class":151,"line":35477},[149,75818,71857],{"class":169},[149,75820,75735],{"class":155},[149,75822,2421],{"class":169},[149,75824,71956],{"class":155},[149,75826,71872],{"class":169},[149,75828,75829,75831,75833,75835,75837],{"class":151,"line":35487},[149,75830,71857],{"class":169},[149,75832,75735],{"class":155},[149,75834,2421],{"class":169},[149,75836,4106],{"class":155},[149,75838,71872],{"class":169},[149,75840,75841],{"class":151,"line":35493},[149,75842,75297],{"class":169},[149,75844,75845,75848,75850],{"class":151,"line":35498},[149,75846,75847],{"class":169},"          \u003Ca href=\"#\" data-id=\"${",[149,75849,75740],{"class":155},[149,75851,75852],{"class":169},"}\">删除\u003C\u002Fa>\n",[149,75854,75855],{"class":151,"line":35504},[149,75856,75307],{"class":169},[149,75858,75859],{"class":151,"line":35517},[149,75860,75861],{"class":169},"      \u003C\u002Ftr>\n",[149,75863,75864],{"class":151,"line":35523},[149,75865,75866],{"class":169},"  `\n",[149,75868,75869],{"class":151,"line":35534},[149,75870,66502],{"class":155},[149,75872,75873,75875,75877],{"class":151,"line":35545},[149,75874,59935],{"class":155},[149,75876,59938],{"class":162},[149,75878,75879],{"class":155},"(trArr)\n",[149,75881,75882],{"class":151,"line":35564},[149,75883,4119],{"emptyLinePlaceholder":1800},[149,75885,75886],{"class":151,"line":51224},[149,75887,75888],{"class":295},"      \u002F\u002F (2) 把数组转换为字符串join\n",[149,75890,75891],{"class":151,"line":51229},[149,75892,75893],{"class":295},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[149,75895,75896,75898,75900,75903,75906,75908,75911],{"class":151,"line":51238},[149,75897,71783],{"class":155},[149,75899,166],{"class":325},[149,75901,75902],{"class":155}," trArr.",[149,75904,75905],{"class":162},"join",[149,75907,319],{"class":155},[149,75909,75910],{"class":169},"''",[149,75912,1878],{"class":155},[149,75914,75915],{"class":151,"line":51247},[149,75916,75917],{"class":295},"      \u002F\u002F 显示共有几条\n",[149,75919,75920,75922,75924,75926,75929,75932,75934,75936],{"class":151,"line":51252},[149,75921,57463],{"class":155},[149,75923,56094],{"class":162},[149,75925,319],{"class":155},[149,75927,75928],{"class":169},"'.total span'",[149,75930,75931],{"class":155},").innerHTML ",[149,75933,166],{"class":325},[149,75935,53664],{"class":155},[149,75937,57523],{"class":309},[149,75939,75940],{"class":151,"line":51257},[149,75941,3906],{"class":155},[149,75943,75944],{"class":151,"line":51262},[149,75945,75946],{"class":295},"    \u002F\u002F render()\n",[149,75948,75949],{"class":151,"line":51275},[149,75950,4119],{"emptyLinePlaceholder":1800},[149,75952,75953],{"class":151,"line":51280},[149,75954,75955],{"class":295},"    \u002F\u002F 获取DOM对象\n",[149,75957,75958,75960,75962,75964,75966,75968,75970,75972],{"class":151,"line":51289},[149,75959,12935],{"class":325},[149,75961,71505],{"class":309},[149,75963,15277],{"class":325},[149,75965,56091],{"class":155},[149,75967,56094],{"class":162},[149,75969,319],{"class":155},[149,75971,71516],{"class":169},[149,75973,1878],{"class":155},[149,75975,75976,75978,75980,75982,75984,75986,75988,75990],{"class":151,"line":51298},[149,75977,12935],{"class":325},[149,75979,71332],{"class":309},[149,75981,15277],{"class":325},[149,75983,56091],{"class":155},[149,75985,56094],{"class":162},[149,75987,319],{"class":155},[149,75989,71343],{"class":169},[149,75991,1878],{"class":155},[149,75993,75994,75996,75998,76000,76002,76004,76006,76008],{"class":151,"line":51315},[149,75995,12935],{"class":325},[149,75997,17399],{"class":309},[149,75999,15277],{"class":325},[149,76001,56091],{"class":155},[149,76003,56094],{"class":162},[149,76005,319],{"class":155},[149,76007,71362],{"class":169},[149,76009,1878],{"class":155},[149,76011,76013,76015,76017,76019,76021,76023,76025,76027],{"class":151,"line":76012},231,[149,76014,12935],{"class":325},[149,76016,71391],{"class":309},[149,76018,15277],{"class":325},[149,76020,56091],{"class":155},[149,76022,56094],{"class":162},[149,76024,319],{"class":155},[149,76026,71402],{"class":169},[149,76028,1878],{"class":155},[149,76030,76032,76034,76036,76038,76040,76042,76044,76046],{"class":151,"line":76031},232,[149,76033,12935],{"class":325},[149,76035,71371],{"class":309},[149,76037,15277],{"class":325},[149,76039,56091],{"class":155},[149,76041,56094],{"class":162},[149,76043,319],{"class":155},[149,76045,71382],{"class":169},[149,76047,1878],{"class":155},[149,76049,76051,76053,76055,76057,76059,76061,76063,76065],{"class":151,"line":76050},233,[149,76052,12935],{"class":325},[149,76054,71411],{"class":309},[149,76056,15277],{"class":325},[149,76058,56091],{"class":155},[149,76060,56094],{"class":162},[149,76062,319],{"class":155},[149,76064,71422],{"class":169},[149,76066,1878],{"class":155},[149,76068,76070],{"class":151,"line":76069},234,[149,76071,4119],{"emptyLinePlaceholder":1800},[149,76073,76075],{"class":151,"line":76074},235,[149,76076,76077],{"class":295},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[149,76079,76081,76083,76085,76087,76089,76091,76093,76095,76097],{"class":151,"line":76080},236,[149,76082,71523],{"class":155},[149,76084,59504],{"class":162},[149,76086,319],{"class":155},[149,76088,71530],{"class":169},[149,76090,329],{"class":155},[149,76092,56144],{"class":325},[149,76094,3378],{"class":155},[149,76096,1942],{"class":6932},[149,76098,14155],{"class":155},[149,76100,76102],{"class":151,"line":76101},237,[149,76103,76104],{"class":295},"      \u002F\u002F 禁止浏览器跳转\n",[149,76106,76108,76110,76112],{"class":151,"line":76107},238,[149,76109,71550],{"class":155},[149,76111,71553],{"class":162},[149,76113,3695],{"class":155},[149,76115,76117],{"class":151,"line":76116},239,[149,76118,76119],{"class":295},"      \u002F\u002F 非空判断\n",[149,76121,76123],{"class":151,"line":76122},240,[149,76124,76125],{"class":295},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[149,76127,76129],{"class":151,"line":76128},241,[149,76130,76131],{"class":295},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[149,76133,76135,76137,76139,76141,76144,76146,76149,76152,76154,76156],{"class":151,"line":76134},242,[149,76136,56175],{"class":325},[149,76138,3378],{"class":155},[149,76140,2090],{"class":325},[149,76142,76143],{"class":155},"uname.value ",[149,76145,73039],{"class":325},[149,76147,76148],{"class":325}," !",[149,76150,76151],{"class":155},"age.value ",[149,76153,73039],{"class":325},[149,76155,76148],{"class":325},[149,76157,76158],{"class":155},"salary.value) {\n",[149,76160,76162,76164,76166,76168,76170],{"class":151,"line":76161},243,[149,76163,16464],{"class":325},[149,76165,71624],{"class":162},[149,76167,319],{"class":155},[149,76169,71629],{"class":169},[149,76171,1878],{"class":155},[149,76173,76175],{"class":151,"line":76174},244,[149,76176,54096],{"class":155},[149,76178,76180,76182,76184],{"class":151,"line":76179},245,[149,76181,59698],{"class":155},[149,76183,53583],{"class":162},[149,76185,76186],{"class":155},"({\n",[149,76188,76190],{"class":151,"line":76189},246,[149,76191,76192],{"class":295},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[149,76194,76196],{"class":151,"line":76195},247,[149,76197,76198],{"class":295},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[149,76200,76202],{"class":151,"line":76201},248,[149,76203,76204],{"class":295},"        \u002F\u002F 对象的序号应为数组长度+1\n",[149,76206,76208],{"class":151,"line":76207},249,[149,76209,76210],{"class":295},"        \u002F\u002F unameId: arr.length + 1,\n",[149,76212,76214],{"class":151,"line":76213},250,[149,76215,4119],{"emptyLinePlaceholder":1800},[149,76217,76219],{"class":151,"line":76218},251,[149,76220,76221],{"class":295},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[149,76223,76225],{"class":151,"line":76224},252,[149,76226,76227],{"class":295},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[149,76229,76231],{"class":151,"line":76230},253,[149,76232,76233],{"class":295},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[149,76235,76237],{"class":151,"line":76236},254,[149,76238,76239],{"class":295},"        \u002F\u002F 0当假看\n",[149,76241,76243,76246,76248,76250,76253,76255,76257,76259,76262,76264,76266,76269,76271],{"class":151,"line":76242},255,[149,76244,76245],{"class":155},"        unameId: arr.",[149,76247,53667],{"class":309},[149,76249,75496],{"class":325},[149,76251,76252],{"class":155}," arr[arr.",[149,76254,53667],{"class":309},[149,76256,53969],{"class":325},[149,76258,26827],{"class":309},[149,76260,76261],{"class":155},"].unameId ",[149,76263,2344],{"class":325},[149,76265,26827],{"class":309},[149,76267,76268],{"class":325}," :",[149,76270,26827],{"class":309},[149,76272,33172],{"class":155},[149,76274,76276],{"class":151,"line":76275},256,[149,76277,71677],{"class":155},[149,76279,76281],{"class":151,"line":76280},257,[149,76282,71682],{"class":155},[149,76284,76286],{"class":151,"line":76285},258,[149,76287,71692],{"class":155},[149,76289,76291],{"class":151,"line":76290},259,[149,76292,71687],{"class":155},[149,76294,76296],{"class":151,"line":76295},260,[149,76297,76298],{"class":155},"        city: city.value,\n",[149,76300,76302],{"class":151,"line":76301},261,[149,76303,76304],{"class":295},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[149,76306,76308],{"class":151,"line":76307},262,[149,76309,76310],{"class":295},"        \u002F\u002F time: new Date().toDateString()\n",[149,76312,76314,76317,76320],{"class":151,"line":76313},263,[149,76315,76316],{"class":155},"        time: ",[149,76318,76319],{"class":162},"getTime",[149,76321,3695],{"class":155},[149,76323,76325],{"class":151,"line":76324},264,[149,76326,66502],{"class":155},[149,76328,76330],{"class":151,"line":76329},265,[149,76331,76332],{"class":295},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[149,76334,76336,76338],{"class":151,"line":76335},266,[149,76337,71752],{"class":162},[149,76339,3695],{"class":155},[149,76341,76343,76345,76347,76349,76351],{"class":151,"line":76342},267,[149,76344,71735],{"class":309},[149,76346,2421],{"class":155},[149,76348,71740],{"class":162},[149,76350,14763],{"class":155},[149,76352,76353],{"class":295},"\u002F\u002F重置表单\n",[149,76355,76357],{"class":151,"line":76356},268,[149,76358,76359],{"class":295},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[149,76361,76363,76366,76368,76370,76373,76375,76377,76379,76381],{"class":151,"line":76362},269,[149,76364,76365],{"class":155},"      localStorage.",[149,76367,73336],{"class":162},[149,76369,319],{"class":155},[149,76371,76372],{"class":169},"'data'",[149,76374,329],{"class":155},[149,76376,73346],{"class":309},[149,76378,2421],{"class":155},[149,76380,73351],{"class":162},[149,76382,76383],{"class":155},"(arr))\n",[149,76385,76387],{"class":151,"line":76386},270,[149,76388,35167],{"class":155},[149,76390,76392],{"class":151,"line":76391},271,[149,76393,4119],{"emptyLinePlaceholder":1800},[149,76395,76397],{"class":151,"line":76396},272,[149,76398,76399],{"class":295},"    \u002F\u002F 3.删除业务\n",[149,76401,76403],{"class":151,"line":76402},273,[149,76404,76405],{"class":295},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[149,76407,76409,76411,76413,76415,76417,76419,76421,76423,76425],{"class":151,"line":76408},274,[149,76410,72025],{"class":155},[149,76412,59504],{"class":162},[149,76414,319],{"class":155},[149,76416,59509],{"class":169},[149,76418,329],{"class":155},[149,76420,56144],{"class":325},[149,76422,3378],{"class":155},[149,76424,1942],{"class":6932},[149,76426,14155],{"class":155},[149,76428,76430],{"class":151,"line":76429},275,[149,76431,76432],{"class":295},"      \u002F\u002F 判断是否点击的是删除按钮\n",[149,76434,76436,76438,76440,76442,76444],{"class":151,"line":76435},276,[149,76437,56175],{"class":325},[149,76439,68718],{"class":155},[149,76441,56181],{"class":325},[149,76443,69940],{"class":169},[149,76445,14155],{"class":155},[149,76447,76449],{"class":151,"line":76448},277,[149,76450,76451],{"class":295},"        \u002F\u002F alert(1)\n",[149,76453,76455],{"class":151,"line":76454},278,[149,76456,76457],{"class":295},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[149,76459,76461],{"class":151,"line":76460},279,[149,76462,76463],{"class":295},"        \u002F\u002F console.log(e.target)\n",[149,76465,76467],{"class":151,"line":76466},280,[149,76468,76469],{"class":295},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[149,76471,76473],{"class":151,"line":76472},281,[149,76474,4119],{"emptyLinePlaceholder":1800},[149,76476,76478],{"class":151,"line":76477},282,[149,76479,76480],{"class":295},"        \u002F\u002F 确认框，确然是否真的要删除\n",[149,76482,76484],{"class":151,"line":76483},283,[149,76485,76486],{"class":295},"        \u002F\u002F confirm()为确认框\n",[149,76488,76490],{"class":151,"line":76489},284,[149,76491,76492],{"class":295},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[149,76494,76496,76498,76500,76503,76505,76508],{"class":151,"line":76495},285,[149,76497,4216],{"class":325},[149,76499,3378],{"class":155},[149,76501,76502],{"class":162},"confirm",[149,76504,319],{"class":155},[149,76506,76507],{"class":169},"'您确定要删除这条数据吗？'",[149,76509,76510],{"class":155},")) {\n",[149,76512,76514,76517,76519,76521,76523],{"class":151,"line":76513},286,[149,76515,76516],{"class":155},"          arr.",[149,76518,59701],{"class":162},[149,76520,72078],{"class":155},[149,76522,830],{"class":309},[149,76524,1878],{"class":155},[149,76526,76528],{"class":151,"line":76527},287,[149,76529,76530],{"class":295},"          \u002F\u002F 3.4 重新渲染页面\n",[149,76532,76534,76537],{"class":151,"line":76533},288,[149,76535,76536],{"class":162},"          render",[149,76538,3695],{"class":155},[149,76540,76542],{"class":151,"line":76541},289,[149,76543,76544],{"class":295},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[149,76546,76548,76551,76553,76555,76557,76559,76561,76563,76565],{"class":151,"line":76547},290,[149,76549,76550],{"class":155},"          localStorage.",[149,76552,73336],{"class":162},[149,76554,319],{"class":155},[149,76556,76372],{"class":169},[149,76558,329],{"class":155},[149,76560,73346],{"class":309},[149,76562,2421],{"class":155},[149,76564,73351],{"class":162},[149,76566,76383],{"class":155},[149,76568,76570],{"class":151,"line":76569},291,[149,76571,4248],{"class":155},[149,76573,76575],{"class":151,"line":76574},292,[149,76576,54096],{"class":155},[149,76578,76580],{"class":151,"line":76579},293,[149,76581,4119],{"emptyLinePlaceholder":1800},[149,76583,76585],{"class":151,"line":76584},294,[149,76586,35167],{"class":155},[149,76588,76590],{"class":151,"line":76589},295,[149,76591,4119],{"emptyLinePlaceholder":1800},[149,76593,76595,76597,76599],{"class":151,"line":76594},296,[149,76596,54115],{"class":155},[149,76598,53512],{"class":159},[149,76600,190],{"class":155},[149,76602,76604,76606,76608],{"class":151,"line":76603},297,[149,76605,665],{"class":155},[149,76607,53499],{"class":159},[149,76609,190],{"class":155},[149,76611,76613],{"class":151,"line":76612},298,[149,76614,4119],{"emptyLinePlaceholder":1800},[149,76616,76618,76620,76622],{"class":151,"line":76617},299,[149,76619,665],{"class":155},[149,76621,52341],{"class":159},[149,76623,190],{"class":155},[14,76625,76627],{"id":76626},"_36-正则表达式","3.6 正则表达式",[24,76629,76630],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[24,76632,76633],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[24,76635,76636],{},"正则表达式的作用：",[42,76638,76639,76646,76652],{},[45,76640,76641,76642,76645],{},"表单验证（ ",[31,76643,76644],{},"匹配"," ）",[45,76647,76648,76649,76645],{},"过滤敏感词（ ",[31,76650,76651],{},"替换",[45,76653,76654,76655,76645],{},"字符串中提取我们想要的部分（ ",[31,76656,76657],{},"提取",[19,76659,76661],{"id":76660},"_361-语法","3.6.1 语法",[24,76663,76664],{},"正则表达式使用步骤：",[125,76666,76667,76670],{},[45,76668,76669],{},"定义规则",[45,76671,76672],{},"查找是否匹配",[24,76674,76675],{},"正则表达式里边不需要写引号",[24,76677,76678],{},[83,76679],{"alt":145,"src":76680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[24,76682,76683],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[24,76685,76686],{},"reg.test(str)",[24,76688,76689],{},[83,76690],{"alt":145,"src":76691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[24,76693,76694],{},[83,76695],{"alt":145,"src":76696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[19,76698,76700],{"id":76699},"_362-元字符","3.6.2 元字符",[125,76702,76703,76706,76709,76712,76719],{},[45,76704,76705],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[45,76707,76708],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[45,76710,76711],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[45,76713,76714,76715],{},"正则验证工具：",[2102,76716,76717],{"href":76717,"rel":76718},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25573],[45,76720,76721],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[120,76723,76725],{"id":76724},"_3621-边界符","3.6.2.1 边界符",[24,76727,76728],{},[83,76729],{"alt":145,"src":76730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[24,76732,76733],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[24,76735,76736],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[24,76738,76739],{},"只匹配一次",[24,76741,76742],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[120,76744,76746],{"id":76745},"_3622-量词","3.6.2.2 量词",[24,76748,76749],{},[83,76750],{"alt":145,"src":76751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[24,76753,76754],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[120,76756,76758],{"id":76757},"_3623-元字符","3.6.2.3 元字符",[24,76760,76761],{},[83,76762],{"alt":145,"src":76763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[24,76765,76766],{},"匹配的是a或b或c []只选一个",[24,76768,76769],{},[83,76770],{"alt":145,"src":76771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[24,76773,76774],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[24,76776,76777],{},[83,76778],{"alt":145,"src":76779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[24,76781,76782],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[24,76784,76785],{},[83,76786],{"alt":145,"src":76787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[140,76789,76791],{"className":52339,"code":76790,"language":52341,"meta":145,"style":145},"\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",[48,76792,76793,76803,76817,76821,76829,76843,76863,76875,76883,76887,76895,76903,76908,76939,76966,76994,76998,77003,77031,77062,77067,77072,77103,77135,77167,77171,77176,77207,77237,77267,77271,77276,77307,77338,77368,77398,77402,77407,77440,77444,77449,77480,77511,77515,77520,77551,77581,77612,77616,77621,77653,77684,77715,77742,77773,77805,77838,77869,77900,77932,77963,77971,77979,77983],{"__ignoreMap":145},[149,76794,76795,76797,76799,76801],{"class":151,"line":152},[149,76796,53003],{"class":155},[149,76798,53006],{"class":159},[149,76800,53009],{"class":162},[149,76802,190],{"class":155},[149,76804,76805,76807,76809,76811,76813,76815],{"class":151,"line":193},[149,76806,156],{"class":155},[149,76808,52341],{"class":159},[149,76810,53020],{"class":162},[149,76812,166],{"class":155},[149,76814,53025],{"class":169},[149,76816,190],{"class":155},[149,76818,76819],{"class":151,"line":235},[149,76820,4119],{"emptyLinePlaceholder":1800},[149,76822,76823,76825,76827],{"class":151,"line":340},[149,76824,156],{"class":155},[149,76826,53038],{"class":159},[149,76828,190],{"class":155},[149,76830,76831,76833,76835,76837,76839,76841],{"class":151,"line":346},[149,76832,587],{"class":155},[149,76834,53048],{"class":159},[149,76836,53051],{"class":162},[149,76838,166],{"class":155},[149,76840,53056],{"class":169},[149,76842,190],{"class":155},[149,76844,76845,76847,76849,76851,76853,76855,76857,76859,76861],{"class":151,"line":352},[149,76846,587],{"class":155},[149,76848,53048],{"class":159},[149,76850,515],{"class":162},[149,76852,166],{"class":155},[149,76854,53095],{"class":169},[149,76856,53075],{"class":162},[149,76858,166],{"class":155},[149,76860,53102],{"class":169},[149,76862,190],{"class":155},[149,76864,76865,76867,76869,76871,76873],{"class":151,"line":1021},[149,76866,587],{"class":155},[149,76868,53111],{"class":159},[149,76870,53114],{"class":155},[149,76872,53111],{"class":159},[149,76874,190],{"class":155},[149,76876,76877,76879,76881],{"class":151,"line":1035},[149,76878,665],{"class":155},[149,76880,53038],{"class":159},[149,76882,190],{"class":155},[149,76884,76885],{"class":151,"line":1054},[149,76886,4119],{"emptyLinePlaceholder":1800},[149,76888,76889,76891,76893],{"class":151,"line":1072},[149,76890,156],{"class":155},[149,76892,53499],{"class":159},[149,76894,190],{"class":155},[149,76896,76897,76899,76901],{"class":151,"line":1090},[149,76898,587],{"class":155},[149,76900,53512],{"class":159},[149,76902,190],{"class":155},[149,76904,76905],{"class":151,"line":1633},[149,76906,76907],{"class":295},"    \u002F\u002F 元字符中\n",[149,76909,76910,76912,76914,76916,76918,76921,76923,76925,76928,76930,76933,76936],{"class":151,"line":1644},[149,76911,75435],{"class":155},[149,76913,59938],{"class":162},[149,76915,319],{"class":155},[149,76917,2447],{"class":169},[149,76919,76920],{"class":49683},"哈",[149,76922,2447],{"class":169},[149,76924,2421],{"class":155},[149,76926,76927],{"class":162},"test",[149,76929,319],{"class":155},[149,76931,76932],{"class":169},"'哈'",[149,76934,76935],{"class":155},"))  ",[149,76937,76938],{"class":295},"\u002F\u002Ftrue\n",[149,76940,76941,76943,76945,76947,76949,76951,76953,76955,76957,76959,76962,76964],{"class":151,"line":3348},[149,76942,75435],{"class":155},[149,76944,59938],{"class":162},[149,76946,319],{"class":155},[149,76948,2447],{"class":169},[149,76950,76920],{"class":49683},[149,76952,2447],{"class":169},[149,76954,2421],{"class":155},[149,76956,76927],{"class":162},[149,76958,319],{"class":155},[149,76960,76961],{"class":169},"'哈哈'",[149,76963,76935],{"class":155},[149,76965,76938],{"class":295},[149,76967,76968,76970,76972,76974,76976,76978,76980,76982,76984,76986,76989,76992],{"class":151,"line":3362},[149,76969,75435],{"class":155},[149,76971,59938],{"class":162},[149,76973,319],{"class":155},[149,76975,2447],{"class":169},[149,76977,76920],{"class":49683},[149,76979,2447],{"class":169},[149,76981,2421],{"class":155},[149,76983,76927],{"class":162},[149,76985,319],{"class":155},[149,76987,76988],{"class":169},"'二哈'",[149,76990,76991],{"class":155},"))   ",[149,76993,76938],{"class":295},[149,76995,76996],{"class":151,"line":3367},[149,76997,4119],{"emptyLinePlaceholder":1800},[149,76999,77000],{"class":151,"line":3373},[149,77001,77002],{"class":295},"    \u002F\u002F 1.边界符\n",[149,77004,77005,77007,77009,77011,77013,77015,77017,77019,77021,77023,77025,77027,77029],{"class":151,"line":3394},[149,77006,75435],{"class":155},[149,77008,59938],{"class":162},[149,77010,319],{"class":155},[149,77012,2447],{"class":169},[149,77014,2825],{"class":325},[149,77016,76920],{"class":49683},[149,77018,2447],{"class":169},[149,77020,2421],{"class":155},[149,77022,76927],{"class":162},[149,77024,319],{"class":155},[149,77026,76932],{"class":169},[149,77028,76935],{"class":155},[149,77030,76938],{"class":295},[149,77032,77033,77035,77037,77039,77041,77043,77045,77047,77049,77051,77053,77055,77057,77059],{"class":151,"line":3399},[149,77034,75435],{"class":155},[149,77036,59938],{"class":162},[149,77038,319],{"class":155},[149,77040,2447],{"class":169},[149,77042,2825],{"class":325},[149,77044,76920],{"class":49683},[149,77046,2166],{"class":325},[149,77048,2447],{"class":169},[149,77050,2421],{"class":155},[149,77052,76927],{"class":162},[149,77054,319],{"class":155},[149,77056,76961],{"class":169},[149,77058,76935],{"class":155},[149,77060,77061],{"class":295},"\u002F\u002Ffalse\n",[149,77063,77064],{"class":151,"line":3413},[149,77065,77066],{"class":295},"    \u002F\u002F 2.量词\n",[149,77068,77069],{"class":151,"line":3418},[149,77070,77071],{"class":295},"    \u002F\u002F 量词 * 类似于 >= 0\n",[149,77073,77074,77076,77078,77080,77082,77084,77086,77089,77091,77093,77095,77097,77099,77101],{"class":151,"line":3447},[149,77075,75435],{"class":155},[149,77077,59938],{"class":162},[149,77079,319],{"class":155},[149,77081,2447],{"class":169},[149,77083,2825],{"class":325},[149,77085,76920],{"class":49683},[149,77087,77088],{"class":325},"*$",[149,77090,2447],{"class":169},[149,77092,2421],{"class":155},[149,77094,76927],{"class":162},[149,77096,319],{"class":155},[149,77098,76961],{"class":169},[149,77100,76935],{"class":155},[149,77102,76938],{"class":295},[149,77104,77105,77107,77109,77111,77113,77115,77117,77119,77121,77123,77125,77127,77130,77132],{"class":151,"line":3452},[149,77106,75435],{"class":155},[149,77108,59938],{"class":162},[149,77110,319],{"class":155},[149,77112,2447],{"class":169},[149,77114,2825],{"class":325},[149,77116,76920],{"class":49683},[149,77118,77088],{"class":325},[149,77120,2447],{"class":169},[149,77122,2421],{"class":155},[149,77124,76927],{"class":162},[149,77126,319],{"class":155},[149,77128,77129],{"class":169},"'二哈好傻'",[149,77131,76935],{"class":155},[149,77133,77134],{"class":295},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[149,77136,77137,77139,77141,77143,77145,77147,77149,77151,77153,77155,77157,77159,77162,77164],{"class":151,"line":3469},[149,77138,75435],{"class":155},[149,77140,59938],{"class":162},[149,77142,319],{"class":155},[149,77144,2447],{"class":169},[149,77146,2825],{"class":325},[149,77148,76920],{"class":49683},[149,77150,77088],{"class":325},[149,77152,2447],{"class":169},[149,77154,2421],{"class":155},[149,77156,76927],{"class":162},[149,77158,319],{"class":155},[149,77160,77161],{"class":169},"'哈好哈'",[149,77163,76991],{"class":155},[149,77165,77166],{"class":295},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[149,77168,77169],{"class":151,"line":3474},[149,77170,4119],{"emptyLinePlaceholder":1800},[149,77172,77173],{"class":151,"line":3479},[149,77174,77175],{"class":295},"    \u002F\u002F +类似于>=1\n",[149,77177,77178,77180,77182,77184,77186,77188,77190,77193,77195,77197,77199,77201,77203,77205],{"class":151,"line":3484},[149,77179,75435],{"class":155},[149,77181,59938],{"class":162},[149,77183,319],{"class":155},[149,77185,2447],{"class":169},[149,77187,2825],{"class":325},[149,77189,76920],{"class":49683},[149,77191,77192],{"class":325},"+$",[149,77194,2447],{"class":169},[149,77196,2421],{"class":155},[149,77198,76927],{"class":162},[149,77200,319],{"class":155},[149,77202,76961],{"class":169},[149,77204,76935],{"class":155},[149,77206,76938],{"class":295},[149,77208,77209,77211,77213,77215,77217,77219,77221,77223,77225,77227,77229,77231,77233,77235],{"class":151,"line":3498},[149,77210,75435],{"class":155},[149,77212,59938],{"class":162},[149,77214,319],{"class":155},[149,77216,2447],{"class":169},[149,77218,2825],{"class":325},[149,77220,76920],{"class":49683},[149,77222,77192],{"class":325},[149,77224,2447],{"class":169},[149,77226,2421],{"class":155},[149,77228,76927],{"class":162},[149,77230,319],{"class":155},[149,77232,77129],{"class":169},[149,77234,76935],{"class":155},[149,77236,77134],{"class":295},[149,77238,77239,77241,77243,77245,77247,77249,77251,77253,77255,77257,77259,77261,77263,77265],{"class":151,"line":3503},[149,77240,75435],{"class":155},[149,77242,59938],{"class":162},[149,77244,319],{"class":155},[149,77246,2447],{"class":169},[149,77248,2825],{"class":325},[149,77250,76920],{"class":49683},[149,77252,77192],{"class":325},[149,77254,2447],{"class":169},[149,77256,2421],{"class":155},[149,77258,76927],{"class":162},[149,77260,319],{"class":155},[149,77262,77161],{"class":169},[149,77264,76991],{"class":155},[149,77266,77061],{"class":295},[149,77268,77269],{"class":151,"line":4296},[149,77270,4119],{"emptyLinePlaceholder":1800},[149,77272,77273],{"class":151,"line":4310},[149,77274,77275],{"class":295},"    \u002F\u002F ?类似于0次或一次\n",[149,77277,77278,77280,77282,77284,77286,77288,77291,77293,77295,77297,77299,77301,77303,77305],{"class":151,"line":4318},[149,77279,75435],{"class":155},[149,77281,59938],{"class":162},[149,77283,319],{"class":155},[149,77285,2447],{"class":169},[149,77287,2825],{"class":325},[149,77289,77290],{"class":49683},"哈？",[149,77292,2166],{"class":325},[149,77294,2447],{"class":169},[149,77296,2421],{"class":155},[149,77298,76927],{"class":162},[149,77300,319],{"class":155},[149,77302,75910],{"class":169},[149,77304,76991],{"class":155},[149,77306,76938],{"class":295},[149,77308,77309,77311,77313,77315,77317,77319,77321,77324,77326,77328,77330,77332,77334,77336],{"class":151,"line":4323},[149,77310,75435],{"class":155},[149,77312,59938],{"class":162},[149,77314,319],{"class":155},[149,77316,2447],{"class":169},[149,77318,2825],{"class":325},[149,77320,76920],{"class":49683},[149,77322,77323],{"class":325},"?$",[149,77325,2447],{"class":169},[149,77327,2421],{"class":155},[149,77329,76927],{"class":162},[149,77331,319],{"class":155},[149,77333,76961],{"class":169},[149,77335,76935],{"class":155},[149,77337,77061],{"class":295},[149,77339,77340,77342,77344,77346,77348,77350,77352,77354,77356,77358,77360,77362,77364,77366],{"class":151,"line":4329},[149,77341,75435],{"class":155},[149,77343,59938],{"class":162},[149,77345,319],{"class":155},[149,77347,2447],{"class":169},[149,77349,2825],{"class":325},[149,77351,76920],{"class":49683},[149,77353,77323],{"class":325},[149,77355,2447],{"class":169},[149,77357,2421],{"class":155},[149,77359,76927],{"class":162},[149,77361,319],{"class":155},[149,77363,77129],{"class":169},[149,77365,76935],{"class":155},[149,77367,77134],{"class":295},[149,77369,77370,77372,77374,77376,77378,77380,77382,77384,77386,77388,77390,77392,77394,77396],{"class":151,"line":4335},[149,77371,75435],{"class":155},[149,77373,59938],{"class":162},[149,77375,319],{"class":155},[149,77377,2447],{"class":169},[149,77379,2825],{"class":325},[149,77381,76920],{"class":49683},[149,77383,77323],{"class":325},[149,77385,2447],{"class":169},[149,77387,2421],{"class":155},[149,77389,76927],{"class":162},[149,77391,319],{"class":155},[149,77393,77161],{"class":169},[149,77395,76935],{"class":155},[149,77397,77061],{"class":295},[149,77399,77400],{"class":151,"line":4340},[149,77401,4119],{"emptyLinePlaceholder":1800},[149,77403,77404],{"class":151,"line":9663},[149,77405,77406],{"class":295},"    \u002F\u002F {n}写几，就必须出现几次\n",[149,77408,77409,77411,77413,77415,77417,77419,77421,77424,77426,77428,77430,77432,77435,77438],{"class":151,"line":9687},[149,77410,75435],{"class":155},[149,77412,59938],{"class":162},[149,77414,319],{"class":155},[149,77416,2447],{"class":169},[149,77418,2825],{"class":325},[149,77420,76920],{"class":49683},[149,77422,77423],{"class":325},"{4}$",[149,77425,2447],{"class":169},[149,77427,2421],{"class":155},[149,77429,76927],{"class":162},[149,77431,319],{"class":155},[149,77433,77434],{"class":169},"'哈哈哈哈'",[149,77436,77437],{"class":155},")) ",[149,77439,76938],{"class":295},[149,77441,77442],{"class":151,"line":9692},[149,77443,4119],{"emptyLinePlaceholder":1800},[149,77445,77446],{"class":151,"line":9698},[149,77447,77448],{"class":295},"    \u002F\u002F {n,}大于等于n次\n",[149,77450,77451,77453,77455,77457,77459,77461,77463,77466,77468,77470,77472,77474,77476,77478],{"class":151,"line":9725},[149,77452,75435],{"class":155},[149,77454,59938],{"class":162},[149,77456,319],{"class":155},[149,77458,2447],{"class":169},[149,77460,2825],{"class":325},[149,77462,76920],{"class":49683},[149,77464,77465],{"class":325},"{4,}$",[149,77467,2447],{"class":169},[149,77469,2421],{"class":155},[149,77471,76927],{"class":162},[149,77473,319],{"class":155},[149,77475,77434],{"class":169},[149,77477,77437],{"class":155},[149,77479,76938],{"class":295},[149,77481,77482,77484,77486,77488,77490,77492,77494,77496,77498,77500,77502,77504,77507,77509],{"class":151,"line":9730},[149,77483,75435],{"class":155},[149,77485,59938],{"class":162},[149,77487,319],{"class":155},[149,77489,2447],{"class":169},[149,77491,2825],{"class":325},[149,77493,76920],{"class":49683},[149,77495,77465],{"class":325},[149,77497,2447],{"class":169},[149,77499,2421],{"class":155},[149,77501,76927],{"class":162},[149,77503,319],{"class":155},[149,77505,77506],{"class":169},"'哈哈哈哈哈'",[149,77508,77437],{"class":155},[149,77510,76938],{"class":295},[149,77512,77513],{"class":151,"line":9736},[149,77514,4119],{"emptyLinePlaceholder":1800},[149,77516,77517],{"class":151,"line":9748},[149,77518,77519],{"class":295},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[149,77521,77522,77524,77526,77528,77530,77532,77534,77537,77539,77541,77543,77545,77547,77549],{"class":151,"line":9760},[149,77523,75435],{"class":155},[149,77525,59938],{"class":162},[149,77527,319],{"class":155},[149,77529,2447],{"class":169},[149,77531,2825],{"class":325},[149,77533,76920],{"class":49683},[149,77535,77536],{"class":325},"{4,6}$",[149,77538,2447],{"class":169},[149,77540,2421],{"class":155},[149,77542,76927],{"class":162},[149,77544,319],{"class":155},[149,77546,77434],{"class":169},[149,77548,77437],{"class":155},[149,77550,76938],{"class":295},[149,77552,77553,77555,77557,77559,77561,77563,77565,77567,77569,77571,77573,77575,77577,77579],{"class":151,"line":9772},[149,77554,75435],{"class":155},[149,77556,59938],{"class":162},[149,77558,319],{"class":155},[149,77560,2447],{"class":169},[149,77562,2825],{"class":325},[149,77564,76920],{"class":49683},[149,77566,77536],{"class":325},[149,77568,2447],{"class":169},[149,77570,2421],{"class":155},[149,77572,76927],{"class":162},[149,77574,319],{"class":155},[149,77576,77506],{"class":169},[149,77578,77437],{"class":155},[149,77580,76938],{"class":295},[149,77582,77583,77585,77587,77589,77591,77593,77595,77597,77599,77601,77603,77605,77608,77610],{"class":151,"line":11430},[149,77584,75435],{"class":155},[149,77586,59938],{"class":162},[149,77588,319],{"class":155},[149,77590,2447],{"class":169},[149,77592,2825],{"class":325},[149,77594,76920],{"class":49683},[149,77596,77536],{"class":325},[149,77598,2447],{"class":169},[149,77600,2421],{"class":155},[149,77602,76927],{"class":162},[149,77604,319],{"class":155},[149,77606,77607],{"class":169},"'哈哈哈哈哈哈哈'",[149,77609,77437],{"class":155},[149,77611,77061],{"class":295},[149,77613,77614],{"class":151,"line":11455},[149,77615,4119],{"emptyLinePlaceholder":1800},[149,77617,77618],{"class":151,"line":11478},[149,77619,77620],{"class":295},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[149,77622,77623,77625,77627,77629,77631,77633,77636,77638,77640,77642,77644,77646,77649,77651],{"class":151,"line":11502},[149,77624,75435],{"class":155},[149,77626,59938],{"class":162},[149,77628,319],{"class":155},[149,77630,2447],{"class":169},[149,77632,2825],{"class":325},[149,77634,77635],{"class":309},"[abc]",[149,77637,2166],{"class":325},[149,77639,2447],{"class":169},[149,77641,2421],{"class":155},[149,77643,76927],{"class":162},[149,77645,319],{"class":155},[149,77647,77648],{"class":169},"'a'",[149,77650,76935],{"class":155},[149,77652,76938],{"class":295},[149,77654,77655,77657,77659,77661,77663,77665,77667,77669,77671,77673,77675,77677,77680,77682],{"class":151,"line":11507},[149,77656,75435],{"class":155},[149,77658,59938],{"class":162},[149,77660,319],{"class":155},[149,77662,2447],{"class":169},[149,77664,2825],{"class":325},[149,77666,77635],{"class":309},[149,77668,2166],{"class":325},[149,77670,2447],{"class":169},[149,77672,2421],{"class":155},[149,77674,76927],{"class":162},[149,77676,319],{"class":155},[149,77678,77679],{"class":169},"'b'",[149,77681,76935],{"class":155},[149,77683,76938],{"class":295},[149,77685,77686,77688,77690,77692,77694,77696,77698,77700,77702,77704,77706,77708,77711,77713],{"class":151,"line":11512},[149,77687,75435],{"class":155},[149,77689,59938],{"class":162},[149,77691,319],{"class":155},[149,77693,2447],{"class":169},[149,77695,2825],{"class":325},[149,77697,77635],{"class":309},[149,77699,2166],{"class":325},[149,77701,2447],{"class":169},[149,77703,2421],{"class":155},[149,77705,76927],{"class":162},[149,77707,319],{"class":155},[149,77709,77710],{"class":169},"'c'",[149,77712,76935],{"class":155},[149,77714,76938],{"class":295},[149,77716,77717,77719,77721,77723,77725,77727,77729,77731,77733,77735,77738,77740],{"class":151,"line":11517},[149,77718,75435],{"class":155},[149,77720,59938],{"class":162},[149,77722,319],{"class":155},[149,77724,2447],{"class":169},[149,77726,77635],{"class":309},[149,77728,2447],{"class":169},[149,77730,2421],{"class":155},[149,77732,76927],{"class":162},[149,77734,319],{"class":155},[149,77736,77737],{"class":169},"'ab'",[149,77739,76935],{"class":155},[149,77741,76938],{"class":295},[149,77743,77744,77746,77748,77750,77752,77754,77756,77758,77760,77762,77764,77766,77768,77770],{"class":151,"line":11526},[149,77745,75435],{"class":155},[149,77747,59938],{"class":162},[149,77749,319],{"class":155},[149,77751,2447],{"class":169},[149,77753,2825],{"class":325},[149,77755,77635],{"class":309},[149,77757,2166],{"class":325},[149,77759,2447],{"class":169},[149,77761,2421],{"class":155},[149,77763,76927],{"class":162},[149,77765,319],{"class":155},[149,77767,77737],{"class":169},[149,77769,76935],{"class":155},[149,77771,77772],{"class":295},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[149,77774,77775,77777,77779,77781,77783,77785,77787,77790,77792,77794,77796,77798,77800,77802],{"class":151,"line":11531},[149,77776,75435],{"class":155},[149,77778,59938],{"class":162},[149,77780,319],{"class":155},[149,77782,2447],{"class":169},[149,77784,2825],{"class":325},[149,77786,77635],{"class":309},[149,77788,77789],{"class":325},"{2}$",[149,77791,2447],{"class":169},[149,77793,2421],{"class":155},[149,77795,76927],{"class":162},[149,77797,319],{"class":155},[149,77799,77737],{"class":169},[149,77801,76935],{"class":155},[149,77803,77804],{"class":295},"\u002F\u002Ftrue   可以选两个\n",[149,77806,77807,77809,77811,77813,77815,77817,77820,77822,77824,77826,77828,77830,77833,77835],{"class":151,"line":11537},[149,77808,75435],{"class":155},[149,77810,59938],{"class":162},[149,77812,319],{"class":155},[149,77814,2447],{"class":169},[149,77816,2825],{"class":325},[149,77818,77819],{"class":309},"[a-z]",[149,77821,2166],{"class":325},[149,77823,2447],{"class":169},[149,77825,2421],{"class":155},[149,77827,76927],{"class":162},[149,77829,319],{"class":155},[149,77831,77832],{"class":169},"'p'",[149,77834,76991],{"class":155},[149,77836,77837],{"class":295},"\u002F\u002Ftrue   依然只能选一个\n",[149,77839,77840,77842,77844,77846,77848,77850,77853,77855,77857,77859,77861,77863,77865,77867],{"class":151,"line":11558},[149,77841,75435],{"class":155},[149,77843,59938],{"class":162},[149,77845,319],{"class":155},[149,77847,2447],{"class":169},[149,77849,2825],{"class":325},[149,77851,77852],{"class":309},"[A-Z]",[149,77854,2166],{"class":325},[149,77856,2447],{"class":169},[149,77858,2421],{"class":155},[149,77860,76927],{"class":162},[149,77862,319],{"class":155},[149,77864,77832],{"class":169},[149,77866,76991],{"class":155},[149,77868,77061],{"class":295},[149,77870,77871,77873,77875,77877,77879,77881,77883,77885,77887,77889,77891,77893,77896,77898],{"class":151,"line":11564},[149,77872,75435],{"class":155},[149,77874,59938],{"class":162},[149,77876,319],{"class":155},[149,77878,2447],{"class":169},[149,77880,2825],{"class":325},[149,77882,77852],{"class":309},[149,77884,2166],{"class":325},[149,77886,2447],{"class":169},[149,77888,2421],{"class":155},[149,77890,76927],{"class":162},[149,77892,319],{"class":155},[149,77894,77895],{"class":169},"'P'",[149,77897,76991],{"class":155},[149,77899,76938],{"class":295},[149,77901,77902,77904,77906,77908,77910,77912,77915,77917,77919,77921,77923,77925,77928,77930],{"class":151,"line":11578},[149,77903,75435],{"class":155},[149,77905,59938],{"class":162},[149,77907,319],{"class":155},[149,77909,2447],{"class":169},[149,77911,2825],{"class":325},[149,77913,77914],{"class":309},"[0-9]",[149,77916,2166],{"class":325},[149,77918,2447],{"class":169},[149,77920,2421],{"class":155},[149,77922,76927],{"class":162},[149,77924,319],{"class":155},[149,77926,77927],{"class":169},"'0'",[149,77929,76991],{"class":155},[149,77931,76938],{"class":295},[149,77933,77934,77936,77938,77940,77942,77944,77947,77949,77951,77953,77955,77957,77959,77961],{"class":151,"line":11584},[149,77935,75435],{"class":155},[149,77937,59938],{"class":162},[149,77939,319],{"class":155},[149,77941,2447],{"class":169},[149,77943,2825],{"class":325},[149,77945,77946],{"class":309},"[a-zA-Z0-9]",[149,77948,2166],{"class":325},[149,77950,2447],{"class":169},[149,77952,2421],{"class":155},[149,77954,76927],{"class":162},[149,77956,319],{"class":155},[149,77958,77832],{"class":169},[149,77960,76935],{"class":155},[149,77962,76938],{"class":295},[149,77964,77965,77967,77969],{"class":151,"line":11611},[149,77966,54115],{"class":155},[149,77968,53512],{"class":159},[149,77970,190],{"class":155},[149,77972,77973,77975,77977],{"class":151,"line":11620},[149,77974,665],{"class":155},[149,77976,53499],{"class":159},[149,77978,190],{"class":155},[149,77980,77981],{"class":151,"line":11626},[149,77982,4119],{"emptyLinePlaceholder":1800},[149,77984,77985,77987,77989],{"class":151,"line":11634},[149,77986,665],{"class":155},[149,77988,52341],{"class":159},[149,77990,190],{"class":155},[120,77992,77994],{"id":77993},"_3624-修饰符","3.6.2.4 修饰符",[24,77996,77997],{},[83,77998],{"alt":145,"src":77999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[24,78001,78002],{},"replace是个方法，使用的时候一定不要忘记括号()",[24,78004,78005],{},[83,78006],{"alt":145,"src":78007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[140,78009,78011],{"className":52339,"code":78010,"language":52341,"meta":145,"style":145},"\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",[48,78012,78013,78023,78037,78045,78059,78079,78091,78099,78107,78115,78147,78178,78183,78215,78226,78259,78268,78276,78284],{"__ignoreMap":145},[149,78014,78015,78017,78019,78021],{"class":151,"line":152},[149,78016,53003],{"class":155},[149,78018,53006],{"class":159},[149,78020,53009],{"class":162},[149,78022,190],{"class":155},[149,78024,78025,78027,78029,78031,78033,78035],{"class":151,"line":193},[149,78026,156],{"class":155},[149,78028,52341],{"class":159},[149,78030,53020],{"class":162},[149,78032,166],{"class":155},[149,78034,53025],{"class":169},[149,78036,190],{"class":155},[149,78038,78039,78041,78043],{"class":151,"line":235},[149,78040,156],{"class":155},[149,78042,53038],{"class":159},[149,78044,190],{"class":155},[149,78046,78047,78049,78051,78053,78055,78057],{"class":151,"line":340},[149,78048,587],{"class":155},[149,78050,53048],{"class":159},[149,78052,53051],{"class":162},[149,78054,166],{"class":155},[149,78056,53056],{"class":169},[149,78058,190],{"class":155},[149,78060,78061,78063,78065,78067,78069,78071,78073,78075,78077],{"class":151,"line":346},[149,78062,587],{"class":155},[149,78064,53048],{"class":159},[149,78066,515],{"class":162},[149,78068,166],{"class":155},[149,78070,53095],{"class":169},[149,78072,53075],{"class":162},[149,78074,166],{"class":155},[149,78076,53102],{"class":169},[149,78078,190],{"class":155},[149,78080,78081,78083,78085,78087,78089],{"class":151,"line":352},[149,78082,587],{"class":155},[149,78084,53111],{"class":159},[149,78086,53114],{"class":155},[149,78088,53111],{"class":159},[149,78090,190],{"class":155},[149,78092,78093,78095,78097],{"class":151,"line":1021},[149,78094,665],{"class":155},[149,78096,53038],{"class":159},[149,78098,190],{"class":155},[149,78100,78101,78103,78105],{"class":151,"line":1035},[149,78102,156],{"class":155},[149,78104,53499],{"class":159},[149,78106,190],{"class":155},[149,78108,78109,78111,78113],{"class":151,"line":1054},[149,78110,587],{"class":155},[149,78112,53512],{"class":159},[149,78114,190],{"class":155},[149,78116,78117,78119,78121,78123,78125,78127,78130,78132,78134,78136,78138,78140,78143,78145],{"class":151,"line":1072},[149,78118,75435],{"class":155},[149,78120,59938],{"class":162},[149,78122,319],{"class":155},[149,78124,2447],{"class":169},[149,78126,2825],{"class":325},[149,78128,78129],{"class":49683},"java",[149,78131,2166],{"class":325},[149,78133,2447],{"class":169},[149,78135,2421],{"class":155},[149,78137,76927],{"class":162},[149,78139,319],{"class":155},[149,78141,78142],{"class":169},"'java'",[149,78144,77437],{"class":155},[149,78146,76938],{"class":295},[149,78148,78149,78151,78153,78155,78157,78159,78161,78163,78165,78167,78169,78171,78174,78176],{"class":151,"line":1090},[149,78150,75435],{"class":155},[149,78152,59938],{"class":162},[149,78154,319],{"class":155},[149,78156,2447],{"class":169},[149,78158,2825],{"class":325},[149,78160,78129],{"class":49683},[149,78162,2166],{"class":325},[149,78164,2447],{"class":169},[149,78166,2421],{"class":155},[149,78168,76927],{"class":162},[149,78170,319],{"class":155},[149,78172,78173],{"class":169},"'Java'",[149,78175,77437],{"class":155},[149,78177,77061],{"class":295},[149,78179,78180],{"class":151,"line":1633},[149,78181,78182],{"class":295},"    \u002F\u002F 不区分大小写、\n",[149,78184,78185,78187,78189,78191,78193,78195,78197,78199,78201,78203,78205,78207,78209,78211,78213],{"class":151,"line":1644},[149,78186,75435],{"class":155},[149,78188,59938],{"class":162},[149,78190,319],{"class":155},[149,78192,2447],{"class":169},[149,78194,2825],{"class":325},[149,78196,78129],{"class":49683},[149,78198,2166],{"class":325},[149,78200,2447],{"class":169},[149,78202,2304],{"class":325},[149,78204,2421],{"class":155},[149,78206,76927],{"class":162},[149,78208,319],{"class":155},[149,78210,78173],{"class":169},[149,78212,77437],{"class":155},[149,78214,76938],{"class":295},[149,78216,78217,78219,78221,78223],{"class":151,"line":3348},[149,78218,12935],{"class":325},[149,78220,75601],{"class":309},[149,78222,15277],{"class":325},[149,78224,78225],{"class":169}," 'java是一门编程语言，学完java工资很高'\n",[149,78227,78228,78230,78233,78235,78238,78241,78243,78245,78247,78249,78252,78254,78257],{"class":151,"line":3362},[149,78229,12935],{"class":325},[149,78231,78232],{"class":309}," result",[149,78234,15277],{"class":325},[149,78236,78237],{"class":155}," str.",[149,78239,78240],{"class":162},"replace",[149,78242,319],{"class":155},[149,78244,2447],{"class":169},[149,78246,78129],{"class":49683},[149,78248,2447],{"class":169},[149,78250,78251],{"class":325},"ig",[149,78253,329],{"class":155},[149,78255,78256],{"class":169},"'前端'",[149,78258,1878],{"class":155},[149,78260,78261,78263,78265],{"class":151,"line":3367},[149,78262,75435],{"class":155},[149,78264,59938],{"class":162},[149,78266,78267],{"class":155},"(result)\n",[149,78269,78270,78272,78274],{"class":151,"line":3373},[149,78271,54115],{"class":155},[149,78273,53512],{"class":159},[149,78275,190],{"class":155},[149,78277,78278,78280,78282],{"class":151,"line":3394},[149,78279,665],{"class":155},[149,78281,53499],{"class":159},[149,78283,190],{"class":155},[149,78285,78286,78288,78290],{"class":151,"line":3399},[149,78287,665],{"class":155},[149,78289,52341],{"class":159},[149,78291,190],{"class":155},[1783,78293,78294],{},"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":145,"searchDepth":193,"depth":193,"links":78296},[78297,78307,78319,78336,78343,78351],{"id":55058,"depth":193,"text":55059,"children":78298},[78299,78300,78301,78302,78303,78304,78305,78306],{"id":55062,"depth":235,"text":55063},{"id":55095,"depth":235,"text":55096},{"id":55134,"depth":235,"text":55135},{"id":55292,"depth":235,"text":55293},{"id":55340,"depth":235,"text":55341},{"id":55477,"depth":235,"text":55478},{"id":55796,"depth":235,"text":55797},{"id":58781,"depth":235,"text":58782},{"id":58809,"depth":193,"text":58810,"children":78308},[78309,78310,78311,78312,78313,78314,78315,78316,78317,78318],{"id":58813,"depth":235,"text":58814},{"id":58836,"depth":235,"text":58837},{"id":59750,"depth":235,"text":59751},{"id":60440,"depth":235,"text":60441},{"id":60722,"depth":235,"text":60723},{"id":64879,"depth":235,"text":64880},{"id":65049,"depth":235,"text":65050},{"id":65177,"depth":235,"text":65178},{"id":65202,"depth":235,"text":65203},{"id":66591,"depth":235,"text":66592},{"id":67744,"depth":193,"text":67745,"children":78320},[78321,78322,78323,78324,78325,78326,78327,78328,78329,78330,78331,78332,78333,78334,78335],{"id":67748,"depth":235,"text":67749},{"id":68399,"depth":235,"text":68400},{"id":70094,"depth":235,"text":70095},{"id":70135,"depth":235,"text":70136},{"id":70177,"depth":235,"text":70178},{"id":70191,"depth":235,"text":70192},{"id":70240,"depth":235,"text":70241},{"id":70252,"depth":235,"text":70253},{"id":70267,"depth":235,"text":70268},{"id":70303,"depth":235,"text":70304},{"id":70384,"depth":235,"text":70385},{"id":70512,"depth":235,"text":70513},{"id":70524,"depth":235,"text":70525},{"id":70543,"depth":235,"text":70544},{"id":72652,"depth":235,"text":72653},{"id":72671,"depth":193,"text":72672,"children":78337},[78338,78339,78340,78341,78342],{"id":72692,"depth":235,"text":72693},{"id":72712,"depth":235,"text":72713},{"id":72761,"depth":235,"text":72762},{"id":72886,"depth":235,"text":72887},{"id":73067,"depth":235,"text":73068},{"id":73085,"depth":193,"text":73086,"children":78344},[78345,78346,78347,78348,78349,78350],{"id":73100,"depth":235,"text":73101},{"id":73159,"depth":235,"text":73160},{"id":73183,"depth":235,"text":73184},{"id":73503,"depth":235,"text":73504},{"id":73535,"depth":235,"text":73536},{"id":73558,"depth":235,"text":73559},{"id":76626,"depth":193,"text":76627,"children":78352},[78353,78354],{"id":76660,"depth":235,"text":76661},{"id":76699,"depth":235,"text":76700},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55030,"description":1797},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78361,"title":78362,"body":78363,"description":1797,"extension":1798,"meta":94498,"navigation":1800,"path":94499,"seo":94500,"stem":94501,"__hash__":94502},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78364,"toc":94434},[78365,78368,78371,78375,78379,78384,78389,78400,78404,78409,78412,78416,78419,78424,78428,78432,78435,78440,78443,78447,78450,78458,78461,78465,78470,78475,78478,78482,78487,78492,78495,78499,78504,78507,78512,78515,78520,78523,78528,78533,78536,78539,78543,78548,78553,78556,78560,78564,78567,78570,78573,78577,78581,78586,78591,78594,78598,78603,78608,78611,78614,78617,78620,78623,78626,78629,78632,78635,78640,78644,78649,78654,78657,78660,78663,78666,78669,78672,78675,78678,78682,78686,78689,78692,78695,78700,78702,78705,78708,78711,78714,78717,78720,78723,78726,78729,78732,78735,78738,78741,78746,78751,78756,78759,78763,78766,78771,78775,78777,78788,78793,78894,78897,78900,78903,78906,78909,78912,78915,78918,78920,78923,78926,78929,78932,78935,78937,78940,78943,78946,78949,78952,78955,78957,78960,78962,78964,78967,78971,78975,78978,78981,78984,78987,78990,78993,78996,78999,79002,79007,79127,79130,79133,79138,79141,79144,79147,79150,79155,79158,79161,79164,79167,79172,79175,79275,79340,79414,79418,79421,79424,79428,79431,79445,79474,79477,79480,79483,79486,79489,79492,79495,79497,79500,79503,79506,79509,79513,79518,79522,79527,79602,79605,79788,79791,79794,79797,79800,79803,79805,79808,79811,79814,79817,79820,79823,79825,79829,79832,79837,79840,79843,79846,79849,79851,79856,79859,79862,79865,79868,79870,79875,79878,79881,79883,79885,79888,79892,79895,79898,79903,79906,79909,79912,79962,79967,79971,79976,79979,80048,80051,80060,80064,80069,80072,80075,80083,80086,80103,81904,81908,81912,81917,81920,81924,81930,81936,82088,82093,82098,82101,82104,82107,82110,82113,82116,82119,82122,82125,82128,82131,82134,82139,82143,82146,82157,82161,82166,82169,82172,82175,82178,82181,82183,82186,82189,82192,82195,82197,82214,82217,82221,82224,82229,82234,82237,82240,82244,82247,82250,82259,82262,82266,82269,82274,82279,82346,82350,82353,82356,82361,82366,82452,82457,82461,82464,82467,82482,82485,82490,82494,82499,82608,82611,82622,82772,82776,82781,82890,82894,82899,82904,82909,82912,82919,82939,82975,83139,83144,83147,83152,83159,83162,83165,83168,83227,83283,83339,83343,83348,83663,83666,83670,83673,83678,83787,83792,83796,83801,83805,83876,83880,83882,83885,83888,83926,84202,84206,84223,84289,84323,84327,84330,84335,84364,84371,84380,84385,84400,84405,84414,84417,84554,84558,84620,84624,84629,84874,84878,84883,84886,84889,84892,84895,84899,84904,86485,86489,86493,86499,86502,86507,86511,86514,86519,86522,86533,86537,86542,86546,86551,86556,86559,86564,86568,86572,86575,86580,86585,86588,86591,86594,86716,86721,86823,86826,86829,86833,86838,87010,87015,87019,87022,87027,87093,87098,87101,87232,87235,87240,87243,87246,87337,87342,87345,87348,87351,87354,87359,87364,87367,87372,87377,87382,87386,87389,87392,87397,87402,87407,87412,87466,87469,87472,87477,87480,87483,87488,87493,87498,87502,87507,87521,87526,87529,87534,87538,87543,87548,87553,87558,87563,87568,87573,87578,87581,87585,87590,87593,87596,87599,87604,87609,87612,87615,87619,87622,87625,87630,87635,87640,87645,87648,87653,87658,87719,87724,87727,87732,88973,88978,88982,88986,88991,88994,88999,89004,89007,89012,89014,89019,89023,89026,89029,89040,89044,89049,89054,89109,89114,89119,89124,89335,89340,89344,89349,89352,89354,89357,89360,89807,89812,89819,89825,89828,89831,90095,90100,90104,90369,90374,90378,90383,90388,90393,90398,90729,90732,90737,90742,90745,90749,90753,90758,90763,90768,90773,90778,90783,90787,90790,90795,90800,90803,90877,90882,90887,90892,90894,90897,91267,91272,91277,91282,91285,91288,91390,91395,91400,91503,91507,91512,91516,91520,91525,91530,91533,91538,91541,91544,91937,91942,91945,91948,91951,91954,92474,92478,92483,92488,92493,92496,92501,92504,92507,92889,92894,92896,92898,92901,92904,93416,93420,93481,93484,93487,93490,93494,93497,93502,93507,94431],[10,78366,78362],{"id":78367},"_4js进阶",[24,78369,78370],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78372,78374],{"id":78373},"_41-作用域","4.1 作用域",[19,78376,78378],{"id":78377},"_411-局部作用域","4.1.1 局部作用域",[24,78380,78381],{},[83,78382],{"alt":145,"src":78383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[24,78385,78386],{},[83,78387],{"alt":145,"src":78388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[42,78390,78391,78394,78397],{},[45,78392,78393],{},"函数作用域在函数内部",[45,78395,78396],{},"块级作用域在{}",[45,78398,78399],{},"对象的那个{}不是作用域，不是块作用域",[19,78401,78403],{"id":78402},"_412-全局作用域","4.1.2 全局作用域",[24,78405,78406],{},[83,78407],{"alt":145,"src":78408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[24,78410,78411],{},"window.a=10不要这样写",[19,78413,78415],{"id":78414},"_413-作用域链","4.1.3 作用域链",[24,78417,78418],{},"变量查找机制",[24,78420,78421],{},[83,78422],{"alt":145,"src":78423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78425,78427],{"id":78426},"_42-垃圾回收机制","4.2 垃圾回收机制",[19,78429,78431],{"id":78430},"_421-大体介绍","4.2.1 大体介绍",[24,78433,78434],{},"垃圾回收机制(Garbage Collection) 简称 GC",[24,78436,78437],{},[83,78438],{"alt":145,"src":78439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[24,78441,78442],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[19,78444,78446],{"id":78445},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[24,78448,78449],{},"堆栈空间分配区别：",[125,78451,78452,78455],{},[45,78453,78454],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[45,78456,78457],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[24,78459,78460],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[120,78462,78464],{"id":78463},"_4221-引用计数","4.2.2.1 引用计数",[24,78466,78467],{},[83,78468],{"alt":145,"src":78469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[24,78471,78472],{},[83,78473],{"alt":145,"src":78474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[24,78476,78477],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[120,78479,78481],{"id":78480},"_4222-标记清除法","4.2.2.2 标记清除法",[24,78483,78484],{},[83,78485],{"alt":145,"src":78486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[24,78488,78489],{},[83,78490],{"alt":145,"src":78491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[24,78493,78494],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78496,78498],{"id":78497},"_43-闭包","4.3 闭包",[24,78500,78501],{},[83,78502],{"alt":145,"src":78503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[24,78505,78506],{},"闭包：内层函数+外层函数的变量",[24,78508,78509],{},[83,78510],{"alt":145,"src":78511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[24,78513,78514],{},"closure就是闭包",[24,78516,78517],{},[83,78518],{"alt":145,"src":78519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[24,78521,78522],{},"内层函数必须包含外层函数的变量才是闭包",[24,78524,78525],{},[83,78526],{"alt":145,"src":78527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[24,78529,78530],{},[83,78531],{"alt":145,"src":78532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[24,78534,78535],{},"闭包可能会引起内存泄漏",[24,78537,78538],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78540,78542],{"id":78541},"_44-变量提升","4.4 变量提升",[24,78544,78545],{},[83,78546],{"alt":145,"src":78547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[24,78549,78550],{},[83,78551],{"alt":145,"src":78552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[24,78554,78555],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78557,78559],{"id":78558},"_45-函数进阶","4.5 函数进阶",[19,78561,78563],{"id":78562},"_451-函数提升","4.5.1 函数提升",[24,78565,78566],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[24,78568,78569],{},"只提升函数声明，不提升函数调用",[53512,78571,78572],{},"\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,78574,78576],{"id":78575},"_452-函数参数","4.5.2 函数参数",[120,78578,78580],{"id":78579},"_4521-动态参数","4.5.2.1 动态参数",[24,78582,78583],{},[83,78584],{"alt":145,"src":78585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[24,78587,78588],{},[83,78589],{"alt":145,"src":78590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[24,78592,78593],{},"箭头函数里边没有arguments",[120,78595,78597],{"id":78596},"_4522-剩余参数","4.5.2.2 剩余参数",[24,78599,78600],{},[83,78601],{"alt":145,"src":78602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[24,78604,78605],{},[83,78606],{"alt":145,"src":78607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[24,78609,78610],{},"剩余参数使用的时候不需要写...",[24,78612,78613],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[24,78615,78616],{},"  function getSum(a,b,...arr) {",[24,78618,78619],{},"  console.log(11)",[24,78621,78622],{},"  }",[24,78624,78625],{},"  getSum(1,2,3,4)",[24,78627,78628],{},"  将1传给a，2传给b，剩下的传给剩余参数",[24,78630,78631],{},"  getSum(1,2)",[24,78633,78634],{},"  将1传给a，2传给b，剩余参数为一个空数组",[24,78636,78637],{},[83,78638],{"alt":145,"src":78639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[120,78641,78643],{"id":78642},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[24,78645,78646],{},[83,78647],{"alt":145,"src":78648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[24,78650,78651],{},[83,78652],{"alt":145,"src":78653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[24,78655,78656],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[24,78658,78659],{},"展开运算符可以用于数组之间的合并：",[24,78661,78662],{},"const arr1 = [1, 2, 3]",[24,78664,78665],{},"const arr2 = [3, 4, 5]",[24,78667,78668],{},"const arr = [...arr1, ...arr2]",[24,78670,78671],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[24,78673,78674],{},"剩余参数：函数参数使用，得到真数组",[24,78676,78677],{},"展开运算符：数组中使用，数组展开",[19,78679,78681],{"id":78680},"_453-箭头函数","4.5.3 箭头函数",[120,78683,78685],{"id":78684},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[24,78687,78688],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[24,78690,78691],{},"它不是万能的！！！",[24,78693,78694],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[24,78696,78697],{},[83,78698],{"alt":145,"src":78699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[24,78701,89],{},[24,78703,78704],{},"① 只有一个形参的时候，可以省略小括号：",[24,78706,78707],{},"const fn=x=>{console.log(x)}",[24,78709,78710],{},"② 只有一行代码时可以省略大括号：",[24,78712,78713],{},"const fn=x=>console.log(11)",[24,78715,78716],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[24,78718,78719],{},"const fn=x=>x+x",[24,78721,78722],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[24,78724,78725],{},"⑤ 阻止表单默认提交：",[24,78727,78728],{},"const form = document.querySelector('form')",[24,78730,78731],{},"form.addEventListener('click', ev => ev.preventDefault())",[24,78733,78734],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[24,78736,78737],{},"const fn=uname=>({uname:uname})",[24,78739,78740],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[24,78742,78743],{},[83,78744],{"alt":145,"src":78745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[24,78747,78748],{},[83,78749],{"alt":145,"src":78750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[24,78752,78753],{},[83,78754],{"alt":145,"src":78755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[24,78757,78758],{},"一定不要忘记用()，有()就理解为自带return",[120,78760,78762],{"id":78761},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[24,78764,78765],{},"箭头函数是没有动态参数的arguments",[24,78767,78768],{},[83,78769],{"alt":145,"src":78770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[120,78772,78774],{"id":78773},"_4533-箭头函数this","4.5.3.3 箭头函数this",[24,78776,13046],{},[125,78778,78779,78782,78785],{},[45,78780,78781],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[45,78783,78784],{},"事件回调函数使用箭头函数时，this 为全局的 window",[45,78786,78787],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[24,78789,78790],{},[83,78791],{"alt":145,"src":78792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[140,78794,78796],{"className":54765,"code":78795,"language":54767,"meta":145,"style":145},"  \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",[48,78797,78798,78806,78811,78816,78821,78826,78831,78835,78840,78844,78848,78853,78858,78863,78867,78871,78876,78881,78886],{"__ignoreMap":145},[149,78799,78800,78802,78804],{"class":151,"line":152},[149,78801,587],{"class":155},[149,78803,53512],{"class":159},[149,78805,190],{"class":155},[149,78807,78808],{"class":151,"line":193},[149,78809,78810],{"class":155},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[149,78812,78813],{"class":151,"line":235},[149,78814,78815],{"class":155},"    console.log(this) \u002F\u002F指向window\n",[149,78817,78818],{"class":151,"line":340},[149,78819,78820],{"class":155},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[149,78822,78823],{"class":151,"line":346},[149,78824,78825],{"class":155},"    function fn() {\n",[149,78827,78828],{"class":151,"line":352},[149,78829,78830],{"class":155},"      console.log(this)  \u002F\u002F指向window\n",[149,78832,78833],{"class":151,"line":1021},[149,78834,3906],{"class":155},[149,78836,78837],{"class":151,"line":1035},[149,78838,78839],{"class":155},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[149,78841,78842],{"class":151,"line":1054},[149,78843,4119],{"emptyLinePlaceholder":1800},[149,78845,78846],{"class":151,"line":1072},[149,78847,73205],{"class":155},[149,78849,78850],{"class":151,"line":1090},[149,78851,78852],{"class":155},"      name: 'andy',\n",[149,78854,78855],{"class":151,"line":1633},[149,78856,78857],{"class":155},"      sayHai: function () {\n",[149,78859,78860],{"class":151,"line":1644},[149,78861,78862],{"class":155},"        console.log(this)\n",[149,78864,78865],{"class":151,"line":3348},[149,78866,54096],{"class":155},[149,78868,78869],{"class":151,"line":3362},[149,78870,3906],{"class":155},[149,78872,78873],{"class":151,"line":3367},[149,78874,78875],{"class":155},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[149,78877,78878],{"class":151,"line":3373},[149,78879,78880],{"class":155},"    \u002F\u002F 2.箭头函数的this\n",[149,78882,78883],{"class":151,"line":3394},[149,78884,78885],{"class":155},"    const fn = () => console.log(this)\n",[149,78887,78888,78890,78892],{"class":151,"line":3399},[149,78889,54115],{"class":155},[149,78891,53512],{"class":159},[149,78893,190],{"class":155},[24,78895,78896],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[24,78898,78899],{},"const fn = () => console.log(this)",[24,78901,78902],{},"fn() \u002F\u002F指向window",[24,78904,78905],{},"\u002F\u002F 3.对象方法箭头函数 this",[24,78907,78908],{},"①",[24,78910,78911],{},"const obj = {",[24,78913,78914],{},"uname: 'pink老师',",[24,78916,78917],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[24,78919,2805],{},[24,78921,78922],{},"调用对象里边的函数",[24,78924,78925],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[24,78927,78928],{},"obj.sayHai()",[24,78930,78931],{},"②",[24,78933,78934],{},"const obj1 = {",[24,78936,78914],{},[24,78938,78939],{},"sayHai: function () {",[24,78941,78942],{},"let i = 10",[24,78944,78945],{},"const count = () => {",[24,78947,78948],{},"console.log(this)",[24,78950,78951],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[24,78953,78954],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[24,78956,2805],{},[24,78958,78959],{},"count()",[24,78961,2805],{},[24,78963,2805],{},[24,78965,78966],{},"obj1.sayHai()",[14,78968,78970],{"id":78969},"_46-解构赋值","4.6 解构赋值",[19,78972,78974],{"id":78973},"_461-数组解构","4.6.1 数组解构",[24,78976,78977],{},"以前要是使用数组中的值的话：",[24,78979,78980],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[24,78982,78983],{},"const arr=[100,60,80]",[24,78985,78986],{},"const max=arr[0]",[24,78988,78989],{},"const min=arr[1]",[24,78991,78992],{},"const avg=arr[2]",[24,78994,78995],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[24,78997,78998],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[24,79000,79001],{},"这个写法就类似于上边的那种用很多const的方法",[24,79003,79004],{},[83,79005],{"alt":145,"src":79006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[140,79008,79010],{"className":52339,"code":79009,"language":52341,"meta":145,"style":145},"①变量之间交换值:\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",[48,79011,79012,79017,79022,79027,79032,79037,79041,79045,79050,79054,79059,79064,79068,79073,79078,79089,79099,79104,79109,79114,79118,79122],{"__ignoreMap":145},[149,79013,79014],{"class":151,"line":152},[149,79015,79016],{"class":155},"①变量之间交换值:\n",[149,79018,79019],{"class":151,"line":193},[149,79020,79021],{"class":155},"let a=1\n",[149,79023,79024],{"class":151,"line":235},[149,79025,79026],{"class":155},"let b=2;\n",[149,79028,79029],{"class":151,"line":340},[149,79030,79031],{"class":155},"必须加这行代码，不然就会报错\n",[149,79033,79034],{"class":151,"line":346},[149,79035,79036],{"class":155},"[b,a]=[a,b]\n",[149,79038,79039],{"class":151,"line":352},[149,79040,4119],{"emptyLinePlaceholder":1800},[149,79042,79043],{"class":151,"line":1021},[149,79044,4119],{"emptyLinePlaceholder":1800},[149,79046,79047],{"class":151,"line":1035},[149,79048,79049],{"class":155},"可以写成下面的方式：\n",[149,79051,79052],{"class":151,"line":1054},[149,79053,79021],{"class":155},[149,79055,79056],{"class":151,"line":1072},[149,79057,79058],{"class":155},"let b=2\n",[149,79060,79061],{"class":151,"line":1090},[149,79062,79063],{"class":155},";[b,a]=[a,b]\n",[149,79065,79066],{"class":151,"line":1633},[149,79067,4119],{"emptyLinePlaceholder":1800},[149,79069,79070],{"class":151,"line":1644},[149,79071,79072],{"class":155},"②排序\n",[149,79074,79075],{"class":151,"line":3348},[149,79076,79077],{"class":155},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[149,79079,79080,79083,79086],{"class":151,"line":3362},[149,79081,79082],{"class":155},"for (let i = 0; i ",[149,79084,156],{"class":79085},"s7hpK",[149,79087,79088],{"class":155}," arr1.length; i++) {\n",[149,79090,79091,79094,79096],{"class":151,"line":3367},[149,79092,79093],{"class":155},"   for (let j = 0; j ",[149,79095,156],{"class":79085},[149,79097,79098],{"class":155}," arr1.length - 1; j++) {\n",[149,79100,79101],{"class":151,"line":3373},[149,79102,79103],{"class":155},"      if (arr1[j] > arr1[j + 1]) {\n",[149,79105,79106],{"class":151,"line":3394},[149,79107,79108],{"class":155},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[149,79110,79111],{"class":151,"line":3399},[149,79112,79113],{"class":155},"       }\n",[149,79115,79116],{"class":151,"line":3413},[149,79117,6027],{"class":155},[149,79119,79120],{"class":151,"line":3418},[149,79121,355],{"class":155},[149,79123,79124],{"class":151,"line":3447},[149,79125,79126],{"class":155},"console.log(arr1)\n",[24,79128,79129],{},"数组解构的细节：",[24,79131,79132],{},"①变量多，单元值少",[24,79134,79135],{},[83,79136],{"alt":145,"src":79137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[24,79139,79140],{},"防止出现undefined的方法：",[24,79142,79143],{},"const [a=0,b=0] =[1]",[24,79145,79146],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[24,79148,79149],{},"②变量少，单元值多",[24,79151,79152],{},[83,79153],{"alt":145,"src":79154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[24,79156,79157],{},"此时可以使用剩余参数来接收多余的值",[24,79159,79160],{},"const [a,b,...c]=[1,2,3,4]",[24,79162,79163],{},"console.log(c) 输出[3,4]",[24,79165,79166],{},"③可以按需导入，忽略某些返回值",[24,79168,79169],{},[83,79170],{"alt":145,"src":79171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[24,79173,79174],{},"④支持多维数组的结构",[140,79176,79180],{"className":79177,"code":79178,"language":79179,"meta":145,"style":145},"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",[48,79181,79182,79210,79226,79241,79256],{"__ignoreMap":145},[149,79183,79184,79186,79188,79190,79192,79194,79196,79198,79201,79203,79205,79207],{"class":151,"line":152},[149,79185,8508],{"class":325},[149,79187,53532],{"class":155},[149,79189,166],{"class":325},[149,79191,53924],{"class":155},[149,79193,830],{"class":309},[149,79195,329],{"class":155},[149,79197,1045],{"class":309},[149,79199,79200],{"class":155},", [",[149,79202,1939],{"class":309},[149,79204,329],{"class":155},[149,79206,2157],{"class":309},[149,79208,79209],{"class":155},"]]\n",[149,79211,79212,79215,79217,79219,79221,79223],{"class":151,"line":193},[149,79213,79214],{"class":155},"console.",[149,79216,59938],{"class":162},[149,79218,5569],{"class":155},[149,79220,2056],{"class":309},[149,79222,5934],{"class":155},[149,79224,79225],{"class":295},"  \u002F\u002F1\n",[149,79227,79228,79230,79232,79234,79236,79238],{"class":151,"line":235},[149,79229,79214],{"class":155},[149,79231,59938],{"class":162},[149,79233,5569],{"class":155},[149,79235,830],{"class":309},[149,79237,5934],{"class":155},[149,79239,79240],{"class":295},"  \u002F\u002F2\n",[149,79242,79243,79245,79247,79249,79251,79253],{"class":151,"line":340},[149,79244,79214],{"class":155},[149,79246,59938],{"class":162},[149,79248,5569],{"class":155},[149,79250,1045],{"class":309},[149,79252,5934],{"class":155},[149,79254,79255],{"class":295},"  \u002F\u002F[3,4]\n",[149,79257,79258,79260,79262,79264,79266,79268,79270,79272],{"class":151,"line":346},[149,79259,79214],{"class":155},[149,79261,59938],{"class":162},[149,79263,5569],{"class":155},[149,79265,1045],{"class":309},[149,79267,6619],{"class":155},[149,79269,2056],{"class":309},[149,79271,5934],{"class":155},[149,79273,79274],{"class":295},"  \u002F\u002F3\n",[140,79276,79278],{"className":79177,"code":79277,"language":79179,"meta":145,"style":145},"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",[48,79279,79280,79307,79318,79329],{"__ignoreMap":145},[149,79281,79282,79284,79287,79289,79291,79293,79295,79297,79299,79301,79303,79305],{"class":151,"line":152},[149,79283,8508],{"class":325},[149,79285,79286],{"class":155}," [a, b, c] ",[149,79288,166],{"class":325},[149,79290,53924],{"class":155},[149,79292,830],{"class":309},[149,79294,329],{"class":155},[149,79296,1045],{"class":309},[149,79298,79200],{"class":155},[149,79300,1939],{"class":309},[149,79302,329],{"class":155},[149,79304,2157],{"class":309},[149,79306,79209],{"class":155},[149,79308,79309,79311,79313,79316],{"class":151,"line":193},[149,79310,79214],{"class":155},[149,79312,59938],{"class":162},[149,79314,79315],{"class":155},"(a)",[149,79317,79225],{"class":295},[149,79319,79320,79322,79324,79327],{"class":151,"line":235},[149,79321,79214],{"class":155},[149,79323,59938],{"class":162},[149,79325,79326],{"class":155},"(b)",[149,79328,79240],{"class":295},[149,79330,79331,79333,79335,79338],{"class":151,"line":340},[149,79332,79214],{"class":155},[149,79334,59938],{"class":162},[149,79336,79337],{"class":155},"(c)",[149,79339,79255],{"class":295},[140,79341,79343],{"className":79177,"code":79342,"language":79179,"meta":145,"style":145},"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",[48,79344,79345,79372,79382,79392,79402],{"__ignoreMap":145},[149,79346,79347,79349,79352,79354,79356,79358,79360,79362,79364,79366,79368,79370],{"class":151,"line":152},[149,79348,8508],{"class":325},[149,79350,79351],{"class":155}," [a, b, [c, d]] ",[149,79353,166],{"class":325},[149,79355,53924],{"class":155},[149,79357,830],{"class":309},[149,79359,329],{"class":155},[149,79361,1045],{"class":309},[149,79363,79200],{"class":155},[149,79365,1939],{"class":309},[149,79367,329],{"class":155},[149,79369,2157],{"class":309},[149,79371,79209],{"class":155},[149,79373,79374,79376,79378,79380],{"class":151,"line":193},[149,79375,79214],{"class":155},[149,79377,59938],{"class":162},[149,79379,79315],{"class":155},[149,79381,79225],{"class":295},[149,79383,79384,79386,79388,79390],{"class":151,"line":235},[149,79385,79214],{"class":155},[149,79387,59938],{"class":162},[149,79389,79326],{"class":155},[149,79391,79240],{"class":295},[149,79393,79394,79396,79398,79400],{"class":151,"line":340},[149,79395,79214],{"class":155},[149,79397,59938],{"class":162},[149,79399,79337],{"class":155},[149,79401,79274],{"class":295},[149,79403,79404,79406,79408,79411],{"class":151,"line":346},[149,79405,79214],{"class":155},[149,79407,59938],{"class":162},[149,79409,79410],{"class":155},"(d)",[149,79412,79413],{"class":295},"  \u002F\u002F4\n",[19,79415,79417],{"id":79416},"_462-对象解构","4.6.2 对象解构",[24,79419,79420],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[24,79422,79423],{},"用的非常非常多！！！！！！",[120,79425,79427],{"id":79426},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[24,79429,79430],{},"基本语法：",[125,79432,79433,79436,79439,79442],{},[45,79434,79435],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[45,79437,79438],{},"对象属性的值将被赋值给与属性名相同的变量",[45,79440,79441],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[45,79443,79444],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[140,79446,79448],{"className":52339,"code":79447,"language":52341,"meta":145,"style":145},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[48,79449,79450,79455,79460,79465,79469],{"__ignoreMap":145},[149,79451,79452],{"class":151,"line":152},[149,79453,79454],{"class":155},"const obj = {\n",[149,79456,79457],{"class":151,"line":193},[149,79458,79459],{"class":155},"   uname: 'pink老师',\n",[149,79461,79462],{"class":151,"line":235},[149,79463,79464],{"class":155},"   age: 18,\n",[149,79466,79467],{"class":151,"line":340},[149,79468,355],{"class":155},[149,79470,79471],{"class":151,"line":346},[149,79472,79473],{"class":155},"const { uname, age } = obj\n",[24,79475,79476],{},"上方代码这样写等价于：",[24,79478,79479],{},"const uname等价于obj.uname",[24,79481,79482],{},"变量名可以重新改名：",[24,79484,79485],{},"const uname='red老师'",[24,79487,79488],{},"const user={",[24,79490,79491],{},"  uname:'pink老师',",[24,79493,79494],{},"  age:18",[24,79496,2805],{},[24,79498,79499],{},"const {uname,age}=user",[24,79501,79502],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[24,79504,79505],{},"const {旧变量名：新变量名}=对象",[24,79507,79508],{},"const {uname:username,age}=user",[120,79510,79512],{"id":79511},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[24,79514,79515],{},[83,79516],{"alt":145,"src":79517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[120,79519,79521],{"id":79520},"_4623-多级对象解构","4.6.2.3 多级对象解构",[24,79523,79524],{},[83,79525],{"alt":145,"src":79526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[140,79528,79530],{"className":54765,"code":79529,"language":54767,"meta":145,"style":145},"  \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",[48,79531,79532,79540,79545,79550,79555,79560,79565,79570,79575,79580,79584,79589,79594],{"__ignoreMap":145},[149,79533,79534,79536,79538],{"class":151,"line":152},[149,79535,587],{"class":155},[149,79537,53512],{"class":159},[149,79539,190],{"class":155},[149,79541,79542],{"class":151,"line":193},[149,79543,79544],{"class":155},"    const pig = {\n",[149,79546,79547],{"class":151,"line":235},[149,79548,79549],{"class":155},"      name: '佩奇',\n",[149,79551,79552],{"class":151,"line":340},[149,79553,79554],{"class":155},"      family: {\n",[149,79556,79557],{"class":151,"line":346},[149,79558,79559],{"class":155},"        mother: '猪妈妈',\n",[149,79561,79562],{"class":151,"line":352},[149,79563,79564],{"class":155},"        father: '猪爸爸',\n",[149,79566,79567],{"class":151,"line":1021},[149,79568,79569],{"class":155},"        sister: '乔治'\n",[149,79571,79572],{"class":151,"line":1035},[149,79573,79574],{"class":155},"      },\n",[149,79576,79577],{"class":151,"line":1054},[149,79578,79579],{"class":155},"      age: 6\n",[149,79581,79582],{"class":151,"line":1072},[149,79583,3906],{"class":155},[149,79585,79586],{"class":151,"line":1090},[149,79587,79588],{"class":155},"    \u002F\u002F 多级对象解构\n",[149,79590,79591],{"class":151,"line":1633},[149,79592,79593],{"class":155},"    const { name, family: { mother, father, sister }, age } = pig\n",[149,79595,79596,79598,79600],{"class":151,"line":1644},[149,79597,54115],{"class":155},[149,79599,53512],{"class":159},[149,79601,190],{"class":155},[24,79603,79604],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[140,79606,79609],{"className":79607,"code":79608,"language":78129,"meta":145,"style":145},"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",[48,79610,79611,79616,79627,79639,79651,79660,79664,79675,79687,79697,79702,79706,79716,79727,79736,79740,79744,79755,79766,79775,79779,79784],{"__ignoreMap":145},[149,79612,79613],{"class":151,"line":152},[149,79614,79615],{"class":295},"    \u002F\u002F 这是后台传递过来的数据\n",[149,79617,79618,79620,79623,79625],{"class":151,"line":193},[149,79619,12935],{"class":325},[149,79621,79622],{"class":155}," msg ",[149,79624,166],{"class":325},[149,79626,304],{"class":155},[149,79628,79629,79632,79634,79637],{"class":151,"line":235},[149,79630,79631],{"class":169},"      \"code\"",[149,79633,2720],{"class":325},[149,79635,79636],{"class":309}," 200",[149,79638,33172],{"class":155},[149,79640,79641,79644,79646,79649],{"class":151,"line":340},[149,79642,79643],{"class":169},"      \"msg\"",[149,79645,2720],{"class":325},[149,79647,79648],{"class":169}," \"获取新闻列表成功\"",[149,79650,33172],{"class":155},[149,79652,79653,79656,79658],{"class":151,"line":346},[149,79654,79655],{"class":169},"      \"data\"",[149,79657,2720],{"class":325},[149,79659,57139],{"class":155},[149,79661,79662],{"class":151,"line":352},[149,79663,4229],{"class":155},[149,79665,79666,79669,79671,79673],{"class":151,"line":1021},[149,79667,79668],{"class":169},"          \"id\"",[149,79670,2720],{"class":325},[149,79672,26827],{"class":309},[149,79674,33172],{"class":155},[149,79676,79677,79680,79682,79685],{"class":151,"line":1035},[149,79678,79679],{"class":169},"          \"title\"",[149,79681,2720],{"class":325},[149,79683,79684],{"class":169}," \"5G商用自己，三大运用商收入下降\"",[149,79686,33172],{"class":155},[149,79688,79689,79692,79694],{"class":151,"line":1054},[149,79690,79691],{"class":169},"          \"count\"",[149,79693,2720],{"class":325},[149,79695,79696],{"class":309}," 58\n",[149,79698,79699],{"class":151,"line":1072},[149,79700,79701],{"class":155},"        },\n",[149,79703,79704],{"class":151,"line":1090},[149,79705,4229],{"class":155},[149,79707,79708,79710,79712,79714],{"class":151,"line":1633},[149,79709,79668],{"class":169},[149,79711,2720],{"class":325},[149,79713,16467],{"class":309},[149,79715,33172],{"class":155},[149,79717,79718,79720,79722,79725],{"class":151,"line":1644},[149,79719,79679],{"class":169},[149,79721,2720],{"class":325},[149,79723,79724],{"class":169}," \"国际媒体头条速览\"",[149,79726,33172],{"class":155},[149,79728,79729,79731,79733],{"class":151,"line":3348},[149,79730,79691],{"class":169},[149,79732,2720],{"class":325},[149,79734,79735],{"class":309}," 56\n",[149,79737,79738],{"class":151,"line":3362},[149,79739,79701],{"class":155},[149,79741,79742],{"class":151,"line":3367},[149,79743,4229],{"class":155},[149,79745,79746,79748,79750,79753],{"class":151,"line":3373},[149,79747,79668],{"class":169},[149,79749,2720],{"class":325},[149,79751,79752],{"class":309}," 3",[149,79754,33172],{"class":155},[149,79756,79757,79759,79761,79764],{"class":151,"line":3394},[149,79758,79679],{"class":169},[149,79760,2720],{"class":325},[149,79762,79763],{"class":169}," \"乌克兰和俄罗斯持续冲突\"",[149,79765,33172],{"class":155},[149,79767,79768,79770,79772],{"class":151,"line":3399},[149,79769,79691],{"class":169},[149,79771,2720],{"class":325},[149,79773,79774],{"class":309}," 1669\n",[149,79776,79777],{"class":151,"line":3413},[149,79778,79701],{"class":155},[149,79780,79781],{"class":151,"line":3418},[149,79782,79783],{"class":155},"      ]\n",[149,79785,79786],{"class":151,"line":3447},[149,79787,3906],{"class":155},[24,79789,79790],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[24,79792,79793],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[24,79795,79796],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[24,79798,79799],{},"function({data}) {",[24,79801,79802],{},"console.log(data)",[24,79804,2805],{},[24,79806,79807],{},"render(msg)",[24,79809,79810],{},"实参传递给形参的时候解构了",[24,79812,79813],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[24,79815,79816],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[24,79818,79819],{},"function render({data:mydata}) {",[24,79821,79822],{},"  console.log(data)",[24,79824,2805],{},[19,79826,79828],{"id":79827},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[24,79830,79831],{},"有两种情况：一个是数组结构，一个是立即执行函数",[125,79833,79834],{},[45,79835,79836],{},"如果对一个数组进行遍历，有两种方式：",[24,79838,79839],{},"①法1",[24,79841,79842],{},"const arr=[1,2,3]",[24,79844,79845],{},"arr.map(function(item,index) {",[24,79847,79848],{},"  console.log(item)",[24,79850,54162],{},[24,79852,79853],{},[83,79854],{"alt":145,"src":79855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[24,79857,79858],{},"②法2",[24,79860,79861],{},"const str='pink'",[24,79863,79864],{},"[1,2,3].map(function(item,index) {",[24,79866,79867],{},"console.log(item)",[24,79869,54162],{},[24,79871,79872],{},[83,79873],{"alt":145,"src":79874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[24,79876,79877],{},"此时会报错",[24,79879,79880],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[24,79882,79867],{},[24,79884,54162],{},[24,79886,79887],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79889,79891],{"id":79890},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[24,79893,79894],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[24,79896,79897],{},"可以理解为加强版的for循环",[24,79899,79900],{},[83,79901],{"alt":145,"src":79902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[24,79904,79905],{},"里边不写return，不返回数组，只遍历不返回",[24,79907,79908],{},"map是返回数组",[24,79910,79911],{},"forEach主要用于遍历数组对象",[140,79913,79915],{"className":54765,"code":79914,"language":54767,"meta":145,"style":145},"  \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",[48,79916,79917,79925,79930,79935,79940,79945,79949,79954],{"__ignoreMap":145},[149,79918,79919,79921,79923],{"class":151,"line":152},[149,79920,587],{"class":155},[149,79922,53512],{"class":159},[149,79924,190],{"class":155},[149,79926,79927],{"class":151,"line":193},[149,79928,79929],{"class":155},"    const arr = ['red', 'green', 'pink']\n",[149,79931,79932],{"class":151,"line":235},[149,79933,79934],{"class":155},"    const result = arr.forEach(function (item, index) {\n",[149,79936,79937],{"class":151,"line":340},[149,79938,79939],{"class":155},"      console.log(item)\n",[149,79941,79942],{"class":151,"line":346},[149,79943,79944],{"class":155},"      console.log(index)\n",[149,79946,79947],{"class":151,"line":352},[149,79948,35167],{"class":155},[149,79950,79951],{"class":151,"line":1021},[149,79952,79953],{"class":155},"    console.log(result)\n",[149,79955,79956,79958,79960],{"class":151,"line":1035},[149,79957,54115],{"class":155},[149,79959,53512],{"class":159},[149,79961,190],{"class":155},[24,79963,79964],{},[83,79965],{"alt":145,"src":79966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79968,79970],{"id":79969},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[24,79972,79973],{},[83,79974],{"alt":145,"src":79975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[24,79977,79978],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[140,79980,79982],{"className":54765,"code":79981,"language":54767,"meta":145,"style":145},"\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",[48,79983,79984,79992,80000,80005,80010,80014,80018,80023,80027,80032,80040],{"__ignoreMap":145},[149,79985,79986,79988,79990],{"class":151,"line":152},[149,79987,156],{"class":155},[149,79989,53499],{"class":159},[149,79991,190],{"class":155},[149,79993,79994,79996,79998],{"class":151,"line":193},[149,79995,587],{"class":155},[149,79997,53512],{"class":159},[149,79999,190],{"class":155},[149,80001,80002],{"class":151,"line":235},[149,80003,80004],{"class":155},"    const arr = [10, 20, 30]\n",[149,80006,80007],{"class":151,"line":340},[149,80008,80009],{"class":155},"    const newArr = arr.filter(function (item, index) {\n",[149,80011,80012],{"class":151,"line":346},[149,80013,79939],{"class":155},[149,80015,80016],{"class":151,"line":352},[149,80017,79944],{"class":155},[149,80019,80020],{"class":151,"line":1021},[149,80021,80022],{"class":155},"      return item >= 20\n",[149,80024,80025],{"class":151,"line":1035},[149,80026,35167],{"class":155},[149,80028,80029],{"class":151,"line":1054},[149,80030,80031],{"class":155},"    console.log(newArr)\n",[149,80033,80034,80036,80038],{"class":151,"line":1072},[149,80035,54115],{"class":155},[149,80037,53512],{"class":159},[149,80039,190],{"class":155},[149,80041,80042,80044,80046],{"class":151,"line":1090},[149,80043,665],{"class":155},[149,80045,53499],{"class":159},[149,80047,190],{"class":155},[24,80049,80050],{},"这个也可以写成箭头函数：",[140,80052,80054],{"className":52339,"code":80053,"language":52341,"meta":145,"style":145},"const newArr = arr.filter(item => item >= 20)\n",[48,80055,80056],{"__ignoreMap":145},[149,80057,80058],{"class":151,"line":152},[149,80059,80053],{"class":155},[14,80061,80063],{"id":80062},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[24,80065,80066],{},[83,80067],{"alt":145,"src":80068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[24,80070,80071],{},"步骤：",[24,80073,80074],{},"①：渲染页面模块",[42,80076,80077,80080],{},[45,80078,80079],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[45,80081,80082],{},"用forEach+字符串的形式",[24,80084,80085],{},"②：点击不同需求，显示不同页面内容",[42,80087,80088,80091,80094,80097,80100],{},[45,80089,80090],{},"点击采取事件委托方式 .filter",[45,80092,80093],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[45,80095,80096],{},"筛选条件是根据点击的 data-index 来判断",[45,80098,80099],{},"可以使用对象解构，把事件对象解构",[45,80101,80102],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[140,80104,80106],{"className":52339,"code":80105,"language":52341,"meta":145,"style":145},"\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",[48,80107,80108,80118,80132,80136,80144,80158,80178,80190,80198,80204,80214,80224,80234,80238,80242,80248,80261,80273,80283,80295,80299,80303,80310,80323,80335,80352,80369,80382,80386,80390,80402,80412,80416,80420,80427,80468,80495,80505,80509,80513,80521,80533,80537,80541,80549,80561,80573,80584,80588,80592,80601,80613,80624,80628,80632,80641,80653,80665,80669,80673,80680,80690,80702,80714,80729,80733,80737,80745,80761,80771,80781,80791,80803,80807,80811,80821,80832,80842,80846,80854,80862,80866,80874,80889,80915,80940,80965,80984,80992,81006,81011,81016,81021,81026,81031,81039,81047,81052,81063,81068,81078,81088,81098,81108,81112,81116,81125,81134,81143,81152,81156,81160,81169,81178,81187,81196,81200,81204,81213,81222,81231,81240,81244,81248,81257,81266,81275,81284,81288,81292,81301,81310,81319,81328,81332,81336,81345,81354,81363,81372,81376,81380,81389,81398,81406,81415,81419,81423,81427,81432,81444,81449,81461,81465,81482,81510,81519,81524,81534,81544,81553,81558,81563,81567,81572,81589,81593,81598,81606,81611,81638,81643,81663,81668,81680,81685,81690,81695,81706,81720,81757,81775,81808,81825,81849,81853,81858,81864,81868,81872,81876,81884,81892,81896],{"__ignoreMap":145},[149,80109,80110,80112,80114,80116],{"class":151,"line":152},[149,80111,53003],{"class":155},[149,80113,53006],{"class":159},[149,80115,53009],{"class":162},[149,80117,190],{"class":155},[149,80119,80120,80122,80124,80126,80128,80130],{"class":151,"line":193},[149,80121,156],{"class":155},[149,80123,52341],{"class":159},[149,80125,53020],{"class":162},[149,80127,166],{"class":155},[149,80129,53025],{"class":169},[149,80131,190],{"class":155},[149,80133,80134],{"class":151,"line":235},[149,80135,4119],{"emptyLinePlaceholder":1800},[149,80137,80138,80140,80142],{"class":151,"line":340},[149,80139,156],{"class":155},[149,80141,53038],{"class":159},[149,80143,190],{"class":155},[149,80145,80146,80148,80150,80152,80154,80156],{"class":151,"line":346},[149,80147,587],{"class":155},[149,80149,53048],{"class":159},[149,80151,53051],{"class":162},[149,80153,166],{"class":155},[149,80155,53056],{"class":169},[149,80157,190],{"class":155},[149,80159,80160,80162,80164,80166,80168,80170,80172,80174,80176],{"class":151,"line":352},[149,80161,587],{"class":155},[149,80163,53048],{"class":159},[149,80165,515],{"class":162},[149,80167,166],{"class":155},[149,80169,53095],{"class":169},[149,80171,53075],{"class":162},[149,80173,166],{"class":155},[149,80175,53102],{"class":169},[149,80177,190],{"class":155},[149,80179,80180,80182,80184,80186,80188],{"class":151,"line":1021},[149,80181,587],{"class":155},[149,80183,53111],{"class":159},[149,80185,53114],{"class":155},[149,80187,53111],{"class":159},[149,80189,190],{"class":155},[149,80191,80192,80194,80196],{"class":151,"line":1035},[149,80193,587],{"class":155},[149,80195,1783],{"class":159},[149,80197,190],{"class":155},[149,80199,80200,80202],{"class":151,"line":1054},[149,80201,8119],{"class":159},[149,80203,304],{"class":155},[149,80205,80206,80208,80210,80212],{"class":151,"line":1072},[149,80207,56390],{"class":309},[149,80209,313],{"class":155},[149,80211,2056],{"class":309},[149,80213,841],{"class":155},[149,80215,80216,80218,80220,80222],{"class":151,"line":1090},[149,80217,56401],{"class":309},[149,80219,313],{"class":155},[149,80221,2056],{"class":309},[149,80223,841],{"class":155},[149,80225,80226,80228,80230,80232],{"class":151,"line":1633},[149,80227,74278],{"class":309},[149,80229,313],{"class":155},[149,80231,62196],{"class":309},[149,80233,841],{"class":155},[149,80235,80236],{"class":151,"line":1644},[149,80237,3906],{"class":155},[149,80239,80240],{"class":151,"line":3348},[149,80241,4119],{"emptyLinePlaceholder":1800},[149,80243,80244,80246],{"class":151,"line":3362},[149,80245,63811],{"class":162},[149,80247,304],{"class":155},[149,80249,80250,80252,80254,80257,80259],{"class":151,"line":3367},[149,80251,56466],{"class":309},[149,80253,313],{"class":155},[149,80255,80256],{"class":309},"990",[149,80258,326],{"class":325},[149,80260,841],{"class":155},[149,80262,80263,80265,80267,80269,80271],{"class":151,"line":3373},[149,80264,56401],{"class":309},[149,80266,313],{"class":155},[149,80268,2056],{"class":309},[149,80270,53257],{"class":309},[149,80272,841],{"class":155},[149,80274,80275,80277,80279,80281],{"class":151,"line":3394},[149,80276,56704],{"class":309},[149,80278,313],{"class":155},[149,80280,53180],{"class":309},[149,80282,841],{"class":155},[149,80284,80285,80288,80290,80293],{"class":151,"line":3399},[149,80286,80287],{"class":309},"      flex-wrap",[149,80289,313],{"class":155},[149,80291,80292],{"class":309},"wrap",[149,80294,841],{"class":155},[149,80296,80297],{"class":151,"line":3413},[149,80298,3906],{"class":155},[149,80300,80301],{"class":151,"line":3418},[149,80302,4119],{"emptyLinePlaceholder":1800},[149,80304,80305,80308],{"class":151,"line":3447},[149,80306,80307],{"class":162},"    .item",[149,80309,304],{"class":155},[149,80311,80312,80314,80316,80319,80321],{"class":151,"line":3452},[149,80313,56466],{"class":309},[149,80315,313],{"class":155},[149,80317,80318],{"class":309},"240",[149,80320,326],{"class":325},[149,80322,841],{"class":155},[149,80324,80325,80327,80329,80331,80333],{"class":151,"line":3469},[149,80326,63689],{"class":309},[149,80328,313],{"class":155},[149,80330,2309],{"class":309},[149,80332,326],{"class":325},[149,80334,841],{"class":155},[149,80336,80337,80339,80341,80343,80345,80348,80350],{"class":151,"line":3474},[149,80338,56390],{"class":309},[149,80340,313],{"class":155},[149,80342,2561],{"class":309},[149,80344,326],{"class":325},[149,80346,80347],{"class":309}," 30",[149,80349,326],{"class":325},[149,80351,841],{"class":155},[149,80353,80354,80356,80358,80360,80362,80365,80367],{"class":151,"line":3479},[149,80355,63549],{"class":309},[149,80357,313],{"class":155},[149,80359,1714],{"class":309},[149,80361,1723],{"class":309},[149,80363,80364],{"class":309}," .5",[149,80366,1720],{"class":325},[149,80368,841],{"class":155},[149,80370,80371,80374,80376,80378,80380],{"class":151,"line":3484},[149,80372,80373],{"class":309},"      margin-bottom",[149,80375,313],{"class":155},[149,80377,2561],{"class":309},[149,80379,326],{"class":325},[149,80381,841],{"class":155},[149,80383,80384],{"class":151,"line":3498},[149,80385,3906],{"class":155},[149,80387,80388],{"class":151,"line":3503},[149,80389,4119],{"emptyLinePlaceholder":1800},[149,80391,80392,80395,80397,80400],{"class":151,"line":4296},[149,80393,80394],{"class":162},"    .item:nth-child",[149,80396,319],{"class":155},[149,80398,80399],{"class":309},"4n",[149,80401,14155],{"class":155},[149,80403,80404,80406,80408,80410],{"class":151,"line":4310},[149,80405,63689],{"class":309},[149,80407,313],{"class":155},[149,80409,2056],{"class":309},[149,80411,841],{"class":155},[149,80413,80414],{"class":151,"line":4318},[149,80415,3906],{"class":155},[149,80417,80418],{"class":151,"line":4323},[149,80419,4119],{"emptyLinePlaceholder":1800},[149,80421,80422,80425],{"class":151,"line":4329},[149,80423,80424],{"class":162},"    .item:hover",[149,80426,304],{"class":155},[149,80428,80429,80432,80434,80436,80438,80440,80442,80444,80446,80449,80451,80453,80455,80457,80459,80461,80463,80466],{"class":151,"line":4335},[149,80430,80431],{"class":309},"      box-shadow",[149,80433,313],{"class":155},[149,80435,2056],{"class":309},[149,80437,326],{"class":325},[149,80439,5811],{"class":309},[149,80441,326],{"class":325},[149,80443,3867],{"class":309},[149,80445,326],{"class":325},[149,80447,80448],{"class":309}," rgba",[149,80450,319],{"class":155},[149,80452,2056],{"class":309},[149,80454,329],{"class":155},[149,80456,2056],{"class":309},[149,80458,329],{"class":155},[149,80460,2056],{"class":309},[149,80462,329],{"class":155},[149,80464,80465],{"class":309},".2",[149,80467,337],{"class":155},[149,80469,80470,80473,80475,80478,80480,80482,80484,80487,80489,80491,80493],{"class":151,"line":4340},[149,80471,80472],{"class":309},"      transform",[149,80474,313],{"class":155},[149,80476,80477],{"class":309},"translate3d",[149,80479,319],{"class":155},[149,80481,2056],{"class":309},[149,80483,329],{"class":155},[149,80485,80486],{"class":309},"-4",[149,80488,326],{"class":325},[149,80490,329],{"class":155},[149,80492,2056],{"class":309},[149,80494,337],{"class":155},[149,80496,80497,80499,80501,80503],{"class":151,"line":9663},[149,80498,63714],{"class":309},[149,80500,313],{"class":155},[149,80502,63719],{"class":309},[149,80504,841],{"class":155},[149,80506,80507],{"class":151,"line":9687},[149,80508,3906],{"class":155},[149,80510,80511],{"class":151,"line":9692},[149,80512,4119],{"emptyLinePlaceholder":1800},[149,80514,80515,80517,80519],{"class":151,"line":9698},[149,80516,80307],{"class":162},[149,80518,57307],{"class":159},[149,80520,304],{"class":155},[149,80522,80523,80525,80527,80529,80531],{"class":151,"line":9725},[149,80524,56466],{"class":309},[149,80526,313],{"class":155},[149,80528,322],{"class":309},[149,80530,2191],{"class":325},[149,80532,841],{"class":155},[149,80534,80535],{"class":151,"line":9730},[149,80536,3906],{"class":155},[149,80538,80539],{"class":151,"line":9736},[149,80540,4119],{"emptyLinePlaceholder":1800},[149,80542,80543,80545,80547],{"class":151,"line":9748},[149,80544,80307],{"class":162},[149,80546,63992],{"class":162},[149,80548,304],{"class":155},[149,80550,80551,80553,80555,80557,80559],{"class":151,"line":9760},[149,80552,56617],{"class":309},[149,80554,313],{"class":155},[149,80556,2513],{"class":309},[149,80558,326],{"class":325},[149,80560,841],{"class":155},[149,80562,80563,80565,80567,80569,80571],{"class":151,"line":9772},[149,80564,80373],{"class":309},[149,80566,313],{"class":155},[149,80568,2309],{"class":309},[149,80570,326],{"class":325},[149,80572,841],{"class":155},[149,80574,80575,80577,80579,80582],{"class":151,"line":11430},[149,80576,59108],{"class":309},[149,80578,313],{"class":155},[149,80580,80581],{"class":309},"#666",[149,80583,841],{"class":155},[149,80585,80586],{"class":151,"line":11455},[149,80587,3906],{"class":155},[149,80589,80590],{"class":151,"line":11478},[149,80591,4119],{"emptyLinePlaceholder":1800},[149,80593,80594,80596,80599],{"class":151,"line":11502},[149,80595,80307],{"class":162},[149,80597,80598],{"class":162}," .price",[149,80600,304],{"class":155},[149,80602,80603,80605,80607,80609,80611],{"class":151,"line":11507},[149,80604,56617],{"class":309},[149,80606,313],{"class":155},[149,80608,2611],{"class":309},[149,80610,326],{"class":325},[149,80612,841],{"class":155},[149,80614,80615,80617,80619,80622],{"class":151,"line":11512},[149,80616,59108],{"class":309},[149,80618,313],{"class":155},[149,80620,80621],{"class":309},"firebrick",[149,80623,841],{"class":155},[149,80625,80626],{"class":151,"line":11517},[149,80627,3906],{"class":155},[149,80629,80630],{"class":151,"line":11526},[149,80631,4119],{"emptyLinePlaceholder":1800},[149,80633,80634,80636,80639],{"class":151,"line":11531},[149,80635,80307],{"class":162},[149,80637,80638],{"class":162}," .price::before",[149,80640,304],{"class":155},[149,80642,80643,80646,80648,80651],{"class":151,"line":11537},[149,80644,80645],{"class":309},"      content",[149,80647,313],{"class":155},[149,80649,80650],{"class":169},"'￥'",[149,80652,841],{"class":155},[149,80654,80655,80657,80659,80661,80663],{"class":151,"line":11558},[149,80656,56617],{"class":309},[149,80658,313],{"class":155},[149,80660,2412],{"class":309},[149,80662,326],{"class":325},[149,80664,841],{"class":155},[149,80666,80667],{"class":151,"line":11564},[149,80668,3906],{"class":155},[149,80670,80671],{"class":151,"line":11578},[149,80672,4119],{"emptyLinePlaceholder":1800},[149,80674,80675,80678],{"class":151,"line":11584},[149,80676,80677],{"class":162},"    .filter",[149,80679,304],{"class":155},[149,80681,80682,80684,80686,80688],{"class":151,"line":11611},[149,80683,56704],{"class":309},[149,80685,313],{"class":155},[149,80687,53180],{"class":309},[149,80689,841],{"class":155},[149,80691,80692,80694,80696,80698,80700],{"class":151,"line":11620},[149,80693,56466],{"class":309},[149,80695,313],{"class":155},[149,80697,80256],{"class":309},[149,80699,326],{"class":325},[149,80701,841],{"class":155},[149,80703,80704,80706,80708,80710,80712],{"class":151,"line":11626},[149,80705,56401],{"class":309},[149,80707,313],{"class":155},[149,80709,2056],{"class":309},[149,80711,53257],{"class":309},[149,80713,841],{"class":155},[149,80715,80716,80718,80720,80722,80724,80726],{"class":151,"line":11634},[149,80717,56390],{"class":309},[149,80719,313],{"class":155},[149,80721,332],{"class":309},[149,80723,326],{"class":325},[149,80725,80347],{"class":309},[149,80727,80728],{"class":325},"px\n",[149,80730,80731],{"class":151,"line":11639},[149,80732,3906],{"class":155},[149,80734,80735],{"class":151,"line":18314},[149,80736,4119],{"emptyLinePlaceholder":1800},[149,80738,80739,80741,80743],{"class":151,"line":18320},[149,80740,80677],{"class":162},[149,80742,3123],{"class":159},[149,80744,304],{"class":155},[149,80746,80747,80749,80751,80753,80755,80757,80759],{"class":151,"line":18343},[149,80748,56390],{"class":309},[149,80750,313],{"class":155},[149,80752,2309],{"class":309},[149,80754,326],{"class":325},[149,80756,10665],{"class":309},[149,80758,326],{"class":325},[149,80760,841],{"class":155},[149,80762,80763,80765,80767,80769],{"class":151,"line":18349},[149,80764,63410],{"class":309},[149,80766,313],{"class":155},[149,80768,63507],{"class":309},[149,80770,841],{"class":155},[149,80772,80773,80775,80777,80779],{"class":151,"line":18372},[149,80774,59108],{"class":309},[149,80776,313],{"class":155},[149,80778,80581],{"class":309},[149,80780,841],{"class":155},[149,80782,80783,80785,80787,80789],{"class":151,"line":18386},[149,80784,65657],{"class":309},[149,80786,313],{"class":155},[149,80788,56432],{"class":309},[149,80790,841],{"class":155},[149,80792,80793,80795,80797,80799,80801],{"class":151,"line":18406},[149,80794,63439],{"class":309},[149,80796,313],{"class":155},[149,80798,2561],{"class":309},[149,80800,326],{"class":325},[149,80802,841],{"class":155},[149,80804,80805],{"class":151,"line":18412},[149,80806,3906],{"class":155},[149,80808,80809],{"class":151,"line":18423},[149,80810,4119],{"emptyLinePlaceholder":1800},[149,80812,80813,80815,80817,80819],{"class":151,"line":18446},[149,80814,80677],{"class":162},[149,80816,3123],{"class":159},[149,80818,63589],{"class":162},[149,80820,304],{"class":155},[149,80822,80823,80825,80827,80830],{"class":151,"line":18468},[149,80824,56579],{"class":309},[149,80826,313],{"class":155},[149,80828,80829],{"class":309},"#05943c",[149,80831,841],{"class":155},[149,80833,80834,80836,80838,80840],{"class":151,"line":18473},[149,80835,59108],{"class":309},[149,80837,313],{"class":155},[149,80839,62533],{"class":309},[149,80841,841],{"class":155},[149,80843,80844],{"class":151,"line":18479},[149,80845,3906],{"class":155},[149,80847,80848,80850,80852],{"class":151,"line":18493},[149,80849,54115],{"class":155},[149,80851,1783],{"class":159},[149,80853,190],{"class":155},[149,80855,80856,80858,80860],{"class":151,"line":18506},[149,80857,665],{"class":155},[149,80859,53038],{"class":159},[149,80861,190],{"class":155},[149,80863,80864],{"class":151,"line":18511},[149,80865,4119],{"emptyLinePlaceholder":1800},[149,80867,80868,80870,80872],{"class":151,"line":18525},[149,80869,156],{"class":155},[149,80871,53499],{"class":159},[149,80873,190],{"class":155},[149,80875,80876,80878,80880,80882,80884,80887],{"class":151,"line":18530},[149,80877,587],{"class":155},[149,80879,301],{"class":159},[149,80881,55184],{"class":162},[149,80883,166],{"class":155},[149,80885,80886],{"class":169},"\"filter\"",[149,80888,190],{"class":155},[149,80890,80891,80893,80895,80897,80899,80901,80904,80906,80908,80911,80913],{"class":151,"line":18536},[149,80892,53045],{"class":155},[149,80894,2102],{"class":159},[149,80896,62746],{"class":162},[149,80898,166],{"class":155},[149,80900,62751],{"class":169},[149,80902,80903],{"class":162}," data-index",[149,80905,166],{"class":155},[149,80907,5396],{"class":169},[149,80909,80910],{"class":155},">0-100元\u003C\u002F",[149,80912,2102],{"class":159},[149,80914,190],{"class":155},[149,80916,80917,80919,80921,80923,80925,80927,80929,80931,80933,80936,80938],{"class":151,"line":18541},[149,80918,53045],{"class":155},[149,80920,2102],{"class":159},[149,80922,62746],{"class":162},[149,80924,166],{"class":155},[149,80926,62751],{"class":169},[149,80928,80903],{"class":162},[149,80930,166],{"class":155},[149,80932,5419],{"class":169},[149,80934,80935],{"class":155},">100-300元\u003C\u002F",[149,80937,2102],{"class":159},[149,80939,190],{"class":155},[149,80941,80942,80944,80946,80948,80950,80952,80954,80956,80958,80961,80963],{"class":151,"line":18555},[149,80943,53045],{"class":155},[149,80945,2102],{"class":159},[149,80947,62746],{"class":162},[149,80949,166],{"class":155},[149,80951,62751],{"class":169},[149,80953,80903],{"class":162},[149,80955,166],{"class":155},[149,80957,5432],{"class":169},[149,80959,80960],{"class":155},">300元以上\u003C\u002F",[149,80962,2102],{"class":159},[149,80964,190],{"class":155},[149,80966,80967,80969,80971,80973,80975,80977,80980,80982],{"class":151,"line":18560},[149,80968,53045],{"class":155},[149,80970,2102],{"class":159},[149,80972,62746],{"class":162},[149,80974,166],{"class":155},[149,80976,62751],{"class":169},[149,80978,80979],{"class":155},">全部区间\u003C\u002F",[149,80981,2102],{"class":159},[149,80983,190],{"class":155},[149,80985,80986,80988,80990],{"class":151,"line":18565},[149,80987,54115],{"class":155},[149,80989,301],{"class":159},[149,80991,190],{"class":155},[149,80993,80994,80996,80998,81000,81002,81004],{"class":151,"line":18579},[149,80995,587],{"class":155},[149,80997,301],{"class":159},[149,80999,55184],{"class":162},[149,81001,166],{"class":155},[149,81003,64296],{"class":169},[149,81005,190],{"class":155},[149,81007,81008],{"class":151,"line":18591},[149,81009,81010],{"class":295},"    \u003C!-- \u003Cdiv class=\"item\">\n",[149,81012,81013],{"class":151,"line":18596},[149,81014,81015],{"class":295},"      \u003Cimg src=\"\" alt=\"\">\n",[149,81017,81018],{"class":151,"line":18609},[149,81019,81020],{"class":295},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[149,81022,81023],{"class":151,"line":18614},[149,81024,81025],{"class":295},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[149,81027,81028],{"class":151,"line":18619},[149,81029,81030],{"class":295},"    \u003C\u002Fdiv> -->\n",[149,81032,81033,81035,81037],{"class":151,"line":18624},[149,81034,54115],{"class":155},[149,81036,301],{"class":159},[149,81038,190],{"class":155},[149,81040,81041,81043,81045],{"class":151,"line":18637},[149,81042,587],{"class":155},[149,81044,53512],{"class":159},[149,81046,190],{"class":155},[149,81048,81049],{"class":151,"line":18642},[149,81050,81051],{"class":295},"    \u002F\u002F 2. 初始化数据\n",[149,81053,81054,81056,81059,81061],{"class":151,"line":34339},[149,81055,12935],{"class":325},[149,81057,81058],{"class":309}," goodsList",[149,81060,15277],{"class":325},[149,81062,57139],{"class":155},[149,81064,81065],{"class":151,"line":34345},[149,81066,81067],{"class":155},"      {\n",[149,81069,81070,81073,81076],{"class":151,"line":34351},[149,81071,81072],{"class":155},"        id: ",[149,81074,81075],{"class":169},"'4001172'",[149,81077,33172],{"class":155},[149,81079,81080,81083,81086],{"class":151,"line":34357},[149,81081,81082],{"class":155},"        name: ",[149,81084,81085],{"class":169},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[149,81087,33172],{"class":155},[149,81089,81090,81093,81096],{"class":151,"line":34363},[149,81091,81092],{"class":155},"        price: ",[149,81094,81095],{"class":169},"'289.00'",[149,81097,33172],{"class":155},[149,81099,81100,81103,81106],{"class":151,"line":34374},[149,81101,81102],{"class":155},"        picture: ",[149,81104,81105],{"class":169},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[149,81107,33172],{"class":155},[149,81109,81110],{"class":151,"line":34380},[149,81111,79574],{"class":155},[149,81113,81114],{"class":151,"line":34400},[149,81115,81067],{"class":155},[149,81117,81118,81120,81123],{"class":151,"line":34406},[149,81119,81072],{"class":155},[149,81121,81122],{"class":169},"'4001594'",[149,81124,33172],{"class":155},[149,81126,81127,81129,81132],{"class":151,"line":34417},[149,81128,81082],{"class":155},[149,81130,81131],{"class":169},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[149,81133,33172],{"class":155},[149,81135,81136,81138,81141],{"class":151,"line":34423},[149,81137,81092],{"class":155},[149,81139,81140],{"class":169},"'288.00'",[149,81142,33172],{"class":155},[149,81144,81145,81147,81150],{"class":151,"line":34429},[149,81146,81102],{"class":155},[149,81148,81149],{"class":169},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[149,81151,33172],{"class":155},[149,81153,81154],{"class":151,"line":34435},[149,81155,79574],{"class":155},[149,81157,81158],{"class":151,"line":34441},[149,81159,81067],{"class":155},[149,81161,81162,81164,81167],{"class":151,"line":34447},[149,81163,81072],{"class":155},[149,81165,81166],{"class":169},"'4001009'",[149,81168,33172],{"class":155},[149,81170,81171,81173,81176],{"class":151,"line":34453},[149,81172,81082],{"class":155},[149,81174,81175],{"class":169},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[149,81177,33172],{"class":155},[149,81179,81180,81182,81185],{"class":151,"line":34459},[149,81181,81092],{"class":155},[149,81183,81184],{"class":169},"'109.00'",[149,81186,33172],{"class":155},[149,81188,81189,81191,81194],{"class":151,"line":34479},[149,81190,81102],{"class":155},[149,81192,81193],{"class":169},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[149,81195,33172],{"class":155},[149,81197,81198],{"class":151,"line":34485},[149,81199,79574],{"class":155},[149,81201,81202],{"class":151,"line":34501},[149,81203,81067],{"class":155},[149,81205,81206,81208,81211],{"class":151,"line":34507},[149,81207,81072],{"class":155},[149,81209,81210],{"class":169},"'4001874'",[149,81212,33172],{"class":155},[149,81214,81215,81217,81220],{"class":151,"line":34521},[149,81216,81082],{"class":155},[149,81218,81219],{"class":169},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[149,81221,33172],{"class":155},[149,81223,81224,81226,81229],{"class":151,"line":34527},[149,81225,81092],{"class":155},[149,81227,81228],{"class":169},"'488.00'",[149,81230,33172],{"class":155},[149,81232,81233,81235,81238],{"class":151,"line":34542},[149,81234,81102],{"class":155},[149,81236,81237],{"class":169},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[149,81239,33172],{"class":155},[149,81241,81242],{"class":151,"line":34548},[149,81243,79574],{"class":155},[149,81245,81246],{"class":151,"line":34557},[149,81247,81067],{"class":155},[149,81249,81250,81252,81255],{"class":151,"line":34563},[149,81251,81072],{"class":155},[149,81253,81254],{"class":169},"'4001649'",[149,81256,33172],{"class":155},[149,81258,81259,81261,81264],{"class":151,"line":34572},[149,81260,81082],{"class":155},[149,81262,81263],{"class":169},"'大师监制龙泉青瓷茶叶罐'",[149,81265,33172],{"class":155},[149,81267,81268,81270,81273],{"class":151,"line":34578},[149,81269,81092],{"class":155},[149,81271,81272],{"class":169},"'139.00'",[149,81274,33172],{"class":155},[149,81276,81277,81279,81282],{"class":151,"line":34584},[149,81278,81102],{"class":155},[149,81280,81281],{"class":169},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[149,81283,33172],{"class":155},[149,81285,81286],{"class":151,"line":34593},[149,81287,79574],{"class":155},[149,81289,81290],{"class":151,"line":34599},[149,81291,81067],{"class":155},[149,81293,81294,81296,81299],{"class":151,"line":34610},[149,81295,81072],{"class":155},[149,81297,81298],{"class":169},"'3997185'",[149,81300,33172],{"class":155},[149,81302,81303,81305,81308],{"class":151,"line":34616},[149,81304,81082],{"class":155},[149,81306,81307],{"class":169},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[149,81309,33172],{"class":155},[149,81311,81312,81314,81317],{"class":151,"line":34635},[149,81313,81092],{"class":155},[149,81315,81316],{"class":169},"'108.00'",[149,81318,33172],{"class":155},[149,81320,81321,81323,81326],{"class":151,"line":34641},[149,81322,81102],{"class":155},[149,81324,81325],{"class":169},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[149,81327,33172],{"class":155},[149,81329,81330],{"class":151,"line":34652},[149,81331,79574],{"class":155},[149,81333,81334],{"class":151,"line":34658},[149,81335,81067],{"class":155},[149,81337,81338,81340,81343],{"class":151,"line":34678},[149,81339,81072],{"class":155},[149,81341,81342],{"class":169},"'3997403'",[149,81344,33172],{"class":155},[149,81346,81347,81349,81352],{"class":151,"line":34694},[149,81348,81082],{"class":155},[149,81350,81351],{"class":169},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[149,81353,33172],{"class":155},[149,81355,81356,81358,81361],{"class":151,"line":34700},[149,81357,81092],{"class":155},[149,81359,81360],{"class":169},"'100.00'",[149,81362,33172],{"class":155},[149,81364,81365,81367,81370],{"class":151,"line":34714},[149,81366,81102],{"class":155},[149,81368,81369],{"class":169},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[149,81371,33172],{"class":155},[149,81373,81374],{"class":151,"line":34720},[149,81375,79574],{"class":155},[149,81377,81378],{"class":151,"line":34726},[149,81379,81067],{"class":155},[149,81381,81382,81384,81387],{"class":151,"line":34737},[149,81383,81072],{"class":155},[149,81385,81386],{"class":169},"'3998274'",[149,81388,33172],{"class":155},[149,81390,81391,81393,81396],{"class":151,"line":34743},[149,81392,81082],{"class":155},[149,81394,81395],{"class":169},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[149,81397,33172],{"class":155},[149,81399,81400,81402,81404],{"class":151,"line":34749},[149,81401,81092],{"class":155},[149,81403,81272],{"class":169},[149,81405,33172],{"class":155},[149,81407,81408,81410,81413],{"class":151,"line":34759},[149,81409,81102],{"class":155},[149,81411,81412],{"class":169},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[149,81414,33172],{"class":155},[149,81416,81417],{"class":151,"line":34765},[149,81418,79574],{"class":155},[149,81420,81421],{"class":151,"line":34776},[149,81422,54807],{"class":155},[149,81424,81425],{"class":151,"line":34782},[149,81426,4119],{"emptyLinePlaceholder":1800},[149,81428,81429],{"class":151,"line":34792},[149,81430,81431],{"class":295},"    \u002F\u002F 1.渲染函数\n",[149,81433,81434,81436,81438,81440,81442],{"class":151,"line":34797},[149,81435,71768],{"class":325},[149,81437,71771],{"class":162},[149,81439,319],{"class":155},[149,81441,5598],{"class":6932},[149,81443,14155],{"class":155},[149,81445,81446],{"class":151,"line":34803},[149,81447,81448],{"class":295},"      \u002F\u002F 声明空字符串\n",[149,81450,81451,81454,81457,81459],{"class":151,"line":34852},[149,81452,81453],{"class":325},"      let",[149,81455,81456],{"class":155}," str ",[149,81458,166],{"class":325},[149,81460,71788],{"class":169},[149,81462,81463],{"class":151,"line":34899},[149,81464,71793],{"class":295},[149,81466,81467,81469,81472,81474,81477,81480],{"class":151,"line":34904},[149,81468,59698],{"class":155},[149,81470,81471],{"class":162},"forEach",[149,81473,319],{"class":155},[149,81475,81476],{"class":6932},"item",[149,81478,81479],{"class":325}," =>",[149,81481,304],{"class":155},[149,81483,81484,81486,81489,81492,81494,81497,81499,81502,81505,81507],{"class":151,"line":34910},[149,81485,62959],{"class":325},[149,81487,81488],{"class":155}," { ",[149,81490,81491],{"class":309},"name",[149,81493,329],{"class":155},[149,81495,81496],{"class":309},"price",[149,81498,329],{"class":155},[149,81500,81501],{"class":309},"picture",[149,81503,81504],{"class":155}," } ",[149,81506,166],{"class":325},[149,81508,81509],{"class":155}," item\n",[149,81511,81512,81515,81517],{"class":151,"line":34929},[149,81513,81514],{"class":155},"        str ",[149,81516,11191],{"class":325},[149,81518,71852],{"class":169},[149,81520,81521],{"class":151,"line":34935},[149,81522,81523],{"class":169},"          \u003Cdiv class=\"item\">\n",[149,81525,81526,81529,81531],{"class":151,"line":34955},[149,81527,81528],{"class":169},"            \u003Cimg src=\"${",[149,81530,81501],{"class":155},[149,81532,81533],{"class":169},"}\" alt=\"\">\n",[149,81535,81536,81539,81541],{"class":151,"line":34961},[149,81537,81538],{"class":169},"            \u003Cp class=\"name\">${",[149,81540,81491],{"class":155},[149,81542,81543],{"class":169},"}\u003C\u002Fp>\n",[149,81545,81546,81549,81551],{"class":151,"line":34967},[149,81547,81548],{"class":169},"            \u003Cp class=\"price\">${",[149,81550,81496],{"class":155},[149,81552,81543],{"class":169},[149,81554,81555],{"class":151,"line":34977},[149,81556,81557],{"class":169},"          \u003C\u002Fdiv>\n",[149,81559,81560],{"class":151,"line":34982},[149,81561,81562],{"class":169},"        `\n",[149,81564,81565],{"class":151,"line":34988},[149,81566,66502],{"class":155},[149,81568,81569],{"class":151,"line":35004},[149,81570,81571],{"class":295},"      \u002F\u002F 追加给List\n",[149,81573,81574,81576,81578,81580,81583,81585,81587],{"class":151,"line":35049},[149,81575,57463],{"class":155},[149,81577,56094],{"class":162},[149,81579,319],{"class":155},[149,81581,81582],{"class":169},"'.list'",[149,81584,75931],{"class":155},[149,81586,166],{"class":325},[149,81588,75667],{"class":155},[149,81590,81591],{"class":151,"line":35055},[149,81592,3906],{"class":155},[149,81594,81595],{"class":151,"line":35061},[149,81596,81597],{"class":295},"    \u002F\u002F 页面一打开就需要渲染\n",[149,81599,81600,81603],{"class":151,"line":35067},[149,81601,81602],{"class":162},"    render",[149,81604,81605],{"class":155},"(goodsList)\n",[149,81607,81608],{"class":151,"line":35078},[149,81609,81610],{"class":295},"    \u002F\u002F 2.过滤筛选\n",[149,81612,81613,81615,81617,81619,81622,81624,81626,81628,81630,81632,81634,81636],{"class":151,"line":35084},[149,81614,54105],{"class":155},[149,81616,56094],{"class":162},[149,81618,319],{"class":155},[149,81620,81621],{"class":169},"'.filter'",[149,81623,32532],{"class":155},[149,81625,59504],{"class":162},[149,81627,319],{"class":155},[149,81629,59509],{"class":169},[149,81631,329],{"class":155},[149,81633,1942],{"class":6932},[149,81635,81479],{"class":325},[149,81637,304],{"class":155},[149,81639,81640],{"class":151,"line":35090},[149,81641,81642],{"class":295},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[149,81644,81645,81647,81649,81652,81654,81656,81658,81660],{"class":151,"line":35096},[149,81646,59919],{"class":325},[149,81648,81488],{"class":155},[149,81650,81651],{"class":309},"tagName",[149,81653,329],{"class":155},[149,81655,33243],{"class":309},[149,81657,81504],{"class":155},[149,81659,166],{"class":325},[149,81661,81662],{"class":155}," e.target\n",[149,81664,81665],{"class":151,"line":35114},[149,81666,81667],{"class":295},"      \u002F\u002F 判断\n",[149,81669,81670,81672,81674,81676,81678],{"class":151,"line":35128},[149,81671,56175],{"class":325},[149,81673,68718],{"class":155},[149,81675,56181],{"class":325},[149,81677,69940],{"class":169},[149,81679,14155],{"class":155},[149,81681,81682],{"class":151,"line":35137},[149,81683,81684],{"class":295},"        \u002F\u002F console.log(11)\n",[149,81686,81687],{"class":151,"line":35146},[149,81688,81689],{"class":295},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[149,81691,81692],{"class":151,"line":35155},[149,81693,81694],{"class":295},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[149,81696,81697,81699,81701,81703],{"class":151,"line":35164},[149,81698,53529],{"class":325},[149,81700,53532],{"class":155},[149,81702,166],{"class":325},[149,81704,81705],{"class":155}," goodsList\n",[149,81707,81708,81710,81713,81715,81718],{"class":151,"line":35170},[149,81709,4216],{"class":325},[149,81711,81712],{"class":155}," (dataset.index ",[149,81714,56181],{"class":325},[149,81716,81717],{"class":169}," '1'",[149,81719,14155],{"class":155},[149,81721,81722,81725,81727,81730,81733,81735,81737,81739,81742,81744,81746,81749,81751,81753,81755],{"class":151,"line":35176},[149,81723,81724],{"class":155},"          arr ",[149,81726,166],{"class":325},[149,81728,81729],{"class":155}," goodsList.",[149,81731,81732],{"class":162},"filter",[149,81734,319],{"class":155},[149,81736,81476],{"class":6932},[149,81738,81479],{"class":325},[149,81740,81741],{"class":155}," item.price ",[149,81743,3430],{"class":325},[149,81745,5811],{"class":309},[149,81747,81748],{"class":325}," &&",[149,81750,81741],{"class":155},[149,81752,3311],{"class":325},[149,81754,7470],{"class":309},[149,81756,1878],{"class":155},[149,81758,81759,81762,81764,81766,81768,81770,81773],{"class":151,"line":35184},[149,81760,81761],{"class":155},"        } ",[149,81763,3421],{"class":325},[149,81765,3424],{"class":325},[149,81767,81712],{"class":155},[149,81769,56181],{"class":325},[149,81771,81772],{"class":169}," '2'",[149,81774,14155],{"class":155},[149,81776,81777,81779,81781,81783,81785,81787,81789,81791,81793,81795,81797,81799,81801,81803,81806],{"class":151,"line":35189},[149,81778,81724],{"class":155},[149,81780,166],{"class":325},[149,81782,81729],{"class":155},[149,81784,81732],{"class":162},[149,81786,319],{"class":155},[149,81788,81476],{"class":6932},[149,81790,81479],{"class":325},[149,81792,81741],{"class":155},[149,81794,3430],{"class":325},[149,81796,7470],{"class":309},[149,81798,81748],{"class":325},[149,81800,81741],{"class":155},[149,81802,3311],{"class":325},[149,81804,81805],{"class":309}," 300",[149,81807,1878],{"class":155},[149,81809,81810,81812,81814,81816,81818,81820,81823],{"class":151,"line":35195},[149,81811,81761],{"class":155},[149,81813,3421],{"class":325},[149,81815,3424],{"class":325},[149,81817,81712],{"class":155},[149,81819,56181],{"class":325},[149,81821,81822],{"class":169}," '3'",[149,81824,14155],{"class":155},[149,81826,81827,81829,81831,81833,81835,81837,81839,81841,81843,81845,81847],{"class":151,"line":35206},[149,81828,81724],{"class":155},[149,81830,166],{"class":325},[149,81832,81729],{"class":155},[149,81834,81732],{"class":162},[149,81836,319],{"class":155},[149,81838,81476],{"class":6932},[149,81840,81479],{"class":325},[149,81842,81741],{"class":155},[149,81844,3430],{"class":325},[149,81846,81805],{"class":309},[149,81848,1878],{"class":155},[149,81850,81851],{"class":151,"line":35212},[149,81852,4248],{"class":155},[149,81854,81855],{"class":151,"line":35232},[149,81856,81857],{"class":295},"        \u002F\u002F 渲染函数\n",[149,81859,81860,81862],{"class":151,"line":35238},[149,81861,72092],{"class":162},[149,81863,54110],{"class":155},[149,81865,81866],{"class":151,"line":35244},[149,81867,54096],{"class":155},[149,81869,81870],{"class":151,"line":35250},[149,81871,4119],{"emptyLinePlaceholder":1800},[149,81873,81874],{"class":151,"line":35267},[149,81875,35167],{"class":155},[149,81877,81878,81880,81882],{"class":151,"line":35273},[149,81879,54115],{"class":155},[149,81881,53512],{"class":159},[149,81883,190],{"class":155},[149,81885,81886,81888,81890],{"class":151,"line":35279},[149,81887,665],{"class":155},[149,81889,53499],{"class":159},[149,81891,190],{"class":155},[149,81893,81894],{"class":151,"line":35285},[149,81895,4119],{"emptyLinePlaceholder":1800},[149,81897,81898,81900,81902],{"class":151,"line":35291},[149,81899,665],{"class":155},[149,81901,52341],{"class":159},[149,81903,190],{"class":155},[14,81905,81907],{"id":81906},"_410-深入了解对象","4.10 深入了解对象",[19,81909,81911],{"id":81910},"_4101-创建对象","4.10.1 创建对象",[24,81913,81914],{},[83,81915],{"alt":145,"src":81916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[24,81918,81919],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[19,81921,81923],{"id":81922},"_4102-构造函数","4.10.2 构造函数",[24,81925,81926,81929],{},[31,81927,81928],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[24,81931,81932,81935],{},[31,81933,81934],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[140,81937,81939],{"className":52339,"code":81938,"language":52341,"meta":145,"style":145},"\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",[48,81940,81941,81949,81954,81975,81988,82000,82012,82016,82021,82048,82053,82080],{"__ignoreMap":145},[149,81942,81943,81945,81947],{"class":151,"line":152},[149,81944,156],{"class":155},[149,81946,53512],{"class":159},[149,81948,190],{"class":155},[149,81950,81951],{"class":151,"line":193},[149,81952,81953],{"class":295},"\u002F\u002F例：\n",[149,81955,81956,81958,81961,81963,81965,81967,81969,81971,81973],{"class":151,"line":235},[149,81957,56144],{"class":325},[149,81959,81960],{"class":162}," Pig",[149,81962,319],{"class":155},[149,81964,81491],{"class":6932},[149,81966,2241],{"class":155},[149,81968,71905],{"class":6932},[149,81970,2241],{"class":155},[149,81972,71922],{"class":6932},[149,81974,14155],{"class":155},[149,81976,81977,81980,81983,81985],{"class":151,"line":340},[149,81978,81979],{"class":309},"    this",[149,81981,81982],{"class":155},".name",[149,81984,166],{"class":325},[149,81986,81987],{"class":155},"name\n",[149,81989,81990,81992,81995,81997],{"class":151,"line":346},[149,81991,81979],{"class":309},[149,81993,81994],{"class":155},".age",[149,81996,166],{"class":325},[149,81998,81999],{"class":155},"age\n",[149,82001,82002,82004,82007,82009],{"class":151,"line":352},[149,82003,81979],{"class":309},[149,82005,82006],{"class":155},".gender",[149,82008,166],{"class":325},[149,82010,82011],{"class":155},"gender    \n",[149,82013,82014],{"class":151,"line":1021},[149,82015,355],{"class":155},[149,82017,82018],{"class":151,"line":1035},[149,82019,82020],{"class":295},"\u002F\u002F创建佩奇对象\n",[149,82022,82023,82025,82028,82030,82032,82034,82037,82039,82041,82043,82046],{"class":151,"line":1054},[149,82024,8508],{"class":325},[149,82026,82027],{"class":309}," Peppa",[149,82029,13431],{"class":325},[149,82031,81960],{"class":162},[149,82033,319],{"class":155},[149,82035,82036],{"class":169},"'佩奇'",[149,82038,2241],{"class":155},[149,82040,2207],{"class":309},[149,82042,2241],{"class":155},[149,82044,82045],{"class":169},"'女'",[149,82047,1878],{"class":155},[149,82049,82050],{"class":151,"line":1072},[149,82051,82052],{"class":295},"\u002F\u002F创建乔治对象\n",[149,82054,82055,82057,82060,82062,82064,82066,82069,82071,82073,82075,82078],{"class":151,"line":1090},[149,82056,8508],{"class":325},[149,82058,82059],{"class":309}," George",[149,82061,13431],{"class":325},[149,82063,81960],{"class":162},[149,82065,319],{"class":155},[149,82067,82068],{"class":169},"'乔治'",[149,82070,2241],{"class":155},[149,82072,1939],{"class":309},[149,82074,2241],{"class":155},[149,82076,82077],{"class":169},"'男'",[149,82079,1878],{"class":155},[149,82081,82082,82084,82086],{"class":151,"line":1633},[149,82083,665],{"class":155},[149,82085,53512],{"class":159},[149,82087,190],{"class":155},[24,82089,82090],{},[83,82091],{"alt":145,"src":82092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[24,82094,82095],{},[83,82096],{"alt":145,"src":82097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[24,82099,82100],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[24,82102,82103],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[24,82105,82106],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[24,82108,82109],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[24,82111,82112],{},"这里用等号是因为：对象.属性=值",[24,82114,82115],{},"①利用对象字面量创建对象",[24,82117,82118],{},"const o={",[24,82120,82121],{},"name:'pink'",[24,82123,82124],{},"} ②利用new Object创建对象",[24,82126,82127],{},"const o=new Object({name:'pink'})",[24,82129,82130],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[24,82132,82133],{},"构造函数创建对象的执行过程：",[24,82135,82136],{},[83,82137],{"alt":145,"src":82138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[19,82140,82142],{"id":82141},"_4103-实例成员","4.10.3 实例成员",[24,82144,82145],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[125,82147,82148,82151,82154],{},[45,82149,82150],{},"实例对象的属性和方法即为实例成员",[45,82152,82153],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[45,82155,82156],{},"构造函数创建的实例对象彼此独立互不影响",[19,82158,82160],{"id":82159},"_4104-静态成员","4.10.4 静态成员",[24,82162,82163],{},[83,82164],{"alt":145,"src":82165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[24,82167,82168],{},"静态成员有Date.now() Math.PI Math.random()",[24,82170,82171],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[24,82173,82174],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[24,82176,82177],{},"function Pig(name) n {",[24,82179,82180],{},"this.name=name",[24,82182,2805],{},[24,82184,82185],{},"Pig.eyes=2",[24,82187,82188],{},"Pig.sayHai=function () { console.log(this) }",[24,82190,82191],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[24,82193,82194],{},"console.log(Pig.eyes) \u002F\u002F2",[24,82196,13046],{},[125,82198,82199,82202,82205,82208,82211],{},[45,82200,82201],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[45,82203,82204],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[45,82206,82207],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[45,82209,82210],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[45,82212,82213],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[24,82215,82216],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[19,82218,82220],{"id":82219},"_4105-内置构造函数","4.10.5 内置构造函数",[24,82222,82223],{},"内置构造函数包含：",[24,82225,82226],{},[83,82227],{"alt":145,"src":82228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[24,82230,82231],{},[83,82232],{"alt":145,"src":82233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[24,82235,82236],{},"这些基本数据类型，js对他们进行了包装",[53512,82238,82239],{},"\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",[120,82241,82243],{"id":82242},"_41051-object","4.10.5.1 Object",[24,82245,82246],{},"Object 是内置的构造函数，用于创建普通对象",[24,82248,82249],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[140,82251,82253],{"className":52339,"code":82252,"language":52341,"meta":145,"style":145},"const user=new Object({name:'小明',age:15})\n",[48,82254,82255],{"__ignoreMap":145},[149,82256,82257],{"class":151,"line":152},[149,82258,82252],{"class":155},[24,82260,82261],{},"三个常用的静态方法：",[24619,82263,82265],{"id":82264},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[24,82267,82268],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[24,82270,82271],{},[83,82272],{"alt":145,"src":82273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[24,82275,82276],{},[83,82277],{"alt":145,"src":82278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[140,82280,82282],{"className":54765,"code":82281,"language":54767,"meta":145,"style":145},"\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",[48,82283,82284,82292,82300,82305,82310,82315,82320,82325,82330,82338],{"__ignoreMap":145},[149,82285,82286,82288,82290],{"class":151,"line":152},[149,82287,156],{"class":155},[149,82289,53499],{"class":159},[149,82291,190],{"class":155},[149,82293,82294,82296,82298],{"class":151,"line":193},[149,82295,587],{"class":155},[149,82297,53512],{"class":159},[149,82299,190],{"class":155},[149,82301,82302],{"class":151,"line":235},[149,82303,82304],{"class":155},"    const o = { name: 'pink', age: 6 }\n",[149,82306,82307],{"class":151,"line":340},[149,82308,82309],{"class":155},"    \u002F\u002F 获得所有属性名\n",[149,82311,82312],{"class":151,"line":346},[149,82313,82314],{"class":155},"    const arr = Object.keys(o)\n",[149,82316,82317],{"class":151,"line":352},[149,82318,82319],{"class":155},"    console.log(arr)\n",[149,82321,82322],{"class":151,"line":1021},[149,82323,82324],{"class":155},"    \u002F\u002F 获得所有属性值\n",[149,82326,82327],{"class":151,"line":1035},[149,82328,82329],{"class":155},"    console.log(Object.values(o))\n",[149,82331,82332,82334,82336],{"class":151,"line":1054},[149,82333,54115],{"class":155},[149,82335,53512],{"class":159},[149,82337,190],{"class":155},[149,82339,82340,82342,82344],{"class":151,"line":1072},[149,82341,665],{"class":155},[149,82343,53499],{"class":159},[149,82345,190],{"class":155},[24619,82347,82349],{"id":82348},"_410512-object-assign","4.10.5.1.2 Object. assign",[24,82351,82352],{},"Object.assign(oo,o)",[24,82354,82355],{},"后的东西添加给前 是追加",[24,82357,82358],{},[83,82359],{"alt":145,"src":82360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[24,82362,82363],{},[83,82364],{"alt":145,"src":82365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[140,82367,82369],{"className":54765,"code":82368,"language":54767,"meta":145,"style":145},"\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",[48,82370,82371,82379,82387,82391,82395,82399,82403,82407,82411,82416,82421,82426,82431,82436,82444],{"__ignoreMap":145},[149,82372,82373,82375,82377],{"class":151,"line":152},[149,82374,156],{"class":155},[149,82376,53499],{"class":159},[149,82378,190],{"class":155},[149,82380,82381,82383,82385],{"class":151,"line":193},[149,82382,587],{"class":155},[149,82384,53512],{"class":159},[149,82386,190],{"class":155},[149,82388,82389],{"class":151,"line":235},[149,82390,82304],{"class":155},[149,82392,82393],{"class":151,"line":340},[149,82394,82309],{"class":155},[149,82396,82397],{"class":151,"line":346},[149,82398,82314],{"class":155},[149,82400,82401],{"class":151,"line":352},[149,82402,82319],{"class":155},[149,82404,82405],{"class":151,"line":1021},[149,82406,82324],{"class":155},[149,82408,82409],{"class":151,"line":1035},[149,82410,82329],{"class":155},[149,82412,82413],{"class":151,"line":1054},[149,82414,82415],{"class":155},"    const oo = {}\n",[149,82417,82418],{"class":151,"line":1072},[149,82419,82420],{"class":155},"    Object.assign(oo, o)\n",[149,82422,82423],{"class":151,"line":1090},[149,82424,82425],{"class":155},"    console.log(oo)\n",[149,82427,82428],{"class":151,"line":1633},[149,82429,82430],{"class":155},"    Object.assign(o, { gender: '女' })\n",[149,82432,82433],{"class":151,"line":1644},[149,82434,82435],{"class":155},"    console.log(o)\n",[149,82437,82438,82440,82442],{"class":151,"line":3348},[149,82439,54115],{"class":155},[149,82441,53512],{"class":159},[149,82443,190],{"class":155},[149,82445,82446,82448,82450],{"class":151,"line":3362},[149,82447,665],{"class":155},[149,82449,53499],{"class":159},[149,82451,190],{"class":155},[24,82453,82454],{},[83,82455],{"alt":145,"src":82456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[120,82458,82460],{"id":82459},"_41052-array","4.10.5.2 Array",[24,82462,82463],{},"Array 是内置的构造函数，用于创建数组",[24,82465,82466],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[140,82468,82470],{"className":52339,"code":82469,"language":52341,"meta":145,"style":145},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[48,82471,82472,82477],{"__ignoreMap":145},[149,82473,82474],{"class":151,"line":152},[149,82475,82476],{"class":155},"const arr=new Array(3,5)\n",[149,82478,82479],{"class":151,"line":193},[149,82480,82481],{"class":155},"console.log(arr)  \u002F\u002F[3,5]\n",[24,82483,82484],{},"Array的实例方法，这个方法是实例成员",[24,82486,82487],{},[83,82488],{"alt":145,"src":82489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24619,82491,82493],{"id":82492},"_410521-reduce","4.10.5.2.1 reduce",[24,82495,82496],{},[83,82497],{"alt":145,"src":82498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[140,82500,82502],{"className":54765,"code":82501,"language":54767,"meta":145,"style":145},"\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",[48,82503,82504,82512,82520,82525,82530,82535,82540,82544,82549,82554,82559,82563,82568,82573,82577,82582,82587,82592,82600],{"__ignoreMap":145},[149,82505,82506,82508,82510],{"class":151,"line":152},[149,82507,156],{"class":155},[149,82509,53499],{"class":159},[149,82511,190],{"class":155},[149,82513,82514,82516,82518],{"class":151,"line":193},[149,82515,587],{"class":155},[149,82517,53512],{"class":159},[149,82519,190],{"class":155},[149,82521,82522],{"class":151,"line":235},[149,82523,82524],{"class":155},"    const arr = [1, 5, 8]\n",[149,82526,82527],{"class":151,"line":340},[149,82528,82529],{"class":155},"    \u002F\u002F 1.没有初始值\n",[149,82531,82532],{"class":151,"line":346},[149,82533,82534],{"class":155},"    const total = arr.reduce(function (prev, current) {\n",[149,82536,82537],{"class":151,"line":352},[149,82538,82539],{"class":155},"      return prev + current\n",[149,82541,82542],{"class":151,"line":1021},[149,82543,35167],{"class":155},[149,82545,82546],{"class":151,"line":1035},[149,82547,82548],{"class":155},"    console.log(total)   \u002F\u002F14\n",[149,82550,82551],{"class":151,"line":1054},[149,82552,82553],{"class":155},"    \u002F\u002F 2.有初始值\n",[149,82555,82556],{"class":151,"line":1072},[149,82557,82558],{"class":155},"    const total1 = arr.reduce(function (prev, current) {\n",[149,82560,82561],{"class":151,"line":1090},[149,82562,82539],{"class":155},[149,82564,82565],{"class":151,"line":1633},[149,82566,82567],{"class":155},"    }, 10)\n",[149,82569,82570],{"class":151,"line":1644},[149,82571,82572],{"class":155},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[149,82574,82575],{"class":151,"line":3348},[149,82576,4119],{"emptyLinePlaceholder":1800},[149,82578,82579],{"class":151,"line":3362},[149,82580,82581],{"class":155},"    \u002F\u002F 3.箭头函数写法\n",[149,82583,82584],{"class":151,"line":3367},[149,82585,82586],{"class":155},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[149,82588,82589],{"class":151,"line":3373},[149,82590,82591],{"class":155},"    console.log(total2)   \u002F\u002F24\n",[149,82593,82594,82596,82598],{"class":151,"line":3394},[149,82595,54115],{"class":155},[149,82597,53512],{"class":159},[149,82599,190],{"class":155},[149,82601,82602,82604,82606],{"class":151,"line":3399},[149,82603,665],{"class":155},[149,82605,53499],{"class":159},[149,82607,190],{"class":155},[24,82609,82610],{},"执行过程：",[125,82612,82613,82616,82619],{},[45,82614,82615],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[45,82617,82618],{},"每一次循环，把返回值给作为下一次循环的上一次值",[45,82620,82621],{},"如果有起始值，则起始值作为上一次值",[140,82623,82625],{"className":54765,"code":82624,"language":54767,"meta":145,"style":145},"\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",[48,82626,82627,82635,82643,82647,82651,82655,82659,82663,82667,82672,82677,82682,82687,82692,82696,82700,82704,82708,82712,82716,82721,82725,82730,82734,82739,82744,82748,82752,82756,82764],{"__ignoreMap":145},[149,82628,82629,82631,82633],{"class":151,"line":152},[149,82630,156],{"class":155},[149,82632,53499],{"class":159},[149,82634,190],{"class":155},[149,82636,82637,82639,82641],{"class":151,"line":193},[149,82638,587],{"class":155},[149,82640,53512],{"class":159},[149,82642,190],{"class":155},[149,82644,82645],{"class":151,"line":235},[149,82646,82524],{"class":155},[149,82648,82649],{"class":151,"line":340},[149,82650,82529],{"class":155},[149,82652,82653],{"class":151,"line":346},[149,82654,82534],{"class":155},[149,82656,82657],{"class":151,"line":352},[149,82658,82539],{"class":155},[149,82660,82661],{"class":151,"line":1021},[149,82662,35167],{"class":155},[149,82664,82665],{"class":151,"line":1035},[149,82666,82548],{"class":155},[149,82668,82669],{"class":151,"line":1054},[149,82670,82671],{"class":155},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[149,82673,82674],{"class":151,"line":1072},[149,82675,82676],{"class":155},"    \u002F\u002F     1              5                    6\n",[149,82678,82679],{"class":151,"line":1090},[149,82680,82681],{"class":155},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[149,82683,82684],{"class":151,"line":1633},[149,82685,82686],{"class":155},"    \u002F\u002F     6              8                    14\n",[149,82688,82689],{"class":151,"line":1644},[149,82690,82691],{"class":155},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[149,82693,82694],{"class":151,"line":3348},[149,82695,82553],{"class":155},[149,82697,82698],{"class":151,"line":3362},[149,82699,82558],{"class":155},[149,82701,82702],{"class":151,"line":3367},[149,82703,82539],{"class":155},[149,82705,82706],{"class":151,"line":3373},[149,82707,82567],{"class":155},[149,82709,82710],{"class":151,"line":3394},[149,82711,82572],{"class":155},[149,82713,82714],{"class":151,"line":3399},[149,82715,82671],{"class":155},[149,82717,82718],{"class":151,"line":3413},[149,82719,82720],{"class":155},"    \u002F\u002F     10             1                     11\n",[149,82722,82723],{"class":151,"line":3418},[149,82724,82681],{"class":155},[149,82726,82727],{"class":151,"line":3447},[149,82728,82729],{"class":155},"    \u002F\u002F     11             5                    16\n",[149,82731,82732],{"class":151,"line":3452},[149,82733,82681],{"class":155},[149,82735,82736],{"class":151,"line":3469},[149,82737,82738],{"class":155},"    \u002F\u002F     16             8                    24\n",[149,82740,82741],{"class":151,"line":3474},[149,82742,82743],{"class":155},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[149,82745,82746],{"class":151,"line":3479},[149,82747,82581],{"class":155},[149,82749,82750],{"class":151,"line":3484},[149,82751,82586],{"class":155},[149,82753,82754],{"class":151,"line":3498},[149,82755,82591],{"class":155},[149,82757,82758,82760,82762],{"class":151,"line":3503},[149,82759,54115],{"class":155},[149,82761,53512],{"class":159},[149,82763,190],{"class":155},[149,82765,82766,82768,82770],{"class":151,"line":4296},[149,82767,665],{"class":155},[149,82769,53499],{"class":159},[149,82771,190],{"class":155},[24619,82773,82775],{"id":82774},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[24,82777,82778],{},[83,82779],{"alt":145,"src":82780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[140,82782,82784],{"className":54765,"code":82783,"language":54767,"meta":145,"style":145},"\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",[48,82785,82786,82794,82802,82807,82812,82817,82822,82826,82831,82836,82841,82846,82851,82856,82860,82865,82869,82874,82882],{"__ignoreMap":145},[149,82787,82788,82790,82792],{"class":151,"line":152},[149,82789,156],{"class":155},[149,82791,53499],{"class":159},[149,82793,190],{"class":155},[149,82795,82796,82798,82800],{"class":151,"line":193},[149,82797,587],{"class":155},[149,82799,53512],{"class":159},[149,82801,190],{"class":155},[149,82803,82804],{"class":151,"line":235},[149,82805,82806],{"class":155},"    const arr = [\n",[149,82808,82809],{"class":151,"line":340},[149,82810,82811],{"class":155},"      { name: '张三', salary: 10000 },\n",[149,82813,82814],{"class":151,"line":346},[149,82815,82816],{"class":155},"      { name: '李四', salary: 10000 },\n",[149,82818,82819],{"class":151,"line":352},[149,82820,82821],{"class":155},"      { name: '王五', salary: 10000 }\n",[149,82823,82824],{"class":151,"line":1021},[149,82825,54807],{"class":155},[149,82827,82828],{"class":151,"line":1035},[149,82829,82830],{"class":155},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[149,82832,82833],{"class":151,"line":1054},[149,82834,82835],{"class":155},"    \u002F\u002F prev是累计值\n",[149,82837,82838],{"class":151,"line":1072},[149,82839,82840],{"class":155},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[149,82842,82843],{"class":151,"line":1090},[149,82844,82845],{"class":155},"    console.log(total)\n",[149,82847,82848],{"class":151,"line":1633},[149,82849,82850],{"class":155},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[149,82852,82853],{"class":151,"line":1644},[149,82854,82855],{"class":155},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[149,82857,82858],{"class":151,"line":3348},[149,82859,82850],{"class":155},[149,82861,82862],{"class":151,"line":3362},[149,82863,82864],{"class":155},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[149,82866,82867],{"class":151,"line":3367},[149,82868,82850],{"class":155},[149,82870,82871],{"class":151,"line":3373},[149,82872,82873],{"class":155},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[149,82875,82876,82878,82880],{"class":151,"line":3394},[149,82877,54115],{"class":155},[149,82879,53512],{"class":159},[149,82881,190],{"class":155},[149,82883,82884,82886,82888],{"class":151,"line":3399},[149,82885,665],{"class":155},[149,82887,53499],{"class":159},[149,82889,190],{"class":155},[24619,82891,82893],{"id":82892},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[24,82895,82896],{},[83,82897],{"alt":145,"src":82898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[24,82900,82901],{},[83,82902],{"alt":145,"src":82903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[125,82905,82906],{},[45,82907,82908],{},"find()",[24,82910,82911],{},"循环查找，找到第一个就ok",[24,82913,82914],{},[2102,82915,82918],{"href":82916,"rel":82917},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25573],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[140,82920,82922],{"className":52339,"code":82921,"language":52341,"meta":145,"style":145},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[48,82923,82924,82929,82934],{"__ignoreMap":145},[149,82925,82926],{"class":151,"line":152},[149,82927,82928],{"class":155},"const array1 = [5, 12, 8, 130, 44]\n",[149,82930,82931],{"class":151,"line":193},[149,82932,82933],{"class":155},"const found = array1.find((element) => element > 10)\n",[149,82935,82936],{"class":151,"line":235},[149,82937,82938],{"class":155},"console.log(found)  \u002F\u002F12\n",[24,82940,82941,82943,82944,82949,82950,82953,82954,82956,82957,82962,82963,82965,82966,82968,82969,82971,82972],{},[48,82942,82908],{}," 方法是一个",[2102,82945,82948],{"href":82946,"rel":82947},"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",[25573],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[48,82951,82952],{},"callbackFn"," 函数，直到 ",[48,82955,82952],{}," 返回一个",[2102,82958,82961],{"href":82959,"rel":82960},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25573],"真值","。然后 ",[48,82964,82908],{}," 返回该元素并停止迭代数组。如果 ",[48,82967,82952],{}," 从未返回真值，则 ",[48,82970,82908],{}," 返回 ",[48,82973,82974],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[140,82976,82978],{"className":54765,"code":82977,"language":54767,"meta":145,"style":145},"\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",[48,82979,82980,82988,82996,83001,83006,83011,83015,83020,83025,83029,83034,83039,83043,83047,83052,83057,83061,83065,83070,83075,83080,83085,83090,83094,83099,83104,83109,83114,83118,83123,83131],{"__ignoreMap":145},[149,82981,82982,82984,82986],{"class":151,"line":152},[149,82983,156],{"class":155},[149,82985,53499],{"class":159},[149,82987,190],{"class":155},[149,82989,82990,82992,82994],{"class":151,"line":193},[149,82991,587],{"class":155},[149,82993,53512],{"class":159},[149,82995,190],{"class":155},[149,82997,82998],{"class":151,"line":235},[149,82999,83000],{"class":155},"    const arr = ['red', 'blue', 'green']\n",[149,83002,83003],{"class":151,"line":340},[149,83004,83005],{"class":155},"    const found = arr.find(item => item === 'pink')\n",[149,83007,83008],{"class":151,"line":346},[149,83009,83010],{"class":155},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[149,83012,83013],{"class":151,"line":352},[149,83014,4119],{"emptyLinePlaceholder":1800},[149,83016,83017],{"class":151,"line":1021},[149,83018,83019],{"class":155},"    \u002F\u002F 使用场景，用于查找数据\n",[149,83021,83022],{"class":151,"line":1035},[149,83023,83024],{"class":155},"    const arr1 = [\n",[149,83026,83027],{"class":151,"line":1054},[149,83028,81067],{"class":155},[149,83030,83031],{"class":151,"line":1072},[149,83032,83033],{"class":155},"        name: '小米',\n",[149,83035,83036],{"class":151,"line":1090},[149,83037,83038],{"class":155},"        price: 1999\n",[149,83040,83041],{"class":151,"line":1633},[149,83042,79574],{"class":155},[149,83044,83045],{"class":151,"line":1644},[149,83046,81067],{"class":155},[149,83048,83049],{"class":151,"line":3348},[149,83050,83051],{"class":155},"        name: '华为',\n",[149,83053,83054],{"class":151,"line":3362},[149,83055,83056],{"class":155},"        price: 3999\n",[149,83058,83059],{"class":151,"line":3367},[149,83060,54096],{"class":155},[149,83062,83063],{"class":151,"line":3373},[149,83064,54807],{"class":155},[149,83066,83067],{"class":151,"line":3394},[149,83068,83069],{"class":155},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[149,83071,83072],{"class":151,"line":3399},[149,83073,83074],{"class":155},"    \u002F\u002F const found1 = arr1.find(item => {\n",[149,83076,83077],{"class":151,"line":3413},[149,83078,83079],{"class":155},"    \u002F\u002F   if (item.name === '小米') {\n",[149,83081,83082],{"class":151,"line":3418},[149,83083,83084],{"class":155},"    \u002F\u002F     return item\n",[149,83086,83087],{"class":151,"line":3447},[149,83088,83089],{"class":155},"    \u002F\u002F   }\n",[149,83091,83092],{"class":151,"line":3452},[149,83093,64977],{"class":155},[149,83095,83096],{"class":151,"line":3469},[149,83097,83098],{"class":155},"    \u002F\u002F 另一种写法\n",[149,83100,83101],{"class":151,"line":3474},[149,83102,83103],{"class":155},"    const found1 = arr1.find(item => {\n",[149,83105,83106],{"class":151,"line":3479},[149,83107,83108],{"class":155},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[149,83110,83111],{"class":151,"line":3484},[149,83112,83113],{"class":155},"      return item.name = '小米'\n",[149,83115,83116],{"class":151,"line":3498},[149,83117,35167],{"class":155},[149,83119,83120],{"class":151,"line":3503},[149,83121,83122],{"class":155},"    console.log(found1)\n",[149,83124,83125,83127,83129],{"class":151,"line":4296},[149,83126,54115],{"class":155},[149,83128,53512],{"class":159},[149,83130,190],{"class":155},[149,83132,83133,83135,83137],{"class":151,"line":4310},[149,83134,665],{"class":155},[149,83136,53499],{"class":159},[149,83138,190],{"class":155},[24,83140,83141],{},[83,83142],{"alt":145,"src":83143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[24,83145,83146],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[125,83148,83149],{"start":193},[45,83150,83151],{},"every()返回的是布尔值",[24,83153,83154],{},[2102,83155,83158],{"href":83156,"rel":83157},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25573],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[24,83160,83161],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[24,83163,83164],{},"some是只有有一个就没问题",[24,83166,83167],{},"every是必须全是才行",[140,83169,83173],{"className":83170,"code":83171,"language":83172,"meta":145,"style":145},"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",[48,83174,83175,83191,83205,83209,83218],{"__ignoreMap":145},[149,83176,83177,83179,83182,83184,83186,83189],{"class":151,"line":152},[149,83178,56144],{"class":325},[149,83180,83181],{"class":155}," isBigEnough(element, ",[149,83183,75740],{"class":325},[149,83185,329],{"class":155},[149,83187,83188],{"class":325},"array",[149,83190,14155],{"class":155},[149,83192,83193,83196,83199,83201,83203],{"class":151,"line":193},[149,83194,83195],{"class":325},"  return",[149,83197,83198],{"class":155}," element ",[149,83200,3430],{"class":325},[149,83202,3757],{"class":309},[149,83204,841],{"class":155},[149,83206,83207],{"class":151,"line":235},[149,83208,355],{"class":155},[149,83210,83211,83214,83216],{"class":151,"line":340},[149,83212,83213],{"class":155},"[12, 5, 8, 130, 44].every(isBigEnough); ",[149,83215,35035],{"class":325},[149,83217,56211],{"class":155},[149,83219,83220,83223,83225],{"class":151,"line":346},[149,83221,83222],{"class":155},"[12, 54, 18, 130, 44].every(isBigEnough); ",[149,83224,35035],{"class":325},[149,83226,59631],{"class":155},[140,83228,83230],{"className":54765,"code":83229,"language":54767,"meta":145,"style":145},"\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",[48,83231,83232,83240,83248,83253,83257,83262,83267,83275],{"__ignoreMap":145},[149,83233,83234,83236,83238],{"class":151,"line":152},[149,83235,156],{"class":155},[149,83237,53499],{"class":159},[149,83239,190],{"class":155},[149,83241,83242,83244,83246],{"class":151,"line":193},[149,83243,587],{"class":155},[149,83245,53512],{"class":159},[149,83247,190],{"class":155},[149,83249,83250],{"class":151,"line":235},[149,83251,83252],{"class":155},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[149,83254,83255],{"class":151,"line":340},[149,83256,80004],{"class":155},[149,83258,83259],{"class":151,"line":346},[149,83260,83261],{"class":155},"    const flag = arr.every(item => item >= 10)\n",[149,83263,83264],{"class":151,"line":352},[149,83265,83266],{"class":155},"    console.log(flag)    \u002F\u002Ftrue\n",[149,83268,83269,83271,83273],{"class":151,"line":1021},[149,83270,54115],{"class":155},[149,83272,53512],{"class":159},[149,83274,190],{"class":155},[149,83276,83277,83279,83281],{"class":151,"line":1035},[149,83278,665],{"class":155},[149,83280,53499],{"class":159},[149,83282,190],{"class":155},[140,83284,83286],{"className":54765,"code":83285,"language":54767,"meta":145,"style":145},"\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",[48,83287,83288,83296,83304,83308,83313,83318,83323,83331],{"__ignoreMap":145},[149,83289,83290,83292,83294],{"class":151,"line":152},[149,83291,156],{"class":155},[149,83293,53499],{"class":159},[149,83295,190],{"class":155},[149,83297,83298,83300,83302],{"class":151,"line":193},[149,83299,587],{"class":155},[149,83301,53512],{"class":159},[149,83303,190],{"class":155},[149,83305,83306],{"class":151,"line":235},[149,83307,83252],{"class":155},[149,83309,83310],{"class":151,"line":340},[149,83311,83312],{"class":155},"    const arr = [10, 0, 5]\n",[149,83314,83315],{"class":151,"line":346},[149,83316,83317],{"class":155},"    const flag = arr.some(item => item >= 10)\n",[149,83319,83320],{"class":151,"line":352},[149,83321,83322],{"class":155},"    console.log(flag)   \u002F\u002Ftrue\n",[149,83324,83325,83327,83329],{"class":151,"line":1021},[149,83326,54115],{"class":155},[149,83328,53512],{"class":159},[149,83330,190],{"class":155},[149,83332,83333,83335,83337],{"class":151,"line":1035},[149,83334,665],{"class":155},[149,83336,53499],{"class":159},[149,83338,190],{"class":155},[24619,83340,83342],{"id":83341},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[24,83344,83345],{},[83,83346],{"alt":145,"src":83347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[140,83349,83351],{"className":52339,"code":83350,"language":52341,"meta":145,"style":145},"\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",[48,83352,83353,83363,83377,83381,83389,83403,83423,83435,83443,83450,83462,83474,83486,83498,83508,83518,83522,83530,83538,83542,83550,83562,83570,83592,83597,83602,83635,83643,83651,83655],{"__ignoreMap":145},[149,83354,83355,83357,83359,83361],{"class":151,"line":152},[149,83356,53003],{"class":155},[149,83358,53006],{"class":159},[149,83360,53009],{"class":162},[149,83362,190],{"class":155},[149,83364,83365,83367,83369,83371,83373,83375],{"class":151,"line":193},[149,83366,156],{"class":155},[149,83368,52341],{"class":159},[149,83370,53020],{"class":162},[149,83372,166],{"class":155},[149,83374,53025],{"class":169},[149,83376,190],{"class":155},[149,83378,83379],{"class":151,"line":235},[149,83380,4119],{"emptyLinePlaceholder":1800},[149,83382,83383,83385,83387],{"class":151,"line":340},[149,83384,156],{"class":155},[149,83386,53038],{"class":159},[149,83388,190],{"class":155},[149,83390,83391,83393,83395,83397,83399,83401],{"class":151,"line":346},[149,83392,587],{"class":155},[149,83394,53048],{"class":159},[149,83396,53051],{"class":162},[149,83398,166],{"class":155},[149,83400,53056],{"class":169},[149,83402,190],{"class":155},[149,83404,83405,83407,83409,83411,83413,83415,83417,83419,83421],{"class":151,"line":352},[149,83406,587],{"class":155},[149,83408,53048],{"class":159},[149,83410,515],{"class":162},[149,83412,166],{"class":155},[149,83414,53095],{"class":169},[149,83416,53075],{"class":162},[149,83418,166],{"class":155},[149,83420,53102],{"class":169},[149,83422,190],{"class":155},[149,83424,83425,83427,83429,83431,83433],{"class":151,"line":1021},[149,83426,587],{"class":155},[149,83428,53111],{"class":159},[149,83430,53114],{"class":155},[149,83432,53111],{"class":159},[149,83434,190],{"class":155},[149,83436,83437,83439,83441],{"class":151,"line":1035},[149,83438,587],{"class":155},[149,83440,1783],{"class":159},[149,83442,190],{"class":155},[149,83444,83445,83448],{"class":151,"line":1054},[149,83446,83447],{"class":159},"    div",[149,83449,304],{"class":155},[149,83451,83452,83454,83456,83458,83460],{"class":151,"line":1072},[149,83453,56466],{"class":309},[149,83455,313],{"class":155},[149,83457,3442],{"class":309},[149,83459,326],{"class":325},[149,83461,841],{"class":155},[149,83463,83464,83466,83468,83470,83472],{"class":151,"line":1090},[149,83465,56480],{"class":309},[149,83467,313],{"class":155},[149,83469,2264],{"class":309},[149,83471,326],{"class":325},[149,83473,841],{"class":155},[149,83475,83476,83478,83480,83482,83484],{"class":151,"line":1633},[149,83477,59051],{"class":309},[149,83479,313],{"class":155},[149,83481,2264],{"class":309},[149,83483,326],{"class":325},[149,83485,841],{"class":155},[149,83487,83488,83490,83492,83494,83496],{"class":151,"line":1644},[149,83489,66820],{"class":309},[149,83491,313],{"class":155},[149,83493,2361],{"class":309},[149,83495,326],{"class":325},[149,83497,841],{"class":155},[149,83499,83500,83502,83504,83506],{"class":151,"line":3348},[149,83501,58978],{"class":309},[149,83503,313],{"class":155},[149,83505,53293],{"class":309},[149,83507,841],{"class":155},[149,83509,83510,83512,83514,83516],{"class":151,"line":3362},[149,83511,56579],{"class":309},[149,83513,313],{"class":155},[149,83515,53345],{"class":309},[149,83517,841],{"class":155},[149,83519,83520],{"class":151,"line":3367},[149,83521,3906],{"class":155},[149,83523,83524,83526,83528],{"class":151,"line":3373},[149,83525,54115],{"class":155},[149,83527,1783],{"class":159},[149,83529,190],{"class":155},[149,83531,83532,83534,83536],{"class":151,"line":3394},[149,83533,665],{"class":155},[149,83535,53038],{"class":159},[149,83537,190],{"class":155},[149,83539,83540],{"class":151,"line":3399},[149,83541,4119],{"emptyLinePlaceholder":1800},[149,83543,83544,83546,83548],{"class":151,"line":3413},[149,83545,156],{"class":155},[149,83547,53499],{"class":159},[149,83549,190],{"class":155},[149,83551,83552,83554,83556,83558,83560],{"class":151,"line":3418},[149,83553,587],{"class":155},[149,83555,301],{"class":159},[149,83557,185],{"class":155},[149,83559,301],{"class":159},[149,83561,190],{"class":155},[149,83563,83564,83566,83568],{"class":151,"line":3447},[149,83565,587],{"class":155},[149,83567,53512],{"class":159},[149,83569,190],{"class":155},[149,83571,83572,83574,83577,83579,83582,83585,83587,83590],{"class":151,"line":3452},[149,83573,12935],{"class":325},[149,83575,83576],{"class":309}," spec",[149,83578,15277],{"class":325},[149,83580,83581],{"class":155}," { size: ",[149,83583,83584],{"class":169},"'40cm*40cm'",[149,83586,57156],{"class":155},[149,83588,83589],{"class":169},"'黑色'",[149,83591,57296],{"class":155},[149,83593,83594],{"class":151,"line":3469},[149,83595,83596],{"class":295},"    \u002F\u002F const arr = Object.values(spec)\n",[149,83598,83599],{"class":151,"line":3474},[149,83600,83601],{"class":295},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[149,83603,83604,83606,83608,83610,83613,83615,83617,83620,83623,83626,83628,83630,83633],{"class":151,"line":3479},[149,83605,54105],{"class":155},[149,83607,56094],{"class":162},[149,83609,319],{"class":155},[149,83611,83612],{"class":169},"'div'",[149,83614,75931],{"class":155},[149,83616,166],{"class":325},[149,83618,83619],{"class":155}," Object.",[149,83621,83622],{"class":162},"values",[149,83624,83625],{"class":155},"(spec).",[149,83627,75905],{"class":162},[149,83629,319],{"class":155},[149,83631,83632],{"class":169},"'\u002F'",[149,83634,1878],{"class":155},[149,83636,83637,83639,83641],{"class":151,"line":3484},[149,83638,54115],{"class":155},[149,83640,53512],{"class":159},[149,83642,190],{"class":155},[149,83644,83645,83647,83649],{"class":151,"line":3498},[149,83646,665],{"class":155},[149,83648,53499],{"class":159},[149,83650,190],{"class":155},[149,83652,83653],{"class":151,"line":3503},[149,83654,4119],{"emptyLinePlaceholder":1800},[149,83656,83657,83659,83661],{"class":151,"line":4296},[149,83658,665],{"class":155},[149,83660,52341],{"class":159},[149,83662,190],{"class":155},[24,83664,83665],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24619,83667,83669],{"id":83668},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[24,83671,83672],{},"静态方法，将伪数组转换为真数组",[24,83674,83675],{},[83,83676],{"alt":145,"src":83677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[140,83679,83681],{"className":54765,"code":83680,"language":54767,"meta":145,"style":145},"\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",[48,83682,83683,83691,83699,83711,83723,83735,83743,83751,83756,83761,83766,83771,83779],{"__ignoreMap":145},[149,83684,83685,83687,83689],{"class":151,"line":152},[149,83686,156],{"class":155},[149,83688,53499],{"class":159},[149,83690,190],{"class":155},[149,83692,83693,83695,83697],{"class":151,"line":193},[149,83694,587],{"class":155},[149,83696,42],{"class":159},[149,83698,190],{"class":155},[149,83700,83701,83703,83705,83707,83709],{"class":151,"line":235},[149,83702,53045],{"class":155},[149,83704,45],{"class":159},[149,83706,185],{"class":155},[149,83708,45],{"class":159},[149,83710,190],{"class":155},[149,83712,83713,83715,83717,83719,83721],{"class":151,"line":340},[149,83714,53045],{"class":155},[149,83716,45],{"class":159},[149,83718,185],{"class":155},[149,83720,45],{"class":159},[149,83722,190],{"class":155},[149,83724,83725,83727,83729,83731,83733],{"class":151,"line":346},[149,83726,53045],{"class":155},[149,83728,45],{"class":159},[149,83730,185],{"class":155},[149,83732,45],{"class":159},[149,83734,190],{"class":155},[149,83736,83737,83739,83741],{"class":151,"line":352},[149,83738,54115],{"class":155},[149,83740,42],{"class":159},[149,83742,190],{"class":155},[149,83744,83745,83747,83749],{"class":151,"line":1021},[149,83746,587],{"class":155},[149,83748,53512],{"class":159},[149,83750,190],{"class":155},[149,83752,83753],{"class":151,"line":1035},[149,83754,83755],{"class":155},"    const lis = document.querySelectorAll('li')\n",[149,83757,83758],{"class":151,"line":1054},[149,83759,83760],{"class":155},"    const liss = Array.from(lis)\n",[149,83762,83763],{"class":151,"line":1072},[149,83764,83765],{"class":155},"    liss.pop()\n",[149,83767,83768],{"class":151,"line":1090},[149,83769,83770],{"class":155},"    console.log(liss)\n",[149,83772,83773,83775,83777],{"class":151,"line":1633},[149,83774,54115],{"class":155},[149,83776,53512],{"class":159},[149,83778,190],{"class":155},[149,83780,83781,83783,83785],{"class":151,"line":1644},[149,83782,665],{"class":155},[149,83784,53499],{"class":159},[149,83786,190],{"class":155},[24,83788,83789],{},[83,83790],{"alt":145,"src":83791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[120,83793,83795],{"id":83794},"_41053-string","4.10.5.3 String",[24,83797,83798],{},[83,83799],{"alt":145,"src":83800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24619,83802,83804],{"id":83803},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[140,83806,83808],{"className":54765,"code":83807,"language":54767,"meta":145,"style":145},"\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",[48,83809,83810,83818,83826,83831,83836,83841,83845,83850,83855,83860,83868],{"__ignoreMap":145},[149,83811,83812,83814,83816],{"class":151,"line":152},[149,83813,156],{"class":155},[149,83815,53499],{"class":159},[149,83817,190],{"class":155},[149,83819,83820,83822,83824],{"class":151,"line":193},[149,83821,587],{"class":155},[149,83823,53512],{"class":159},[149,83825,190],{"class":155},[149,83827,83828],{"class":151,"line":235},[149,83829,83830],{"class":155},"    \u002F\u002F 把字符串转化为数组\n",[149,83832,83833],{"class":151,"line":340},[149,83834,83835],{"class":155},"    const str = 'pink,red'\n",[149,83837,83838],{"class":151,"line":346},[149,83839,83840],{"class":155},"    const arr = str.split(',')\n",[149,83842,83843],{"class":151,"line":352},[149,83844,82319],{"class":155},[149,83846,83847],{"class":151,"line":1021},[149,83848,83849],{"class":155},"    const str1 = '2025-8-25'\n",[149,83851,83852],{"class":151,"line":1035},[149,83853,83854],{"class":155},"    const arr1 = str1.split('-')\n",[149,83856,83857],{"class":151,"line":1054},[149,83858,83859],{"class":155},"    console.log(arr1)\n",[149,83861,83862,83864,83866],{"class":151,"line":1072},[149,83863,54115],{"class":155},[149,83865,53512],{"class":159},[149,83867,190],{"class":155},[149,83869,83870,83872,83874],{"class":151,"line":1090},[149,83871,665],{"class":155},[149,83873,53499],{"class":159},[149,83875,190],{"class":155},[24619,83877,83879],{"id":83878},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[24,83881,6899],{},[24,83883,83884],{},"substring(indexStart)",[24,83886,83887],{},"substring(indexStart, indexEnd)",[42,83889,83890,83901,83913,83923],{},[45,83891,83892,83893,83896,83897,83900],{},"如果省略了 ",[48,83894,83895],{},"indexEnd","，则 ",[48,83898,83899],{},"substring()"," 提取字符直到字符串的末尾",[45,83902,83903,83904,83907,83908,83896,83910,83912],{},"如果 ",[48,83905,83906],{},"indexStart"," 等于 ",[48,83909,83895],{},[48,83911,83899],{}," 返回一个空字符串",[45,83914,83903,83915,83917,83918,83896,83920,83922],{},[48,83916,83906],{}," 大于 ",[48,83919,83895],{},[48,83921,83899],{}," 的效果就像交换了这两个参数一样",[45,83924,83925],{},"结束的索引号不包含想要截取的部分",[140,83927,83929],{"className":83170,"code":83928,"language":83172,"meta":145,"style":145},"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",[48,83930,83931,83943,83947,83981,84011,84015,84046,84050,84077,84107,84137,84141,84172],{"__ignoreMap":145},[149,83932,83933,83936,83938,83941],{"class":151,"line":152},[149,83934,83935],{"class":155},"const anyString ",[149,83937,166],{"class":325},[149,83939,83940],{"class":169}," \"Mozilla\"",[149,83942,841],{"class":155},[149,83944,83945],{"class":151,"line":193},[149,83946,4119],{"emptyLinePlaceholder":1800},[149,83948,83949,83952,83954,83956,83958,83961,83963,83966,83968,83970,83972,83974,83976,83978],{"class":151,"line":235},[149,83950,83951],{"class":309},"console",[149,83953,2421],{"class":155},[149,83955,59938],{"class":309},[149,83957,319],{"class":155},[149,83959,83960],{"class":309},"anyString",[149,83962,2421],{"class":155},[149,83964,83965],{"class":309},"substring",[149,83967,319],{"class":155},[149,83969,2056],{"class":309},[149,83971,329],{"class":155},[149,83973,830],{"class":309},[149,83975,76935],{"class":155},[149,83977,35035],{"class":325},[149,83979,83980],{"class":169}," 'M'\n",[149,83982,83983,83985,83987,83989,83991,83993,83995,83997,83999,84001,84003,84005,84007,84009],{"class":151,"line":340},[149,83984,83951],{"class":309},[149,83986,2421],{"class":155},[149,83988,59938],{"class":309},[149,83990,319],{"class":155},[149,83992,83960],{"class":309},[149,83994,2421],{"class":155},[149,83996,83965],{"class":309},[149,83998,319],{"class":155},[149,84000,830],{"class":309},[149,84002,329],{"class":155},[149,84004,2056],{"class":309},[149,84006,76935],{"class":155},[149,84008,35035],{"class":325},[149,84010,83980],{"class":169},[149,84012,84013],{"class":151,"line":346},[149,84014,4119],{"emptyLinePlaceholder":1800},[149,84016,84017,84019,84021,84023,84025,84027,84029,84031,84033,84035,84037,84039,84041,84043],{"class":151,"line":352},[149,84018,83951],{"class":309},[149,84020,2421],{"class":155},[149,84022,59938],{"class":309},[149,84024,319],{"class":155},[149,84026,83960],{"class":309},[149,84028,2421],{"class":155},[149,84030,83965],{"class":309},[149,84032,319],{"class":155},[149,84034,2056],{"class":309},[149,84036,329],{"class":155},[149,84038,2207],{"class":309},[149,84040,76935],{"class":155},[149,84042,35035],{"class":325},[149,84044,84045],{"class":169}," 'Mozill'\n",[149,84047,84048],{"class":151,"line":1021},[149,84049,4119],{"emptyLinePlaceholder":1800},[149,84051,84052,84054,84056,84058,84060,84062,84064,84066,84068,84070,84072,84074],{"class":151,"line":1035},[149,84053,83951],{"class":309},[149,84055,2421],{"class":155},[149,84057,59938],{"class":309},[149,84059,319],{"class":155},[149,84061,83960],{"class":309},[149,84063,2421],{"class":155},[149,84065,83965],{"class":309},[149,84067,319],{"class":155},[149,84069,2157],{"class":309},[149,84071,76935],{"class":155},[149,84073,35035],{"class":325},[149,84075,84076],{"class":169}," 'lla'\n",[149,84078,84079,84081,84083,84085,84087,84089,84091,84093,84095,84097,84099,84101,84103,84105],{"class":151,"line":1054},[149,84080,83951],{"class":309},[149,84082,2421],{"class":155},[149,84084,59938],{"class":309},[149,84086,319],{"class":155},[149,84088,83960],{"class":309},[149,84090,2421],{"class":155},[149,84092,83965],{"class":309},[149,84094,319],{"class":155},[149,84096,2157],{"class":309},[149,84098,329],{"class":155},[149,84100,2232],{"class":309},[149,84102,76991],{"class":155},[149,84104,35035],{"class":325},[149,84106,84076],{"class":169},[149,84108,84109,84111,84113,84115,84117,84119,84121,84123,84125,84127,84129,84131,84133,84135],{"class":151,"line":1072},[149,84110,83951],{"class":309},[149,84112,2421],{"class":155},[149,84114,59938],{"class":309},[149,84116,319],{"class":155},[149,84118,83960],{"class":309},[149,84120,2421],{"class":155},[149,84122,83965],{"class":309},[149,84124,319],{"class":155},[149,84126,2232],{"class":309},[149,84128,329],{"class":155},[149,84130,2157],{"class":309},[149,84132,76935],{"class":155},[149,84134,35035],{"class":325},[149,84136,84076],{"class":169},[149,84138,84139],{"class":151,"line":1090},[149,84140,4119],{"emptyLinePlaceholder":1800},[149,84142,84143,84145,84147,84149,84151,84153,84155,84157,84159,84161,84163,84165,84167,84169],{"class":151,"line":1633},[149,84144,83951],{"class":309},[149,84146,2421],{"class":155},[149,84148,59938],{"class":309},[149,84150,319],{"class":155},[149,84152,83960],{"class":309},[149,84154,2421],{"class":155},[149,84156,83965],{"class":309},[149,84158,319],{"class":155},[149,84160,2056],{"class":309},[149,84162,329],{"class":155},[149,84164,2232],{"class":309},[149,84166,76935],{"class":155},[149,84168,35035],{"class":325},[149,84170,84171],{"class":169}," 'Mozilla'\n",[149,84173,84174,84176,84178,84180,84182,84184,84186,84188,84190,84192,84194,84196,84198,84200],{"class":151,"line":1644},[149,84175,83951],{"class":309},[149,84177,2421],{"class":155},[149,84179,59938],{"class":309},[149,84181,319],{"class":155},[149,84183,83960],{"class":309},[149,84185,2421],{"class":155},[149,84187,83965],{"class":309},[149,84189,319],{"class":155},[149,84191,2056],{"class":309},[149,84193,329],{"class":155},[149,84195,2309],{"class":309},[149,84197,76935],{"class":155},[149,84199,35035],{"class":325},[149,84201,84171],{"class":169},[24619,84203,84205],{"id":84204},"_410533-startswith","4.10.5.3.3 startsWith",[24,84207,84208,84211,84212,84217,84218,84220,84221],{},[48,84209,84210],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[31,84213,84214],{},[48,84215,84216],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[48,84219,3087],{}," 或 ",[48,84222,67707],{},[140,84224,84226],{"className":79177,"code":84225,"language":79179,"meta":145,"style":145},"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",[48,84227,84228,84240,84259,84264,84284],{"__ignoreMap":145},[149,84229,84230,84232,84235,84237],{"class":151,"line":152},[149,84231,8508],{"class":325},[149,84233,84234],{"class":155}," str1 ",[149,84236,166],{"class":325},[149,84238,84239],{"class":169}," \"Saturday night plans\"\n",[149,84241,84242,84244,84246,84249,84252,84254,84257],{"class":151,"line":193},[149,84243,79214],{"class":155},[149,84245,59938],{"class":162},[149,84247,84248],{"class":155},"(str1.",[149,84250,84251],{"class":162},"startsWith",[149,84253,319],{"class":155},[149,84255,84256],{"class":169},"\"Sat\"",[149,84258,32203],{"class":155},[149,84260,84261],{"class":151,"line":235},[149,84262,84263],{"class":295},"\u002F\u002F Expected output: true\n",[149,84265,84266,84268,84270,84272,84274,84276,84278,84280,84282],{"class":151,"line":340},[149,84267,79214],{"class":155},[149,84269,59938],{"class":162},[149,84271,84248],{"class":155},[149,84273,84251],{"class":162},[149,84275,319],{"class":155},[149,84277,84256],{"class":169},[149,84279,329],{"class":155},[149,84281,1939],{"class":309},[149,84283,32203],{"class":155},[149,84285,84286],{"class":151,"line":346},[149,84287,84288],{"class":295},"\u002F\u002F Expected output: false\n",[140,84290,84292],{"className":52339,"code":84291,"language":52341,"meta":145,"style":145},"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",[48,84293,84294,84299,84304,84308,84313,84318],{"__ignoreMap":145},[149,84295,84296],{"class":151,"line":152},[149,84297,84298],{"class":155},"startsWith(searchString)\n",[149,84300,84301],{"class":151,"line":193},[149,84302,84303],{"class":155},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[149,84305,84306],{"class":151,"line":235},[149,84307,4119],{"emptyLinePlaceholder":1800},[149,84309,84310],{"class":151,"line":340},[149,84311,84312],{"class":155},"const str3 = 'pink老师上课中'\n",[149,84314,84315],{"class":151,"line":346},[149,84316,84317],{"class":155},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[149,84319,84320],{"class":151,"line":352},[149,84321,84322],{"class":155},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24619,84324,84326],{"id":84325},"_410534-includes","4.10.5.3.4 includes",[24,84328,84329],{},"includes(searchString) includes(searchString, position)",[125,84331,84332],{},[45,84333,84334],{},"searchString:",[24,84336,84337,84338,84340,84341,84346,84347,84352,84353,23210,84356,84359,84360,84363],{},"一个要在 ",[48,84339,3027],{}," 中查找的字符串。",[2102,84342,84345],{"href":84343,"rel":84344},"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",[25573],"不能是正则表达式","。所有非正则表达式的值都会被",[2102,84348,84351],{"href":84349,"rel":84350},"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",[25573],"强制转换为字符串","，因此如果该参数被省略或传入 ",[48,84354,84355],{},"undefined",[48,84357,84358],{},"includes()"," 方法会在字符串中搜索 ",[48,84361,84362],{},"\"undefined\"","，这通常不是你想要的",[125,84365,84366],{"start":193},[45,84367,84368,2720],{},[48,84369,84370],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[24,84372,84373,84374,84377,84378],{},"在字符串中开始搜索 ",[48,84375,84376],{},"searchString"," 的位置。默认值为 ",[48,84379,2056],{},[125,84381,84382],{"start":235},[45,84383,84384],{},"返回值：",[24,84386,84387,84388,84390,84391,84395,84396],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[48,84389,84376],{}," 为空字符串的情况），则返回 ",[31,84392,84393],{},[48,84394,3087],{}," ，否则返回 ",[31,84397,84398],{},[48,84399,67707],{},[125,84401,84402],{"start":340},[45,84403,84404],{},"异常：",[24,84406,83903,84407,15508,84409,84413],{},[48,84408,84376],{},[2102,84410,84412],{"href":84343,"rel":84411},[25573],"是一个正则表达式","，则会抛出",[24,84415,84416],{},"只要是有就是true，不需要非得以谁开头结尾",[140,84418,84420],{"className":79177,"code":84419,"language":79179,"meta":145,"style":145},"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",[48,84421,84422,84433,84456,84475,84495,84517,84536],{"__ignoreMap":145},[149,84423,84424,84426,84428,84430],{"class":151,"line":152},[149,84425,8508],{"class":325},[149,84427,81456],{"class":155},[149,84429,166],{"class":325},[149,84431,84432],{"class":169}," \"To be, or not to be, that is the question.\"\n",[149,84434,84435,84437,84439,84442,84445,84447,84450,84453],{"class":151,"line":193},[149,84436,79214],{"class":155},[149,84438,59938],{"class":162},[149,84440,84441],{"class":155},"(str.",[149,84443,84444],{"class":162},"includes",[149,84446,319],{"class":155},[149,84448,84449],{"class":169},"\"To be\"",[149,84451,84452],{"class":155},"))",[149,84454,84455],{"class":295},"  \u002F\u002F true\n",[149,84457,84458,84460,84462,84464,84466,84468,84471,84473],{"class":151,"line":235},[149,84459,79214],{"class":155},[149,84461,59938],{"class":162},[149,84463,84441],{"class":155},[149,84465,84444],{"class":162},[149,84467,319],{"class":155},[149,84469,84470],{"class":169},"\"question\"",[149,84472,84452],{"class":155},[149,84474,84455],{"class":295},[149,84476,84477,84479,84481,84483,84485,84487,84490,84492],{"class":151,"line":340},[149,84478,79214],{"class":155},[149,84480,59938],{"class":162},[149,84482,84441],{"class":155},[149,84484,84444],{"class":162},[149,84486,319],{"class":155},[149,84488,84489],{"class":169},"\"nonexistent\"",[149,84491,84452],{"class":155},[149,84493,84494],{"class":295},"  \u002F\u002F false\n",[149,84496,84497,84499,84501,84503,84505,84507,84509,84511,84513,84515],{"class":151,"line":346},[149,84498,79214],{"class":155},[149,84500,59938],{"class":162},[149,84502,84441],{"class":155},[149,84504,84444],{"class":162},[149,84506,319],{"class":155},[149,84508,84449],{"class":169},[149,84510,329],{"class":155},[149,84512,830],{"class":309},[149,84514,84452],{"class":155},[149,84516,84494],{"class":295},[149,84518,84519,84521,84523,84525,84527,84529,84532,84534],{"class":151,"line":352},[149,84520,79214],{"class":155},[149,84522,59938],{"class":162},[149,84524,84441],{"class":155},[149,84526,84444],{"class":162},[149,84528,319],{"class":155},[149,84530,84531],{"class":169},"\"TO BE\"",[149,84533,84452],{"class":155},[149,84535,84494],{"class":295},[149,84537,84538,84540,84542,84544,84546,84548,84550,84552],{"class":151,"line":1021},[149,84539,79214],{"class":155},[149,84541,59938],{"class":162},[149,84543,84441],{"class":155},[149,84545,84444],{"class":162},[149,84547,319],{"class":155},[149,84549,1382],{"class":169},[149,84551,84452],{"class":155},[149,84553,84455],{"class":295},[24619,84555,84557],{"id":84556},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[140,84559,84561],{"className":54765,"code":84560,"language":54767,"meta":145,"style":145},"\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",[48,84562,84563,84571,84579,84584,84589,84594,84599,84604,84612],{"__ignoreMap":145},[149,84564,84565,84567,84569],{"class":151,"line":152},[149,84566,156],{"class":155},[149,84568,53499],{"class":159},[149,84570,190],{"class":155},[149,84572,84573,84575,84577],{"class":151,"line":193},[149,84574,587],{"class":155},[149,84576,53512],{"class":159},[149,84578,190],{"class":155},[149,84580,84581],{"class":151,"line":235},[149,84582,84583],{"class":155},"    const num = 10\n",[149,84585,84586],{"class":151,"line":340},[149,84587,84588],{"class":155},"    \u002F\u002F 强制转换\n",[149,84590,84591],{"class":151,"line":346},[149,84592,84593],{"class":155},"    console.log(String(num))\n",[149,84595,84596],{"class":151,"line":352},[149,84597,84598],{"class":155},"    \u002F\u002F toString()方法转换\n",[149,84600,84601],{"class":151,"line":1021},[149,84602,84603],{"class":155},"    console.log(num.toString())\n",[149,84605,84606,84608,84610],{"class":151,"line":1035},[149,84607,54115],{"class":155},[149,84609,53512],{"class":159},[149,84611,190],{"class":155},[149,84613,84614,84616,84618],{"class":151,"line":1054},[149,84615,665],{"class":155},[149,84617,53499],{"class":159},[149,84619,190],{"class":155},[24619,84621,84623],{"id":84622},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[24,84625,84626],{},[83,84627],{"alt":145,"src":84628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[140,84630,84632],{"className":52339,"code":84631,"language":52341,"meta":145,"style":145},"\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",[48,84633,84634,84644,84658,84662,84670,84684,84704,84716,84724,84728,84736,84748,84756,84768,84773,84778,84783,84830,84846,84854,84862,84866],{"__ignoreMap":145},[149,84635,84636,84638,84640,84642],{"class":151,"line":152},[149,84637,53003],{"class":155},[149,84639,53006],{"class":159},[149,84641,53009],{"class":162},[149,84643,190],{"class":155},[149,84645,84646,84648,84650,84652,84654,84656],{"class":151,"line":193},[149,84647,156],{"class":155},[149,84649,52341],{"class":159},[149,84651,53020],{"class":162},[149,84653,166],{"class":155},[149,84655,53025],{"class":169},[149,84657,190],{"class":155},[149,84659,84660],{"class":151,"line":235},[149,84661,4119],{"emptyLinePlaceholder":1800},[149,84663,84664,84666,84668],{"class":151,"line":340},[149,84665,156],{"class":155},[149,84667,53038],{"class":159},[149,84669,190],{"class":155},[149,84671,84672,84674,84676,84678,84680,84682],{"class":151,"line":346},[149,84673,587],{"class":155},[149,84675,53048],{"class":159},[149,84677,53051],{"class":162},[149,84679,166],{"class":155},[149,84681,53056],{"class":169},[149,84683,190],{"class":155},[149,84685,84686,84688,84690,84692,84694,84696,84698,84700,84702],{"class":151,"line":352},[149,84687,587],{"class":155},[149,84689,53048],{"class":159},[149,84691,515],{"class":162},[149,84693,166],{"class":155},[149,84695,53095],{"class":169},[149,84697,53075],{"class":162},[149,84699,166],{"class":155},[149,84701,53102],{"class":169},[149,84703,190],{"class":155},[149,84705,84706,84708,84710,84712,84714],{"class":151,"line":1021},[149,84707,587],{"class":155},[149,84709,53111],{"class":159},[149,84711,53114],{"class":155},[149,84713,53111],{"class":159},[149,84715,190],{"class":155},[149,84717,84718,84720,84722],{"class":151,"line":1035},[149,84719,665],{"class":155},[149,84721,53038],{"class":159},[149,84723,190],{"class":155},[149,84725,84726],{"class":151,"line":1054},[149,84727,4119],{"emptyLinePlaceholder":1800},[149,84729,84730,84732,84734],{"class":151,"line":1072},[149,84731,156],{"class":155},[149,84733,53499],{"class":159},[149,84735,190],{"class":155},[149,84737,84738,84740,84742,84744,84746],{"class":151,"line":1090},[149,84739,587],{"class":155},[149,84741,301],{"class":159},[149,84743,185],{"class":155},[149,84745,301],{"class":159},[149,84747,190],{"class":155},[149,84749,84750,84752,84754],{"class":151,"line":1633},[149,84751,587],{"class":155},[149,84753,53512],{"class":159},[149,84755,190],{"class":155},[149,84757,84758,84760,84763,84765],{"class":151,"line":1644},[149,84759,12935],{"class":325},[149,84761,84762],{"class":309}," gift",[149,84764,15277],{"class":325},[149,84766,84767],{"class":169}," '50g的茶叶，清洗球'\n",[149,84769,84770],{"class":151,"line":3348},[149,84771,84772],{"class":295},"    \u002F\u002F 1.把字符串拆分为数组\n",[149,84774,84775],{"class":151,"line":3362},[149,84776,84777],{"class":295},"    \u002F\u002F console.log(gift.split(','))\n",[149,84779,84780],{"class":151,"line":3367},[149,84781,84782],{"class":295},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[149,84784,84785,84787,84789,84791,84794,84797,84799,84802,84804,84806,84808,84810,84812,84815,84817,84820,84822,84824,84826,84828],{"class":151,"line":3373},[149,84786,12935],{"class":325},[149,84788,75601],{"class":309},[149,84790,15277],{"class":325},[149,84792,84793],{"class":155}," gift.",[149,84795,84796],{"class":162},"split",[149,84798,319],{"class":155},[149,84800,84801],{"class":169},"'，'",[149,84803,32532],{"class":155},[149,84805,75726],{"class":162},[149,84807,319],{"class":155},[149,84809,81476],{"class":6932},[149,84811,81479],{"class":325},[149,84813,84814],{"class":169}," `\u003Cspan>【赠品】${",[149,84816,81476],{"class":155},[149,84818,84819],{"class":169},"}\u003C\u002Fspan>\u003Cbr>`",[149,84821,32532],{"class":155},[149,84823,75905],{"class":162},[149,84825,319],{"class":155},[149,84827,75910],{"class":169},[149,84829,1878],{"class":155},[149,84831,84832,84834,84836,84838,84840,84842,84844],{"class":151,"line":3394},[149,84833,54105],{"class":155},[149,84835,56094],{"class":162},[149,84837,319],{"class":155},[149,84839,83612],{"class":169},[149,84841,75931],{"class":155},[149,84843,166],{"class":325},[149,84845,75667],{"class":155},[149,84847,84848,84850,84852],{"class":151,"line":3399},[149,84849,54115],{"class":155},[149,84851,53512],{"class":159},[149,84853,190],{"class":155},[149,84855,84856,84858,84860],{"class":151,"line":3413},[149,84857,665],{"class":155},[149,84859,53499],{"class":159},[149,84861,190],{"class":155},[149,84863,84864],{"class":151,"line":3418},[149,84865,4119],{"emptyLinePlaceholder":1800},[149,84867,84868,84870,84872],{"class":151,"line":3447},[149,84869,665],{"class":155},[149,84871,52341],{"class":159},[149,84873,190],{"class":155},[120,84875,84877],{"id":84876},"_41054-number","4.10.5.4 Number",[24,84879,84880],{},[83,84881],{"alt":145,"src":84882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[24,84884,84885],{},"整数也可以进行toFixed来保留小数",[24,84887,84888],{},"比如：",[24,84890,84891],{},"const price=10",[24,84893,84894],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[120,84896,84898],{"id":84897},"_41055-购物车展示","4.10.5.5 购物车展示",[24,84900,84901],{},[83,84902],{"alt":145,"src":84903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[140,84905,84907],{"className":52339,"code":84906,"language":52341,"meta":145,"style":145},"\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",[48,84908,84909,84919,84933,84937,84945,84959,84979,84991,84999,85005,85015,85025,85035,85039,85043,85049,85061,85075,85079,85083,85089,85101,85117,85127,85143,85147,85151,85157,85167,85177,85181,85185,85193,85205,85217,85229,85233,85237,85245,85257,85261,85265,85276,85286,85298,85310,85320,85324,85328,85336,85345,85357,85367,85377,85381,85385,85393,85402,85409,85419,85431,85435,85439,85448,85458,85469,85481,85493,85497,85501,85510,85520,85531,85535,85539,85545,85557,85569,85579,85589,85607,85619,85623,85627,85636,85648,85658,85668,85680,85684,85692,85700,85704,85712,85726,85734,85748,85776,85784,85792,85802,85806,85814,85822,85831,85839,85848,85858,85862,85866,85874,85882,85891,85899,85907,85920,85924,85928,85936,85944,85953,85961,85969,85984,85988,85992,86000,86008,86017,86025,86033,86047,86055,86059,86063,86068,86094,86099,86136,86141,86164,86169,86223,86228,86264,86268,86274,86279,86288,86302,86311,86330,86339,86349,86354,86359,86372,86377,86431,86457,86465,86473,86477],{"__ignoreMap":145},[149,84910,84911,84913,84915,84917],{"class":151,"line":152},[149,84912,53003],{"class":155},[149,84914,53006],{"class":159},[149,84916,53009],{"class":162},[149,84918,190],{"class":155},[149,84920,84921,84923,84925,84927,84929,84931],{"class":151,"line":193},[149,84922,156],{"class":155},[149,84924,52341],{"class":159},[149,84926,53020],{"class":162},[149,84928,166],{"class":155},[149,84930,53025],{"class":169},[149,84932,190],{"class":155},[149,84934,84935],{"class":151,"line":235},[149,84936,4119],{"emptyLinePlaceholder":1800},[149,84938,84939,84941,84943],{"class":151,"line":340},[149,84940,156],{"class":155},[149,84942,53038],{"class":159},[149,84944,190],{"class":155},[149,84946,84947,84949,84951,84953,84955,84957],{"class":151,"line":346},[149,84948,587],{"class":155},[149,84950,53048],{"class":159},[149,84952,53051],{"class":162},[149,84954,166],{"class":155},[149,84956,53056],{"class":169},[149,84958,190],{"class":155},[149,84960,84961,84963,84965,84967,84969,84971,84973,84975,84977],{"class":151,"line":352},[149,84962,587],{"class":155},[149,84964,53048],{"class":159},[149,84966,515],{"class":162},[149,84968,166],{"class":155},[149,84970,53095],{"class":169},[149,84972,53075],{"class":162},[149,84974,166],{"class":155},[149,84976,53102],{"class":169},[149,84978,190],{"class":155},[149,84980,84981,84983,84985,84987,84989],{"class":151,"line":1021},[149,84982,587],{"class":155},[149,84984,53111],{"class":159},[149,84986,53114],{"class":155},[149,84988,53111],{"class":159},[149,84990,190],{"class":155},[149,84992,84993,84995,84997],{"class":151,"line":1035},[149,84994,587],{"class":155},[149,84996,1783],{"class":159},[149,84998,190],{"class":155},[149,85000,85001,85003],{"class":151,"line":1054},[149,85002,8119],{"class":159},[149,85004,304],{"class":155},[149,85006,85007,85009,85011,85013],{"class":151,"line":1072},[149,85008,56390],{"class":309},[149,85010,313],{"class":155},[149,85012,2056],{"class":309},[149,85014,841],{"class":155},[149,85016,85017,85019,85021,85023],{"class":151,"line":1090},[149,85018,56401],{"class":309},[149,85020,313],{"class":155},[149,85022,2056],{"class":309},[149,85024,841],{"class":155},[149,85026,85027,85029,85031,85033],{"class":151,"line":1633},[149,85028,74278],{"class":309},[149,85030,313],{"class":155},[149,85032,62196],{"class":309},[149,85034,841],{"class":155},[149,85036,85037],{"class":151,"line":1644},[149,85038,3906],{"class":155},[149,85040,85041],{"class":151,"line":3348},[149,85042,4119],{"emptyLinePlaceholder":1800},[149,85044,85045,85047],{"class":151,"line":3362},[149,85046,63811],{"class":162},[149,85048,304],{"class":155},[149,85050,85051,85053,85055,85057,85059],{"class":151,"line":3367},[149,85052,56466],{"class":309},[149,85054,313],{"class":155},[149,85056,80256],{"class":309},[149,85058,326],{"class":325},[149,85060,841],{"class":155},[149,85062,85063,85065,85067,85069,85071,85073],{"class":151,"line":3373},[149,85064,56401],{"class":309},[149,85066,313],{"class":155},[149,85068,322],{"class":309},[149,85070,326],{"class":325},[149,85072,53257],{"class":309},[149,85074,841],{"class":155},[149,85076,85077],{"class":151,"line":3394},[149,85078,3906],{"class":155},[149,85080,85081],{"class":151,"line":3399},[149,85082,4119],{"emptyLinePlaceholder":1800},[149,85084,85085,85087],{"class":151,"line":3413},[149,85086,80307],{"class":162},[149,85088,304],{"class":155},[149,85090,85091,85093,85095,85097,85099],{"class":151,"line":3418},[149,85092,56390],{"class":309},[149,85094,313],{"class":155},[149,85096,2438],{"class":309},[149,85098,326],{"class":325},[149,85100,841],{"class":155},[149,85102,85103,85105,85107,85109,85111,85113,85115],{"class":151,"line":3447},[149,85104,63549],{"class":309},[149,85106,313],{"class":155},[149,85108,1714],{"class":309},[149,85110,1723],{"class":309},[149,85112,80364],{"class":309},[149,85114,1720],{"class":325},[149,85116,841],{"class":155},[149,85118,85119,85121,85123,85125],{"class":151,"line":3452},[149,85120,56704],{"class":309},[149,85122,313],{"class":155},[149,85124,53180],{"class":309},[149,85126,841],{"class":155},[149,85128,85129,85131,85133,85135,85137,85139,85141],{"class":151,"line":3469},[149,85130,63666],{"class":309},[149,85132,313],{"class":155},[149,85134,830],{"class":309},[149,85136,326],{"class":325},[149,85138,835],{"class":309},[149,85140,63932],{"class":309},[149,85142,841],{"class":155},[149,85144,85145],{"class":151,"line":3474},[149,85146,3906],{"class":155},[149,85148,85149],{"class":151,"line":3479},[149,85150,4119],{"emptyLinePlaceholder":1800},[149,85152,85153,85155],{"class":151,"line":3484},[149,85154,80424],{"class":162},[149,85156,304],{"class":155},[149,85158,85159,85161,85163,85165],{"class":151,"line":3498},[149,85160,63714],{"class":309},[149,85162,313],{"class":155},[149,85164,63719],{"class":309},[149,85166,841],{"class":155},[149,85168,85169,85171,85173,85175],{"class":151,"line":3503},[149,85170,56579],{"class":309},[149,85172,313],{"class":155},[149,85174,63507],{"class":309},[149,85176,841],{"class":155},[149,85178,85179],{"class":151,"line":4296},[149,85180,3906],{"class":155},[149,85182,85183],{"class":151,"line":4310},[149,85184,4119],{"emptyLinePlaceholder":1800},[149,85186,85187,85189,85191],{"class":151,"line":4318},[149,85188,80307],{"class":162},[149,85190,57307],{"class":159},[149,85192,304],{"class":155},[149,85194,85195,85197,85199,85201,85203],{"class":151,"line":4323},[149,85196,56466],{"class":309},[149,85198,313],{"class":155},[149,85200,2475],{"class":309},[149,85202,326],{"class":325},[149,85204,841],{"class":155},[149,85206,85207,85209,85211,85213,85215],{"class":151,"line":4329},[149,85208,56480],{"class":309},[149,85210,313],{"class":155},[149,85212,2475],{"class":309},[149,85214,326],{"class":325},[149,85216,841],{"class":155},[149,85218,85219,85221,85223,85225,85227],{"class":151,"line":4335},[149,85220,63439],{"class":309},[149,85222,313],{"class":155},[149,85224,2182],{"class":309},[149,85226,326],{"class":325},[149,85228,841],{"class":155},[149,85230,85231],{"class":151,"line":4340},[149,85232,3906],{"class":155},[149,85234,85235],{"class":151,"line":9663},[149,85236,4119],{"emptyLinePlaceholder":1800},[149,85238,85239,85241,85243],{"class":151,"line":9687},[149,85240,80307],{"class":162},[149,85242,63992],{"class":162},[149,85244,304],{"class":155},[149,85246,85247,85249,85251,85253,85255],{"class":151,"line":9692},[149,85248,56466],{"class":309},[149,85250,313],{"class":155},[149,85252,3442],{"class":309},[149,85254,326],{"class":325},[149,85256,841],{"class":155},[149,85258,85259],{"class":151,"line":9698},[149,85260,3906],{"class":155},[149,85262,85263],{"class":151,"line":9725},[149,85264,4119],{"emptyLinePlaceholder":1800},[149,85266,85267,85269,85271,85274],{"class":151,"line":9730},[149,85268,80307],{"class":162},[149,85270,63992],{"class":162},[149,85272,85273],{"class":162}," .tag",[149,85275,304],{"class":155},[149,85277,85278,85280,85282,85284],{"class":151,"line":9736},[149,85279,56704],{"class":309},[149,85281,313],{"class":155},[149,85283,1394],{"class":309},[149,85285,841],{"class":155},[149,85287,85288,85290,85292,85294,85296],{"class":151,"line":9748},[149,85289,56390],{"class":309},[149,85291,313],{"class":155},[149,85293,1045],{"class":309},[149,85295,326],{"class":325},[149,85297,841],{"class":155},[149,85299,85300,85302,85304,85306,85308],{"class":151,"line":9760},[149,85301,56617],{"class":309},[149,85303,313],{"class":155},[149,85305,2361],{"class":309},[149,85307,326],{"class":325},[149,85309,841],{"class":155},[149,85311,85312,85314,85316,85318],{"class":151,"line":9772},[149,85313,59108],{"class":309},[149,85315,313],{"class":155},[149,85317,1429],{"class":309},[149,85319,841],{"class":155},[149,85321,85322],{"class":151,"line":11430},[149,85323,3906],{"class":155},[149,85325,85326],{"class":151,"line":11455},[149,85327,4119],{"emptyLinePlaceholder":1800},[149,85329,85330,85332,85334],{"class":151,"line":11478},[149,85331,80307],{"class":162},[149,85333,80598],{"class":162},[149,85335,33172],{"class":155},[149,85337,85338,85340,85343],{"class":151,"line":11502},[149,85339,80307],{"class":162},[149,85341,85342],{"class":162}," .sub-total",[149,85344,304],{"class":155},[149,85346,85347,85349,85351,85353,85355],{"class":151,"line":11507},[149,85348,56617],{"class":309},[149,85350,313],{"class":155},[149,85352,2513],{"class":309},[149,85354,326],{"class":325},[149,85356,841],{"class":155},[149,85358,85359,85361,85363,85365],{"class":151,"line":11512},[149,85360,59108],{"class":309},[149,85362,313],{"class":155},[149,85364,80621],{"class":309},[149,85366,841],{"class":155},[149,85368,85369,85371,85373,85375],{"class":151,"line":11517},[149,85370,63526],{"class":309},[149,85372,313],{"class":155},[149,85374,830],{"class":309},[149,85376,841],{"class":155},[149,85378,85379],{"class":151,"line":11526},[149,85380,3906],{"class":155},[149,85382,85383],{"class":151,"line":11531},[149,85384,4119],{"emptyLinePlaceholder":1800},[149,85386,85387,85389,85391],{"class":151,"line":11537},[149,85388,80307],{"class":162},[149,85390,80638],{"class":162},[149,85392,33172],{"class":155},[149,85394,85395,85397,85400],{"class":151,"line":11558},[149,85396,80307],{"class":162},[149,85398,85399],{"class":162}," .sub-total::before",[149,85401,33172],{"class":155},[149,85403,85404,85407],{"class":151,"line":11564},[149,85405,85406],{"class":162},"    .amount::before",[149,85408,304],{"class":155},[149,85410,85411,85413,85415,85417],{"class":151,"line":11578},[149,85412,80645],{"class":309},[149,85414,313],{"class":155},[149,85416,80650],{"class":169},[149,85418,841],{"class":155},[149,85420,85421,85423,85425,85427,85429],{"class":151,"line":11584},[149,85422,56617],{"class":309},[149,85424,313],{"class":155},[149,85426,2361],{"class":309},[149,85428,326],{"class":325},[149,85430,841],{"class":155},[149,85432,85433],{"class":151,"line":11611},[149,85434,3906],{"class":155},[149,85436,85437],{"class":151,"line":11620},[149,85438,4119],{"emptyLinePlaceholder":1800},[149,85440,85441,85443,85446],{"class":151,"line":11626},[149,85442,80307],{"class":162},[149,85444,85445],{"class":162}," .spec",[149,85447,304],{"class":155},[149,85449,85450,85452,85454,85456],{"class":151,"line":11634},[149,85451,63526],{"class":309},[149,85453,313],{"class":155},[149,85455,1045],{"class":309},[149,85457,841],{"class":155},[149,85459,85460,85462,85464,85467],{"class":151,"line":11639},[149,85461,59108],{"class":309},[149,85463,313],{"class":155},[149,85465,85466],{"class":309},"#888",[149,85468,841],{"class":155},[149,85470,85471,85473,85475,85477,85479],{"class":151,"line":18314},[149,85472,56617],{"class":309},[149,85474,313],{"class":155},[149,85476,2412],{"class":309},[149,85478,326],{"class":325},[149,85480,841],{"class":155},[149,85482,85483,85485,85487,85489,85491],{"class":151,"line":18320},[149,85484,63689],{"class":309},[149,85486,313],{"class":155},[149,85488,2561],{"class":309},[149,85490,326],{"class":325},[149,85492,841],{"class":155},[149,85494,85495],{"class":151,"line":18343},[149,85496,3906],{"class":155},[149,85498,85499],{"class":151,"line":18349},[149,85500,4119],{"emptyLinePlaceholder":1800},[149,85502,85503,85505,85508],{"class":151,"line":18372},[149,85504,80307],{"class":162},[149,85506,85507],{"class":162}," .count",[149,85509,304],{"class":155},[149,85511,85512,85514,85516,85518],{"class":151,"line":18386},[149,85513,63526],{"class":309},[149,85515,313],{"class":155},[149,85517,830],{"class":309},[149,85519,841],{"class":155},[149,85521,85522,85524,85526,85529],{"class":151,"line":18406},[149,85523,59108],{"class":309},[149,85525,313],{"class":155},[149,85527,85528],{"class":309},"#aaa",[149,85530,841],{"class":155},[149,85532,85533],{"class":151,"line":18412},[149,85534,3906],{"class":155},[149,85536,85537],{"class":151,"line":18423},[149,85538,4119],{"emptyLinePlaceholder":1800},[149,85540,85541,85543],{"class":151,"line":18446},[149,85542,74157],{"class":162},[149,85544,304],{"class":155},[149,85546,85547,85549,85551,85553,85555],{"class":151,"line":18468},[149,85548,56466],{"class":309},[149,85550,313],{"class":155},[149,85552,80256],{"class":309},[149,85554,326],{"class":325},[149,85556,841],{"class":155},[149,85558,85559,85561,85563,85565,85567],{"class":151,"line":18473},[149,85560,56401],{"class":309},[149,85562,313],{"class":155},[149,85564,2056],{"class":309},[149,85566,53257],{"class":309},[149,85568,841],{"class":155},[149,85570,85571,85573,85575,85577],{"class":151,"line":18479},[149,85572,56704],{"class":309},[149,85574,313],{"class":155},[149,85576,53180],{"class":309},[149,85578,841],{"class":155},[149,85580,85581,85583,85585,85587],{"class":151,"line":18493},[149,85582,56715],{"class":309},[149,85584,313],{"class":155},[149,85586,53281],{"class":309},[149,85588,841],{"class":155},[149,85590,85591,85594,85596,85598,85600,85602,85605],{"class":151,"line":18506},[149,85592,85593],{"class":309},"      border-top",[149,85595,313],{"class":155},[149,85597,830],{"class":309},[149,85599,326],{"class":325},[149,85601,835],{"class":309},[149,85603,85604],{"class":309}," #4e4e4e",[149,85606,841],{"class":155},[149,85608,85609,85611,85613,85615,85617],{"class":151,"line":18511},[149,85610,56390],{"class":309},[149,85612,313],{"class":155},[149,85614,2561],{"class":309},[149,85616,326],{"class":325},[149,85618,841],{"class":155},[149,85620,85621],{"class":151,"line":18525},[149,85622,3906],{"class":155},[149,85624,85625],{"class":151,"line":18530},[149,85626,4119],{"emptyLinePlaceholder":1800},[149,85628,85629,85631,85634],{"class":151,"line":18536},[149,85630,74157],{"class":162},[149,85632,85633],{"class":162}," .amount",[149,85635,304],{"class":155},[149,85637,85638,85640,85642,85644,85646],{"class":151,"line":18541},[149,85639,56617],{"class":309},[149,85641,313],{"class":155},[149,85643,2513],{"class":309},[149,85645,326],{"class":325},[149,85647,841],{"class":155},[149,85649,85650,85652,85654,85656],{"class":151,"line":18555},[149,85651,59108],{"class":309},[149,85653,313],{"class":155},[149,85655,80621],{"class":309},[149,85657,841],{"class":155},[149,85659,85660,85662,85664,85666],{"class":151,"line":18560},[149,85661,64022],{"class":309},[149,85663,313],{"class":155},[149,85665,53192],{"class":309},[149,85667,841],{"class":155},[149,85669,85670,85672,85674,85676,85678],{"class":151,"line":18565},[149,85671,63439],{"class":309},[149,85673,313],{"class":155},[149,85675,332],{"class":309},[149,85677,326],{"class":325},[149,85679,841],{"class":155},[149,85681,85682],{"class":151,"line":18579},[149,85683,3906],{"class":155},[149,85685,85686,85688,85690],{"class":151,"line":18591},[149,85687,54115],{"class":155},[149,85689,1783],{"class":159},[149,85691,190],{"class":155},[149,85693,85694,85696,85698],{"class":151,"line":18596},[149,85695,665],{"class":155},[149,85697,53038],{"class":159},[149,85699,190],{"class":155},[149,85701,85702],{"class":151,"line":18609},[149,85703,4119],{"emptyLinePlaceholder":1800},[149,85705,85706,85708,85710],{"class":151,"line":18614},[149,85707,156],{"class":155},[149,85709,53499],{"class":159},[149,85711,190],{"class":155},[149,85713,85714,85716,85718,85720,85722,85724],{"class":151,"line":18619},[149,85715,587],{"class":155},[149,85717,301],{"class":159},[149,85719,55184],{"class":162},[149,85721,166],{"class":155},[149,85723,64296],{"class":169},[149,85725,190],{"class":155},[149,85727,85728,85730,85732],{"class":151,"line":18624},[149,85729,54115],{"class":155},[149,85731,301],{"class":159},[149,85733,190],{"class":155},[149,85735,85736,85738,85740,85742,85744,85746],{"class":151,"line":18637},[149,85737,587],{"class":155},[149,85739,301],{"class":159},[149,85741,55184],{"class":162},[149,85743,166],{"class":155},[149,85745,64268],{"class":169},[149,85747,190],{"class":155},[149,85749,85750,85752,85754,85757,85759,85761,85763,85766,85768,85770,85772,85774],{"class":151,"line":18642},[149,85751,53045],{"class":155},[149,85753,301],{"class":159},[149,85755,85756],{"class":155},">合计：\u003C",[149,85758,149],{"class":159},[149,85760,55184],{"class":162},[149,85762,166],{"class":155},[149,85764,85765],{"class":169},"\"amount\"",[149,85767,185],{"class":155},[149,85769,149],{"class":159},[149,85771,185],{"class":155},[149,85773,301],{"class":159},[149,85775,190],{"class":155},[149,85777,85778,85780,85782],{"class":151,"line":34339},[149,85779,54115],{"class":155},[149,85781,301],{"class":159},[149,85783,190],{"class":155},[149,85785,85786,85788,85790],{"class":151,"line":34345},[149,85787,587],{"class":155},[149,85789,53512],{"class":159},[149,85791,190],{"class":155},[149,85793,85794,85796,85798,85800],{"class":151,"line":34351},[149,85795,12935],{"class":325},[149,85797,81058],{"class":309},[149,85799,15277],{"class":325},[149,85801,57139],{"class":155},[149,85803,85804],{"class":151,"line":34357},[149,85805,81067],{"class":155},[149,85807,85808,85810,85812],{"class":151,"line":34363},[149,85809,81072],{"class":155},[149,85811,81075],{"class":169},[149,85813,33172],{"class":155},[149,85815,85816,85818,85820],{"class":151,"line":34374},[149,85817,81082],{"class":155},[149,85819,81085],{"class":169},[149,85821,33172],{"class":155},[149,85823,85824,85826,85829],{"class":151,"line":34380},[149,85825,81092],{"class":155},[149,85827,85828],{"class":309},"289.9",[149,85830,33172],{"class":155},[149,85832,85833,85835,85837],{"class":151,"line":34400},[149,85834,81102],{"class":155},[149,85836,81105],{"class":169},[149,85838,33172],{"class":155},[149,85840,85841,85844,85846],{"class":151,"line":34406},[149,85842,85843],{"class":155},"        count: ",[149,85845,1045],{"class":309},[149,85847,33172],{"class":155},[149,85849,85850,85853,85856],{"class":151,"line":34417},[149,85851,85852],{"class":155},"        spec: { color: ",[149,85854,85855],{"class":169},"'白色'",[149,85857,57296],{"class":155},[149,85859,85860],{"class":151,"line":34423},[149,85861,79574],{"class":155},[149,85863,85864],{"class":151,"line":34429},[149,85865,81067],{"class":155},[149,85867,85868,85870,85872],{"class":151,"line":34435},[149,85869,81072],{"class":155},[149,85871,81166],{"class":169},[149,85873,33172],{"class":155},[149,85875,85876,85878,85880],{"class":151,"line":34441},[149,85877,81082],{"class":155},[149,85879,81175],{"class":169},[149,85881,33172],{"class":155},[149,85883,85884,85886,85889],{"class":151,"line":34447},[149,85885,81092],{"class":155},[149,85887,85888],{"class":309},"109.8",[149,85890,33172],{"class":155},[149,85892,85893,85895,85897],{"class":151,"line":34453},[149,85894,81102],{"class":155},[149,85896,81193],{"class":169},[149,85898,33172],{"class":155},[149,85900,85901,85903,85905],{"class":151,"line":34459},[149,85902,85843],{"class":155},[149,85904,1939],{"class":309},[149,85906,33172],{"class":155},[149,85908,85909,85912,85914,85916,85918],{"class":151,"line":34479},[149,85910,85911],{"class":155},"        spec: { size: ",[149,85913,83584],{"class":169},[149,85915,57156],{"class":155},[149,85917,83589],{"class":169},[149,85919,57296],{"class":155},[149,85921,85922],{"class":151,"line":34485},[149,85923,79574],{"class":155},[149,85925,85926],{"class":151,"line":34501},[149,85927,81067],{"class":155},[149,85929,85930,85932,85934],{"class":151,"line":34507},[149,85931,81072],{"class":155},[149,85933,81210],{"class":169},[149,85935,33172],{"class":155},[149,85937,85938,85940,85942],{"class":151,"line":34521},[149,85939,81082],{"class":155},[149,85941,81219],{"class":169},[149,85943,33172],{"class":155},[149,85945,85946,85948,85951],{"class":151,"line":34527},[149,85947,81092],{"class":155},[149,85949,85950],{"class":309},"488",[149,85952,33172],{"class":155},[149,85954,85955,85957,85959],{"class":151,"line":34542},[149,85956,81102],{"class":155},[149,85958,81237],{"class":169},[149,85960,33172],{"class":155},[149,85962,85963,85965,85967],{"class":151,"line":34548},[149,85964,85843],{"class":155},[149,85966,830],{"class":309},[149,85968,33172],{"class":155},[149,85970,85971,85973,85976,85979,85982],{"class":151,"line":34557},[149,85972,85852],{"class":155},[149,85974,85975],{"class":169},"'青色'",[149,85977,85978],{"class":155},", sum: ",[149,85980,85981],{"class":169},"'一大四小'",[149,85983,57296],{"class":155},[149,85985,85986],{"class":151,"line":34563},[149,85987,79574],{"class":155},[149,85989,85990],{"class":151,"line":34572},[149,85991,81067],{"class":155},[149,85993,85994,85996,85998],{"class":151,"line":34578},[149,85995,81072],{"class":155},[149,85997,81254],{"class":169},[149,85999,33172],{"class":155},[149,86001,86002,86004,86006],{"class":151,"line":34584},[149,86003,81082],{"class":155},[149,86005,81263],{"class":169},[149,86007,33172],{"class":155},[149,86009,86010,86012,86015],{"class":151,"line":34593},[149,86011,81092],{"class":155},[149,86013,86014],{"class":309},"139",[149,86016,33172],{"class":155},[149,86018,86019,86021,86023],{"class":151,"line":34599},[149,86020,81102],{"class":155},[149,86022,81281],{"class":169},[149,86024,33172],{"class":155},[149,86026,86027,86029,86031],{"class":151,"line":34610},[149,86028,85843],{"class":155},[149,86030,830],{"class":309},[149,86032,33172],{"class":155},[149,86034,86035,86037,86040,86042,86045],{"class":151,"line":34616},[149,86036,85911],{"class":155},[149,86038,86039],{"class":169},"'小号'",[149,86041,57156],{"class":155},[149,86043,86044],{"class":169},"'紫色'",[149,86046,57162],{"class":155},[149,86048,86049,86052],{"class":151,"line":34635},[149,86050,86051],{"class":155},"        gift: ",[149,86053,86054],{"class":169},"'50g茶叶,清洗球'\n",[149,86056,86057],{"class":151,"line":34641},[149,86058,54096],{"class":155},[149,86060,86061],{"class":151,"line":34652},[149,86062,54807],{"class":155},[149,86064,86065],{"class":151,"line":34658},[149,86066,86067],{"class":295},"    \u002F\u002F  1.根据数据渲染页面\n",[149,86069,86070,86072,86074,86076,86078,86080,86082,86084,86086,86088,86090,86092],{"class":151,"line":34678},[149,86071,54105],{"class":155},[149,86073,56094],{"class":162},[149,86075,319],{"class":155},[149,86077,81582],{"class":169},[149,86079,75931],{"class":155},[149,86081,166],{"class":325},[149,86083,81729],{"class":155},[149,86085,75726],{"class":162},[149,86087,319],{"class":155},[149,86089,81476],{"class":6932},[149,86091,81479],{"class":325},[149,86093,304],{"class":155},[149,86095,86096],{"class":151,"line":34694},[149,86097,86098],{"class":295},"      \u002F\u002F 对象解构\n",[149,86100,86101,86103,86105,86107,86109,86111,86113,86116,86118,86120,86122,86125,86127,86130,86132,86134],{"class":151,"line":34700},[149,86102,59919],{"class":325},[149,86104,81488],{"class":155},[149,86106,81501],{"class":309},[149,86108,329],{"class":155},[149,86110,81491],{"class":309},[149,86112,329],{"class":155},[149,86114,86115],{"class":309},"count",[149,86117,329],{"class":155},[149,86119,81496],{"class":309},[149,86121,329],{"class":155},[149,86123,86124],{"class":309},"spec",[149,86126,329],{"class":155},[149,86128,86129],{"class":309},"gift",[149,86131,81504],{"class":155},[149,86133,166],{"class":325},[149,86135,81509],{"class":155},[149,86137,86138],{"class":151,"line":34714},[149,86139,86140],{"class":295},"      \u002F\u002F 规格文字模块处理\n",[149,86142,86143,86145,86148,86150,86152,86154,86156,86158,86160,86162],{"class":151,"line":34720},[149,86144,59919],{"class":325},[149,86146,86147],{"class":309}," text",[149,86149,15277],{"class":325},[149,86151,83619],{"class":155},[149,86153,83622],{"class":162},[149,86155,83625],{"class":155},[149,86157,75905],{"class":162},[149,86159,319],{"class":155},[149,86161,83632],{"class":169},[149,86163,1878],{"class":155},[149,86165,86166],{"class":151,"line":34726},[149,86167,86168],{"class":295},"      \u002F\u002F 处理赠品模块\n",[149,86170,86171,86173,86175,86177,86180,86182,86184,86186,86188,86191,86193,86195,86197,86199,86201,86204,86206,86209,86211,86213,86215,86217,86219,86221],{"class":151,"line":34737},[149,86172,59919],{"class":325},[149,86174,75601],{"class":309},[149,86176,15277],{"class":325},[149,86178,86179],{"class":155}," gift ",[149,86181,2845],{"class":325},[149,86183,84793],{"class":155},[149,86185,84796],{"class":162},[149,86187,319],{"class":155},[149,86189,86190],{"class":169},"','",[149,86192,32532],{"class":155},[149,86194,75726],{"class":162},[149,86196,319],{"class":155},[149,86198,81476],{"class":6932},[149,86200,81479],{"class":325},[149,86202,86203],{"class":169}," `\u003Cspan class=\"tag\">【赠品】${",[149,86205,81476],{"class":155},[149,86207,86208],{"class":169},"}\u003C\u002Fspan>`",[149,86210,32532],{"class":155},[149,86212,75905],{"class":162},[149,86214,319],{"class":155},[149,86216,75910],{"class":169},[149,86218,15427],{"class":155},[149,86220,2720],{"class":325},[149,86222,71788],{"class":169},[149,86224,86225],{"class":151,"line":34743},[149,86226,86227],{"class":295},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[149,86229,86230,86232,86235,86237,86240,86242,86244,86246,86249,86251,86253,86255,86258,86260,86262],{"class":151,"line":34749},[149,86231,59919],{"class":325},[149,86233,86234],{"class":309}," subtotal",[149,86236,15277],{"class":325},[149,86238,86239],{"class":155}," ((price ",[149,86241,2318],{"class":325},[149,86243,7470],{"class":309},[149,86245,8234],{"class":325},[149,86247,86248],{"class":155}," count) ",[149,86250,2447],{"class":325},[149,86252,7470],{"class":309},[149,86254,32532],{"class":155},[149,86256,86257],{"class":162},"toFixed",[149,86259,319],{"class":155},[149,86261,1045],{"class":309},[149,86263,1878],{"class":155},[149,86265,86266],{"class":151,"line":34759},[149,86267,4119],{"emptyLinePlaceholder":1800},[149,86269,86270,86272],{"class":151,"line":34765},[149,86271,75664],{"class":325},[149,86273,71852],{"class":169},[149,86275,86276],{"class":151,"line":34776},[149,86277,86278],{"class":169},"        \u003Cdiv class=\"item\">\n",[149,86280,86281,86284,86286],{"class":151,"line":34782},[149,86282,86283],{"class":169},"          \u003Cimg src=\"${",[149,86285,81501],{"class":155},[149,86287,81533],{"class":169},[149,86289,86290,86293,86295,86298,86300],{"class":151,"line":34792},[149,86291,86292],{"class":169},"          \u003Cp class=\"name\">${",[149,86294,81491],{"class":155},[149,86296,86297],{"class":169},"}${",[149,86299,3027],{"class":155},[149,86301,81543],{"class":169},[149,86303,86304,86307,86309],{"class":151,"line":34797},[149,86305,86306],{"class":169},"          \u003Cp class=\"spec\">${",[149,86308,1655],{"class":155},[149,86310,81543],{"class":169},[149,86312,86313,86316,86318,86320,86322,86324,86326,86328],{"class":151,"line":34803},[149,86314,86315],{"class":169},"          \u003Cp class=\"price\">${",[149,86317,81496],{"class":155},[149,86319,2421],{"class":169},[149,86321,86257],{"class":162},[149,86323,319],{"class":169},[149,86325,1045],{"class":309},[149,86327,2292],{"class":169},[149,86329,81543],{"class":169},[149,86331,86332,86335,86337],{"class":151,"line":34852},[149,86333,86334],{"class":169},"          \u003Cp class=\"count\">x${",[149,86336,86115],{"class":155},[149,86338,81543],{"class":169},[149,86340,86341,86344,86347],{"class":151,"line":34899},[149,86342,86343],{"class":169},"          \u003Cp class=\"sub-total\">${",[149,86345,86346],{"class":155},"subtotal",[149,86348,81543],{"class":169},[149,86350,86351],{"class":151,"line":34904},[149,86352,86353],{"class":169},"        \u003C\u002Fdiv> \n",[149,86355,86356],{"class":151,"line":34910},[149,86357,86358],{"class":169},"             `\n",[149,86360,86361,86364,86366,86368,86370],{"class":151,"line":34929},[149,86362,86363],{"class":155},"    }).",[149,86365,75905],{"class":162},[149,86367,319],{"class":155},[149,86369,75910],{"class":169},[149,86371,1878],{"class":155},[149,86373,86374],{"class":151,"line":34935},[149,86375,86376],{"class":295},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[149,86378,86379,86381,86383,86385,86387,86390,86392,86395,86397,86399,86401,86404,86407,86409,86412,86414,86416,86418,86421,86423,86425,86427,86429],{"class":151,"line":34955},[149,86380,12935],{"class":325},[149,86382,64472],{"class":309},[149,86384,15277],{"class":325},[149,86386,81729],{"class":155},[149,86388,86389],{"class":162},"reduce",[149,86391,4095],{"class":155},[149,86393,86394],{"class":6932},"prev",[149,86396,329],{"class":155},[149,86398,81476],{"class":6932},[149,86400,15427],{"class":155},[149,86402,86403],{"class":325},"=>",[149,86405,86406],{"class":155}," prev ",[149,86408,2344],{"class":325},[149,86410,86411],{"class":155}," (item.price ",[149,86413,2318],{"class":325},[149,86415,7470],{"class":309},[149,86417,8234],{"class":325},[149,86419,86420],{"class":155}," item.count) ",[149,86422,2447],{"class":325},[149,86424,7470],{"class":309},[149,86426,329],{"class":155},[149,86428,2056],{"class":309},[149,86430,1878],{"class":155},[149,86432,86433,86435,86437,86439,86442,86444,86446,86449,86451,86453,86455],{"class":151,"line":34961},[149,86434,54105],{"class":155},[149,86436,56094],{"class":162},[149,86438,319],{"class":155},[149,86440,86441],{"class":169},"'.amount'",[149,86443,75931],{"class":155},[149,86445,166],{"class":325},[149,86447,86448],{"class":155}," total.",[149,86450,86257],{"class":162},[149,86452,319],{"class":155},[149,86454,1045],{"class":309},[149,86456,1878],{"class":155},[149,86458,86459,86461,86463],{"class":151,"line":34967},[149,86460,54115],{"class":155},[149,86462,53512],{"class":159},[149,86464,190],{"class":155},[149,86466,86467,86469,86471],{"class":151,"line":34977},[149,86468,665],{"class":155},[149,86470,53499],{"class":159},[149,86472,190],{"class":155},[149,86474,86475],{"class":151,"line":34982},[149,86476,4119],{"emptyLinePlaceholder":1800},[149,86478,86479,86481,86483],{"class":151,"line":34988},[149,86480,665],{"class":155},[149,86482,52341],{"class":159},[149,86484,190],{"class":155},[14,86486,86488],{"id":86487},"_411-编程思想","4.11 编程思想",[19,86490,86492],{"id":86491},"_4111-面向过程介绍","4.11.1 面向过程介绍",[24,86494,86495,86498],{},[31,86496,86497],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[24,86500,86501],{},"调用就可以了",[24,86503,86504],{},[83,86505],{"alt":145,"src":86506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[19,86508,86510],{"id":86509},"_4112-面向对象","4.11.2 面向对象",[24,86512,86513],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[24,86515,86516],{},[83,86517],{"alt":145,"src":86518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[24,86520,86521],{},"面向对象的特性：",[42,86523,86524,86527,86530],{},[45,86525,86526],{},"封装性",[45,86528,86529],{},"继承性",[45,86531,86532],{},"多态性",[19,86534,86536],{"id":86535},"_4113-两者比较","4.11.3 两者比较",[24,86538,86539],{},[83,86540],{"alt":145,"src":86541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86543,86545],{"id":86544},"_412-构造函数回顾","4.12 构造函数回顾",[24,86547,86548],{},[83,86549],{"alt":145,"src":86550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[24,86552,86553],{},[83,86554],{"alt":145,"src":86555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[24,86557,86558],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[24,86560,86561],{},[83,86562],{"alt":145,"src":86563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86565,86567],{"id":86566},"_413-原型","4.13 原型",[19,86569,86571],{"id":86570},"_4131-原型对象的认识","4.13.1 原型对象的认识",[24,86573,86574],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[24,86576,86577],{},[83,86578],{"alt":145,"src":86579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[24,86581,86582],{},[83,86583],{"alt":145,"src":86584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[24,86586,86587],{},"原型是构造函数的属性，它也是一个对象",[24,86589,86590],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[24,86592,86593],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[140,86595,86597],{"className":54765,"code":86596,"language":54767,"meta":145,"style":145},"\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",[48,86598,86599,86607,86612,86620,86625,86630,86635,86640,86645,86649,86653,86657,86662,86667,86671,86676,86681,86686,86691,86696,86700,86708],{"__ignoreMap":145},[149,86600,86601,86603,86605],{"class":151,"line":152},[149,86602,156],{"class":155},[149,86604,53499],{"class":159},[149,86606,190],{"class":155},[149,86608,86609],{"class":151,"line":193},[149,86610,86611],{"class":295},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[149,86613,86614,86616,86618],{"class":151,"line":235},[149,86615,587],{"class":155},[149,86617,53512],{"class":159},[149,86619,190],{"class":155},[149,86621,86622],{"class":151,"line":340},[149,86623,86624],{"class":155},"    function Star(uname, age) {\n",[149,86626,86627],{"class":151,"line":346},[149,86628,86629],{"class":155},"      this.uname = uname,\n",[149,86631,86632],{"class":151,"line":352},[149,86633,86634],{"class":155},"        this.age = age\n",[149,86636,86637],{"class":151,"line":1021},[149,86638,86639],{"class":155},"      \u002F\u002F this.sing = function () {\n",[149,86641,86642],{"class":151,"line":1035},[149,86643,86644],{"class":155},"      \u002F\u002F   console.log('唱歌')\n",[149,86646,86647],{"class":151,"line":1054},[149,86648,4119],{"emptyLinePlaceholder":1800},[149,86650,86651],{"class":151,"line":1072},[149,86652,61728],{"class":155},[149,86654,86655],{"class":151,"line":1090},[149,86656,3906],{"class":155},[149,86658,86659],{"class":151,"line":1633},[149,86660,86661],{"class":155},"    Star.prototype.sing = function () {\n",[149,86663,86664],{"class":151,"line":1644},[149,86665,86666],{"class":155},"      console.log('唱歌')\n",[149,86668,86669],{"class":151,"line":3348},[149,86670,3906],{"class":155},[149,86672,86673],{"class":151,"line":3362},[149,86674,86675],{"class":155},"    \u002F\u002F console.dir(Star.prototype)\n",[149,86677,86678],{"class":151,"line":3367},[149,86679,86680],{"class":155},"    const pink = new Star('pink', 18)\n",[149,86682,86683],{"class":151,"line":3373},[149,86684,86685],{"class":155},"    const red = new Star('red', 20)\n",[149,86687,86688],{"class":151,"line":3394},[149,86689,86690],{"class":155},"    pink.sing()\n",[149,86692,86693],{"class":151,"line":3399},[149,86694,86695],{"class":155},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[149,86697,86698],{"class":151,"line":3413},[149,86699,4119],{"emptyLinePlaceholder":1800},[149,86701,86702,86704,86706],{"class":151,"line":3418},[149,86703,54115],{"class":155},[149,86705,53512],{"class":159},[149,86707,190],{"class":155},[149,86709,86710,86712,86714],{"class":151,"line":3447},[149,86711,665],{"class":155},[149,86713,53499],{"class":159},[149,86715,190],{"class":155},[24,86717,86718],{},[83,86719],{"alt":145,"src":86720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[140,86722,86724],{"className":54765,"code":86723,"language":54767,"meta":145,"style":145},"\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",[48,86725,86726,86734,86742,86747,86752,86757,86762,86766,86771,86776,86781,86785,86790,86794,86798,86803,86807,86815],{"__ignoreMap":145},[149,86727,86728,86730,86732],{"class":151,"line":152},[149,86729,156],{"class":155},[149,86731,53499],{"class":159},[149,86733,190],{"class":155},[149,86735,86736,86738,86740],{"class":151,"line":193},[149,86737,587],{"class":155},[149,86739,53512],{"class":159},[149,86741,190],{"class":155},[149,86743,86744],{"class":151,"line":235},[149,86745,86746],{"class":155},"    let that\n",[149,86748,86749],{"class":151,"line":340},[149,86750,86751],{"class":155},"    function Star(uname) {\n",[149,86753,86754],{"class":151,"line":346},[149,86755,86756],{"class":155},"      this.uname = uname\n",[149,86758,86759],{"class":151,"line":352},[149,86760,86761],{"class":155},"      that = this\n",[149,86763,86764],{"class":151,"line":1021},[149,86765,3906],{"class":155},[149,86767,86768],{"class":151,"line":1035},[149,86769,86770],{"class":155},"    \u002F\u002F 实例对象是 ldh\n",[149,86772,86773],{"class":151,"line":1054},[149,86774,86775],{"class":155},"    const ldh = new Star('刘德华')\n",[149,86777,86778],{"class":151,"line":1072},[149,86779,86780],{"class":155},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[149,86782,86783],{"class":151,"line":1090},[149,86784,4119],{"emptyLinePlaceholder":1800},[149,86786,86787],{"class":151,"line":1633},[149,86788,86789],{"class":155},"    Star.sing = function () {\n",[149,86791,86792],{"class":151,"line":1644},[149,86793,86666],{"class":155},[149,86795,86796],{"class":151,"line":3348},[149,86797,3906],{"class":155},[149,86799,86800],{"class":151,"line":3362},[149,86801,86802],{"class":155},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[149,86804,86805],{"class":151,"line":3367},[149,86806,4119],{"emptyLinePlaceholder":1800},[149,86808,86809,86811,86813],{"class":151,"line":3373},[149,86810,54115],{"class":155},[149,86812,53512],{"class":159},[149,86814,190],{"class":155},[149,86816,86817,86819,86821],{"class":151,"line":3394},[149,86818,665],{"class":155},[149,86820,53499],{"class":159},[149,86822,190],{"class":155},[24,86824,86825],{},"构造函数的this指向的是实例对象；",[24,86827,86828],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[19,86830,86832],{"id":86831},"_4132-数组扩展方法","4.13.2 数组扩展方法",[24,86834,86835],{},[83,86836],{"alt":145,"src":86837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[140,86839,86841],{"className":54765,"code":86840,"language":54767,"meta":145,"style":145},"\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",[48,86842,86843,86851,86859,86864,86869,86874,86879,86884,86889,86894,86899,86904,86909,86913,86918,86923,86928,86933,86937,86942,86947,86952,86957,86961,86966,86971,86976,86981,86985,86990,86994,87002],{"__ignoreMap":145},[149,86844,86845,86847,86849],{"class":151,"line":152},[149,86846,156],{"class":155},[149,86848,53499],{"class":159},[149,86850,190],{"class":155},[149,86852,86853,86855,86857],{"class":151,"line":193},[149,86854,587],{"class":155},[149,86856,53512],{"class":159},[149,86858,190],{"class":155},[149,86860,86861],{"class":151,"line":235},[149,86862,86863],{"class":155},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[149,86865,86866],{"class":151,"line":340},[149,86867,86868],{"class":155},"    const arr = [1, 2, 3]\n",[149,86870,86871],{"class":151,"line":346},[149,86872,86873],{"class":155},"    \u002F\u002F 自己定义数组的扩展方法\n",[149,86875,86876],{"class":151,"line":352},[149,86877,86878],{"class":155},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[149,86880,86881],{"class":151,"line":1021},[149,86882,86883],{"class":155},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[149,86885,86886],{"class":151,"line":1035},[149,86887,86888],{"class":155},"    \u002F\u002F ①.最大值\n",[149,86890,86891],{"class":151,"line":1054},[149,86892,86893],{"class":155},"    Array.prototype.max = function () {\n",[149,86895,86896],{"class":151,"line":1072},[149,86897,86898],{"class":155},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[149,86900,86901],{"class":151,"line":1090},[149,86902,86903],{"class":155},"      return Math.max(...this)\n",[149,86905,86906],{"class":151,"line":1633},[149,86907,86908],{"class":155},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[149,86910,86911],{"class":151,"line":1644},[149,86912,3906],{"class":155},[149,86914,86915],{"class":151,"line":3348},[149,86916,86917],{"class":155},"    console.log(arr.max())\n",[149,86919,86920],{"class":151,"line":3362},[149,86921,86922],{"class":155},"    \u002F\u002F ②最小值\n",[149,86924,86925],{"class":151,"line":3367},[149,86926,86927],{"class":155},"    Array.prototype.min = function () {\n",[149,86929,86930],{"class":151,"line":3373},[149,86931,86932],{"class":155},"      return Math.min(...this)\n",[149,86934,86935],{"class":151,"line":3394},[149,86936,3906],{"class":155},[149,86938,86939],{"class":151,"line":3399},[149,86940,86941],{"class":155},"    console.log(arr.min())\n",[149,86943,86944],{"class":151,"line":3413},[149,86945,86946],{"class":155},"    \u002F\u002F③求和\n",[149,86948,86949],{"class":151,"line":3418},[149,86950,86951],{"class":155},"    Array.prototype.sum = function () {\n",[149,86953,86954],{"class":151,"line":3447},[149,86955,86956],{"class":155},"      return this.reduce((prev, current) => prev + current, 0)\n",[149,86958,86959],{"class":151,"line":3452},[149,86960,3906],{"class":155},[149,86962,86963],{"class":151,"line":3469},[149,86964,86965],{"class":155},"    console.log(arr.sum())\n",[149,86967,86968],{"class":151,"line":3474},[149,86969,86970],{"class":155},"    \u002F\u002F ③排序\n",[149,86972,86973],{"class":151,"line":3479},[149,86974,86975],{"class":155},"    Array.prototype.rever = function () {\n",[149,86977,86978],{"class":151,"line":3484},[149,86979,86980],{"class":155},"      return this.reverse()\n",[149,86982,86983],{"class":151,"line":3498},[149,86984,3906],{"class":155},[149,86986,86987],{"class":151,"line":3503},[149,86988,86989],{"class":155},"    console.log(arr.rever())\n",[149,86991,86992],{"class":151,"line":4296},[149,86993,4119],{"emptyLinePlaceholder":1800},[149,86995,86996,86998,87000],{"class":151,"line":4310},[149,86997,54115],{"class":155},[149,86999,53512],{"class":159},[149,87001,190],{"class":155},[149,87003,87004,87006,87008],{"class":151,"line":4318},[149,87005,665],{"class":155},[149,87007,53499],{"class":159},[149,87009,190],{"class":155},[24,87011,87012],{},[83,87013],{"alt":145,"src":87014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[19,87016,87018],{"id":87017},"_4133-constructor-属性","4.13.3 constructor 属性",[24,87020,87021],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[24,87023,87024],{},[83,87025],{"alt":145,"src":87026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[140,87028,87030],{"className":54765,"code":87029,"language":54767,"meta":145,"style":145},"\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",[48,87031,87032,87040,87048,87053,87058,87062,87067,87072,87077,87085],{"__ignoreMap":145},[149,87033,87034,87036,87038],{"class":151,"line":152},[149,87035,156],{"class":155},[149,87037,53499],{"class":159},[149,87039,190],{"class":155},[149,87041,87042,87044,87046],{"class":151,"line":193},[149,87043,587],{"class":155},[149,87045,53512],{"class":159},[149,87047,190],{"class":155},[149,87049,87050],{"class":151,"line":235},[149,87051,87052],{"class":155},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[149,87054,87055],{"class":151,"line":340},[149,87056,87057],{"class":155},"    function Star() {\n",[149,87059,87060],{"class":151,"line":346},[149,87061,3906],{"class":155},[149,87063,87064],{"class":151,"line":352},[149,87065,87066],{"class":155},"    const ldh = new Star()\n",[149,87068,87069],{"class":151,"line":1021},[149,87070,87071],{"class":155},"    console.log(Star.prototype)\n",[149,87073,87074],{"class":151,"line":1035},[149,87075,87076],{"class":155},"    console.log(Star.prototype.constructor === Star)\n",[149,87078,87079,87081,87083],{"class":151,"line":1054},[149,87080,54115],{"class":155},[149,87082,53512],{"class":159},[149,87084,190],{"class":155},[149,87086,87087,87089,87091],{"class":151,"line":1072},[149,87088,665],{"class":155},[149,87090,53499],{"class":159},[149,87092,190],{"class":155},[24,87094,87095],{},[83,87096],{"alt":145,"src":87097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[24,87099,87100],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[140,87102,87104],{"className":54765,"code":87103,"language":54767,"meta":145,"style":145},"  \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",[48,87105,87106,87114,87118,87122,87126,87131,87136,87141,87145,87150,87155,87160,87165,87170,87175,87179,87183,87188,87193,87198,87202,87207,87212,87216,87220,87224],{"__ignoreMap":145},[149,87107,87108,87110,87112],{"class":151,"line":152},[149,87109,587],{"class":155},[149,87111,53512],{"class":159},[149,87113,190],{"class":155},[149,87115,87116],{"class":151,"line":193},[149,87117,87052],{"class":155},[149,87119,87120],{"class":151,"line":235},[149,87121,87057],{"class":155},[149,87123,87124],{"class":151,"line":340},[149,87125,3906],{"class":155},[149,87127,87128],{"class":151,"line":346},[149,87129,87130],{"class":155},"    \u002F\u002F const ldh = new Star()\n",[149,87132,87133],{"class":151,"line":352},[149,87134,87135],{"class":155},"    \u002F\u002F console.log(Star.prototype)\n",[149,87137,87138],{"class":151,"line":1021},[149,87139,87140],{"class":155},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[149,87142,87143],{"class":151,"line":1035},[149,87144,4119],{"emptyLinePlaceholder":1800},[149,87146,87147],{"class":151,"line":1054},[149,87148,87149],{"class":155},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[149,87151,87152],{"class":151,"line":1072},[149,87153,87154],{"class":155},"    \u002F\u002F Star.prototype.sing = function () {\n",[149,87156,87157],{"class":151,"line":1090},[149,87158,87159],{"class":155},"    \u002F\u002F   console.log('唱歌')\n",[149,87161,87162],{"class":151,"line":1633},[149,87163,87164],{"class":155},"    \u002F\u002F }\n",[149,87166,87167],{"class":151,"line":1644},[149,87168,87169],{"class":155},"    \u002F\u002F Star.prototype.dance = function () {\n",[149,87171,87172],{"class":151,"line":3348},[149,87173,87174],{"class":155},"    \u002F\u002F   console.log('跳舞')\n",[149,87176,87177],{"class":151,"line":3362},[149,87178,87164],{"class":155},[149,87180,87181],{"class":151,"line":3367},[149,87182,87071],{"class":155},[149,87184,87185],{"class":151,"line":3373},[149,87186,87187],{"class":155},"    Star.prototype = {\n",[149,87189,87190],{"class":151,"line":3394},[149,87191,87192],{"class":155},"      sing: function () {\n",[149,87194,87195],{"class":151,"line":3399},[149,87196,87197],{"class":155},"        console.log('唱歌')\n",[149,87199,87200],{"class":151,"line":3413},[149,87201,79574],{"class":155},[149,87203,87204],{"class":151,"line":3418},[149,87205,87206],{"class":155},"      dance: function () {\n",[149,87208,87209],{"class":151,"line":3447},[149,87210,87211],{"class":155},"        console.log('跳舞')\n",[149,87213,87214],{"class":151,"line":3452},[149,87215,54096],{"class":155},[149,87217,87218],{"class":151,"line":3469},[149,87219,3906],{"class":155},[149,87221,87222],{"class":151,"line":3474},[149,87223,87071],{"class":155},[149,87225,87226,87228,87230],{"class":151,"line":3479},[149,87227,54115],{"class":155},[149,87229,53512],{"class":159},[149,87231,190],{"class":155},[24,87233,87234],{},"进行输出结果后会发现：",[24,87236,87237],{},[83,87238],{"alt":145,"src":87239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[24,87241,87242],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[24,87244,87245],{},"所以，要重新指回创造这个原型对象的构造函数",[140,87247,87249],{"className":72895,"code":87248,"language":72897,"meta":145,"style":145},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[48,87250,87251,87265,87270,87275,87286,87299,87304,87315,87329,87333],{"__ignoreMap":145},[149,87252,87253,87256,87258,87261,87263],{"class":151,"line":152},[149,87254,87255],{"class":309},"Star",[149,87257,2421],{"class":155},[149,87259,87260],{"class":309},"prototype",[149,87262,15277],{"class":325},[149,87264,304],{"class":155},[149,87266,87267],{"class":151,"line":193},[149,87268,87269],{"class":295},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[149,87271,87272],{"class":151,"line":235},[149,87273,87274],{"class":155},"  constructor: Star,\n",[149,87276,87277,87280,87282,87284],{"class":151,"line":340},[149,87278,87279],{"class":162},"  sing",[149,87281,313],{"class":155},[149,87283,56144],{"class":325},[149,87285,56147],{"class":155},[149,87287,87288,87290,87292,87294,87297],{"class":151,"line":346},[149,87289,75435],{"class":155},[149,87291,59938],{"class":162},[149,87293,319],{"class":155},[149,87295,87296],{"class":169},"'唱歌'",[149,87298,1878],{"class":155},[149,87300,87301],{"class":151,"line":352},[149,87302,87303],{"class":155},"   },\n",[149,87305,87306,87309,87311,87313],{"class":151,"line":1021},[149,87307,87308],{"class":162},"   dance",[149,87310,313],{"class":155},[149,87312,56144],{"class":325},[149,87314,56147],{"class":155},[149,87316,87317,87320,87322,87324,87327],{"class":151,"line":1035},[149,87318,87319],{"class":155},"     console.",[149,87321,59938],{"class":162},[149,87323,319],{"class":155},[149,87325,87326],{"class":169},"'跳舞'",[149,87328,1878],{"class":155},[149,87330,87331],{"class":151,"line":1054},[149,87332,6027],{"class":155},[149,87334,87335],{"class":151,"line":1072},[149,87336,355],{"class":155},[24,87338,87339],{},[83,87340],{"alt":145,"src":87341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[24,87343,87344],{},"总结1：",[24,87346,87347],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[24,87349,87350],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[24,87352,87353],{},"constructor指的是他的来源",[24,87355,87356],{},[83,87357],{"alt":145,"src":87358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[24,87360,87361],{},[83,87362],{"alt":145,"src":87363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[24,87365,87366],{},"总结2：",[24,87368,87369],{},[83,87370],{"alt":145,"src":87371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[24,87373,87374],{},[83,87375],{"alt":145,"src":87376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[24,87378,87379],{},[83,87380],{"alt":145,"src":87381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[19,87383,87385],{"id":87384},"_4134-对象原型","4.13.4 对象原型",[24,87387,87388],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[24,87390,87391],{},"对象原型就是__proto__这个属性",[24,87393,87394],{},[83,87395],{"alt":145,"src":87396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[24,87398,87399],{},[83,87400],{"alt":145,"src":87401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[24,87403,87404],{},[83,87405],{"alt":145,"src":87406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[24,87408,87409],{},[83,87410],{"alt":145,"src":87411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[140,87413,87415],{"className":54765,"code":87414,"language":54767,"meta":145,"style":145},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[48,87416,87417,87425,87433,87437,87441,87445,87450,87458],{"__ignoreMap":145},[149,87418,87419,87421,87423],{"class":151,"line":152},[149,87420,156],{"class":155},[149,87422,53499],{"class":159},[149,87424,190],{"class":155},[149,87426,87427,87429,87431],{"class":151,"line":193},[149,87428,587],{"class":155},[149,87430,53512],{"class":159},[149,87432,190],{"class":155},[149,87434,87435],{"class":151,"line":235},[149,87436,87057],{"class":155},[149,87438,87439],{"class":151,"line":340},[149,87440,3906],{"class":155},[149,87442,87443],{"class":151,"line":346},[149,87444,87066],{"class":155},[149,87446,87447],{"class":151,"line":352},[149,87448,87449],{"class":155},"    console.log(ldh)\n",[149,87451,87452,87454,87456],{"class":151,"line":1021},[149,87453,54115],{"class":155},[149,87455,53512],{"class":159},[149,87457,190],{"class":155},[149,87459,87460,87462,87464],{"class":151,"line":1035},[149,87461,665],{"class":155},[149,87463,53499],{"class":159},[149,87465,190],{"class":155},[24,87467,87468],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[24,87470,87471],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[24,87473,87474],{},[83,87475],{"alt":145,"src":87476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[24,87478,87479],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[24,87481,87482],{},"对象原型指向原型对象",[24,87484,87485],{},[83,87486],{"alt":145,"src":87487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[24,87489,87490],{},[83,87491],{"alt":145,"src":87492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[24,87494,87495],{},[83,87496],{"alt":145,"src":87497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[19,87499,87501],{"id":87500},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[24,87503,87504],{},[83,87505],{"alt":145,"src":87506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[125,87508,87509,87512,87515,87518],{},[45,87510,87511],{},"构造函数通过new的形式实例化得到实例对象",[45,87513,87514],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[45,87516,87517],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[45,87519,87520],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[24,87522,87523],{},[83,87524],{"alt":145,"src":87525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[24,87527,87528],{},"题目梳理：",[24,87530,87531],{},[83,87532],{"alt":145,"src":87533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[19,87535,87537],{"id":87536},"_4136-原型继承","4.13.6 原型继承",[24,87539,87540],{},[83,87541],{"alt":145,"src":87542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[24,87544,87545],{},[83,87546],{"alt":145,"src":87547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[24,87549,87550],{},[83,87551],{"alt":145,"src":87552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[24,87554,87555],{},[83,87556],{"alt":145,"src":87557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[24,87559,87560],{},[83,87561],{"alt":145,"src":87562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[24,87564,87565],{},[83,87566],{"alt":145,"src":87567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[24,87569,87570],{},[83,87571],{"alt":145,"src":87572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[24,87574,87575],{},[83,87576],{"alt":145,"src":87577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[24,87579,87580],{},"回顾：构造函数每次new得到对象都是不同的",[19,87582,87584],{"id":87583},"_4137-原型链","4.13.7 原型链",[24,87586,87587],{},[83,87588],{"alt":145,"src":87589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[24,87591,87592],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[24,87594,87595],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[24,87597,87598],{},"大哥是Object",[24,87600,87601],{},[83,87602],{"alt":145,"src":87603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[24,87605,87606],{},[83,87607],{"alt":145,"src":87608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[24,87610,87611],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[24,87613,87614],{},"万物皆对象",[19,87616,87618],{"id":87617},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[24,87620,87621],{},"模态框",[24,87623,87624],{},"以后遇见这个效果直接使用这个就行",[24,87626,87627],{},[83,87628],{"alt":145,"src":87629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[24,87631,87632],{},[83,87633],{"alt":145,"src":87634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[24,87636,87637],{},[83,87638],{"alt":145,"src":87639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[24,87641,87642],{},[83,87643],{"alt":145,"src":87644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[24,87646,87647],{},"补充知识点：",[125,87649,87650],{},[45,87651,87652],{},"append()",[24,87654,87655],{},[83,87656],{"alt":145,"src":87657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[140,87659,87661],{"className":52339,"code":87660,"language":52341,"meta":145,"style":145},"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",[48,87662,87663,87668,87673,87678,87682,87686,87690,87695,87700,87705,87709],{"__ignoreMap":145},[149,87664,87665],{"class":151,"line":152},[149,87666,87667],{"class":155},"append(param1)\n",[149,87669,87670],{"class":151,"line":193},[149,87671,87672],{"class":155},"append(param1, param2)\n",[149,87674,87675],{"class":151,"line":235},[149,87676,87677],{"class":155},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[149,87679,87680],{"class":151,"line":340},[149,87681,4119],{"emptyLinePlaceholder":1800},[149,87683,87684],{"class":151,"line":346},[149,87685,4119],{"emptyLinePlaceholder":1800},[149,87687,87688],{"class":151,"line":352},[149,87689,4119],{"emptyLinePlaceholder":1800},[149,87691,87692],{"class":151,"line":1021},[149,87693,87694],{"class":155},"let div = document.createElement(\"div\");\n",[149,87696,87697],{"class":151,"line":1035},[149,87698,87699],{"class":155},"let p = document.createElement(\"p\");\n",[149,87701,87702],{"class":151,"line":1054},[149,87703,87704],{"class":155},"div.append(p);\n",[149,87706,87707],{"class":151,"line":1072},[149,87708,4119],{"emptyLinePlaceholder":1800},[149,87710,87711,87714,87716],{"class":151,"line":1090},[149,87712,87713],{"class":155},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[149,87715,24],{"class":159},[149,87717,87718],{"class":155},"> ]\n",[125,87720,87721],{"start":193},[45,87722,87723],{},"remove()",[24,87725,87726],{},"自己删自己",[24,87728,87729],{},[83,87730],{"alt":145,"src":87731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[140,87733,87735],{"className":52339,"code":87734,"language":52341,"meta":145,"style":145},"\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",[48,87736,87737,87747,87761,87765,87773,87787,87807,87819,87827,87834,87846,87859,87894,87906,87917,87929,87941,87953,87980,87990,87994,87998,88007,88019,88033,88043,88055,88059,88063,88073,88084,88094,88104,88117,88130,88140,88144,88148,88157,88167,88179,88183,88187,88196,88206,88216,88228,88232,88236,88246,88262,88273,88283,88293,88305,88317,88329,88333,88337,88350,88361,88365,88373,88381,88385,88393,88413,88433,88441,88446,88472,88477,88482,88501,88506,88518,88523,88534,88544,88554,88559,88564,88568,88573,88578,88583,88603,88608,88628,88633,88647,88652,88657,88662,88678,88682,88687,88716,88721,88726,88731,88742,88746,88750,88754,88759,88784,88789,88814,88819,88828,88832,88837,88862,88866,88891,88895,88904,88908,88913,88931,88941,88945,88953,88961,88965],{"__ignoreMap":145},[149,87738,87739,87741,87743,87745],{"class":151,"line":152},[149,87740,53003],{"class":155},[149,87742,53006],{"class":159},[149,87744,53009],{"class":162},[149,87746,190],{"class":155},[149,87748,87749,87751,87753,87755,87757,87759],{"class":151,"line":193},[149,87750,156],{"class":155},[149,87752,52341],{"class":159},[149,87754,53020],{"class":162},[149,87756,166],{"class":155},[149,87758,53025],{"class":169},[149,87760,190],{"class":155},[149,87762,87763],{"class":151,"line":235},[149,87764,4119],{"emptyLinePlaceholder":1800},[149,87766,87767,87769,87771],{"class":151,"line":340},[149,87768,156],{"class":155},[149,87770,53038],{"class":159},[149,87772,190],{"class":155},[149,87774,87775,87777,87779,87781,87783,87785],{"class":151,"line":346},[149,87776,587],{"class":155},[149,87778,53048],{"class":159},[149,87780,53051],{"class":162},[149,87782,166],{"class":155},[149,87784,53056],{"class":169},[149,87786,190],{"class":155},[149,87788,87789,87791,87793,87795,87797,87799,87801,87803,87805],{"class":151,"line":352},[149,87790,587],{"class":155},[149,87792,53048],{"class":159},[149,87794,515],{"class":162},[149,87796,166],{"class":155},[149,87798,53095],{"class":169},[149,87800,53075],{"class":162},[149,87802,166],{"class":155},[149,87804,53102],{"class":169},[149,87806,190],{"class":155},[149,87808,87809,87811,87813,87815,87817],{"class":151,"line":1021},[149,87810,587],{"class":155},[149,87812,53111],{"class":159},[149,87814,53114],{"class":155},[149,87816,53111],{"class":159},[149,87818,190],{"class":155},[149,87820,87821,87823,87825],{"class":151,"line":1035},[149,87822,587],{"class":155},[149,87824,1783],{"class":159},[149,87826,190],{"class":155},[149,87828,87829,87832],{"class":151,"line":1054},[149,87830,87831],{"class":162},"    .modal",[149,87833,304],{"class":155},[149,87835,87836,87838,87840,87842,87844],{"class":151,"line":1072},[149,87837,56466],{"class":309},[149,87839,313],{"class":155},[149,87841,5691],{"class":309},[149,87843,326],{"class":325},[149,87845,841],{"class":155},[149,87847,87848,87851,87853,87855,87857],{"class":151,"line":1090},[149,87849,87850],{"class":309},"      min-height",[149,87852,313],{"class":155},[149,87854,322],{"class":309},[149,87856,326],{"class":325},[149,87858,841],{"class":155},[149,87860,87861,87863,87865,87867,87869,87871,87873,87875,87877,87879,87881,87883,87885,87887,87889,87892],{"class":151,"line":1633},[149,87862,80431],{"class":309},[149,87864,313],{"class":155},[149,87866,2056],{"class":309},[149,87868,5811],{"class":309},[149,87870,3757],{"class":309},[149,87872,326],{"class":325},[149,87874,80448],{"class":309},[149,87876,319],{"class":155},[149,87878,2056],{"class":309},[149,87880,329],{"class":155},[149,87882,2056],{"class":309},[149,87884,329],{"class":155},[149,87886,2056],{"class":309},[149,87888,329],{"class":155},[149,87890,87891],{"class":309},"0.1",[149,87893,337],{"class":155},[149,87895,87896,87898,87900,87902,87904],{"class":151,"line":1644},[149,87897,56829],{"class":309},[149,87899,313],{"class":155},[149,87901,2157],{"class":309},[149,87903,326],{"class":325},[149,87905,841],{"class":155},[149,87907,87908,87910,87912,87915],{"class":151,"line":3348},[149,87909,56454],{"class":309},[149,87911,313],{"class":155},[149,87913,87914],{"class":309},"fixed",[149,87916,841],{"class":155},[149,87918,87919,87922,87924,87927],{"class":151,"line":3362},[149,87920,87921],{"class":309},"      z-index",[149,87923,313],{"class":155},[149,87925,87926],{"class":309},"999",[149,87928,841],{"class":155},[149,87930,87931,87933,87935,87937,87939],{"class":151,"line":3367},[149,87932,56533],{"class":309},[149,87934,313],{"class":155},[149,87936,332],{"class":309},[149,87938,2191],{"class":325},[149,87940,841],{"class":155},[149,87942,87943,87945,87947,87949,87951],{"class":151,"line":3373},[149,87944,56642],{"class":309},[149,87946,313],{"class":155},[149,87948,332],{"class":309},[149,87950,2191],{"class":325},[149,87952,841],{"class":155},[149,87954,87955,87957,87959,87961,87963,87966,87968,87970,87972,87974,87976,87978],{"class":151,"line":3394},[149,87956,80472],{"class":309},[149,87958,313],{"class":155},[149,87960,80477],{"class":309},[149,87962,319],{"class":155},[149,87964,87965],{"class":309},"-50",[149,87967,2191],{"class":325},[149,87969,329],{"class":155},[149,87971,87965],{"class":309},[149,87973,2191],{"class":325},[149,87975,329],{"class":155},[149,87977,2056],{"class":309},[149,87979,337],{"class":155},[149,87981,87982,87984,87986,87988],{"class":151,"line":3399},[149,87983,56579],{"class":309},[149,87985,313],{"class":155},[149,87987,62533],{"class":309},[149,87989,841],{"class":155},[149,87991,87992],{"class":151,"line":3413},[149,87993,3906],{"class":155},[149,87995,87996],{"class":151,"line":3418},[149,87997,4119],{"emptyLinePlaceholder":1800},[149,87999,88000,88002,88005],{"class":151,"line":3447},[149,88001,87831],{"class":162},[149,88003,88004],{"class":162}," .header",[149,88006,304],{"class":155},[149,88008,88009,88011,88013,88015,88017],{"class":151,"line":3452},[149,88010,59051],{"class":309},[149,88012,313],{"class":155},[149,88014,2264],{"class":309},[149,88016,326],{"class":325},[149,88018,841],{"class":155},[149,88020,88021,88023,88025,88027,88029,88031],{"class":151,"line":3469},[149,88022,56390],{"class":309},[149,88024,313],{"class":155},[149,88026,2056],{"class":309},[149,88028,3757],{"class":309},[149,88030,326],{"class":325},[149,88032,841],{"class":155},[149,88034,88035,88037,88039,88041],{"class":151,"line":3474},[149,88036,56454],{"class":309},[149,88038,313],{"class":155},[149,88040,56459],{"class":309},[149,88042,841],{"class":155},[149,88044,88045,88047,88049,88051,88053],{"class":151,"line":3479},[149,88046,56617],{"class":309},[149,88048,313],{"class":155},[149,88050,2561],{"class":309},[149,88052,326],{"class":325},[149,88054,841],{"class":155},[149,88056,88057],{"class":151,"line":3484},[149,88058,3906],{"class":155},[149,88060,88061],{"class":151,"line":3498},[149,88062,4119],{"emptyLinePlaceholder":1800},[149,88064,88065,88067,88069,88071],{"class":151,"line":3503},[149,88066,87831],{"class":162},[149,88068,88004],{"class":162},[149,88070,4750],{"class":159},[149,88072,304],{"class":155},[149,88074,88075,88078,88080,88082],{"class":151,"line":4296},[149,88076,88077],{"class":309},"      font-style",[149,88079,313],{"class":155},[149,88081,65528],{"class":309},[149,88083,841],{"class":155},[149,88085,88086,88088,88090,88092],{"class":151,"line":4310},[149,88087,59108],{"class":309},[149,88089,313],{"class":155},[149,88091,1429],{"class":309},[149,88093,841],{"class":155},[149,88095,88096,88098,88100,88102],{"class":151,"line":4318},[149,88097,56454],{"class":309},[149,88099,313],{"class":155},[149,88101,56526],{"class":309},[149,88103,841],{"class":155},[149,88105,88106,88109,88111,88113,88115],{"class":151,"line":4323},[149,88107,88108],{"class":309},"      right",[149,88110,313],{"class":155},[149,88112,2438],{"class":309},[149,88114,326],{"class":325},[149,88116,841],{"class":155},[149,88118,88119,88121,88123,88126,88128],{"class":151,"line":4329},[149,88120,56642],{"class":309},[149,88122,313],{"class":155},[149,88124,88125],{"class":309},"-2",[149,88127,326],{"class":325},[149,88129,841],{"class":155},[149,88131,88132,88134,88136,88138],{"class":151,"line":4335},[149,88133,63714],{"class":309},[149,88135,313],{"class":155},[149,88137,63719],{"class":309},[149,88139,841],{"class":155},[149,88141,88142],{"class":151,"line":4340},[149,88143,3906],{"class":155},[149,88145,88146],{"class":151,"line":9663},[149,88147,4119],{"emptyLinePlaceholder":1800},[149,88149,88150,88152,88155],{"class":151,"line":9687},[149,88151,87831],{"class":162},[149,88153,88154],{"class":162}," .body",[149,88156,304],{"class":155},[149,88158,88159,88161,88163,88165],{"class":151,"line":9692},[149,88160,58978],{"class":309},[149,88162,313],{"class":155},[149,88164,53293],{"class":309},[149,88166,841],{"class":155},[149,88168,88169,88171,88173,88175,88177],{"class":151,"line":9698},[149,88170,56390],{"class":309},[149,88172,313],{"class":155},[149,88174,2309],{"class":309},[149,88176,326],{"class":325},[149,88178,841],{"class":155},[149,88180,88181],{"class":151,"line":9725},[149,88182,3906],{"class":155},[149,88184,88185],{"class":151,"line":9730},[149,88186,4119],{"emptyLinePlaceholder":1800},[149,88188,88189,88191,88194],{"class":151,"line":9736},[149,88190,87831],{"class":162},[149,88192,88193],{"class":162}," .footer",[149,88195,304],{"class":155},[149,88197,88198,88200,88202,88204],{"class":151,"line":9748},[149,88199,56704],{"class":309},[149,88201,313],{"class":155},[149,88203,53180],{"class":309},[149,88205,841],{"class":155},[149,88207,88208,88210,88212,88214],{"class":151,"line":9760},[149,88209,56715],{"class":309},[149,88211,313],{"class":155},[149,88213,53281],{"class":309},[149,88215,841],{"class":155},[149,88217,88218,88220,88222,88224,88226],{"class":151,"line":9772},[149,88219,56390],{"class":309},[149,88221,313],{"class":155},[149,88223,2309],{"class":309},[149,88225,326],{"class":325},[149,88227,841],{"class":155},[149,88229,88230],{"class":151,"line":11430},[149,88231,3906],{"class":155},[149,88233,88234],{"class":151,"line":11455},[149,88235,4119],{"emptyLinePlaceholder":1800},[149,88237,88238,88240,88242,88244],{"class":151,"line":11478},[149,88239,87831],{"class":162},[149,88241,88193],{"class":162},[149,88243,3123],{"class":159},[149,88245,304],{"class":155},[149,88247,88248,88250,88252,88254,88256,88258,88260],{"class":151,"line":11502},[149,88249,56390],{"class":309},[149,88251,313],{"class":155},[149,88253,1939],{"class":309},[149,88255,326],{"class":325},[149,88257,3802],{"class":309},[149,88259,326],{"class":325},[149,88261,841],{"class":155},[149,88263,88264,88266,88268,88271],{"class":151,"line":11507},[149,88265,63410],{"class":309},[149,88267,313],{"class":155},[149,88269,88270],{"class":309},"#ccc",[149,88272,841],{"class":155},[149,88274,88275,88277,88279,88281],{"class":151,"line":11512},[149,88276,65657],{"class":309},[149,88278,313],{"class":155},[149,88280,56432],{"class":309},[149,88282,841],{"class":155},[149,88284,88285,88287,88289,88291],{"class":151,"line":11517},[149,88286,59108],{"class":309},[149,88288,313],{"class":155},[149,88290,62533],{"class":309},[149,88292,841],{"class":155},[149,88294,88295,88297,88299,88301,88303],{"class":151,"line":11526},[149,88296,56829],{"class":309},[149,88298,313],{"class":155},[149,88300,1045],{"class":309},[149,88302,326],{"class":325},[149,88304,841],{"class":155},[149,88306,88307,88309,88311,88313,88315],{"class":151,"line":11531},[149,88308,63439],{"class":309},[149,88310,313],{"class":155},[149,88312,2309],{"class":309},[149,88314,326],{"class":325},[149,88316,841],{"class":155},[149,88318,88319,88321,88323,88325,88327],{"class":151,"line":11537},[149,88320,56617],{"class":309},[149,88322,313],{"class":155},[149,88324,2412],{"class":309},[149,88326,326],{"class":325},[149,88328,841],{"class":155},[149,88330,88331],{"class":151,"line":11558},[149,88332,3906],{"class":155},[149,88334,88335],{"class":151,"line":11564},[149,88336,4119],{"emptyLinePlaceholder":1800},[149,88338,88339,88341,88343,88345,88348],{"class":151,"line":11578},[149,88340,87831],{"class":162},[149,88342,88193],{"class":162},[149,88344,3123],{"class":159},[149,88346,88347],{"class":162},".submit",[149,88349,304],{"class":155},[149,88351,88352,88354,88356,88359],{"class":151,"line":11584},[149,88353,56579],{"class":309},[149,88355,313],{"class":155},[149,88357,88358],{"class":309},"#369",[149,88360,841],{"class":155},[149,88362,88363],{"class":151,"line":11611},[149,88364,3906],{"class":155},[149,88366,88367,88369,88371],{"class":151,"line":11620},[149,88368,54115],{"class":155},[149,88370,1783],{"class":159},[149,88372,190],{"class":155},[149,88374,88375,88377,88379],{"class":151,"line":11626},[149,88376,665],{"class":155},[149,88378,53038],{"class":159},[149,88380,190],{"class":155},[149,88382,88383],{"class":151,"line":11634},[149,88384,4119],{"emptyLinePlaceholder":1800},[149,88386,88387,88389,88391],{"class":151,"line":11639},[149,88388,156],{"class":155},[149,88390,53499],{"class":159},[149,88392,190],{"class":155},[149,88394,88395,88397,88399,88401,88403,88406,88409,88411],{"class":151,"line":18314},[149,88396,587],{"class":155},[149,88398,646],{"class":159},[149,88400,16670],{"class":162},[149,88402,166],{"class":155},[149,88404,88405],{"class":169},"\"delete\"",[149,88407,88408],{"class":155},">删除\u003C\u002F",[149,88410,646],{"class":159},[149,88412,190],{"class":155},[149,88414,88415,88417,88419,88421,88423,88426,88429,88431],{"class":151,"line":18320},[149,88416,587],{"class":155},[149,88418,646],{"class":159},[149,88420,16670],{"class":162},[149,88422,166],{"class":155},[149,88424,88425],{"class":169},"\"login\"",[149,88427,88428],{"class":155},">登录\u003C\u002F",[149,88430,646],{"class":159},[149,88432,190],{"class":155},[149,88434,88435,88437,88439],{"class":151,"line":18343},[149,88436,587],{"class":155},[149,88438,53512],{"class":159},[149,88440,190],{"class":155},[149,88442,88443],{"class":151,"line":18349},[149,88444,88445],{"class":295},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[149,88447,88448,88450,88453,88455,88457,88459,88461,88463,88466,88468,88470],{"class":151,"line":18372},[149,88449,71768],{"class":325},[149,88451,88452],{"class":162}," Modal",[149,88454,319],{"class":155},[149,88456,53111],{"class":6932},[149,88458,15277],{"class":325},[149,88460,71614],{"class":169},[149,88462,329],{"class":155},[149,88464,88465],{"class":6932},"message",[149,88467,15277],{"class":325},[149,88469,71614],{"class":169},[149,88471,14155],{"class":155},[149,88473,88474],{"class":151,"line":18386},[149,88475,88476],{"class":295},"      \u002F\u002F 创建Model 模态框盒子\n",[149,88478,88479],{"class":151,"line":18406},[149,88480,88481],{"class":295},"      \u002F\u002F 1.1 创建div标签\n",[149,88483,88484,88486,88489,88491,88493,88495,88497,88499],{"class":151,"line":18412},[149,88485,71735],{"class":309},[149,88487,88488],{"class":155},".modalBox ",[149,88490,166],{"class":325},[149,88492,56091],{"class":155},[149,88494,71835],{"class":162},[149,88496,319],{"class":155},[149,88498,83612],{"class":169},[149,88500,1878],{"class":155},[149,88502,88503],{"class":151,"line":18423},[149,88504,88505],{"class":295},"      \u002F\u002F 1.2 给div 添加类名为model\n",[149,88507,88508,88510,88513,88515],{"class":151,"line":18446},[149,88509,71735],{"class":309},[149,88511,88512],{"class":155},".modalBox.className ",[149,88514,166],{"class":325},[149,88516,88517],{"class":169}," 'modal'\n",[149,88519,88520],{"class":151,"line":18468},[149,88521,88522],{"class":295},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[149,88524,88525,88527,88530,88532],{"class":151,"line":18473},[149,88526,71735],{"class":309},[149,88528,88529],{"class":155},".modalBox.innerHTML ",[149,88531,166],{"class":325},[149,88533,71852],{"class":169},[149,88535,88536,88539,88541],{"class":151,"line":18479},[149,88537,88538],{"class":169},"        \u003Cdiv class=\"header\">${",[149,88540,53111],{"class":155},[149,88542,88543],{"class":169},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[149,88545,88546,88549,88551],{"class":151,"line":18493},[149,88547,88548],{"class":169},"        \u003Cdiv class=\"body\">${",[149,88550,88465],{"class":155},[149,88552,88553],{"class":169},"}\u003C\u002Fdiv>\n",[149,88555,88556],{"class":151,"line":18506},[149,88557,88558],{"class":169},"      `\n",[149,88560,88561],{"class":151,"line":18511},[149,88562,88563],{"class":295},"      \u002F\u002F console.log(this.modalBox)\n",[149,88565,88566],{"class":151,"line":18525},[149,88567,3906],{"class":155},[149,88569,88570],{"class":151,"line":18530},[149,88571,88572],{"class":295},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[149,88574,88575],{"class":151,"line":18536},[149,88576,88577],{"class":295},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[149,88579,88580],{"class":151,"line":18541},[149,88581,88582],{"class":295},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[149,88584,88585,88588,88590,88592,88594,88597,88599,88601],{"class":151,"line":18555},[149,88586,88587],{"class":309},"    Modal",[149,88589,2421],{"class":155},[149,88591,87260],{"class":309},[149,88593,2421],{"class":155},[149,88595,88596],{"class":162},"open",[149,88598,15277],{"class":325},[149,88600,60609],{"class":325},[149,88602,56147],{"class":155},[149,88604,88605],{"class":151,"line":18560},[149,88606,88607],{"class":295},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[149,88609,88610,88612,88615,88617,88619,88621,88623,88626],{"class":151,"line":18565},[149,88611,59919],{"class":325},[149,88613,88614],{"class":309}," box",[149,88616,15277],{"class":325},[149,88618,56091],{"class":155},[149,88620,56094],{"class":162},[149,88622,319],{"class":155},[149,88624,88625],{"class":169},"'.modal'",[149,88627,1878],{"class":155},[149,88629,88630],{"class":151,"line":18579},[149,88631,88632],{"class":295},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[149,88634,88635,88638,88640,88643,88645],{"class":151,"line":18591},[149,88636,88637],{"class":155},"      box ",[149,88639,3435],{"class":325},[149,88641,88642],{"class":155}," box.",[149,88644,58698],{"class":162},[149,88646,3695],{"class":155},[149,88648,88649],{"class":151,"line":18596},[149,88650,88651],{"class":295},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[149,88653,88654],{"class":151,"line":18609},[149,88655,88656],{"class":295},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[149,88658,88659],{"class":151,"line":18614},[149,88660,88661],{"class":295},"      \u002F\u002F append可以增加对象\n",[149,88663,88664,88667,88670,88672,88675],{"class":151,"line":18619},[149,88665,88666],{"class":155},"      document.body.",[149,88668,88669],{"class":162},"append",[149,88671,319],{"class":155},[149,88673,88674],{"class":309},"this",[149,88676,88677],{"class":155},".modalBox)\n",[149,88679,88680],{"class":151,"line":18624},[149,88681,4119],{"emptyLinePlaceholder":1800},[149,88683,88684],{"class":151,"line":18637},[149,88685,88686],{"class":295},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[149,88688,88689,88691,88694,88696,88698,88701,88703,88705,88707,88709,88712,88714],{"class":151,"line":18642},[149,88690,71735],{"class":309},[149,88692,88693],{"class":155},".modalBox.",[149,88695,56094],{"class":162},[149,88697,319],{"class":155},[149,88699,88700],{"class":169},"'i'",[149,88702,32532],{"class":155},[149,88704,59504],{"class":162},[149,88706,319],{"class":155},[149,88708,59509],{"class":169},[149,88710,88711],{"class":155},", () ",[149,88713,86403],{"class":325},[149,88715,304],{"class":155},[149,88717,88718],{"class":151,"line":34339},[149,88719,88720],{"class":295},"        \u002F\u002F 这个地方需要用到箭头函数\n",[149,88722,88723],{"class":151,"line":34345},[149,88724,88725],{"class":295},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[149,88727,88728],{"class":151,"line":34351},[149,88729,88730],{"class":295},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[149,88732,88733,88735,88737,88740],{"class":151,"line":34357},[149,88734,66413],{"class":309},[149,88736,2421],{"class":155},[149,88738,88739],{"class":162},"close",[149,88741,3695],{"class":155},[149,88743,88744],{"class":151,"line":34363},[149,88745,66502],{"class":155},[149,88747,88748],{"class":151,"line":34374},[149,88749,3906],{"class":155},[149,88751,88752],{"class":151,"line":34380},[149,88753,4119],{"emptyLinePlaceholder":1800},[149,88755,88756],{"class":151,"line":34400},[149,88757,88758],{"class":295},"    \u002F\u002F 测试一下 点击 删除按钮\n",[149,88760,88761,88763,88765,88767,88770,88772,88774,88776,88778,88780,88782],{"class":151,"line":34406},[149,88762,54105],{"class":155},[149,88764,56094],{"class":162},[149,88766,319],{"class":155},[149,88768,88769],{"class":169},"'#delete'",[149,88771,32532],{"class":155},[149,88773,59504],{"class":162},[149,88775,319],{"class":155},[149,88777,59509],{"class":169},[149,88779,88711],{"class":155},[149,88781,86403],{"class":325},[149,88783,304],{"class":155},[149,88785,88786],{"class":151,"line":34417},[149,88787,88788],{"class":295},"      \u002F\u002F 先调用Model构造函数\n",[149,88790,88791,88793,88796,88798,88800,88802,88804,88807,88809,88812],{"class":151,"line":34423},[149,88792,59919],{"class":325},[149,88794,88795],{"class":309}," del",[149,88797,15277],{"class":325},[149,88799,13292],{"class":325},[149,88801,88452],{"class":162},[149,88803,319],{"class":155},[149,88805,88806],{"class":169},"'温馨的提示'",[149,88808,329],{"class":155},[149,88810,88811],{"class":169},"'您没有删除权限操作'",[149,88813,1878],{"class":155},[149,88815,88816],{"class":151,"line":34429},[149,88817,88818],{"class":295},"      \u002F\u002F 实例对象调用open方法\n",[149,88820,88821,88824,88826],{"class":151,"line":34435},[149,88822,88823],{"class":155},"      del.",[149,88825,88596],{"class":162},[149,88827,3695],{"class":155},[149,88829,88830],{"class":151,"line":34441},[149,88831,35167],{"class":155},[149,88833,88834],{"class":151,"line":34447},[149,88835,88836],{"class":295},"    \u002F\u002F 测试一下 点击 登录按钮\n",[149,88838,88839,88841,88843,88845,88848,88850,88852,88854,88856,88858,88860],{"class":151,"line":34453},[149,88840,54105],{"class":155},[149,88842,56094],{"class":162},[149,88844,319],{"class":155},[149,88846,88847],{"class":169},"'#login'",[149,88849,32532],{"class":155},[149,88851,59504],{"class":162},[149,88853,319],{"class":155},[149,88855,59509],{"class":169},[149,88857,88711],{"class":155},[149,88859,86403],{"class":325},[149,88861,304],{"class":155},[149,88863,88864],{"class":151,"line":34459},[149,88865,88788],{"class":295},[149,88867,88868,88870,88873,88875,88877,88879,88881,88884,88886,88889],{"class":151,"line":34479},[149,88869,59919],{"class":325},[149,88871,88872],{"class":309}," log",[149,88874,15277],{"class":325},[149,88876,13292],{"class":325},[149,88878,88452],{"class":162},[149,88880,319],{"class":155},[149,88882,88883],{"class":169},"'友情提示'",[149,88885,329],{"class":155},[149,88887,88888],{"class":169},"'您还没有登录呢'",[149,88890,1878],{"class":155},[149,88892,88893],{"class":151,"line":34485},[149,88894,88818],{"class":295},[149,88896,88897,88900,88902],{"class":151,"line":34501},[149,88898,88899],{"class":155},"      log.",[149,88901,88596],{"class":162},[149,88903,3695],{"class":155},[149,88905,88906],{"class":151,"line":34507},[149,88907,35167],{"class":155},[149,88909,88910],{"class":151,"line":34521},[149,88911,88912],{"class":295},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[149,88914,88915,88917,88919,88921,88923,88925,88927,88929],{"class":151,"line":34527},[149,88916,88587],{"class":309},[149,88918,2421],{"class":155},[149,88920,87260],{"class":309},[149,88922,2421],{"class":155},[149,88924,88739],{"class":162},[149,88926,15277],{"class":325},[149,88928,60609],{"class":325},[149,88930,56147],{"class":155},[149,88932,88933,88935,88937,88939],{"class":151,"line":34542},[149,88934,71735],{"class":309},[149,88936,88693],{"class":155},[149,88938,58698],{"class":162},[149,88940,3695],{"class":155},[149,88942,88943],{"class":151,"line":34548},[149,88944,3906],{"class":155},[149,88946,88947,88949,88951],{"class":151,"line":34557},[149,88948,54115],{"class":155},[149,88950,53512],{"class":159},[149,88952,190],{"class":155},[149,88954,88955,88957,88959],{"class":151,"line":34563},[149,88956,665],{"class":155},[149,88958,53499],{"class":159},[149,88960,190],{"class":155},[149,88962,88963],{"class":151,"line":34572},[149,88964,4119],{"emptyLinePlaceholder":1800},[149,88966,88967,88969,88971],{"class":151,"line":34578},[149,88968,665],{"class":155},[149,88970,52341],{"class":159},[149,88972,190],{"class":155},[24,88974,88975],{},[83,88976],{"alt":145,"src":88977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88979,88981],{"id":88980},"_414-深浅拷贝","4.14 深浅拷贝",[19,88983,88985],{"id":88984},"_4141-浅拷贝","4.14.1 浅拷贝",[24,88987,88988],{},[83,88989],{"alt":145,"src":88990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[24,88992,88993],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[24,88995,88996],{},[83,88997],{"alt":145,"src":88998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[24,89000,89001],{},[83,89002],{"alt":145,"src":89003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[24,89005,89006],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[24,89008,89009],{},[83,89010],{"alt":145,"src":89011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[24,89013,13046],{},[24,89015,89016],{},[83,89017],{"alt":145,"src":89018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[19,89020,89022],{"id":89021},"_4142-深拷贝","4.14.2 深拷贝",[24,89024,89025],{},"深拷贝：拷贝的是对象，不是地址",[24,89027,89028],{},"常用的三种方法：",[125,89030,89031,89034,89037],{},[45,89032,89033],{},"通过递归实现深拷贝",[45,89035,89036],{},"lodash\u002FcloneDeep",[45,89038,89039],{},"通过JSON.stringify()实现",[120,89041,89043],{"id":89042},"_41421-递归函数","4.14.2.1 递归函数",[24,89045,89046],{},[83,89047],{"alt":145,"src":89048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[125,89050,89051],{},[45,89052,89053],{},"死递归占溢出：",[140,89055,89057],{"className":54765,"code":89056,"language":54767,"meta":145,"style":145},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[48,89058,89059,89067,89075,89079,89084,89088,89093,89101],{"__ignoreMap":145},[149,89060,89061,89063,89065],{"class":151,"line":152},[149,89062,156],{"class":155},[149,89064,53499],{"class":159},[149,89066,190],{"class":155},[149,89068,89069,89071,89073],{"class":151,"line":193},[149,89070,587],{"class":155},[149,89072,53512],{"class":159},[149,89074,190],{"class":155},[149,89076,89077],{"class":151,"line":235},[149,89078,78825],{"class":155},[149,89080,89081],{"class":151,"line":340},[149,89082,89083],{"class":155},"      fn()\n",[149,89085,89086],{"class":151,"line":346},[149,89087,3906],{"class":155},[149,89089,89090],{"class":151,"line":352},[149,89091,89092],{"class":155},"    fn()\n",[149,89094,89095,89097,89099],{"class":151,"line":1021},[149,89096,54115],{"class":155},[149,89098,53512],{"class":159},[149,89100,190],{"class":155},[149,89102,89103,89105,89107],{"class":151,"line":1035},[149,89104,665],{"class":155},[149,89106,53499],{"class":159},[149,89108,190],{"class":155},[125,89110,89111],{"start":193},[45,89112,89113],{},"递归函数要加判断条件：",[24,89115,89116],{},[83,89117],{"alt":145,"src":89118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[125,89120,89121],{"start":235},[45,89122,89123],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[140,89125,89127],{"className":52339,"code":89126,"language":52341,"meta":145,"style":145},"\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",[48,89128,89129,89139,89153,89157,89165,89179,89199,89211,89219,89223,89231,89243,89251,89259,89284,89296,89300,89307,89315,89323,89327],{"__ignoreMap":145},[149,89130,89131,89133,89135,89137],{"class":151,"line":152},[149,89132,53003],{"class":155},[149,89134,53006],{"class":159},[149,89136,53009],{"class":162},[149,89138,190],{"class":155},[149,89140,89141,89143,89145,89147,89149,89151],{"class":151,"line":193},[149,89142,156],{"class":155},[149,89144,52341],{"class":159},[149,89146,53020],{"class":162},[149,89148,166],{"class":155},[149,89150,53025],{"class":169},[149,89152,190],{"class":155},[149,89154,89155],{"class":151,"line":235},[149,89156,4119],{"emptyLinePlaceholder":1800},[149,89158,89159,89161,89163],{"class":151,"line":340},[149,89160,156],{"class":155},[149,89162,53038],{"class":159},[149,89164,190],{"class":155},[149,89166,89167,89169,89171,89173,89175,89177],{"class":151,"line":346},[149,89168,587],{"class":155},[149,89170,53048],{"class":159},[149,89172,53051],{"class":162},[149,89174,166],{"class":155},[149,89176,53056],{"class":169},[149,89178,190],{"class":155},[149,89180,89181,89183,89185,89187,89189,89191,89193,89195,89197],{"class":151,"line":352},[149,89182,587],{"class":155},[149,89184,53048],{"class":159},[149,89186,515],{"class":162},[149,89188,166],{"class":155},[149,89190,53095],{"class":169},[149,89192,53075],{"class":162},[149,89194,166],{"class":155},[149,89196,53102],{"class":169},[149,89198,190],{"class":155},[149,89200,89201,89203,89205,89207,89209],{"class":151,"line":1021},[149,89202,587],{"class":155},[149,89204,53111],{"class":159},[149,89206,53114],{"class":155},[149,89208,53111],{"class":159},[149,89210,190],{"class":155},[149,89212,89213,89215,89217],{"class":151,"line":1035},[149,89214,665],{"class":155},[149,89216,53038],{"class":159},[149,89218,190],{"class":155},[149,89220,89221],{"class":151,"line":1054},[149,89222,4119],{"emptyLinePlaceholder":1800},[149,89224,89225,89227,89229],{"class":151,"line":1072},[149,89226,156],{"class":155},[149,89228,53499],{"class":159},[149,89230,190],{"class":155},[149,89232,89233,89235,89237,89239,89241],{"class":151,"line":1090},[149,89234,587],{"class":155},[149,89236,301],{"class":159},[149,89238,185],{"class":155},[149,89240,301],{"class":159},[149,89242,190],{"class":155},[149,89244,89245,89247,89249],{"class":151,"line":1633},[149,89246,587],{"class":155},[149,89248,53512],{"class":159},[149,89250,190],{"class":155},[149,89252,89253,89255,89257],{"class":151,"line":1644},[149,89254,71768],{"class":325},[149,89256,75455],{"class":162},[149,89258,12567],{"class":155},[149,89260,89261,89263,89265,89267,89269,89271,89273,89275,89277,89279,89282],{"class":151,"line":3348},[149,89262,57463],{"class":155},[149,89264,56094],{"class":162},[149,89266,319],{"class":155},[149,89268,83612],{"class":169},[149,89270,75931],{"class":155},[149,89272,166],{"class":325},[149,89274,13292],{"class":325},[149,89276,75471],{"class":162},[149,89278,18971],{"class":155},[149,89280,89281],{"class":162},"toLocaleString",[149,89283,3695],{"class":155},[149,89285,89286,89289,89292,89294],{"class":151,"line":3362},[149,89287,89288],{"class":162},"      setTimeout",[149,89290,89291],{"class":155},"(getTime, ",[149,89293,8126],{"class":309},[149,89295,1878],{"class":155},[149,89297,89298],{"class":151,"line":3367},[149,89299,3906],{"class":155},[149,89301,89302,89305],{"class":151,"line":3373},[149,89303,89304],{"class":162},"    getTime",[149,89306,3695],{"class":155},[149,89308,89309,89311,89313],{"class":151,"line":3394},[149,89310,54115],{"class":155},[149,89312,53512],{"class":159},[149,89314,190],{"class":155},[149,89316,89317,89319,89321],{"class":151,"line":3399},[149,89318,665],{"class":155},[149,89320,53499],{"class":159},[149,89322,190],{"class":155},[149,89324,89325],{"class":151,"line":3413},[149,89326,4119],{"emptyLinePlaceholder":1800},[149,89328,89329,89331,89333],{"class":151,"line":3418},[149,89330,665],{"class":155},[149,89332,52341],{"class":159},[149,89334,190],{"class":155},[24,89336,89337],{},[83,89338],{"alt":145,"src":89339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[125,89341,89342],{"start":340},[45,89343,89033],{},[24,89345,89346],{},[83,89347],{"alt":145,"src":89348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[24,89350,89351],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[24,89353,40895],{},[24,89355,89356],{},"这个是简易版的递归函数深拷贝",[24,89358,89359],{},"一定要注意先数组再对象，因为万物皆可对象",[140,89361,89363],{"className":52339,"code":89362,"language":52341,"meta":145,"style":145},"\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",[48,89364,89365,89375,89389,89393,89401,89415,89435,89447,89455,89459,89467,89475,89485,89494,89502,89518,89522,89530,89534,89538,89550,89555,89574,89590,89595,89600,89605,89620,89625,89630,89639,89647,89664,89672,89678,89686,89691,89696,89705,89709,89713,89717,89728,89737,89747,89761,89771,89779,89787,89795,89799],{"__ignoreMap":145},[149,89366,89367,89369,89371,89373],{"class":151,"line":152},[149,89368,53003],{"class":155},[149,89370,53006],{"class":159},[149,89372,53009],{"class":162},[149,89374,190],{"class":155},[149,89376,89377,89379,89381,89383,89385,89387],{"class":151,"line":193},[149,89378,156],{"class":155},[149,89380,52341],{"class":159},[149,89382,53020],{"class":162},[149,89384,166],{"class":155},[149,89386,53025],{"class":169},[149,89388,190],{"class":155},[149,89390,89391],{"class":151,"line":235},[149,89392,4119],{"emptyLinePlaceholder":1800},[149,89394,89395,89397,89399],{"class":151,"line":340},[149,89396,156],{"class":155},[149,89398,53038],{"class":159},[149,89400,190],{"class":155},[149,89402,89403,89405,89407,89409,89411,89413],{"class":151,"line":346},[149,89404,587],{"class":155},[149,89406,53048],{"class":159},[149,89408,53051],{"class":162},[149,89410,166],{"class":155},[149,89412,53056],{"class":169},[149,89414,190],{"class":155},[149,89416,89417,89419,89421,89423,89425,89427,89429,89431,89433],{"class":151,"line":352},[149,89418,587],{"class":155},[149,89420,53048],{"class":159},[149,89422,515],{"class":162},[149,89424,166],{"class":155},[149,89426,53095],{"class":169},[149,89428,53075],{"class":162},[149,89430,166],{"class":155},[149,89432,53102],{"class":169},[149,89434,190],{"class":155},[149,89436,89437,89439,89441,89443,89445],{"class":151,"line":1021},[149,89438,587],{"class":155},[149,89440,53111],{"class":159},[149,89442,53114],{"class":155},[149,89444,53111],{"class":159},[149,89446,190],{"class":155},[149,89448,89449,89451,89453],{"class":151,"line":1035},[149,89450,665],{"class":155},[149,89452,53038],{"class":159},[149,89454,190],{"class":155},[149,89456,89457],{"class":151,"line":1054},[149,89458,4119],{"emptyLinePlaceholder":1800},[149,89460,89461,89463,89465],{"class":151,"line":1072},[149,89462,156],{"class":155},[149,89464,53499],{"class":159},[149,89466,190],{"class":155},[149,89468,89469,89471,89473],{"class":151,"line":1090},[149,89470,587],{"class":155},[149,89472,53512],{"class":159},[149,89474,190],{"class":155},[149,89476,89477,89479,89481,89483],{"class":151,"line":1633},[149,89478,12935],{"class":325},[149,89480,71655],{"class":309},[149,89482,15277],{"class":325},[149,89484,304],{"class":155},[149,89486,89487,89489,89492],{"class":151,"line":1644},[149,89488,73298],{"class":155},[149,89490,89491],{"class":169},"'pink'",[149,89493,33172],{"class":155},[149,89495,89496,89498,89500],{"class":151,"line":3348},[149,89497,73308],{"class":155},[149,89499,2513],{"class":309},[149,89501,33172],{"class":155},[149,89503,89504,89507,89510,89512,89515],{"class":151,"line":3362},[149,89505,89506],{"class":155},"      hobby: [",[149,89508,89509],{"class":169},"'乒乓球'",[149,89511,329],{"class":155},[149,89513,89514],{"class":169},"'足球'",[149,89516,89517],{"class":155},"],\n",[149,89519,89520],{"class":151,"line":3367},[149,89521,79554],{"class":155},[149,89523,89524,89527],{"class":151,"line":3373},[149,89525,89526],{"class":155},"        baby: ",[149,89528,89529],{"class":169},"'小pink'\n",[149,89531,89532],{"class":151,"line":3394},[149,89533,54096],{"class":155},[149,89535,89536],{"class":151,"line":3399},[149,89537,3906],{"class":155},[149,89539,89540,89542,89545,89547],{"class":151,"line":3413},[149,89541,12935],{"class":325},[149,89543,89544],{"class":309}," o",[149,89546,15277],{"class":325},[149,89548,89549],{"class":155}," {}\n",[149,89551,89552],{"class":151,"line":3418},[149,89553,89554],{"class":295},"    \u002F\u002F 拷贝函数\n",[149,89556,89557,89559,89562,89564,89567,89569,89572],{"class":151,"line":3447},[149,89558,71768],{"class":325},[149,89560,89561],{"class":162}," deepCopy",[149,89563,319],{"class":155},[149,89565,89566],{"class":6932},"newObj",[149,89568,329],{"class":155},[149,89570,89571],{"class":6932},"oldObj",[149,89573,14155],{"class":155},[149,89575,89576,89578,89580,89582,89585,89587],{"class":151,"line":3452},[149,89577,53982],{"class":325},[149,89579,3378],{"class":155},[149,89581,53546],{"class":325},[149,89583,89584],{"class":155}," k ",[149,89586,27752],{"class":325},[149,89588,89589],{"class":155}," oldObj) {\n",[149,89591,89592],{"class":151,"line":3469},[149,89593,89594],{"class":295},"        \u002F\u002F 处理数组的问题\n",[149,89596,89597],{"class":151,"line":3474},[149,89598,89599],{"class":295},"        \u002F\u002F 判断是否属于数组\n",[149,89601,89602],{"class":151,"line":3479},[149,89603,89604],{"class":295},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[149,89606,89607,89609,89612,89615,89618],{"class":151,"line":3484},[149,89608,4216],{"class":325},[149,89610,89611],{"class":155}," (oldObj[k] ",[149,89613,89614],{"class":325},"instanceof",[149,89616,89617],{"class":162}," Array",[149,89619,14155],{"class":155},[149,89621,89622],{"class":151,"line":3498},[149,89623,89624],{"class":295},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[149,89626,89627],{"class":151,"line":3503},[149,89628,89629],{"class":295},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[149,89631,89632,89635,89637],{"class":151,"line":4296},[149,89633,89634],{"class":155},"          newObj[k] ",[149,89636,166],{"class":325},[149,89638,53537],{"class":155},[149,89640,89641,89644],{"class":151,"line":4310},[149,89642,89643],{"class":162},"          deepCopy",[149,89645,89646],{"class":155},"(newObj[k], oldObj[k])\n",[149,89648,89649,89651,89653,89655,89657,89659,89662],{"class":151,"line":4318},[149,89650,81761],{"class":155},[149,89652,3421],{"class":325},[149,89654,3424],{"class":325},[149,89656,89611],{"class":155},[149,89658,89614],{"class":325},[149,89660,89661],{"class":162}," Object",[149,89663,14155],{"class":155},[149,89665,89666,89668,89670],{"class":151,"line":4323},[149,89667,89634],{"class":155},[149,89669,166],{"class":325},[149,89671,89549],{"class":155},[149,89673,89674,89676],{"class":151,"line":4329},[149,89675,89643],{"class":162},[149,89677,89646],{"class":155},[149,89679,89680,89682,89684],{"class":151,"line":4335},[149,89681,81761],{"class":155},[149,89683,3421],{"class":325},[149,89685,304],{"class":155},[149,89687,89688],{"class":151,"line":4340},[149,89689,89690],{"class":295},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[149,89692,89693],{"class":151,"line":9663},[149,89694,89695],{"class":295},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[149,89697,89698,89700,89702],{"class":151,"line":9687},[149,89699,89634],{"class":155},[149,89701,166],{"class":325},[149,89703,89704],{"class":155}," oldObj[k]\n",[149,89706,89707],{"class":151,"line":9692},[149,89708,4248],{"class":155},[149,89710,89711],{"class":151,"line":9698},[149,89712,54096],{"class":155},[149,89714,89715],{"class":151,"line":9725},[149,89716,3906],{"class":155},[149,89718,89719,89722,89725],{"class":151,"line":9730},[149,89720,89721],{"class":162},"    deepCopy",[149,89723,89724],{"class":155},"(o, obj) ",[149,89726,89727],{"class":295},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[149,89729,89730,89732,89734],{"class":151,"line":9736},[149,89731,75435],{"class":155},[149,89733,59938],{"class":162},[149,89735,89736],{"class":155},"(o)\n",[149,89738,89739,89742,89744],{"class":151,"line":9748},[149,89740,89741],{"class":155},"    o.age ",[149,89743,166],{"class":325},[149,89745,89746],{"class":309}," 20\n",[149,89748,89749,89752,89754,89756,89758],{"class":151,"line":9760},[149,89750,89751],{"class":155},"    o.hobby[",[149,89753,2056],{"class":309},[149,89755,6161],{"class":155},[149,89757,166],{"class":325},[149,89759,89760],{"class":169}," '篮球'\n",[149,89762,89763,89766,89768],{"class":151,"line":9772},[149,89764,89765],{"class":155},"    o.family ",[149,89767,166],{"class":325},[149,89769,89770],{"class":169}," '老pink'\n",[149,89772,89773,89775,89777],{"class":151,"line":11430},[149,89774,75435],{"class":155},[149,89776,59938],{"class":162},[149,89778,71720],{"class":155},[149,89780,89781,89783,89785],{"class":151,"line":11455},[149,89782,54115],{"class":155},[149,89784,53512],{"class":159},[149,89786,190],{"class":155},[149,89788,89789,89791,89793],{"class":151,"line":11478},[149,89790,665],{"class":155},[149,89792,53499],{"class":159},[149,89794,190],{"class":155},[149,89796,89797],{"class":151,"line":11502},[149,89798,4119],{"emptyLinePlaceholder":1800},[149,89800,89801,89803,89805],{"class":151,"line":11507},[149,89802,665],{"class":155},[149,89804,52341],{"class":159},[149,89806,190],{"class":155},[24,89808,89809],{},[83,89810],{"alt":145,"src":89811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[120,89813,89815,89816],{"id":89814},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[31,89817,89818],{},"js库lodash里面cloneDeep内部实现了深拷贝",[24,89820,89821],{},[2102,89822,89823],{"href":89823,"rel":89824},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25573],[24,89826,89827],{},"lodash里边的方法都要加上一个下划线_",[24,89829,89830],{},"_.cloneDeep()",[140,89832,89834],{"className":52339,"code":89833,"language":52341,"meta":145,"style":145},"\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",[48,89835,89836,89846,89860,89864,89872,89886,89906,89918,89926,89930,89938,89943,89962,89970,89980,89988,89996,90008,90012,90018,90022,90026,90042,90050,90059,90067,90075,90083,90087],{"__ignoreMap":145},[149,89837,89838,89840,89842,89844],{"class":151,"line":152},[149,89839,53003],{"class":155},[149,89841,53006],{"class":159},[149,89843,53009],{"class":162},[149,89845,190],{"class":155},[149,89847,89848,89850,89852,89854,89856,89858],{"class":151,"line":193},[149,89849,156],{"class":155},[149,89851,52341],{"class":159},[149,89853,53020],{"class":162},[149,89855,166],{"class":155},[149,89857,53025],{"class":169},[149,89859,190],{"class":155},[149,89861,89862],{"class":151,"line":235},[149,89863,4119],{"emptyLinePlaceholder":1800},[149,89865,89866,89868,89870],{"class":151,"line":340},[149,89867,156],{"class":155},[149,89869,53038],{"class":159},[149,89871,190],{"class":155},[149,89873,89874,89876,89878,89880,89882,89884],{"class":151,"line":346},[149,89875,587],{"class":155},[149,89877,53048],{"class":159},[149,89879,53051],{"class":162},[149,89881,166],{"class":155},[149,89883,53056],{"class":169},[149,89885,190],{"class":155},[149,89887,89888,89890,89892,89894,89896,89898,89900,89902,89904],{"class":151,"line":352},[149,89889,587],{"class":155},[149,89891,53048],{"class":159},[149,89893,515],{"class":162},[149,89895,166],{"class":155},[149,89897,53095],{"class":169},[149,89899,53075],{"class":162},[149,89901,166],{"class":155},[149,89903,53102],{"class":169},[149,89905,190],{"class":155},[149,89907,89908,89910,89912,89914,89916],{"class":151,"line":1021},[149,89909,587],{"class":155},[149,89911,53111],{"class":159},[149,89913,53114],{"class":155},[149,89915,53111],{"class":159},[149,89917,190],{"class":155},[149,89919,89920,89922,89924],{"class":151,"line":1035},[149,89921,665],{"class":155},[149,89923,53038],{"class":159},[149,89925,190],{"class":155},[149,89927,89928],{"class":151,"line":1054},[149,89929,4119],{"emptyLinePlaceholder":1800},[149,89931,89932,89934,89936],{"class":151,"line":1072},[149,89933,156],{"class":155},[149,89935,53499],{"class":159},[149,89937,190],{"class":155},[149,89939,89940],{"class":151,"line":1090},[149,89941,89942],{"class":295},"  \u003C!-- 先引用这个库 -->\n",[149,89944,89945,89947,89949,89951,89953,89956,89958,89960],{"class":151,"line":1633},[149,89946,587],{"class":155},[149,89948,53512],{"class":159},[149,89950,163],{"class":162},[149,89952,166],{"class":155},[149,89954,89955],{"class":169},"\"lodash.min.js\"",[149,89957,185],{"class":155},[149,89959,53512],{"class":159},[149,89961,190],{"class":155},[149,89963,89964,89966,89968],{"class":151,"line":1644},[149,89965,587],{"class":155},[149,89967,53512],{"class":159},[149,89969,190],{"class":155},[149,89971,89972,89974,89976,89978],{"class":151,"line":3348},[149,89973,12935],{"class":325},[149,89975,71655],{"class":309},[149,89977,15277],{"class":325},[149,89979,304],{"class":155},[149,89981,89982,89984,89986],{"class":151,"line":3362},[149,89983,73298],{"class":155},[149,89985,89491],{"class":169},[149,89987,33172],{"class":155},[149,89989,89990,89992,89994],{"class":151,"line":3367},[149,89991,73308],{"class":155},[149,89993,2513],{"class":309},[149,89995,33172],{"class":155},[149,89997,89998,90000,90002,90004,90006],{"class":151,"line":3373},[149,89999,89506],{"class":155},[149,90001,89509],{"class":169},[149,90003,329],{"class":155},[149,90005,89514],{"class":169},[149,90007,89517],{"class":155},[149,90009,90010],{"class":151,"line":3394},[149,90011,79554],{"class":155},[149,90013,90014,90016],{"class":151,"line":3399},[149,90015,89526],{"class":155},[149,90017,89529],{"class":169},[149,90019,90020],{"class":151,"line":3413},[149,90021,54096],{"class":155},[149,90023,90024],{"class":151,"line":3418},[149,90025,3906],{"class":155},[149,90027,90028,90030,90032,90034,90037,90040],{"class":151,"line":3447},[149,90029,12935],{"class":325},[149,90031,89544],{"class":309},[149,90033,15277],{"class":325},[149,90035,90036],{"class":155}," _.",[149,90038,90039],{"class":162},"cloneDeep",[149,90041,71720],{"class":155},[149,90043,90044,90046,90048],{"class":151,"line":3452},[149,90045,75435],{"class":155},[149,90047,59938],{"class":162},[149,90049,89736],{"class":155},[149,90051,90052,90055,90057],{"class":151,"line":3469},[149,90053,90054],{"class":155},"    o.family.baby ",[149,90056,166],{"class":325},[149,90058,89770],{"class":169},[149,90060,90061,90063,90065],{"class":151,"line":3474},[149,90062,75435],{"class":155},[149,90064,59938],{"class":162},[149,90066,71720],{"class":155},[149,90068,90069,90071,90073],{"class":151,"line":3479},[149,90070,54115],{"class":155},[149,90072,53512],{"class":159},[149,90074,190],{"class":155},[149,90076,90077,90079,90081],{"class":151,"line":3484},[149,90078,665],{"class":155},[149,90080,53499],{"class":159},[149,90082,190],{"class":155},[149,90084,90085],{"class":151,"line":3498},[149,90086,4119],{"emptyLinePlaceholder":1800},[149,90088,90089,90091,90093],{"class":151,"line":3503},[149,90090,665],{"class":155},[149,90092,52341],{"class":159},[149,90094,190],{"class":155},[24,90096,90097],{},[83,90098],{"alt":145,"src":90099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[120,90101,90103],{"id":90102},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[140,90105,90107],{"className":52339,"code":90106,"language":52341,"meta":145,"style":145},"\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",[48,90108,90109,90119,90133,90137,90145,90159,90179,90191,90199,90203,90211,90219,90229,90237,90245,90257,90261,90267,90271,90275,90280,90285,90290,90316,90324,90333,90341,90349,90357,90361],{"__ignoreMap":145},[149,90110,90111,90113,90115,90117],{"class":151,"line":152},[149,90112,53003],{"class":155},[149,90114,53006],{"class":159},[149,90116,53009],{"class":162},[149,90118,190],{"class":155},[149,90120,90121,90123,90125,90127,90129,90131],{"class":151,"line":193},[149,90122,156],{"class":155},[149,90124,52341],{"class":159},[149,90126,53020],{"class":162},[149,90128,166],{"class":155},[149,90130,53025],{"class":169},[149,90132,190],{"class":155},[149,90134,90135],{"class":151,"line":235},[149,90136,4119],{"emptyLinePlaceholder":1800},[149,90138,90139,90141,90143],{"class":151,"line":340},[149,90140,156],{"class":155},[149,90142,53038],{"class":159},[149,90144,190],{"class":155},[149,90146,90147,90149,90151,90153,90155,90157],{"class":151,"line":346},[149,90148,587],{"class":155},[149,90150,53048],{"class":159},[149,90152,53051],{"class":162},[149,90154,166],{"class":155},[149,90156,53056],{"class":169},[149,90158,190],{"class":155},[149,90160,90161,90163,90165,90167,90169,90171,90173,90175,90177],{"class":151,"line":352},[149,90162,587],{"class":155},[149,90164,53048],{"class":159},[149,90166,515],{"class":162},[149,90168,166],{"class":155},[149,90170,53095],{"class":169},[149,90172,53075],{"class":162},[149,90174,166],{"class":155},[149,90176,53102],{"class":169},[149,90178,190],{"class":155},[149,90180,90181,90183,90185,90187,90189],{"class":151,"line":1021},[149,90182,587],{"class":155},[149,90184,53111],{"class":159},[149,90186,53114],{"class":155},[149,90188,53111],{"class":159},[149,90190,190],{"class":155},[149,90192,90193,90195,90197],{"class":151,"line":1035},[149,90194,665],{"class":155},[149,90196,53038],{"class":159},[149,90198,190],{"class":155},[149,90200,90201],{"class":151,"line":1054},[149,90202,4119],{"emptyLinePlaceholder":1800},[149,90204,90205,90207,90209],{"class":151,"line":1072},[149,90206,156],{"class":155},[149,90208,53499],{"class":159},[149,90210,190],{"class":155},[149,90212,90213,90215,90217],{"class":151,"line":1090},[149,90214,587],{"class":155},[149,90216,53512],{"class":159},[149,90218,190],{"class":155},[149,90220,90221,90223,90225,90227],{"class":151,"line":1633},[149,90222,12935],{"class":325},[149,90224,71655],{"class":309},[149,90226,15277],{"class":325},[149,90228,304],{"class":155},[149,90230,90231,90233,90235],{"class":151,"line":1644},[149,90232,73298],{"class":155},[149,90234,89491],{"class":169},[149,90236,33172],{"class":155},[149,90238,90239,90241,90243],{"class":151,"line":3348},[149,90240,73308],{"class":155},[149,90242,2513],{"class":309},[149,90244,33172],{"class":155},[149,90246,90247,90249,90251,90253,90255],{"class":151,"line":3362},[149,90248,89506],{"class":155},[149,90250,89509],{"class":169},[149,90252,329],{"class":155},[149,90254,89514],{"class":169},[149,90256,89517],{"class":155},[149,90258,90259],{"class":151,"line":3367},[149,90260,79554],{"class":155},[149,90262,90263,90265],{"class":151,"line":3373},[149,90264,89526],{"class":155},[149,90266,89529],{"class":169},[149,90268,90269],{"class":151,"line":3394},[149,90270,54096],{"class":155},[149,90272,90273],{"class":151,"line":3399},[149,90274,3906],{"class":155},[149,90276,90277],{"class":151,"line":3413},[149,90278,90279],{"class":295},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[149,90281,90282],{"class":151,"line":3418},[149,90283,90284],{"class":295},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[149,90286,90287],{"class":151,"line":3447},[149,90288,90289],{"class":295},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[149,90291,90292,90294,90296,90298,90301,90303,90306,90308,90310,90312,90314],{"class":151,"line":3452},[149,90293,12935],{"class":325},[149,90295,89544],{"class":309},[149,90297,15277],{"class":325},[149,90299,90300],{"class":309}," JSON",[149,90302,2421],{"class":155},[149,90304,90305],{"class":162},"parse",[149,90307,319],{"class":155},[149,90309,73346],{"class":309},[149,90311,2421],{"class":155},[149,90313,73351],{"class":162},[149,90315,73354],{"class":155},[149,90317,90318,90320,90322],{"class":151,"line":3469},[149,90319,75435],{"class":155},[149,90321,59938],{"class":162},[149,90323,89736],{"class":155},[149,90325,90326,90328,90330],{"class":151,"line":3474},[149,90327,90054],{"class":155},[149,90329,166],{"class":325},[149,90331,90332],{"class":169}," '123'\n",[149,90334,90335,90337,90339],{"class":151,"line":3479},[149,90336,75435],{"class":155},[149,90338,59938],{"class":162},[149,90340,71720],{"class":155},[149,90342,90343,90345,90347],{"class":151,"line":3484},[149,90344,54115],{"class":155},[149,90346,53512],{"class":159},[149,90348,190],{"class":155},[149,90350,90351,90353,90355],{"class":151,"line":3498},[149,90352,665],{"class":155},[149,90354,53499],{"class":159},[149,90356,190],{"class":155},[149,90358,90359],{"class":151,"line":3503},[149,90360,4119],{"emptyLinePlaceholder":1800},[149,90362,90363,90365,90367],{"class":151,"line":4296},[149,90364,665],{"class":155},[149,90366,52341],{"class":159},[149,90368,190],{"class":155},[24,90370,90371],{},[83,90372],{"alt":145,"src":90373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90375,90377],{"id":90376},"_415-异常处理","4.15 异常处理",[125,90379,90380],{},[45,90381,90382],{},"throw抛异常",[24,90384,90385],{},[83,90386],{"alt":145,"src":90387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[125,90389,90390],{"start":193},[45,90391,90392],{},"try\u002Fcatch 捕获错误信息",[24,90394,90395],{},[83,90396],{"alt":145,"src":90397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[140,90399,90401],{"className":52339,"code":90400,"language":52341,"meta":145,"style":145},"\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",[48,90402,90403,90413,90427,90431,90439,90453,90473,90485,90493,90497,90505,90517,90525,90534,90541,90546,90565,90574,90585,90590,90600,90605,90610,90615,90632,90636,90641,90648,90660,90664,90676,90680,90684,90689,90694,90701,90709,90717,90721],{"__ignoreMap":145},[149,90404,90405,90407,90409,90411],{"class":151,"line":152},[149,90406,53003],{"class":155},[149,90408,53006],{"class":159},[149,90410,53009],{"class":162},[149,90412,190],{"class":155},[149,90414,90415,90417,90419,90421,90423,90425],{"class":151,"line":193},[149,90416,156],{"class":155},[149,90418,52341],{"class":159},[149,90420,53020],{"class":162},[149,90422,166],{"class":155},[149,90424,53025],{"class":169},[149,90426,190],{"class":155},[149,90428,90429],{"class":151,"line":235},[149,90430,4119],{"emptyLinePlaceholder":1800},[149,90432,90433,90435,90437],{"class":151,"line":340},[149,90434,156],{"class":155},[149,90436,53038],{"class":159},[149,90438,190],{"class":155},[149,90440,90441,90443,90445,90447,90449,90451],{"class":151,"line":346},[149,90442,587],{"class":155},[149,90444,53048],{"class":159},[149,90446,53051],{"class":162},[149,90448,166],{"class":155},[149,90450,53056],{"class":169},[149,90452,190],{"class":155},[149,90454,90455,90457,90459,90461,90463,90465,90467,90469,90471],{"class":151,"line":352},[149,90456,587],{"class":155},[149,90458,53048],{"class":159},[149,90460,515],{"class":162},[149,90462,166],{"class":155},[149,90464,53095],{"class":169},[149,90466,53075],{"class":162},[149,90468,166],{"class":155},[149,90470,53102],{"class":169},[149,90472,190],{"class":155},[149,90474,90475,90477,90479,90481,90483],{"class":151,"line":1021},[149,90476,587],{"class":155},[149,90478,53111],{"class":159},[149,90480,53114],{"class":155},[149,90482,53111],{"class":159},[149,90484,190],{"class":155},[149,90486,90487,90489,90491],{"class":151,"line":1035},[149,90488,665],{"class":155},[149,90490,53038],{"class":159},[149,90492,190],{"class":155},[149,90494,90495],{"class":151,"line":1054},[149,90496,4119],{"emptyLinePlaceholder":1800},[149,90498,90499,90501,90503],{"class":151,"line":1072},[149,90500,156],{"class":155},[149,90502,53499],{"class":159},[149,90504,190],{"class":155},[149,90506,90507,90509,90511,90513,90515],{"class":151,"line":1090},[149,90508,587],{"class":155},[149,90510,24],{"class":159},[149,90512,55192],{"class":155},[149,90514,24],{"class":159},[149,90516,190],{"class":155},[149,90518,90519,90521,90523],{"class":151,"line":1633},[149,90520,587],{"class":155},[149,90522,53512],{"class":159},[149,90524,190],{"class":155},[149,90526,90527,90529,90532],{"class":151,"line":1644},[149,90528,71768],{"class":325},[149,90530,90531],{"class":162}," fn",[149,90533,12567],{"class":155},[149,90535,90536,90539],{"class":151,"line":3348},[149,90537,90538],{"class":325},"      try",[149,90540,304],{"class":155},[149,90542,90543],{"class":151,"line":3362},[149,90544,90545],{"class":295},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[149,90547,90548,90550,90552,90554,90556,90558,90560,90563],{"class":151,"line":3367},[149,90549,62959],{"class":325},[149,90551,8541],{"class":309},[149,90553,15277],{"class":325},[149,90555,56091],{"class":155},[149,90557,56094],{"class":162},[149,90559,319],{"class":155},[149,90561,90562],{"class":169},"'.p'",[149,90564,1878],{"class":155},[149,90566,90567,90570,90572],{"class":151,"line":3373},[149,90568,90569],{"class":155},"        p.style.color ",[149,90571,166],{"class":325},[149,90573,68735],{"class":169},[149,90575,90576,90579,90582],{"class":151,"line":3394},[149,90577,90578],{"class":155},"      } ",[149,90580,90581],{"class":325},"catch",[149,90583,90584],{"class":155}," (err) {\n",[149,90586,90587],{"class":151,"line":3399},[149,90588,90589],{"class":295},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[149,90591,90592,90595,90597],{"class":151,"line":3413},[149,90593,90594],{"class":155},"        console.",[149,90596,59938],{"class":162},[149,90598,90599],{"class":155},"(err.message)\n",[149,90601,90602],{"class":151,"line":3418},[149,90603,90604],{"class":295},"        \u002F\u002F 想要中断程序，需要加return\n",[149,90606,90607],{"class":151,"line":3447},[149,90608,90609],{"class":295},"        \u002F\u002F return\n",[149,90611,90612],{"class":151,"line":3452},[149,90613,90614],{"class":295},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[149,90616,90617,90620,90622,90625,90627,90630],{"class":151,"line":3469},[149,90618,90619],{"class":325},"        throw",[149,90621,13292],{"class":325},[149,90623,90624],{"class":162}," Error",[149,90626,319],{"class":155},[149,90628,90629],{"class":169},"'你看看，选择器错误了吧'",[149,90631,1878],{"class":155},[149,90633,90634],{"class":151,"line":3474},[149,90635,54096],{"class":155},[149,90637,90638],{"class":151,"line":3479},[149,90639,90640],{"class":295},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[149,90642,90643,90646],{"class":151,"line":3484},[149,90644,90645],{"class":325},"      finally",[149,90647,304],{"class":155},[149,90649,90650,90653,90655,90658],{"class":151,"line":3498},[149,90651,90652],{"class":162},"        alert",[149,90654,319],{"class":155},[149,90656,90657],{"class":169},"'弹出对话框'",[149,90659,1878],{"class":155},[149,90661,90662],{"class":151,"line":3503},[149,90663,54096],{"class":155},[149,90665,90666,90668,90670,90672,90674],{"class":151,"line":4296},[149,90667,59935],{"class":155},[149,90669,59938],{"class":162},[149,90671,319],{"class":155},[149,90673,2335],{"class":309},[149,90675,1878],{"class":155},[149,90677,90678],{"class":151,"line":4310},[149,90679,4119],{"emptyLinePlaceholder":1800},[149,90681,90682],{"class":151,"line":4318},[149,90683,3906],{"class":155},[149,90685,90686],{"class":151,"line":4323},[149,90687,90688],{"class":295},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[149,90690,90691],{"class":151,"line":4329},[149,90692,90693],{"class":295},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[149,90695,90696,90699],{"class":151,"line":4335},[149,90697,90698],{"class":162},"    fn",[149,90700,3695],{"class":155},[149,90702,90703,90705,90707],{"class":151,"line":4340},[149,90704,54115],{"class":155},[149,90706,53512],{"class":159},[149,90708,190],{"class":155},[149,90710,90711,90713,90715],{"class":151,"line":9663},[149,90712,665],{"class":155},[149,90714,53499],{"class":159},[149,90716,190],{"class":155},[149,90718,90719],{"class":151,"line":9687},[149,90720,4119],{"emptyLinePlaceholder":1800},[149,90722,90723,90725,90727],{"class":151,"line":9692},[149,90724,665],{"class":155},[149,90726,52341],{"class":159},[149,90728,190],{"class":155},[24,90730,90731],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[125,90733,90734],{"start":235},[45,90735,90736],{},"debugger",[24,90738,90739],{},[83,90740],{"alt":145,"src":90741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[24,90743,90744],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90746,90748],{"id":90747},"_416-处理this","4.16 处理this",[19,90750,90752],{"id":90751},"_4161-this的指向","4.16.1 this的指向",[125,90754,90755],{},[45,90756,90757],{},"普通函数的this",[24,90759,90760],{},[83,90761],{"alt":145,"src":90762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[125,90764,90765],{"start":193},[45,90766,90767],{},"箭头函数的this",[24,90769,90770],{},[83,90771],{"alt":145,"src":90772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[24,90774,90775],{},[83,90776],{"alt":145,"src":90777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[24,90779,90780],{},[83,90781],{"alt":145,"src":90782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[19,90784,90786],{"id":90785},"_4162-this的改变","4.16.2 this的改变",[24,90788,90789],{},"call() apply() bind()",[125,90791,90792],{},[45,90793,90794],{},"call()",[24,90796,90797],{},[83,90798],{"alt":145,"src":90799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[24,90801,90802],{},"两个作用：①调用函数；②改变this指向",[140,90804,90806],{"className":54765,"code":90805,"language":54767,"meta":145,"style":145},"\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",[48,90807,90808,90816,90824,90828,90833,90837,90842,90847,90852,90856,90861,90869],{"__ignoreMap":145},[149,90809,90810,90812,90814],{"class":151,"line":152},[149,90811,156],{"class":155},[149,90813,53499],{"class":159},[149,90815,190],{"class":155},[149,90817,90818,90820,90822],{"class":151,"line":193},[149,90819,587],{"class":155},[149,90821,53512],{"class":159},[149,90823,190],{"class":155},[149,90825,90826],{"class":151,"line":235},[149,90827,73205],{"class":155},[149,90829,90830],{"class":151,"line":340},[149,90831,90832],{"class":155},"      uname: 'pink'\n",[149,90834,90835],{"class":151,"line":346},[149,90836,3906],{"class":155},[149,90838,90839],{"class":151,"line":352},[149,90840,90841],{"class":155},"    function fn(x, y) {\n",[149,90843,90844],{"class":151,"line":1021},[149,90845,90846],{"class":155},"      console.log(this)  \u002F\u002Fwindow\n",[149,90848,90849],{"class":151,"line":1035},[149,90850,90851],{"class":155},"      console.log(x + y)\n",[149,90853,90854],{"class":151,"line":1054},[149,90855,3906],{"class":155},[149,90857,90858],{"class":151,"line":1072},[149,90859,90860],{"class":155},"    fn.call(obj, 1, 2)\n",[149,90862,90863,90865,90867],{"class":151,"line":1090},[149,90864,54115],{"class":155},[149,90866,53512],{"class":159},[149,90868,190],{"class":155},[149,90870,90871,90873,90875],{"class":151,"line":1633},[149,90872,665],{"class":155},[149,90874,53499],{"class":159},[149,90876,190],{"class":155},[24,90878,90879],{},[83,90880],{"alt":145,"src":90881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[125,90883,90884],{"start":193},[45,90885,90886],{},"apply()",[24,90888,90889],{},[83,90890],{"alt":145,"src":90891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[24,90893,90802],{},[24,90895,90896],{},"call传递的是普通参数，而apply必须传递的是数组",[140,90898,90900],{"className":52339,"code":90899,"language":52341,"meta":145,"style":145},"\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",[48,90901,90902,90912,90926,90930,90938,90952,90972,90984,90992,90996,91004,91012,91022,91029,91033,91038,91054,91066,91080,91084,91089,91108,91113,91117,91122,91127,91135,91140,91162,91167,91183,91199,91211,91215,91220,91239,91247,91255,91259],{"__ignoreMap":145},[149,90903,90904,90906,90908,90910],{"class":151,"line":152},[149,90905,53003],{"class":155},[149,90907,53006],{"class":159},[149,90909,53009],{"class":162},[149,90911,190],{"class":155},[149,90913,90914,90916,90918,90920,90922,90924],{"class":151,"line":193},[149,90915,156],{"class":155},[149,90917,52341],{"class":159},[149,90919,53020],{"class":162},[149,90921,166],{"class":155},[149,90923,53025],{"class":169},[149,90925,190],{"class":155},[149,90927,90928],{"class":151,"line":235},[149,90929,4119],{"emptyLinePlaceholder":1800},[149,90931,90932,90934,90936],{"class":151,"line":340},[149,90933,156],{"class":155},[149,90935,53038],{"class":159},[149,90937,190],{"class":155},[149,90939,90940,90942,90944,90946,90948,90950],{"class":151,"line":346},[149,90941,587],{"class":155},[149,90943,53048],{"class":159},[149,90945,53051],{"class":162},[149,90947,166],{"class":155},[149,90949,53056],{"class":169},[149,90951,190],{"class":155},[149,90953,90954,90956,90958,90960,90962,90964,90966,90968,90970],{"class":151,"line":352},[149,90955,587],{"class":155},[149,90957,53048],{"class":159},[149,90959,515],{"class":162},[149,90961,166],{"class":155},[149,90963,53095],{"class":169},[149,90965,53075],{"class":162},[149,90967,166],{"class":155},[149,90969,53102],{"class":169},[149,90971,190],{"class":155},[149,90973,90974,90976,90978,90980,90982],{"class":151,"line":1021},[149,90975,587],{"class":155},[149,90977,53111],{"class":159},[149,90979,53114],{"class":155},[149,90981,53111],{"class":159},[149,90983,190],{"class":155},[149,90985,90986,90988,90990],{"class":151,"line":1035},[149,90987,665],{"class":155},[149,90989,53038],{"class":159},[149,90991,190],{"class":155},[149,90993,90994],{"class":151,"line":1054},[149,90995,4119],{"emptyLinePlaceholder":1800},[149,90997,90998,91000,91002],{"class":151,"line":1072},[149,90999,156],{"class":155},[149,91001,53499],{"class":159},[149,91003,190],{"class":155},[149,91005,91006,91008,91010],{"class":151,"line":1090},[149,91007,587],{"class":155},[149,91009,53512],{"class":159},[149,91011,190],{"class":155},[149,91013,91014,91016,91018,91020],{"class":151,"line":1633},[149,91015,12935],{"class":325},[149,91017,71655],{"class":309},[149,91019,15277],{"class":325},[149,91021,304],{"class":155},[149,91023,91024,91026],{"class":151,"line":1644},[149,91025,73308],{"class":155},[149,91027,91028],{"class":309},"18\n",[149,91030,91031],{"class":151,"line":3348},[149,91032,3906],{"class":155},[149,91034,91035],{"class":151,"line":3362},[149,91036,91037],{"class":295},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[149,91039,91040,91042,91044,91046,91048,91050,91052],{"class":151,"line":3367},[149,91041,71768],{"class":325},[149,91043,90531],{"class":162},[149,91045,319],{"class":155},[149,91047,2681],{"class":6932},[149,91049,329],{"class":155},[149,91051,2706],{"class":6932},[149,91053,14155],{"class":155},[149,91055,91056,91058,91060,91062,91064],{"class":151,"line":3373},[149,91057,59935],{"class":155},[149,91059,59938],{"class":162},[149,91061,319],{"class":155},[149,91063,88674],{"class":309},[149,91065,1878],{"class":155},[149,91067,91068,91070,91072,91075,91077],{"class":151,"line":3394},[149,91069,59935],{"class":155},[149,91071,59938],{"class":162},[149,91073,91074],{"class":155},"(x ",[149,91076,2344],{"class":325},[149,91078,91079],{"class":155}," y)\n",[149,91081,91082],{"class":151,"line":3399},[149,91083,3906],{"class":155},[149,91085,91086],{"class":151,"line":3413},[149,91087,91088],{"class":295},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[149,91090,91091,91094,91097,91100,91102,91104,91106],{"class":151,"line":3418},[149,91092,91093],{"class":155},"    fn.",[149,91095,91096],{"class":162},"apply",[149,91098,91099],{"class":155},"(obj, [",[149,91101,830],{"class":309},[149,91103,329],{"class":155},[149,91105,1045],{"class":309},[149,91107,6375],{"class":155},[149,91109,91110],{"class":151,"line":3447},[149,91111,91112],{"class":295},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[149,91114,91115],{"class":151,"line":3452},[149,91116,4119],{"emptyLinePlaceholder":1800},[149,91118,91119],{"class":151,"line":3469},[149,91120,91121],{"class":295},"    \u002F\u002F 使用场景：求数组最大值\n",[149,91123,91124],{"class":151,"line":3474},[149,91125,91126],{"class":295},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[149,91128,91129,91132],{"class":151,"line":3479},[149,91130,91131],{"class":295},"    \u002F\u002F console.log(max)",[149,91133,91134],{"class":295},"   \u002F\u002F3\n",[149,91136,91137],{"class":151,"line":3484},[149,91138,91139],{"class":295},"    \u002F\u002F 指向空或者Math都是可以的\n",[149,91141,91142,91144,91146,91148,91150,91152,91154,91156,91158,91160],{"class":151,"line":3498},[149,91143,12935],{"class":325},[149,91145,59386],{"class":309},[149,91147,15277],{"class":325},[149,91149,53924],{"class":155},[149,91151,322],{"class":309},[149,91153,329],{"class":155},[149,91155,2367],{"class":309},[149,91157,329],{"class":155},[149,91159,2398],{"class":309},[149,91161,34952],{"class":155},[149,91163,91164],{"class":151,"line":3503},[149,91165,91166],{"class":295},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[149,91168,91169,91171,91173,91175,91178,91180],{"class":151,"line":4296},[149,91170,12935],{"class":325},[149,91172,7667],{"class":309},[149,91174,15277],{"class":325},[149,91176,91177],{"class":155}," Math.max.",[149,91179,91096],{"class":162},[149,91181,91182],{"class":155},"(Math, arr)\n",[149,91184,91185,91187,91190,91192,91195,91197],{"class":151,"line":4310},[149,91186,12935],{"class":325},[149,91188,91189],{"class":309}," min",[149,91191,15277],{"class":325},[149,91193,91194],{"class":155}," Math.min.",[149,91196,91096],{"class":162},[149,91198,91182],{"class":155},[149,91200,91201,91203,91205,91208],{"class":151,"line":4318},[149,91202,75435],{"class":155},[149,91204,59938],{"class":162},[149,91206,91207],{"class":155},"(max, min)     ",[149,91209,91210],{"class":295},"\u002F\u002F100,4\n",[149,91212,91213],{"class":151,"line":4323},[149,91214,4119],{"emptyLinePlaceholder":1800},[149,91216,91217],{"class":151,"line":4329},[149,91218,91219],{"class":295},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[149,91221,91222,91224,91226,91229,91231,91233,91236],{"class":151,"line":4335},[149,91223,75435],{"class":155},[149,91225,59938],{"class":162},[149,91227,91228],{"class":155},"(Max.",[149,91230,7731],{"class":162},[149,91232,319],{"class":155},[149,91234,91235],{"class":325},"...",[149,91237,91238],{"class":155},"arr))\n",[149,91240,91241,91243,91245],{"class":151,"line":4340},[149,91242,54115],{"class":155},[149,91244,53512],{"class":159},[149,91246,190],{"class":155},[149,91248,91249,91251,91253],{"class":151,"line":9663},[149,91250,665],{"class":155},[149,91252,53499],{"class":159},[149,91254,190],{"class":155},[149,91256,91257],{"class":151,"line":9687},[149,91258,4119],{"emptyLinePlaceholder":1800},[149,91260,91261,91263,91265],{"class":151,"line":9692},[149,91262,665],{"class":155},[149,91264,52341],{"class":159},[149,91266,190],{"class":155},[24,91268,91269],{},[83,91270],{"alt":145,"src":91271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[125,91273,91274],{"start":235},[45,91275,91276],{},"bind()",[24,91278,91279],{},[83,91280],{"alt":145,"src":91281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[24,91283,91284],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[24,91286,91287],{},"bind的语法跟call很相似",[140,91289,91291],{"className":54765,"code":91290,"language":54767,"meta":145,"style":145},"\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",[48,91292,91293,91301,91309,91313,91318,91322,91326,91331,91335,91340,91345,91350,91355,91360,91365,91370,91374,91382],{"__ignoreMap":145},[149,91294,91295,91297,91299],{"class":151,"line":152},[149,91296,156],{"class":155},[149,91298,53499],{"class":159},[149,91300,190],{"class":155},[149,91302,91303,91305,91307],{"class":151,"line":193},[149,91304,587],{"class":155},[149,91306,53512],{"class":159},[149,91308,190],{"class":155},[149,91310,91311],{"class":151,"line":235},[149,91312,73205],{"class":155},[149,91314,91315],{"class":151,"line":340},[149,91316,91317],{"class":155},"      age: 18\n",[149,91319,91320],{"class":151,"line":346},[149,91321,3906],{"class":155},[149,91323,91324],{"class":151,"line":352},[149,91325,78825],{"class":155},[149,91327,91328],{"class":151,"line":1021},[149,91329,91330],{"class":155},"      console.log(this)\n",[149,91332,91333],{"class":151,"line":1035},[149,91334,3906],{"class":155},[149,91336,91337],{"class":151,"line":1054},[149,91338,91339],{"class":155},"    \u002F\u002F 1.bind 不会调用函数\n",[149,91341,91342],{"class":151,"line":1072},[149,91343,91344],{"class":155},"    \u002F\u002F 2.bind能改变this的指向\n",[149,91346,91347],{"class":151,"line":1090},[149,91348,91349],{"class":155},"    fn.bind()\n",[149,91351,91352],{"class":151,"line":1633},[149,91353,91354],{"class":155},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[149,91356,91357],{"class":151,"line":1644},[149,91358,91359],{"class":155},"    const fun = fn.bind(obj)\n",[149,91361,91362],{"class":151,"line":3348},[149,91363,91364],{"class":155},"    \u002F\u002F console.log(fun)\n",[149,91366,91367],{"class":151,"line":3362},[149,91368,91369],{"class":155},"    \u002F\u002F 调用,查看this的指向\n",[149,91371,91372],{"class":151,"line":3367},[149,91373,54349],{"class":155},[149,91375,91376,91378,91380],{"class":151,"line":3373},[149,91377,54115],{"class":155},[149,91379,53512],{"class":159},[149,91381,190],{"class":155},[149,91383,91384,91386,91388],{"class":151,"line":3394},[149,91385,665],{"class":155},[149,91387,53499],{"class":159},[149,91389,190],{"class":155},[24,91391,91392],{},[83,91393],{"alt":145,"src":91394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[125,91396,91397],{"start":340},[45,91398,91399],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[140,91401,91403],{"className":54765,"code":91402,"language":54767,"meta":145,"style":145},"\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",[48,91404,91405,91413,91426,91434,91439,91443,91448,91453,91458,91463,91468,91473,91478,91483,91487,91495],{"__ignoreMap":145},[149,91406,91407,91409,91411],{"class":151,"line":152},[149,91408,156],{"class":155},[149,91410,53499],{"class":159},[149,91412,190],{"class":155},[149,91414,91415,91417,91419,91422,91424],{"class":151,"line":193},[149,91416,587],{"class":155},[149,91418,646],{"class":159},[149,91420,91421],{"class":155},">禁用\u003C\u002F",[149,91423,646],{"class":159},[149,91425,190],{"class":155},[149,91427,91428,91430,91432],{"class":151,"line":235},[149,91429,587],{"class":155},[149,91431,53512],{"class":159},[149,91433,190],{"class":155},[149,91435,91436],{"class":151,"line":340},[149,91437,91438],{"class":155},"    const btn = document.querySelector('button')\n",[149,91440,91441],{"class":151,"line":346},[149,91442,60707],{"class":155},[149,91444,91445],{"class":151,"line":352},[149,91446,91447],{"class":155},"      this.disabled = true\n",[149,91449,91450],{"class":151,"line":1021},[149,91451,91452],{"class":155},"      \u002F\u002F 定时器是window进行调用的\n",[149,91454,91455],{"class":151,"line":1035},[149,91456,91457],{"class":155},"      setTimeout(function () {\n",[149,91459,91460],{"class":151,"line":1054},[149,91461,91462],{"class":155},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[149,91464,91465],{"class":151,"line":1072},[149,91466,91467],{"class":155},"        this.disabled = false\n",[149,91469,91470],{"class":151,"line":1090},[149,91471,91472],{"class":155},"      }.bind(this), 2000)\n",[149,91474,91475],{"class":151,"line":1633},[149,91476,91477],{"class":155},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[149,91479,91480],{"class":151,"line":1644},[149,91481,91482],{"class":155},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[149,91484,91485],{"class":151,"line":3348},[149,91486,35167],{"class":155},[149,91488,91489,91491,91493],{"class":151,"line":3362},[149,91490,54115],{"class":155},[149,91492,53512],{"class":159},[149,91494,190],{"class":155},[149,91496,91497,91499,91501],{"class":151,"line":3367},[149,91498,665],{"class":155},[149,91500,53499],{"class":159},[149,91502,190],{"class":155},[125,91504,91505],{"start":346},[45,91506,23663],{},[24,91508,91509],{},[83,91510],{"alt":145,"src":91511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91513,91515],{"id":91514},"_417-性能优化","4.17 性能优化",[19,91517,91519],{"id":91518},"_4171-防抖","4.17.1 防抖",[24,91521,91522],{},[83,91523],{"alt":145,"src":91524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[24,91526,91527],{},[31,91528,91529],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[24,91531,91532],{},"防抖实现方式：",[42,91534,91535],{},[45,91536,91537],{},"lodash 提供了防抖处理",[24,91539,91540],{},"_.debounce(func,[wait=0],[options={}])",[24,91542,91543],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[140,91545,91547],{"className":52339,"code":91546,"language":52341,"meta":145,"style":145},"\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",[48,91548,91549,91559,91573,91577,91585,91599,91619,91631,91639,91645,91655,91667,91679,91690,91702,91712,91722,91735,91739,91747,91755,91759,91767,91785,91803,91811,91830,91840,91849,91860,91865,91869,91874,91879,91884,91909,91917,91925,91929],{"__ignoreMap":145},[149,91550,91551,91553,91555,91557],{"class":151,"line":152},[149,91552,53003],{"class":155},[149,91554,53006],{"class":159},[149,91556,53009],{"class":162},[149,91558,190],{"class":155},[149,91560,91561,91563,91565,91567,91569,91571],{"class":151,"line":193},[149,91562,156],{"class":155},[149,91564,52341],{"class":159},[149,91566,53020],{"class":162},[149,91568,166],{"class":155},[149,91570,53025],{"class":169},[149,91572,190],{"class":155},[149,91574,91575],{"class":151,"line":235},[149,91576,4119],{"emptyLinePlaceholder":1800},[149,91578,91579,91581,91583],{"class":151,"line":340},[149,91580,156],{"class":155},[149,91582,53038],{"class":159},[149,91584,190],{"class":155},[149,91586,91587,91589,91591,91593,91595,91597],{"class":151,"line":346},[149,91588,587],{"class":155},[149,91590,53048],{"class":159},[149,91592,53051],{"class":162},[149,91594,166],{"class":155},[149,91596,53056],{"class":169},[149,91598,190],{"class":155},[149,91600,91601,91603,91605,91607,91609,91611,91613,91615,91617],{"class":151,"line":352},[149,91602,587],{"class":155},[149,91604,53048],{"class":159},[149,91606,515],{"class":162},[149,91608,166],{"class":155},[149,91610,53095],{"class":169},[149,91612,53075],{"class":162},[149,91614,166],{"class":155},[149,91616,53102],{"class":169},[149,91618,190],{"class":155},[149,91620,91621,91623,91625,91627,91629],{"class":151,"line":1021},[149,91622,587],{"class":155},[149,91624,53111],{"class":159},[149,91626,53114],{"class":155},[149,91628,53111],{"class":159},[149,91630,190],{"class":155},[149,91632,91633,91635,91637],{"class":151,"line":1035},[149,91634,587],{"class":155},[149,91636,1783],{"class":159},[149,91638,190],{"class":155},[149,91640,91641,91643],{"class":151,"line":1054},[149,91642,56447],{"class":162},[149,91644,304],{"class":155},[149,91646,91647,91649,91651,91653],{"class":151,"line":1072},[149,91648,74278],{"class":309},[149,91650,313],{"class":155},[149,91652,62196],{"class":309},[149,91654,841],{"class":155},[149,91656,91657,91659,91661,91663,91665],{"class":151,"line":1090},[149,91658,56466],{"class":309},[149,91660,313],{"class":155},[149,91662,3442],{"class":309},[149,91664,326],{"class":325},[149,91666,841],{"class":155},[149,91668,91669,91671,91673,91675,91677],{"class":151,"line":1633},[149,91670,56480],{"class":309},[149,91672,313],{"class":155},[149,91674,3442],{"class":309},[149,91676,326],{"class":325},[149,91678,841],{"class":155},[149,91680,91681,91683,91685,91688],{"class":151,"line":1644},[149,91682,56579],{"class":309},[149,91684,313],{"class":155},[149,91686,91687],{"class":309},"gray",[149,91689,841],{"class":155},[149,91691,91692,91694,91696,91698,91700],{"class":151,"line":3348},[149,91693,56617],{"class":309},[149,91695,313],{"class":155},[149,91697,2686],{"class":309},[149,91699,326],{"class":325},[149,91701,841],{"class":155},[149,91703,91704,91706,91708,91710],{"class":151,"line":3362},[149,91705,59108],{"class":309},[149,91707,313],{"class":155},[149,91709,62533],{"class":309},[149,91711,841],{"class":155},[149,91713,91714,91716,91718,91720],{"class":151,"line":3367},[149,91715,58978],{"class":309},[149,91717,313],{"class":155},[149,91719,53293],{"class":309},[149,91721,841],{"class":155},[149,91723,91724,91727,91729,91731,91733],{"class":151,"line":3373},[149,91725,91726],{"class":309},"      padding-top",[149,91728,313],{"class":155},[149,91730,2182],{"class":309},[149,91732,326],{"class":325},[149,91734,841],{"class":155},[149,91736,91737],{"class":151,"line":3394},[149,91738,3906],{"class":155},[149,91740,91741,91743,91745],{"class":151,"line":3399},[149,91742,54115],{"class":155},[149,91744,1783],{"class":159},[149,91746,190],{"class":155},[149,91748,91749,91751,91753],{"class":151,"line":3413},[149,91750,665],{"class":155},[149,91752,53038],{"class":159},[149,91754,190],{"class":155},[149,91756,91757],{"class":151,"line":3418},[149,91758,4119],{"emptyLinePlaceholder":1800},[149,91760,91761,91763,91765],{"class":151,"line":3447},[149,91762,156],{"class":155},[149,91764,53499],{"class":159},[149,91766,190],{"class":155},[149,91768,91769,91771,91773,91775,91777,91779,91781,91783],{"class":151,"line":3452},[149,91770,587],{"class":155},[149,91772,301],{"class":159},[149,91774,55184],{"class":162},[149,91776,166],{"class":155},[149,91778,55189],{"class":169},[149,91780,185],{"class":155},[149,91782,301],{"class":159},[149,91784,190],{"class":155},[149,91786,91787,91789,91791,91793,91795,91797,91799,91801],{"class":151,"line":3469},[149,91788,587],{"class":155},[149,91790,53512],{"class":159},[149,91792,163],{"class":162},[149,91794,166],{"class":155},[149,91796,89955],{"class":169},[149,91798,185],{"class":155},[149,91800,53512],{"class":159},[149,91802,190],{"class":155},[149,91804,91805,91807,91809],{"class":151,"line":3474},[149,91806,587],{"class":155},[149,91808,53512],{"class":159},[149,91810,190],{"class":155},[149,91812,91813,91815,91817,91819,91821,91823,91825,91828],{"class":151,"line":3479},[149,91814,12935],{"class":325},[149,91816,88614],{"class":309},[149,91818,15277],{"class":325},[149,91820,56091],{"class":155},[149,91822,56094],{"class":162},[149,91824,319],{"class":155},[149,91826,91827],{"class":169},"'.box'",[149,91829,1878],{"class":155},[149,91831,91832,91834,91836,91838],{"class":151,"line":3484},[149,91833,53917],{"class":325},[149,91835,11152],{"class":155},[149,91837,166],{"class":325},[149,91839,49039],{"class":309},[149,91841,91842,91844,91847],{"class":151,"line":3498},[149,91843,71768],{"class":325},[149,91845,91846],{"class":162}," mouseMove",[149,91848,12567],{"class":155},[149,91850,91851,91854,91856,91858],{"class":151,"line":3503},[149,91852,91853],{"class":155},"      box.innerHTML ",[149,91855,166],{"class":325},[149,91857,4750],{"class":155},[149,91859,4421],{"class":325},[149,91861,91862],{"class":151,"line":4296},[149,91863,91864],{"class":295},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[149,91866,91867],{"class":151,"line":4310},[149,91868,3906],{"class":155},[149,91870,91871],{"class":151,"line":4318},[149,91872,91873],{"class":295},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[149,91875,91876],{"class":151,"line":4323},[149,91877,91878],{"class":295},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[149,91880,91881],{"class":151,"line":4329},[149,91882,91883],{"class":295},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[149,91885,91886,91889,91891,91893,91896,91899,91902,91905,91907],{"class":151,"line":4335},[149,91887,91888],{"class":155},"    box.",[149,91890,59504],{"class":162},[149,91892,319],{"class":155},[149,91894,91895],{"class":169},"'mousemove'",[149,91897,91898],{"class":155},", _.",[149,91900,91901],{"class":162},"debounce",[149,91903,91904],{"class":155},"(mouseMove, ",[149,91906,66761],{"class":309},[149,91908,32203],{"class":155},[149,91910,91911,91913,91915],{"class":151,"line":4340},[149,91912,54115],{"class":155},[149,91914,53512],{"class":159},[149,91916,190],{"class":155},[149,91918,91919,91921,91923],{"class":151,"line":9663},[149,91920,665],{"class":155},[149,91922,53499],{"class":159},[149,91924,190],{"class":155},[149,91926,91927],{"class":151,"line":9687},[149,91928,4119],{"emptyLinePlaceholder":1800},[149,91930,91931,91933,91935],{"class":151,"line":9692},[149,91932,665],{"class":155},[149,91934,52341],{"class":159},[149,91936,190],{"class":155},[42,91938,91939],{},[45,91940,91941],{},"手写一个防抖函数来处理",[24,91943,91944],{},"防抖的核心就是利用定时器来实现的：",[24,91946,91947],{},"①声明一个定时器变量",[24,91949,91950],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[24,91952,91953],{},"③如果没有定时器则开启定时器，记得存到变量里面",[140,91955,91957],{"className":52339,"code":91956,"language":52341,"meta":145,"style":145},"\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",[48,91958,91959,91969,91983,91987,91995,92009,92029,92041,92049,92055,92065,92077,92089,92099,92111,92121,92131,92143,92147,92155,92163,92167,92175,92193,92211,92219,92237,92247,92255,92265,92269,92273,92277,92282,92287,92292,92297,92302,92307,92325,92332,92337,92345,92350,92363,92379,92389,92394,92398,92402,92422,92426,92431,92436,92441,92446,92454,92462,92466],{"__ignoreMap":145},[149,91960,91961,91963,91965,91967],{"class":151,"line":152},[149,91962,53003],{"class":155},[149,91964,53006],{"class":159},[149,91966,53009],{"class":162},[149,91968,190],{"class":155},[149,91970,91971,91973,91975,91977,91979,91981],{"class":151,"line":193},[149,91972,156],{"class":155},[149,91974,52341],{"class":159},[149,91976,53020],{"class":162},[149,91978,166],{"class":155},[149,91980,53025],{"class":169},[149,91982,190],{"class":155},[149,91984,91985],{"class":151,"line":235},[149,91986,4119],{"emptyLinePlaceholder":1800},[149,91988,91989,91991,91993],{"class":151,"line":340},[149,91990,156],{"class":155},[149,91992,53038],{"class":159},[149,91994,190],{"class":155},[149,91996,91997,91999,92001,92003,92005,92007],{"class":151,"line":346},[149,91998,587],{"class":155},[149,92000,53048],{"class":159},[149,92002,53051],{"class":162},[149,92004,166],{"class":155},[149,92006,53056],{"class":169},[149,92008,190],{"class":155},[149,92010,92011,92013,92015,92017,92019,92021,92023,92025,92027],{"class":151,"line":352},[149,92012,587],{"class":155},[149,92014,53048],{"class":159},[149,92016,515],{"class":162},[149,92018,166],{"class":155},[149,92020,53095],{"class":169},[149,92022,53075],{"class":162},[149,92024,166],{"class":155},[149,92026,53102],{"class":169},[149,92028,190],{"class":155},[149,92030,92031,92033,92035,92037,92039],{"class":151,"line":1021},[149,92032,587],{"class":155},[149,92034,53111],{"class":159},[149,92036,53114],{"class":155},[149,92038,53111],{"class":159},[149,92040,190],{"class":155},[149,92042,92043,92045,92047],{"class":151,"line":1035},[149,92044,587],{"class":155},[149,92046,1783],{"class":159},[149,92048,190],{"class":155},[149,92050,92051,92053],{"class":151,"line":1054},[149,92052,56447],{"class":162},[149,92054,304],{"class":155},[149,92056,92057,92059,92061,92063],{"class":151,"line":1072},[149,92058,74278],{"class":309},[149,92060,313],{"class":155},[149,92062,62196],{"class":309},[149,92064,841],{"class":155},[149,92066,92067,92069,92071,92073,92075],{"class":151,"line":1090},[149,92068,56466],{"class":309},[149,92070,313],{"class":155},[149,92072,3442],{"class":309},[149,92074,326],{"class":325},[149,92076,841],{"class":155},[149,92078,92079,92081,92083,92085,92087],{"class":151,"line":1633},[149,92080,56480],{"class":309},[149,92082,313],{"class":155},[149,92084,3442],{"class":309},[149,92086,326],{"class":325},[149,92088,841],{"class":155},[149,92090,92091,92093,92095,92097],{"class":151,"line":1644},[149,92092,56579],{"class":309},[149,92094,313],{"class":155},[149,92096,91687],{"class":309},[149,92098,841],{"class":155},[149,92100,92101,92103,92105,92107,92109],{"class":151,"line":3348},[149,92102,56617],{"class":309},[149,92104,313],{"class":155},[149,92106,2686],{"class":309},[149,92108,326],{"class":325},[149,92110,841],{"class":155},[149,92112,92113,92115,92117,92119],{"class":151,"line":3362},[149,92114,59108],{"class":309},[149,92116,313],{"class":155},[149,92118,62533],{"class":309},[149,92120,841],{"class":155},[149,92122,92123,92125,92127,92129],{"class":151,"line":3367},[149,92124,58978],{"class":309},[149,92126,313],{"class":155},[149,92128,53293],{"class":309},[149,92130,841],{"class":155},[149,92132,92133,92135,92137,92139,92141],{"class":151,"line":3373},[149,92134,91726],{"class":309},[149,92136,313],{"class":155},[149,92138,2182],{"class":309},[149,92140,326],{"class":325},[149,92142,841],{"class":155},[149,92144,92145],{"class":151,"line":3394},[149,92146,3906],{"class":155},[149,92148,92149,92151,92153],{"class":151,"line":3399},[149,92150,54115],{"class":155},[149,92152,1783],{"class":159},[149,92154,190],{"class":155},[149,92156,92157,92159,92161],{"class":151,"line":3413},[149,92158,665],{"class":155},[149,92160,53038],{"class":159},[149,92162,190],{"class":155},[149,92164,92165],{"class":151,"line":3418},[149,92166,4119],{"emptyLinePlaceholder":1800},[149,92168,92169,92171,92173],{"class":151,"line":3447},[149,92170,156],{"class":155},[149,92172,53499],{"class":159},[149,92174,190],{"class":155},[149,92176,92177,92179,92181,92183,92185,92187,92189,92191],{"class":151,"line":3452},[149,92178,587],{"class":155},[149,92180,301],{"class":159},[149,92182,55184],{"class":162},[149,92184,166],{"class":155},[149,92186,55189],{"class":169},[149,92188,185],{"class":155},[149,92190,301],{"class":159},[149,92192,190],{"class":155},[149,92194,92195,92197,92199,92201,92203,92205,92207,92209],{"class":151,"line":3469},[149,92196,587],{"class":155},[149,92198,53512],{"class":159},[149,92200,163],{"class":162},[149,92202,166],{"class":155},[149,92204,89955],{"class":169},[149,92206,185],{"class":155},[149,92208,53512],{"class":159},[149,92210,190],{"class":155},[149,92212,92213,92215,92217],{"class":151,"line":3474},[149,92214,587],{"class":155},[149,92216,53512],{"class":159},[149,92218,190],{"class":155},[149,92220,92221,92223,92225,92227,92229,92231,92233,92235],{"class":151,"line":3479},[149,92222,12935],{"class":325},[149,92224,88614],{"class":309},[149,92226,15277],{"class":325},[149,92228,56091],{"class":155},[149,92230,56094],{"class":162},[149,92232,319],{"class":155},[149,92234,91827],{"class":169},[149,92236,1878],{"class":155},[149,92238,92239,92241,92243,92245],{"class":151,"line":3484},[149,92240,53917],{"class":325},[149,92242,11152],{"class":155},[149,92244,166],{"class":325},[149,92246,49039],{"class":309},[149,92248,92249,92251,92253],{"class":151,"line":3498},[149,92250,71768],{"class":325},[149,92252,91846],{"class":162},[149,92254,12567],{"class":155},[149,92256,92257,92259,92261,92263],{"class":151,"line":3503},[149,92258,91853],{"class":155},[149,92260,166],{"class":325},[149,92262,4750],{"class":155},[149,92264,4421],{"class":325},[149,92266,92267],{"class":151,"line":4296},[149,92268,91864],{"class":295},[149,92270,92271],{"class":151,"line":4310},[149,92272,3906],{"class":155},[149,92274,92275],{"class":151,"line":4318},[149,92276,91873],{"class":295},[149,92278,92279],{"class":151,"line":4323},[149,92280,92281],{"class":295},"    \u002F\u002F 手写防抖函数\n",[149,92283,92284],{"class":151,"line":4329},[149,92285,92286],{"class":295},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[149,92288,92289],{"class":151,"line":4335},[149,92290,92291],{"class":295},"    \u002F\u002F 1.声明定时器变量\n",[149,92293,92294],{"class":151,"line":4340},[149,92295,92296],{"class":295},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[149,92298,92299],{"class":151,"line":9663},[149,92300,92301],{"class":295},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[149,92303,92304],{"class":151,"line":9687},[149,92305,92306],{"class":295},"    \u002F\u002F 4.定时器里面写函数调用\n",[149,92308,92309,92311,92314,92316,92319,92321,92323],{"class":151,"line":9692},[149,92310,71768],{"class":325},[149,92312,92313],{"class":162}," debounce",[149,92315,319],{"class":155},[149,92317,92318],{"class":6932},"fn",[149,92320,329],{"class":155},[149,92322,2581],{"class":6932},[149,92324,14155],{"class":155},[149,92326,92327,92329],{"class":151,"line":9698},[149,92328,81453],{"class":325},[149,92330,92331],{"class":155}," timer\n",[149,92333,92334],{"class":151,"line":9725},[149,92335,92336],{"class":295},"      \u002F\u002F return 返回一个匿名函数\n",[149,92338,92339,92341,92343],{"class":151,"line":9730},[149,92340,75664],{"class":325},[149,92342,60609],{"class":325},[149,92344,56147],{"class":155},[149,92346,92347],{"class":151,"line":9736},[149,92348,92349],{"class":295},"        \u002F\u002F 这里边写第二三四步\n",[149,92351,92352,92354,92357,92360],{"class":151,"line":9748},[149,92353,4216],{"class":325},[149,92355,92356],{"class":155}," (timer) ",[149,92358,92359],{"class":162},"clearTimeout",[149,92361,92362],{"class":155},"(timer)\n",[149,92364,92365,92368,92370,92373,92375,92377],{"class":151,"line":9760},[149,92366,92367],{"class":155},"        timer ",[149,92369,166],{"class":325},[149,92371,92372],{"class":162}," setTimeout",[149,92374,319],{"class":155},[149,92376,56144],{"class":325},[149,92378,56147],{"class":155},[149,92380,92381,92384,92386],{"class":151,"line":9772},[149,92382,92383],{"class":162},"          fn",[149,92385,14763],{"class":155},[149,92387,92388],{"class":295},"\u002F\u002F加小括号调用fn }, t)\n",[149,92390,92391],{"class":151,"line":11430},[149,92392,92393],{"class":155},"        }, t)\n",[149,92395,92396],{"class":151,"line":11455},[149,92397,54096],{"class":155},[149,92399,92400],{"class":151,"line":11478},[149,92401,3906],{"class":155},[149,92403,92404,92406,92408,92410,92412,92414,92416,92418,92420],{"class":151,"line":11502},[149,92405,91888],{"class":155},[149,92407,59504],{"class":162},[149,92409,319],{"class":155},[149,92411,91895],{"class":169},[149,92413,329],{"class":155},[149,92415,91901],{"class":162},[149,92417,91904],{"class":155},[149,92419,66761],{"class":309},[149,92421,32203],{"class":155},[149,92423,92424],{"class":151,"line":11507},[149,92425,4119],{"emptyLinePlaceholder":1800},[149,92427,92428],{"class":151,"line":11512},[149,92429,92430],{"class":295},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[149,92432,92433],{"class":151,"line":11517},[149,92434,92435],{"class":295},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[149,92437,92438],{"class":151,"line":11526},[149,92439,92440],{"class":295},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[149,92442,92443],{"class":151,"line":11531},[149,92444,92445],{"class":295},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[149,92447,92448,92450,92452],{"class":151,"line":11537},[149,92449,54115],{"class":155},[149,92451,53512],{"class":159},[149,92453,190],{"class":155},[149,92455,92456,92458,92460],{"class":151,"line":11558},[149,92457,665],{"class":155},[149,92459,53499],{"class":159},[149,92461,190],{"class":155},[149,92463,92464],{"class":151,"line":11564},[149,92465,4119],{"emptyLinePlaceholder":1800},[149,92467,92468,92470,92472],{"class":151,"line":11578},[149,92469,665],{"class":155},[149,92471,52341],{"class":159},[149,92473,190],{"class":155},[19,92475,92477],{"id":92476},"_4172-节流","4.17.2 节流",[24,92479,92480],{},[83,92481],{"alt":145,"src":92482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[24,92484,92485],{},[83,92486],{"alt":145,"src":92487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[24,92489,92490],{},[31,92491,92492],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[24,92494,92495],{},"实现方式：",[42,92497,92498],{},[45,92499,92500],{},"lodash 提供的节流函数来处理",[24,92502,92503],{},"_.throttle(func,[wait=0],[options=])",[24,92505,92506],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[140,92508,92510],{"className":52339,"code":92509,"language":52341,"meta":145,"style":145},"\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",[48,92511,92512,92522,92536,92540,92548,92562,92582,92594,92602,92608,92618,92630,92642,92652,92664,92674,92684,92696,92700,92708,92716,92720,92728,92746,92764,92772,92790,92800,92808,92818,92822,92826,92830,92835,92840,92861,92869,92877,92881],{"__ignoreMap":145},[149,92513,92514,92516,92518,92520],{"class":151,"line":152},[149,92515,53003],{"class":155},[149,92517,53006],{"class":159},[149,92519,53009],{"class":162},[149,92521,190],{"class":155},[149,92523,92524,92526,92528,92530,92532,92534],{"class":151,"line":193},[149,92525,156],{"class":155},[149,92527,52341],{"class":159},[149,92529,53020],{"class":162},[149,92531,166],{"class":155},[149,92533,53025],{"class":169},[149,92535,190],{"class":155},[149,92537,92538],{"class":151,"line":235},[149,92539,4119],{"emptyLinePlaceholder":1800},[149,92541,92542,92544,92546],{"class":151,"line":340},[149,92543,156],{"class":155},[149,92545,53038],{"class":159},[149,92547,190],{"class":155},[149,92549,92550,92552,92554,92556,92558,92560],{"class":151,"line":346},[149,92551,587],{"class":155},[149,92553,53048],{"class":159},[149,92555,53051],{"class":162},[149,92557,166],{"class":155},[149,92559,53056],{"class":169},[149,92561,190],{"class":155},[149,92563,92564,92566,92568,92570,92572,92574,92576,92578,92580],{"class":151,"line":352},[149,92565,587],{"class":155},[149,92567,53048],{"class":159},[149,92569,515],{"class":162},[149,92571,166],{"class":155},[149,92573,53095],{"class":169},[149,92575,53075],{"class":162},[149,92577,166],{"class":155},[149,92579,53102],{"class":169},[149,92581,190],{"class":155},[149,92583,92584,92586,92588,92590,92592],{"class":151,"line":1021},[149,92585,587],{"class":155},[149,92587,53111],{"class":159},[149,92589,53114],{"class":155},[149,92591,53111],{"class":159},[149,92593,190],{"class":155},[149,92595,92596,92598,92600],{"class":151,"line":1035},[149,92597,587],{"class":155},[149,92599,1783],{"class":159},[149,92601,190],{"class":155},[149,92603,92604,92606],{"class":151,"line":1054},[149,92605,56447],{"class":162},[149,92607,304],{"class":155},[149,92609,92610,92612,92614,92616],{"class":151,"line":1072},[149,92611,74278],{"class":309},[149,92613,313],{"class":155},[149,92615,62196],{"class":309},[149,92617,841],{"class":155},[149,92619,92620,92622,92624,92626,92628],{"class":151,"line":1090},[149,92621,56466],{"class":309},[149,92623,313],{"class":155},[149,92625,3442],{"class":309},[149,92627,326],{"class":325},[149,92629,841],{"class":155},[149,92631,92632,92634,92636,92638,92640],{"class":151,"line":1633},[149,92633,56480],{"class":309},[149,92635,313],{"class":155},[149,92637,3442],{"class":309},[149,92639,326],{"class":325},[149,92641,841],{"class":155},[149,92643,92644,92646,92648,92650],{"class":151,"line":1644},[149,92645,56579],{"class":309},[149,92647,313],{"class":155},[149,92649,91687],{"class":309},[149,92651,841],{"class":155},[149,92653,92654,92656,92658,92660,92662],{"class":151,"line":3348},[149,92655,56617],{"class":309},[149,92657,313],{"class":155},[149,92659,2686],{"class":309},[149,92661,326],{"class":325},[149,92663,841],{"class":155},[149,92665,92666,92668,92670,92672],{"class":151,"line":3362},[149,92667,59108],{"class":309},[149,92669,313],{"class":155},[149,92671,62533],{"class":309},[149,92673,841],{"class":155},[149,92675,92676,92678,92680,92682],{"class":151,"line":3367},[149,92677,58978],{"class":309},[149,92679,313],{"class":155},[149,92681,53293],{"class":309},[149,92683,841],{"class":155},[149,92685,92686,92688,92690,92692,92694],{"class":151,"line":3373},[149,92687,91726],{"class":309},[149,92689,313],{"class":155},[149,92691,2182],{"class":309},[149,92693,326],{"class":325},[149,92695,841],{"class":155},[149,92697,92698],{"class":151,"line":3394},[149,92699,3906],{"class":155},[149,92701,92702,92704,92706],{"class":151,"line":3399},[149,92703,54115],{"class":155},[149,92705,1783],{"class":159},[149,92707,190],{"class":155},[149,92709,92710,92712,92714],{"class":151,"line":3413},[149,92711,665],{"class":155},[149,92713,53038],{"class":159},[149,92715,190],{"class":155},[149,92717,92718],{"class":151,"line":3418},[149,92719,4119],{"emptyLinePlaceholder":1800},[149,92721,92722,92724,92726],{"class":151,"line":3447},[149,92723,156],{"class":155},[149,92725,53499],{"class":159},[149,92727,190],{"class":155},[149,92729,92730,92732,92734,92736,92738,92740,92742,92744],{"class":151,"line":3452},[149,92731,587],{"class":155},[149,92733,301],{"class":159},[149,92735,55184],{"class":162},[149,92737,166],{"class":155},[149,92739,55189],{"class":169},[149,92741,185],{"class":155},[149,92743,301],{"class":159},[149,92745,190],{"class":155},[149,92747,92748,92750,92752,92754,92756,92758,92760,92762],{"class":151,"line":3469},[149,92749,587],{"class":155},[149,92751,53512],{"class":159},[149,92753,163],{"class":162},[149,92755,166],{"class":155},[149,92757,89955],{"class":169},[149,92759,185],{"class":155},[149,92761,53512],{"class":159},[149,92763,190],{"class":155},[149,92765,92766,92768,92770],{"class":151,"line":3474},[149,92767,587],{"class":155},[149,92769,53512],{"class":159},[149,92771,190],{"class":155},[149,92773,92774,92776,92778,92780,92782,92784,92786,92788],{"class":151,"line":3479},[149,92775,12935],{"class":325},[149,92777,88614],{"class":309},[149,92779,15277],{"class":325},[149,92781,56091],{"class":155},[149,92783,56094],{"class":162},[149,92785,319],{"class":155},[149,92787,91827],{"class":169},[149,92789,1878],{"class":155},[149,92791,92792,92794,92796,92798],{"class":151,"line":3484},[149,92793,53917],{"class":325},[149,92795,11152],{"class":155},[149,92797,166],{"class":325},[149,92799,49039],{"class":309},[149,92801,92802,92804,92806],{"class":151,"line":3498},[149,92803,71768],{"class":325},[149,92805,91846],{"class":162},[149,92807,12567],{"class":155},[149,92809,92810,92812,92814,92816],{"class":151,"line":3503},[149,92811,91853],{"class":155},[149,92813,166],{"class":325},[149,92815,4750],{"class":155},[149,92817,4421],{"class":325},[149,92819,92820],{"class":151,"line":4296},[149,92821,91864],{"class":295},[149,92823,92824],{"class":151,"line":4310},[149,92825,3906],{"class":155},[149,92827,92828],{"class":151,"line":4318},[149,92829,91873],{"class":295},[149,92831,92832],{"class":151,"line":4323},[149,92833,92834],{"class":295},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[149,92836,92837],{"class":151,"line":4329},[149,92838,92839],{"class":295},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[149,92841,92842,92844,92846,92848,92850,92852,92855,92857,92859],{"class":151,"line":4335},[149,92843,91888],{"class":155},[149,92845,59504],{"class":162},[149,92847,319],{"class":155},[149,92849,91895],{"class":169},[149,92851,91898],{"class":155},[149,92853,92854],{"class":162},"throttle",[149,92856,91904],{"class":155},[149,92858,66761],{"class":309},[149,92860,32203],{"class":155},[149,92862,92863,92865,92867],{"class":151,"line":4340},[149,92864,54115],{"class":155},[149,92866,53512],{"class":159},[149,92868,190],{"class":155},[149,92870,92871,92873,92875],{"class":151,"line":9663},[149,92872,665],{"class":155},[149,92874,53499],{"class":159},[149,92876,190],{"class":155},[149,92878,92879],{"class":151,"line":9687},[149,92880,4119],{"emptyLinePlaceholder":1800},[149,92882,92883,92885,92887],{"class":151,"line":9692},[149,92884,665],{"class":155},[149,92886,52341],{"class":159},[149,92888,190],{"class":155},[42,92890,92891],{},[45,92892,92893],{},"手写一个节流函数来处理",[24,92895,72634],{},[24,92897,91947],{},[24,92899,92900],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[24,92902,92903],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[140,92905,92907],{"className":52339,"code":92906,"language":52341,"meta":145,"style":145},"\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",[48,92908,92909,92919,92933,92937,92945,92959,92979,92991,92999,93005,93015,93027,93039,93049,93061,93071,93081,93093,93097,93105,93113,93117,93125,93143,93161,93169,93187,93197,93205,93215,93219,93223,93227,93232,93237,93242,93247,93252,93257,93274,93280,93288,93299,93314,93321,93326,93331,93341,93346,93351,93356,93360,93364,93368,93388,93396,93404,93408],{"__ignoreMap":145},[149,92910,92911,92913,92915,92917],{"class":151,"line":152},[149,92912,53003],{"class":155},[149,92914,53006],{"class":159},[149,92916,53009],{"class":162},[149,92918,190],{"class":155},[149,92920,92921,92923,92925,92927,92929,92931],{"class":151,"line":193},[149,92922,156],{"class":155},[149,92924,52341],{"class":159},[149,92926,53020],{"class":162},[149,92928,166],{"class":155},[149,92930,53025],{"class":169},[149,92932,190],{"class":155},[149,92934,92935],{"class":151,"line":235},[149,92936,4119],{"emptyLinePlaceholder":1800},[149,92938,92939,92941,92943],{"class":151,"line":340},[149,92940,156],{"class":155},[149,92942,53038],{"class":159},[149,92944,190],{"class":155},[149,92946,92947,92949,92951,92953,92955,92957],{"class":151,"line":346},[149,92948,587],{"class":155},[149,92950,53048],{"class":159},[149,92952,53051],{"class":162},[149,92954,166],{"class":155},[149,92956,53056],{"class":169},[149,92958,190],{"class":155},[149,92960,92961,92963,92965,92967,92969,92971,92973,92975,92977],{"class":151,"line":352},[149,92962,587],{"class":155},[149,92964,53048],{"class":159},[149,92966,515],{"class":162},[149,92968,166],{"class":155},[149,92970,53095],{"class":169},[149,92972,53075],{"class":162},[149,92974,166],{"class":155},[149,92976,53102],{"class":169},[149,92978,190],{"class":155},[149,92980,92981,92983,92985,92987,92989],{"class":151,"line":1021},[149,92982,587],{"class":155},[149,92984,53111],{"class":159},[149,92986,53114],{"class":155},[149,92988,53111],{"class":159},[149,92990,190],{"class":155},[149,92992,92993,92995,92997],{"class":151,"line":1035},[149,92994,587],{"class":155},[149,92996,1783],{"class":159},[149,92998,190],{"class":155},[149,93000,93001,93003],{"class":151,"line":1054},[149,93002,56447],{"class":162},[149,93004,304],{"class":155},[149,93006,93007,93009,93011,93013],{"class":151,"line":1072},[149,93008,74278],{"class":309},[149,93010,313],{"class":155},[149,93012,62196],{"class":309},[149,93014,841],{"class":155},[149,93016,93017,93019,93021,93023,93025],{"class":151,"line":1090},[149,93018,56466],{"class":309},[149,93020,313],{"class":155},[149,93022,3442],{"class":309},[149,93024,326],{"class":325},[149,93026,841],{"class":155},[149,93028,93029,93031,93033,93035,93037],{"class":151,"line":1633},[149,93030,56480],{"class":309},[149,93032,313],{"class":155},[149,93034,3442],{"class":309},[149,93036,326],{"class":325},[149,93038,841],{"class":155},[149,93040,93041,93043,93045,93047],{"class":151,"line":1644},[149,93042,56579],{"class":309},[149,93044,313],{"class":155},[149,93046,91687],{"class":309},[149,93048,841],{"class":155},[149,93050,93051,93053,93055,93057,93059],{"class":151,"line":3348},[149,93052,56617],{"class":309},[149,93054,313],{"class":155},[149,93056,2686],{"class":309},[149,93058,326],{"class":325},[149,93060,841],{"class":155},[149,93062,93063,93065,93067,93069],{"class":151,"line":3362},[149,93064,59108],{"class":309},[149,93066,313],{"class":155},[149,93068,62533],{"class":309},[149,93070,841],{"class":155},[149,93072,93073,93075,93077,93079],{"class":151,"line":3367},[149,93074,58978],{"class":309},[149,93076,313],{"class":155},[149,93078,53293],{"class":309},[149,93080,841],{"class":155},[149,93082,93083,93085,93087,93089,93091],{"class":151,"line":3373},[149,93084,91726],{"class":309},[149,93086,313],{"class":155},[149,93088,2182],{"class":309},[149,93090,326],{"class":325},[149,93092,841],{"class":155},[149,93094,93095],{"class":151,"line":3394},[149,93096,3906],{"class":155},[149,93098,93099,93101,93103],{"class":151,"line":3399},[149,93100,54115],{"class":155},[149,93102,1783],{"class":159},[149,93104,190],{"class":155},[149,93106,93107,93109,93111],{"class":151,"line":3413},[149,93108,665],{"class":155},[149,93110,53038],{"class":159},[149,93112,190],{"class":155},[149,93114,93115],{"class":151,"line":3418},[149,93116,4119],{"emptyLinePlaceholder":1800},[149,93118,93119,93121,93123],{"class":151,"line":3447},[149,93120,156],{"class":155},[149,93122,53499],{"class":159},[149,93124,190],{"class":155},[149,93126,93127,93129,93131,93133,93135,93137,93139,93141],{"class":151,"line":3452},[149,93128,587],{"class":155},[149,93130,301],{"class":159},[149,93132,55184],{"class":162},[149,93134,166],{"class":155},[149,93136,55189],{"class":169},[149,93138,185],{"class":155},[149,93140,301],{"class":159},[149,93142,190],{"class":155},[149,93144,93145,93147,93149,93151,93153,93155,93157,93159],{"class":151,"line":3469},[149,93146,587],{"class":155},[149,93148,53512],{"class":159},[149,93150,163],{"class":162},[149,93152,166],{"class":155},[149,93154,89955],{"class":169},[149,93156,185],{"class":155},[149,93158,53512],{"class":159},[149,93160,190],{"class":155},[149,93162,93163,93165,93167],{"class":151,"line":3474},[149,93164,587],{"class":155},[149,93166,53512],{"class":159},[149,93168,190],{"class":155},[149,93170,93171,93173,93175,93177,93179,93181,93183,93185],{"class":151,"line":3479},[149,93172,12935],{"class":325},[149,93174,88614],{"class":309},[149,93176,15277],{"class":325},[149,93178,56091],{"class":155},[149,93180,56094],{"class":162},[149,93182,319],{"class":155},[149,93184,91827],{"class":169},[149,93186,1878],{"class":155},[149,93188,93189,93191,93193,93195],{"class":151,"line":3484},[149,93190,53917],{"class":325},[149,93192,11152],{"class":155},[149,93194,166],{"class":325},[149,93196,49039],{"class":309},[149,93198,93199,93201,93203],{"class":151,"line":3498},[149,93200,71768],{"class":325},[149,93202,91846],{"class":162},[149,93204,12567],{"class":155},[149,93206,93207,93209,93211,93213],{"class":151,"line":3503},[149,93208,91853],{"class":155},[149,93210,166],{"class":325},[149,93212,4750],{"class":155},[149,93214,4421],{"class":325},[149,93216,93217],{"class":151,"line":4296},[149,93218,91864],{"class":295},[149,93220,93221],{"class":151,"line":4310},[149,93222,3906],{"class":155},[149,93224,93225],{"class":151,"line":4318},[149,93226,91873],{"class":295},[149,93228,93229],{"class":151,"line":4323},[149,93230,93231],{"class":295},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[149,93233,93234],{"class":151,"line":4329},[149,93235,93236],{"class":295},"    \u002F\u002F 1.声明一个定时器变量\n",[149,93238,93239],{"class":151,"line":4335},[149,93240,93241],{"class":295},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[149,93243,93244],{"class":151,"line":4340},[149,93245,93246],{"class":295},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[149,93248,93249],{"class":151,"line":9663},[149,93250,93251],{"class":295},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[149,93253,93254],{"class":151,"line":9687},[149,93255,93256],{"class":295},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[149,93258,93259,93261,93264,93266,93268,93270,93272],{"class":151,"line":9692},[149,93260,71768],{"class":325},[149,93262,93263],{"class":162}," throttle",[149,93265,319],{"class":155},[149,93267,92318],{"class":6932},[149,93269,329],{"class":155},[149,93271,2581],{"class":6932},[149,93273,14155],{"class":155},[149,93275,93276,93278],{"class":151,"line":9698},[149,93277,81453],{"class":325},[149,93279,92331],{"class":155},[149,93281,93282,93284,93286],{"class":151,"line":9725},[149,93283,75664],{"class":325},[149,93285,60609],{"class":325},[149,93287,56147],{"class":155},[149,93289,93290,93292,93294,93296],{"class":151,"line":9730},[149,93291,4216],{"class":325},[149,93293,3378],{"class":155},[149,93295,2090],{"class":325},[149,93297,93298],{"class":155},"timer) {\n",[149,93300,93301,93304,93306,93308,93310,93312],{"class":151,"line":9736},[149,93302,93303],{"class":155},"          timer ",[149,93305,166],{"class":325},[149,93307,92372],{"class":162},[149,93309,319],{"class":155},[149,93311,56144],{"class":325},[149,93313,56147],{"class":155},[149,93315,93316,93319],{"class":151,"line":9748},[149,93317,93318],{"class":162},"            fn",[149,93320,3695],{"class":155},[149,93322,93323],{"class":151,"line":9760},[149,93324,93325],{"class":295},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[149,93327,93328],{"class":151,"line":9772},[149,93329,93330],{"class":295},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[149,93332,93333,93336,93338],{"class":151,"line":11430},[149,93334,93335],{"class":155},"            timer ",[149,93337,166],{"class":325},[149,93339,93340],{"class":309}," null\n",[149,93342,93343],{"class":151,"line":11455},[149,93344,93345],{"class":295},"            \u002F\u002F 不能用clearTimeout(timer)\n",[149,93347,93348],{"class":151,"line":11478},[149,93349,93350],{"class":295},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[149,93352,93353],{"class":151,"line":11502},[149,93354,93355],{"class":155},"          }, t)\n",[149,93357,93358],{"class":151,"line":11507},[149,93359,4248],{"class":155},[149,93361,93362],{"class":151,"line":11512},[149,93363,54096],{"class":155},[149,93365,93366],{"class":151,"line":11517},[149,93367,3906],{"class":155},[149,93369,93370,93372,93374,93376,93378,93380,93382,93384,93386],{"class":151,"line":11526},[149,93371,91888],{"class":155},[149,93373,59504],{"class":162},[149,93375,319],{"class":155},[149,93377,91895],{"class":169},[149,93379,329],{"class":155},[149,93381,92854],{"class":162},[149,93383,91904],{"class":155},[149,93385,66761],{"class":309},[149,93387,32203],{"class":155},[149,93389,93390,93392,93394],{"class":151,"line":11531},[149,93391,54115],{"class":155},[149,93393,53512],{"class":159},[149,93395,190],{"class":155},[149,93397,93398,93400,93402],{"class":151,"line":11537},[149,93399,665],{"class":155},[149,93401,53499],{"class":159},[149,93403,190],{"class":155},[149,93405,93406],{"class":151,"line":11558},[149,93407,4119],{"emptyLinePlaceholder":1800},[149,93409,93410,93412,93414],{"class":151,"line":11564},[149,93411,665],{"class":155},[149,93413,52341],{"class":159},[149,93415,190],{"class":155},[19,93417,93419],{"id":93418},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[140,93421,93423],{"className":54765,"code":93422,"language":54767,"meta":145,"style":145},"\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",[48,93424,93425,93433,93441,93446,93451,93456,93461,93465,93473],{"__ignoreMap":145},[149,93426,93427,93429,93431],{"class":151,"line":152},[149,93428,156],{"class":155},[149,93430,53499],{"class":159},[149,93432,190],{"class":155},[149,93434,93435,93437,93439],{"class":151,"line":193},[149,93436,587],{"class":155},[149,93438,53512],{"class":159},[149,93440,190],{"class":155},[149,93442,93443],{"class":151,"line":235},[149,93444,93445],{"class":155},"    let timer = null\n",[149,93447,93448],{"class":151,"line":340},[149,93449,93450],{"class":155},"    timer = setTimeout(() => {\n",[149,93452,93453],{"class":151,"line":346},[149,93454,93455],{"class":155},"      clearTimeout(timer)\n",[149,93457,93458],{"class":151,"line":352},[149,93459,93460],{"class":155},"      console.log(timer)\n",[149,93462,93463],{"class":151,"line":1021},[149,93464,61916],{"class":155},[149,93466,93467,93469,93471],{"class":151,"line":1035},[149,93468,54115],{"class":155},[149,93470,53512],{"class":159},[149,93472,190],{"class":155},[149,93474,93475,93477,93479],{"class":151,"line":1054},[149,93476,665],{"class":155},[149,93478,53499],{"class":159},[149,93480,190],{"class":155},[24,93482,93483],{},"输出为1",[24,93485,93486],{},"在开启的定时器里边写清除定时器",[24,93488,93489],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[19,93491,93493],{"id":93492},"_4174-节流综合案例","4.17.4 节流综合案例",[24,93495,93496],{},"页面打开，可以记录上一次的视频播放位置",[24,93498,93499],{},[83,93500],{"alt":145,"src":93501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[24,93503,93504],{},[83,93505],{"alt":145,"src":93506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[140,93508,93510],{"className":52339,"code":93509,"language":52341,"meta":145,"style":145},"\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",[48,93511,93512,93522,93536,93540,93548,93562,93582,93602,93624,93637,93645,93651,93661,93671,93681,93685,93689,93696,93709,93721,93725,93729,93739,93751,93765,93769,93773,93780,93790,93803,93815,93825,93835,93851,93863,93867,93871,93879,93889,93901,93911,93921,93931,93935,93939,93949,93960,93964,93972,93980,93984,93992,94007,94022,94037,94058,94066,94074,94089,94110,94118,94133,94159,94185,94211,94219,94227,94246,94254,94259,94278,94283,94301,94306,94311,94319,94324,94338,94346,94351,94368,94372,94377,94399,94403,94411,94419,94423],{"__ignoreMap":145},[149,93513,93514,93516,93518,93520],{"class":151,"line":152},[149,93515,53003],{"class":155},[149,93517,53006],{"class":159},[149,93519,53009],{"class":162},[149,93521,190],{"class":155},[149,93523,93524,93526,93528,93530,93532,93534],{"class":151,"line":193},[149,93525,156],{"class":155},[149,93527,52341],{"class":159},[149,93529,53020],{"class":162},[149,93531,166],{"class":155},[149,93533,53025],{"class":169},[149,93535,190],{"class":155},[149,93537,93538],{"class":151,"line":235},[149,93539,4119],{"emptyLinePlaceholder":1800},[149,93541,93542,93544,93546],{"class":151,"line":340},[149,93543,156],{"class":155},[149,93545,53038],{"class":159},[149,93547,190],{"class":155},[149,93549,93550,93552,93554,93556,93558,93560],{"class":151,"line":346},[149,93551,587],{"class":155},[149,93553,53048],{"class":159},[149,93555,53051],{"class":162},[149,93557,166],{"class":155},[149,93559,53056],{"class":169},[149,93561,60818],{"class":155},[149,93563,93564,93566,93568,93570,93572,93574,93576,93578,93580],{"class":151,"line":352},[149,93565,587],{"class":155},[149,93567,53048],{"class":159},[149,93569,53067],{"class":162},[149,93571,166],{"class":155},[149,93573,53072],{"class":169},[149,93575,53075],{"class":162},[149,93577,166],{"class":155},[149,93579,53080],{"class":169},[149,93581,60818],{"class":155},[149,93583,93584,93586,93588,93590,93592,93594,93596,93598,93600],{"class":151,"line":1021},[149,93585,587],{"class":155},[149,93587,53048],{"class":159},[149,93589,515],{"class":162},[149,93591,166],{"class":155},[149,93593,53095],{"class":169},[149,93595,53075],{"class":162},[149,93597,166],{"class":155},[149,93599,53102],{"class":169},[149,93601,60818],{"class":155},[149,93603,93604,93606,93608,93610,93612,93615,93617,93619,93622],{"class":151,"line":1035},[149,93605,587],{"class":155},[149,93607,53048],{"class":159},[149,93609,515],{"class":162},[149,93611,166],{"class":155},[149,93613,93614],{"class":169},"\"referrer\"",[149,93616,53075],{"class":162},[149,93618,166],{"class":155},[149,93620,93621],{"class":169},"\"never\"",[149,93623,60818],{"class":155},[149,93625,93626,93628,93630,93633,93635],{"class":151,"line":1054},[149,93627,587],{"class":155},[149,93629,53111],{"class":159},[149,93631,93632],{"class":155},">综合案例\u003C\u002F",[149,93634,53111],{"class":159},[149,93636,190],{"class":155},[149,93638,93639,93641,93643],{"class":151,"line":1072},[149,93640,587],{"class":155},[149,93642,1783],{"class":159},[149,93644,190],{"class":155},[149,93646,93647,93649],{"class":151,"line":1090},[149,93648,8119],{"class":159},[149,93650,304],{"class":155},[149,93652,93653,93655,93657,93659],{"class":151,"line":1633},[149,93654,56390],{"class":309},[149,93656,313],{"class":155},[149,93658,2056],{"class":309},[149,93660,841],{"class":155},[149,93662,93663,93665,93667,93669],{"class":151,"line":1644},[149,93664,56401],{"class":309},[149,93666,313],{"class":155},[149,93668,2056],{"class":309},[149,93670,841],{"class":155},[149,93672,93673,93675,93677,93679],{"class":151,"line":3348},[149,93674,74278],{"class":309},[149,93676,313],{"class":155},[149,93678,62196],{"class":309},[149,93680,841],{"class":155},[149,93682,93683],{"class":151,"line":3362},[149,93684,3906],{"class":155},[149,93686,93687],{"class":151,"line":3367},[149,93688,4119],{"emptyLinePlaceholder":1800},[149,93690,93691,93694],{"class":151,"line":3373},[149,93692,93693],{"class":162},"    .container",[149,93695,304],{"class":155},[149,93697,93698,93700,93702,93705,93707],{"class":151,"line":3394},[149,93699,56466],{"class":309},[149,93701,313],{"class":155},[149,93703,93704],{"class":309},"1200",[149,93706,326],{"class":325},[149,93708,841],{"class":155},[149,93710,93711,93713,93715,93717,93719],{"class":151,"line":3399},[149,93712,56401],{"class":309},[149,93714,313],{"class":155},[149,93716,2056],{"class":309},[149,93718,53257],{"class":309},[149,93720,841],{"class":155},[149,93722,93723],{"class":151,"line":3413},[149,93724,3906],{"class":155},[149,93726,93727],{"class":151,"line":3418},[149,93728,4119],{"emptyLinePlaceholder":1800},[149,93730,93731,93734,93737],{"class":151,"line":3447},[149,93732,93733],{"class":162},"    .video",[149,93735,93736],{"class":159}," video",[149,93738,304],{"class":155},[149,93740,93741,93743,93745,93747,93749],{"class":151,"line":3452},[149,93742,56466],{"class":309},[149,93744,313],{"class":155},[149,93746,322],{"class":309},[149,93748,2191],{"class":325},[149,93750,841],{"class":155},[149,93752,93753,93755,93757,93759,93761,93763],{"class":151,"line":3469},[149,93754,56390],{"class":309},[149,93756,313],{"class":155},[149,93758,2561],{"class":309},[149,93760,326],{"class":325},[149,93762,5811],{"class":309},[149,93764,841],{"class":155},[149,93766,93767],{"class":151,"line":3474},[149,93768,3906],{"class":155},[149,93770,93771],{"class":151,"line":3479},[149,93772,4119],{"emptyLinePlaceholder":1800},[149,93774,93775,93778],{"class":151,"line":3484},[149,93776,93777],{"class":162},"    .elevator",[149,93779,304],{"class":155},[149,93781,93782,93784,93786,93788],{"class":151,"line":3498},[149,93783,56454],{"class":309},[149,93785,313],{"class":155},[149,93787,87914],{"class":309},[149,93789,841],{"class":155},[149,93791,93792,93794,93796,93799,93801],{"class":151,"line":3503},[149,93793,56642],{"class":309},[149,93795,313],{"class":155},[149,93797,93798],{"class":309},"280",[149,93800,326],{"class":325},[149,93802,841],{"class":155},[149,93804,93805,93807,93809,93811,93813],{"class":151,"line":4296},[149,93806,88108],{"class":309},[149,93808,313],{"class":155},[149,93810,2561],{"class":309},[149,93812,326],{"class":325},[149,93814,841],{"class":155},[149,93816,93817,93819,93821,93823],{"class":151,"line":4310},[149,93818,87921],{"class":309},[149,93820,313],{"class":155},[149,93822,87926],{"class":309},[149,93824,841],{"class":155},[149,93826,93827,93829,93831,93833],{"class":151,"line":4318},[149,93828,63410],{"class":309},[149,93830,313],{"class":155},[149,93832,62533],{"class":309},[149,93834,841],{"class":155},[149,93836,93837,93839,93841,93843,93845,93847,93849],{"class":151,"line":4323},[149,93838,63666],{"class":309},[149,93840,313],{"class":155},[149,93842,830],{"class":309},[149,93844,326],{"class":325},[149,93846,835],{"class":309},[149,93848,63932],{"class":309},[149,93850,841],{"class":155},[149,93852,93853,93855,93857,93859,93861],{"class":151,"line":4329},[149,93854,56466],{"class":309},[149,93856,313],{"class":155},[149,93858,2767],{"class":309},[149,93860,326],{"class":325},[149,93862,841],{"class":155},[149,93864,93865],{"class":151,"line":4335},[149,93866,3906],{"class":155},[149,93868,93869],{"class":151,"line":4340},[149,93870,4119],{"emptyLinePlaceholder":1800},[149,93872,93873,93875,93877],{"class":151,"line":9663},[149,93874,93777],{"class":162},[149,93876,3123],{"class":159},[149,93878,304],{"class":155},[149,93880,93881,93883,93885,93887],{"class":151,"line":9687},[149,93882,56704],{"class":309},[149,93884,313],{"class":155},[149,93886,1394],{"class":309},[149,93888,841],{"class":155},[149,93890,93891,93893,93895,93897,93899],{"class":151,"line":9692},[149,93892,56390],{"class":309},[149,93894,313],{"class":155},[149,93896,2309],{"class":309},[149,93898,326],{"class":325},[149,93900,841],{"class":155},[149,93902,93903,93905,93907,93909],{"class":151,"line":9698},[149,93904,65657],{"class":309},[149,93906,313],{"class":155},[149,93908,56432],{"class":309},[149,93910,841],{"class":155},[149,93912,93913,93915,93917,93919],{"class":151,"line":9725},[149,93914,58978],{"class":309},[149,93916,313],{"class":155},[149,93918,53293],{"class":309},[149,93920,841],{"class":155},[149,93922,93923,93925,93927,93929],{"class":151,"line":9730},[149,93924,59108],{"class":309},[149,93926,313],{"class":155},[149,93928,1429],{"class":309},[149,93930,841],{"class":155},[149,93932,93933],{"class":151,"line":9736},[149,93934,3906],{"class":155},[149,93936,93937],{"class":151,"line":9748},[149,93938,4119],{"emptyLinePlaceholder":1800},[149,93940,93941,93943,93945,93947],{"class":151,"line":9760},[149,93942,93777],{"class":162},[149,93944,3123],{"class":159},[149,93946,65711],{"class":162},[149,93948,304],{"class":155},[149,93950,93951,93953,93955,93958],{"class":151,"line":9772},[149,93952,59108],{"class":309},[149,93954,313],{"class":155},[149,93956,93957],{"class":309},"#1286ff",[149,93959,841],{"class":155},[149,93961,93962],{"class":151,"line":11430},[149,93963,3906],{"class":155},[149,93965,93966,93968,93970],{"class":151,"line":11455},[149,93967,54115],{"class":155},[149,93969,1783],{"class":159},[149,93971,190],{"class":155},[149,93973,93974,93976,93978],{"class":151,"line":11478},[149,93975,665],{"class":155},[149,93977,53038],{"class":159},[149,93979,190],{"class":155},[149,93981,93982],{"class":151,"line":11502},[149,93983,4119],{"emptyLinePlaceholder":1800},[149,93985,93986,93988,93990],{"class":151,"line":11507},[149,93987,156],{"class":155},[149,93989,53499],{"class":159},[149,93991,190],{"class":155},[149,93993,93994,93996,93998,94000,94002,94005],{"class":151,"line":11512},[149,93995,587],{"class":155},[149,93997,301],{"class":159},[149,93999,55184],{"class":162},[149,94001,166],{"class":155},[149,94003,94004],{"class":169},"\"container\"",[149,94006,190],{"class":155},[149,94008,94009,94011,94013,94015,94017,94020],{"class":151,"line":11517},[149,94010,53045],{"class":155},[149,94012,301],{"class":159},[149,94014,55184],{"class":162},[149,94016,166],{"class":155},[149,94018,94019],{"class":169},"\"header\"",[149,94021,190],{"class":155},[149,94023,94024,94026,94028,94030,94032,94035],{"class":151,"line":11526},[149,94025,56929],{"class":155},[149,94027,2102],{"class":159},[149,94029,62746],{"class":162},[149,94031,166],{"class":155},[149,94033,94034],{"class":169},"\"http:\u002F\u002Fpip.itcast.cn\"",[149,94036,190],{"class":155},[149,94038,94039,94041,94043,94045,94047,94050,94052,94054,94056],{"class":151,"line":11531},[149,94040,56995],{"class":155},[149,94042,83],{"class":159},[149,94044,163],{"class":162},[149,94046,166],{"class":155},[149,94048,94049],{"class":169},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[149,94051,265],{"class":162},[149,94053,166],{"class":155},[149,94055,1382],{"class":169},[149,94057,60818],{"class":155},[149,94059,94060,94062,94064],{"class":151,"line":11537},[149,94061,57099],{"class":155},[149,94063,2102],{"class":159},[149,94065,190],{"class":155},[149,94067,94068,94070,94072],{"class":151,"line":11558},[149,94069,53476],{"class":155},[149,94071,301],{"class":159},[149,94073,190],{"class":155},[149,94075,94076,94078,94080,94082,94084,94087],{"class":151,"line":11564},[149,94077,53045],{"class":155},[149,94079,301],{"class":159},[149,94081,55184],{"class":162},[149,94083,166],{"class":155},[149,94085,94086],{"class":169},"\"video\"",[149,94088,190],{"class":155},[149,94090,94091,94093,94095,94097,94099,94102,94104,94106,94108],{"class":151,"line":11578},[149,94092,56929],{"class":155},[149,94094,117],{"class":159},[149,94096,163],{"class":162},[149,94098,166],{"class":155},[149,94100,94101],{"class":169},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[149,94103,173],{"class":162},[149,94105,185],{"class":155},[149,94107,117],{"class":159},[149,94109,190],{"class":155},[149,94111,94112,94114,94116],{"class":151,"line":11584},[149,94113,53476],{"class":155},[149,94115,301],{"class":159},[149,94117,190],{"class":155},[149,94119,94120,94122,94124,94126,94128,94131],{"class":151,"line":11611},[149,94121,53045],{"class":155},[149,94123,301],{"class":159},[149,94125,55184],{"class":162},[149,94127,166],{"class":155},[149,94129,94130],{"class":169},"\"elevator\"",[149,94132,190],{"class":155},[149,94134,94135,94137,94139,94141,94143,94145,94148,94150,94152,94155,94157],{"class":151,"line":11620},[149,94136,56929],{"class":155},[149,94138,2102],{"class":159},[149,94140,62746],{"class":162},[149,94142,166],{"class":155},[149,94144,65923],{"class":169},[149,94146,94147],{"class":162}," data-ref",[149,94149,166],{"class":155},[149,94151,94086],{"class":169},[149,94153,94154],{"class":155},">视频介绍\u003C\u002F",[149,94156,2102],{"class":159},[149,94158,190],{"class":155},[149,94160,94161,94163,94165,94167,94169,94171,94173,94175,94178,94181,94183],{"class":151,"line":11626},[149,94162,56929],{"class":155},[149,94164,2102],{"class":159},[149,94166,62746],{"class":162},[149,94168,166],{"class":155},[149,94170,65923],{"class":169},[149,94172,94147],{"class":162},[149,94174,166],{"class":155},[149,94176,94177],{"class":169},"\"intro\"",[149,94179,94180],{"class":155},">课程简介\u003C\u002F",[149,94182,2102],{"class":159},[149,94184,190],{"class":155},[149,94186,94187,94189,94191,94193,94195,94197,94199,94201,94204,94207,94209],{"class":151,"line":11634},[149,94188,56929],{"class":155},[149,94190,2102],{"class":159},[149,94192,62746],{"class":162},[149,94194,166],{"class":155},[149,94196,65923],{"class":169},[149,94198,94147],{"class":162},[149,94200,166],{"class":155},[149,94202,94203],{"class":169},"\"outline\"",[149,94205,94206],{"class":155},">评论列表\u003C\u002F",[149,94208,2102],{"class":159},[149,94210,190],{"class":155},[149,94212,94213,94215,94217],{"class":151,"line":11639},[149,94214,53476],{"class":155},[149,94216,301],{"class":159},[149,94218,190],{"class":155},[149,94220,94221,94223,94225],{"class":151,"line":18314},[149,94222,54115],{"class":155},[149,94224,301],{"class":159},[149,94226,190],{"class":155},[149,94228,94229,94231,94233,94235,94237,94240,94242,94244],{"class":151,"line":18320},[149,94230,587],{"class":155},[149,94232,53512],{"class":159},[149,94234,163],{"class":162},[149,94236,166],{"class":155},[149,94238,94239],{"class":169},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[149,94241,185],{"class":155},[149,94243,53512],{"class":159},[149,94245,190],{"class":155},[149,94247,94248,94250,94252],{"class":151,"line":18343},[149,94249,587],{"class":155},[149,94251,53512],{"class":159},[149,94253,190],{"class":155},[149,94255,94256],{"class":151,"line":18349},[149,94257,94258],{"class":295},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[149,94260,94261,94263,94265,94267,94269,94271,94273,94276],{"class":151,"line":18372},[149,94262,12935],{"class":325},[149,94264,93736],{"class":309},[149,94266,15277],{"class":325},[149,94268,56091],{"class":155},[149,94270,56094],{"class":162},[149,94272,319],{"class":155},[149,94274,94275],{"class":169},"'video'",[149,94277,1878],{"class":155},[149,94279,94280],{"class":151,"line":18386},[149,94281,94282],{"class":295},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[149,94284,94285,94288,94290,94292,94294,94297,94299],{"class":151,"line":18406},[149,94286,94287],{"class":155},"    video.ontimeupdate ",[149,94289,166],{"class":325},[149,94291,90036],{"class":155},[149,94293,92854],{"class":162},[149,94295,94296],{"class":155},"(() ",[149,94298,86403],{"class":325},[149,94300,304],{"class":155},[149,94302,94303],{"class":151,"line":18412},[149,94304,94305],{"class":295},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[149,94307,94308],{"class":151,"line":18423},[149,94309,94310],{"class":295},"      \u002F\u002F 控制台输出当前的时间\n",[149,94312,94313,94316],{"class":151,"line":18446},[149,94314,94315],{"class":295},"      \u002F\u002F console.log(video.currentTime)",[149,94317,94318],{"class":295},"  \u002F\u002F获得当前的视频时间\n",[149,94320,94321],{"class":151,"line":18468},[149,94322,94323],{"class":295},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[149,94325,94326,94328,94330,94332,94335],{"class":151,"line":18473},[149,94327,76365],{"class":155},[149,94329,73336],{"class":162},[149,94331,319],{"class":155},[149,94333,94334],{"class":169},"'currentTime'",[149,94336,94337],{"class":155},", video.currentTime)\n",[149,94339,94340,94342,94344],{"class":151,"line":18479},[149,94341,56230],{"class":155},[149,94343,8126],{"class":309},[149,94345,1878],{"class":155},[149,94347,94348],{"class":151,"line":18493},[149,94349,94350],{"class":295},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[149,94352,94353,94356,94359,94361,94364,94366],{"class":151,"line":18506},[149,94354,94355],{"class":155},"    video.",[149,94357,94358],{"class":162},"onloadeddata",[149,94360,15277],{"class":325},[149,94362,94363],{"class":155}," () ",[149,94365,86403],{"class":325},[149,94367,304],{"class":155},[149,94369,94370],{"class":151,"line":18511},[149,94371,61703],{"class":295},[149,94373,94374],{"class":151,"line":18525},[149,94375,94376],{"class":295},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[149,94378,94379,94382,94384,94387,94389,94391,94393,94395,94397],{"class":151,"line":18530},[149,94380,94381],{"class":155},"      video.currentTime ",[149,94383,166],{"class":325},[149,94385,94386],{"class":155}," localStorage.",[149,94388,73367],{"class":162},[149,94390,319],{"class":155},[149,94392,94334],{"class":169},[149,94394,15427],{"class":155},[149,94396,73039],{"class":325},[149,94398,49039],{"class":309},[149,94400,94401],{"class":151,"line":18536},[149,94402,3906],{"class":155},[149,94404,94405,94407,94409],{"class":151,"line":18541},[149,94406,54115],{"class":155},[149,94408,53512],{"class":159},[149,94410,190],{"class":155},[149,94412,94413,94415,94417],{"class":151,"line":18555},[149,94414,665],{"class":155},[149,94416,53499],{"class":159},[149,94418,190],{"class":155},[149,94420,94421],{"class":151,"line":18560},[149,94422,4119],{"emptyLinePlaceholder":1800},[149,94424,94425,94427,94429],{"class":151,"line":18565},[149,94426,665],{"class":155},[149,94428,52341],{"class":159},[149,94430,190],{"class":155},[1783,94432,94433],{},"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":145,"searchDepth":193,"depth":193,"links":94435},[94436,94441,94445,94446,94447,94452,94457,94458,94459,94460,94467,94472,94473,94483,94487,94488,94492],{"id":78373,"depth":193,"text":78374,"children":94437},[94438,94439,94440],{"id":78377,"depth":235,"text":78378},{"id":78402,"depth":235,"text":78403},{"id":78414,"depth":235,"text":78415},{"id":78426,"depth":193,"text":78427,"children":94442},[94443,94444],{"id":78430,"depth":235,"text":78431},{"id":78445,"depth":235,"text":78446},{"id":78497,"depth":193,"text":78498},{"id":78541,"depth":193,"text":78542},{"id":78558,"depth":193,"text":78559,"children":94448},[94449,94450,94451],{"id":78562,"depth":235,"text":78563},{"id":78575,"depth":235,"text":78576},{"id":78680,"depth":235,"text":78681},{"id":78969,"depth":193,"text":78970,"children":94453},[94454,94455,94456],{"id":78973,"depth":235,"text":78974},{"id":79416,"depth":235,"text":79417},{"id":79827,"depth":235,"text":79828},{"id":79890,"depth":193,"text":79891},{"id":79969,"depth":193,"text":79970},{"id":80062,"depth":193,"text":80063},{"id":81906,"depth":193,"text":81907,"children":94461},[94462,94463,94464,94465,94466],{"id":81910,"depth":235,"text":81911},{"id":81922,"depth":235,"text":81923},{"id":82141,"depth":235,"text":82142},{"id":82159,"depth":235,"text":82160},{"id":82219,"depth":235,"text":82220},{"id":86487,"depth":193,"text":86488,"children":94468},[94469,94470,94471],{"id":86491,"depth":235,"text":86492},{"id":86509,"depth":235,"text":86510},{"id":86535,"depth":235,"text":86536},{"id":86544,"depth":193,"text":86545},{"id":86566,"depth":193,"text":86567,"children":94474},[94475,94476,94477,94478,94479,94480,94481,94482],{"id":86570,"depth":235,"text":86571},{"id":86831,"depth":235,"text":86832},{"id":87017,"depth":235,"text":87018},{"id":87384,"depth":235,"text":87385},{"id":87500,"depth":235,"text":87501},{"id":87536,"depth":235,"text":87537},{"id":87583,"depth":235,"text":87584},{"id":87617,"depth":235,"text":87618},{"id":88980,"depth":193,"text":88981,"children":94484},[94485,94486],{"id":88984,"depth":235,"text":88985},{"id":89021,"depth":235,"text":89022},{"id":90376,"depth":193,"text":90377},{"id":90747,"depth":193,"text":90748,"children":94489},[94490,94491],{"id":90751,"depth":235,"text":90752},{"id":90785,"depth":235,"text":90786},{"id":91514,"depth":193,"text":91515,"children":94493},[94494,94495,94496,94497],{"id":91518,"depth":235,"text":91519},{"id":92476,"depth":235,"text":92477},{"id":93418,"depth":235,"text":93419},{"id":93492,"depth":235,"text":93493},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78362,"description":1797},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94504,"title":94505,"body":94506,"description":94517,"extension":1798,"meta":94518,"navigation":1800,"path":94520,"seo":94521,"stem":94522,"__hash__":94523},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94507,"toc":94515},[94508],[24,94509,94510,94511],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2102,94512,94513],{"href":94513,"rel":94514},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25573],{"title":145,"searchDepth":193,"depth":193,"links":94516},[],"三件套第三套学习",{"category":94519},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94505,"description":94517},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94525,"title":94526,"body":94527,"description":1797,"extension":1798,"meta":94632,"navigation":1800,"path":94633,"seo":94634,"stem":94635,"__hash__":94636},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94528,"toc":94627},[94529,94536,94539,94542,94545,94549,94558,94561,94564,94568,94577,94580,94584,94587,94607,94610,94624],[24,94530,94531],{},[2102,94532,94535],{"href":94533,"rel":94534},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25573],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94537,94526],{"id":94538},"_1安装",[24,94540,94541],{},"numpy是科学计算基础库,底层是C语言",[24,94543,94544],{},"三种方式：",[14,94546,94548],{"id":94547},"_11-通过pip安装","1.1 通过pip安装",[140,94550,94552],{"className":32084,"code":94551,"language":32086,"meta":145,"style":145},"pip install numpy\n",[48,94553,94554],{"__ignoreMap":145},[149,94555,94556],{"class":151,"line":152},[149,94557,94551],{"class":155},[24,94559,94560],{},"首选方式，自动处理依赖项",[24,94562,94563],{},"在提示系统命令符中使用cmd",[14,94565,94567],{"id":94566},"_12-通过anaconda安装","1.2 通过Anaconda安装",[140,94569,94571],{"className":32084,"code":94570,"language":32086,"meta":145,"style":145},"conda install numpy\n",[48,94572,94573],{"__ignoreMap":145},[149,94574,94575],{"class":151,"line":152},[149,94576,94570],{"class":155},[24,94578,94579],{},"自动解决环境依赖",[14,94581,94583],{"id":94582},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[24,94585,94586],{},"对于Debian\u002FUbuntu",[140,94588,94590],{"className":32084,"code":94589,"language":32086,"meta":145,"style":145},"sudo apt-get install python3-numpy\n",[48,94591,94592],{"__ignoreMap":145},[149,94593,94594,94597,94599,94602,94604],{"class":151,"line":152},[149,94595,94596],{"class":155},"sudo apt",[149,94598,2395],{"class":325},[149,94600,94601],{"class":155},"get install python3",[149,94603,2395],{"class":325},[149,94605,94606],{"class":155},"numpy\n",[24,94608,94609],{},"对于Fedora:",[140,94611,94613],{"className":32084,"code":94612,"language":32086,"meta":145,"style":145},"sudo dnf install python3-numpy\n",[48,94614,94615],{"__ignoreMap":145},[149,94616,94617,94620,94622],{"class":151,"line":152},[149,94618,94619],{"class":155},"sudo dnf install python3",[149,94621,2395],{"class":325},[149,94623,94606],{"class":155},[1783,94625,94626],{},"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":145,"searchDepth":193,"depth":193,"links":94628},[94629,94630,94631],{"id":94547,"depth":193,"text":94548},{"id":94566,"depth":193,"text":94567},{"id":94582,"depth":193,"text":94583},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94526,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94638,"title":94639,"body":94640,"description":1797,"extension":1798,"meta":94753,"navigation":1800,"path":94754,"seo":94755,"stem":94756,"__hash__":94757},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94641,"toc":94751},[94642,94645,94648,94651,94654,94657,94660,94663,94666,94669,94745,94748],[10,94643,94639],{"id":94644},"_10算数函数",[24,94646,94647],{},"加减乘除运算跟python基础语法没区别",[24,94649,94650],{},"除了python那种方法外还可以使用函数",[24,94652,94653],{},"加：np.add(a,b)",[24,94655,94656],{},"减：np.subtract(a,b)",[24,94658,94659],{},"乘：np.multiply(a,b)",[24,94661,94662],{},"除：np.divide(a,b) == a\u002Fb",[24,94664,94665],{},"取余：np.mod(a,b) == a%b",[24,94667,94668],{},"必须会的用法：",[140,94670,94672],{"className":32084,"code":94671,"language":32086,"meta":145,"style":145},"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",[48,94673,94674,94696,94717,94727,94740],{"__ignoreMap":145},[149,94675,94676,94678,94680,94683,94685,94688,94690,94692,94694],{"class":151,"line":152},[149,94677,2102],{"class":155},[149,94679,166],{"class":325},[149,94681,94682],{"class":155},"np.arange(",[149,94684,2283],{"class":309},[149,94686,94687],{"class":155},").reshape(",[149,94689,1939],{"class":309},[149,94691,2241],{"class":155},[149,94693,1939],{"class":309},[149,94695,1878],{"class":155},[149,94697,94698,94700,94702,94705,94707,94709,94711,94713,94715],{"class":151,"line":193},[149,94699,2127],{"class":155},[149,94701,166],{"class":325},[149,94703,94704],{"class":155},"np.array([",[149,94706,2309],{"class":309},[149,94708,2241],{"class":155},[149,94710,2309],{"class":309},[149,94712,2241],{"class":155},[149,94714,2309],{"class":309},[149,94716,6375],{"class":155},[149,94718,94719,94722,94724],{"class":151,"line":235},[149,94720,94721],{"class":155},"result",[149,94723,166],{"class":325},[149,94725,94726],{"class":155},"np.empty_like(a)\n",[149,94728,94729,94732,94735,94737],{"class":151,"line":340},[149,94730,94731],{"class":155},"np.add(a,b,",[149,94733,94734],{"class":6932},"out",[149,94736,166],{"class":325},[149,94738,94739],{"class":155},"result)\n",[149,94741,94742],{"class":151,"line":346},[149,94743,94744],{"class":155},"result\n",[24,94746,94747],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1783,94749,94750],{},"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":145,"searchDepth":193,"depth":193,"links":94752},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94639,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94759,"title":94760,"body":94761,"description":1797,"extension":1798,"meta":95523,"navigation":1800,"path":95524,"seo":95525,"stem":95526,"__hash__":95527},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94762,"toc":95510},[94763,94766,94769,94772,94776,94815,94819,94863,94923,94927,94930,94969,94972,95017,95021,95057,95061,95130,95134,95198,95202,95205,95208,95211,95214,95250,95254,95294,95298,95370,95373,95377,95440,95444,95507],[10,94764,94760],{"id":94765},"_11统计函数",[24,94767,94768],{},"sum max min mean",[24,94770,94771],{},"这些有axis参数，可以指定方向",[14,94773,94775],{"id":94774},"_111-sum求和函数","11.1 sum()求和函数",[140,94777,94779],{"className":32084,"code":94778,"language":32086,"meta":145,"style":145},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[48,94780,94781,94786,94807],{"__ignoreMap":145},[149,94782,94783],{"class":151,"line":152},[149,94784,94785],{"class":295},"#创建一维数组\n",[149,94787,94788,94790,94792,94795,94797,94799,94801,94803,94805],{"class":151,"line":193},[149,94789,2102],{"class":155},[149,94791,166],{"class":325},[149,94793,94794],{"class":155},"np.random.randint(",[149,94796,830],{"class":309},[149,94798,2241],{"class":155},[149,94800,322],{"class":309},[149,94802,2241],{"class":155},[149,94804,2561],{"class":309},[149,94806,1878],{"class":155},[149,94808,94809,94812],{"class":151,"line":235},[149,94810,94811],{"class":155},"np.sum(a)",[149,94813,94814],{"class":295},"#求和\n",[14,94816,94818],{"id":94817},"_112-max求最大值函数","11.2 max()求最大值函数",[140,94820,94822],{"className":32084,"code":94821,"language":32086,"meta":145,"style":145},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[48,94823,94824,94828,94848,94853,94858],{"__ignoreMap":145},[149,94825,94826],{"class":151,"line":152},[149,94827,94785],{"class":295},[149,94829,94830,94832,94834,94836,94838,94840,94842,94844,94846],{"class":151,"line":193},[149,94831,2102],{"class":155},[149,94833,166],{"class":325},[149,94835,94794],{"class":155},[149,94837,830],{"class":309},[149,94839,2241],{"class":155},[149,94841,322],{"class":309},[149,94843,2241],{"class":155},[149,94845,2561],{"class":309},[149,94847,1878],{"class":155},[149,94849,94850],{"class":151,"line":235},[149,94851,94852],{"class":155},"np.max(a)\n",[149,94854,94855],{"class":151,"line":340},[149,94856,94857],{"class":295},"#最大索引(求最大元素的索引)arg\n",[149,94859,94860],{"class":151,"line":346},[149,94861,94862],{"class":155},"np.argmax(a)\n",[140,94864,94866],{"className":32084,"code":94865,"language":32086,"meta":145,"style":145},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[48,94867,94868,94889,94909,94913],{"__ignoreMap":145},[149,94869,94870,94872,94874,94877,94879,94881,94883,94885,94887],{"class":151,"line":152},[149,94871,12633],{"class":155},[149,94873,166],{"class":325},[149,94875,94876],{"class":155}," np.array([",[149,94878,830],{"class":309},[149,94880,329],{"class":155},[149,94882,2182],{"class":309},[149,94884,329],{"class":155},[149,94886,1939],{"class":309},[149,94888,6375],{"class":155},[149,94890,94891,94893,94895,94897,94899,94901,94903,94905,94907],{"class":151,"line":193},[149,94892,12659],{"class":155},[149,94894,166],{"class":325},[149,94896,94876],{"class":155},[149,94898,1939],{"class":309},[149,94900,329],{"class":155},[149,94902,1045],{"class":309},[149,94904,329],{"class":155},[149,94906,2157],{"class":309},[149,94908,6375],{"class":155},[149,94910,94911],{"class":151,"line":235},[149,94912,4119],{"emptyLinePlaceholder":1800},[149,94914,94915,94917,94920],{"class":151,"line":340},[149,94916,32121],{"class":309},[149,94918,94919],{"class":155},"(np.maximum(a, b))   ",[149,94921,94922],{"class":295},"# [3 5 4]，每个位置上取较大值\n",[14,94924,94926],{"id":94925},"_113-mean求平均值函数","11.3 mean()求平均值函数",[24,94928,94929],{},"①一维数组：",[140,94931,94933],{"className":32084,"code":94932,"language":32086,"meta":145,"style":145},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[48,94934,94935,94939,94959,94964],{"__ignoreMap":145},[149,94936,94937],{"class":151,"line":152},[149,94938,94785],{"class":295},[149,94940,94941,94943,94945,94947,94949,94951,94953,94955,94957],{"class":151,"line":193},[149,94942,2102],{"class":155},[149,94944,166],{"class":325},[149,94946,94794],{"class":155},[149,94948,830],{"class":309},[149,94950,2241],{"class":155},[149,94952,322],{"class":309},[149,94954,2241],{"class":155},[149,94956,2561],{"class":309},[149,94958,1878],{"class":155},[149,94960,94961],{"class":151,"line":235},[149,94962,94963],{"class":295},"#求平均值\n",[149,94965,94966],{"class":151,"line":340},[149,94967,94968],{"class":155},"np.mean(a)\n",[24,94970,94971],{},"②二维数组",[140,94973,94975],{"className":32084,"code":94974,"language":32086,"meta":145,"style":145},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[48,94976,94977,94982,95007,95012],{"__ignoreMap":145},[149,94978,94979],{"class":151,"line":152},[149,94980,94981],{"class":295},"#二维数组\n",[149,94983,94984,94987,94989,94991,94993,94995,94997,94999,95001,95003,95005],{"class":151,"line":193},[149,94985,94986],{"class":155},"aa",[149,94988,166],{"class":325},[149,94990,94682],{"class":155},[149,94992,830],{"class":309},[149,94994,2241],{"class":155},[149,94996,2386],{"class":309},[149,94998,94687],{"class":155},[149,95000,1939],{"class":309},[149,95002,2241],{"class":155},[149,95004,2157],{"class":309},[149,95006,1878],{"class":155},[149,95008,95009],{"class":151,"line":235},[149,95010,95011],{"class":295},"#对数组中的所有数求平均\n",[149,95013,95014],{"class":151,"line":340},[149,95015,95016],{"class":155},"np.mean(aa)\n",[14,95018,95020],{"id":95019},"_114-median求中位数函数","11.4 median()求中位数函数",[140,95022,95024],{"className":32084,"code":95023,"language":32086,"meta":145,"style":145},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[48,95025,95026,95031,95047,95052],{"__ignoreMap":145},[149,95027,95028],{"class":151,"line":152},[149,95029,95030],{"class":295},"#求中位数\n",[149,95032,95033,95035,95037,95039,95041,95043,95045],{"class":151,"line":193},[149,95034,2127],{"class":155},[149,95036,166],{"class":325},[149,95038,94682],{"class":155},[149,95040,830],{"class":309},[149,95042,2241],{"class":155},[149,95044,2309],{"class":309},[149,95046,1878],{"class":155},[149,95048,95049],{"class":151,"line":235},[149,95050,95051],{"class":155},"np.median(b)\n",[149,95053,95054],{"class":151,"line":340},[149,95055,95056],{"class":295},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95058,95060],{"id":95059},"_115-power求幂运算函数","11.5 power()求幂运算函数",[140,95062,95064],{"className":32084,"code":95063,"language":32086,"meta":145,"style":145},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[48,95065,95066,95082,95087,95092,95101,95106,95115],{"__ignoreMap":145},[149,95067,95068,95070,95072,95074,95076,95078,95080],{"class":151,"line":152},[149,95069,2127],{"class":155},[149,95071,166],{"class":325},[149,95073,94682],{"class":155},[149,95075,830],{"class":309},[149,95077,2241],{"class":155},[149,95079,2309],{"class":309},[149,95081,1878],{"class":155},[149,95083,95084],{"class":151,"line":193},[149,95085,95086],{"class":295},"#幂运算\n",[149,95088,95089],{"class":151,"line":235},[149,95090,95091],{"class":295},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[149,95093,95094,95097,95099],{"class":151,"line":340},[149,95095,95096],{"class":155},"np.power(b,",[149,95098,1045],{"class":309},[149,95100,1878],{"class":155},[149,95102,95103],{"class":151,"line":346},[149,95104,95105],{"class":295},"#或者以下代码，将数据存储起来\n",[149,95107,95108,95110,95112],{"class":151,"line":352},[149,95109,2706],{"class":155},[149,95111,166],{"class":325},[149,95113,95114],{"class":155},"np.empty_like(b)\n",[149,95116,95117,95119,95121,95123,95125,95127],{"class":151,"line":1021},[149,95118,95096],{"class":155},[149,95120,1045],{"class":309},[149,95122,2241],{"class":155},[149,95124,94734],{"class":6932},[149,95126,166],{"class":325},[149,95128,95129],{"class":155},"y)\n",[14,95131,95133],{"id":95132},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[140,95135,95137],{"className":32084,"code":95136,"language":32086,"meta":145,"style":145},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[48,95138,95139,95155,95160,95165,95169,95187],{"__ignoreMap":145},[149,95140,95141,95143,95145,95147,95149,95151,95153],{"class":151,"line":152},[149,95142,2127],{"class":155},[149,95144,166],{"class":325},[149,95146,94682],{"class":155},[149,95148,830],{"class":309},[149,95150,2241],{"class":155},[149,95152,2309],{"class":309},[149,95154,1878],{"class":155},[149,95156,95157],{"class":151,"line":193},[149,95158,95159],{"class":295},"#开方\n",[149,95161,95162],{"class":151,"line":235},[149,95163,95164],{"class":155},"np.sqrt(b)\n",[149,95166,95167],{"class":151,"line":340},[149,95168,95105],{"class":295},[149,95170,95171,95173,95175,95178,95181,95183,95185],{"class":151,"line":346},[149,95172,2706],{"class":155},[149,95174,166],{"class":325},[149,95176,95177],{"class":155},"np.empty_like(b,",[149,95179,95180],{"class":6932},"dtype",[149,95182,166],{"class":325},[149,95184,1910],{"class":309},[149,95186,1878],{"class":155},[149,95188,95189,95192,95194,95196],{"class":151,"line":352},[149,95190,95191],{"class":155},"np.sqrt(b,",[149,95193,94734],{"class":6932},[149,95195,166],{"class":325},[149,95197,95129],{"class":155},[14,95199,95201],{"id":95200},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[24,95203,95204],{},"对数组中的元素累计求和，可指定轴",[24,95206,95207],{},"#累计求和的意思是：",[24,95209,95210],{},"a = np.array([1, 2, 3, 4])",[24,95212,95213],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[140,95215,95217],{"className":32084,"code":95216,"language":32086,"meta":145,"style":145},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[48,95218,95219,95235,95240,95245],{"__ignoreMap":145},[149,95220,95221,95223,95225,95227,95229,95231,95233],{"class":151,"line":152},[149,95222,2127],{"class":155},[149,95224,166],{"class":325},[149,95226,94682],{"class":155},[149,95228,830],{"class":309},[149,95230,2241],{"class":155},[149,95232,2309],{"class":309},[149,95234,1878],{"class":155},[149,95236,95237],{"class":151,"line":193},[149,95238,95239],{"class":155},"np.cumsum(b)\n",[149,95241,95242],{"class":151,"line":235},[149,95243,95244],{"class":295},"#结果：\n",[149,95246,95247],{"class":151,"line":340},[149,95248,95249],{"class":295},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95251,95253],{"id":95252},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[140,95255,95257],{"className":32084,"code":95256,"language":32086,"meta":145,"style":145},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[48,95258,95259,95275,95280,95285,95289],{"__ignoreMap":145},[149,95260,95261,95263,95265,95267,95269,95271,95273],{"class":151,"line":152},[149,95262,2127],{"class":155},[149,95264,166],{"class":325},[149,95266,94682],{"class":155},[149,95268,830],{"class":309},[149,95270,2241],{"class":155},[149,95272,2309],{"class":309},[149,95274,1878],{"class":155},[149,95276,95277],{"class":151,"line":193},[149,95278,95279],{"class":295},"#对数组中的元素累计求积，可指定轴\n",[149,95281,95282],{"class":151,"line":235},[149,95283,95284],{"class":155},"np.cumprod(b)\n",[149,95286,95287],{"class":151,"line":340},[149,95288,95244],{"class":295},[149,95290,95291],{"class":151,"line":346},[149,95292,95293],{"class":295},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95295,95297],{"id":95296},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[140,95299,95301],{"className":32084,"code":95300,"language":32086,"meta":145,"style":145},"#删除数组中的重复数据，并对数据进行排序\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",[48,95302,95303,95308,95356,95361,95365],{"__ignoreMap":145},[149,95304,95305],{"class":151,"line":152},[149,95306,95307],{"class":295},"#删除数组中的重复数据，并对数据进行排序\n",[149,95309,95310,95312,95314,95316,95318,95320,95322,95324,95326,95328,95330,95332,95334,95336,95338,95340,95342,95344,95346,95348,95350,95352,95354],{"class":151,"line":193},[149,95311,2102],{"class":155},[149,95313,166],{"class":325},[149,95315,94704],{"class":155},[149,95317,830],{"class":309},[149,95319,2241],{"class":155},[149,95321,1045],{"class":309},[149,95323,2241],{"class":155},[149,95325,1939],{"class":309},[149,95327,2241],{"class":155},[149,95329,2361],{"class":309},[149,95331,2241],{"class":155},[149,95333,1939],{"class":309},[149,95335,2241],{"class":155},[149,95337,2309],{"class":309},[149,95339,2241],{"class":155},[149,95341,2062],{"class":309},[149,95343,2241],{"class":155},[149,95345,2056],{"class":309},[149,95347,2241],{"class":155},[149,95349,2636],{"class":309},[149,95351,2241],{"class":155},[149,95353,2157],{"class":309},[149,95355,6375],{"class":155},[149,95357,95358],{"class":151,"line":235},[149,95359,95360],{"class":155},"np.unique(a)\n",[149,95362,95363],{"class":151,"line":340},[149,95364,95244],{"class":295},[149,95366,95367],{"class":151,"line":346},[149,95368,95369],{"class":295},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[24,95371,95372],{},"升序形式排序",[14,95374,95376],{"id":95375},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[140,95378,95380],{"className":32084,"code":95379,"language":32086,"meta":145,"style":145},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[48,95381,95382,95430,95435],{"__ignoreMap":145},[149,95383,95384,95386,95388,95390,95392,95394,95396,95398,95400,95402,95404,95406,95408,95410,95412,95414,95416,95418,95420,95422,95424,95426,95428],{"class":151,"line":152},[149,95385,2102],{"class":155},[149,95387,166],{"class":325},[149,95389,94704],{"class":155},[149,95391,830],{"class":309},[149,95393,2241],{"class":155},[149,95395,1045],{"class":309},[149,95397,2241],{"class":155},[149,95399,1939],{"class":309},[149,95401,2241],{"class":155},[149,95403,2361],{"class":309},[149,95405,2241],{"class":155},[149,95407,1939],{"class":309},[149,95409,2241],{"class":155},[149,95411,2309],{"class":309},[149,95413,2241],{"class":155},[149,95415,2062],{"class":309},[149,95417,2241],{"class":155},[149,95419,2056],{"class":309},[149,95421,2241],{"class":155},[149,95423,2636],{"class":309},[149,95425,2241],{"class":155},[149,95427,2157],{"class":309},[149,95429,6375],{"class":155},[149,95431,95432],{"class":151,"line":193},[149,95433,95434],{"class":295},"#返回数组中非零元素的索引\n",[149,95436,95437],{"class":151,"line":235},[149,95438,95439],{"class":155},"np.nonzero(a)\n",[14,95441,95443],{"id":95442},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[140,95445,95447],{"className":32084,"code":95446,"language":32086,"meta":145,"style":145},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[48,95448,95449,95497,95502],{"__ignoreMap":145},[149,95450,95451,95453,95455,95457,95459,95461,95463,95465,95467,95469,95471,95473,95475,95477,95479,95481,95483,95485,95487,95489,95491,95493,95495],{"class":151,"line":152},[149,95452,2102],{"class":155},[149,95454,166],{"class":325},[149,95456,94704],{"class":155},[149,95458,830],{"class":309},[149,95460,2241],{"class":155},[149,95462,1045],{"class":309},[149,95464,2241],{"class":155},[149,95466,1939],{"class":309},[149,95468,2241],{"class":155},[149,95470,2361],{"class":309},[149,95472,2241],{"class":155},[149,95474,1939],{"class":309},[149,95476,2241],{"class":155},[149,95478,2309],{"class":309},[149,95480,2241],{"class":155},[149,95482,2062],{"class":309},[149,95484,2241],{"class":155},[149,95486,2056],{"class":309},[149,95488,2241],{"class":155},[149,95490,2636],{"class":309},[149,95492,2241],{"class":155},[149,95494,2157],{"class":309},[149,95496,6375],{"class":155},[149,95498,95499],{"class":151,"line":193},[149,95500,95501],{"class":295},"#计算一组数中最大值与最小值的差，可指定轴\n",[149,95503,95504],{"class":151,"line":235},[149,95505,95506],{"class":155},"np.ptp(a)\n",[1783,95508,95509],{},"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":145,"searchDepth":193,"depth":193,"links":95511},[95512,95513,95514,95515,95516,95517,95518,95519,95520,95521,95522],{"id":94774,"depth":193,"text":94775},{"id":94817,"depth":193,"text":94818},{"id":94925,"depth":193,"text":94926},{"id":95019,"depth":193,"text":95020},{"id":95059,"depth":193,"text":95060},{"id":95132,"depth":193,"text":95133},{"id":95200,"depth":193,"text":95201},{"id":95252,"depth":193,"text":95253},{"id":95296,"depth":193,"text":95297},{"id":95375,"depth":193,"text":95376},{"id":95442,"depth":193,"text":95443},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94760,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95529,"title":95530,"body":95531,"description":1797,"extension":1798,"meta":96186,"navigation":1800,"path":96187,"seo":96188,"stem":96189,"__hash__":96190},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95532,"toc":96174},[95533,95536,95540,95543,95759,95763,95766,95975,95979,96045,96050,96054,96057,96060,96098,96102,96105,96110,96114,96117,96120,96125,96129,96132,96136,96139,96142,96147,96151,96154,96157,96162,96166,96171],[10,95534,95530],{"id":95535},"_12其他常用函数",[14,95537,95539],{"id":95538},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[24,95541,95542],{},"将数组的数据按照行列复制扩展",[140,95544,95546],{"className":32084,"code":95545,"language":32086,"meta":145,"style":145},"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",[48,95547,95548,95564,95573,95577,95582,95587,95600,95604,95609,95614,95619,95623,95628,95652,95664,95668,95672,95677,95682,95687,95692,95696,95709,95713,95717,95722,95727,95732,95737,95742,95746,95750,95755],{"__ignoreMap":145},[149,95549,95550,95552,95554,95556,95558,95560,95562],{"class":151,"line":152},[149,95551,2102],{"class":155},[149,95553,166],{"class":325},[149,95555,94682],{"class":155},[149,95557,830],{"class":309},[149,95559,2241],{"class":155},[149,95561,2182],{"class":309},[149,95563,1878],{"class":155},[149,95565,95566,95569,95571],{"class":151,"line":193},[149,95567,95568],{"class":155},"np.tile(a,",[149,95570,1045],{"class":309},[149,95572,1878],{"class":155},[149,95574,95575],{"class":151,"line":235},[149,95576,95244],{"class":295},[149,95578,95579],{"class":151,"line":340},[149,95580,95581],{"class":295},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[149,95583,95584],{"class":151,"line":346},[149,95585,95586],{"class":295},"#行复制两次，列复制三次\n",[149,95588,95589,95592,95594,95596,95598],{"class":151,"line":352},[149,95590,95591],{"class":155},"np.tile(a,(",[149,95593,1045],{"class":309},[149,95595,2241],{"class":155},[149,95597,1939],{"class":309},[149,95599,32203],{"class":155},[149,95601,95602],{"class":151,"line":1021},[149,95603,95244],{"class":295},[149,95605,95606],{"class":151,"line":1035},[149,95607,95608],{"class":169},"'''\n",[149,95610,95611],{"class":151,"line":1054},[149,95612,95613],{"class":169},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[149,95615,95616],{"class":151,"line":1072},[149,95617,95618],{"class":169},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[149,95620,95621],{"class":151,"line":1090},[149,95622,95608],{"class":169},[149,95624,95625],{"class":151,"line":1633},[149,95626,95627],{"class":295},"#创建二维数组\n",[149,95629,95630,95632,95634,95636,95638,95640,95642,95644,95646,95648,95650],{"class":151,"line":1644},[149,95631,94986],{"class":155},[149,95633,166],{"class":325},[149,95635,94682],{"class":155},[149,95637,830],{"class":309},[149,95639,2241],{"class":155},[149,95641,2386],{"class":309},[149,95643,94687],{"class":155},[149,95645,2157],{"class":309},[149,95647,2241],{"class":155},[149,95649,1939],{"class":309},[149,95651,1878],{"class":155},[149,95653,95654,95657,95659,95661],{"class":151,"line":3348},[149,95655,95656],{"class":155},"np.tile(aa,",[149,95658,1045],{"class":309},[149,95660,2292],{"class":155},[149,95662,95663],{"class":295},"#一个数的时候就是行\n",[149,95665,95666],{"class":151,"line":3362},[149,95667,95244],{"class":295},[149,95669,95670],{"class":151,"line":3367},[149,95671,95608],{"class":169},[149,95673,95674],{"class":151,"line":3373},[149,95675,95676],{"class":169},"array([[ 1,  2,  3,  1,  2,  3],\n",[149,95678,95679],{"class":151,"line":3394},[149,95680,95681],{"class":169},"       [ 4,  5,  6,  4,  5,  6],\n",[149,95683,95684],{"class":151,"line":3399},[149,95685,95686],{"class":169},"       [ 7,  8,  9,  7,  8,  9],\n",[149,95688,95689],{"class":151,"line":3413},[149,95690,95691],{"class":169},"       [10, 11, 12, 10, 11, 12]])\n",[149,95693,95694],{"class":151,"line":3418},[149,95695,95608],{"class":169},[149,95697,95698,95701,95703,95705,95707],{"class":151,"line":3447},[149,95699,95700],{"class":155},"np.tile(aa,(",[149,95702,1045],{"class":309},[149,95704,2241],{"class":155},[149,95706,1939],{"class":309},[149,95708,32203],{"class":155},[149,95710,95711],{"class":151,"line":3452},[149,95712,95244],{"class":295},[149,95714,95715],{"class":151,"line":3469},[149,95716,95608],{"class":169},[149,95718,95719],{"class":151,"line":3474},[149,95720,95721],{"class":169},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[149,95723,95724],{"class":151,"line":3479},[149,95725,95726],{"class":169},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[149,95728,95729],{"class":151,"line":3484},[149,95730,95731],{"class":169},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[149,95733,95734],{"class":151,"line":3498},[149,95735,95736],{"class":169},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[149,95738,95739],{"class":151,"line":3503},[149,95740,95741],{"class":169},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[149,95743,95744],{"class":151,"line":4296},[149,95745,95726],{"class":169},[149,95747,95748],{"class":151,"line":4310},[149,95749,95731],{"class":169},[149,95751,95752],{"class":151,"line":4318},[149,95753,95754],{"class":169},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[149,95756,95757],{"class":151,"line":4323},[149,95758,95608],{"class":169},[14,95760,95762],{"id":95761},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[24,95764,95765],{},"repeat()将数组中的每个元素重复若干次",[140,95767,95769],{"className":32084,"code":95768,"language":32086,"meta":145,"style":145},"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",[48,95770,95771,95787,95796,95800,95805,95829,95834,95843,95847,95852,95856,95861,95877,95881,95885,95890,95895,95900,95904,95909,95913,95918,95923,95927,95943,95947,95951,95956,95961,95966,95971],{"__ignoreMap":145},[149,95772,95773,95775,95777,95779,95781,95783,95785],{"class":151,"line":152},[149,95774,2102],{"class":155},[149,95776,166],{"class":325},[149,95778,94682],{"class":155},[149,95780,830],{"class":309},[149,95782,2241],{"class":155},[149,95784,2182],{"class":309},[149,95786,1878],{"class":155},[149,95788,95789,95792,95794],{"class":151,"line":193},[149,95790,95791],{"class":155},"np.repeat(a,",[149,95793,1939],{"class":309},[149,95795,1878],{"class":155},[149,95797,95798],{"class":151,"line":235},[149,95799,95244],{"class":295},[149,95801,95802],{"class":151,"line":340},[149,95803,95804],{"class":295},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[149,95806,95807,95809,95811,95813,95815,95817,95819,95821,95823,95825,95827],{"class":151,"line":346},[149,95808,94986],{"class":155},[149,95810,166],{"class":325},[149,95812,94682],{"class":155},[149,95814,830],{"class":309},[149,95816,2241],{"class":155},[149,95818,2386],{"class":309},[149,95820,94687],{"class":155},[149,95822,2157],{"class":309},[149,95824,2241],{"class":155},[149,95826,1939],{"class":309},[149,95828,1878],{"class":155},[149,95830,95831],{"class":151,"line":352},[149,95832,95833],{"class":295},"#这个重复之后二维变成一维\n",[149,95835,95836,95839,95841],{"class":151,"line":1021},[149,95837,95838],{"class":155},"np.repeat(aa,",[149,95840,1045],{"class":309},[149,95842,1878],{"class":155},[149,95844,95845],{"class":151,"line":1035},[149,95846,95608],{"class":169},[149,95848,95849],{"class":151,"line":1054},[149,95850,95851],{"class":169},"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",[149,95853,95854],{"class":151,"line":1072},[149,95855,95608],{"class":169},[149,95857,95858],{"class":151,"line":1090},[149,95859,95860],{"class":295},"#指定axis\n",[149,95862,95863,95865,95867,95869,95871,95873,95875],{"class":151,"line":1633},[149,95864,95838],{"class":155},[149,95866,1045],{"class":309},[149,95868,2241],{"class":155},[149,95870,49220],{"class":6932},[149,95872,166],{"class":325},[149,95874,2056],{"class":309},[149,95876,1878],{"class":155},[149,95878,95879],{"class":151,"line":1644},[149,95880,95244],{"class":295},[149,95882,95883],{"class":151,"line":3348},[149,95884,95608],{"class":169},[149,95886,95887],{"class":151,"line":3362},[149,95888,95889],{"class":169},"array([[ 1,  2,  3],\n",[149,95891,95892],{"class":151,"line":3367},[149,95893,95894],{"class":169},"       [ 1,  2,  3],\n",[149,95896,95897],{"class":151,"line":3373},[149,95898,95899],{"class":169},"       [ 4,  5,  6],\n",[149,95901,95902],{"class":151,"line":3394},[149,95903,95899],{"class":169},[149,95905,95906],{"class":151,"line":3399},[149,95907,95908],{"class":169},"       [ 7,  8,  9],\n",[149,95910,95911],{"class":151,"line":3413},[149,95912,95908],{"class":169},[149,95914,95915],{"class":151,"line":3418},[149,95916,95917],{"class":169},"       [10, 11, 12],\n",[149,95919,95920],{"class":151,"line":3447},[149,95921,95922],{"class":169},"       [10, 11, 12]])\n",[149,95924,95925],{"class":151,"line":3452},[149,95926,95608],{"class":169},[149,95928,95929,95931,95933,95935,95937,95939,95941],{"class":151,"line":3469},[149,95930,95838],{"class":155},[149,95932,1045],{"class":309},[149,95934,2241],{"class":155},[149,95936,49220],{"class":6932},[149,95938,166],{"class":325},[149,95940,830],{"class":309},[149,95942,1878],{"class":155},[149,95944,95945],{"class":151,"line":3474},[149,95946,95244],{"class":295},[149,95948,95949],{"class":151,"line":3479},[149,95950,95608],{"class":169},[149,95952,95953],{"class":151,"line":3484},[149,95954,95955],{"class":169},"array([[ 1,  1,  2,  2,  3,  3],\n",[149,95957,95958],{"class":151,"line":3498},[149,95959,95960],{"class":169},"       [ 4,  4,  5,  5,  6,  6],\n",[149,95962,95963],{"class":151,"line":3503},[149,95964,95965],{"class":169},"       [ 7,  7,  8,  8,  9,  9],\n",[149,95967,95968],{"class":151,"line":4296},[149,95969,95970],{"class":169},"       [10, 10, 11, 11, 12, 12]])\n",[149,95972,95973],{"class":151,"line":4310},[149,95974,95608],{"class":169},[14,95976,95978],{"id":95977},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[140,95980,95982],{"className":32084,"code":95981,"language":32086,"meta":145,"style":145},"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",[48,95983,95984,96000,96005,96017,96021,96026,96036,96040],{"__ignoreMap":145},[149,95985,95986,95988,95990,95992,95994,95996,95998],{"class":151,"line":152},[149,95987,2102],{"class":155},[149,95989,166],{"class":325},[149,95991,94682],{"class":155},[149,95993,830],{"class":309},[149,95995,2241],{"class":155},[149,95997,2182],{"class":309},[149,95999,1878],{"class":155},[149,96001,96002],{"class":151,"line":193},[149,96003,96004],{"class":295},"#array([，2，3，4])\n",[149,96006,96007,96010,96012,96014],{"class":151,"line":235},[149,96008,96009],{"class":155},"np.roll(a,",[149,96011,1045],{"class":309},[149,96013,2292],{"class":155},[149,96015,96016],{"class":295},"#传正数向后调多少位，传负数向前调多少位\n",[149,96018,96019],{"class":151,"line":340},[149,96020,95244],{"class":295},[149,96022,96023],{"class":151,"line":346},[149,96024,96025],{"class":295},"#array([3, 4, 1, 2])\n",[149,96027,96028,96030,96032,96034],{"class":151,"line":352},[149,96029,96009],{"class":155},[149,96031,2395],{"class":325},[149,96033,830],{"class":309},[149,96035,1878],{"class":155},[149,96037,96038],{"class":151,"line":1021},[149,96039,95244],{"class":295},[149,96041,96042],{"class":151,"line":1035},[149,96043,96044],{"class":295},"#array([2, 3, 4, 1])\n",[24,96046,96047],{},[83,96048],{"alt":145,"src":96049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96051,96053],{"id":96052},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[24,96055,96056],{},"resize()重新调整数组的大小",[24,96058,96059],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[140,96061,96063],{"className":32084,"code":96062,"language":32086,"meta":145,"style":145},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[48,96064,96065,96070,96083],{"__ignoreMap":145},[149,96066,96067],{"class":151,"line":152},[149,96068,96069],{"class":295},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[149,96071,96072,96075,96077,96079,96081],{"class":151,"line":193},[149,96073,96074],{"class":155},"np.resize(aa,(",[149,96076,1045],{"class":309},[149,96078,2241],{"class":155},[149,96080,2207],{"class":309},[149,96082,32203],{"class":155},[149,96084,96085,96087,96089,96091,96093,96095],{"class":151,"line":235},[149,96086,96074],{"class":155},[149,96088,1045],{"class":309},[149,96090,2241],{"class":155},[149,96092,2283],{"class":309},[149,96094,84452],{"class":155},[149,96096,96097],{"class":295},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96099,96101],{"id":96100},"_125-placeput函数","12.5 place()\u002Fput()函数",[24,96103,96104],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[24,96106,96107],{},[83,96108],{"alt":145,"src":96109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96111,96113],{"id":96112},"_126-保存加载文件","12.6 保存加载文件",[24,96115,96116],{},"savetxt():将数据保存到txt文件中",[24,96118,96119],{},"loadtxt():从文件加载数据",[24,96121,96122],{},[83,96123],{"alt":145,"src":96124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96126,96128],{"id":96127},"_127-genfromtxt函数","12.7 genfromtxt()函数",[24,96130,96131],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96133,96135],{"id":96134},"_128-anyall函数","12.8 any()\u002Fall()函数",[24,96137,96138],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[24,96140,96141],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[24,96143,96144],{},[83,96145],{"alt":145,"src":96146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96148,96150],{"id":96149},"_129-where语句","12.9 where语句",[24,96152,96153],{},"np.where(条件,x,y)",[24,96155,96156],{},"如果条件为True,对应值为x,否则对应值为y",[24,96158,96159],{},[83,96160],{"alt":145,"src":96161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96163,96165],{"id":96164},"_1210-dot矩阵","12.10 dot()矩阵",[24,96167,96168],{},[83,96169],{"alt":145,"src":96170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1783,96172,96173],{},"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":145,"searchDepth":193,"depth":193,"links":96175},[96176,96177,96178,96179,96180,96181,96182,96183,96184,96185],{"id":95538,"depth":193,"text":95539},{"id":95761,"depth":193,"text":95762},{"id":95977,"depth":193,"text":95978},{"id":96052,"depth":193,"text":96053},{"id":96100,"depth":193,"text":96101},{"id":96112,"depth":193,"text":96113},{"id":96127,"depth":193,"text":96128},{"id":96134,"depth":193,"text":96135},{"id":96149,"depth":193,"text":96150},{"id":96164,"depth":193,"text":96165},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95530,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96192,"title":96193,"body":96194,"description":1797,"extension":1798,"meta":96547,"navigation":1800,"path":96548,"seo":96549,"stem":96550,"__hash__":96551},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96195,"toc":96545},[96196,96199,96202,96205,96208,96211,96276,96278,96542],[10,96197,96193],{"id":96198},"_13数组排序",[24,96200,96201],{},"排序主要用到的方法是np.sort和np.argsort",[24,96203,96204],{},"其中np.sort()对数组直接排序",[24,96206,96207],{},"而np.argsort()是返回排序后的原始索引",[24,96209,96210],{},"①一维数组",[140,96212,96214],{"className":32084,"code":96213,"language":32086,"meta":145,"style":145},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[48,96215,96216,96220,96260,96268],{"__ignoreMap":145},[149,96217,96218],{"class":151,"line":152},[149,96219,94785],{"class":295},[149,96221,96222,96224,96226,96228,96230,96232,96234,96236,96238,96240,96242,96244,96246,96248,96250,96252,96254,96256,96258],{"class":151,"line":193},[149,96223,2102],{"class":155},[149,96225,166],{"class":325},[149,96227,94704],{"class":155},[149,96229,1939],{"class":309},[149,96231,2241],{"class":155},[149,96233,2361],{"class":309},[149,96235,2241],{"class":155},[149,96237,2258],{"class":309},[149,96239,2241],{"class":155},[149,96241,2636],{"class":309},[149,96243,2241],{"class":155},[149,96245,2143],{"class":309},[149,96247,2241],{"class":155},[149,96249,2753],{"class":309},[149,96251,2241],{"class":155},[149,96253,2207],{"class":309},[149,96255,2241],{"class":155},[149,96257,2309],{"class":309},[149,96259,6375],{"class":155},[149,96261,96262,96265],{"class":151,"line":235},[149,96263,96264],{"class":155},"np.sort(a)",[149,96266,96267],{"class":295},"#升序排序\n",[149,96269,96270,96273],{"class":151,"line":340},[149,96271,96272],{"class":155},"np.argsort(a)",[149,96274,96275],{"class":295},"#按照元素大小来索引排序\n",[24,96277,94971],{},[140,96279,96281],{"className":32084,"code":96280,"language":32086,"meta":145,"style":145},"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",[48,96282,96283,96295,96321,96326,96330,96335,96340,96345,96350,96354,96362,96366,96371,96376,96381,96386,96390,96395,96408,96412,96417,96422,96427,96432,96436,96441,96453,96457,96461,96465,96469,96473,96477,96482,96497,96502,96511,96516,96520,96524,96529,96533,96538],{"__ignoreMap":145},[149,96284,96285,96288,96290,96292],{"class":151,"line":152},[149,96286,96287],{"class":155},"np.random.seed(",[149,96289,2056],{"class":309},[149,96291,2292],{"class":155},[149,96293,96294],{"class":295},"#保证每次值一样\n",[149,96296,96297,96299,96301,96303,96305,96307,96309,96311,96313,96315,96317,96319],{"class":151,"line":193},[149,96298,94986],{"class":155},[149,96300,166],{"class":325},[149,96302,94794],{"class":155},[149,96304,322],{"class":309},[149,96306,2241],{"class":155},[149,96308,33202],{"class":6932},[149,96310,166],{"class":325},[149,96312,319],{"class":155},[149,96314,2157],{"class":309},[149,96316,2241],{"class":155},[149,96318,2207],{"class":309},[149,96320,32203],{"class":155},[149,96322,96323],{"class":151,"line":235},[149,96324,96325],{"class":295},"#原数组：\n",[149,96327,96328],{"class":151,"line":340},[149,96329,95608],{"class":169},[149,96331,96332],{"class":151,"line":346},[149,96333,96334],{"class":169},"array([[44, 47, 64, 67, 67,  9],\n",[149,96336,96337],{"class":151,"line":352},[149,96338,96339],{"class":169},"       [83, 21, 36, 87, 70, 88],\n",[149,96341,96342],{"class":151,"line":1021},[149,96343,96344],{"class":169},"       [88, 12, 58, 65, 39, 87],\n",[149,96346,96347],{"class":151,"line":1035},[149,96348,96349],{"class":169},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[149,96351,96352],{"class":151,"line":1054},[149,96353,95608],{"class":169},[149,96355,96356,96359],{"class":151,"line":1072},[149,96357,96358],{"class":155},"np.sort(aa)",[149,96360,96361],{"class":295},"#每行进行了排序\n",[149,96363,96364],{"class":151,"line":1090},[149,96365,95608],{"class":169},[149,96367,96368],{"class":151,"line":1633},[149,96369,96370],{"class":169},"array([[ 9, 44, 47, 64, 67, 67],\n",[149,96372,96373],{"class":151,"line":1644},[149,96374,96375],{"class":169},"       [21, 36, 70, 83, 87, 88],\n",[149,96377,96378],{"class":151,"line":3348},[149,96379,96380],{"class":169},"       [12, 39, 58, 65, 87, 88],\n",[149,96382,96383],{"class":151,"line":3362},[149,96384,96385],{"class":169},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[149,96387,96388],{"class":151,"line":3367},[149,96389,95608],{"class":169},[149,96391,96392],{"class":151,"line":3373},[149,96393,96394],{"class":295},"#axis=0时\n",[149,96396,96397,96400,96402,96404,96406],{"class":151,"line":3394},[149,96398,96399],{"class":155},"np.sort(aa,",[149,96401,49220],{"class":6932},[149,96403,166],{"class":325},[149,96405,2056],{"class":309},[149,96407,1878],{"class":155},[149,96409,96410],{"class":151,"line":3399},[149,96411,95608],{"class":169},[149,96413,96414],{"class":151,"line":3413},[149,96415,96416],{"class":169},"array([[44, 12, 36, 37, 25,  9],\n",[149,96418,96419],{"class":151,"line":3418},[149,96420,96421],{"class":169},"       [46, 21, 58, 65, 39, 77],\n",[149,96423,96424],{"class":151,"line":3447},[149,96425,96426],{"class":169},"       [83, 47, 64, 67, 67, 87],\n",[149,96428,96429],{"class":151,"line":3452},[149,96430,96431],{"class":169},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[149,96433,96434],{"class":151,"line":3469},[149,96435,95608],{"class":169},[149,96437,96438],{"class":151,"line":3474},[149,96439,96440],{"class":295},"#axis=1时,为默认值\n",[149,96442,96443,96445,96447,96449,96451],{"class":151,"line":3479},[149,96444,96399],{"class":155},[149,96446,49220],{"class":6932},[149,96448,166],{"class":325},[149,96450,830],{"class":309},[149,96452,1878],{"class":155},[149,96454,96455],{"class":151,"line":3484},[149,96456,95608],{"class":169},[149,96458,96459],{"class":151,"line":3498},[149,96460,96370],{"class":169},[149,96462,96463],{"class":151,"line":3503},[149,96464,96375],{"class":169},[149,96466,96467],{"class":151,"line":4296},[149,96468,96380],{"class":169},[149,96470,96471],{"class":151,"line":4310},[149,96472,96385],{"class":169},[149,96474,96475],{"class":151,"line":4318},[149,96476,95608],{"class":169},[149,96478,96479],{"class":151,"line":4323},[149,96480,96481],{"class":295},"#按最后一列排序\n",[149,96483,96484,96486,96488,96491,96493,96495],{"class":151,"line":4329},[149,96485,2127],{"class":155},[149,96487,166],{"class":325},[149,96489,96490],{"class":155},"aa[:,",[149,96492,2395],{"class":325},[149,96494,830],{"class":309},[149,96496,34952],{"class":155},[149,96498,96499],{"class":151,"line":4335},[149,96500,96501],{"class":295},"#获取最后一列排好序的索引\n",[149,96503,96504,96506,96508],{"class":151,"line":4340},[149,96505,75740],{"class":155},[149,96507,166],{"class":325},[149,96509,96510],{"class":155},"np.argsort(b)\n",[149,96512,96513],{"class":151,"line":9663},[149,96514,96515],{"class":155},"aa[index]\n",[149,96517,96518],{"class":151,"line":9687},[149,96519,95608],{"class":169},[149,96521,96522],{"class":151,"line":9692},[149,96523,96334],{"class":169},[149,96525,96526],{"class":151,"line":9698},[149,96527,96528],{"class":169},"       [46, 88, 81, 37, 25, 77],\n",[149,96530,96531],{"class":151,"line":9725},[149,96532,96344],{"class":169},[149,96534,96535],{"class":151,"line":9730},[149,96536,96537],{"class":169},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[149,96539,96540],{"class":151,"line":9736},[149,96541,95608],{"class":169},[1783,96543,96544],{},"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":145,"searchDepth":193,"depth":193,"links":96546},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96193,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96553,"title":96554,"body":96555,"description":1797,"extension":1798,"meta":96585,"navigation":1800,"path":96586,"seo":96587,"stem":96588,"__hash__":96589},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96556,"toc":96583},[96557,96560,96563,96566,96569,96572,96575,96578],[10,96558,96554],{"id":96559},"_14广播机制",[24,96561,96562],{},"广播的规则：",[24,96564,96565],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[24,96567,96568],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[24,96570,96571],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[24,96573,96574],{},"3.如果没有维度形状为1，则会引发异常",[24,96576,96577],{},"也就是只有维度或者个数为1才可以进行广播操作",[24,96579,96580],{},[83,96581],{"alt":145,"src":96582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":145,"searchDepth":193,"depth":193,"links":96584},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96554,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96591,"title":96592,"body":96593,"description":1797,"extension":1798,"meta":96691,"navigation":1800,"path":96692,"seo":96693,"stem":96694,"__hash__":96695},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96594,"toc":96689},[96595,96598,96601,96686],[10,96596,96592],{"id":96597},"_15比较掩码",[24,96599,96600],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[140,96602,96604],{"className":32084,"code":96603,"language":32086,"meta":145,"style":145},"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",[48,96605,96606,96652,96663,96677,96681],{"__ignoreMap":145},[149,96607,96608,96610,96612,96615,96617,96619,96621,96623,96625,96627,96629,96631,96633,96635,96637,96639,96641,96643,96645,96647,96649],{"class":151,"line":152},[149,96609,2102],{"class":155},[149,96611,166],{"class":325},[149,96613,96614],{"class":155},"np.array([[",[149,96616,830],{"class":309},[149,96618,2241],{"class":155},[149,96620,1045],{"class":309},[149,96622,2241],{"class":155},[149,96624,1939],{"class":309},[149,96626,49736],{"class":155},[149,96628,2335],{"class":309},[149,96630,2241],{"class":155},[149,96632,2361],{"class":309},[149,96634,2241],{"class":155},[149,96636,2386],{"class":309},[149,96638,49736],{"class":155},[149,96640,2586],{"class":309},[149,96642,2241],{"class":155},[149,96644,2611],{"class":309},[149,96646,2241],{"class":155},[149,96648,2636],{"class":309},[149,96650,96651],{"class":155},"]])\n",[149,96653,96654,96656,96658,96660],{"class":151,"line":193},[149,96655,2102],{"class":155},[149,96657,156],{"class":325},[149,96659,2561],{"class":309},[149,96661,96662],{"class":295},"#结果是一个由True,False组成的数组\n",[149,96664,96665,96668,96670,96672,96674],{"class":151,"line":235},[149,96666,96667],{"class":155},"a[a",[149,96669,156],{"class":325},[149,96671,2561],{"class":309},[149,96673,2799],{"class":155},[149,96675,96676],{"class":295},"#小于20的元素会存到这个数组中\n",[149,96678,96679],{"class":151,"line":340},[149,96680,95244],{"class":295},[149,96682,96683],{"class":151,"line":346},[149,96684,96685],{"class":295},"#array([ 1,  2,  3, 11, 12, 13])\n",[1783,96687,96688],{},"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":145,"searchDepth":193,"depth":193,"links":96690},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96592,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96697,"title":96698,"body":96699,"description":1797,"extension":1798,"meta":96791,"navigation":1800,"path":96792,"seo":96793,"stem":96794,"__hash__":96795},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96700,"toc":96789},[96701,96704,96707,96710,96713,96716,96781,96786],[10,96702,96698],{"id":96703},"_16魔法命令time",[24,96705,96706],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[24,96708,96709],{},"%:行模式",[24,96711,96712],{},"%%:单元格模式",[24,96714,96715],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[140,96717,96719],{"className":32084,"code":96718,"language":32086,"meta":145,"style":145},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[48,96720,96721,96726,96733,96738,96747,96760,96764,96772],{"__ignoreMap":145},[149,96722,96723],{"class":151,"line":152},[149,96724,96725],{"class":295},"#程序执行时间\n",[149,96727,96728,96730],{"class":151,"line":193},[149,96729,32098],{"class":325},[149,96731,96732],{"class":155}," time \n",[149,96734,96735],{"class":151,"line":235},[149,96736,96737],{"class":295},"#获取时间\n",[149,96739,96740,96743,96745],{"class":151,"line":340},[149,96741,96742],{"class":155},"start",[149,96744,166],{"class":325},[149,96746,34124],{"class":155},[149,96748,96749,96752,96755,96757],{"class":151,"line":346},[149,96750,96751],{"class":155},"time.sleep(",[149,96753,96754],{"class":309},"0.4",[149,96756,2292],{"class":155},[149,96758,96759],{"class":295},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[149,96761,96762],{"class":151,"line":352},[149,96763,96737],{"class":295},[149,96765,96766,96768,96770],{"class":151,"line":1021},[149,96767,47507],{"class":155},[149,96769,166],{"class":325},[149,96771,34124],{"class":155},[149,96773,96774,96776,96778],{"class":151,"line":1035},[149,96775,47507],{"class":155},[149,96777,2395],{"class":325},[149,96779,96780],{"class":155},"start\n",[24,96782,96783],{},[83,96784],{"alt":145,"src":96785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1783,96787,96788],{},"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":145,"searchDepth":193,"depth":193,"links":96790},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96698,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96797,"title":96798,"body":96799,"description":1797,"extension":1798,"meta":96834,"navigation":1800,"path":96835,"seo":96836,"stem":96837,"__hash__":96838},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96800,"toc":96832},[96801,96804,96807,96810,96813,96816,96819,96822,96827],[10,96802,96798],{"id":96803},"_17魔法命令timeit",[24,96805,96806],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[24,96808,96809],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[24,96811,96812],{},"单元格模式：",[24,96814,96815],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[24,96817,96818],{},"初始化语句执行次数由轮数来决定",[24,96820,96821],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[24,96823,96824],{},[83,96825],{"alt":145,"src":96826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[24,96828,96829],{},[83,96830],{"alt":145,"src":96831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":145,"searchDepth":193,"depth":193,"links":96833},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96798,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96840,"title":96841,"body":96842,"description":1797,"extension":1798,"meta":96860,"navigation":1800,"path":96861,"seo":96862,"stem":96863,"__hash__":96864},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96843,"toc":96858},[96844,96847,96850,96853],[10,96845,96841],{"id":96846},"_18魔法命令writefile和run",[24,96848,96849],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[24,96851,96852],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[24,96854,96855],{},[83,96856],{"alt":145,"src":96857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":145,"searchDepth":193,"depth":193,"links":96859},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96841,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96866,"title":96867,"body":96868,"description":1797,"extension":1798,"meta":96921,"navigation":1800,"path":96922,"seo":96923,"stem":96924,"__hash__":96925},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96869,"toc":96919},[96870,96873,96876,96878,96881,96884,96889,96892,96895,96898,96901,96904,96907,96910,96913,96916],[10,96871,96867],{"id":96872},"_19魔法命令memit",[24,96874,96875],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[24,96877,26308],{},[24,96879,96880],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[24,96882,96883],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[24,96885,96886],{},[83,96887],{"alt":145,"src":96888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[24,96890,96891],{},"补充：",[24,96893,96894],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[24,96896,96897],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[24,96899,96900],{},"解决方法：",[24,96902,96903],{},"1.cmd",[24,96905,96906],{},"2.依次输入以下代码：",[24,96908,96909],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[24,96911,96912],{},"pip install --upgrade ipython",[24,96914,96915],{},"#升级 memory_profiler 和 setuptools",[24,96917,96918],{},"pip install --upgrade memory_profiler setuptools",{"title":145,"searchDepth":193,"depth":193,"links":96920},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96867,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96927,"title":96928,"body":96929,"description":1797,"extension":1798,"meta":98575,"navigation":1800,"path":98576,"seo":98577,"stem":98578,"__hash__":98579},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96930,"toc":98545},[96931,96934,96938,96942,97003,97006,97011,97015,97020,97025,97030,97035,97038,97043,97047,97051,97084,97087,97090,97093,97145,97148,97184,97187,97229,97233,97254,97256,97293,97295,97300,97302,97307,97311,97314,97342,97346,97350,97403,97407,97499,97503,97507,97510,97515,97519,97544,97549,97553,97556,97559,97562,97565,97568,97571,97574,97586,97590,97594,97597,97629,97632,97655,97658,97684,97687,97713,97716,97750,97753,97815,97819,97822,97826,97829,97855,97858,97861,97866,97869,97938,97940,97945,98006,98009,98020,98026,98031,98035,98038,98051,98055,98070,98072,98095,98097,98123,98126,98129,98132,98180,98182,98187,98191,98195,98222,98226,98253,98256,98261,98266,98356,98360,98418,98423,98426,98429,98471,98475,98531,98536,98539,98542],[10,96932,96928],{"id":96933},"_2创建数组",[14,96935,96937],{"id":96936},"_21-array函数创建数组","2.1 array()函数创建数组",[19,96939,96941],{"id":96940},"_221-函数语句","2.2.1 函数语句",[140,96943,96945],{"className":32084,"code":96944,"language":32086,"meta":145,"style":145},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[48,96946,96947],{"__ignoreMap":145},[149,96948,96949,96952,96955,96957,96959,96961,96963,96965,96968,96970,96973,96975,96978,96980,96982,96984,96987,96989,96992,96994,96997,96999,97001],{"class":151,"line":152},[149,96950,96951],{"class":155},"numpy.array(",[149,96953,96954],{"class":309},"object",[149,96956,329],{"class":155},[149,96958,95180],{"class":6932},[149,96960,15277],{"class":325},[149,96962,40639],{"class":309},[149,96964,329],{"class":155},[149,96966,96967],{"class":6932},"copy",[149,96969,15277],{"class":325},[149,96971,96972],{"class":309}," True",[149,96974,329],{"class":155},[149,96976,96977],{"class":6932},"order",[149,96979,15277],{"class":325},[149,96981,40639],{"class":309},[149,96983,329],{"class":155},[149,96985,96986],{"class":6932},"subok",[149,96988,15277],{"class":325},[149,96990,96991],{"class":309}," False",[149,96993,329],{"class":155},[149,96995,96996],{"class":6932},"ndmin",[149,96998,15277],{"class":325},[149,97000,5811],{"class":309},[149,97002,1878],{"class":155},[24,97004,97005],{},"参数：",[24,97007,97008],{},[83,97009],{"alt":145,"src":97010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[19,97012,97014],{"id":97013},"_222-实例","2.2.2 实例",[24,97016,97017],{},[83,97018],{"alt":145,"src":97019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[24,97021,97022],{},[83,97023],{"alt":145,"src":97024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[24,97026,97027],{},[83,97028],{"alt":145,"src":97029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[24,97031,97032],{},[83,97033],{"alt":145,"src":97034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[24,97036,97037],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[24,97039,97040],{},[83,97041],{"alt":145,"src":97042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97044,97046],{"id":97045},"_22-随机数创建数组","2.2 随机数创建数组",[19,97048,97050],{"id":97049},"_221-random语句","2.2.1 random语句",[140,97052,97054],{"className":32084,"code":97053,"language":32086,"meta":145,"style":145},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[48,97055,97056,97061,97066,97074,97079],{"__ignoreMap":145},[149,97057,97058],{"class":151,"line":152},[149,97059,97060],{"class":295},"#random.random()\n",[149,97062,97063],{"class":151,"line":193},[149,97064,97065],{"class":295},"#确定随机种子,就是每次运行结果是相同的\n",[149,97067,97068,97070,97072],{"class":151,"line":235},[149,97069,96287],{"class":155},[149,97071,2056],{"class":309},[149,97073,1878],{"class":155},[149,97075,97076],{"class":151,"line":340},[149,97077,97078],{"class":155},"np.random.random()\n",[149,97080,97081],{"class":151,"line":346},[149,97082,97083],{"class":295},"#生成一个随机的数目\n",[24,97085,97086],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[24,97088,97089],{},"可以指定数组形状 size",[24,97091,97092],{},"①生成一维数组",[140,97094,97096],{"className":32084,"code":97095,"language":32086,"meta":145,"style":145},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[48,97097,97098,97103,97116,97121,97137],{"__ignoreMap":145},[149,97099,97100],{"class":151,"line":152},[149,97101,97102],{"class":295},"#random.random(size())\n",[149,97104,97105,97108,97110,97112,97114],{"class":151,"line":193},[149,97106,97107],{"class":155},"np.random.random(",[149,97109,33202],{"class":6932},[149,97111,166],{"class":325},[149,97113,2182],{"class":309},[149,97115,1878],{"class":155},[149,97117,97118],{"class":151,"line":235},[149,97119,97120],{"class":295},"#生成一位的五个元素\n",[149,97122,97123,97125,97127,97129,97131,97133,97135],{"class":151,"line":340},[149,97124,2102],{"class":155},[149,97126,166],{"class":325},[149,97128,97107],{"class":155},[149,97130,33202],{"class":6932},[149,97132,166],{"class":325},[149,97134,2157],{"class":309},[149,97136,1878],{"class":155},[149,97138,97139,97142],{"class":151,"line":346},[149,97140,97141],{"class":155},"a.shape ",[149,97143,97144],{"class":295},"#输出数组形状\n",[24,97146,97147],{},"②生成二维数组",[140,97149,97151],{"className":32084,"code":97150,"language":32086,"meta":145,"style":145},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[48,97152,97153,97157,97179],{"__ignoreMap":145},[149,97154,97155],{"class":151,"line":152},[149,97156,94981],{"class":295},[149,97158,97159,97161,97163,97165,97167,97169,97171,97173,97175,97177],{"class":151,"line":193},[149,97160,94986],{"class":155},[149,97162,166],{"class":325},[149,97164,97107],{"class":155},[149,97166,33202],{"class":6932},[149,97168,166],{"class":325},[149,97170,319],{"class":155},[149,97172,2157],{"class":309},[149,97174,2241],{"class":155},[149,97176,2182],{"class":309},[149,97178,32203],{"class":155},[149,97180,97181],{"class":151,"line":235},[149,97182,97183],{"class":295},"#生成四行五列的数组\n",[24,97185,97186],{},"③生成三维数组",[140,97188,97190],{"className":32084,"code":97189,"language":32086,"meta":145,"style":145},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[48,97191,97192,97197,97224],{"__ignoreMap":145},[149,97193,97194],{"class":151,"line":152},[149,97195,97196],{"class":295},"#三维数组\n",[149,97198,97199,97202,97204,97206,97208,97210,97212,97214,97216,97218,97220,97222],{"class":151,"line":193},[149,97200,97201],{"class":155},"aaa",[149,97203,166],{"class":325},[149,97205,97107],{"class":155},[149,97207,33202],{"class":6932},[149,97209,166],{"class":325},[149,97211,319],{"class":155},[149,97213,1045],{"class":309},[149,97215,2241],{"class":155},[149,97217,1939],{"class":309},[149,97219,2241],{"class":155},[149,97221,2157],{"class":309},[149,97223,32203],{"class":155},[149,97225,97226],{"class":151,"line":235},[149,97227,97228],{"class":155},"aaa.shape\n",[19,97230,97232],{"id":97231},"_222-randint语句","2.2.2 randint语句",[140,97234,97236],{"className":32084,"code":97235,"language":32086,"meta":145,"style":145},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[48,97237,97238,97243],{"__ignoreMap":145},[149,97239,97240],{"class":151,"line":152},[149,97241,97242],{"class":295},"#生成随机的整数 random.randint(low,high,size)\n",[149,97244,97245,97247,97249,97251],{"class":151,"line":193},[149,97246,94794],{"class":155},[149,97248,2182],{"class":309},[149,97250,15427],{"class":155},[149,97252,97253],{"class":295},"#0~5中的随机一个数\n",[24,97255,97092],{},[140,97257,97259],{"className":32084,"code":97258,"language":32086,"meta":145,"style":145},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[48,97260,97261,97266,97288],{"__ignoreMap":145},[149,97262,97263],{"class":151,"line":152},[149,97264,97265],{"class":295},"#一维\n",[149,97267,97268,97270,97272,97274,97276,97278,97280,97282,97284,97286],{"class":151,"line":193},[149,97269,94794],{"class":155},[149,97271,830],{"class":309},[149,97273,2241],{"class":155},[149,97275,2335],{"class":309},[149,97277,2241],{"class":155},[149,97279,33202],{"class":6932},[149,97281,166],{"class":325},[149,97283,319],{"class":155},[149,97285,2309],{"class":309},[149,97287,32203],{"class":155},[149,97289,97290],{"class":151,"line":235},[149,97291,97292],{"class":295},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[24,97294,97147],{},[24,97296,97297],{},[83,97298],{"alt":145,"src":97299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[24,97301,97186],{},[24,97303,97304],{},[83,97305],{"alt":145,"src":97306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[19,97308,97310],{"id":97309},"_222-rand语句","2.2.2 rand语句",[24,97312,97313],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[140,97315,97317],{"className":32084,"code":97316,"language":32086,"meta":145,"style":145},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[48,97318,97319,97332,97337],{"__ignoreMap":145},[149,97320,97321,97324,97326,97328,97330],{"class":151,"line":152},[149,97322,97323],{"class":155},"np.random.rand(",[149,97325,322],{"class":309},[149,97327,2241],{"class":155},[149,97329,2309],{"class":309},[149,97331,1878],{"class":155},[149,97333,97334],{"class":151,"line":193},[149,97335,97336],{"class":295},"#第一个参数100：行数，表示有100个样本\n",[149,97338,97339],{"class":151,"line":235},[149,97340,97341],{"class":295},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97343,97345],{"id":97344},"_23-arange创建数组","2.3 arange()创建数组",[19,97347,97349],{"id":97348},"_231-函数语句","2.3.1 函数语句",[140,97351,97353],{"className":32084,"code":97352,"language":32086,"meta":145,"style":145},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[48,97354,97355,97369,97374,97379,97384,97389,97394,97399],{"__ignoreMap":145},[149,97356,97357,97360,97362,97364,97367],{"class":151,"line":152},[149,97358,97359],{"class":155},"numpy.arange([start,] stop[, step], ",[149,97361,95180],{"class":6932},[149,97363,166],{"class":325},[149,97365,97366],{"class":309},"None",[149,97368,1878],{"class":155},[149,97370,97371],{"class":151,"line":193},[149,97372,97373],{"class":295},"#参数\n",[149,97375,97376],{"class":151,"line":235},[149,97377,97378],{"class":169},"\"\"\"\n",[149,97380,97381],{"class":151,"line":340},[149,97382,97383],{"class":169},"start:起始值，可选，默认从 0 开始。\n",[149,97385,97386],{"class":151,"line":346},[149,97387,97388],{"class":169},"stop:结束值（不包含该值）。\n",[149,97390,97391],{"class":151,"line":352},[149,97392,97393],{"class":169},"step:步长，可选，默认是 1。可以为浮点数。\n",[149,97395,97396],{"class":151,"line":1021},[149,97397,97398],{"class":169},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[149,97400,97401],{"class":151,"line":1035},[149,97402,97378],{"class":169},[19,97404,97406],{"id":97405},"_232-实例","2.3.2 实例",[140,97408,97410],{"className":32084,"code":97409,"language":32086,"meta":145,"style":145},"#创建一维数组\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",[48,97411,97412,97416,97440,97445,97450,97454,97477,97481,97485,97490,97495],{"__ignoreMap":145},[149,97413,97414],{"class":151,"line":152},[149,97415,94785],{"class":295},[149,97417,97418,97420,97422,97424,97426,97428,97430,97432,97434,97436,97438],{"class":151,"line":193},[149,97419,94682],{"class":155},[149,97421,830],{"class":309},[149,97423,2241],{"class":155},[149,97425,2586],{"class":309},[149,97427,2241],{"class":155},[149,97429,830],{"class":309},[149,97431,2241],{"class":155},[149,97433,95180],{"class":6932},[149,97435,166],{"class":325},[149,97437,1875],{"class":309},[149,97439,1878],{"class":155},[149,97441,97442],{"class":151,"line":235},[149,97443,97444],{"class":295},"#输出结果：\n",[149,97446,97447],{"class":151,"line":340},[149,97448,97449],{"class":295},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[149,97451,97452],{"class":151,"line":346},[149,97453,95627],{"class":295},[149,97455,97456,97459,97461,97463,97465,97468,97470,97472,97474],{"class":151,"line":352},[149,97457,97458],{"class":155},"np.array([np.arange(",[149,97460,830],{"class":309},[149,97462,2241],{"class":155},[149,97464,2157],{"class":309},[149,97466,97467],{"class":155},"),np.arange(",[149,97469,2157],{"class":309},[149,97471,2241],{"class":155},[149,97473,2232],{"class":309},[149,97475,97476],{"class":155},")])\n",[149,97478,97479],{"class":151,"line":1021},[149,97480,95244],{"class":295},[149,97482,97483],{"class":151,"line":1035},[149,97484,97378],{"class":169},[149,97486,97487],{"class":151,"line":1054},[149,97488,97489],{"class":169},"array([[1, 2, 3],\n",[149,97491,97492],{"class":151,"line":1072},[149,97493,97494],{"class":169},"       [4, 5, 6]])\n",[149,97496,97497],{"class":151,"line":1090},[149,97498,97378],{"class":169},[14,97500,97502],{"id":97501},"_24-生态分布","2.4 生态分布",[19,97504,97506],{"id":97505},"_241-标准正态分布","2.4.1 标准正态分布",[24,97508,97509],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[24,97511,97512],{},[83,97513],{"alt":145,"src":97514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[19,97516,97518],{"id":97517},"_242-常规正态分布","2.4.2 常规正态分布",[140,97520,97522],{"className":32084,"code":97521,"language":32086,"meta":145,"style":145},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[48,97523,97524,97529,97534,97539],{"__ignoreMap":145},[149,97525,97526],{"class":151,"line":152},[149,97527,97528],{"class":155},"random.normal(loc,scale,size)也可以生成正态分布\n",[149,97530,97531],{"class":151,"line":193},[149,97532,97533],{"class":295},"#loc:期望\n",[149,97535,97536],{"class":151,"line":235},[149,97537,97538],{"class":295},"#scale:方差\n",[149,97540,97541],{"class":151,"line":340},[149,97542,97543],{"class":295},"#size:用于确定是几维的数列\n",[24,97545,97546],{},[83,97547],{"alt":145,"src":97548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97550,97552],{"id":97551},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[24,97554,97555],{},"ndim:秩，维度个数",[24,97557,97558],{},"size:数组元素的个数",[24,97560,97561],{},"shape:数组的形状",[24,97563,97564],{},"dtype:数组元素的类型",[24,97566,97567],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[24,97569,97570],{},"他们都是属性，通过数组.属性的形式来确定",[24,97572,97573],{},"如果需要输出多个可以通过以下方式：",[140,97575,97577],{"className":32084,"code":97576,"language":32086,"meta":145,"style":145},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[48,97578,97579],{"__ignoreMap":145},[149,97580,97581,97583],{"class":151,"line":152},[149,97582,32121],{"class":309},[149,97584,97585],{"class":155},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97587,97589],{"id":97588},"_26-其他方式创建数组","2.6 其他方式创建数组",[19,97591,97593],{"id":97592},"_261-zeros创建数组","2.6.1 zeros()创建数组",[24,97595,97596],{},"①创建一维数组",[140,97598,97600],{"className":32084,"code":97599,"language":32086,"meta":145,"style":145},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[48,97601,97602,97611,97615,97620,97625],{"__ignoreMap":145},[149,97603,97604,97607,97609],{"class":151,"line":152},[149,97605,97606],{"class":155},"np.zeros(",[149,97608,2309],{"class":309},[149,97610,1878],{"class":155},[149,97612,97613],{"class":151,"line":193},[149,97614,97378],{"class":169},[149,97616,97617],{"class":151,"line":235},[149,97618,97619],{"class":169},"输出结果：\n",[149,97621,97622],{"class":151,"line":340},[149,97623,97624],{"class":169},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[149,97626,97627],{"class":151,"line":346},[149,97628,97378],{"class":169},[24,97630,97631],{},"上方代码等价于：",[140,97633,97635],{"className":32084,"code":97634,"language":32086,"meta":145,"style":145},"np.zeros(shape=(10))#创建10个元素的0数组\n",[48,97636,97637],{"__ignoreMap":145},[149,97638,97639,97641,97644,97646,97648,97650,97652],{"class":151,"line":152},[149,97640,97606],{"class":155},[149,97642,97643],{"class":6932},"shape",[149,97645,166],{"class":325},[149,97647,319],{"class":155},[149,97649,2309],{"class":309},[149,97651,84452],{"class":155},[149,97653,97654],{"class":295},"#创建10个元素的0数组\n",[24,97656,97657],{},"也可以指定类型",[140,97659,97661],{"className":32084,"code":97660,"language":32086,"meta":145,"style":145},"#指定类型\nnp.zeros(5,dtype=int)\n",[48,97662,97663,97668],{"__ignoreMap":145},[149,97664,97665],{"class":151,"line":152},[149,97666,97667],{"class":295},"#指定类型\n",[149,97669,97670,97672,97674,97676,97678,97680,97682],{"class":151,"line":193},[149,97671,97606],{"class":155},[149,97673,2182],{"class":309},[149,97675,2241],{"class":155},[149,97677,95180],{"class":6932},[149,97679,166],{"class":325},[149,97681,1875],{"class":309},[149,97683,1878],{"class":155},[24,97685,97686],{},"②创建二维数组",[140,97688,97690],{"className":32084,"code":97689,"language":32086,"meta":145,"style":145},"np.zeros((3,4),dtype=int)\n",[48,97691,97692],{"__ignoreMap":145},[149,97693,97694,97697,97699,97701,97703,97705,97707,97709,97711],{"class":151,"line":152},[149,97695,97696],{"class":155},"np.zeros((",[149,97698,1939],{"class":309},[149,97700,2241],{"class":155},[149,97702,2157],{"class":309},[149,97704,43962],{"class":155},[149,97706,95180],{"class":6932},[149,97708,166],{"class":325},[149,97710,1875],{"class":309},[149,97712,1878],{"class":155},[24,97714,97715],{},"③创建三维数组",[140,97717,97719],{"className":32084,"code":97718,"language":32086,"meta":145,"style":145},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[48,97720,97721,97726],{"__ignoreMap":145},[149,97722,97723],{"class":151,"line":152},[149,97724,97725],{"class":295},"#创建三维数组\n",[149,97727,97728,97730,97732,97734,97736,97738,97740,97742,97744,97746,97748],{"class":151,"line":193},[149,97729,97696],{"class":155},[149,97731,1939],{"class":309},[149,97733,2241],{"class":155},[149,97735,2157],{"class":309},[149,97737,2241],{"class":155},[149,97739,2182],{"class":309},[149,97741,43962],{"class":155},[149,97743,95180],{"class":6932},[149,97745,166],{"class":325},[149,97747,1875],{"class":309},[149,97749,1878],{"class":155},[24,97751,97752],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[140,97754,97756],{"className":32084,"code":97755,"language":32086,"meta":145,"style":145},"#使用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",[48,97757,97758,97763,97778,97783,97788,97810],{"__ignoreMap":145},[149,97759,97760],{"class":151,"line":152},[149,97761,97762],{"class":295},"#使用zeros_like将创建的一维数组变成全0的数组\n",[149,97764,97765,97767,97769,97771,97773,97775],{"class":151,"line":193},[149,97766,2102],{"class":155},[149,97768,166],{"class":325},[149,97770,94682],{"class":155},[149,97772,2157],{"class":309},[149,97774,2292],{"class":155},[149,97776,97777],{"class":295},"#这个得到的结果：一维数组0，1，2，3\n",[149,97779,97780],{"class":151,"line":235},[149,97781,97782],{"class":155},"np.zeros_like(a)\n",[149,97784,97785],{"class":151,"line":340},[149,97786,97787],{"class":295},"#使用zeros_like将创建的二维数组变成全0的数组\n",[149,97789,97790,97792,97794,97796,97798,97800,97802,97804,97806,97808],{"class":151,"line":346},[149,97791,94986],{"class":155},[149,97793,166],{"class":325},[149,97795,97107],{"class":155},[149,97797,33202],{"class":6932},[149,97799,166],{"class":325},[149,97801,319],{"class":155},[149,97803,2157],{"class":309},[149,97805,2241],{"class":155},[149,97807,2182],{"class":309},[149,97809,32203],{"class":155},[149,97811,97812],{"class":151,"line":352},[149,97813,97814],{"class":155},"np.zeros_like(aa)\n",[19,97816,97818],{"id":97817},"_262-ones创建数组","2.6.2 ones()创建数组",[24,97820,97821],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[19,97823,97825],{"id":97824},"_263-empty创建数组","2.6.3 empty()创建数组",[24,97827,97828],{},"①empty()用法",[140,97830,97832],{"className":32084,"code":97831,"language":32086,"meta":145,"style":145},"numpy.empty(shape,dtype=float,order='c')\n",[48,97833,97834],{"__ignoreMap":145},[149,97835,97836,97839,97841,97843,97845,97847,97849,97851,97853],{"class":151,"line":152},[149,97837,97838],{"class":155},"numpy.empty(shape,",[149,97840,95180],{"class":6932},[149,97842,166],{"class":325},[149,97844,1910],{"class":309},[149,97846,2241],{"class":155},[149,97848,96977],{"class":6932},[149,97850,166],{"class":325},[149,97852,77710],{"class":169},[149,97854,1878],{"class":155},[24,97856,97857],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[24,97859,97860],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[24,97862,97863],{},[83,97864],{"alt":145,"src":97865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[24,97867,97868],{},"②empty()用法",[140,97870,97872],{"className":32084,"code":97871,"language":32086,"meta":145,"style":145},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[48,97873,97874,97895,97907,97928,97933],{"__ignoreMap":145},[149,97875,97876,97878,97880,97883,97885,97887,97889,97891,97893],{"class":151,"line":152},[149,97877,2706],{"class":155},[149,97879,166],{"class":325},[149,97881,97882],{"class":155},"np.empty(",[149,97884,2309],{"class":309},[149,97886,2241],{"class":155},[149,97888,95180],{"class":6932},[149,97890,166],{"class":325},[149,97892,1875],{"class":309},[149,97894,1878],{"class":155},[149,97896,97897,97899,97901,97903,97905],{"class":151,"line":193},[149,97898,2681],{"class":155},[149,97900,166],{"class":325},[149,97902,94682],{"class":155},[149,97904,2182],{"class":309},[149,97906,1878],{"class":155},[149,97908,97909,97912,97914,97917,97919,97921,97924,97926],{"class":151,"line":235},[149,97910,97911],{"class":155},"np.add(",[149,97913,1045],{"class":309},[149,97915,97916],{"class":155},",x,",[149,97918,94734],{"class":6932},[149,97920,166],{"class":325},[149,97922,97923],{"class":155},"y[:",[149,97925,2182],{"class":309},[149,97927,6375],{"class":155},[149,97929,97930],{"class":151,"line":340},[149,97931,97932],{"class":295},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[149,97934,97935],{"class":151,"line":346},[149,97936,97937],{"class":155},"y\n",[24,97939,13228],{},[24,97941,97942],{},[83,97943],{"alt":145,"src":97944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[140,97946,97948],{"className":32084,"code":97947,"language":32086,"meta":145,"style":145},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[48,97949,97950,97966,97986,98001],{"__ignoreMap":145},[149,97951,97952,97954,97956,97958,97960,97962,97964],{"class":151,"line":152},[149,97953,2681],{"class":155},[149,97955,166],{"class":325},[149,97957,94682],{"class":155},[149,97959,830],{"class":309},[149,97961,2241],{"class":155},[149,97963,2207],{"class":309},[149,97965,1878],{"class":155},[149,97967,97968,97970,97972,97974,97976,97978,97980,97982,97984],{"class":151,"line":193},[149,97969,2706],{"class":155},[149,97971,166],{"class":325},[149,97973,97882],{"class":155},[149,97975,2182],{"class":309},[149,97977,2241],{"class":155},[149,97979,95180],{"class":6932},[149,97981,166],{"class":325},[149,97983,1875],{"class":309},[149,97985,1878],{"class":155},[149,97987,97988,97991,97993,97995,97997,97999],{"class":151,"line":235},[149,97989,97990],{"class":155},"np.add(x,",[149,97992,1045],{"class":309},[149,97994,2241],{"class":155},[149,97996,94734],{"class":6932},[149,97998,166],{"class":325},[149,98000,95129],{"class":155},[149,98002,98003],{"class":151,"line":340},[149,98004,98005],{"class":295},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[24,98007,98008],{},"③empty_like()",[24,98010,98011],{},[31,98012,98013,98014,98019],{},"创建一个",[31,98015,98016],{},[31,98017,98018],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[24,98021,98022,98025],{},[48,98023,98024],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[24,98027,98028],{},[83,98029],{"alt":145,"src":98030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[19,98032,98034],{"id":98033},"_264-用法","2.6.4 ？？用法",[24,98036,98037],{},"当想查看一个函数的参数时，可以通过？？来实现",[140,98039,98041],{"className":32084,"code":98040,"language":32086,"meta":145,"style":145},"np.full??\n",[48,98042,98043],{"__ignoreMap":145},[149,98044,98045,98048],{"class":151,"line":152},[149,98046,98047],{"class":155},"np.full",[149,98049,98050],{"class":79085},"??\n",[19,98052,98054],{"id":98053},"_265-full创建数组","2.6.5 full()创建数组",[140,98056,98058],{"className":32084,"code":98057,"language":32086,"meta":145,"style":145},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[48,98059,98060,98065],{"__ignoreMap":145},[149,98061,98062],{"class":151,"line":152},[149,98063,98064],{"class":155},"full(shape,fill_value)\n",[149,98066,98067],{"class":151,"line":193},[149,98068,98069],{"class":155},"创建全为某个指定值的数组\n",[24,98071,96210],{},[140,98073,98075],{"className":32084,"code":98074,"language":32086,"meta":145,"style":145},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[48,98076,98077,98082],{"__ignoreMap":145},[149,98078,98079],{"class":151,"line":152},[149,98080,98081],{"class":295},"#创建一个一维数组,以20进行填充\n",[149,98083,98084,98087,98089,98091,98093],{"class":151,"line":193},[149,98085,98086],{"class":155},"np.full(",[149,98088,2309],{"class":309},[149,98090,2241],{"class":155},[149,98092,2561],{"class":309},[149,98094,1878],{"class":155},[24,98096,94971],{},[140,98098,98100],{"className":32084,"code":98099,"language":32086,"meta":145,"style":145},"#创建二维数组\nnp.full((3,5),11)\n",[48,98101,98102,98106],{"__ignoreMap":145},[149,98103,98104],{"class":151,"line":152},[149,98105,95627],{"class":295},[149,98107,98108,98111,98113,98115,98117,98119,98121],{"class":151,"line":193},[149,98109,98110],{"class":155},"np.full((",[149,98112,1939],{"class":309},[149,98114,2241],{"class":155},[149,98116,2182],{"class":309},[149,98118,43962],{"class":155},[149,98120,2335],{"class":309},[149,98122,1878],{"class":155},[24,98124,98125],{},"③full_like用法",[24,98127,98128],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[24,98130,98131],{},"这里是指定填充而已",[140,98133,98135],{"className":32084,"code":98134,"language":32086,"meta":145,"style":145},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[48,98136,98137,98142,98166,98171],{"__ignoreMap":145},[149,98138,98139],{"class":151,"line":152},[149,98140,98141],{"class":295},"#创建一个指定形状数组\n",[149,98143,98144,98146,98148,98150,98152,98154,98156,98158,98160,98162,98164],{"class":151,"line":193},[149,98145,2102],{"class":155},[149,98147,166],{"class":325},[149,98149,94682],{"class":155},[149,98151,830],{"class":309},[149,98153,2241],{"class":155},[149,98155,2188],{"class":309},[149,98157,94687],{"class":155},[149,98159,2157],{"class":309},[149,98161,2241],{"class":155},[149,98163,2283],{"class":309},[149,98165,1878],{"class":155},[149,98167,98168],{"class":151,"line":235},[149,98169,98170],{"class":295},"#进行指定填充\n",[149,98172,98173,98176,98178],{"class":151,"line":340},[149,98174,98175],{"class":155},"np.full_like(a,",[149,98177,2309],{"class":309},[149,98179,1878],{"class":155},[24,98181,13228],{},[24,98183,98184],{},[83,98185],{"alt":145,"src":98186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[19,98188,98190],{"id":98189},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[120,98192,98194],{"id":98193},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[140,98196,98198],{"className":32084,"code":98197,"language":32086,"meta":145,"style":145},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[48,98199,98200,98217],{"__ignoreMap":145},[149,98201,98202,98205,98207,98209,98211,98213,98215],{"class":151,"line":152},[149,98203,98204],{"class":155},"np.eye(",[149,98206,2157],{"class":309},[149,98208,2241],{"class":155},[149,98210,95180],{"class":6932},[149,98212,166],{"class":325},[149,98214,1875],{"class":309},[149,98216,1878],{"class":155},[149,98218,98219],{"class":151,"line":193},[149,98220,98221],{"class":295},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[120,98223,98225],{"id":98224},"_2662-法2identity","2.6.6.2 法2：identity()",[140,98227,98229],{"className":32084,"code":98228,"language":32086,"meta":145,"style":145},"#identity()\nnp.identity(5,dtype=int)\n",[48,98230,98231,98236],{"__ignoreMap":145},[149,98232,98233],{"class":151,"line":152},[149,98234,98235],{"class":295},"#identity()\n",[149,98237,98238,98241,98243,98245,98247,98249,98251],{"class":151,"line":193},[149,98239,98240],{"class":155},"np.identity(",[149,98242,2182],{"class":309},[149,98244,2241],{"class":155},[149,98246,95180],{"class":6932},[149,98248,166],{"class":325},[149,98250,1875],{"class":309},[149,98252,1878],{"class":155},[24,98254,98255],{},"两个函数是有区别的",[24,98257,98258],{},[83,98259],{"alt":145,"src":98260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[24,98262,98263],{},[83,98264],{"alt":145,"src":98265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[140,98267,98269],{"className":32084,"code":98268,"language":32086,"meta":145,"style":145},"# 创建一个 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",[48,98270,98271,98276,98288,98293,98298,98303,98308,98312,98317,98337,98341,98346,98351],{"__ignoreMap":145},[149,98272,98273],{"class":151,"line":152},[149,98274,98275],{"class":295},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[149,98277,98278,98280,98282,98284,98286],{"class":151,"line":193},[149,98279,98204],{"class":155},[149,98281,1939],{"class":309},[149,98283,329],{"class":155},[149,98285,2157],{"class":309},[149,98287,1878],{"class":155},[149,98289,98290],{"class":151,"line":235},[149,98291,98292],{"class":295},"# 输出:\n",[149,98294,98295],{"class":151,"line":340},[149,98296,98297],{"class":295},"# [[1. 0. 0. 0.]\n",[149,98299,98300],{"class":151,"line":346},[149,98301,98302],{"class":295},"#  [0. 1. 0. 0.]\n",[149,98304,98305],{"class":151,"line":352},[149,98306,98307],{"class":295},"#  [0. 0. 1. 0.]]\n",[149,98309,98310],{"class":151,"line":1021},[149,98311,4119],{"emptyLinePlaceholder":1800},[149,98313,98314],{"class":151,"line":1035},[149,98315,98316],{"class":295},"# 对角线向上偏移1\n",[149,98318,98319,98321,98323,98325,98327,98329,98331,98333,98335],{"class":151,"line":1054},[149,98320,98204],{"class":155},[149,98322,1939],{"class":309},[149,98324,329],{"class":155},[149,98326,2157],{"class":309},[149,98328,329],{"class":155},[149,98330,2356],{"class":6932},[149,98332,166],{"class":325},[149,98334,830],{"class":309},[149,98336,1878],{"class":155},[149,98338,98339],{"class":151,"line":1072},[149,98340,98292],{"class":295},[149,98342,98343],{"class":151,"line":1090},[149,98344,98345],{"class":295},"# [[0. 1. 0. 0.]\n",[149,98347,98348],{"class":151,"line":1633},[149,98349,98350],{"class":295},"#  [0. 0. 1. 0.]\n",[149,98352,98353],{"class":151,"line":1644},[149,98354,98355],{"class":295},"#  [0. 0. 0. 1.]]\n",[19,98357,98359],{"id":98358},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[140,98361,98363],{"className":32084,"code":98362,"language":32086,"meta":145,"style":145},"#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",[48,98364,98365,98370,98374,98379,98384,98389,98394,98399,98404,98409,98414],{"__ignoreMap":145},[149,98366,98367],{"class":151,"line":152},[149,98368,98369],{"class":295},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[149,98371,98372],{"class":151,"line":193},[149,98373,97378],{"class":169},[149,98375,98376],{"class":151,"line":235},[149,98377,98378],{"class":169},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[149,98380,98381],{"class":151,"line":340},[149,98382,98383],{"class":169},"参数介绍：\n",[149,98385,98386],{"class":151,"line":346},[149,98387,98388],{"class":169},"start：序列的起始值\n",[149,98390,98391],{"class":151,"line":352},[149,98392,98393],{"class":169},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[149,98395,98396],{"class":151,"line":1021},[149,98397,98398],{"class":169},"num：要生长的等步长的样本数量，默认为50\n",[149,98400,98401],{"class":151,"line":1035},[149,98402,98403],{"class":169},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[149,98405,98406],{"class":151,"line":1054},[149,98407,98408],{"class":169},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[149,98410,98411],{"class":151,"line":1072},[149,98412,98413],{"class":169},"dtype：ndarry的数据类型\n",[149,98415,98416],{"class":151,"line":1090},[149,98417,97378],{"class":169},[24,98419,98420],{},[83,98421],{"alt":145,"src":98422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[24,98424,98425],{},"这里num=是可以省略的",[24,98427,98428],{},"也就是下方两行代码结果是一模一样的",[140,98430,98432],{"className":32084,"code":98431,"language":32086,"meta":145,"style":145},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[48,98433,98434,98451],{"__ignoreMap":145},[149,98435,98436,98439,98441,98443,98445,98447,98449],{"class":151,"line":152},[149,98437,98438],{"class":155},"np.linspace(",[149,98440,830],{"class":309},[149,98442,2241],{"class":155},[149,98444,2182],{"class":309},[149,98446,2241],{"class":155},[149,98448,2182],{"class":309},[149,98450,1878],{"class":155},[149,98452,98453,98455,98457,98459,98461,98463,98465,98467,98469],{"class":151,"line":193},[149,98454,98438],{"class":155},[149,98456,830],{"class":309},[149,98458,2241],{"class":155},[149,98460,2182],{"class":309},[149,98462,2241],{"class":155},[149,98464,3385],{"class":6932},[149,98466,166],{"class":325},[149,98468,2182],{"class":309},[149,98470,1878],{"class":155},[19,98472,98474],{"id":98473},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[140,98476,98478],{"className":32084,"code":98477,"language":32086,"meta":145,"style":145},"#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",[48,98479,98480,98485,98489,98494,98499,98504,98509,98513,98518,98523,98527],{"__ignoreMap":145},[149,98481,98482],{"class":151,"line":152},[149,98483,98484],{"class":295},"#logspace函数用于创建一个等比数列，格式如下：\n",[149,98486,98487],{"class":151,"line":193},[149,98488,97378],{"class":169},[149,98490,98491],{"class":151,"line":235},[149,98492,98493],{"class":169},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[149,98495,98496],{"class":151,"line":340},[149,98497,98498],{"class":169},"参数为：\n",[149,98500,98501],{"class":151,"line":346},[149,98502,98503],{"class":169},"start:序列的起始位置为：base**start\n",[149,98505,98506],{"class":151,"line":352},[149,98507,98508],{"class":169},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[149,98510,98511],{"class":151,"line":1021},[149,98512,98398],{"class":169},[149,98514,98515],{"class":151,"line":1035},[149,98516,98517],{"class":169},"endpoint：是否包含 stop 这个值，默认是 True\n",[149,98519,98520],{"class":151,"line":1054},[149,98521,98522],{"class":169},"base：对数的底数，默认是 10（常见对数）\n",[149,98524,98525],{"class":151,"line":1072},[149,98526,98413],{"class":169},[149,98528,98529],{"class":151,"line":1090},[149,98530,97378],{"class":169},[24,98532,98533],{},[83,98534],{"alt":145,"src":98535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[24,98537,98538],{},"logspace()函数中的num参数也是可以不写num=的",[24,98540,98541],{},"endpoint是不可以省略的",[1783,98543,98544],{},"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":145,"searchDepth":193,"depth":193,"links":98546},[98547,98551,98556,98560,98564,98565],{"id":96936,"depth":193,"text":96937,"children":98548},[98549,98550],{"id":96940,"depth":235,"text":96941},{"id":97013,"depth":235,"text":97014},{"id":97045,"depth":193,"text":97046,"children":98552},[98553,98554,98555],{"id":97049,"depth":235,"text":97050},{"id":97231,"depth":235,"text":97232},{"id":97309,"depth":235,"text":97310},{"id":97344,"depth":193,"text":97345,"children":98557},[98558,98559],{"id":97348,"depth":235,"text":97349},{"id":97405,"depth":235,"text":97406},{"id":97501,"depth":193,"text":97502,"children":98561},[98562,98563],{"id":97505,"depth":235,"text":97506},{"id":97517,"depth":235,"text":97518},{"id":97551,"depth":193,"text":97552},{"id":97588,"depth":193,"text":97589,"children":98566},[98567,98568,98569,98570,98571,98572,98573,98574],{"id":97592,"depth":235,"text":97593},{"id":97817,"depth":235,"text":97818},{"id":97824,"depth":235,"text":97825},{"id":98033,"depth":235,"text":98034},{"id":98053,"depth":235,"text":98054},{"id":98189,"depth":235,"text":98190},{"id":98358,"depth":235,"text":98359},{"id":98473,"depth":235,"text":98474},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96928,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98581,"title":98582,"body":98583,"description":1797,"extension":1798,"meta":98676,"navigation":1800,"path":98677,"seo":98678,"stem":98679,"__hash__":98680},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98584,"toc":98674},[98585,98588,98591,98594,98597,98600,98603,98606,98609,98612,98615,98618,98620,98623,98626,98631,98634,98637,98671],[10,98586,98582],{"id":98587},"_20魔法命令mprun",[24,98589,98590],{},"逐行分析数据内存的使用情况",[24,98592,98593],{},"语法格式：",[24,98595,98596],{},"%mprun -f 模块名.函数名 模块名.函数名()",[24,98598,98599],{},"分析结果列如下：",[24,98601,98602],{},"Line行号",[24,98604,98605],{},"Mem usage内存使用大小",[24,98607,98608],{},"increment内存增量",[24,98610,98611],{},"Line content代码内容",[24,98613,98614],{},"补充说明：",[24,98616,98617],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[24,98619,96883],{},[24,98621,98622],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[24,98624,98625],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[24,98627,98628],{},[83,98629],{"alt":145,"src":98630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[24,98632,98633],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[24,98635,98636],{},"这时候需要重新加载模块",[140,98638,98640],{"className":32084,"code":98639,"language":32086,"meta":145,"style":145},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[48,98641,98642,98647,98654,98659],{"__ignoreMap":145},[149,98643,98644],{"class":151,"line":152},[149,98645,98646],{"class":295},"#重新加载模块\n",[149,98648,98649,98651],{"class":151,"line":193},[149,98650,32098],{"class":325},[149,98652,98653],{"class":155}," importlib\n",[149,98655,98656],{"class":151,"line":235},[149,98657,98658],{"class":155},"importlib.reload(mprun_test)\n",[149,98660,98661,98663,98666,98668],{"class":151,"line":340},[149,98662,2191],{"class":325},[149,98664,98665],{"class":155},"mprun ",[149,98667,2395],{"class":325},[149,98669,98670],{"class":155},"f mprun_test.fun_test mprun_test.fun_test()\n",[1783,98672,98673],{},"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":145,"searchDepth":193,"depth":193,"links":98675},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98582,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98682,"title":98683,"body":98684,"description":1797,"extension":1798,"meta":98701,"navigation":1800,"path":98702,"seo":98703,"stem":98704,"__hash__":98705},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98685,"toc":98699},[98686,98689,98694],[10,98687,98683],{"id":98688},"_3一维数组的索引和切片",[24,98690,98691],{},[83,98692],{"alt":145,"src":98693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[24,98695,98696],{},[83,98697],{"alt":145,"src":98698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":145,"searchDepth":193,"depth":193,"links":98700},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98683,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98707,"title":98708,"body":98709,"description":1797,"extension":1798,"meta":99192,"navigation":1800,"path":99193,"seo":99194,"stem":99195,"__hash__":99196},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98710,"toc":99190},[98711,98714,98717,98722,98755,98758,98796,98799,98833,98836,98941,98944,98981,98984,99085,99088,99139,99142,99184,99187],[10,98712,98708],{"id":98713},"_4二维数组的索引与切片",[24,98715,98716],{},"①获取指定单个元素",[24,98718,98719],{},[83,98720],{"alt":145,"src":98721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[140,98723,98725],{"className":32084,"code":98724,"language":32086,"meta":145,"style":145},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[48,98726,98727,98732,98737,98742],{"__ignoreMap":145},[149,98728,98729],{"class":151,"line":152},[149,98730,98731],{"class":295},"#获取元素9\n",[149,98733,98734],{"class":151,"line":193},[149,98735,98736],{"class":295},"#先获取所在行，再获取所在列\n",[149,98738,98739],{"class":151,"line":235},[149,98740,98741],{"class":295},"#数组[行索引号，列索引号]\n",[149,98743,98744,98747,98749,98751,98753],{"class":151,"line":340},[149,98745,98746],{"class":155},"a[",[149,98748,830],{"class":309},[149,98750,2241],{"class":155},[149,98752,1045],{"class":309},[149,98754,34952],{"class":155},[24,98756,98757],{},"②获取整行元素",[140,98759,98761],{"className":32084,"code":98760,"language":32086,"meta":145,"style":145},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[48,98762,98763,98768,98773,98781,98786],{"__ignoreMap":145},[149,98764,98765],{"class":151,"line":152},[149,98766,98767],{"class":295},"#获取整行 数组[行索引号]\n",[149,98769,98770],{"class":151,"line":193},[149,98771,98772],{"class":295},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[149,98774,98775,98777,98779],{"class":151,"line":235},[149,98776,98746],{"class":155},[149,98778,1045],{"class":309},[149,98780,34952],{"class":155},[149,98782,98783],{"class":151,"line":340},[149,98784,98785],{"class":295},"#也可以负索引获取一行\n",[149,98787,98788,98790,98792,98794],{"class":151,"line":346},[149,98789,98746],{"class":155},[149,98791,2395],{"class":325},[149,98793,830],{"class":309},[149,98795,34952],{"class":155},[24,98797,98798],{},"③获取整列元素",[140,98800,98802],{"className":32084,"code":98801,"language":32086,"meta":145,"style":145},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[48,98803,98804,98809,98818,98823],{"__ignoreMap":145},[149,98805,98806],{"class":151,"line":152},[149,98807,98808],{"class":295},"#获取整列 数组名[:,列索引]\n",[149,98810,98811,98814,98816],{"class":151,"line":193},[149,98812,98813],{"class":155},"a[:,",[149,98815,1045],{"class":309},[149,98817,34952],{"class":155},[149,98819,98820],{"class":151,"line":235},[149,98821,98822],{"class":295},"#也可以负索引获取一列\n",[149,98824,98825,98827,98829,98831],{"class":151,"line":340},[149,98826,98813],{"class":155},[149,98828,2395],{"class":325},[149,98830,830],{"class":309},[149,98832,34952],{"class":155},[24,98834,98835],{},"④部分行部分列的元素",[140,98837,98839],{"className":32084,"code":98838,"language":32086,"meta":145,"style":145},"#部分行部分列 数组名[行切片，列切片]\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",[48,98840,98841,98846,98856,98860,98864,98869,98874,98878,98890,98894,98898,98903,98908,98913,98918,98922,98927],{"__ignoreMap":145},[149,98842,98843],{"class":151,"line":152},[149,98844,98845],{"class":295},"#部分行部分列 数组名[行切片，列切片]\n",[149,98847,98848,98851,98853],{"class":151,"line":193},[149,98849,98850],{"class":155},"a[:",[149,98852,1045],{"class":309},[149,98854,98855],{"class":155},",:]\n",[149,98857,98858],{"class":151,"line":235},[149,98859,95244],{"class":295},[149,98861,98862],{"class":151,"line":340},[149,98863,95608],{"class":169},[149,98865,98866],{"class":151,"line":346},[149,98867,98868],{"class":169},"array([[ 1,  2,  3,  4,  5,  6],\n",[149,98870,98871],{"class":151,"line":352},[149,98872,98873],{"class":169},"       [ 7,  8,  9, 10, 11, 12]])\n",[149,98875,98876],{"class":151,"line":1021},[149,98877,95608],{"class":169},[149,98879,98880,98882,98884,98886,98888],{"class":151,"line":1035},[149,98881,98813],{"class":155},[149,98883,830],{"class":309},[149,98885,2720],{"class":155},[149,98887,2157],{"class":309},[149,98889,34952],{"class":155},[149,98891,98892],{"class":151,"line":1054},[149,98893,95244],{"class":295},[149,98895,98896],{"class":151,"line":1072},[149,98897,95608],{"class":169},[149,98899,98900],{"class":151,"line":1090},[149,98901,98902],{"class":169},"array([[ 2,  3,  4],\n",[149,98904,98905],{"class":151,"line":1633},[149,98906,98907],{"class":169},"       [ 8,  9, 10],\n",[149,98909,98910],{"class":151,"line":1644},[149,98911,98912],{"class":169},"       [14, 15, 16],\n",[149,98914,98915],{"class":151,"line":3348},[149,98916,98917],{"class":169},"       [20, 21, 22]])\n",[149,98919,98920],{"class":151,"line":3362},[149,98921,95608],{"class":169},[149,98923,98924],{"class":151,"line":3367},[149,98925,98926],{"class":295},"#对列行同时进行切片，使用了step参数\n",[149,98928,98929,98932,98934,98937,98939],{"class":151,"line":3373},[149,98930,98931],{"class":155},"a[::",[149,98933,1045],{"class":309},[149,98935,98936],{"class":155},",::",[149,98938,1045],{"class":309},[149,98940,34952],{"class":155},[24,98942,98943],{},"⑤同时获取两个元素",[140,98945,98947],{"className":32084,"code":98946,"language":32086,"meta":145,"style":145},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[48,98948,98949,98954,98959],{"__ignoreMap":145},[149,98950,98951],{"class":151,"line":152},[149,98952,98953],{"class":295},"#同时获取第三行第二列，第四行第一列\n",[149,98955,98956],{"class":151,"line":193},[149,98957,98958],{"class":295},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[149,98960,98961,98964,98966,98968,98970,98972,98974,98976,98978],{"class":151,"line":235},[149,98962,98963],{"class":155},"a[(",[149,98965,1045],{"class":309},[149,98967,2241],{"class":155},[149,98969,1939],{"class":309},[149,98971,43953],{"class":155},[149,98973,830],{"class":309},[149,98975,2241],{"class":155},[149,98977,2056],{"class":309},[149,98979,98980],{"class":155},")]\n",[24,98982,98983],{},"⑥切片，对行进行反向获取",[140,98985,98987],{"className":32084,"code":98986,"language":32086,"meta":145,"style":145},"#切片 对所有行进行反向获取\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",[48,98988,98989,98994,99004,99008,99012,99017,99022,99027,99032,99036,99041,99057,99061,99066,99071,99076,99081],{"__ignoreMap":145},[149,98990,98991],{"class":151,"line":152},[149,98992,98993],{"class":295},"#切片 对所有行进行反向获取\n",[149,98995,98996,98998,99000,99002],{"class":151,"line":193},[149,98997,98931],{"class":155},[149,98999,2395],{"class":325},[149,99001,830],{"class":309},[149,99003,34952],{"class":155},[149,99005,99006],{"class":151,"line":235},[149,99007,95244],{"class":295},[149,99009,99010],{"class":151,"line":340},[149,99011,95608],{"class":169},[149,99013,99014],{"class":151,"line":346},[149,99015,99016],{"class":169},"array([[19, 20, 21, 22, 23, 24],\n",[149,99018,99019],{"class":151,"line":352},[149,99020,99021],{"class":169},"       [13, 14, 15, 16, 17, 18],\n",[149,99023,99024],{"class":151,"line":1021},[149,99025,99026],{"class":169},"       [ 7,  8,  9, 10, 11, 12],\n",[149,99028,99029],{"class":151,"line":1035},[149,99030,99031],{"class":169},"       [ 1,  2,  3,  4,  5,  6]])\n",[149,99033,99034],{"class":151,"line":1054},[149,99035,95608],{"class":169},[149,99037,99038],{"class":151,"line":1072},[149,99039,99040],{"class":295},"#对行列都进行反向切片获取\n",[149,99042,99043,99045,99047,99049,99051,99053,99055],{"class":151,"line":1090},[149,99044,98931],{"class":155},[149,99046,2395],{"class":325},[149,99048,830],{"class":309},[149,99050,98936],{"class":155},[149,99052,2395],{"class":325},[149,99054,830],{"class":309},[149,99056,34952],{"class":155},[149,99058,99059],{"class":151,"line":1633},[149,99060,95608],{"class":169},[149,99062,99063],{"class":151,"line":1644},[149,99064,99065],{"class":169},"array([[24, 23, 22, 21, 20, 19],\n",[149,99067,99068],{"class":151,"line":3348},[149,99069,99070],{"class":169},"       [18, 17, 16, 15, 14, 13],\n",[149,99072,99073],{"class":151,"line":3362},[149,99074,99075],{"class":169},"       [12, 11, 10,  9,  8,  7],\n",[149,99077,99078],{"class":151,"line":3367},[149,99079,99080],{"class":169},"       [ 6,  5,  4,  3,  2,  1]])\n",[149,99082,99083],{"class":151,"line":3373},[149,99084,95608],{"class":169},[24,99086,99087],{},"⑦修改元素",[140,99089,99091],{"className":32084,"code":99090,"language":32086,"meta":145,"style":145},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[48,99092,99093,99098,99116,99121],{"__ignoreMap":145},[149,99094,99095],{"class":151,"line":152},[149,99096,99097],{"class":295},"#获取前两行和前两列\n",[149,99099,99100,99103,99105,99107,99109,99112,99114],{"class":151,"line":193},[149,99101,99102],{"class":155},"sub_a",[149,99104,166],{"class":325},[149,99106,98850],{"class":155},[149,99108,1045],{"class":309},[149,99110,99111],{"class":155},",:",[149,99113,1045],{"class":309},[149,99115,34952],{"class":155},[149,99117,99118],{"class":151,"line":235},[149,99119,99120],{"class":295},"#修改sub_a第一个元素的值\n",[149,99122,99123,99126,99128,99130,99132,99134,99136],{"class":151,"line":340},[149,99124,99125],{"class":155},"sub_a[",[149,99127,2056],{"class":309},[149,99129,2241],{"class":155},[149,99131,2056],{"class":309},[149,99133,2799],{"class":155},[149,99135,166],{"class":325},[149,99137,99138],{"class":309},"100\n",[24,99140,99141],{},"⑧数组复制copy()",[140,99143,99145],{"className":32084,"code":99144,"language":32086,"meta":145,"style":145},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[48,99146,99147,99152,99162,99167],{"__ignoreMap":145},[149,99148,99149],{"class":151,"line":152},[149,99150,99151],{"class":295},"#数组复制\n",[149,99153,99154,99157,99159],{"class":151,"line":193},[149,99155,99156],{"class":155},"copy_a",[149,99158,166],{"class":325},[149,99160,99161],{"class":155},"np.copy(sub_a)\n",[149,99163,99164],{"class":151,"line":235},[149,99165,99166],{"class":295},"#修改copy_a后不影响原数组\n",[149,99168,99169,99172,99174,99176,99178,99180,99182],{"class":151,"line":340},[149,99170,99171],{"class":155},"copy_a[",[149,99173,2056],{"class":309},[149,99175,2241],{"class":155},[149,99177,2056],{"class":309},[149,99179,2799],{"class":155},[149,99181,166],{"class":325},[149,99183,99138],{"class":309},[24,99185,99186],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1783,99188,99189],{},"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":145,"searchDepth":193,"depth":193,"links":99191},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98708,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99198,"title":99199,"body":99200,"description":1797,"extension":1798,"meta":99692,"navigation":1800,"path":99693,"seo":99694,"stem":99695,"__hash__":99696},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99201,"toc":99684},[99202,99205,99209,99212,99215,99268,99271,99296,99299,99318,99338,99341,99357,99361,99407,99411,99453,99457,99460,99463,99466,99469,99472,99534,99594,99598,99601,99658,99662,99667,99676,99681],[10,99203,99199],{"id":99204},"_5改变数组的维度",[14,99206,99208],{"id":99207},"_51-使用reshape","5.1 使用reshape()",[24,99210,99211],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[24,99213,99214],{},"①一维数组转换为二维数组",[140,99216,99218],{"className":32084,"code":99217,"language":32086,"meta":145,"style":145},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[48,99219,99220,99236,99241,99246,99251],{"__ignoreMap":145},[149,99221,99222,99224,99226,99228,99230,99232,99234],{"class":151,"line":152},[149,99223,2102],{"class":155},[149,99225,166],{"class":325},[149,99227,94682],{"class":155},[149,99229,830],{"class":309},[149,99231,2241],{"class":155},[149,99233,2386],{"class":309},[149,99235,1878],{"class":155},[149,99237,99238],{"class":151,"line":193},[149,99239,99240],{"class":295},"#将一维数组进行转换\n",[149,99242,99243],{"class":151,"line":235},[149,99244,99245],{"class":295},"#注意点：元素个数不可以变\n",[149,99247,99248],{"class":151,"line":340},[149,99249,99250],{"class":295},"#转换维度要保持一致，不一致就异常！！！\n",[149,99252,99253,99255,99257,99260,99262,99264,99266],{"class":151,"line":346},[149,99254,94986],{"class":155},[149,99256,166],{"class":325},[149,99258,99259],{"class":155},"a.reshape(",[149,99261,1045],{"class":309},[149,99263,2241],{"class":155},[149,99265,2207],{"class":309},[149,99267,1878],{"class":155},[24,99269,99270],{},"②一维数组转换为三维数组",[140,99272,99274],{"className":32084,"code":99273,"language":32086,"meta":145,"style":145},"aaa=a.reshape(2,3,2)\n",[48,99275,99276],{"__ignoreMap":145},[149,99277,99278,99280,99282,99284,99286,99288,99290,99292,99294],{"class":151,"line":152},[149,99279,97201],{"class":155},[149,99281,166],{"class":325},[149,99283,99259],{"class":155},[149,99285,1045],{"class":309},[149,99287,2241],{"class":155},[149,99289,1939],{"class":309},[149,99291,2241],{"class":155},[149,99293,1045],{"class":309},[149,99295,1878],{"class":155},[24,99297,99298],{},"③二维数组转化为一维数组",[140,99300,99302],{"className":32084,"code":99301,"language":32086,"meta":145,"style":145},"#知道元素个数：\naa.reshape(12)\n",[48,99303,99304,99309],{"__ignoreMap":145},[149,99305,99306],{"class":151,"line":152},[149,99307,99308],{"class":295},"#知道元素个数：\n",[149,99310,99311,99314,99316],{"class":151,"line":193},[149,99312,99313],{"class":155},"aa.reshape(",[149,99315,2361],{"class":309},[149,99317,1878],{"class":155},[140,99319,99321],{"className":32084,"code":99320,"language":32086,"meta":145,"style":145},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[48,99322,99323,99328],{"__ignoreMap":145},[149,99324,99325],{"class":151,"line":152},[149,99326,99327],{"class":295},"#不知道元素个数，参数传递-1\n",[149,99329,99330,99332,99334,99336],{"class":151,"line":193},[149,99331,99313],{"class":155},[149,99333,2395],{"class":325},[149,99335,830],{"class":309},[149,99337,1878],{"class":155},[24,99339,99340],{},"④三维数组转换为一维数组",[140,99342,99344],{"className":32084,"code":99343,"language":32086,"meta":145,"style":145},"aaa.reshape(-1)\n",[48,99345,99346],{"__ignoreMap":145},[149,99347,99348,99351,99353,99355],{"class":151,"line":152},[149,99349,99350],{"class":155},"aaa.reshape(",[149,99352,2395],{"class":325},[149,99354,830],{"class":309},[149,99356,1878],{"class":155},[14,99358,99360],{"id":99359},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[140,99362,99364],{"className":32084,"code":99363,"language":32086,"meta":145,"style":145},"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",[48,99365,99366,99393,99398,99402],{"__ignoreMap":145},[149,99367,99368,99370,99372,99374,99376,99378,99380,99382,99384,99386,99388,99390],{"class":151,"line":152},[149,99369,94986],{"class":155},[149,99371,166],{"class":325},[149,99373,94682],{"class":155},[149,99375,830],{"class":309},[149,99377,2241],{"class":155},[149,99379,2386],{"class":309},[149,99381,94687],{"class":155},[149,99383,1045],{"class":309},[149,99385,2241],{"class":155},[149,99387,2207],{"class":309},[149,99389,2292],{"class":155},[149,99391,99392],{"class":295},"#转换为2行6列的数组\n",[149,99394,99395],{"class":151,"line":193},[149,99396,99397],{"class":155},"aa.revel()\n",[149,99399,99400],{"class":151,"line":235},[149,99401,95244],{"class":295},[149,99403,99404],{"class":151,"line":340},[149,99405,99406],{"class":295},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99408,99410],{"id":99409},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[140,99412,99414],{"className":32084,"code":99413,"language":32086,"meta":145,"style":145},"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",[48,99415,99416,99440,99445,99449],{"__ignoreMap":145},[149,99417,99418,99420,99422,99424,99426,99428,99430,99432,99434,99436,99438],{"class":151,"line":152},[149,99419,94986],{"class":155},[149,99421,166],{"class":325},[149,99423,94682],{"class":155},[149,99425,830],{"class":309},[149,99427,2241],{"class":155},[149,99429,2386],{"class":309},[149,99431,94687],{"class":155},[149,99433,1045],{"class":309},[149,99435,2241],{"class":155},[149,99437,2207],{"class":309},[149,99439,1878],{"class":155},[149,99441,99442],{"class":151,"line":193},[149,99443,99444],{"class":155},"aa.flatten()\n",[149,99446,99447],{"class":151,"line":235},[149,99448,95244],{"class":295},[149,99450,99451],{"class":151,"line":340},[149,99452,99406],{"class":295},[14,99454,99456],{"id":99455},"_54-使用resize","5.4 使用resize()",[24,99458,99459],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[24,99461,99462],{},"通过resize方法可以改变数组的维度",[24,99464,99465],{},"#resize修改数组维度",[24,99467,99468],{},"#以元组的形式指定形状",[24,99470,99471],{},"#改变的是原数组",[140,99473,99475],{"className":32084,"code":99474,"language":32086,"meta":145,"style":145},"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",[48,99476,99477,99493,99513,99526,99530],{"__ignoreMap":145},[149,99478,99479,99481,99483,99485,99487,99489,99491],{"class":151,"line":152},[149,99480,2102],{"class":155},[149,99482,166],{"class":325},[149,99484,94682],{"class":155},[149,99486,830],{"class":309},[149,99488,2241],{"class":155},[149,99490,2386],{"class":309},[149,99492,1878],{"class":155},[149,99494,99495,99498,99500,99502,99504,99506,99508,99510],{"class":151,"line":193},[149,99496,99497],{"class":155},"a.shape",[149,99499,166],{"class":325},[149,99501,319],{"class":155},[149,99503,1045],{"class":309},[149,99505,2241],{"class":155},[149,99507,2207],{"class":309},[149,99509,2292],{"class":155},[149,99511,99512],{"class":295},"#改变了原数组\n",[149,99514,99515,99517,99519,99522,99524],{"class":151,"line":235},[149,99516,2102],{"class":155},[149,99518,166],{"class":325},[149,99520,99521],{"class":155},"resize((",[149,99523,2361],{"class":309},[149,99525,32203],{"class":155},[149,99527,99528],{"class":151,"line":340},[149,99529,95244],{"class":295},[149,99531,99532],{"class":151,"line":346},[149,99533,99406],{"class":295},[140,99535,99537],{"className":32084,"code":99536,"language":32086,"meta":145,"style":145},"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",[48,99538,99539,99552,99556,99560,99565,99570,99575,99580,99585,99590],{"__ignoreMap":145},[149,99540,99541,99544,99546,99548,99550],{"class":151,"line":152},[149,99542,99543],{"class":155},"a.resize((",[149,99545,2207],{"class":309},[149,99547,2241],{"class":155},[149,99549,1045],{"class":309},[149,99551,32203],{"class":155},[149,99553,99554],{"class":151,"line":193},[149,99555,95244],{"class":295},[149,99557,99558],{"class":151,"line":235},[149,99559,95608],{"class":169},[149,99561,99562],{"class":151,"line":340},[149,99563,99564],{"class":169},"array([[ 1,  2],\n",[149,99566,99567],{"class":151,"line":346},[149,99568,99569],{"class":169},"       [ 3,  4],\n",[149,99571,99572],{"class":151,"line":352},[149,99573,99574],{"class":169},"       [ 5,  6],\n",[149,99576,99577],{"class":151,"line":1021},[149,99578,99579],{"class":169},"       [ 7,  8],\n",[149,99581,99582],{"class":151,"line":1035},[149,99583,99584],{"class":169},"       [ 9, 10],\n",[149,99586,99587],{"class":151,"line":1054},[149,99588,99589],{"class":169},"       [11, 12]])\n",[149,99591,99592],{"class":151,"line":1072},[149,99593,95608],{"class":169},[14,99595,99597],{"id":99596},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[24,99599,99600],{},"改变了原数组",[140,99602,99604],{"className":32084,"code":99603,"language":32086,"meta":145,"style":145},"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",[48,99605,99606,99622,99638,99642,99646,99650,99654],{"__ignoreMap":145},[149,99607,99608,99610,99612,99614,99616,99618,99620],{"class":151,"line":152},[149,99609,2102],{"class":155},[149,99611,166],{"class":325},[149,99613,94682],{"class":155},[149,99615,830],{"class":309},[149,99617,2241],{"class":155},[149,99619,2386],{"class":309},[149,99621,1878],{"class":155},[149,99623,99624,99626,99628,99630,99632,99634,99636],{"class":151,"line":193},[149,99625,99497],{"class":155},[149,99627,166],{"class":325},[149,99629,319],{"class":155},[149,99631,1045],{"class":309},[149,99633,2241],{"class":155},[149,99635,2207],{"class":309},[149,99637,1878],{"class":155},[149,99639,99640],{"class":151,"line":235},[149,99641,95244],{"class":295},[149,99643,99644],{"class":151,"line":340},[149,99645,95608],{"class":169},[149,99647,99648],{"class":151,"line":346},[149,99649,98868],{"class":169},[149,99651,99652],{"class":151,"line":352},[149,99653,98873],{"class":169},[149,99655,99656],{"class":151,"line":1021},[149,99657,95608],{"class":169},[14,99659,99661],{"id":99660},"_56-重要比较","5.6 重要比较：",[24,99663,99664],{},[83,99665],{"alt":145,"src":99666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[24,99668,99669,99670,99672,99673,99675],{},"口诀：NumPy 函数要么用 ",[48,99671,97643],{},"，要么用 ",[48,99674,33202],{},"，创建结构用 shape，造数据用 size",[24,99677,99678],{},[83,99679],{"alt":145,"src":99680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1783,99682,99683],{},"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":145,"searchDepth":193,"depth":193,"links":99685},[99686,99687,99688,99689,99690,99691],{"id":99207,"depth":193,"text":99208},{"id":99359,"depth":193,"text":99360},{"id":99409,"depth":193,"text":99410},{"id":99455,"depth":193,"text":99456},{"id":99596,"depth":193,"text":99597},{"id":99660,"depth":193,"text":99661},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99199,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99698,"title":99699,"body":99700,"description":1797,"extension":1798,"meta":100772,"navigation":1800,"path":100773,"seo":100774,"stem":100775,"__hash__":100776},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99701,"toc":100766},[99702,99705,99709,99712,99715,99718,99783,99786,99826,99829,99911,99914,99919,99941,99943,99948,99953,99956,99959,100114,100117,100319,100323,100326,100329,100397,100399,100404,100407,100410,100490,100494,100497,100499,100572,100574,100579,100581,100661,100665,100668,100671,100674,100677,100680,100683,100763],[10,99703,99699],{"id":99704},"_6数组的拼接",[14,99706,99708],{"id":99707},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[24,99710,99711],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[24,99713,99714],{},"函数内部传两个数列构成的数列或者元组",[24,99716,99717],{},"①一维数组的拼接",[140,99719,99721],{"className":32084,"code":99720,"language":32086,"meta":145,"style":145},"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",[48,99722,99723,99743,99763,99768,99773,99778],{"__ignoreMap":145},[149,99724,99725,99727,99729,99731,99733,99735,99737,99739,99741],{"class":151,"line":152},[149,99726,2102],{"class":155},[149,99728,166],{"class":325},[149,99730,94704],{"class":155},[149,99732,830],{"class":309},[149,99734,2241],{"class":155},[149,99736,1045],{"class":309},[149,99738,2241],{"class":155},[149,99740,1939],{"class":309},[149,99742,6375],{"class":155},[149,99744,99745,99747,99749,99751,99753,99755,99757,99759,99761],{"class":151,"line":193},[149,99746,2127],{"class":155},[149,99748,166],{"class":325},[149,99750,94704],{"class":155},[149,99752,2157],{"class":309},[149,99754,2241],{"class":155},[149,99756,2182],{"class":309},[149,99758,2241],{"class":155},[149,99760,2207],{"class":309},[149,99762,6375],{"class":155},[149,99764,99765],{"class":151,"line":235},[149,99766,99767],{"class":295},"#调用concatenate进行数组拼接\n",[149,99769,99770],{"class":151,"line":340},[149,99771,99772],{"class":155},"np.concatenate((a,b))\n",[149,99774,99775],{"class":151,"line":346},[149,99776,99777],{"class":295},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[149,99779,99780],{"class":151,"line":352},[149,99781,99782],{"class":295},"#np.concatenate([a,b])\n",[24,99784,99785],{},"②一维多个数组拼接",[140,99787,99789],{"className":32084,"code":99788,"language":32086,"meta":145,"style":145},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[48,99790,99791,99796,99816,99821],{"__ignoreMap":145},[149,99792,99793],{"class":151,"line":152},[149,99794,99795],{"class":295},"#也可以多个数组进行拼接\n",[149,99797,99798,99800,99802,99804,99806,99808,99810,99812,99814],{"class":151,"line":193},[149,99799,2152],{"class":155},[149,99801,166],{"class":325},[149,99803,94704],{"class":155},[149,99805,2309],{"class":309},[149,99807,2241],{"class":155},[149,99809,2335],{"class":309},[149,99811,2241],{"class":155},[149,99813,2386],{"class":309},[149,99815,6375],{"class":155},[149,99817,99818],{"class":151,"line":235},[149,99819,99820],{"class":155},"c\n",[149,99822,99823],{"class":151,"line":340},[149,99824,99825],{"class":155},"np.concatenate((a,b,c))\n",[24,99827,99828],{},"③二维数组拼接",[140,99830,99832],{"className":32084,"code":99831,"language":32086,"meta":145,"style":145},"#二维数组使用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",[48,99833,99834,99839,99863,99888,99893,99898],{"__ignoreMap":145},[149,99835,99836],{"class":151,"line":152},[149,99837,99838],{"class":295},"#二维数组使用concatenate进行拼接\n",[149,99840,99841,99843,99845,99847,99849,99851,99853,99855,99857,99859,99861],{"class":151,"line":193},[149,99842,94986],{"class":155},[149,99844,166],{"class":325},[149,99846,94682],{"class":155},[149,99848,830],{"class":309},[149,99850,2241],{"class":155},[149,99852,2386],{"class":309},[149,99854,94687],{"class":155},[149,99856,1939],{"class":309},[149,99858,2241],{"class":155},[149,99860,2157],{"class":309},[149,99862,1878],{"class":155},[149,99864,99865,99868,99870,99872,99874,99876,99878,99880,99882,99884,99886],{"class":151,"line":235},[149,99866,99867],{"class":155},"bb",[149,99869,166],{"class":325},[149,99871,94682],{"class":155},[149,99873,2200],{"class":309},[149,99875,2241],{"class":155},[149,99877,2505],{"class":309},[149,99879,94687],{"class":155},[149,99881,1939],{"class":309},[149,99883,2241],{"class":155},[149,99885,2157],{"class":309},[149,99887,1878],{"class":155},[149,99889,99890],{"class":151,"line":340},[149,99891,99892],{"class":295},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[149,99894,99895],{"class":151,"line":346},[149,99896,99897],{"class":295},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[149,99899,99900,99903,99905,99907,99909],{"class":151,"line":352},[149,99901,99902],{"class":155},"np.concatenate((aa,bb),",[149,99904,49220],{"class":6932},[149,99906,166],{"class":325},[149,99908,2056],{"class":309},[149,99910,1878],{"class":155},[24,99912,99913],{},"结果：",[24,99915,99916],{},[83,99917],{"alt":145,"src":99918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[140,99920,99922],{"className":32084,"code":99921,"language":32086,"meta":145,"style":145},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[48,99923,99924,99929],{"__ignoreMap":145},[149,99925,99926],{"class":151,"line":152},[149,99927,99928],{"class":295},"#指定axis为1进行拼接\n",[149,99930,99931,99933,99935,99937,99939],{"class":151,"line":193},[149,99932,99902],{"class":155},[149,99934,49220],{"class":6932},[149,99936,166],{"class":325},[149,99938,830],{"class":309},[149,99940,1878],{"class":155},[24,99942,99913],{},[24,99944,99945],{},[83,99946],{"alt":145,"src":99947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[24,99949,99950],{},[31,99951,99952],{},"二维数组总结：0竖着方向，1横着方向",[24,99954,99955],{},"④三维数组拼接",[24,99957,99958],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[140,99960,99962],{"className":32084,"code":99961,"language":32086,"meta":145,"style":145},"#两个三行六列\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",[48,99963,99964,99969,99997,100027,100032,100049,100054,100059,100064,100081,100086,100091,100096,100109],{"__ignoreMap":145},[149,99965,99966],{"class":151,"line":152},[149,99967,99968],{"class":295},"#两个三行六列\n",[149,99970,99971,99973,99975,99977,99979,99981,99983,99985,99987,99989,99991,99993,99995],{"class":151,"line":193},[149,99972,97201],{"class":155},[149,99974,166],{"class":325},[149,99976,94682],{"class":155},[149,99978,830],{"class":309},[149,99980,2241],{"class":155},[149,99982,2188],{"class":309},[149,99984,94687],{"class":155},[149,99986,1045],{"class":309},[149,99988,2241],{"class":155},[149,99990,1939],{"class":309},[149,99992,2241],{"class":155},[149,99994,2207],{"class":309},[149,99996,1878],{"class":155},[149,99998,99999,100002,100004,100006,100008,100010,100013,100015,100017,100019,100021,100023,100025],{"class":151,"line":235},[149,100000,100001],{"class":155},"bbb",[149,100003,166],{"class":325},[149,100005,94682],{"class":155},[149,100007,2200],{"class":309},[149,100009,2241],{"class":155},[149,100011,100012],{"class":309},"137",[149,100014,94687],{"class":155},[149,100016,1045],{"class":309},[149,100018,2241],{"class":155},[149,100020,1939],{"class":309},[149,100022,2241],{"class":155},[149,100024,2207],{"class":309},[149,100026,1878],{"class":155},[149,100028,100029],{"class":151,"line":340},[149,100030,100031],{"class":295},"#axis=0\n",[149,100033,100034,100036,100038,100041,100043,100045,100047],{"class":151,"line":346},[149,100035,1720],{"class":155},[149,100037,166],{"class":325},[149,100039,100040],{"class":155},"np.concatenate((aaa,bbb),",[149,100042,49220],{"class":6932},[149,100044,166],{"class":325},[149,100046,2056],{"class":309},[149,100048,1878],{"class":155},[149,100050,100051],{"class":151,"line":352},[149,100052,100053],{"class":155},"s.shape\n",[149,100055,100056],{"class":151,"line":1021},[149,100057,100058],{"class":295},"#输出：(4,3,6)\n",[149,100060,100061],{"class":151,"line":1035},[149,100062,100063],{"class":295},"#axis=1\n",[149,100065,100066,100069,100071,100073,100075,100077,100079],{"class":151,"line":1054},[149,100067,100068],{"class":155},"ss",[149,100070,166],{"class":325},[149,100072,100040],{"class":155},[149,100074,49220],{"class":6932},[149,100076,166],{"class":325},[149,100078,830],{"class":309},[149,100080,1878],{"class":155},[149,100082,100083],{"class":151,"line":1072},[149,100084,100085],{"class":155},"ss.shape\n",[149,100087,100088],{"class":151,"line":1090},[149,100089,100090],{"class":295},"#输出：(2,6,6)\n",[149,100092,100093],{"class":151,"line":1633},[149,100094,100095],{"class":295},"#axis=2\n",[149,100097,100098,100100,100102,100104,100106],{"class":151,"line":1644},[149,100099,100040],{"class":155},[149,100101,49220],{"class":6932},[149,100103,166],{"class":325},[149,100105,1045],{"class":309},[149,100107,100108],{"class":155},").shape\n",[149,100110,100111],{"class":151,"line":3348},[149,100112,100113],{"class":295},"#输出：（2，3，12）\n",[24,100115,100116],{},"⑤四维数组拼接",[140,100118,100120],{"className":32084,"code":100119,"language":32086,"meta":145,"style":145},"#两个三行六列\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",[48,100121,100122,100126,100154,100182,100207,100233,100237,100250,100255,100259,100271,100276,100280,100292,100297,100302,100314],{"__ignoreMap":145},[149,100123,100124],{"class":151,"line":152},[149,100125,99968],{"class":295},[149,100127,100128,100130,100132,100134,100136,100138,100140,100142,100144,100146,100148,100150,100152],{"class":151,"line":193},[149,100129,97201],{"class":155},[149,100131,166],{"class":325},[149,100133,94682],{"class":155},[149,100135,830],{"class":309},[149,100137,2241],{"class":155},[149,100139,2188],{"class":309},[149,100141,94687],{"class":155},[149,100143,1045],{"class":309},[149,100145,2241],{"class":155},[149,100147,1939],{"class":309},[149,100149,2241],{"class":155},[149,100151,2207],{"class":309},[149,100153,1878],{"class":155},[149,100155,100156,100158,100160,100162,100164,100166,100168,100170,100172,100174,100176,100178,100180],{"class":151,"line":235},[149,100157,100001],{"class":155},[149,100159,166],{"class":325},[149,100161,94682],{"class":155},[149,100163,2200],{"class":309},[149,100165,2241],{"class":155},[149,100167,100012],{"class":309},[149,100169,94687],{"class":155},[149,100171,1045],{"class":309},[149,100173,2241],{"class":155},[149,100175,1939],{"class":309},[149,100177,2241],{"class":155},[149,100179,2207],{"class":309},[149,100181,1878],{"class":155},[149,100183,100184,100187,100189,100191,100193,100195,100197,100199,100201,100203,100205],{"class":151,"line":340},[149,100185,100186],{"class":155},"aaaa",[149,100188,166],{"class":325},[149,100190,99350],{"class":155},[149,100192,1045],{"class":309},[149,100194,2241],{"class":155},[149,100196,1939],{"class":309},[149,100198,2241],{"class":155},[149,100200,1939],{"class":309},[149,100202,2241],{"class":155},[149,100204,1045],{"class":309},[149,100206,1878],{"class":155},[149,100208,100209,100212,100214,100217,100219,100221,100223,100225,100227,100229,100231],{"class":151,"line":346},[149,100210,100211],{"class":155},"bbbb",[149,100213,166],{"class":325},[149,100215,100216],{"class":155},"bbb.reshape(",[149,100218,1045],{"class":309},[149,100220,2241],{"class":155},[149,100222,1939],{"class":309},[149,100224,2241],{"class":155},[149,100226,1939],{"class":309},[149,100228,2241],{"class":155},[149,100230,1045],{"class":309},[149,100232,1878],{"class":155},[149,100234,100235],{"class":151,"line":352},[149,100236,100031],{"class":295},[149,100238,100239,100242,100244,100246,100248],{"class":151,"line":1021},[149,100240,100241],{"class":155},"np.concatenate((aaaa,bbbb),",[149,100243,49220],{"class":6932},[149,100245,166],{"class":325},[149,100247,2056],{"class":309},[149,100249,100108],{"class":155},[149,100251,100252],{"class":151,"line":1035},[149,100253,100254],{"class":295},"#结果：（4，3，3，2）\n",[149,100256,100257],{"class":151,"line":1054},[149,100258,100063],{"class":295},[149,100260,100261,100263,100265,100267,100269],{"class":151,"line":1072},[149,100262,100241],{"class":155},[149,100264,49220],{"class":6932},[149,100266,166],{"class":325},[149,100268,830],{"class":309},[149,100270,100108],{"class":155},[149,100272,100273],{"class":151,"line":1090},[149,100274,100275],{"class":295},"#结果：（2，6，3，2）\n",[149,100277,100278],{"class":151,"line":1633},[149,100279,100095],{"class":295},[149,100281,100282,100284,100286,100288,100290],{"class":151,"line":1644},[149,100283,100241],{"class":155},[149,100285,49220],{"class":6932},[149,100287,166],{"class":325},[149,100289,1045],{"class":309},[149,100291,100108],{"class":155},[149,100293,100294],{"class":151,"line":3348},[149,100295,100296],{"class":295},"#结果：（2，3，6，2）\n",[149,100298,100299],{"class":151,"line":3362},[149,100300,100301],{"class":295},"#axis=3\n",[149,100303,100304,100306,100308,100310,100312],{"class":151,"line":3367},[149,100305,100241],{"class":155},[149,100307,49220],{"class":6932},[149,100309,166],{"class":325},[149,100311,1939],{"class":309},[149,100313,100108],{"class":155},[149,100315,100316],{"class":151,"line":3373},[149,100317,100318],{"class":295},"#结果：（2，3，3，4）\n",[14,100320,100322],{"id":100321},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[24,100324,100325],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[24,100327,100328],{},"①二维数组",[140,100330,100332],{"className":32084,"code":100331,"language":32086,"meta":145,"style":145},"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",[48,100333,100334,100358,100382,100387,100392],{"__ignoreMap":145},[149,100335,100336,100338,100340,100342,100344,100346,100348,100350,100352,100354,100356],{"class":151,"line":152},[149,100337,94986],{"class":155},[149,100339,166],{"class":325},[149,100341,94682],{"class":155},[149,100343,830],{"class":309},[149,100345,2241],{"class":155},[149,100347,2386],{"class":309},[149,100349,94687],{"class":155},[149,100351,1939],{"class":309},[149,100353,2241],{"class":155},[149,100355,2157],{"class":309},[149,100357,1878],{"class":155},[149,100359,100360,100362,100364,100366,100368,100370,100372,100374,100376,100378,100380],{"class":151,"line":193},[149,100361,99867],{"class":155},[149,100363,166],{"class":325},[149,100365,94682],{"class":155},[149,100367,2200],{"class":309},[149,100369,2241],{"class":155},[149,100371,2505],{"class":309},[149,100373,94687],{"class":155},[149,100375,1939],{"class":309},[149,100377,2241],{"class":155},[149,100379,2157],{"class":309},[149,100381,1878],{"class":155},[149,100383,100384],{"class":151,"line":235},[149,100385,100386],{"class":155},"np.hstack((aa,bb))\n",[149,100388,100389],{"class":151,"line":340},[149,100390,100391],{"class":295},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[149,100393,100394],{"class":151,"line":346},[149,100395,100396],{"class":295},"#np.hstack([aa,bb])\n",[24,100398,99913],{},[24,100400,100401],{},[83,100402],{"alt":145,"src":100403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[24,100405,100406],{},"等效于concatenate()函数中axis=1时的情况",[24,100408,100409],{},"②三维数组",[140,100411,100413],{"className":32084,"code":100412,"language":32086,"meta":145,"style":145},"#两个三行六列\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",[48,100414,100415,100419,100447,100475,100480,100485],{"__ignoreMap":145},[149,100416,100417],{"class":151,"line":152},[149,100418,99968],{"class":295},[149,100420,100421,100423,100425,100427,100429,100431,100433,100435,100437,100439,100441,100443,100445],{"class":151,"line":193},[149,100422,97201],{"class":155},[149,100424,166],{"class":325},[149,100426,94682],{"class":155},[149,100428,830],{"class":309},[149,100430,2241],{"class":155},[149,100432,2188],{"class":309},[149,100434,94687],{"class":155},[149,100436,1045],{"class":309},[149,100438,2241],{"class":155},[149,100440,1939],{"class":309},[149,100442,2241],{"class":155},[149,100444,2207],{"class":309},[149,100446,1878],{"class":155},[149,100448,100449,100451,100453,100455,100457,100459,100461,100463,100465,100467,100469,100471,100473],{"class":151,"line":235},[149,100450,100001],{"class":155},[149,100452,166],{"class":325},[149,100454,94682],{"class":155},[149,100456,2200],{"class":309},[149,100458,2241],{"class":155},[149,100460,100012],{"class":309},[149,100462,94687],{"class":155},[149,100464,1045],{"class":309},[149,100466,2241],{"class":155},[149,100468,1939],{"class":309},[149,100470,2241],{"class":155},[149,100472,2207],{"class":309},[149,100474,1878],{"class":155},[149,100476,100477],{"class":151,"line":340},[149,100478,100479],{"class":295},"#使用hstack\n",[149,100481,100482],{"class":151,"line":346},[149,100483,100484],{"class":155},"np.hstack((aaa,bbb)).shape\n",[149,100486,100487],{"class":151,"line":352},[149,100488,100489],{"class":295},"#输出：（2，6，6）\n",[14,100491,100493],{"id":100492},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[24,100495,100496],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[24,100498,100328],{},[140,100500,100502],{"className":32084,"code":100501,"language":32086,"meta":145,"style":145},"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",[48,100503,100504,100528,100552,100557,100562,100567],{"__ignoreMap":145},[149,100505,100506,100508,100510,100512,100514,100516,100518,100520,100522,100524,100526],{"class":151,"line":152},[149,100507,94986],{"class":155},[149,100509,166],{"class":325},[149,100511,94682],{"class":155},[149,100513,830],{"class":309},[149,100515,2241],{"class":155},[149,100517,2386],{"class":309},[149,100519,94687],{"class":155},[149,100521,1939],{"class":309},[149,100523,2241],{"class":155},[149,100525,2157],{"class":309},[149,100527,1878],{"class":155},[149,100529,100530,100532,100534,100536,100538,100540,100542,100544,100546,100548,100550],{"class":151,"line":193},[149,100531,99867],{"class":155},[149,100533,166],{"class":325},[149,100535,94682],{"class":155},[149,100537,2200],{"class":309},[149,100539,2241],{"class":155},[149,100541,2505],{"class":309},[149,100543,94687],{"class":155},[149,100545,1939],{"class":309},[149,100547,2241],{"class":155},[149,100549,2157],{"class":309},[149,100551,1878],{"class":155},[149,100553,100554],{"class":151,"line":235},[149,100555,100556],{"class":295},"#vstack 垂直方向进行堆叠\n",[149,100558,100559],{"class":151,"line":340},[149,100560,100561],{"class":155},"np.vstack((aa,bb))\n",[149,100563,100564],{"class":151,"line":346},[149,100565,100566],{"class":295},"#与hstack传的参数类似，等价于：\n",[149,100568,100569],{"class":151,"line":352},[149,100570,100571],{"class":155},"np.vstack([aa,bb])\n",[24,100573,99913],{},[24,100575,100576],{},[83,100577],{"alt":145,"src":100578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[24,100580,100409],{},[140,100582,100584],{"className":32084,"code":100583,"language":32086,"meta":145,"style":145},"#两个三行六列\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",[48,100585,100586,100590,100618,100646,100651,100656],{"__ignoreMap":145},[149,100587,100588],{"class":151,"line":152},[149,100589,99968],{"class":295},[149,100591,100592,100594,100596,100598,100600,100602,100604,100606,100608,100610,100612,100614,100616],{"class":151,"line":193},[149,100593,97201],{"class":155},[149,100595,166],{"class":325},[149,100597,94682],{"class":155},[149,100599,830],{"class":309},[149,100601,2241],{"class":155},[149,100603,2188],{"class":309},[149,100605,94687],{"class":155},[149,100607,1045],{"class":309},[149,100609,2241],{"class":155},[149,100611,1939],{"class":309},[149,100613,2241],{"class":155},[149,100615,2207],{"class":309},[149,100617,1878],{"class":155},[149,100619,100620,100622,100624,100626,100628,100630,100632,100634,100636,100638,100640,100642,100644],{"class":151,"line":235},[149,100621,100001],{"class":155},[149,100623,166],{"class":325},[149,100625,94682],{"class":155},[149,100627,2200],{"class":309},[149,100629,2241],{"class":155},[149,100631,100012],{"class":309},[149,100633,94687],{"class":155},[149,100635,1045],{"class":309},[149,100637,2241],{"class":155},[149,100639,1939],{"class":309},[149,100641,2241],{"class":155},[149,100643,2207],{"class":309},[149,100645,1878],{"class":155},[149,100647,100648],{"class":151,"line":340},[149,100649,100650],{"class":295},"#使用vstack\n",[149,100652,100653],{"class":151,"line":346},[149,100654,100655],{"class":155},"np.vstack((aaa,bbb)).shape\n",[149,100657,100658],{"class":151,"line":352},[149,100659,100660],{"class":295},"#输出：（4，3，6）\n",[14,100662,100664],{"id":100663},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[24,100666,100667],{},"该方法是三维数组特有的方法",[24,100669,100670],{},"也就是说",[24,100672,100673],{},"一维数组拼接方法用：concatenate()",[24,100675,100676],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[24,100678,100679],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[24,100681,100682],{},"四维数组及多维数组只能用concatenate进行拼接",[140,100684,100686],{"className":32084,"code":100685,"language":32086,"meta":145,"style":145},"#两个三行六列\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",[48,100687,100688,100692,100720,100748,100753,100758],{"__ignoreMap":145},[149,100689,100690],{"class":151,"line":152},[149,100691,99968],{"class":295},[149,100693,100694,100696,100698,100700,100702,100704,100706,100708,100710,100712,100714,100716,100718],{"class":151,"line":193},[149,100695,97201],{"class":155},[149,100697,166],{"class":325},[149,100699,94682],{"class":155},[149,100701,830],{"class":309},[149,100703,2241],{"class":155},[149,100705,2188],{"class":309},[149,100707,94687],{"class":155},[149,100709,1045],{"class":309},[149,100711,2241],{"class":155},[149,100713,1939],{"class":309},[149,100715,2241],{"class":155},[149,100717,2207],{"class":309},[149,100719,1878],{"class":155},[149,100721,100722,100724,100726,100728,100730,100732,100734,100736,100738,100740,100742,100744,100746],{"class":151,"line":235},[149,100723,100001],{"class":155},[149,100725,166],{"class":325},[149,100727,94682],{"class":155},[149,100729,2200],{"class":309},[149,100731,2241],{"class":155},[149,100733,100012],{"class":309},[149,100735,94687],{"class":155},[149,100737,1045],{"class":309},[149,100739,2241],{"class":155},[149,100741,1939],{"class":309},[149,100743,2241],{"class":155},[149,100745,2207],{"class":309},[149,100747,1878],{"class":155},[149,100749,100750],{"class":151,"line":340},[149,100751,100752],{"class":295},"#使用dstack\n",[149,100754,100755],{"class":151,"line":346},[149,100756,100757],{"class":155},"np.dstack((aaa,bbb)).shape\n",[149,100759,100760],{"class":151,"line":352},[149,100761,100762],{"class":295},"#结果：（2，3，12）\n",[1783,100764,100765],{},"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":145,"searchDepth":193,"depth":193,"links":100767},[100768,100769,100770,100771],{"id":99707,"depth":193,"text":99708},{"id":100321,"depth":193,"text":100322},{"id":100492,"depth":193,"text":100493},{"id":100663,"depth":193,"text":100664},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99699,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100778,"title":100779,"body":100780,"description":1797,"extension":1798,"meta":101055,"navigation":1800,"path":101056,"seo":101057,"stem":101058,"__hash__":101059},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100781,"toc":101053},[100782,100785,100788,100882,100885,100888,100891,100894,100897,100900,100903,100906,101050],[10,100783,100779],{"id":100784},"_7数组转置",[24,100786,100787],{},"使用transpose()函数",[140,100789,100791],{"className":32084,"code":100790,"language":32086,"meta":145,"style":145},"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",[48,100792,100793,100803,100827,100832,100837,100842,100847,100855,100859,100863,100868,100873,100878],{"__ignoreMap":145},[149,100794,100795,100797,100799,100801],{"class":151,"line":152},[149,100796,32098],{"class":325},[149,100798,33086],{"class":155},[149,100800,33089],{"class":325},[149,100802,33092],{"class":155},[149,100804,100805,100807,100809,100811,100813,100815,100817,100819,100821,100823,100825],{"class":151,"line":193},[149,100806,2102],{"class":155},[149,100808,166],{"class":325},[149,100810,33423],{"class":155},[149,100812,830],{"class":309},[149,100814,2241],{"class":155},[149,100816,2386],{"class":309},[149,100818,94687],{"class":155},[149,100820,2157],{"class":309},[149,100822,2241],{"class":155},[149,100824,1939],{"class":309},[149,100826,1878],{"class":155},[149,100828,100829],{"class":151,"line":235},[149,100830,100831],{"class":295},"#二维数组转置\n",[149,100833,100834],{"class":151,"line":340},[149,100835,100836],{"class":295},"#调用transpose()函数\n",[149,100838,100839],{"class":151,"line":346},[149,100840,100841],{"class":155},"a.transpose()\n",[149,100843,100844],{"class":151,"line":352},[149,100845,100846],{"class":295},"#对于二维数组也可以采用.T来实现\n",[149,100848,100849,100852],{"class":151,"line":1021},[149,100850,100851],{"class":155},"a.T",[149,100853,100854],{"class":295},"#与上述代码一样\n",[149,100856,100857],{"class":151,"line":1035},[149,100858,95244],{"class":295},[149,100860,100861],{"class":151,"line":1054},[149,100862,95608],{"class":169},[149,100864,100865],{"class":151,"line":1072},[149,100866,100867],{"class":169},"array([[ 1,  4,  7, 10],\n",[149,100869,100870],{"class":151,"line":1090},[149,100871,100872],{"class":169},"       [ 2,  5,  8, 11],\n",[149,100874,100875],{"class":151,"line":1633},[149,100876,100877],{"class":169},"       [ 3,  6,  9, 12]])\n",[149,100879,100880],{"class":151,"line":1644},[149,100881,95608],{"class":169},[24,100883,100884],{},"也可以使用np.transpose()的形式",[24,100886,100887],{},"#多维数组进行转置 np.transpose()",[24,100889,100890],{},"#对二维数组也可以使用np.transpose()进行转置",[24,100892,100893],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[24,100895,100896],{},"第二个参数，维度可以理解为用axis中的数来理解",[24,100898,100899],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[24,100901,100902],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[24,100904,100905],{},"四维及以上的数组也是一样的道理",[140,100907,100909],{"className":32084,"code":100908,"language":32086,"meta":145,"style":145},"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",[48,100910,100911,100939,100944,100949,100954,100972,100977,101009,101014,101019,101024,101045],{"__ignoreMap":145},[149,100912,100913,100915,100917,100919,100921,100923,100925,100927,100929,100931,100933,100935,100937],{"class":151,"line":152},[149,100914,2681],{"class":155},[149,100916,166],{"class":325},[149,100918,94682],{"class":155},[149,100920,830],{"class":309},[149,100922,2241],{"class":155},[149,100924,2188],{"class":309},[149,100926,94687],{"class":155},[149,100928,1939],{"class":309},[149,100930,2241],{"class":155},[149,100932,2207],{"class":309},[149,100934,2241],{"class":155},[149,100936,1045],{"class":309},[149,100938,1878],{"class":155},[149,100940,100941],{"class":151,"line":193},[149,100942,100943],{"class":155},"x.shape\n",[149,100945,100946],{"class":151,"line":235},[149,100947,100948],{"class":295},"#结果：（3,6,2）\n",[149,100950,100951],{"class":151,"line":340},[149,100952,100953],{"class":295},"#使用np.transpose()进行转置 变为(2,6,3)\n",[149,100955,100956,100959,100961,100963,100965,100967,100969],{"class":151,"line":346},[149,100957,100958],{"class":155},"np.transpose(x,(",[149,100960,1045],{"class":309},[149,100962,2241],{"class":155},[149,100964,830],{"class":309},[149,100966,2241],{"class":155},[149,100968,2056],{"class":309},[149,100970,100971],{"class":155},")).shape\n",[149,100973,100974],{"class":151,"line":352},[149,100975,100976],{"class":295},"#结果：(2,6,3)\n",[149,100978,100979,100981,100983,100985,100987,100989,100991,100993,100995,100997,100999,101001,101003,101005,101007],{"class":151,"line":1021},[149,100980,100186],{"class":155},[149,100982,166],{"class":325},[149,100984,94682],{"class":155},[149,100986,830],{"class":309},[149,100988,2241],{"class":155},[149,100990,2188],{"class":309},[149,100992,94687],{"class":155},[149,100994,1939],{"class":309},[149,100996,2241],{"class":155},[149,100998,1045],{"class":309},[149,101000,2241],{"class":155},[149,101002,830],{"class":309},[149,101004,2241],{"class":155},[149,101006,2207],{"class":309},[149,101008,1878],{"class":155},[149,101010,101011],{"class":151,"line":1035},[149,101012,101013],{"class":155},"aaaa.shape\n",[149,101015,101016],{"class":151,"line":1054},[149,101017,101018],{"class":295},"#结果：（3，2，1，6）\n",[149,101020,101021],{"class":151,"line":1072},[149,101022,101023],{"class":295},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[149,101025,101026,101029,101031,101033,101035,101037,101039,101041,101043],{"class":151,"line":1090},[149,101027,101028],{"class":155},"np.transpose(aaaa,(",[149,101030,830],{"class":309},[149,101032,2241],{"class":155},[149,101034,1045],{"class":309},[149,101036,2241],{"class":155},[149,101038,2056],{"class":309},[149,101040,2241],{"class":155},[149,101042,1939],{"class":309},[149,101044,100971],{"class":155},[149,101046,101047],{"class":151,"line":1633},[149,101048,101049],{"class":295},"#结果：(2,1,3,6)\n",[1783,101051,101052],{},"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":145,"searchDepth":193,"depth":193,"links":101054},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100779,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101061,"title":101062,"body":101063,"description":1797,"extension":1798,"meta":101797,"navigation":1800,"path":101798,"seo":101799,"stem":101800,"__hash__":101801},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101064,"toc":101795},[101065,101068,101071,101074,101077,101080,101083,101086,101089,101198,101201,101204,101792],[10,101066,101062],{"id":101067},"_8数组分割",[24,101069,101070],{},"split分割",[24,101072,101073],{},"numpy.split(ary,indics_or_sections,axis)",[24,101075,101076],{},"解释：",[24,101078,101079],{},"ary:被分割的数组",[24,101081,101082],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[24,101084,101085],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[24,101087,101088],{},"①一维数组的分割",[140,101090,101092],{"className":32084,"code":101091,"language":32086,"meta":145,"style":145},"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",[48,101093,101094,101110,101115,101124,101128,101133,101141,101145,101150,101155,101168,101172,101177,101189,101193],{"__ignoreMap":145},[149,101095,101096,101098,101100,101102,101104,101106,101108],{"class":151,"line":152},[149,101097,2102],{"class":155},[149,101099,166],{"class":325},[149,101101,94682],{"class":155},[149,101103,830],{"class":309},[149,101105,2241],{"class":155},[149,101107,2283],{"class":309},[149,101109,1878],{"class":155},[149,101111,101112],{"class":151,"line":193},[149,101113,101114],{"class":295},"#如果传入整数，必须能够平分，否则会报错\n",[149,101116,101117,101120,101122],{"class":151,"line":235},[149,101118,101119],{"class":155},"np.split(a,",[149,101121,1045],{"class":309},[149,101123,1878],{"class":155},[149,101125,101126],{"class":151,"line":340},[149,101127,95244],{"class":295},[149,101129,101130],{"class":151,"line":346},[149,101131,101132],{"class":295},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[149,101134,101135,101137,101139],{"class":151,"line":352},[149,101136,101119],{"class":155},[149,101138,2157],{"class":309},[149,101140,1878],{"class":155},[149,101142,101143],{"class":151,"line":1021},[149,101144,95244],{"class":295},[149,101146,101147],{"class":151,"line":1035},[149,101148,101149],{"class":295},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[149,101151,101152],{"class":151,"line":1054},[149,101153,101154],{"class":295},"#传入数组\n",[149,101156,101157,101160,101162,101164,101166],{"class":151,"line":1072},[149,101158,101159],{"class":155},"np.split(a,[",[149,101161,1939],{"class":309},[149,101163,2241],{"class":155},[149,101165,2182],{"class":309},[149,101167,6375],{"class":155},[149,101169,101170],{"class":151,"line":1090},[149,101171,95244],{"class":295},[149,101173,101174],{"class":151,"line":1633},[149,101175,101176],{"class":295},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[149,101178,101179,101181,101183,101185,101187],{"class":151,"line":1644},[149,101180,101159],{"class":155},[149,101182,2182],{"class":309},[149,101184,2241],{"class":155},[149,101186,2232],{"class":309},[149,101188,6375],{"class":155},[149,101190,101191],{"class":151,"line":3348},[149,101192,95244],{"class":295},[149,101194,101195],{"class":151,"line":3362},[149,101196,101197],{"class":295},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[24,101199,101200],{},"②二维数组的分割",[24,101202,101203],{},"使用split()",[140,101205,101207],{"className":32084,"code":101206,"language":32086,"meta":145,"style":145},"#二维数组分割\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",[48,101208,101209,101214,101238,101243,101252,101256,101260,101265,101270,101275,101280,101285,101290,101295,101299,101312,101316,101320,101324,101328,101332,101337,101342,101347,101351,101356,101372,101376,101380,101385,101390,101395,101400,101405,101410,101415,101420,101425,101430,101435,101440,101445,101450,101455,101460,101465,101470,101474,101478,101498,101502,101506,101511,101516,101521,101526,101531,101536,101541,101546,101551,101556,101561,101566,101571,101576,101581,101586,101591,101596,101600,101605,101614,101618,101622,101626,101630,101634,101638,101642,101646,101650,101659,101663,101667,101671,101675,101679,101683,101687,101691,101695,101699,101703,101707,101711,101715,101719,101723,101727,101731,101735,101739,101743,101756,101760,101764,101768,101772,101776,101780,101784,101788],{"__ignoreMap":145},[149,101210,101211],{"class":151,"line":152},[149,101212,101213],{"class":295},"#二维数组分割\n",[149,101215,101216,101218,101220,101222,101224,101226,101228,101230,101232,101234,101236],{"class":151,"line":193},[149,101217,94986],{"class":155},[149,101219,166],{"class":325},[149,101221,94682],{"class":155},[149,101223,830],{"class":309},[149,101225,2241],{"class":155},[149,101227,2188],{"class":309},[149,101229,94687],{"class":155},[149,101231,2207],{"class":309},[149,101233,2241],{"class":155},[149,101235,2207],{"class":309},[149,101237,1878],{"class":155},[149,101239,101240],{"class":151,"line":235},[149,101241,101242],{"class":295},"#默认axis=0  传入整数平均分,按行来的\n",[149,101244,101245,101248,101250],{"class":151,"line":340},[149,101246,101247],{"class":155},"np.split(aa,",[149,101249,1939],{"class":309},[149,101251,1878],{"class":155},[149,101253,101254],{"class":151,"line":346},[149,101255,97444],{"class":295},[149,101257,101258],{"class":151,"line":352},[149,101259,95608],{"class":169},[149,101261,101262],{"class":151,"line":1021},[149,101263,101264],{"class":169},"[array([[ 1,  2,  3,  4,  5,  6],\n",[149,101266,101267],{"class":151,"line":1035},[149,101268,101269],{"class":169},"        [ 7,  8,  9, 10, 11, 12]]),\n",[149,101271,101272],{"class":151,"line":1054},[149,101273,101274],{"class":169}," array([[13, 14, 15, 16, 17, 18],\n",[149,101276,101277],{"class":151,"line":1072},[149,101278,101279],{"class":169},"        [19, 20, 21, 22, 23, 24]]),\n",[149,101281,101282],{"class":151,"line":1090},[149,101283,101284],{"class":169}," array([[25, 26, 27, 28, 29, 30],\n",[149,101286,101287],{"class":151,"line":1633},[149,101288,101289],{"class":169},"        [31, 32, 33, 34, 35, 36]])]\n",[149,101291,101292],{"class":151,"line":1644},[149,101293,101294],{"class":169}," '''\n",[149,101296,101297],{"class":151,"line":3348},[149,101298,101154],{"class":295},[149,101300,101301,101304,101306,101308,101310],{"class":151,"line":3362},[149,101302,101303],{"class":155},"np.split(aa,[",[149,101305,1045],{"class":309},[149,101307,2241],{"class":155},[149,101309,2182],{"class":309},[149,101311,6375],{"class":155},[149,101313,101314],{"class":151,"line":3367},[149,101315,97444],{"class":295},[149,101317,101318],{"class":151,"line":3373},[149,101319,95608],{"class":169},[149,101321,101322],{"class":151,"line":3394},[149,101323,101264],{"class":169},[149,101325,101326],{"class":151,"line":3399},[149,101327,101269],{"class":169},[149,101329,101330],{"class":151,"line":3413},[149,101331,101274],{"class":169},[149,101333,101334],{"class":151,"line":3418},[149,101335,101336],{"class":169},"        [19, 20, 21, 22, 23, 24],\n",[149,101338,101339],{"class":151,"line":3447},[149,101340,101341],{"class":169},"        [25, 26, 27, 28, 29, 30]]),\n",[149,101343,101344],{"class":151,"line":3452},[149,101345,101346],{"class":169}," array([[31, 32, 33, 34, 35, 36]])]\n",[149,101348,101349],{"class":151,"line":3469},[149,101350,95608],{"class":169},[149,101352,101353],{"class":151,"line":3474},[149,101354,101355],{"class":295},"#axis=1 按照列来分\n",[149,101357,101358,101360,101362,101364,101366,101368,101370],{"class":151,"line":3479},[149,101359,101247],{"class":155},[149,101361,1939],{"class":309},[149,101363,2241],{"class":155},[149,101365,49220],{"class":6932},[149,101367,166],{"class":325},[149,101369,830],{"class":309},[149,101371,1878],{"class":155},[149,101373,101374],{"class":151,"line":3484},[149,101375,97444],{"class":295},[149,101377,101378],{"class":151,"line":3498},[149,101379,95608],{"class":169},[149,101381,101382],{"class":151,"line":3503},[149,101383,101384],{"class":169},"[array([[ 1,  2],\n",[149,101386,101387],{"class":151,"line":4296},[149,101388,101389],{"class":169},"        [ 7,  8],\n",[149,101391,101392],{"class":151,"line":4310},[149,101393,101394],{"class":169},"        [13, 14],\n",[149,101396,101397],{"class":151,"line":4318},[149,101398,101399],{"class":169},"        [19, 20],\n",[149,101401,101402],{"class":151,"line":4323},[149,101403,101404],{"class":169},"        [25, 26],\n",[149,101406,101407],{"class":151,"line":4329},[149,101408,101409],{"class":169},"        [31, 32]]),\n",[149,101411,101412],{"class":151,"line":4335},[149,101413,101414],{"class":169}," array([[ 3,  4],\n",[149,101416,101417],{"class":151,"line":4340},[149,101418,101419],{"class":169},"        [ 9, 10],\n",[149,101421,101422],{"class":151,"line":9663},[149,101423,101424],{"class":169},"        [15, 16],\n",[149,101426,101427],{"class":151,"line":9687},[149,101428,101429],{"class":169},"        [21, 22],\n",[149,101431,101432],{"class":151,"line":9692},[149,101433,101434],{"class":169},"        [27, 28],\n",[149,101436,101437],{"class":151,"line":9698},[149,101438,101439],{"class":169},"        [33, 34]]),\n",[149,101441,101442],{"class":151,"line":9725},[149,101443,101444],{"class":169}," array([[ 5,  6],\n",[149,101446,101447],{"class":151,"line":9730},[149,101448,101449],{"class":169},"        [11, 12],\n",[149,101451,101452],{"class":151,"line":9736},[149,101453,101454],{"class":169},"        [17, 18],\n",[149,101456,101457],{"class":151,"line":9748},[149,101458,101459],{"class":169},"        [23, 24],\n",[149,101461,101462],{"class":151,"line":9760},[149,101463,101464],{"class":169},"        [29, 30],\n",[149,101466,101467],{"class":151,"line":9772},[149,101468,101469],{"class":169},"        [35, 36]])]\n",[149,101471,101472],{"class":151,"line":11430},[149,101473,101294],{"class":169},[149,101475,101476],{"class":151,"line":11455},[149,101477,101154],{"class":295},[149,101479,101480,101482,101484,101486,101488,101490,101492,101494,101496],{"class":151,"line":11478},[149,101481,101303],{"class":155},[149,101483,830],{"class":309},[149,101485,2241],{"class":155},[149,101487,1045],{"class":309},[149,101489,43315],{"class":155},[149,101491,49220],{"class":6932},[149,101493,166],{"class":325},[149,101495,830],{"class":309},[149,101497,1878],{"class":155},[149,101499,101500],{"class":151,"line":11502},[149,101501,95244],{"class":295},[149,101503,101504],{"class":151,"line":11507},[149,101505,95608],{"class":169},[149,101507,101508],{"class":151,"line":11512},[149,101509,101510],{"class":169},"[array([[ 1],\n",[149,101512,101513],{"class":151,"line":11517},[149,101514,101515],{"class":169},"        [ 7],\n",[149,101517,101518],{"class":151,"line":11526},[149,101519,101520],{"class":169},"        [13],\n",[149,101522,101523],{"class":151,"line":11531},[149,101524,101525],{"class":169},"        [19],\n",[149,101527,101528],{"class":151,"line":11537},[149,101529,101530],{"class":169},"        [25],\n",[149,101532,101533],{"class":151,"line":11558},[149,101534,101535],{"class":169},"        [31]]),\n",[149,101537,101538],{"class":151,"line":11564},[149,101539,101540],{"class":169}," array([[ 2],\n",[149,101542,101543],{"class":151,"line":11578},[149,101544,101545],{"class":169},"        [ 8],\n",[149,101547,101548],{"class":151,"line":11584},[149,101549,101550],{"class":169},"        [14],\n",[149,101552,101553],{"class":151,"line":11611},[149,101554,101555],{"class":169},"        [20],\n",[149,101557,101558],{"class":151,"line":11620},[149,101559,101560],{"class":169},"        [26],\n",[149,101562,101563],{"class":151,"line":11626},[149,101564,101565],{"class":169},"        [32]]),\n",[149,101567,101568],{"class":151,"line":11634},[149,101569,101570],{"class":169}," array([[ 3,  4,  5,  6],\n",[149,101572,101573],{"class":151,"line":11639},[149,101574,101575],{"class":169},"        [ 9, 10, 11, 12],\n",[149,101577,101578],{"class":151,"line":18314},[149,101579,101580],{"class":169},"        [15, 16, 17, 18],\n",[149,101582,101583],{"class":151,"line":18320},[149,101584,101585],{"class":169},"        [21, 22, 23, 24],\n",[149,101587,101588],{"class":151,"line":18343},[149,101589,101590],{"class":169},"        [27, 28, 29, 30],\n",[149,101592,101593],{"class":151,"line":18349},[149,101594,101595],{"class":169},"        [33, 34, 35, 36]])]\n",[149,101597,101598],{"class":151,"line":18372},[149,101599,95608],{"class":169},[149,101601,101602],{"class":151,"line":18386},[149,101603,101604],{"class":295},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[149,101606,101607,101610,101612],{"class":151,"line":18406},[149,101608,101609],{"class":155},"np.vsplit(aa,",[149,101611,1939],{"class":309},[149,101613,1878],{"class":155},[149,101615,101616],{"class":151,"line":18412},[149,101617,95244],{"class":295},[149,101619,101620],{"class":151,"line":18423},[149,101621,95608],{"class":169},[149,101623,101624],{"class":151,"line":18446},[149,101625,101264],{"class":169},[149,101627,101628],{"class":151,"line":18468},[149,101629,101269],{"class":169},[149,101631,101632],{"class":151,"line":18473},[149,101633,101274],{"class":169},[149,101635,101636],{"class":151,"line":18479},[149,101637,101279],{"class":169},[149,101639,101640],{"class":151,"line":18493},[149,101641,101284],{"class":169},[149,101643,101644],{"class":151,"line":18506},[149,101645,101289],{"class":169},[149,101647,101648],{"class":151,"line":18511},[149,101649,95608],{"class":169},[149,101651,101652,101655,101657],{"class":151,"line":18525},[149,101653,101654],{"class":155},"np.hsplit(aa,",[149,101656,1939],{"class":309},[149,101658,1878],{"class":155},[149,101660,101661],{"class":151,"line":18530},[149,101662,95244],{"class":295},[149,101664,101665],{"class":151,"line":18536},[149,101666,95608],{"class":169},[149,101668,101669],{"class":151,"line":18541},[149,101670,101384],{"class":169},[149,101672,101673],{"class":151,"line":18555},[149,101674,101389],{"class":169},[149,101676,101677],{"class":151,"line":18560},[149,101678,101394],{"class":169},[149,101680,101681],{"class":151,"line":18565},[149,101682,101399],{"class":169},[149,101684,101685],{"class":151,"line":18579},[149,101686,101404],{"class":169},[149,101688,101689],{"class":151,"line":18591},[149,101690,101409],{"class":169},[149,101692,101693],{"class":151,"line":18596},[149,101694,101414],{"class":169},[149,101696,101697],{"class":151,"line":18609},[149,101698,101419],{"class":169},[149,101700,101701],{"class":151,"line":18614},[149,101702,101424],{"class":169},[149,101704,101705],{"class":151,"line":18619},[149,101706,101429],{"class":169},[149,101708,101709],{"class":151,"line":18624},[149,101710,101434],{"class":169},[149,101712,101713],{"class":151,"line":18637},[149,101714,101439],{"class":169},[149,101716,101717],{"class":151,"line":18642},[149,101718,101444],{"class":169},[149,101720,101721],{"class":151,"line":34339},[149,101722,101449],{"class":169},[149,101724,101725],{"class":151,"line":34345},[149,101726,101454],{"class":169},[149,101728,101729],{"class":151,"line":34351},[149,101730,101459],{"class":169},[149,101732,101733],{"class":151,"line":34357},[149,101734,101464],{"class":169},[149,101736,101737],{"class":151,"line":34363},[149,101738,101469],{"class":169},[149,101740,101741],{"class":151,"line":34374},[149,101742,95608],{"class":169},[149,101744,101745,101748,101750,101752,101754],{"class":151,"line":34380},[149,101746,101747],{"class":155},"np.vsplit(aa,[",[149,101749,1045],{"class":309},[149,101751,2241],{"class":155},[149,101753,2182],{"class":309},[149,101755,6375],{"class":155},[149,101757,101758],{"class":151,"line":34400},[149,101759,95244],{"class":295},[149,101761,101762],{"class":151,"line":34406},[149,101763,95608],{"class":169},[149,101765,101766],{"class":151,"line":34417},[149,101767,101264],{"class":169},[149,101769,101770],{"class":151,"line":34423},[149,101771,101269],{"class":169},[149,101773,101774],{"class":151,"line":34429},[149,101775,101274],{"class":169},[149,101777,101778],{"class":151,"line":34435},[149,101779,101336],{"class":169},[149,101781,101782],{"class":151,"line":34441},[149,101783,101341],{"class":169},[149,101785,101786],{"class":151,"line":34447},[149,101787,101346],{"class":169},[149,101789,101790],{"class":151,"line":34453},[149,101791,101294],{"class":169},[1783,101793,101794],{},"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":145,"searchDepth":193,"depth":193,"links":101796},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101062,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101803,"title":101804,"body":101805,"description":1797,"extension":1798,"meta":102299,"navigation":1800,"path":102300,"seo":102301,"stem":102302,"__hash__":102303},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101806,"toc":102290},[101807,101810,101813,101838,101842,101901,101953,101957,101959,101995,102049,102051,102089,102160,102164,102169,102173,102176,102209,102212,102216,102219,102222,102225,102228,102233,102237,102240,102243,102246,102249,102254,102258,102263,102266,102287],[10,101808,101804],{"id":101809},"_9数学函数",[24,101811,101812],{},"补充回顾：python的列表推导式",[140,101814,101816],{"className":32084,"code":101815,"language":32086,"meta":145,"style":145},"[1\u002Fi for i in a]\n",[48,101817,101818],{"__ignoreMap":145},[149,101819,101820,101822,101824,101826,101829,101831,101833,101835],{"class":151,"line":152},[149,101821,810],{"class":155},[149,101823,830],{"class":309},[149,101825,2447],{"class":325},[149,101827,101828],{"class":155},"i ",[149,101830,4743],{"class":325},[149,101832,11152],{"class":155},[149,101834,27752],{"class":325},[149,101836,101837],{"class":155}," a]\n",[14,101839,101841],{"id":101840},"_91-求倒数","9.1 求倒数",[140,101843,101845],{"className":32084,"code":101844,"language":32086,"meta":145,"style":145},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[48,101846,101847,101852,101880,101892],{"__ignoreMap":145},[149,101848,101849],{"class":151,"line":152},[149,101850,101851],{"class":295},"#数组求倒数\n",[149,101853,101854,101856,101858,101860,101862,101864,101866,101868,101870,101872,101874,101876,101878],{"class":151,"line":193},[149,101855,2102],{"class":155},[149,101857,166],{"class":325},[149,101859,810],{"class":155},[149,101861,830],{"class":309},[149,101863,2241],{"class":155},[149,101865,1045],{"class":309},[149,101867,2241],{"class":155},[149,101869,1939],{"class":309},[149,101871,2241],{"class":155},[149,101873,2157],{"class":309},[149,101875,2241],{"class":155},[149,101877,2182],{"class":309},[149,101879,34952],{"class":155},[149,101881,101882,101884,101886,101889],{"class":151,"line":235},[149,101883,2127],{"class":155},[149,101885,166],{"class":325},[149,101887,101888],{"class":155},"np.array(a)",[149,101890,101891],{"class":295},"#将列表转换为数组\n",[149,101893,101894,101896,101898],{"class":151,"line":340},[149,101895,830],{"class":309},[149,101897,2447],{"class":325},[149,101899,101900],{"class":155},"b\n",[140,101902,101904],{"className":32084,"code":101903,"language":32086,"meta":145,"style":145},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[48,101905,101906,101934,101943,101948],{"__ignoreMap":145},[149,101907,101908,101910,101912,101914,101916,101918,101920,101922,101924,101926,101928,101930,101932],{"class":151,"line":152},[149,101909,2102],{"class":155},[149,101911,166],{"class":325},[149,101913,810],{"class":155},[149,101915,830],{"class":309},[149,101917,2241],{"class":155},[149,101919,1045],{"class":309},[149,101921,2241],{"class":155},[149,101923,1939],{"class":309},[149,101925,2241],{"class":155},[149,101927,2157],{"class":309},[149,101929,2241],{"class":155},[149,101931,2182],{"class":309},[149,101933,34952],{"class":155},[149,101935,101936,101938,101940],{"class":151,"line":193},[149,101937,2127],{"class":155},[149,101939,166],{"class":325},[149,101941,101942],{"class":155},"np.array(a)\n",[149,101944,101945],{"class":151,"line":235},[149,101946,101947],{"class":295},"#调用numpy中的函数reciprocal()\n",[149,101949,101950],{"class":151,"line":340},[149,101951,101952],{"class":155},"np.reciprocal(b)\n",[14,101954,101956],{"id":101955},"_92-求平方","9.2 求平方",[24,101958,96210],{},[140,101960,101962],{"className":32084,"code":101961,"language":32086,"meta":145,"style":145},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[48,101963,101964,101969,101974,101990],{"__ignoreMap":145},[149,101965,101966],{"class":151,"line":152},[149,101967,101968],{"class":295},"#square()，求平方\n",[149,101970,101971],{"class":151,"line":193},[149,101972,101973],{"class":295},"#一维数组\n",[149,101975,101976,101978,101980,101982,101984,101986,101988],{"class":151,"line":235},[149,101977,2102],{"class":155},[149,101979,166],{"class":325},[149,101981,94682],{"class":155},[149,101983,830],{"class":309},[149,101985,2241],{"class":155},[149,101987,2309],{"class":309},[149,101989,1878],{"class":155},[149,101991,101992],{"class":151,"line":340},[149,101993,101994],{"class":155},"np.square(a)\n",[140,101996,101998],{"className":32084,"code":101997,"language":32086,"meta":145,"style":145},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[48,101999,102000,102005,102010,102031],{"__ignoreMap":145},[149,102001,102002],{"class":151,"line":152},[149,102003,102004],{"class":295},"#或者通过循环遍历的形式来计算\n",[149,102006,102007],{"class":151,"line":193},[149,102008,102009],{"class":295},"#这是一个列表\n",[149,102011,102012,102015,102017,102019,102021,102023,102025,102028],{"class":151,"line":235},[149,102013,102014],{"class":155},"[i",[149,102016,2318],{"class":325},[149,102018,101828],{"class":155},[149,102020,4743],{"class":325},[149,102022,11152],{"class":155},[149,102024,27752],{"class":325},[149,102026,102027],{"class":155}," a]",[149,102029,102030],{"class":295},"#这个求完之后在数列当中\n",[149,102032,102033,102036,102038,102040,102042,102044,102046],{"class":151,"line":340},[149,102034,102035],{"class":155},"np.array([i",[149,102037,2318],{"class":325},[149,102039,101828],{"class":155},[149,102041,4743],{"class":325},[149,102043,11152],{"class":155},[149,102045,27752],{"class":325},[149,102047,102048],{"class":155}," a])\n",[24,102050,94971],{},[140,102052,102054],{"className":32084,"code":102053,"language":32086,"meta":145,"style":145},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[48,102055,102056,102060,102084],{"__ignoreMap":145},[149,102057,102058],{"class":151,"line":152},[149,102059,94981],{"class":295},[149,102061,102062,102064,102066,102068,102070,102072,102074,102076,102078,102080,102082],{"class":151,"line":193},[149,102063,94986],{"class":155},[149,102065,166],{"class":325},[149,102067,94682],{"class":155},[149,102069,830],{"class":309},[149,102071,2241],{"class":155},[149,102073,2386],{"class":309},[149,102075,94687],{"class":155},[149,102077,2157],{"class":309},[149,102079,2241],{"class":155},[149,102081,1939],{"class":309},[149,102083,1878],{"class":155},[149,102085,102086],{"class":151,"line":235},[149,102087,102088],{"class":155},"np.square(aa)\n",[140,102090,102092],{"className":32084,"code":102091,"language":32086,"meta":145,"style":145},"#传统的方式\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",[48,102093,102094,102099,102108,102124,102140,102155],{"__ignoreMap":145},[149,102095,102096],{"class":151,"line":152},[149,102097,102098],{"class":295},"#传统的方式\n",[149,102100,102101,102103,102105],{"class":151,"line":193},[149,102102,99867],{"class":155},[149,102104,166],{"class":325},[149,102106,102107],{"class":155},"np.empty_like(aa)\n",[149,102109,102110,102112,102114,102116,102118,102120,102122],{"class":151,"line":235},[149,102111,4743],{"class":325},[149,102113,11152],{"class":155},[149,102115,27752],{"class":325},[149,102117,34149],{"class":309},[149,102119,319],{"class":155},[149,102121,2157],{"class":309},[149,102123,32492],{"class":155},[149,102125,102126,102128,102130,102132,102134,102136,102138],{"class":151,"line":340},[149,102127,4919],{"class":325},[149,102129,11214],{"class":155},[149,102131,27752],{"class":325},[149,102133,34149],{"class":309},[149,102135,319],{"class":155},[149,102137,1939],{"class":309},[149,102139,32492],{"class":155},[149,102141,102142,102145,102147,102150,102152],{"class":151,"line":346},[149,102143,102144],{"class":155},"        bb[i,j]",[149,102146,166],{"class":325},[149,102148,102149],{"class":155},"aa[i,j]",[149,102151,2318],{"class":325},[149,102153,102154],{"class":155},"aa[i,j]\n",[149,102156,102157],{"class":151,"line":352},[149,102158,102159],{"class":155},"bb\n",[14,102161,102163],{"id":102162},"_93-求各元素的符号","9.3 求各元素的符号",[24,102165,102166],{},[83,102167],{"alt":145,"src":102168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102170,102172],{"id":102171},"_94-modf函数","9.4 modf函数",[24,102174,102175],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[140,102177,102179],{"className":32084,"code":102178,"language":32086,"meta":145,"style":145},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[48,102180,102181,102204],{"__ignoreMap":145},[149,102182,102183,102185,102187,102189,102191,102193,102195,102197,102199,102202],{"class":151,"line":152},[149,102184,2102],{"class":155},[149,102186,166],{"class":325},[149,102188,94682],{"class":155},[149,102190,2395],{"class":325},[149,102192,2309],{"class":309},[149,102194,2241],{"class":155},[149,102196,2309],{"class":309},[149,102198,2241],{"class":155},[149,102200,102201],{"class":309},"0.3",[149,102203,1878],{"class":155},[149,102205,102206],{"class":151,"line":193},[149,102207,102208],{"class":155},"np.modf(a)\n",[24,102210,102211],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102213,102215],{"id":102214},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[24,102217,102218],{},"np.cell()",[24,102220,102221],{},"np.floor()",[24,102223,102224],{},"np.rint()",[24,102226,102227],{},"对各元素分别向上取整、向下取整、四舍五入",[24,102229,102230],{},[83,102231],{"alt":145,"src":102232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102234,102236],{"id":102235},"_96-around函数","9.6 around()函数",[24,102238,102239],{},"around()函数也可以实现对数的小数位数进行操作",[24,102241,102242],{},"其中的参数：",[24,102244,102245],{},"1.要传的数组",[24,102247,102248],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[24,102250,102251],{},[83,102252],{"alt":145,"src":102253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102255,102257],{"id":102256},"_97-三角函数","9.7 三角函数",[24,102259,102260],{},[83,102261],{"alt":145,"src":102262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[24,102264,102265],{},"引入图像模块非常重要",[140,102267,102269],{"className":32084,"code":102268,"language":32086,"meta":145,"style":145},"from matplotlib import pyplot as plt\n",[48,102270,102271],{"__ignoreMap":145},[149,102272,102273,102275,102278,102280,102283,102285],{"class":151,"line":152},[149,102274,32443],{"class":325},[149,102276,102277],{"class":155}," matplotlib ",[149,102279,32098],{"class":325},[149,102281,102282],{"class":155}," pyplot ",[149,102284,33089],{"class":325},[149,102286,33143],{"class":155},[1783,102288,102289],{},"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":145,"searchDepth":193,"depth":193,"links":102291},[102292,102293,102294,102295,102296,102297,102298],{"id":101840,"depth":193,"text":101841},{"id":101955,"depth":193,"text":101956},{"id":102162,"depth":193,"text":102163},{"id":102171,"depth":193,"text":102172},{"id":102214,"depth":193,"text":102215},{"id":102235,"depth":193,"text":102236},{"id":102256,"depth":193,"text":102257},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101804,"description":1797},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102305,"title":102306,"body":102307,"description":1797,"extension":1798,"meta":102311,"navigation":1800,"path":102312,"seo":102313,"stem":102314,"__hash__":102315},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102308,"toc":102309},[],{"title":145,"searchDepth":193,"depth":193,"links":102310},[],{"category":52126},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102306,"description":1797},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102317,"title":102318,"body":102319,"description":145,"extension":1798,"meta":104327,"navigation":1800,"path":104328,"seo":104329,"stem":104330,"__hash__":104331},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102320,"toc":104303},[102321,102324,102328,102331,102334,102340,102343,102366,102369,102403,102406,102447,102451,102454,102547,102550,102594,102597,102614,102617,102631,102634,102637,102682,102685,102722,102726,102729,102735,102740,102760,102764,102767,102833,102836,102854,102858,102861,102890,102900,102906,102910,102913,102919,102930,102934,102937,102967,102970,103250,103253,103256,103267,103270,103273,103295,103302,103305,103323,103326,103329,103343,103351,103354,103380,103386,103389,103392,103402,103414,103434,103443,103463,103473,103497,103510,103524,103529,103570,103587,103612,103624,103644,103650,103695,103714,103731,103744,103760,103767,103779,103788,103823,103844,103869,103882,103906,103921,103946,103949,103970,103979,103982,103993,103997,104000,104006,104018,104025,104029,104032,104044,104047,104061,104064,104074,104084,104087,104127,104130,104134,104140,104143,104157,104161,104164,104197,104201,104204,104227,104235,104238,104244,104250,104253,104256,104284,104288,104291,104297,104300],[10,102322,102318],{"id":102323},"_1环境安装与第一个-mujoco-程序",[14,102325,102327],{"id":102326},"_1目标说明","1.目标说明",[24,102329,102330],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[24,102332,102333],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[140,102335,102338],{"className":102336,"code":102337,"language":1655,"meta":145},[1653],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[48,102339,102337],{"__ignoreMap":145},[24,102341,102342],{},"需要掌握:",[125,102344,102345,102348,102351,102356,102361],{},[45,102346,102347],{},"Fedora 44 下 MuJoCo 的系统依赖",[45,102349,102350],{},"Python 虚拟环境创建",[45,102352,102353],{},[48,102354,102355],{},"mujoco.MjModel",[45,102357,102358],{},[48,102359,102360],{},"mujoco.MjData",[45,102362,102363],{},[48,102364,102365],{},"mujoco.mj_step(model, data)",[24,102367,102368],{},"MuJoCo 中最重要的两个对象:",[2003,102370,102371,102381],{},[2006,102372,102373],{},[2009,102374,102375,102378],{},[2012,102376,102377],{"align":1566},"对象",[2012,102379,102380],{"align":1566},"含义",[2049,102382,102383,102393],{},[2009,102384,102385,102390],{},[2054,102386,102387],{"align":1566},[48,102388,102389],{},"MjModel",[2054,102391,102392],{"align":1566},"模型结构，来自 XML，基本不随时间变化",[2009,102394,102395,102400],{},[2054,102396,102397],{"align":1566},[48,102398,102399],{},"MjData",[2054,102401,102402],{"align":1566},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[24,102404,102405],{},"可以先用一个类比理解：",[2003,102407,102408,102418],{},[2006,102409,102410],{},[2009,102411,102412,102415],{},[2012,102413,102414],{"align":1566},"类比",[2012,102416,102417],{"align":1566},"MuJoCo 对象",[2049,102419,102420,102429,102438],{},[2009,102421,102422,102425],{},[2054,102423,102424],{"align":1566},"游戏地图和角色配置",[2054,102426,102427],{"align":1566},[48,102428,102389],{},[2009,102430,102431,102434],{},[2054,102432,102433],{"align":1566},"游戏运行到当前帧的状态",[2054,102435,102436],{"align":1566},[48,102437,102399],{},[2009,102439,102440,102443],{},[2054,102441,102442],{"align":1566},"前进一帧",[2054,102444,102445],{"align":1566},[48,102446,102365],{},[14,102448,102450],{"id":102449},"_2环境与依赖安装","2.环境与依赖安装",[24,102452,102453],{},"Fedora 44 系统依赖:",[140,102455,102457],{"className":25530,"code":102456,"language":25532,"meta":145,"style":145},"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",[48,102458,102459,102471,102484,102497,102507,102517,102536],{"__ignoreMap":145},[149,102460,102461,102463,102465,102467,102469],{"class":151,"line":152},[149,102462,26285],{"class":162},[149,102464,28024],{"class":169},[149,102466,25542],{"class":169},[149,102468,28109],{"class":309},[149,102470,26387],{"class":309},[149,102472,102473,102476,102479,102482],{"class":151,"line":193},[149,102474,102475],{"class":169},"  python3",[149,102477,102478],{"class":169}," python3-pip",[149,102480,102481],{"class":169}," python3-virtualenv",[149,102483,26387],{"class":309},[149,102485,102486,102489,102492,102495],{"class":151,"line":235},[149,102487,102488],{"class":169},"  mesa-libGL",[149,102490,102491],{"class":169}," mesa-libGLU",[149,102493,102494],{"class":169}," mesa-dri-drivers",[149,102496,26387],{"class":309},[149,102498,102499,102502,102505],{"class":151,"line":340},[149,102500,102501],{"class":169},"  libglvnd-glx",[149,102503,102504],{"class":169}," libglvnd-opengl",[149,102506,26387],{"class":309},[149,102508,102509,102512,102515],{"class":151,"line":346},[149,102510,102511],{"class":169},"  glfw",[149,102513,102514],{"class":169}," glfw-devel",[149,102516,26387],{"class":309},[149,102518,102519,102522,102525,102528,102531,102534],{"class":151,"line":352},[149,102520,102521],{"class":169},"  libX11",[149,102523,102524],{"class":169}," libXcursor",[149,102526,102527],{"class":169}," libXi",[149,102529,102530],{"class":169}," libXinerama",[149,102532,102533],{"class":169}," libXrandr",[149,102535,26387],{"class":309},[149,102537,102538,102541,102544],{"class":151,"line":1021},[149,102539,102540],{"class":169},"  gcc",[149,102542,102543],{"class":169}," gcc-c++",[149,102545,102546],{"class":169}," make\n",[24,102548,102549],{},"创建 Python 环境:",[140,102551,102553],{"className":25530,"code":102552,"language":25532,"meta":145,"style":145},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[48,102554,102555,102569,102577],{"__ignoreMap":145},[149,102556,102557,102560,102563,102566],{"class":151,"line":152},[149,102558,102559],{"class":162},"python3",[149,102561,102562],{"class":309}," -m",[149,102564,102565],{"class":169}," venv",[149,102567,102568],{"class":169}," .venv\n",[149,102570,102571,102574],{"class":151,"line":193},[149,102572,102573],{"class":309},"source",[149,102575,102576],{"class":169}," .venv\u002Fbin\u002Factivate\n",[149,102578,102579,102581,102583,102586,102588,102591],{"class":151,"line":235},[149,102580,32086],{"class":162},[149,102582,102562],{"class":309},[149,102584,102585],{"class":169}," pip",[149,102587,25542],{"class":169},[149,102589,102590],{"class":309}," --upgrade",[149,102592,102593],{"class":169}," pip\n",[24,102595,102596],{},"pip 安装:",[140,102598,102600],{"className":25530,"code":102599,"language":25532,"meta":145,"style":145},"pip install \"mujoco>=2.3\" numpy\n",[48,102601,102602],{"__ignoreMap":145},[149,102603,102604,102606,102608,102611],{"class":151,"line":152},[149,102605,25539],{"class":162},[149,102607,25542],{"class":169},[149,102609,102610],{"class":169}," \"mujoco>=2.3\"",[149,102612,102613],{"class":169}," numpy\n",[24,102615,102616],{},"安装完成后，先做最小检查：",[140,102618,102620],{"className":25530,"code":102619,"language":25532,"meta":145,"style":145},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[48,102621,102622],{"__ignoreMap":145},[149,102623,102624,102626,102628],{"class":151,"line":152},[149,102625,32086],{"class":162},[149,102627,32064],{"class":309},[149,102629,102630],{"class":169}," \"import mujoco; print(mujoco.__version__)\"\n",[24,102632,102633],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[24,102635,102636],{},"conda 安装:",[140,102638,102640],{"className":25530,"code":102639,"language":25532,"meta":145,"style":145},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[48,102641,102642,102662,102672],{"__ignoreMap":145},[149,102643,102644,102646,102648,102650,102653,102656,102659],{"class":151,"line":152},[149,102645,32036],{"class":162},[149,102647,30882],{"class":169},[149,102649,26824],{"class":309},[149,102651,102652],{"class":169}," mujoco-study",[149,102654,102655],{"class":169}," python=",[149,102657,102658],{"class":309},"3.10",[149,102660,102661],{"class":309}," -y\n",[149,102663,102664,102666,102669],{"class":151,"line":193},[149,102665,32036],{"class":162},[149,102667,102668],{"class":169}," activate",[149,102670,102671],{"class":169}," mujoco-study\n",[149,102673,102674,102676,102678,102680],{"class":151,"line":235},[149,102675,25539],{"class":162},[149,102677,25542],{"class":169},[149,102679,102610],{"class":169},[149,102681,102613],{"class":169},[24,102683,102684],{},"版本冲突说明:",[125,102686,102687,102693,102703,102712],{},[45,102688,102689,102690,30091],{},"不要安装 ",[48,102691,102692],{},"mujoco-py",[45,102694,102695,102696,102698,102699,102702],{},"如果旧项目里同时安装了 ",[48,102697,102692],{}," 和 ",[48,102700,102701],{},"mujoco","，建议新建干净虚拟环境。",[45,102704,102705,102708,102709,30091],{},[48,102706,102707],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[48,102710,102711],{},"~\u002F.mujoco\u002Fmujoco210",[45,102713,102714,102715,84220,102718,102721],{},"离屏渲染可能涉及 OpenGL 后端，",[48,102716,102717],{},"MUJOCO_GL=egl",[48,102719,102720],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102723,102725],{"id":102724},"_3核心概念解释","3.核心概念解释",[24,102727,102728],{},"MuJoCo 的基本执行流程:",[140,102730,102733],{"className":102731,"code":102732,"language":1655,"meta":145},[1653],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[48,102734,102732],{"__ignoreMap":145},[24,102736,102737,102739],{},[48,102738,102389],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[24,102741,102742,102744,102745,2077,102748,2077,102751,2077,102754,2077,102757,30091],{},[48,102743,102399],{}," 存放仿真运行时状态，例如 ",[48,102746,102747],{},"data.time",[48,102749,102750],{},"data.qpos",[48,102752,102753],{},"data.qvel",[48,102755,102756],{},"data.ctrl",[48,102758,102759],{},"data.xpos",[19,102761,102763],{"id":102762},"xml-是什么","XML 是什么",[24,102765,102766],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[140,102768,102770],{"className":54765,"code":102769,"language":54767,"meta":145,"style":145},"\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",[48,102771,102772,102794,102825],{"__ignoreMap":145},[149,102773,102774,102776,102778,102780,102782,102784,102787,102789,102792],{"class":151,"line":152},[149,102775,156],{"class":155},[149,102777,53499],{"class":159},[149,102779,515],{"class":162},[149,102781,166],{"class":155},[149,102783,55189],{"class":169},[149,102785,102786],{"class":162}," pos",[149,102788,166],{"class":155},[149,102790,102791],{"class":169},"\"0 0 1\"",[149,102793,190],{"class":155},[149,102795,102796,102798,102801,102803,102805,102808,102810,102812,102814,102817,102819,102822],{"class":151,"line":193},[149,102797,587],{"class":155},[149,102799,102800],{"class":159},"geom",[149,102802,515],{"class":162},[149,102804,166],{"class":155},[149,102806,102807],{"class":169},"\"box_geom\"",[149,102809,507],{"class":162},[149,102811,166],{"class":155},[149,102813,55189],{"class":169},[149,102815,102816],{"class":162}," size",[149,102818,166],{"class":155},[149,102820,102821],{"class":169},"\"0.1 0.1 0.1\"",[149,102823,102824],{"class":155},"\u002F>\n",[149,102826,102827,102829,102831],{"class":151,"line":235},[149,102828,665],{"class":155},[149,102830,53499],{"class":159},[149,102832,190],{"class":155},[24,102834,102835],{},"这段意思是：",[125,102837,102838,102844,102851],{},[45,102839,102840,102841,102843],{},"创建一个叫 ",[48,102842,55412],{}," 的刚体。",[45,102845,102846,102847,102850],{},"它初始放在 ",[48,102848,102849],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[45,102852,102853],{},"它里面有一个盒子形状的几何体。",[19,102855,102857],{"id":102856},"timestep-是什么","timestep 是什么",[24,102859,102860],{},"XML 里的：",[140,102862,102864],{"className":54765,"code":102863,"language":54767,"meta":145,"style":145},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[48,102865,102866],{"__ignoreMap":145},[149,102867,102868,102870,102872,102875,102877,102880,102883,102885,102888],{"class":151,"line":152},[149,102869,156],{"class":155},[149,102871,70850],{"class":159},[149,102873,102874],{"class":162}," timestep",[149,102876,166],{"class":155},[149,102878,102879],{"class":169},"\"0.01\"",[149,102881,102882],{"class":162}," gravity",[149,102884,166],{"class":155},[149,102886,102887],{"class":169},"\"0 0 -9.81\"",[149,102889,102824],{"class":155},[24,102891,102892,102893,102896,102897,102899],{},"表示每调用一次 ",[48,102894,102895],{},"mj_step","，仿真时间前进 ",[48,102898,40692],{}," 秒。循环 100 次，大约就是 1 秒：",[140,102901,102904],{"className":102902,"code":102903,"language":1655,"meta":145},[1653],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[48,102905,102903],{"__ignoreMap":145},[19,102907,102909],{"id":102908},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[24,102911,102912],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[140,102914,102917],{"className":102915,"code":102916,"language":1655,"meta":145},[1653],"x y z qw qx qy qz\n",[48,102918,102916],{"__ignoreMap":145},[24,102920,102921,102922,102925,102926,102929],{},"表示一个自由刚体的位置和姿态。其中 ",[48,102923,102924],{},"x y z"," 是位置，",[48,102927,102928],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102931,102933],{"id":102932},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[24,102935,102936],{},"新建文件:",[140,102938,102940],{"className":25530,"code":102939,"language":25532,"meta":145,"style":145},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[48,102941,102942,102952,102959],{"__ignoreMap":145},[149,102943,102944,102947,102949],{"class":151,"line":152},[149,102945,102946],{"class":162},"mkdir",[149,102948,30922],{"class":309},[149,102950,102951],{"class":169}," mujoco_tutorial\n",[149,102953,102954,102957],{"class":151,"line":193},[149,102955,102956],{"class":309},"cd",[149,102958,102951],{"class":169},[149,102960,102961,102964],{"class":151,"line":235},[149,102962,102963],{"class":162},"touch",[149,102965,102966],{"class":169}," ch1_first_sim.py\n",[24,102968,102969],{},"写入:",[140,102971,102973],{"className":32084,"code":102972,"language":32086,"meta":145,"style":145},"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",[48,102974,102975,102982,102986,102990,103000,103005,103010,103014,103019,103024,103028,103033,103038,103043,103048,103053,103058,103062,103066,103070,103083,103097,103107,103111,103123,103135,103147,103159,103171,103175,103192,103197,103201,103212,103223,103227,103231,103245],{"__ignoreMap":145},[149,102976,102977,102979],{"class":151,"line":152},[149,102978,32098],{"class":325},[149,102980,102981],{"class":155}," mujoco\n",[149,102983,102984],{"class":151,"line":193},[149,102985,4119],{"emptyLinePlaceholder":1800},[149,102987,102988],{"class":151,"line":235},[149,102989,4119],{"emptyLinePlaceholder":1800},[149,102991,102992,102995,102997],{"class":151,"line":340},[149,102993,102994],{"class":309},"XML",[149,102996,15277],{"class":325},[149,102998,102999],{"class":169}," \"\"\"\n",[149,103001,103002],{"class":151,"line":346},[149,103003,103004],{"class":169},"\u003Cmujoco model=\"first_sim\">\n",[149,103006,103007],{"class":151,"line":352},[149,103008,103009],{"class":169},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[149,103011,103012],{"class":151,"line":1021},[149,103013,4119],{"emptyLinePlaceholder":1800},[149,103015,103016],{"class":151,"line":1035},[149,103017,103018],{"class":169},"  \u003Cworldbody>\n",[149,103020,103021],{"class":151,"line":1054},[149,103022,103023],{"class":169},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[149,103025,103026],{"class":151,"line":1072},[149,103027,4119],{"emptyLinePlaceholder":1800},[149,103029,103030],{"class":151,"line":1090},[149,103031,103032],{"class":169},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[149,103034,103035],{"class":151,"line":1633},[149,103036,103037],{"class":169},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[149,103039,103040],{"class":151,"line":1644},[149,103041,103042],{"class":169},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[149,103044,103045],{"class":151,"line":3348},[149,103046,103047],{"class":169},"    \u003C\u002Fbody>\n",[149,103049,103050],{"class":151,"line":3362},[149,103051,103052],{"class":169},"  \u003C\u002Fworldbody>\n",[149,103054,103055],{"class":151,"line":3367},[149,103056,103057],{"class":169},"\u003C\u002Fmujoco>\n",[149,103059,103060],{"class":151,"line":3373},[149,103061,97378],{"class":169},[149,103063,103064],{"class":151,"line":3394},[149,103065,4119],{"emptyLinePlaceholder":1800},[149,103067,103068],{"class":151,"line":3399},[149,103069,4119],{"emptyLinePlaceholder":1800},[149,103071,103072,103074,103076,103079,103081],{"class":151,"line":3413},[149,103073,33653],{"class":325},[149,103075,3692],{"class":162},[149,103077,103078],{"class":155},"() -> ",[149,103080,97366],{"class":309},[149,103082,5457],{"class":155},[149,103084,103085,103088,103090,103093,103095],{"class":151,"line":3418},[149,103086,103087],{"class":155},"    model ",[149,103089,166],{"class":325},[149,103091,103092],{"class":155}," mujoco.MjModel.from_xml_string(",[149,103094,102994],{"class":309},[149,103096,1878],{"class":155},[149,103098,103099,103102,103104],{"class":151,"line":3447},[149,103100,103101],{"class":155},"    data ",[149,103103,166],{"class":325},[149,103105,103106],{"class":155}," mujoco.MjData(model)\n",[149,103108,103109],{"class":151,"line":3452},[149,103110,4119],{"emptyLinePlaceholder":1800},[149,103112,103113,103115,103117,103120],{"class":151,"line":3469},[149,103114,33005],{"class":309},[149,103116,319],{"class":155},[149,103118,103119],{"class":169},"\"nq:\"",[149,103121,103122],{"class":155},", model.nq)\n",[149,103124,103125,103127,103129,103132],{"class":151,"line":3474},[149,103126,33005],{"class":309},[149,103128,319],{"class":155},[149,103130,103131],{"class":169},"\"nv:\"",[149,103133,103134],{"class":155},", model.nv)\n",[149,103136,103137,103139,103141,103144],{"class":151,"line":3479},[149,103138,33005],{"class":309},[149,103140,319],{"class":155},[149,103142,103143],{"class":169},"\"nu:\"",[149,103145,103146],{"class":155},", model.nu)\n",[149,103148,103149,103151,103153,103156],{"class":151,"line":3484},[149,103150,33005],{"class":309},[149,103152,319],{"class":155},[149,103154,103155],{"class":169},"\"initial time:\"",[149,103157,103158],{"class":155},", data.time)\n",[149,103160,103161,103163,103165,103168],{"class":151,"line":3498},[149,103162,33005],{"class":309},[149,103164,319],{"class":155},[149,103166,103167],{"class":169},"\"initial qpos:\"",[149,103169,103170],{"class":155},", data.qpos.copy())\n",[149,103172,103173],{"class":151,"line":3503},[149,103174,4119],{"emptyLinePlaceholder":1800},[149,103176,103177,103179,103182,103184,103186,103188,103190],{"class":151,"line":4296},[149,103178,4919],{"class":325},[149,103180,103181],{"class":155}," _ ",[149,103183,27752],{"class":325},[149,103185,34149],{"class":309},[149,103187,319],{"class":155},[149,103189,322],{"class":309},[149,103191,32492],{"class":155},[149,103193,103194],{"class":151,"line":4310},[149,103195,103196],{"class":155},"        mujoco.mj_step(model, data)\n",[149,103198,103199],{"class":151,"line":4318},[149,103200,4119],{"emptyLinePlaceholder":1800},[149,103202,103203,103205,103207,103210],{"class":151,"line":4323},[149,103204,33005],{"class":309},[149,103206,319],{"class":155},[149,103208,103209],{"class":169},"\"final time:\"",[149,103211,103158],{"class":155},[149,103213,103214,103216,103218,103221],{"class":151,"line":4329},[149,103215,33005],{"class":309},[149,103217,319],{"class":155},[149,103219,103220],{"class":169},"\"final qpos:\"",[149,103222,103170],{"class":155},[149,103224,103225],{"class":151,"line":4335},[149,103226,4119],{"emptyLinePlaceholder":1800},[149,103228,103229],{"class":151,"line":4340},[149,103230,4119],{"emptyLinePlaceholder":1800},[149,103232,103233,103235,103237,103240,103243],{"class":151,"line":9663},[149,103234,3255],{"class":325},[149,103236,32926],{"class":309},[149,103238,103239],{"class":325}," ==",[149,103241,103242],{"class":169}," \"__main__\"",[149,103244,5457],{"class":155},[149,103246,103247],{"class":151,"line":9687},[149,103248,103249],{"class":155},"    main()\n",[19,103251,103252],{"id":103252},"代码逐段解释",[24,103254,103255],{},"导入库：",[140,103257,103259],{"className":32084,"code":103258,"language":32086,"meta":145,"style":145},"import mujoco\n",[48,103260,103261],{"__ignoreMap":145},[149,103262,103263,103265],{"class":151,"line":152},[149,103264,32098],{"class":325},[149,103266,102981],{"class":155},[24,103268,103269],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[24,103271,103272],{},"定义 XML：",[140,103274,103276],{"className":32084,"code":103275,"language":32086,"meta":145,"style":145},"XML = \"\"\"\n...\n\"\"\"\n",[48,103277,103278,103286,103291],{"__ignoreMap":145},[149,103279,103280,103282,103284],{"class":151,"line":152},[149,103281,102994],{"class":309},[149,103283,15277],{"class":325},[149,103285,102999],{"class":169},[149,103287,103288],{"class":151,"line":193},[149,103289,103290],{"class":169},"...\n",[149,103292,103293],{"class":151,"line":235},[149,103294,97378],{"class":169},[24,103296,103297,103298,103301],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[48,103299,103300],{},"freejoint"," 的方块。",[24,103303,103304],{},"编译模型：",[140,103306,103308],{"className":32084,"code":103307,"language":32086,"meta":145,"style":145},"model = mujoco.MjModel.from_xml_string(XML)\n",[48,103309,103310],{"__ignoreMap":145},[149,103311,103312,103315,103317,103319,103321],{"class":151,"line":152},[149,103313,103314],{"class":155},"model ",[149,103316,166],{"class":325},[149,103318,103092],{"class":155},[149,103320,102994],{"class":309},[149,103322,1878],{"class":155},[24,103324,103325],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[24,103327,103328],{},"创建数据：",[140,103330,103332],{"className":32084,"code":103331,"language":32086,"meta":145,"style":145},"data = mujoco.MjData(model)\n",[48,103333,103334],{"__ignoreMap":145},[149,103335,103336,103339,103341],{"class":151,"line":152},[149,103337,103338],{"class":155},"data ",[149,103340,166],{"class":325},[149,103342,103106],{"class":155},[24,103344,103345,103347,103348,103350],{},[48,103346,35107],{}," 会保存仿真当前状态。刚创建时，时间是 ",[48,103349,2056],{},"，方块还在初始位置。",[24,103352,103353],{},"推进仿真：",[140,103355,103357],{"className":32084,"code":103356,"language":32086,"meta":145,"style":145},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[48,103358,103359,103375],{"__ignoreMap":145},[149,103360,103361,103363,103365,103367,103369,103371,103373],{"class":151,"line":152},[149,103362,4743],{"class":325},[149,103364,103181],{"class":155},[149,103366,27752],{"class":325},[149,103368,34149],{"class":309},[149,103370,319],{"class":155},[149,103372,322],{"class":309},[149,103374,32492],{"class":155},[149,103376,103377],{"class":151,"line":193},[149,103378,103379],{"class":155},"    mujoco.mj_step(model, data)\n",[24,103381,103382,103383,103385],{},"每次 ",[48,103384,102895],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[19,103387,103388],{"id":103388},"代码逐行细讲",[24,103390,103391],{},"下面把完整代码按新手视角拆开讲。",[140,103393,103394],{"className":32084,"code":103258,"language":32086,"meta":145,"style":145},[48,103395,103396],{"__ignoreMap":145},[149,103397,103398,103400],{"class":151,"line":152},[149,103399,32098],{"class":325},[149,103401,102981],{"class":155},[24,103403,103404,103406,103407,2077,103409,2077,103411,30091],{},[48,103405,32098],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[48,103408,102355],{},[48,103410,102360],{},[48,103412,103413],{},"mujoco.mj_step",[140,103415,103416],{"className":32084,"code":103275,"language":32086,"meta":145,"style":145},[48,103417,103418,103426,103430],{"__ignoreMap":145},[149,103419,103420,103422,103424],{"class":151,"line":152},[149,103421,102994],{"class":309},[149,103423,15277],{"class":325},[149,103425,102999],{"class":169},[149,103427,103428],{"class":151,"line":193},[149,103429,103290],{"class":169},[149,103431,103432],{"class":151,"line":235},[149,103433,97378],{"class":169},[24,103435,103436,103438,103439,103442],{},[48,103437,102994],{}," 是一个变量名。右边的三引号 ",[48,103440,103441],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[140,103444,103445],{"className":54765,"code":103004,"language":54767,"meta":145,"style":145},[48,103446,103447],{"__ignoreMap":145},[149,103448,103449,103451,103453,103456,103458,103461],{"class":151,"line":152},[149,103450,156],{"class":155},[149,103452,102701],{"class":159},[149,103454,103455],{"class":162}," model",[149,103457,166],{"class":155},[149,103459,103460],{"class":169},"\"first_sim\"",[149,103462,190],{"class":155},[24,103464,103465,103466,103469,103470,30091],{},"这是 XML 的根标签。",[48,103467,103468],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[48,103471,103472],{},"first_sim",[140,103474,103475],{"className":54765,"code":102863,"language":54767,"meta":145,"style":145},[48,103476,103477],{"__ignoreMap":145},[149,103478,103479,103481,103483,103485,103487,103489,103491,103493,103495],{"class":151,"line":152},[149,103480,156],{"class":155},[149,103482,70850],{"class":159},[149,103484,102874],{"class":162},[149,103486,166],{"class":155},[149,103488,102879],{"class":169},[149,103490,102882],{"class":162},[149,103492,166],{"class":155},[149,103494,102887],{"class":169},[149,103496,102824],{"class":155},[24,103498,103499,103501,103502,103505,103506,103509],{},[48,103500,70850],{}," 用来设置仿真参数。",[48,103503,103504],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[48,103507,103508],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[140,103511,103513],{"className":54765,"code":103512,"language":54767,"meta":145,"style":145},"\u003Cworldbody>\n",[48,103514,103515],{"__ignoreMap":145},[149,103516,103517,103519,103522],{"class":151,"line":152},[149,103518,156],{"class":155},[149,103520,103521],{"class":159},"worldbody",[149,103523,190],{"class":155},[24,103525,103526,103528],{},[48,103527,103521],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[140,103530,103532],{"className":54765,"code":103531,"language":54767,"meta":145,"style":145},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[48,103533,103534],{"__ignoreMap":145},[149,103535,103536,103538,103540,103542,103544,103547,103549,103551,103554,103556,103558,103561,103563,103565,103568],{"class":151,"line":152},[149,103537,156],{"class":155},[149,103539,102800],{"class":159},[149,103541,515],{"class":162},[149,103543,166],{"class":155},[149,103545,103546],{"class":169},"\"floor\"",[149,103548,507],{"class":162},[149,103550,166],{"class":155},[149,103552,103553],{"class":169},"\"plane\"",[149,103555,102816],{"class":162},[149,103557,166],{"class":155},[149,103559,103560],{"class":169},"\"2 2 0.1\"",[149,103562,80448],{"class":162},[149,103564,166],{"class":155},[149,103566,103567],{"class":169},"\"0.8 0.8 0.8 1\"",[149,103569,102824],{"class":155},[24,103571,103572,103573,103575,103576,103579,103580,103583,103584,103586],{},"这行创建地面。",[48,103574,102800],{}," 是几何体。",[48,103577,103578],{},"name=\"floor\""," 是名字。",[48,103581,103582],{},"type=\"plane\""," 表示平面。",[48,103585,56805],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[140,103588,103590],{"className":54765,"code":103589,"language":54767,"meta":145,"style":145},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[48,103591,103592],{"__ignoreMap":145},[149,103593,103594,103596,103598,103600,103602,103604,103606,103608,103610],{"class":151,"line":152},[149,103595,156],{"class":155},[149,103597,53499],{"class":159},[149,103599,515],{"class":162},[149,103601,166],{"class":155},[149,103603,55189],{"class":169},[149,103605,102786],{"class":162},[149,103607,166],{"class":155},[149,103609,102791],{"class":169},[149,103611,190],{"class":155},[24,103613,103614,103615,30091,103617,103620,103621,103623],{},"这行创建一个刚体，名字叫 ",[48,103616,55412],{},[48,103618,103619],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[48,103622,102849],{},"，也就是离地面 1 米高。",[140,103625,103627],{"className":54765,"code":103626,"language":54767,"meta":145,"style":145},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[48,103628,103629],{"__ignoreMap":145},[149,103630,103631,103633,103635,103637,103639,103642],{"class":151,"line":152},[149,103632,156],{"class":155},[149,103634,103300],{"class":159},[149,103636,515],{"class":162},[149,103638,166],{"class":155},[149,103640,103641],{"class":169},"\"box_free\"",[149,103643,102824],{"class":155},[24,103645,103646,103647,103649],{},"这行很重要。",[48,103648,103300],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[140,103651,103653],{"className":54765,"code":103652,"language":54767,"meta":145,"style":145},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[48,103654,103655],{"__ignoreMap":145},[149,103656,103657,103659,103661,103663,103665,103667,103669,103671,103673,103675,103677,103679,103682,103684,103686,103688,103690,103693],{"class":151,"line":152},[149,103658,156],{"class":155},[149,103660,102800],{"class":159},[149,103662,515],{"class":162},[149,103664,166],{"class":155},[149,103666,102807],{"class":169},[149,103668,507],{"class":162},[149,103670,166],{"class":155},[149,103672,55189],{"class":169},[149,103674,102816],{"class":162},[149,103676,166],{"class":155},[149,103678,102821],{"class":169},[149,103680,103681],{"class":162}," mass",[149,103683,166],{"class":155},[149,103685,5396],{"class":169},[149,103687,80448],{"class":162},[149,103689,166],{"class":155},[149,103691,103692],{"class":169},"\"1 0 0 1\"",[149,103694,102824],{"class":155},[24,103696,103697,103698,103701,103702,103705,103706,103709,103710,103713],{},"这行给 box body 添加一个盒子形状。",[48,103699,103700],{},"type=\"box\""," 表示形状是盒子。",[48,103703,103704],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[48,103707,103708],{},"mass=\"1\""," 表示质量是 1。",[48,103711,103712],{},"rgba=\"1 0 0 1\""," 表示红色。",[140,103715,103717],{"className":32084,"code":103716,"language":32086,"meta":145,"style":145},"def main() -> None:\n",[48,103718,103719],{"__ignoreMap":145},[149,103720,103721,103723,103725,103727,103729],{"class":151,"line":152},[149,103722,33653],{"class":325},[149,103724,3692],{"class":162},[149,103726,103078],{"class":155},[149,103728,97366],{"class":309},[149,103730,5457],{"class":155},[24,103732,103733,103735,103736,103739,103740,103743],{},[48,103734,33653],{}," 用来定义函数。这里定义了一个叫 ",[48,103737,103738],{},"main"," 的函数。",[48,103741,103742],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[140,103745,103746],{"className":32084,"code":103307,"language":32086,"meta":145,"style":145},[48,103747,103748],{"__ignoreMap":145},[149,103749,103750,103752,103754,103756,103758],{"class":151,"line":152},[149,103751,103314],{"class":155},[149,103753,166],{"class":325},[149,103755,103092],{"class":155},[149,103757,102994],{"class":309},[149,103759,1878],{"class":155},[24,103761,103762,103763,103766],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[48,103764,103765],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[140,103768,103769],{"className":32084,"code":103331,"language":32086,"meta":145,"style":145},[48,103770,103771],{"__ignoreMap":145},[149,103772,103773,103775,103777],{"class":151,"line":152},[149,103774,103338],{"class":155},[149,103776,166],{"class":325},[149,103778,103106],{"class":155},[24,103780,103781,103782,103784,103785,103787],{},"这行创建仿真数据。",[48,103783,35107],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[48,103786,35107],{}," 都会变化。",[140,103789,103791],{"className":32084,"code":103790,"language":32086,"meta":145,"style":145},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[48,103792,103793,103803,103813],{"__ignoreMap":145},[149,103794,103795,103797,103799,103801],{"class":151,"line":152},[149,103796,32121],{"class":309},[149,103798,319],{"class":155},[149,103800,103119],{"class":169},[149,103802,103122],{"class":155},[149,103804,103805,103807,103809,103811],{"class":151,"line":193},[149,103806,32121],{"class":309},[149,103808,319],{"class":155},[149,103810,103131],{"class":169},[149,103812,103134],{"class":155},[149,103814,103815,103817,103819,103821],{"class":151,"line":235},[149,103816,32121],{"class":309},[149,103818,319],{"class":155},[149,103820,103143],{"class":169},[149,103822,103146],{"class":155},[24,103824,103825,103827,103828,103831,103832,103835,103836,103839,103840,103843],{},[48,103826,32121],{}," 用来输出信息。",[48,103829,103830],{},"model.nq"," 是位置变量数量，",[48,103833,103834],{},"model.nv"," 是速度变量数量，",[48,103837,103838],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[48,103841,103842],{},"nu"," 是 0。",[140,103845,103847],{"className":32084,"code":103846,"language":32086,"meta":145,"style":145},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[48,103848,103849,103859],{"__ignoreMap":145},[149,103850,103851,103853,103855,103857],{"class":151,"line":152},[149,103852,32121],{"class":309},[149,103854,319],{"class":155},[149,103856,103155],{"class":169},[149,103858,103158],{"class":155},[149,103860,103861,103863,103865,103867],{"class":151,"line":193},[149,103862,32121],{"class":309},[149,103864,319],{"class":155},[149,103866,103167],{"class":169},[149,103868,103170],{"class":155},[24,103870,103871,103872,103874,103875,103877,103878,103881],{},"这里打印初始时间和初始位置。",[48,103873,102747],{}," 一开始是 0。",[48,103876,102750],{}," 是位置数组。",[48,103879,103880],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[140,103883,103884],{"className":32084,"code":103356,"language":32086,"meta":145,"style":145},[48,103885,103886,103902],{"__ignoreMap":145},[149,103887,103888,103890,103892,103894,103896,103898,103900],{"class":151,"line":152},[149,103889,4743],{"class":325},[149,103891,103181],{"class":155},[149,103893,27752],{"class":325},[149,103895,34149],{"class":309},[149,103897,319],{"class":155},[149,103899,322],{"class":309},[149,103901,32492],{"class":155},[149,103903,103904],{"class":151,"line":193},[149,103905,103379],{"class":155},[24,103907,103908,103910,103911,103914,103915,103917,103918,103920],{},[48,103909,4743],{}," 是循环。",[48,103912,103913],{},"range(100)"," 表示循环 100 次。",[48,103916,2851],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[48,103919,102895],{},"，仿真就前进一步。",[140,103922,103924],{"className":32084,"code":103923,"language":32086,"meta":145,"style":145},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[48,103925,103926,103936],{"__ignoreMap":145},[149,103927,103928,103930,103932,103934],{"class":151,"line":152},[149,103929,32121],{"class":309},[149,103931,319],{"class":155},[149,103933,103209],{"class":169},[149,103935,103158],{"class":155},[149,103937,103938,103940,103942,103944],{"class":151,"line":193},[149,103939,32121],{"class":309},[149,103941,319],{"class":155},[149,103943,103220],{"class":169},[149,103945,103170],{"class":155},[24,103947,103948],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[140,103950,103952],{"className":32084,"code":103951,"language":32086,"meta":145,"style":145},"if __name__ == \"__main__\":\n    main()\n",[48,103953,103954,103966],{"__ignoreMap":145},[149,103955,103956,103958,103960,103962,103964],{"class":151,"line":152},[149,103957,3255],{"class":325},[149,103959,32926],{"class":309},[149,103961,103239],{"class":325},[149,103963,103242],{"class":169},[149,103965,5457],{"class":155},[149,103967,103968],{"class":151,"line":193},[149,103969,103249],{"class":155},[24,103971,103972,103973,103976,103977,30091],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[48,103974,103975],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[48,103978,103975],{},[24,103980,103981],{},"运行:",[140,103983,103985],{"className":25530,"code":103984,"language":25532,"meta":145,"style":145},"python ch1_first_sim.py\n",[48,103986,103987],{"__ignoreMap":145},[149,103988,103989,103991],{"class":151,"line":152},[149,103990,32086],{"class":162},[149,103992,102966],{"class":169},[14,103994,103996],{"id":103995},"_5运行结果说明","5.运行结果说明",[24,103998,103999],{},"你应该看到类似输出:",[140,104001,104004],{"className":104002,"code":104003,"language":1655,"meta":145},[1653],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[48,104005,104003],{"__ignoreMap":145},[24,104007,104008,104010,104011,104014,104015,30091],{},[48,104009,103300],{}," 有 7 个位置变量: ",[48,104012,104013],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[48,104016,104017],{},"vx vy vz wx wy wz",[24,104019,104020,104021,104024],{},"你还会看到 ",[48,104022,104023],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104026,104028],{"id":104027},"_6验证步骤","6.验证步骤",[24,104030,104031],{},"确认版本:",[140,104033,104034],{"className":25530,"code":102619,"language":25532,"meta":145,"style":145},[48,104035,104036],{"__ignoreMap":145},[149,104037,104038,104040,104042],{"class":151,"line":152},[149,104039,32086],{"class":162},[149,104041,32064],{"class":309},[149,104043,102630],{"class":169},[24,104045,104046],{},"确认导入的是官方 bindings:",[140,104048,104050],{"className":25530,"code":104049,"language":25532,"meta":145,"style":145},"python -c \"import mujoco; print(mujoco)\"\n",[48,104051,104052],{"__ignoreMap":145},[149,104053,104054,104056,104058],{"class":151,"line":152},[149,104055,32086],{"class":162},[149,104057,32064],{"class":309},[149,104059,104060],{"class":169}," \"import mujoco; print(mujoco)\"\n",[24,104062,104063],{},"运行程序:",[140,104065,104066],{"className":25530,"code":103984,"language":25532,"meta":145,"style":145},[48,104067,104068],{"__ignoreMap":145},[149,104069,104070,104072],{"class":151,"line":152},[149,104071,32086],{"class":162},[149,104073,102966],{"class":169},[24,104075,104076,104077,104080,104081,30091],{},"检查 ",[48,104078,104079],{},"final time"," 是否约等于 ",[48,104082,104083],{},"1.0",[24,104085,104086],{},"再做几个小实验：",[125,104088,104089,104099,104107,104120],{},[45,104090,104091,104092,104094,104095,104098],{},"把 ",[48,104093,103619],{}," 改成 ",[48,104096,104097],{},"pos=\"0 0 2\"","，观察初始高度变化。",[45,104100,104091,104101,104094,104103,104106],{},[48,104102,103508],{},[48,104104,104105],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[45,104108,104091,104109,104094,104111,104114,104115,104117,104118,30091],{},[48,104110,103504],{},[48,104112,104113],{},"timestep=\"0.005\"","，观察 100 步后的 ",[48,104116,104079],{}," 是否变成约 ",[48,104119,37035],{},[45,104121,104122,104123,104126],{},"删除 ",[48,104124,104125],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[24,104128,104129],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104131,104133],{"id":104132},"_7常见错误与解决方案","7.常见错误与解决方案",[19,104135,104137],{"id":104136},"modulenotfounderror-no-module-named-mujoco",[48,104138,104139],{},"ModuleNotFoundError: No module named 'mujoco'",[24,104141,104142],{},"解决:",[140,104144,104146],{"className":25530,"code":104145,"language":25532,"meta":145,"style":145},"pip install \"mujoco>=2.3\"\n",[48,104147,104148],{"__ignoreMap":145},[149,104149,104150,104152,104154],{"class":151,"line":152},[149,104151,25539],{"class":162},[149,104153,25542],{"class":169},[149,104155,104156],{"class":169}," \"mujoco>=2.3\"\n",[19,104158,104160],{"id":104159},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[24,104162,104163],{},"先安装系统依赖:",[140,104165,104167],{"className":25530,"code":104166,"language":25532,"meta":145,"style":145},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[48,104168,104169],{"__ignoreMap":145},[149,104170,104171,104173,104175,104177,104179,104182,104184,104187,104189,104192,104194],{"class":151,"line":152},[149,104172,26285],{"class":162},[149,104174,28024],{"class":169},[149,104176,25542],{"class":169},[149,104178,28109],{"class":309},[149,104180,104181],{"class":169}," mesa-libGL",[149,104183,102494],{"class":169},[149,104185,104186],{"class":169}," glfw",[149,104188,102514],{"class":169},[149,104190,104191],{"class":169}," libX11",[149,104193,102527],{"class":169},[149,104195,104196],{"class":169}," libXrandr\n",[19,104198,104200],{"id":104199},"xml-解析失败","XML 解析失败",[24,104202,104203],{},"检查:",[125,104205,104206,104209,104212,104218],{},[45,104207,104208],{},"标签是否闭合",[45,104210,104211],{},"属性是否带引号",[45,104213,104214,104215],{},"根节点是否是 ",[48,104216,104217],{},"\u003Cmujoco>",[45,104219,104220,104222,104223,104226],{},[48,104221,53499],{}," 是否放在 ",[48,104224,104225],{},"\u003Cworldbody>"," 内部",[19,104228,104230,104232,104233],{"id":104229},"final-time-不是严格等于-10",[48,104231,104079],{}," 不是严格等于 ",[48,104234,104083],{},[24,104236,104237],{},"这通常不是错误。浮点数计算可能得到：",[140,104239,104242],{"className":104240,"code":104241,"language":1655,"meta":145},[1653],"1.0000000000000007\n",[48,104243,104241],{"__ignoreMap":145},[24,104245,104246,104247,104249],{},"只要接近 ",[48,104248,104083],{}," 就正常。",[19,104251,104252],{"id":104252},"方块没有掉下来",[24,104254,104255],{},"检查：",[125,104257,104258,104264,104270,104275],{},[45,104259,104260,104261],{},"方块 body 里是否有 ",[48,104262,104263],{},"\u003Cfreejoint\u002F>",[45,104265,104266,104267],{},"重力是否是 ",[48,104268,104269],{},"0 0 -9.81",[45,104271,104272,104273],{},"是否真的调用了 ",[48,104274,102365],{},[45,104276,104277,104278,104280,104281],{},"你看的是否是 ",[48,104279,104023],{},"，不是 ",[48,104282,104283],{},"initial qpos",[14,104285,104287],{"id":104286},"_8本章小结","8.本章小结",[24,104289,104290],{},"本章你已经完成了 MuJoCo 的最小闭环：",[140,104292,104295],{"className":104293,"code":104294,"language":1655,"meta":145},[1653],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[48,104296,104294],{"__ignoreMap":145},[24,104298,104299],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1783,104301,104302],{},"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":145,"searchDepth":193,"depth":193,"links":104304},[104305,104306,104307,104312,104316,104317,104318,104326],{"id":102326,"depth":193,"text":102327},{"id":102449,"depth":193,"text":102450},{"id":102724,"depth":193,"text":102725,"children":104308},[104309,104310,104311],{"id":102762,"depth":235,"text":102763},{"id":102856,"depth":235,"text":102857},{"id":102908,"depth":235,"text":102909},{"id":102932,"depth":193,"text":102933,"children":104313},[104314,104315],{"id":103252,"depth":235,"text":103252},{"id":103388,"depth":235,"text":103388},{"id":103995,"depth":193,"text":103996},{"id":104027,"depth":193,"text":104028},{"id":104132,"depth":193,"text":104133,"children":104319},[104320,104321,104322,104323,104325],{"id":104136,"depth":235,"text":104139},{"id":104159,"depth":235,"text":104160},{"id":104199,"depth":235,"text":104200},{"id":104229,"depth":235,"text":104324},"final time 不是严格等于 1.0",{"id":104252,"depth":235,"text":104252},{"id":104286,"depth":193,"text":104287},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102318,"description":145},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104333,"title":104334,"body":104335,"description":145,"extension":1798,"meta":105990,"navigation":1800,"path":105991,"seo":105992,"stem":105993,"__hash__":105994},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104336,"toc":105966},[104337,104340,104342,104345,104348,104365,104460,104463,104469,104471,104473,104497,104500,104514,104517,104558,104560,104573,104575,104578,104626,104638,104641,104644,104650,104663,104730,104733,104752,104755,104758,104764,104766,104775,104778,104782,104790,104872,104881,104885,104891,104905,104915,104917,105247,105250,105262,105264,105275,105277,105280,105298,105301,105304,105322,105333,105336,105351,105361,105363,105384,105401,105421,105427,105467,105483,105499,105505,105508,105532,105548,105553,105583,105600,105625,105628,105643,105652,105667,105676,105691,105698,105700,105710,105723,105730,105733,105772,105779,105781,105833,105835,105841,105844,105851,105858,105861,105863,105881,105884,105887,105921,105933,105935,105938,105960,105963],[10,104338,104334],{"id":104339},"_2xml-与-mjcf-物理建模基础",[14,104341,102327],{"id":102326},[24,104343,104344],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[24,104346,104347],{},"本章结束后，你应该能看懂一个简单模型里：",[125,104349,104350,104353,104356,104359,104362],{},[45,104351,104352],{},"地面在哪里。",[45,104354,104355],{},"物体初始位置在哪里。",[45,104357,104358],{},"几何体是什么形状。",[45,104360,104361],{},"哪些 body 可以自由运动。",[45,104363,104364],{},"如何用名字在 Python 里找到 XML 中的对象。",[2003,104366,104367,104377],{},[2006,104368,104369],{},[2009,104370,104371,104374],{},[2012,104372,104373],{"align":1566},"标签",[2012,104375,104376],{"align":1566},"作用",[2049,104378,104379,104388,104398,104407,104417,104427,104440,104450],{},[2009,104380,104381,104385],{},[2054,104382,104383],{"align":1566},[48,104384,104217],{},[2054,104386,104387],{"align":1566},"根节点",[2009,104389,104390,104395],{},[2054,104391,104392],{"align":1566},[48,104393,104394],{},"\u003Coption>",[2054,104396,104397],{"align":1566},"仿真参数",[2009,104399,104400,104404],{},[2054,104401,104402],{"align":1566},[48,104403,104225],{},[2054,104405,104406],{"align":1566},"世界中的物体",[2009,104408,104409,104414],{},[2054,104410,104411],{"align":1566},[48,104412,104413],{},"\u003Cbody>",[2054,104415,104416],{"align":1566},"刚体",[2009,104418,104419,104424],{},[2054,104420,104421],{"align":1566},[48,104422,104423],{},"\u003Cgeom>",[2054,104425,104426],{"align":1566},"几何体、碰撞体、可视体",[2009,104428,104429,104437],{},[2054,104430,104431,26687,104434],{"align":1566},[48,104432,104433],{},"\u003Cjoint>",[48,104435,104436],{},"\u003Cfreejoint>",[2054,104438,104439],{"align":1566},"关节",[2009,104441,104442,104447],{},[2054,104443,104444],{"align":1566},[48,104445,104446],{},"\u003Csite>",[2054,104448,104449],{"align":1566},"标记点",[2009,104451,104452,104457],{},[2054,104453,104454],{"align":1566},[48,104455,104456],{},"\u003Cactuator>",[2054,104458,104459],{"align":1566},"控制器",[24,104461,104462],{},"初学时可以先记住：",[140,104464,104467],{"className":104465,"code":104466,"language":1655,"meta":145},[1653],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[48,104468,104466],{"__ignoreMap":145},[14,104470,102450],{"id":102449},[24,104472,102453],{},[140,104474,104476],{"className":25530,"code":104475,"language":25532,"meta":145,"style":145},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[48,104477,104478],{"__ignoreMap":145},[149,104479,104480,104482,104484,104486,104488,104490,104492,104494],{"class":151,"line":152},[149,104481,26285],{"class":162},[149,104483,28024],{"class":169},[149,104485,25542],{"class":169},[149,104487,28109],{"class":309},[149,104489,104181],{"class":169},[149,104491,102494],{"class":169},[149,104493,104186],{"class":169},[149,104495,104496],{"class":169}," glfw-devel\n",[24,104498,104499],{},"pip:",[140,104501,104502],{"className":25530,"code":102599,"language":25532,"meta":145,"style":145},[48,104503,104504],{"__ignoreMap":145},[149,104505,104506,104508,104510,104512],{"class":151,"line":152},[149,104507,25539],{"class":162},[149,104509,25542],{"class":169},[149,104511,102610],{"class":169},[149,104513,102613],{"class":169},[24,104515,104516],{},"conda:",[140,104518,104520],{"className":25530,"code":104519,"language":25532,"meta":145,"style":145},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[48,104521,104522,104539,104548],{"__ignoreMap":145},[149,104523,104524,104526,104528,104530,104533,104535,104537],{"class":151,"line":152},[149,104525,32036],{"class":162},[149,104527,30882],{"class":169},[149,104529,26824],{"class":309},[149,104531,104532],{"class":169}," mujoco-xml",[149,104534,102655],{"class":169},[149,104536,102658],{"class":309},[149,104538,102661],{"class":309},[149,104540,104541,104543,104545],{"class":151,"line":193},[149,104542,32036],{"class":162},[149,104544,102668],{"class":169},[149,104546,104547],{"class":169}," mujoco-xml\n",[149,104549,104550,104552,104554,104556],{"class":151,"line":235},[149,104551,25539],{"class":162},[149,104553,25542],{"class":169},[149,104555,102610],{"class":169},[149,104557,102613],{"class":169},[24,104559,102684],{},[125,104561,104562,104565,104570],{},[45,104563,104564],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[45,104566,104567,104568,30091],{},"本章使用基础标签，适用于 ",[48,104569,102707],{},[45,104571,104572],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104574,102725],{"id":102724},[24,104576,104577],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[140,104579,104581],{"className":54765,"code":104580,"language":54767,"meta":145,"style":145},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[48,104582,104583,104597,104605,104610,104618],{"__ignoreMap":145},[149,104584,104585,104587,104589,104591,104593,104595],{"class":151,"line":152},[149,104586,156],{"class":155},[149,104588,102701],{"class":159},[149,104590,103455],{"class":162},[149,104592,166],{"class":155},[149,104594,64367],{"class":169},[149,104596,190],{"class":155},[149,104598,104599,104601,104603],{"class":151,"line":193},[149,104600,587],{"class":155},[149,104602,103521],{"class":159},[149,104604,190],{"class":155},[149,104606,104607],{"class":151,"line":235},[149,104608,104609],{"class":155},"    ...\n",[149,104611,104612,104614,104616],{"class":151,"line":340},[149,104613,54115],{"class":155},[149,104615,103521],{"class":159},[149,104617,190],{"class":155},[149,104619,104620,104622,104624],{"class":151,"line":346},[149,104621,665],{"class":155},[149,104623,102701],{"class":159},[149,104625,190],{"class":155},[24,104627,104628,104630,104631,104633,104634,104637],{},[48,104629,53499],{}," 表示刚体。",[48,104632,102800],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[48,104635,104636],{},"joint"," 表示刚体相对父刚体如何运动。",[19,104639,104640],{"id":104640},"层级结构非常重要",[24,104642,104643],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[140,104645,104648],{"className":104646,"code":104647,"language":1655,"meta":145},[1653],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[48,104649,104647],{"__ignoreMap":145},[24,104651,104652,102698,104655,104658,104659,104662],{},[48,104653,104654],{},"red_box_geom",[48,104656,104657],{},"box_center"," 都属于 ",[48,104660,104661],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[140,104664,104666],{"className":54765,"code":104665,"language":54767,"meta":145,"style":145},"\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",[48,104667,104668,104688,104702,104722],{"__ignoreMap":145},[149,104669,104670,104672,104674,104676,104678,104680,104682,104684,104686],{"class":151,"line":152},[149,104671,156],{"class":155},[149,104673,53499],{"class":159},[149,104675,515],{"class":162},[149,104677,166],{"class":155},[149,104679,55189],{"class":169},[149,104681,102786],{"class":162},[149,104683,166],{"class":155},[149,104685,102791],{"class":169},[149,104687,190],{"class":155},[149,104689,104690,104692,104694,104696,104698,104700],{"class":151,"line":193},[149,104691,587],{"class":155},[149,104693,103300],{"class":159},[149,104695,515],{"class":162},[149,104697,166],{"class":155},[149,104699,103641],{"class":169},[149,104701,102824],{"class":155},[149,104703,104704,104706,104708,104710,104712,104714,104716,104718,104720],{"class":151,"line":235},[149,104705,587],{"class":155},[149,104707,102800],{"class":159},[149,104709,507],{"class":162},[149,104711,166],{"class":155},[149,104713,55189],{"class":169},[149,104715,102816],{"class":162},[149,104717,166],{"class":155},[149,104719,102821],{"class":169},[149,104721,102824],{"class":155},[149,104723,104724,104726,104728],{"class":151,"line":340},[149,104725,665],{"class":155},[149,104727,53499],{"class":159},[149,104729,190],{"class":155},[24,104731,104732],{},"含义:",[125,104734,104735,104741,104746,104749],{},[45,104736,104737,104738,104740],{},"创建名为 ",[48,104739,55412],{}," 的刚体",[45,104742,104743,104744],{},"初始位置在世界坐标 ",[48,104745,102849],{},[45,104747,104748],{},"它有一个自由关节",[45,104750,104751],{},"它有一个盒子几何体",[19,104753,104754],{"id":104754},"坐标怎么理解",[24,104756,104757],{},"MuJoCo 默认使用三维坐标：",[140,104759,104762],{"className":104760,"code":104761,"language":1655,"meta":145},[1653],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[48,104763,104761],{"__ignoreMap":145},[24,104765,16346],{},[140,104767,104769],{"className":54765,"code":104768,"language":54767,"meta":145,"style":145},"pos=\"0 0 1\"\n",[48,104770,104771],{"__ignoreMap":145},[149,104772,104773],{"class":151,"line":152},[149,104774,104768],{"class":155},[24,104776,104777],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[19,104779,104781],{"id":104780},"geom-的-size-怎么理解","geom 的 size 怎么理解",[24,104783,104784,104785,84211,104787,104789],{},"不同 ",[48,104786,813],{},[48,104788,33202],{}," 含义不同：",[2003,104791,104792,104807],{},[2006,104793,104794],{},[2009,104795,104796,104800,104805],{},[2012,104797,104798],{"align":1566},[48,104799,813],{},[2012,104801,104802,104804],{"align":1566},[48,104803,33202],{}," 示例",[2012,104806,102380],{"align":1566},[2049,104808,104809,104823,104838,104857],{},[2009,104810,104811,104815,104820],{},[2054,104812,104813],{"align":1566},[48,104814,55412],{},[2054,104816,104817],{"align":1566},[48,104818,104819],{},"size=\"0.1 0.2 0.3\"",[2054,104821,104822],{"align":1566},"x\u002Fy\u002Fz 半边长，不是完整长度",[2009,104824,104825,104830,104835],{},[2054,104826,104827],{"align":1566},[48,104828,104829],{},"sphere",[2054,104831,104832],{"align":1566},[48,104833,104834],{},"size=\"0.1\"",[2054,104836,104837],{"align":1566},"球半径",[2009,104839,104840,104845,104850],{},[2054,104841,104842],{"align":1566},[48,104843,104844],{},"capsule",[2054,104846,104847],{"align":1566},[48,104848,104849],{},"size=\"0.03\"",[2054,104851,104852,104853,104856],{"align":1566},"胶囊半径，长度常用 ",[48,104854,104855],{},"fromto"," 指定",[2009,104858,104859,104864,104869],{},[2054,104860,104861],{"align":1566},[48,104862,104863],{},"plane",[2054,104865,104866],{"align":1566},[48,104867,104868],{},"size=\"3 3 0.1\"",[2054,104870,104871],{"align":1566},"可视平面大小，通常当地面",[24,104873,104874,104875,104877,104878,104880],{},"最容易踩坑的是 box：",[48,104876,103704],{}," 表示边长大约是 ",[48,104879,33743],{},"，因为 MuJoCo 用的是半边长。",[19,104882,104884],{"id":104883},"site-是什么","site 是什么",[24,104886,104887,104890],{},[48,104888,104889],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[125,104892,104893,104896,104899,104902],{},[45,104894,104895],{},"标记机械臂末端。",[45,104897,104898],{},"标记目标位置。",[45,104900,104901],{},"放传感器或相机参考点。",[45,104903,104904],{},"在 Python 中读取某个关键点的世界坐标。",[24,104906,104907,104908,102698,104911,104914],{},"在后面的 Reacher 任务中，",[48,104909,104910],{},"tip",[48,104912,104913],{},"target"," 就会用 site 表示。",[14,104916,102933],{"id":102932},[140,104918,104920],{"className":32084,"code":104919,"language":32086,"meta":145,"style":145},"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",[48,104921,104922,104928,104938,104942,104946,104954,104959,104963,104967,104971,104976,104980,104985,104990,104995,105000,105004,105008,105012,105016,105020,105024,105036,105048,105056,105060,105075,105090,105094,105107,105122,105135,105148,105152,105168,105172,105176,105187,105199,105211,105223,105227,105231,105243],{"__ignoreMap":145},[149,104923,104924,104926],{"class":151,"line":152},[149,104925,32098],{"class":325},[149,104927,102981],{"class":155},[149,104929,104930,104932,104934,104936],{"class":151,"line":193},[149,104931,32098],{"class":325},[149,104933,33086],{"class":155},[149,104935,33089],{"class":325},[149,104937,33092],{"class":155},[149,104939,104940],{"class":151,"line":235},[149,104941,4119],{"emptyLinePlaceholder":1800},[149,104943,104944],{"class":151,"line":340},[149,104945,4119],{"emptyLinePlaceholder":1800},[149,104947,104948,104950,104952],{"class":151,"line":346},[149,104949,102994],{"class":309},[149,104951,15277],{"class":325},[149,104953,102999],{"class":169},[149,104955,104956],{"class":151,"line":352},[149,104957,104958],{"class":169},"\u003Cmujoco model=\"xml_basic\">\n",[149,104960,104961],{"class":151,"line":1021},[149,104962,103009],{"class":169},[149,104964,104965],{"class":151,"line":1035},[149,104966,4119],{"emptyLinePlaceholder":1800},[149,104968,104969],{"class":151,"line":1054},[149,104970,103018],{"class":169},[149,104972,104973],{"class":151,"line":1072},[149,104974,104975],{"class":169},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[149,104977,104978],{"class":151,"line":1090},[149,104979,4119],{"emptyLinePlaceholder":1800},[149,104981,104982],{"class":151,"line":1633},[149,104983,104984],{"class":169},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[149,104986,104987],{"class":151,"line":1644},[149,104988,104989],{"class":169},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[149,104991,104992],{"class":151,"line":3348},[149,104993,104994],{"class":169},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[149,104996,104997],{"class":151,"line":3362},[149,104998,104999],{"class":169},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[149,105001,105002],{"class":151,"line":3367},[149,105003,103047],{"class":169},[149,105005,105006],{"class":151,"line":3373},[149,105007,103052],{"class":169},[149,105009,105010],{"class":151,"line":3394},[149,105011,103057],{"class":169},[149,105013,105014],{"class":151,"line":3399},[149,105015,97378],{"class":169},[149,105017,105018],{"class":151,"line":3413},[149,105019,4119],{"emptyLinePlaceholder":1800},[149,105021,105022],{"class":151,"line":3418},[149,105023,4119],{"emptyLinePlaceholder":1800},[149,105025,105026,105028,105030,105032,105034],{"class":151,"line":3447},[149,105027,33653],{"class":325},[149,105029,3692],{"class":162},[149,105031,103078],{"class":155},[149,105033,97366],{"class":309},[149,105035,5457],{"class":155},[149,105037,105038,105040,105042,105044,105046],{"class":151,"line":3452},[149,105039,103087],{"class":155},[149,105041,166],{"class":325},[149,105043,103092],{"class":155},[149,105045,102994],{"class":309},[149,105047,1878],{"class":155},[149,105049,105050,105052,105054],{"class":151,"line":3469},[149,105051,103101],{"class":155},[149,105053,166],{"class":325},[149,105055,103106],{"class":155},[149,105057,105058],{"class":151,"line":3474},[149,105059,4119],{"emptyLinePlaceholder":1800},[149,105061,105062,105065,105067,105070,105073],{"class":151,"line":3479},[149,105063,105064],{"class":155},"    box_body_id ",[149,105066,166],{"class":325},[149,105068,105069],{"class":155}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[149,105071,105072],{"class":169},"\"red_box\"",[149,105074,1878],{"class":155},[149,105076,105077,105080,105082,105085,105088],{"class":151,"line":3484},[149,105078,105079],{"class":155},"    site_id ",[149,105081,166],{"class":325},[149,105083,105084],{"class":155}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[149,105086,105087],{"class":169},"\"box_center\"",[149,105089,1878],{"class":155},[149,105091,105092],{"class":151,"line":3498},[149,105093,4119],{"emptyLinePlaceholder":1800},[149,105095,105096,105098,105101,105103,105105],{"class":151,"line":3503},[149,105097,4819],{"class":325},[149,105099,105100],{"class":155}," box_body_id ",[149,105102,156],{"class":325},[149,105104,5811],{"class":309},[149,105106,5457],{"class":155},[149,105108,105109,105112,105115,105117,105120],{"class":151,"line":4296},[149,105110,105111],{"class":325},"        raise",[149,105113,105114],{"class":309}," RuntimeError",[149,105116,319],{"class":155},[149,105118,105119],{"class":169},"\"body red_box not found\"",[149,105121,1878],{"class":155},[149,105123,105124,105126,105129,105131,105133],{"class":151,"line":4310},[149,105125,4819],{"class":325},[149,105127,105128],{"class":155}," site_id ",[149,105130,156],{"class":325},[149,105132,5811],{"class":309},[149,105134,5457],{"class":155},[149,105136,105137,105139,105141,105143,105146],{"class":151,"line":4318},[149,105138,105111],{"class":325},[149,105140,105114],{"class":309},[149,105142,319],{"class":155},[149,105144,105145],{"class":169},"\"site box_center not found\"",[149,105147,1878],{"class":155},[149,105149,105150],{"class":151,"line":4323},[149,105151,4119],{"emptyLinePlaceholder":1800},[149,105153,105154,105156,105158,105160,105162,105164,105166],{"class":151,"line":4329},[149,105155,4919],{"class":325},[149,105157,103181],{"class":155},[149,105159,27752],{"class":325},[149,105161,34149],{"class":309},[149,105163,319],{"class":155},[149,105165,3442],{"class":309},[149,105167,32492],{"class":155},[149,105169,105170],{"class":151,"line":4335},[149,105171,103196],{"class":155},[149,105173,105174],{"class":151,"line":4340},[149,105175,4119],{"emptyLinePlaceholder":1800},[149,105177,105178,105180,105182,105185],{"class":151,"line":9663},[149,105179,33005],{"class":309},[149,105181,319],{"class":155},[149,105183,105184],{"class":169},"\"simulation time:\"",[149,105186,103158],{"class":155},[149,105188,105189,105191,105193,105196],{"class":151,"line":9687},[149,105190,33005],{"class":309},[149,105192,319],{"class":155},[149,105194,105195],{"class":169},"\"box body position:\"",[149,105197,105198],{"class":155},", data.xpos[box_body_id].copy())\n",[149,105200,105201,105203,105205,105208],{"class":151,"line":9692},[149,105202,33005],{"class":309},[149,105204,319],{"class":155},[149,105206,105207],{"class":169},"\"site position:\"",[149,105209,105210],{"class":155},", data.site_xpos[site_id].copy())\n",[149,105212,105213,105215,105217,105220],{"class":151,"line":9698},[149,105214,33005],{"class":309},[149,105216,319],{"class":155},[149,105218,105219],{"class":169},"\"box qpos:\"",[149,105221,105222],{"class":155},", np.array(data.qpos))\n",[149,105224,105225],{"class":151,"line":9725},[149,105226,4119],{"emptyLinePlaceholder":1800},[149,105228,105229],{"class":151,"line":9730},[149,105230,4119],{"emptyLinePlaceholder":1800},[149,105232,105233,105235,105237,105239,105241],{"class":151,"line":9736},[149,105234,3255],{"class":325},[149,105236,32926],{"class":309},[149,105238,103239],{"class":325},[149,105240,103242],{"class":169},[149,105242,5457],{"class":155},[149,105244,105245],{"class":151,"line":9748},[149,105246,103249],{"class":155},[24,105248,105249],{},"保存为：",[140,105251,105253],{"className":25530,"code":105252,"language":25532,"meta":145,"style":145},"touch ch2_xml_basic.py\n",[48,105254,105255],{"__ignoreMap":145},[149,105256,105257,105259],{"class":151,"line":152},[149,105258,102963],{"class":162},[149,105260,105261],{"class":169}," ch2_xml_basic.py\n",[24,105263,103981],{},[140,105265,105267],{"className":25530,"code":105266,"language":25532,"meta":145,"style":145},"python ch2_xml_basic.py\n",[48,105268,105269],{"__ignoreMap":145},[149,105270,105271,105273],{"class":151,"line":152},[149,105272,32086],{"class":162},[149,105274,105261],{"class":169},[19,105276,103252],{"id":103252},[24,105278,105279],{},"用名字查找 body：",[140,105281,105283],{"className":32084,"code":105282,"language":32086,"meta":145,"style":145},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[48,105284,105285],{"__ignoreMap":145},[149,105286,105287,105290,105292,105294,105296],{"class":151,"line":152},[149,105288,105289],{"class":155},"box_body_id ",[149,105291,166],{"class":325},[149,105293,105069],{"class":155},[149,105295,105072],{"class":169},[149,105297,1878],{"class":155},[24,105299,105300],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[24,105302,105303],{},"用名字查找 site：",[140,105305,105307],{"className":32084,"code":105306,"language":32086,"meta":145,"style":145},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[48,105308,105309],{"__ignoreMap":145},[149,105310,105311,105314,105316,105318,105320],{"class":151,"line":152},[149,105312,105313],{"class":155},"site_id ",[149,105315,166],{"class":325},[149,105317,105084],{"class":155},[149,105319,105087],{"class":169},[149,105321,1878],{"class":155},[24,105323,105324,105325,105328,105329,105332],{},"注意第二个参数是对象类型。查 body 就用 ",[48,105326,105327],{},"mjOBJ_BODY","，查 site 就用 ",[48,105330,105331],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[24,105334,105335],{},"读取世界坐标：",[140,105337,105339],{"className":32084,"code":105338,"language":32086,"meta":145,"style":145},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[48,105340,105341,105346],{"__ignoreMap":145},[149,105342,105343],{"class":151,"line":152},[149,105344,105345],{"class":155},"data.xpos[box_body_id]\n",[149,105347,105348],{"class":151,"line":193},[149,105349,105350],{"class":155},"data.site_xpos[site_id]\n",[24,105352,105353,105356,105357,105360],{},[48,105354,105355],{},"xpos"," 是 body 的世界坐标，",[48,105358,105359],{},"site_xpos"," 是 site 的世界坐标。",[19,105362,103388],{"id":103388},[140,105364,105366],{"className":32084,"code":105365,"language":32086,"meta":145,"style":145},"import mujoco\nimport numpy as np\n",[48,105367,105368,105374],{"__ignoreMap":145},[149,105369,105370,105372],{"class":151,"line":152},[149,105371,32098],{"class":325},[149,105373,102981],{"class":155},[149,105375,105376,105378,105380,105382],{"class":151,"line":193},[149,105377,32098],{"class":325},[149,105379,33086],{"class":155},[149,105381,33089],{"class":325},[149,105383,33092],{"class":155},[24,105385,105386,105387,105390,105391,105394,105395,2077,105398,30091],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[48,105388,105389],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[48,105392,105393],{},"as np"," 是习惯写法，后面就可以写 ",[48,105396,105397],{},"np.array(...)",[48,105399,105400],{},"np.round(...)",[140,105402,105403],{"className":32084,"code":103275,"language":32086,"meta":145,"style":145},[48,105404,105405,105413,105417],{"__ignoreMap":145},[149,105406,105407,105409,105411],{"class":151,"line":152},[149,105408,102994],{"class":309},[149,105410,15277],{"class":325},[149,105412,102999],{"class":169},[149,105414,105415],{"class":151,"line":193},[149,105416,103290],{"class":169},[149,105418,105419],{"class":151,"line":235},[149,105420,97378],{"class":169},[24,105422,105423,105424,30091],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[48,105425,105426],{},"mujoco.MjModel.from_xml_string(XML)",[140,105428,105430],{"className":54765,"code":105429,"language":54767,"meta":145,"style":145},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[48,105431,105432],{"__ignoreMap":145},[149,105433,105434,105436,105438,105440,105442,105444,105446,105448,105451,105453,105455,105458,105460,105462,105465],{"class":151,"line":152},[149,105435,156],{"class":155},[149,105437,104889],{"class":159},[149,105439,515],{"class":162},[149,105441,166],{"class":155},[149,105443,105087],{"class":169},[149,105445,102786],{"class":162},[149,105447,166],{"class":155},[149,105449,105450],{"class":169},"\"0 0 0\"",[149,105452,102816],{"class":162},[149,105454,166],{"class":155},[149,105456,105457],{"class":169},"\"0.03\"",[149,105459,80448],{"class":162},[149,105461,166],{"class":155},[149,105463,105464],{"class":169},"\"0 1 0 1\"",[149,105466,102824],{"class":155},[24,105468,105469,105471,105472,105475,105476,105478,105479,105482],{},[48,105470,104889],{}," 是标记点。",[48,105473,105474],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[48,105477,104849],{}," 表示显示出来的小球大小。",[48,105480,105481],{},"rgba=\"0 1 0 1\""," 表示绿色。",[140,105484,105485],{"className":32084,"code":105282,"language":32086,"meta":145,"style":145},[48,105486,105487],{"__ignoreMap":145},[149,105488,105489,105491,105493,105495,105497],{"class":151,"line":152},[149,105490,105289],{"class":155},[149,105492,166],{"class":325},[149,105494,105069],{"class":155},[149,105496,105072],{"class":169},[149,105498,1878],{"class":155},[24,105500,105501,105502,105504],{},"这行的作用是：根据名字 ",[48,105503,105072],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[24,105506,105507],{},"拆开看：",[125,105509,105510,105516,105521,105527],{},[45,105511,105512,105515],{},[48,105513,105514],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[45,105517,105518,105520],{},[48,105519,103765],{}," 是被查询的模型。",[45,105522,105523,105526],{},[48,105524,105525],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[45,105528,105529,105531],{},[48,105530,105072],{}," 是 XML 里写的名字。",[140,105533,105534],{"className":32084,"code":105306,"language":32086,"meta":145,"style":145},[48,105535,105536],{"__ignoreMap":145},[149,105537,105538,105540,105542,105544,105546],{"class":151,"line":152},[149,105539,105313],{"class":155},[149,105541,166],{"class":325},[149,105543,105084],{"class":155},[149,105545,105087],{"class":169},[149,105547,1878],{"class":155},[24,105549,105550,105551,30091],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[48,105552,105087],{},[140,105554,105556],{"className":32084,"code":105555,"language":32086,"meta":145,"style":145},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[48,105557,105558,105570],{"__ignoreMap":145},[149,105559,105560,105562,105564,105566,105568],{"class":151,"line":152},[149,105561,3255],{"class":325},[149,105563,105100],{"class":155},[149,105565,156],{"class":325},[149,105567,5811],{"class":309},[149,105569,5457],{"class":155},[149,105571,105572,105575,105577,105579,105581],{"class":151,"line":193},[149,105573,105574],{"class":325},"    raise",[149,105576,105114],{"class":309},[149,105578,319],{"class":155},[149,105580,105119],{"class":169},[149,105582,1878],{"class":155},[24,105584,105585,105587,105588,105591,105592,105595,105596,105599],{},[48,105586,3255],{}," 是条件判断。",[48,105589,105590],{},"mj_name2id"," 找不到对象时会返回 ",[48,105593,105594],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[48,105597,105598],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[140,105601,105603],{"className":32084,"code":105602,"language":32086,"meta":145,"style":145},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[48,105604,105605,105621],{"__ignoreMap":145},[149,105606,105607,105609,105611,105613,105615,105617,105619],{"class":151,"line":152},[149,105608,4743],{"class":325},[149,105610,103181],{"class":155},[149,105612,27752],{"class":325},[149,105614,34149],{"class":309},[149,105616,319],{"class":155},[149,105618,3442],{"class":309},[149,105620,32492],{"class":155},[149,105622,105623],{"class":151,"line":193},[149,105624,103379],{"class":155},[24,105626,105627],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[140,105629,105631],{"className":32084,"code":105630,"language":32086,"meta":145,"style":145},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[48,105632,105633],{"__ignoreMap":145},[149,105634,105635,105637,105639,105641],{"class":151,"line":152},[149,105636,32121],{"class":309},[149,105638,319],{"class":155},[149,105640,105195],{"class":169},[149,105642,105198],{"class":155},[24,105644,105645,105647,105648,105651],{},[48,105646,102759],{}," 保存所有 body 的世界坐标。",[48,105649,105650],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[140,105653,105655],{"className":32084,"code":105654,"language":32086,"meta":145,"style":145},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[48,105656,105657],{"__ignoreMap":145},[149,105658,105659,105661,105663,105665],{"class":151,"line":152},[149,105660,32121],{"class":309},[149,105662,319],{"class":155},[149,105664,105207],{"class":169},[149,105666,105210],{"class":155},[24,105668,105669,105672,105673,105675],{},[48,105670,105671],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[48,105674,104657],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[140,105677,105679],{"className":32084,"code":105678,"language":32086,"meta":145,"style":145},"print(\"box qpos:\", np.array(data.qpos))\n",[48,105680,105681],{"__ignoreMap":145},[149,105682,105683,105685,105687,105689],{"class":151,"line":152},[149,105684,32121],{"class":309},[149,105686,319],{"class":155},[149,105688,105219],{"class":169},[149,105690,105222],{"class":155},[24,105692,105693,105694,105697],{},"这里打印广义位置数组。",[48,105695,105696],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105699,103996],{"id":103995},[24,105701,105702,105703,105706,105707,30091],{},"程序会输出 ",[48,105704,105705],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[48,105708,105709],{},"qpos",[24,105711,105712,105714,105715,105718,105719,105722],{},[48,105713,105650],{}," 是 body 的世界坐标位置。",[48,105716,105717],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[48,105720,105721],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[24,105724,83903,105725,84211,105727,105729],{},[48,105726,104657],{},[48,105728,105474],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[24,105731,105732],{},"如果你把 site 改成：",[140,105734,105736],{"className":54765,"code":105735,"language":54767,"meta":145,"style":145},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[48,105737,105738],{"__ignoreMap":145},[149,105739,105740,105742,105744,105746,105748,105751,105753,105755,105758,105760,105762,105764,105766,105768,105770],{"class":151,"line":152},[149,105741,156],{"class":155},[149,105743,104889],{"class":159},[149,105745,515],{"class":162},[149,105747,166],{"class":155},[149,105749,105750],{"class":169},"\"box_top\"",[149,105752,102786],{"class":162},[149,105754,166],{"class":155},[149,105756,105757],{"class":169},"\"0 0 0.15\"",[149,105759,102816],{"class":162},[149,105761,166],{"class":155},[149,105763,105457],{"class":169},[149,105765,80448],{"class":162},[149,105767,166],{"class":155},[149,105769,105464],{"class":169},[149,105771,102824],{"class":155},[24,105773,105774,105775,105778],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[48,105776,105777],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105780,104028],{"id":104027},[125,105782,105783,105792,105795,105802,105808,105819],{},[45,105784,104091,105785,105787,105788,104094,105790,30091],{},[48,105786,104661],{}," 的初始高度从 ",[48,105789,830],{},[48,105791,1045],{},[45,105793,105794],{},"重新运行程序。",[45,105796,105797,105798,105801],{},"观察 ",[48,105799,105800],{},"box qpos"," 和最终位置是否变化。",[45,105803,105804,105805,105807],{},"故意把 ",[48,105806,104889],{}," 名称改错，确认程序能报错。",[45,105809,104091,105810,105812,105813,104094,105815,105818],{},[48,105811,102800],{}," 的颜色 ",[48,105814,103712],{},[48,105816,105817],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[45,105820,104091,105821,84211,105823,104094,105826,105829,105830,105832],{},[48,105822,104657],{},[48,105824,105825],{},"pos",[48,105827,105828],{},"0 0 0.2","，观察 ",[48,105831,105777],{}," 如何变化。",[14,105834,104133],{"id":104132},[19,105836,105838],{"id":105837},"xml-error-schema-violation",[48,105839,105840],{},"XML Error: Schema violation",[24,105842,105843],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[19,105845,105847,82971,105849],{"id":105846},"mj_name2id-返回-1",[48,105848,105590],{},[48,105850,105594],{},[24,105852,105853,105854,105857],{},"说明名字没有找到。检查 XML 中 ",[48,105855,105856],{},"name=\"...\"","，并确认对象类型正确。",[19,105859,105860],{"id":105860},"物体不下落",[24,105862,104203],{},[125,105864,105865,105870,105875],{},[45,105866,105867,105868],{},"body 是否有 ",[48,105869,103300],{},[45,105871,105872,105873],{},"gravity 是否为 ",[48,105874,104269],{},[45,105876,105877,105878,105880],{},"body 是否被固定在 ",[48,105879,103521],{}," 中",[19,105882,105883],{"id":105883},"坐标看起来不符合预期",[24,105885,105886],{},"先区分两种坐标：",[2003,105888,105889,105898],{},[2006,105890,105891],{},[2009,105892,105893,105896],{},[2012,105894,105895],{"align":1566},"坐标",[2012,105897,102380],{"align":1566},[2049,105899,105900,105910],{},[2009,105901,105902,105907],{},[2054,105903,105904,105905],{"align":1566},"XML 里的 ",[48,105906,105825],{},[2054,105908,105909],{"align":1566},"相对父 body 的局部坐标",[2009,105911,105912,105918],{},[2054,105913,105914,26687,105916],{"align":1566},[48,105915,102759],{},[48,105917,105671],{},[2054,105919,105920],{"align":1566},"仿真更新后的世界坐标",[24,105922,105923,105924,105926,105927,84220,105930,105932],{},"如果你修改了 ",[48,105925,102750],{},"，但还没调用 ",[48,105928,105929],{},"mj_forward",[48,105931,102895],{},"，世界坐标可能还没有更新。",[14,105934,104287],{"id":104286},[24,105936,105937],{},"MJCF 建模先掌握四件事：",[125,105939,105940,105945,105950,105955],{},[45,105941,105942,105944],{},[48,105943,53499],{}," 表示刚体层级。",[45,105946,105947,105949],{},[48,105948,102800],{}," 表示形状、碰撞和质量。",[45,105951,105952,105954],{},[48,105953,104636],{}," 决定 body 能不能动、怎么动。",[45,105956,105957,105959],{},[48,105958,104889],{}," 用来标记关键点，方便 Python 读取位置。",[24,105961,105962],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1783,105964,105965],{},"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":145,"searchDepth":193,"depth":193,"links":105967},[105968,105969,105970,105976,105980,105981,105982,105989],{"id":102326,"depth":193,"text":102327},{"id":102449,"depth":193,"text":102450},{"id":102724,"depth":193,"text":102725,"children":105971},[105972,105973,105974,105975],{"id":104640,"depth":235,"text":104640},{"id":104754,"depth":235,"text":104754},{"id":104780,"depth":235,"text":104781},{"id":104883,"depth":235,"text":104884},{"id":102932,"depth":193,"text":102933,"children":105977},[105978,105979],{"id":103252,"depth":235,"text":103252},{"id":103388,"depth":235,"text":103388},{"id":103995,"depth":193,"text":103996},{"id":104027,"depth":193,"text":104028},{"id":104132,"depth":193,"text":104133,"children":105983},[105984,105985,105987,105988],{"id":105837,"depth":235,"text":105840},{"id":105846,"depth":235,"text":105986},"mj_name2id 返回 -1",{"id":105860,"depth":235,"text":105860},{"id":105883,"depth":235,"text":105883},{"id":104286,"depth":193,"text":104287},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104334,"description":145},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105996,"title":105997,"body":105998,"description":145,"extension":1798,"meta":107493,"navigation":1800,"path":107494,"seo":107495,"stem":107496,"__hash__":107497},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105999,"toc":107465},[106000,106003,106005,106008,106011,106049,106052,106058,106061,106063,106065,106092,106094,106108,106110,106151,106153,106177,106179,106182,106191,106200,106203,106212,106220,106229,106232,106242,106245,106297,106304,106310,106318,106366,106369,106388,106391,106399,106403,106412,106445,106447,106795,106797,106809,106811,106822,106824,106827,106848,106854,106857,106882,106892,106895,106903,106906,106909,106930,106941,106943,106963,106966,106987,106996,107015,107021,107046,107049,107063,107070,107094,107097,107105,107114,107130,107142,107150,107159,107161,107164,107188,107193,107196,107218,107220,107259,107261,107268,107270,107278,107281,107284,107296,107337,107344,107355,107362,107365,107414,107417,107420,107426,107428,107433,107459,107462],[10,106001,105997],{"id":106002},"_3python-控制接口读取状态与推进仿真",[14,106004,102327],{"id":102326},[24,106006,106007],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[24,106009,106010],{},"你将学习:",[125,106012,106013,106018,106023,106027,106032,106043],{},[45,106014,106015],{},[48,106016,106017],{},"MjModel.from_xml_string",[45,106019,106020],{},[48,106021,106022],{},"MjData(model)",[45,106024,106025],{},[48,106026,102895],{},[45,106028,106029],{},[48,106030,106031],{},"mj_resetData",[45,106033,106034,106035,2077,106037,2077,106040],{},"读取 ",[48,106036,105709],{},[48,106038,106039],{},"qvel",[48,106041,106042],{},"ctrl",[45,106044,106045,106046],{},"使用 ",[48,106047,106048],{},"model.opt.timestep",[24,106050,106051],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[140,106053,106056],{"className":106054,"code":106055,"language":1655,"meta":145},[1653],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[48,106057,106055],{"__ignoreMap":145},[24,106059,106060],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106062,102450],{"id":102449},[24,106064,102453],{},[140,106066,106068],{"className":25530,"code":106067,"language":25532,"meta":145,"style":145},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[48,106069,106070],{"__ignoreMap":145},[149,106071,106072,106074,106076,106078,106080,106083,106085,106087,106089],{"class":151,"line":152},[149,106073,26285],{"class":162},[149,106075,28024],{"class":169},[149,106077,25542],{"class":169},[149,106079,28109],{"class":309},[149,106081,106082],{"class":169}," python3",[149,106084,102478],{"class":169},[149,106086,104181],{"class":169},[149,106088,102494],{"class":169},[149,106090,106091],{"class":169}," glfw\n",[24,106093,104499],{},[140,106095,106096],{"className":25530,"code":102599,"language":25532,"meta":145,"style":145},[48,106097,106098],{"__ignoreMap":145},[149,106099,106100,106102,106104,106106],{"class":151,"line":152},[149,106101,25539],{"class":162},[149,106103,25542],{"class":169},[149,106105,102610],{"class":169},[149,106107,102613],{"class":169},[24,106109,104516],{},[140,106111,106113],{"className":25530,"code":106112,"language":25532,"meta":145,"style":145},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[48,106114,106115,106132,106141],{"__ignoreMap":145},[149,106116,106117,106119,106121,106123,106126,106128,106130],{"class":151,"line":152},[149,106118,32036],{"class":162},[149,106120,30882],{"class":169},[149,106122,26824],{"class":309},[149,106124,106125],{"class":169}," mujoco-python-api",[149,106127,102655],{"class":169},[149,106129,102658],{"class":309},[149,106131,102661],{"class":309},[149,106133,106134,106136,106138],{"class":151,"line":193},[149,106135,32036],{"class":162},[149,106137,102668],{"class":169},[149,106139,106140],{"class":169}," mujoco-python-api\n",[149,106142,106143,106145,106147,106149],{"class":151,"line":235},[149,106144,25539],{"class":162},[149,106146,25542],{"class":169},[149,106148,102610],{"class":169},[149,106150,102613],{"class":169},[24,106152,102684],{},[125,106154,106155,106162,106171],{},[45,106156,106157,102698,106159,106161],{},[48,106158,102355],{},[48,106160,102360],{}," 是官方 Python bindings 的类名。",[45,106163,106164,106165,106168,106169,30091],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[48,106166,106167],{},"mjModel"," 在 Python 中是 ",[48,106170,102389],{},[45,106172,106173,106174,30091],{},"不要使用 ",[48,106175,106176],{},"sim = mujoco_py.MjSim(...)",[14,106178,102725],{"id":102724},[24,106180,106181],{},"仿真推进核心代码:",[140,106183,106185],{"className":32084,"code":106184,"language":32086,"meta":145,"style":145},"mujoco.mj_step(model, data)\n",[48,106186,106187],{"__ignoreMap":145},[149,106188,106189],{"class":151,"line":152},[149,106190,106184],{"class":155},[24,106192,106193,106194,2077,106196,2077,106198,30091],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[48,106195,102750],{},[48,106197,102753],{},[48,106199,102747],{},[24,106201,106202],{},"重置仿真:",[140,106204,106206],{"className":32084,"code":106205,"language":32086,"meta":145,"style":145},"mujoco.mj_resetData(model, data)\n",[48,106207,106208],{"__ignoreMap":145},[149,106209,106210],{"class":151,"line":152},[149,106211,106205],{"class":155},[24,106213,106214,106215,84220,106217,106219],{},"如果手动修改了 ",[48,106216,102750],{},[48,106218,102753],{},"，通常应调用:",[140,106221,106223],{"className":32084,"code":106222,"language":32086,"meta":145,"style":145},"mujoco.mj_forward(model, data)\n",[48,106224,106225],{"__ignoreMap":145},[149,106226,106227],{"class":151,"line":152},[149,106228,106222],{"class":155},[24,106230,106231],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[19,106233,106235,2077,106237,2077,106239,106241],{"id":106234},"qposqvelctrl-是什么",[48,106236,105709],{},[48,106238,106039],{},[48,106240,106042],{}," 是什么",[24,106243,106244],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[2003,106246,106247,106259],{},[2006,106248,106249],{},[2009,106250,106251,106254,106256],{},[2012,106252,106253],{"align":1566},"字段",[2012,106255,102380],{"align":1566},[2012,106257,106258],{"align":1566},"谁来修改",[2049,106260,106261,106273,106285],{},[2009,106262,106263,106267,106270],{},[2054,106264,106265],{"align":1566},[48,106266,102750],{},[2054,106268,106269],{"align":1566},"广义位置，例如小车位置、关节角、自由物体位置姿态",[2054,106271,106272],{"align":1566},"MuJoCo 更新，也可以手动设置初始状态",[2009,106274,106275,106279,106282],{},[2054,106276,106277],{"align":1566},[48,106278,102753],{},[2054,106280,106281],{"align":1566},"广义速度，例如小车速度、关节角速度",[2054,106283,106284],{"align":1566},"MuJoCo 更新，也可以手动清零",[2009,106286,106287,106291,106294],{},[2054,106288,106289],{"align":1566},[48,106290,102756],{},[2054,106292,106293],{"align":1566},"actuator 的控制输入",[2054,106295,106296],{"align":1566},"主要由你的控制代码写入",[24,106298,866,106299,102698,106301,106303],{},[48,106300,105709],{},[48,106302,106039],{}," 不一定同维。自由刚体就是典型例子：",[140,106305,106308],{"className":106306,"code":106307,"language":1655,"meta":145},[1653],"freejoint: qpos 7 维，qvel 6 维\n",[48,106309,106307],{"__ignoreMap":145},[19,106311,106313,102698,106315,106317],{"id":106312},"mj_step-和-mj_forward-的区别",[48,106314,102895],{},[48,106316,105929],{}," 的区别",[2003,106319,106320,106333],{},[2006,106321,106322],{},[2009,106323,106324,106327,106330],{},[2012,106325,106326],{"align":1566},"函数",[2012,106328,106329],{"align":1566},"是否推进时间",[2012,106331,106332],{"align":1566},"什么时候用",[2049,106334,106335,106348],{},[2009,106336,106337,106342,106345],{},[2054,106338,106339],{"align":1566},[48,106340,106341],{},"mj_step(model, data)",[2054,106343,106344],{"align":1566},"是",[2054,106346,106347],{"align":1566},"正常仿真循环，每调用一次前进一步",[2009,106349,106350,106355,106358],{},[2054,106351,106352],{"align":1566},[48,106353,106354],{},"mj_forward(model, data)",[2054,106356,106357],{"align":1566},"否",[2054,106359,106360,106361,2077,106363,106365],{"align":1566},"手动改了 ",[48,106362,105709],{},[48,106364,106039],{}," 后，刷新派生量",[24,106367,106368],{},"例如你写：",[140,106370,106372],{"className":32084,"code":106371,"language":32086,"meta":145,"style":145},"data.qpos[2] = 2.0\n",[48,106373,106374],{"__ignoreMap":145},[149,106375,106376,106379,106381,106383,106385],{"class":151,"line":152},[149,106377,106378],{"class":155},"data.qpos[",[149,106380,1045],{"class":309},[149,106382,6161],{"class":155},[149,106384,166],{"class":325},[149,106386,106387],{"class":309}," 2.0\n",[24,106389,106390],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[140,106392,106393],{"className":32084,"code":106222,"language":32086,"meta":145,"style":145},[48,106394,106395],{"__ignoreMap":145},[149,106396,106397],{"class":151,"line":152},[149,106398,106222],{"class":155},[19,106400,106402],{"id":106401},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[24,106404,106405,106408,106409,106411],{},[48,106406,106407],{},"mujoco.mj_resetData(model, data)"," 会把 ",[48,106410,35107],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[140,106413,106415],{"className":32084,"code":106414,"language":32086,"meta":145,"style":145},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[48,106416,106417,106421,106431,106441],{"__ignoreMap":145},[149,106418,106419],{"class":151,"line":152},[149,106420,106205],{"class":155},[149,106422,106423,106426,106428],{"class":151,"line":193},[149,106424,106425],{"class":155},"data.qpos[:] ",[149,106427,166],{"class":325},[149,106429,106430],{"class":155}," random_qpos\n",[149,106432,106433,106436,106438],{"class":151,"line":235},[149,106434,106435],{"class":155},"data.qvel[:] ",[149,106437,166],{"class":325},[149,106439,106440],{"class":309}," 0.0\n",[149,106442,106443],{"class":151,"line":340},[149,106444,106222],{"class":155},[14,106446,102933],{"id":102932},[140,106448,106450],{"className":32084,"code":106449,"language":32086,"meta":145,"style":145},"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",[48,106451,106452,106458,106468,106472,106476,106484,106489,106493,106497,106501,106506,106510,106515,106520,106525,106529,106533,106537,106541,106545,106549,106568,106575,106587,106598,106614,106630,106634,106638,106650,106662,106670,106674,106685,106689,106705,106709,106713,106722,106726,106731,106740,106744,106757,106762,106771,106775,106779,106791],{"__ignoreMap":145},[149,106453,106454,106456],{"class":151,"line":152},[149,106455,32098],{"class":325},[149,106457,102981],{"class":155},[149,106459,106460,106462,106464,106466],{"class":151,"line":193},[149,106461,32098],{"class":325},[149,106463,33086],{"class":155},[149,106465,33089],{"class":325},[149,106467,33092],{"class":155},[149,106469,106470],{"class":151,"line":235},[149,106471,4119],{"emptyLinePlaceholder":1800},[149,106473,106474],{"class":151,"line":340},[149,106475,4119],{"emptyLinePlaceholder":1800},[149,106477,106478,106480,106482],{"class":151,"line":346},[149,106479,102994],{"class":309},[149,106481,15277],{"class":325},[149,106483,102999],{"class":169},[149,106485,106486],{"class":151,"line":352},[149,106487,106488],{"class":169},"\u003Cmujoco model=\"state_api\">\n",[149,106490,106491],{"class":151,"line":1021},[149,106492,103009],{"class":169},[149,106494,106495],{"class":151,"line":1035},[149,106496,4119],{"emptyLinePlaceholder":1800},[149,106498,106499],{"class":151,"line":1054},[149,106500,103018],{"class":169},[149,106502,106503],{"class":151,"line":1072},[149,106504,106505],{"class":169},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[149,106507,106508],{"class":151,"line":1090},[149,106509,4119],{"emptyLinePlaceholder":1800},[149,106511,106512],{"class":151,"line":1633},[149,106513,106514],{"class":169},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[149,106516,106517],{"class":151,"line":1644},[149,106518,106519],{"class":169},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[149,106521,106522],{"class":151,"line":3348},[149,106523,106524],{"class":169},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[149,106526,106527],{"class":151,"line":3362},[149,106528,103047],{"class":169},[149,106530,106531],{"class":151,"line":3367},[149,106532,103052],{"class":169},[149,106534,106535],{"class":151,"line":3373},[149,106536,103057],{"class":169},[149,106538,106539],{"class":151,"line":3394},[149,106540,97378],{"class":169},[149,106542,106543],{"class":151,"line":3399},[149,106544,4119],{"emptyLinePlaceholder":1800},[149,106546,106547],{"class":151,"line":3413},[149,106548,4119],{"emptyLinePlaceholder":1800},[149,106550,106551,106553,106556,106559,106561,106564,106566],{"class":151,"line":3418},[149,106552,33653],{"class":325},[149,106554,106555],{"class":162}," print_state",[149,106557,106558],{"class":155},"(prefix: ",[149,106560,3027],{"class":309},[149,106562,106563],{"class":155},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[149,106565,97366],{"class":309},[149,106567,5457],{"class":155},[149,106569,106570,106572],{"class":151,"line":3447},[149,106571,33005],{"class":309},[149,106573,106574],{"class":155},"(prefix)\n",[149,106576,106577,106579,106581,106584],{"class":151,"line":3452},[149,106578,33005],{"class":309},[149,106580,319],{"class":155},[149,106582,106583],{"class":169},"\"  timestep:\"",[149,106585,106586],{"class":155},", model.opt.timestep)\n",[149,106588,106589,106591,106593,106596],{"class":151,"line":3469},[149,106590,33005],{"class":309},[149,106592,319],{"class":155},[149,106594,106595],{"class":169},"\"  time:\"",[149,106597,103158],{"class":155},[149,106599,106600,106602,106604,106607,106610,106612],{"class":151,"line":3474},[149,106601,33005],{"class":309},[149,106603,319],{"class":155},[149,106605,106606],{"class":169},"\"  qpos:\"",[149,106608,106609],{"class":155},", np.round(data.qpos.copy(), ",[149,106611,2157],{"class":309},[149,106613,32203],{"class":155},[149,106615,106616,106618,106620,106623,106626,106628],{"class":151,"line":3479},[149,106617,33005],{"class":309},[149,106619,319],{"class":155},[149,106621,106622],{"class":169},"\"  qvel:\"",[149,106624,106625],{"class":155},", np.round(data.qvel.copy(), ",[149,106627,2157],{"class":309},[149,106629,32203],{"class":155},[149,106631,106632],{"class":151,"line":3484},[149,106633,4119],{"emptyLinePlaceholder":1800},[149,106635,106636],{"class":151,"line":3498},[149,106637,4119],{"emptyLinePlaceholder":1800},[149,106639,106640,106642,106644,106646,106648],{"class":151,"line":3503},[149,106641,33653],{"class":325},[149,106643,3692],{"class":162},[149,106645,103078],{"class":155},[149,106647,97366],{"class":309},[149,106649,5457],{"class":155},[149,106651,106652,106654,106656,106658,106660],{"class":151,"line":4296},[149,106653,103087],{"class":155},[149,106655,166],{"class":325},[149,106657,103092],{"class":155},[149,106659,102994],{"class":309},[149,106661,1878],{"class":155},[149,106663,106664,106666,106668],{"class":151,"line":4310},[149,106665,103101],{"class":155},[149,106667,166],{"class":325},[149,106669,103106],{"class":155},[149,106671,106672],{"class":151,"line":4318},[149,106673,4119],{"emptyLinePlaceholder":1800},[149,106675,106676,106679,106682],{"class":151,"line":4323},[149,106677,106678],{"class":155},"    print_state(",[149,106680,106681],{"class":169},"\"initial\"",[149,106683,106684],{"class":155},", model, data)\n",[149,106686,106687],{"class":151,"line":4329},[149,106688,4119],{"emptyLinePlaceholder":1800},[149,106690,106691,106693,106695,106697,106699,106701,106703],{"class":151,"line":4335},[149,106692,4919],{"class":325},[149,106694,103181],{"class":155},[149,106696,27752],{"class":325},[149,106698,34149],{"class":309},[149,106700,319],{"class":155},[149,106702,332],{"class":309},[149,106704,32492],{"class":155},[149,106706,106707],{"class":151,"line":4340},[149,106708,103196],{"class":155},[149,106710,106711],{"class":151,"line":9663},[149,106712,4119],{"emptyLinePlaceholder":1800},[149,106714,106715,106717,106720],{"class":151,"line":9687},[149,106716,106678],{"class":155},[149,106718,106719],{"class":169},"\"after 50 steps\"",[149,106721,106684],{"class":155},[149,106723,106724],{"class":151,"line":9692},[149,106725,4119],{"emptyLinePlaceholder":1800},[149,106727,106728],{"class":151,"line":9698},[149,106729,106730],{"class":155},"    mujoco.mj_resetData(model, data)\n",[149,106732,106733,106735,106738],{"class":151,"line":9725},[149,106734,106678],{"class":155},[149,106736,106737],{"class":169},"\"after reset\"",[149,106739,106684],{"class":155},[149,106741,106742],{"class":151,"line":9730},[149,106743,4119],{"emptyLinePlaceholder":1800},[149,106745,106746,106749,106751,106753,106755],{"class":151,"line":9736},[149,106747,106748],{"class":155},"    data.qpos[",[149,106750,1045],{"class":309},[149,106752,6161],{"class":155},[149,106754,166],{"class":325},[149,106756,106387],{"class":309},[149,106758,106759],{"class":151,"line":9748},[149,106760,106761],{"class":155},"    mujoco.mj_forward(model, data)\n",[149,106763,106764,106766,106769],{"class":151,"line":9760},[149,106765,106678],{"class":155},[149,106767,106768],{"class":169},"\"after manual qpos edit\"",[149,106770,106684],{"class":155},[149,106772,106773],{"class":151,"line":9772},[149,106774,4119],{"emptyLinePlaceholder":1800},[149,106776,106777],{"class":151,"line":11430},[149,106778,4119],{"emptyLinePlaceholder":1800},[149,106780,106781,106783,106785,106787,106789],{"class":151,"line":11455},[149,106782,3255],{"class":325},[149,106784,32926],{"class":309},[149,106786,103239],{"class":325},[149,106788,103242],{"class":169},[149,106790,5457],{"class":155},[149,106792,106793],{"class":151,"line":11478},[149,106794,103249],{"class":155},[24,106796,105249],{},[140,106798,106800],{"className":25530,"code":106799,"language":25532,"meta":145,"style":145},"touch ch3_python_state.py\n",[48,106801,106802],{"__ignoreMap":145},[149,106803,106804,106806],{"class":151,"line":152},[149,106805,102963],{"class":162},[149,106807,106808],{"class":169}," ch3_python_state.py\n",[24,106810,103981],{},[140,106812,106814],{"className":25530,"code":106813,"language":25532,"meta":145,"style":145},"python ch3_python_state.py\n",[48,106815,106816],{"__ignoreMap":145},[149,106817,106818,106820],{"class":151,"line":152},[149,106819,32086],{"class":162},[149,106821,106808],{"class":169},[19,106823,103252],{"id":103252},[24,106825,106826],{},"打印状态的函数：",[140,106828,106830],{"className":32084,"code":106829,"language":32086,"meta":145,"style":145},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[48,106831,106832],{"__ignoreMap":145},[149,106833,106834,106836,106838,106840,106842,106844,106846],{"class":151,"line":152},[149,106835,33653],{"class":325},[149,106837,106555],{"class":162},[149,106839,106558],{"class":155},[149,106841,3027],{"class":309},[149,106843,106563],{"class":155},[149,106845,97366],{"class":309},[149,106847,5457],{"class":155},[24,106849,106850,106851,106853],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[48,106852,35107],{}," 里发生了什么。",[24,106855,106856],{},"推进 50 步：",[140,106858,106860],{"className":32084,"code":106859,"language":32086,"meta":145,"style":145},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[48,106861,106862,106878],{"__ignoreMap":145},[149,106863,106864,106866,106868,106870,106872,106874,106876],{"class":151,"line":152},[149,106865,4743],{"class":325},[149,106867,103181],{"class":155},[149,106869,27752],{"class":325},[149,106871,34149],{"class":309},[149,106873,319],{"class":155},[149,106875,332],{"class":309},[149,106877,32492],{"class":155},[149,106879,106880],{"class":151,"line":193},[149,106881,103379],{"class":155},[24,106883,106884,106885,106888,106889,106891],{},"由于 ",[48,106886,106887],{},"timestep=0.01","，所以 50 步后时间约为 ",[48,106890,37035],{}," 秒。",[24,106893,106894],{},"重置：",[140,106896,106897],{"className":32084,"code":106205,"language":32086,"meta":145,"style":145},[48,106898,106899],{"__ignoreMap":145},[149,106900,106901],{"class":151,"line":152},[149,106902,106205],{"class":155},[24,106904,106905],{},"这会把时间、位置、速度恢复到初始状态。",[24,106907,106908],{},"手动改高度：",[140,106910,106912],{"className":32084,"code":106911,"language":32086,"meta":145,"style":145},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[48,106913,106914,106926],{"__ignoreMap":145},[149,106915,106916,106918,106920,106922,106924],{"class":151,"line":152},[149,106917,106378],{"class":155},[149,106919,1045],{"class":309},[149,106921,6161],{"class":155},[149,106923,166],{"class":325},[149,106925,106387],{"class":309},[149,106927,106928],{"class":151,"line":193},[149,106929,106222],{"class":155},[24,106931,106932,106933,106936,106937,106940],{},"这个例子里 ",[48,106934,106935],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[48,106938,106939],{},"2.0"," 表示把小球放到更高的位置。",[19,106942,103388],{"id":103388},[140,106944,106945],{"className":32084,"code":106829,"language":32086,"meta":145,"style":145},[48,106946,106947],{"__ignoreMap":145},[149,106948,106949,106951,106953,106955,106957,106959,106961],{"class":151,"line":152},[149,106950,33653],{"class":325},[149,106952,106555],{"class":162},[149,106954,106558],{"class":155},[149,106956,3027],{"class":309},[149,106958,106563],{"class":155},[149,106960,97366],{"class":309},[149,106962,5457],{"class":155},[24,106964,106965],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[125,106967,106968,106977,106982],{},[45,106969,106970,106973,106974,106976],{},[48,106971,106972],{},"prefix","：一段文字，比如 ",[48,106975,106681],{},"，用来说明现在打印的是哪个阶段。",[45,106978,106979,106981],{},[48,106980,103765],{},"：MuJoCo 模型。",[45,106983,106984,106986],{},[48,106985,35107],{},"：MuJoCo 当前状态。",[24,106988,106989,2077,106992,106995],{},[48,106990,106991],{},"prefix: str",[48,106993,106994],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[140,106997,106999],{"className":32084,"code":106998,"language":32086,"meta":145,"style":145},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[48,107000,107001],{"__ignoreMap":145},[149,107002,107003,107005,107007,107009,107011,107013],{"class":151,"line":152},[149,107004,32121],{"class":309},[149,107006,319],{"class":155},[149,107008,106606],{"class":169},[149,107010,106609],{"class":155},[149,107012,2157],{"class":309},[149,107014,32203],{"class":155},[24,107016,107017,107020],{},[48,107018,107019],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[140,107022,107024],{"className":32084,"code":107023,"language":32086,"meta":145,"style":145},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[48,107025,107026,107038],{"__ignoreMap":145},[149,107027,107028,107030,107032,107034,107036],{"class":151,"line":152},[149,107029,103314],{"class":155},[149,107031,166],{"class":325},[149,107033,103092],{"class":155},[149,107035,102994],{"class":309},[149,107037,1878],{"class":155},[149,107039,107040,107042,107044],{"class":151,"line":193},[149,107041,103338],{"class":155},[149,107043,166],{"class":325},[149,107045,103106],{"class":155},[24,107047,107048],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[140,107050,107052],{"className":32084,"code":107051,"language":32086,"meta":145,"style":145},"print_state(\"initial\", model, data)\n",[48,107053,107054],{"__ignoreMap":145},[149,107055,107056,107059,107061],{"class":151,"line":152},[149,107057,107058],{"class":155},"print_state(",[149,107060,106681],{"class":169},[149,107062,106684],{"class":155},[24,107064,107065,107066,107069],{},"调用刚才定义的 ",[48,107067,107068],{},"print_state"," 函数，打印初始状态。",[140,107071,107072],{"className":32084,"code":106859,"language":32086,"meta":145,"style":145},[48,107073,107074,107090],{"__ignoreMap":145},[149,107075,107076,107078,107080,107082,107084,107086,107088],{"class":151,"line":152},[149,107077,4743],{"class":325},[149,107079,103181],{"class":155},[149,107081,27752],{"class":325},[149,107083,34149],{"class":309},[149,107085,319],{"class":155},[149,107087,332],{"class":309},[149,107089,32492],{"class":155},[149,107091,107092],{"class":151,"line":193},[149,107093,103379],{"class":155},[24,107095,107096],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[140,107098,107099],{"className":32084,"code":106205,"language":32086,"meta":145,"style":145},[48,107100,107101],{"__ignoreMap":145},[149,107102,107103],{"class":151,"line":152},[149,107104,106205],{"class":155},[24,107106,107107,107108,107110,107111,107113],{},"重置 ",[48,107109,35107],{},"。注意它不会重新创建 ",[48,107112,103765],{},"，因为模型结构没有变，只是状态回到初始值。",[140,107115,107116],{"className":32084,"code":106371,"language":32086,"meta":145,"style":145},[48,107117,107118],{"__ignoreMap":145},[149,107119,107120,107122,107124,107126,107128],{"class":151,"line":152},[149,107121,106378],{"class":155},[149,107123,1045],{"class":309},[149,107125,6161],{"class":155},[149,107127,166],{"class":325},[149,107129,106387],{"class":309},[24,107131,107132,107133,2077,107136,2077,107139,107141],{},"这行是“手动改状态”。在 freejoint 中，",[48,107134,107135],{},"qpos[0]",[48,107137,107138],{},"qpos[1]",[48,107140,106935],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[140,107143,107144],{"className":32084,"code":106222,"language":32086,"meta":145,"style":145},[48,107145,107146],{"__ignoreMap":145},[149,107147,107148],{"class":151,"line":152},[149,107149,106222],{"class":155},[24,107151,107152,107153,107155,107156,107158],{},"手动改完 ",[48,107154,105709],{}," 后，调用 ",[48,107157,105929],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107160,103996],{"id":103995},[24,107162,107163],{},"你会看到:",[125,107165,107166,107171,107176,107179],{},[45,107167,107168,107169],{},"初始时间为 ",[48,107170,2056],{},[45,107172,107173,107174],{},"50 步后时间约为 ",[48,107175,37035],{},[45,107177,107178],{},"reset 后状态恢复",[45,107180,107181,107182,107185,107186],{},"手动修改 ",[48,107183,107184],{},"data.qpos[2]"," 后，小球高度变为 ",[48,107187,106939],{},[24,107189,107190,107192],{},[48,107191,106935],{}," 在这个例子中表示自由刚体的 z 坐标。",[24,107194,107195],{},"输出里可以重点看三件事：",[125,107197,107198,107206,107211],{},[45,107199,107200,107202,107203,107205],{},[48,107201,4106],{}," 是否随着 ",[48,107204,102895],{}," 增加。",[45,107207,107208,107210],{},[48,107209,105709],{}," 的 z 坐标是否因为下落而变化。",[45,107212,107213,107215,107216,30091],{},[48,107214,106031],{}," 后时间是否回到 ",[48,107217,2056],{},[14,107219,104028],{"id":104027},[125,107221,107222,107228,107234,107240,107243,107252],{},[45,107223,107224,107225,30091],{},"修改 timestep 为 ",[48,107226,107227],{},"0.005",[45,107229,107230,107231,30091],{},"重新运行，检查 50 步后时间是否约为 ",[48,107232,107233],{},"0.25",[45,107235,107236,107237,30091],{},"修改重力为 ",[48,107238,107239],{},"0 0 -1.0",[45,107241,107242],{},"观察小球下降速度是否变慢。",[45,107244,104091,107245,104094,107248,107251],{},[48,107246,107247],{},"data.qpos[2] = 2.0",[48,107249,107250],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[45,107253,107254,107255,107258],{},"注释掉 ",[48,107256,107257],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107260,104133],{"id":104132},[19,107262,107264,107265,107267],{"id":107263},"修改-dataqpos-后位置没有更新","修改 ",[48,107266,102750],{}," 后位置没有更新",[24,107269,104142],{},[140,107271,107272],{"className":32084,"code":106222,"language":32086,"meta":145,"style":145},[48,107273,107274],{"__ignoreMap":145},[149,107275,107276],{"class":151,"line":152},[149,107277,106222],{"class":155},[19,107279,107280],{"id":107280},"数组维度看不懂",[24,107282,107283],{},"打印模型维度:",[140,107285,107287],{"className":32084,"code":107286,"language":32086,"meta":145,"style":145},"print(model.nq, model.nv, model.nu)\n",[48,107288,107289],{"__ignoreMap":145},[149,107290,107291,107293],{"class":151,"line":152},[149,107292,32121],{"class":309},[149,107294,107295],{"class":155},"(model.nq, model.nv, model.nu)\n",[2003,107297,107298,107306],{},[2006,107299,107300],{},[2009,107301,107302,107304],{},[2012,107303,106253],{"align":1566},[2012,107305,102380],{"align":1566},[2049,107307,107308,107318,107328],{},[2009,107309,107310,107315],{},[2054,107311,107312],{"align":1566},[48,107313,107314],{},"nq",[2054,107316,107317],{"align":1566},"位置变量数量",[2009,107319,107320,107325],{},[2054,107321,107322],{"align":1566},[48,107323,107324],{},"nv",[2054,107326,107327],{"align":1566},"速度变量数量",[2009,107329,107330,107334],{},[2054,107331,107332],{"align":1566},[48,107333,103842],{},[2054,107335,107336],{"align":1566},"控制输入数量",[19,107338,107340,107341,107343],{"id":107339},"误以为-qpos-一定等于关节数","误以为 ",[48,107342,105709],{}," 一定等于关节数",[24,107345,107346,107347,84211,107349,107351,107352,107354],{},"不是。例如 ",[48,107348,103300],{},[48,107350,105709],{}," 是 7 维，但 ",[48,107353,106039],{}," 是 6 维。",[19,107356,107358,107359,107361],{"id":107357},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[48,107360,105709],{}," 的第几位",[24,107363,107364],{},"初学时可以先打印：",[140,107366,107368],{"className":32084,"code":107367,"language":32086,"meta":145,"style":145},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[48,107369,107370,107380,107390,107402],{"__ignoreMap":145},[149,107371,107372,107374,107376,107378],{"class":151,"line":152},[149,107373,32121],{"class":309},[149,107375,319],{"class":155},[149,107377,103119],{"class":169},[149,107379,103122],{"class":155},[149,107381,107382,107384,107386,107388],{"class":151,"line":193},[149,107383,32121],{"class":309},[149,107385,319],{"class":155},[149,107387,103131],{"class":169},[149,107389,103134],{"class":155},[149,107391,107392,107394,107396,107399],{"class":151,"line":235},[149,107393,32121],{"class":309},[149,107395,319],{"class":155},[149,107397,107398],{"class":169},"\"qpos:\"",[149,107400,107401],{"class":155},", data.qpos)\n",[149,107403,107404,107406,107408,107411],{"class":151,"line":340},[149,107405,32121],{"class":309},[149,107407,319],{"class":155},[149,107409,107410],{"class":169},"\"qvel:\"",[149,107412,107413],{"class":155},", data.qvel)\n",[24,107415,107416],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[19,107418,107419],{"id":107419},"仿真结果每次都一样",[24,107421,107422,107423,107425],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[48,107424,105709],{},"、目标点或控制输入。",[14,107427,104287],{"id":104286},[24,107429,107430,107431,26327],{},"Python 控制 MuJoCo 的核心就是读写 ",[48,107432,35107],{},[125,107434,107435,107443,107448,107453],{},[45,107436,107437,107438,102698,107440,107442],{},"用 ",[48,107439,102750],{},[48,107441,102753],{}," 读取状态。",[45,107444,107437,107445,107447],{},[48,107446,102756],{}," 写入控制。",[45,107449,107437,107450,107452],{},[48,107451,102895],{}," 推进时间。",[45,107454,107455,107456,107458],{},"手动改状态后用 ",[48,107457,105929],{}," 刷新派生量。",[24,107460,107461],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1783,107463,107464],{},"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":145,"searchDepth":193,"depth":193,"links":107466},[107467,107468,107469,107476,107480,107481,107482,107492],{"id":102326,"depth":193,"text":102327},{"id":102449,"depth":193,"text":102450},{"id":102724,"depth":193,"text":102725,"children":107470},[107471,107473,107475],{"id":106234,"depth":235,"text":107472},"qpos、qvel、ctrl 是什么",{"id":106312,"depth":235,"text":107474},"mj_step 和 mj_forward 的区别",{"id":106401,"depth":235,"text":106402},{"id":102932,"depth":193,"text":102933,"children":107477},[107478,107479],{"id":103252,"depth":235,"text":103252},{"id":103388,"depth":235,"text":103388},{"id":103995,"depth":193,"text":103996},{"id":104027,"depth":193,"text":104028},{"id":104132,"depth":193,"text":104133,"children":107483},[107484,107486,107487,107489,107491],{"id":107263,"depth":235,"text":107485},"修改 data.qpos 后位置没有更新",{"id":107280,"depth":235,"text":107280},{"id":107339,"depth":235,"text":107488},"误以为 qpos 一定等于关节数",{"id":107357,"depth":235,"text":107490},"不知道某个元素在 qpos 的第几位",{"id":107419,"depth":235,"text":107419},{"id":104286,"depth":193,"text":104287},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105997,"description":145},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107499,"title":107500,"body":107501,"description":145,"extension":1798,"meta":109191,"navigation":1800,"path":109192,"seo":109193,"stem":109194,"__hash__":109195},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107502,"toc":109167},[107503,107506,107508,107511,107513,107538,107541,107560,107563,107565,107567,107591,107593,107607,107609,107650,107652,107676,107678,107681,107715,107717,107730,107733,107801,107810,107814,107817,107851,107857,107860,107864,107903,107906,107926,107930,107973,107975,108004,108007,108013,108016,108018,108412,108414,108426,108428,108439,108441,108444,108473,108481,108484,108519,108522,108524,108532,108535,108537,108548,108558,108578,108581,108617,108629,108677,108696,108738,108751,108779,108784,108805,108815,108833,108836,108870,108873,108893,108896,108915,108921,108923,108926,108932,108938,108948,108951,108957,108966,108968,109014,109016,109022,109028,109031,109034,109054,109057,109063,109069,109071,109094,109097,109100,109109,109112,109150,109152,109155,109161,109164],[10,107504,107500],{"id":107505},"_4关节actuator-与力控制",[14,107507,102327],{"id":102326},[24,107509,107510],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[24,107512,106010],{},[125,107514,107515,107521,107526,107530,107535],{},[45,107516,107517,107520],{},[48,107518,107519],{},"hinge"," 关节",[45,107522,107523],{},[48,107524,107525],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[45,107527,107528],{},[48,107529,102756],{},[45,107531,107532],{},[48,107533,107534],{},"ctrlrange",[45,107536,107537],{},"读取关节角和角速度",[24,107539,107540],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[140,107542,107544],{"className":32084,"code":107543,"language":32086,"meta":145,"style":145},"data.ctrl[0] = ...\n",[48,107545,107546],{"__ignoreMap":145},[149,107547,107548,107551,107553,107555,107557],{"class":151,"line":152},[149,107549,107550],{"class":155},"data.ctrl[",[149,107552,2056],{"class":309},[149,107554,6161],{"class":155},[149,107556,166],{"class":325},[149,107558,107559],{"class":309}," ...\n",[24,107561,107562],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107564,102450],{"id":102449},[24,107566,102453],{},[140,107568,107569],{"className":25530,"code":106067,"language":25532,"meta":145,"style":145},[48,107570,107571],{"__ignoreMap":145},[149,107572,107573,107575,107577,107579,107581,107583,107585,107587,107589],{"class":151,"line":152},[149,107574,26285],{"class":162},[149,107576,28024],{"class":169},[149,107578,25542],{"class":169},[149,107580,28109],{"class":309},[149,107582,106082],{"class":169},[149,107584,102478],{"class":169},[149,107586,104181],{"class":169},[149,107588,102494],{"class":169},[149,107590,106091],{"class":169},[24,107592,104499],{},[140,107594,107595],{"className":25530,"code":102599,"language":25532,"meta":145,"style":145},[48,107596,107597],{"__ignoreMap":145},[149,107598,107599,107601,107603,107605],{"class":151,"line":152},[149,107600,25539],{"class":162},[149,107602,25542],{"class":169},[149,107604,102610],{"class":169},[149,107606,102613],{"class":169},[24,107608,104516],{},[140,107610,107612],{"className":25530,"code":107611,"language":25532,"meta":145,"style":145},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[48,107613,107614,107631,107640],{"__ignoreMap":145},[149,107615,107616,107618,107620,107622,107625,107627,107629],{"class":151,"line":152},[149,107617,32036],{"class":162},[149,107619,30882],{"class":169},[149,107621,26824],{"class":309},[149,107623,107624],{"class":169}," mujoco-control",[149,107626,102655],{"class":169},[149,107628,102658],{"class":309},[149,107630,102661],{"class":309},[149,107632,107633,107635,107637],{"class":151,"line":193},[149,107634,32036],{"class":162},[149,107636,102668],{"class":169},[149,107638,107639],{"class":169}," mujoco-control\n",[149,107641,107642,107644,107646,107648],{"class":151,"line":235},[149,107643,25539],{"class":162},[149,107645,25542],{"class":169},[149,107647,102610],{"class":169},[149,107649,102613],{"class":169},[24,107651,102684],{},[125,107653,107654,107660,107667,107673],{},[45,107655,107656,107659],{},[48,107657,107658],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[45,107661,107662,107664,107665,30091],{},[48,107663,102756],{}," 长度等于 ",[48,107666,103838],{},[45,107668,83903,107669,107672],{},[48,107670,107671],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[45,107674,107675],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107677,102725],{"id":102724},[24,107679,107680],{},"关节决定 body 如何运动:",[140,107682,107684],{"className":54765,"code":107683,"language":54767,"meta":145,"style":145},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[48,107685,107686],{"__ignoreMap":145},[149,107687,107688,107690,107692,107694,107696,107699,107701,107703,107705,107708,107710,107713],{"class":151,"line":152},[149,107689,156],{"class":155},[149,107691,104636],{"class":159},[149,107693,515],{"class":162},[149,107695,166],{"class":155},[149,107697,107698],{"class":169},"\"hinge\"",[149,107700,507],{"class":162},[149,107702,166],{"class":155},[149,107704,107698],{"class":169},[149,107706,107707],{"class":162}," axis",[149,107709,166],{"class":155},[149,107711,107712],{"class":169},"\"0 1 0\"",[149,107714,102824],{"class":155},[24,107716,104732],{},[125,107718,107719,107724,107727],{},[45,107720,107721,107722],{},"名字是 ",[48,107723,107519],{},[45,107725,107726],{},"类型是旋转关节",[45,107728,107729],{},"绕 y 轴旋转",[24,107731,107732],{},"actuator 决定如何施加控制:",[140,107734,107736],{"className":54765,"code":107735,"language":54767,"meta":145,"style":145},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[48,107737,107738,107747,107793],{"__ignoreMap":145},[149,107739,107740,107742,107745],{"class":151,"line":152},[149,107741,156],{"class":155},[149,107743,107744],{"class":159},"actuator",[149,107746,190],{"class":155},[149,107748,107749,107751,107754,107756,107758,107761,107764,107766,107768,107771,107773,107775,107778,107780,107783,107786,107788,107791],{"class":151,"line":193},[149,107750,587],{"class":155},[149,107752,107753],{"class":159},"motor",[149,107755,515],{"class":162},[149,107757,166],{"class":155},[149,107759,107760],{"class":169},"\"hinge_motor\"",[149,107762,107763],{"class":162}," joint",[149,107765,166],{"class":155},[149,107767,107698],{"class":169},[149,107769,107770],{"class":162}," gear",[149,107772,166],{"class":155},[149,107774,5396],{"class":169},[149,107776,107777],{"class":162}," ctrlrange",[149,107779,166],{"class":155},[149,107781,107782],{"class":169},"\"-2 2\"",[149,107784,107785],{"class":162}," ctrllimited",[149,107787,166],{"class":155},[149,107789,107790],{"class":169},"\"true\"",[149,107792,102824],{"class":155},[149,107794,107795,107797,107799],{"class":151,"line":235},[149,107796,665],{"class":155},[149,107798,107744],{"class":159},[149,107800,190],{"class":155},[24,107802,107803,107806,107807,30091],{},[48,107804,107805],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[48,107808,107809],{},"[-2, 2]",[19,107811,107813],{"id":107812},"joint-和-actuator-的关系","joint 和 actuator 的关系",[24,107815,107816],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[2003,107818,107819,107829],{},[2006,107820,107821],{},[2009,107822,107823,107825,107827],{},[2012,107824,27462],{"align":1566},[2012,107826,104376],{"align":1566},[2012,107828,102414],{"align":1566},[2049,107830,107831,107841],{},[2009,107832,107833,107835,107838],{},[2054,107834,104636],{"align":1566},[2054,107836,107837],{"align":1566},"定义能怎么动",[2054,107839,107840],{"align":1566},"门轴允许门旋转",[2009,107842,107843,107845,107848],{},[2054,107844,107744],{"align":1566},[2054,107846,107847],{"align":1566},"定义怎么施力或控制",[2054,107849,107850],{"align":1566},"人推门、马达带动门",[24,107852,107853,107854,107856],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[48,107855,102756],{}," 主动控制它。",[24,107858,107859],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[19,107861,107863],{"id":107862},"hinge-joint","hinge joint",[140,107865,107867],{"className":54765,"code":107866,"language":54767,"meta":145,"style":145},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[48,107868,107869],{"__ignoreMap":145},[149,107870,107871,107873,107875,107877,107879,107881,107883,107885,107887,107889,107891,107893,107896,107898,107901],{"class":151,"line":152},[149,107872,156],{"class":155},[149,107874,104636],{"class":159},[149,107876,515],{"class":162},[149,107878,166],{"class":155},[149,107880,107698],{"class":169},[149,107882,507],{"class":162},[149,107884,166],{"class":155},[149,107886,107698],{"class":169},[149,107888,107707],{"class":162},[149,107890,166],{"class":155},[149,107892,107712],{"class":169},[149,107894,107895],{"class":162}," damping",[149,107897,166],{"class":155},[149,107899,107900],{"class":169},"\"0.1\"",[149,107902,102824],{"class":155},[24,107904,107905],{},"含义：",[125,107907,107908,107914,107920],{},[45,107909,107910,107913],{},[48,107911,107912],{},"type=\"hinge\"","：只能绕一个轴旋转。",[45,107915,107916,107919],{},[48,107917,107918],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[45,107921,107922,107925],{},[48,107923,107924],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[19,107927,107929],{"id":107928},"motor-actuator","motor actuator",[140,107931,107933],{"className":54765,"code":107932,"language":54767,"meta":145,"style":145},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[48,107934,107935],{"__ignoreMap":145},[149,107936,107937,107939,107941,107943,107945,107947,107949,107951,107953,107955,107957,107959,107961,107963,107965,107967,107969,107971],{"class":151,"line":152},[149,107938,156],{"class":155},[149,107940,107753],{"class":159},[149,107942,515],{"class":162},[149,107944,166],{"class":155},[149,107946,107760],{"class":169},[149,107948,107763],{"class":162},[149,107950,166],{"class":155},[149,107952,107698],{"class":169},[149,107954,107770],{"class":162},[149,107956,166],{"class":155},[149,107958,5396],{"class":169},[149,107960,107777],{"class":162},[149,107962,166],{"class":155},[149,107964,107782],{"class":169},[149,107966,107785],{"class":162},[149,107968,166],{"class":155},[149,107970,107790],{"class":169},[149,107972,102824],{"class":155},[24,107974,107905],{},[125,107976,107977,107986,107992,107998],{},[45,107978,107979,107982,107983,107985],{},[48,107980,107981],{},"joint=\"hinge\"","：这个电机作用在名为 ",[48,107984,107519],{}," 的关节上。",[45,107987,107988,107991],{},[48,107989,107990],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[45,107993,107994,107997],{},[48,107995,107996],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[45,107999,108000,108003],{},[48,108001,108002],{},"ctrllimited=\"true\"","：启用控制范围限制。",[24,108005,108006],{},"简单理解：",[140,108008,108011],{"className":108009,"code":108010,"language":1655,"meta":145},[1653],"实际施加效果 ≈ data.ctrl[0] * gear\n",[48,108012,108010],{"__ignoreMap":145},[24,108014,108015],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108017,102933],{"id":102932},[140,108019,108021],{"className":32084,"code":108020,"language":32086,"meta":145,"style":145},"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",[48,108022,108023,108030,108034,108040,108050,108054,108058,108066,108071,108076,108080,108084,108089,108094,108098,108103,108108,108113,108118,108122,108126,108130,108135,108140,108145,108149,108153,108157,108161,108173,108185,108193,108197,108207,108217,108227,108231,108244,108257,108261,108278,108292,108327,108331,108335,108346,108361,108376,108388,108392,108396,108408],{"__ignoreMap":145},[149,108024,108025,108027],{"class":151,"line":152},[149,108026,32098],{"class":325},[149,108028,108029],{"class":155}," math\n",[149,108031,108032],{"class":151,"line":193},[149,108033,4119],{"emptyLinePlaceholder":1800},[149,108035,108036,108038],{"class":151,"line":235},[149,108037,32098],{"class":325},[149,108039,102981],{"class":155},[149,108041,108042,108044,108046,108048],{"class":151,"line":340},[149,108043,32098],{"class":325},[149,108045,33086],{"class":155},[149,108047,33089],{"class":325},[149,108049,33092],{"class":155},[149,108051,108052],{"class":151,"line":346},[149,108053,4119],{"emptyLinePlaceholder":1800},[149,108055,108056],{"class":151,"line":352},[149,108057,4119],{"emptyLinePlaceholder":1800},[149,108059,108060,108062,108064],{"class":151,"line":1021},[149,108061,102994],{"class":309},[149,108063,15277],{"class":325},[149,108065,102999],{"class":169},[149,108067,108068],{"class":151,"line":1035},[149,108069,108070],{"class":169},"\u003Cmujoco model=\"one_link_motor\">\n",[149,108072,108073],{"class":151,"line":1054},[149,108074,108075],{"class":169},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[149,108077,108078],{"class":151,"line":1072},[149,108079,4119],{"emptyLinePlaceholder":1800},[149,108081,108082],{"class":151,"line":1090},[149,108083,103018],{"class":169},[149,108085,108086],{"class":151,"line":1633},[149,108087,108088],{"class":169},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[149,108090,108091],{"class":151,"line":1644},[149,108092,108093],{"class":169},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[149,108095,108096],{"class":151,"line":3348},[149,108097,4119],{"emptyLinePlaceholder":1800},[149,108099,108100],{"class":151,"line":3362},[149,108101,108102],{"class":169},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[149,108104,108105],{"class":151,"line":3367},[149,108106,108107],{"class":169},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[149,108109,108110],{"class":151,"line":3373},[149,108111,108112],{"class":169},"        \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",[149,108114,108115],{"class":151,"line":3394},[149,108116,108117],{"class":169},"      \u003C\u002Fbody>\n",[149,108119,108120],{"class":151,"line":3399},[149,108121,103047],{"class":169},[149,108123,108124],{"class":151,"line":3413},[149,108125,103052],{"class":169},[149,108127,108128],{"class":151,"line":3418},[149,108129,4119],{"emptyLinePlaceholder":1800},[149,108131,108132],{"class":151,"line":3447},[149,108133,108134],{"class":169},"  \u003Cactuator>\n",[149,108136,108137],{"class":151,"line":3452},[149,108138,108139],{"class":169},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[149,108141,108142],{"class":151,"line":3469},[149,108143,108144],{"class":169},"  \u003C\u002Factuator>\n",[149,108146,108147],{"class":151,"line":3474},[149,108148,103057],{"class":169},[149,108150,108151],{"class":151,"line":3479},[149,108152,97378],{"class":169},[149,108154,108155],{"class":151,"line":3484},[149,108156,4119],{"emptyLinePlaceholder":1800},[149,108158,108159],{"class":151,"line":3498},[149,108160,4119],{"emptyLinePlaceholder":1800},[149,108162,108163,108165,108167,108169,108171],{"class":151,"line":3503},[149,108164,33653],{"class":325},[149,108166,3692],{"class":162},[149,108168,103078],{"class":155},[149,108170,97366],{"class":309},[149,108172,5457],{"class":155},[149,108174,108175,108177,108179,108181,108183],{"class":151,"line":4296},[149,108176,103087],{"class":155},[149,108178,166],{"class":325},[149,108180,103092],{"class":155},[149,108182,102994],{"class":309},[149,108184,1878],{"class":155},[149,108186,108187,108189,108191],{"class":151,"line":4310},[149,108188,103101],{"class":155},[149,108190,166],{"class":325},[149,108192,103106],{"class":155},[149,108194,108195],{"class":151,"line":4318},[149,108196,4119],{"emptyLinePlaceholder":1800},[149,108198,108199,108201,108203,108205],{"class":151,"line":4323},[149,108200,33005],{"class":309},[149,108202,319],{"class":155},[149,108204,103119],{"class":169},[149,108206,103122],{"class":155},[149,108208,108209,108211,108213,108215],{"class":151,"line":4329},[149,108210,33005],{"class":309},[149,108212,319],{"class":155},[149,108214,103131],{"class":169},[149,108216,103134],{"class":155},[149,108218,108219,108221,108223,108225],{"class":151,"line":4335},[149,108220,33005],{"class":309},[149,108222,319],{"class":155},[149,108224,103143],{"class":169},[149,108226,103146],{"class":155},[149,108228,108229],{"class":151,"line":4340},[149,108230,4119],{"emptyLinePlaceholder":1800},[149,108232,108233,108235,108238,108240,108242],{"class":151,"line":9663},[149,108234,4819],{"class":325},[149,108236,108237],{"class":155}," model.nu ",[149,108239,22658],{"class":325},[149,108241,26827],{"class":309},[149,108243,5457],{"class":155},[149,108245,108246,108248,108250,108252,108255],{"class":151,"line":9687},[149,108247,105111],{"class":325},[149,108249,105114],{"class":309},[149,108251,319],{"class":155},[149,108253,108254],{"class":169},"\"expected exactly one actuator\"",[149,108256,1878],{"class":155},[149,108258,108259],{"class":151,"line":9692},[149,108260,4119],{"emptyLinePlaceholder":1800},[149,108262,108263,108265,108267,108269,108271,108273,108276],{"class":151,"line":9698},[149,108264,4919],{"class":325},[149,108266,33322],{"class":155},[149,108268,27752],{"class":325},[149,108270,34149],{"class":309},[149,108272,319],{"class":155},[149,108274,108275],{"class":309},"2000",[149,108277,32492],{"class":155},[149,108279,108280,108283,108285,108287,108289],{"class":151,"line":9725},[149,108281,108282],{"class":155},"        t ",[149,108284,166],{"class":325},[149,108286,33322],{"class":155},[149,108288,2318],{"class":325},[149,108290,108291],{"class":155}," model.opt.timestep\n",[149,108293,108294,108297,108299,108301,108303,108306,108308,108311,108313,108315,108318,108320,108322,108324],{"class":151,"line":9730},[149,108295,108296],{"class":155},"        data.ctrl[",[149,108298,2056],{"class":309},[149,108300,6161],{"class":155},[149,108302,166],{"class":325},[149,108304,108305],{"class":309}," 1.5",[149,108307,8234],{"class":325},[149,108309,108310],{"class":155}," math.sin(",[149,108312,106939],{"class":309},[149,108314,8234],{"class":325},[149,108316,108317],{"class":155}," math.pi ",[149,108319,2318],{"class":325},[149,108321,63556],{"class":309},[149,108323,8234],{"class":325},[149,108325,108326],{"class":155}," t)\n",[149,108328,108329],{"class":151,"line":9736},[149,108330,103196],{"class":155},[149,108332,108333],{"class":151,"line":9748},[149,108334,4119],{"emptyLinePlaceholder":1800},[149,108336,108337,108339,108341,108344],{"class":151,"line":9760},[149,108338,33005],{"class":309},[149,108340,319],{"class":155},[149,108342,108343],{"class":169},"\"time:\"",[149,108345,103158],{"class":155},[149,108347,108348,108350,108352,108355,108357,108359],{"class":151,"line":9772},[149,108349,33005],{"class":309},[149,108351,319],{"class":155},[149,108353,108354],{"class":169},"\"joint qpos:\"",[149,108356,106609],{"class":155},[149,108358,2157],{"class":309},[149,108360,32203],{"class":155},[149,108362,108363,108365,108367,108370,108372,108374],{"class":151,"line":11430},[149,108364,33005],{"class":309},[149,108366,319],{"class":155},[149,108368,108369],{"class":169},"\"joint qvel:\"",[149,108371,106625],{"class":155},[149,108373,2157],{"class":309},[149,108375,32203],{"class":155},[149,108377,108378,108380,108382,108385],{"class":151,"line":11455},[149,108379,33005],{"class":309},[149,108381,319],{"class":155},[149,108383,108384],{"class":169},"\"last ctrl:\"",[149,108386,108387],{"class":155},", data.ctrl.copy())\n",[149,108389,108390],{"class":151,"line":11478},[149,108391,4119],{"emptyLinePlaceholder":1800},[149,108393,108394],{"class":151,"line":11502},[149,108395,4119],{"emptyLinePlaceholder":1800},[149,108397,108398,108400,108402,108404,108406],{"class":151,"line":11507},[149,108399,3255],{"class":325},[149,108401,32926],{"class":309},[149,108403,103239],{"class":325},[149,108405,103242],{"class":169},[149,108407,5457],{"class":155},[149,108409,108410],{"class":151,"line":11512},[149,108411,103249],{"class":155},[24,108413,105249],{},[140,108415,108417],{"className":25530,"code":108416,"language":25532,"meta":145,"style":145},"touch ch4_joint_motor.py\n",[48,108418,108419],{"__ignoreMap":145},[149,108420,108421,108423],{"class":151,"line":152},[149,108422,102963],{"class":162},[149,108424,108425],{"class":169}," ch4_joint_motor.py\n",[24,108427,103981],{},[140,108429,108431],{"className":25530,"code":108430,"language":25532,"meta":145,"style":145},"python ch4_joint_motor.py\n",[48,108432,108433],{"__ignoreMap":145},[149,108434,108435,108437],{"class":151,"line":152},[149,108436,32086],{"class":162},[149,108438,108425],{"class":169},[19,108440,103252],{"id":103252},[24,108442,108443],{},"检查 actuator 数量：",[140,108445,108447],{"className":32084,"code":108446,"language":32086,"meta":145,"style":145},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[48,108448,108449,108461],{"__ignoreMap":145},[149,108450,108451,108453,108455,108457,108459],{"class":151,"line":152},[149,108452,3255],{"class":325},[149,108454,108237],{"class":155},[149,108456,22658],{"class":325},[149,108458,26827],{"class":309},[149,108460,5457],{"class":155},[149,108462,108463,108465,108467,108469,108471],{"class":151,"line":193},[149,108464,105574],{"class":325},[149,108466,105114],{"class":309},[149,108468,319],{"class":155},[149,108470,108254],{"class":169},[149,108472,1878],{"class":155},[24,108474,108475,108477,108478,108480],{},[48,108476,103838],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[48,108479,102756],{}," 长度应该是 1。",[24,108482,108483],{},"产生正弦控制信号：",[140,108485,108487],{"className":32084,"code":108486,"language":32086,"meta":145,"style":145},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[48,108488,108489],{"__ignoreMap":145},[149,108490,108491,108493,108495,108497,108499,108501,108503,108505,108507,108509,108511,108513,108515,108517],{"class":151,"line":152},[149,108492,107550],{"class":155},[149,108494,2056],{"class":309},[149,108496,6161],{"class":155},[149,108498,166],{"class":325},[149,108500,108305],{"class":309},[149,108502,8234],{"class":325},[149,108504,108310],{"class":155},[149,108506,106939],{"class":309},[149,108508,8234],{"class":325},[149,108510,108317],{"class":155},[149,108512,2318],{"class":325},[149,108514,63556],{"class":309},[149,108516,8234],{"class":325},[149,108518,108326],{"class":155},[24,108520,108521],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[24,108523,103353],{},[140,108525,108526],{"className":32084,"code":106184,"language":32086,"meta":145,"style":145},[48,108527,108528],{"__ignoreMap":145},[149,108529,108530],{"class":151,"line":152},[149,108531,106184],{"class":155},[24,108533,108534],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[19,108536,103388],{"id":103388},[140,108538,108540],{"className":32084,"code":108539,"language":32086,"meta":145,"style":145},"import math\n",[48,108541,108542],{"__ignoreMap":145},[149,108543,108544,108546],{"class":151,"line":152},[149,108545,32098],{"class":325},[149,108547,108029],{"class":155},[24,108549,108550,108551,102698,108554,108557],{},"导入 Python 标准库里的数学模块。后面要用 ",[48,108552,108553],{},"math.sin",[48,108555,108556],{},"math.pi"," 生成周期变化的控制信号。",[140,108559,108560],{"className":32084,"code":105365,"language":32086,"meta":145,"style":145},[48,108561,108562,108568],{"__ignoreMap":145},[149,108563,108564,108566],{"class":151,"line":152},[149,108565,32098],{"class":325},[149,108567,102981],{"class":155},[149,108569,108570,108572,108574,108576],{"class":151,"line":193},[149,108571,32098],{"class":325},[149,108573,33086],{"class":155},[149,108575,33089],{"class":325},[149,108577,33092],{"class":155},[24,108579,108580],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[140,108582,108583],{"className":54765,"code":107866,"language":54767,"meta":145,"style":145},[48,108584,108585],{"__ignoreMap":145},[149,108586,108587,108589,108591,108593,108595,108597,108599,108601,108603,108605,108607,108609,108611,108613,108615],{"class":151,"line":152},[149,108588,156],{"class":155},[149,108590,104636],{"class":159},[149,108592,515],{"class":162},[149,108594,166],{"class":155},[149,108596,107698],{"class":169},[149,108598,507],{"class":162},[149,108600,166],{"class":155},[149,108602,107698],{"class":169},[149,108604,107707],{"class":162},[149,108606,166],{"class":155},[149,108608,107712],{"class":169},[149,108610,107895],{"class":162},[149,108612,166],{"class":155},[149,108614,107900],{"class":169},[149,108616,102824],{"class":155},[24,108618,108619,108620,108622,108623,108625,108626,108628],{},"这行定义关节。",[48,108621,107519],{}," 表示旋转关节。",[48,108624,107918],{}," 表示绕 y 轴旋转。",[48,108627,107924],{}," 表示有一点阻尼，运动不会完全无损耗。",[140,108630,108632],{"className":54765,"code":108631,"language":54767,"meta":145,"style":145},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[48,108633,108634],{"__ignoreMap":145},[149,108635,108636,108638,108640,108642,108644,108647,108649,108651,108654,108657,108659,108662,108664,108666,108668,108670,108672,108675],{"class":151,"line":152},[149,108637,156],{"class":155},[149,108639,102800],{"class":159},[149,108641,515],{"class":162},[149,108643,166],{"class":155},[149,108645,108646],{"class":169},"\"link_geom\"",[149,108648,507],{"class":162},[149,108650,166],{"class":155},[149,108652,108653],{"class":169},"\"capsule\"",[149,108655,108656],{"class":162}," fromto",[149,108658,166],{"class":155},[149,108660,108661],{"class":169},"\"0 0 0 0 0 0.5\"",[149,108663,102816],{"class":162},[149,108665,166],{"class":155},[149,108667,105457],{"class":169},[149,108669,103681],{"class":162},[149,108671,166],{"class":155},[149,108673,108674],{"class":169},"\"0.5\"",[149,108676,102824],{"class":155},[24,108678,108679,108680,108682,108683,108685,108686,108689,108690,30091,108693,108695],{},"这行定义摆杆的形状。",[48,108681,104844],{}," 是胶囊体，适合表示杆子。",[48,108684,104855],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[48,108687,108688],{},"(0,0,0)"," 延伸到 ",[48,108691,108692],{},"(0,0,0.5)",[48,108694,104849],{}," 是半径。",[140,108697,108698],{"className":54765,"code":107932,"language":54767,"meta":145,"style":145},[48,108699,108700],{"__ignoreMap":145},[149,108701,108702,108704,108706,108708,108710,108712,108714,108716,108718,108720,108722,108724,108726,108728,108730,108732,108734,108736],{"class":151,"line":152},[149,108703,156],{"class":155},[149,108705,107753],{"class":159},[149,108707,515],{"class":162},[149,108709,166],{"class":155},[149,108711,107760],{"class":169},[149,108713,107763],{"class":162},[149,108715,166],{"class":155},[149,108717,107698],{"class":169},[149,108719,107770],{"class":162},[149,108721,166],{"class":155},[149,108723,5396],{"class":169},[149,108725,107777],{"class":162},[149,108727,166],{"class":155},[149,108729,107782],{"class":169},[149,108731,107785],{"class":162},[149,108733,166],{"class":155},[149,108735,107790],{"class":169},[149,108737,102824],{"class":155},[24,108739,108740,108741,108743,108744,108747,108748,108750],{},"这行定义电机。它作用在 ",[48,108742,107519],{}," 关节上。",[48,108745,108746],{},"gear"," 可以理解成放大倍数。",[48,108749,107534],{}," 限制控制输入范围。",[140,108752,108753],{"className":32084,"code":108446,"language":32086,"meta":145,"style":145},[48,108754,108755,108767],{"__ignoreMap":145},[149,108756,108757,108759,108761,108763,108765],{"class":151,"line":152},[149,108758,3255],{"class":325},[149,108760,108237],{"class":155},[149,108762,22658],{"class":325},[149,108764,26827],{"class":309},[149,108766,5457],{"class":155},[149,108768,108769,108771,108773,108775,108777],{"class":151,"line":193},[149,108770,105574],{"class":325},[149,108772,105114],{"class":309},[149,108774,319],{"class":155},[149,108776,108254],{"class":169},[149,108778,1878],{"class":155},[24,108780,108781,108783],{},[48,108782,103838],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[140,108785,108787],{"className":32084,"code":108786,"language":32086,"meta":145,"style":145},"for step in range(2000):\n",[48,108788,108789],{"__ignoreMap":145},[149,108790,108791,108793,108795,108797,108799,108801,108803],{"class":151,"line":152},[149,108792,4743],{"class":325},[149,108794,33322],{"class":155},[149,108796,27752],{"class":325},[149,108798,34149],{"class":309},[149,108800,319],{"class":155},[149,108802,108275],{"class":309},[149,108804,32492],{"class":155},[24,108806,108807,108808,108810,108811,108814],{},"循环 2000 步。这里没有用 ",[48,108809,2851],{},"，而是用 ",[48,108812,108813],{},"step","，因为后面要用当前步数计算时间。",[140,108816,108818],{"className":32084,"code":108817,"language":32086,"meta":145,"style":145},"t = step * model.opt.timestep\n",[48,108819,108820],{"__ignoreMap":145},[149,108821,108822,108825,108827,108829,108831],{"class":151,"line":152},[149,108823,108824],{"class":155},"t ",[149,108826,166],{"class":325},[149,108828,33322],{"class":155},[149,108830,2318],{"class":325},[149,108832,108291],{"class":155},[24,108834,108835],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[140,108837,108838],{"className":32084,"code":108486,"language":32086,"meta":145,"style":145},[48,108839,108840],{"__ignoreMap":145},[149,108841,108842,108844,108846,108848,108850,108852,108854,108856,108858,108860,108862,108864,108866,108868],{"class":151,"line":152},[149,108843,107550],{"class":155},[149,108845,2056],{"class":309},[149,108847,6161],{"class":155},[149,108849,166],{"class":325},[149,108851,108305],{"class":309},[149,108853,8234],{"class":325},[149,108855,108310],{"class":155},[149,108857,106939],{"class":309},[149,108859,8234],{"class":325},[149,108861,108317],{"class":155},[149,108863,2318],{"class":325},[149,108865,63556],{"class":309},[149,108867,8234],{"class":325},[149,108869,108326],{"class":155},[24,108871,108872],{},"这行给电机输入一个正弦波。拆开看：",[125,108874,108875,108881,108887],{},[45,108876,108877,108880],{},[48,108878,108879],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[45,108882,108883,108886],{},[48,108884,108885],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[45,108888,108889,108892],{},[48,108890,108891],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[24,108894,108895],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[140,108897,108899],{"className":32084,"code":108898,"language":32086,"meta":145,"style":145},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[48,108900,108901],{"__ignoreMap":145},[149,108902,108903,108905,108907,108909,108911,108913],{"class":151,"line":152},[149,108904,32121],{"class":309},[149,108906,319],{"class":155},[149,108908,108354],{"class":169},[149,108910,106609],{"class":155},[149,108912,2157],{"class":309},[149,108914,32203],{"class":155},[24,108916,108917,108918,108920],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[48,108919,102750],{}," 只有一个数。",[14,108922,103996],{"id":103995},[24,108924,108925],{},"输出类似:",[140,108927,108930],{"className":108928,"code":108929,"language":1655,"meta":145},[1653],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[48,108931,108929],{"__ignoreMap":145},[24,108933,108934,108935,108937],{},"这里 ",[48,108936,107805],{}," 是电机输入。",[24,108939,108940,108943,108944,108947],{},[48,108941,108942],{},"joint qpos"," 是关节角度，单位通常是弧度。",[48,108945,108946],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[24,108949,108950],{},"角度单位提示：",[140,108952,108955],{"className":108953,"code":108954,"language":1655,"meta":145},[1653],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[48,108956,108954],{"__ignoreMap":145},[24,108958,108959,108960,108962,108963,108965],{},"如果你看到 ",[48,108961,105709],{}," 是 ",[48,108964,37035],{},"，大约就是 28.6 度。",[14,108967,104028],{"id":104027},[125,108969,108970,108977,108980,108987,108990,108998,109006],{},[45,108971,104091,108972,104094,108974,30091],{},[48,108973,107990],{},[48,108975,108976],{},"gear=\"5\"",[45,108978,108979],{},"重新运行，观察关节运动是否更剧烈。",[45,108981,104091,108982,104094,108984,30091],{},[48,108983,107534],{},[48,108985,108986],{},"-0.2 0.2",[45,108988,108989],{},"重新运行，观察控制能力是否变弱。",[45,108991,108992,108993,108995,108996,30091],{},"去掉 actuator，确认 ",[48,108994,103838],{}," 变成 ",[48,108997,2056],{},[45,108999,104091,109000,104094,109002,109005],{},[48,109001,107924],{},[48,109003,109004],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[45,109007,104091,109008,104094,109010,109013],{},[48,109009,107918],{},[48,109011,109012],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109015,104133],{"id":104132},[19,109017,109019],{"id":109018},"indexerror-index-0-is-out-of-bounds",[48,109020,109021],{},"IndexError: index 0 is out of bounds",[24,109023,109024,109025,109027],{},"原因是 ",[48,109026,107671],{},"，没有 actuator。",[19,109029,109030],{"id":109030},"关节几乎不动",[24,109032,109033],{},"可能原因:",[125,109035,109036,109041,109045,109051],{},[45,109037,109038,109040],{},[48,109039,108746],{}," 太小",[45,109042,109043,109040],{},[48,109044,107534],{},[45,109046,109047,109050],{},[48,109048,109049],{},"damping"," 太大",[45,109052,109053],{},"重力方向导致运动不明显",[19,109055,109056],{"id":109056},"模型编译失败",[24,109058,109059,109060,109062],{},"检查 actuator 引用的 ",[48,109061,107981],{}," 是否存在，joint 名称是否拼写一致。",[19,109064,109066,109068],{"id":109065},"datactrl0-写了但没有效果",[48,109067,107805],{}," 写了但没有效果",[24,109070,104255],{},[125,109072,109073,109078,109081,109086,109091],{},[45,109074,109075,109077],{},[48,109076,103838],{}," 是否大于 0。",[45,109079,109080],{},"motor 是否引用了正确 joint。",[45,109082,109083,109085],{},[48,109084,108746],{}," 是否太小。",[45,109087,109088,109090],{},[48,109089,107534],{}," 是否把输入限制得太小。",[45,109092,109093],{},"body 是否真的有可动 joint。",[19,109095,109096],{"id":109096},"控制输入超过范围会怎样",[24,109098,109099],{},"如果设置了：",[140,109101,109103],{"className":54765,"code":109102,"language":54767,"meta":145,"style":145},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[48,109104,109105],{"__ignoreMap":145},[149,109106,109107],{"class":151,"line":152},[149,109108,109102],{"class":155},[24,109110,109111],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[140,109113,109115],{"className":32084,"code":109114,"language":32086,"meta":145,"style":145},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[48,109116,109117,109137],{"__ignoreMap":145},[149,109118,109119,109122,109124,109127,109129,109131,109133,109135],{"class":151,"line":152},[149,109120,109121],{"class":155},"action ",[149,109123,166],{"class":325},[149,109125,109126],{"class":155}," np.clip(action, ",[149,109128,2395],{"class":325},[149,109130,106939],{"class":309},[149,109132,329],{"class":155},[149,109134,106939],{"class":309},[149,109136,1878],{"class":155},[149,109138,109139,109141,109143,109145,109147],{"class":151,"line":193},[149,109140,107550],{"class":155},[149,109142,2056],{"class":309},[149,109144,6161],{"class":155},[149,109146,166],{"class":325},[149,109148,109149],{"class":155}," action\n",[14,109151,104287],{"id":104286},[24,109153,109154],{},"这一章建立了控制任务的基本形式：",[140,109156,109159],{"className":109157,"code":109158,"language":1655,"meta":145},[1653],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[48,109160,109158],{"__ignoreMap":145},[24,109162,109163],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1783,109165,109166],{},"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":145,"searchDepth":193,"depth":193,"links":109168},[109169,109170,109171,109176,109180,109181,109182,109190],{"id":102326,"depth":193,"text":102327},{"id":102449,"depth":193,"text":102450},{"id":102724,"depth":193,"text":102725,"children":109172},[109173,109174,109175],{"id":107812,"depth":235,"text":107813},{"id":107862,"depth":235,"text":107863},{"id":107928,"depth":235,"text":107929},{"id":102932,"depth":193,"text":102933,"children":109177},[109178,109179],{"id":103252,"depth":235,"text":103252},{"id":103388,"depth":235,"text":103388},{"id":103995,"depth":193,"text":103996},{"id":104027,"depth":193,"text":104028},{"id":104132,"depth":193,"text":104133,"children":109183},[109184,109185,109186,109187,109189],{"id":109018,"depth":235,"text":109021},{"id":109030,"depth":235,"text":109030},{"id":109056,"depth":235,"text":109056},{"id":109065,"depth":235,"text":109188},"data.ctrl[0] 写了但没有效果",{"id":109096,"depth":235,"text":109096},{"id":104286,"depth":193,"text":104287},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107500,"description":145},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109197,"title":109198,"body":109199,"description":145,"extension":1798,"meta":111108,"navigation":1800,"path":111109,"seo":111110,"stem":111111,"__hash__":111112},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109200,"toc":111084},[109201,109204,109206,109209,109217,109220,109237,109240,109265,109268,109314,109316,109318,109373,109375,109394,109396,109439,109442,109459,109462,109478,109488,109495,109497,109500,109503,109537,109540,109588,109592,109595,109609,109618,109622,109625,109650,109653,109657,109670,109673,109679,109682,109697,109699,109702,109962,109964,109976,109979,110291,110293,110305,110307,110310,110325,110330,110333,110355,110358,110361,110395,110398,110402,110413,110416,110433,110436,110450,110457,110477,110484,110498,110501,110513,110528,110548,110551,110573,110576,110580,110595,110606,110621,110624,110654,110670,110699,110707,110731,110734,110752,110762,110774,110781,110790,110796,110805,110808,110810,110819,110822,110837,110839,110842,110853,110856,110867,110870,110888,110890,110907,110910,110938,110940,110944,110947,110977,110983,110986,110990,110998,111001,111003,111024,111027,111030,111046,111049,111065,111067,111070,111081],[10,109202,109198],{"id":109203},"_5viewer-可视化与-renderer-离屏渲染",[14,109205,102327],{"id":102326},[24,109207,109208],{},"本章掌握两类可视化方式:",[125,109210,109211,109214],{},[45,109212,109213],{},"交互式 viewer: 适合人工观察仿真",[45,109215,109216],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[24,109218,109219],{},"使用官方接口:",[140,109221,109223],{"className":32084,"code":109222,"language":32086,"meta":145,"style":145},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[48,109224,109225,109232],{"__ignoreMap":145},[149,109226,109227,109229],{"class":151,"line":152},[149,109228,32098],{"class":325},[149,109230,109231],{"class":155}," mujoco.viewer\n",[149,109233,109234],{"class":151,"line":193},[149,109235,109236],{"class":155},"mujoco.viewer.launch_passive(model, data)\n",[24,109238,109239],{},"以及:",[140,109241,109243],{"className":32084,"code":109242,"language":32086,"meta":145,"style":145},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[48,109244,109245,109255],{"__ignoreMap":145},[149,109246,109247,109250,109252],{"class":151,"line":152},[149,109248,109249],{"class":155},"renderer ",[149,109251,166],{"class":325},[149,109253,109254],{"class":155}," mujoco.Renderer(model)\n",[149,109256,109257,109260,109262],{"class":151,"line":193},[149,109258,109259],{"class":155},"image ",[149,109261,166],{"class":325},[149,109263,109264],{"class":155}," renderer.render()\n",[24,109266,109267],{},"新手建议先理解二者区别：",[2003,109269,109270,109286],{},[2006,109271,109272],{},[2009,109273,109274,109277,109280,109283],{},[2012,109275,109276],{"align":1566},"工具",[2012,109278,109279],{"align":1566},"用途",[2012,109281,109282],{"align":1566},"是否打开窗口",[2012,109284,109285],{"align":1566},"常见场景",[2049,109287,109288,109301],{},[2009,109289,109290,109293,109296,109298],{},[2054,109291,109292],{"align":1566},"Viewer",[2054,109294,109295],{"align":1566},"人眼实时观察仿真",[2054,109297,106344],{"align":1566},[2054,109299,109300],{"align":1566},"调试模型、看控制效果",[2009,109302,109303,109306,109309,109311],{},[2054,109304,109305],{"align":1566},"Renderer",[2054,109307,109308],{"align":1566},"生成图像数组",[2054,109310,106357],{"align":1566},[2054,109312,109313],{"align":1566},"保存图片、训练视觉策略、服务器批量采集",[14,109315,102450],{"id":102449},[24,109317,102453],{},[140,109319,109321],{"className":25530,"code":109320,"language":25532,"meta":145,"style":145},"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",[48,109322,109323,109335,109345,109353,109361],{"__ignoreMap":145},[149,109324,109325,109327,109329,109331,109333],{"class":151,"line":152},[149,109326,26285],{"class":162},[149,109328,28024],{"class":169},[149,109330,25542],{"class":169},[149,109332,28109],{"class":309},[149,109334,26387],{"class":309},[149,109336,109337,109339,109341,109343],{"class":151,"line":193},[149,109338,102488],{"class":169},[149,109340,102491],{"class":169},[149,109342,102494],{"class":169},[149,109344,26387],{"class":309},[149,109346,109347,109349,109351],{"class":151,"line":235},[149,109348,102501],{"class":169},[149,109350,102504],{"class":169},[149,109352,26387],{"class":309},[149,109354,109355,109357,109359],{"class":151,"line":340},[149,109356,102511],{"class":169},[149,109358,102514],{"class":169},[149,109360,26387],{"class":309},[149,109362,109363,109365,109367,109369,109371],{"class":151,"line":346},[149,109364,102521],{"class":169},[149,109366,102524],{"class":169},[149,109368,102527],{"class":169},[149,109370,102530],{"class":169},[149,109372,104196],{"class":169},[24,109374,104499],{},[140,109376,109378],{"className":25530,"code":109377,"language":25532,"meta":145,"style":145},"pip install \"mujoco>=2.3\" numpy pillow\n",[48,109379,109380],{"__ignoreMap":145},[149,109381,109382,109384,109386,109388,109391],{"class":151,"line":152},[149,109383,25539],{"class":162},[149,109385,25542],{"class":169},[149,109387,102610],{"class":169},[149,109389,109390],{"class":169}," numpy",[149,109392,109393],{"class":169}," pillow\n",[24,109395,104516],{},[140,109397,109399],{"className":25530,"code":109398,"language":25532,"meta":145,"style":145},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[48,109400,109401,109418,109427],{"__ignoreMap":145},[149,109402,109403,109405,109407,109409,109412,109414,109416],{"class":151,"line":152},[149,109404,32036],{"class":162},[149,109406,30882],{"class":169},[149,109408,26824],{"class":309},[149,109410,109411],{"class":169}," mujoco-render",[149,109413,102655],{"class":169},[149,109415,102658],{"class":309},[149,109417,102661],{"class":309},[149,109419,109420,109422,109424],{"class":151,"line":193},[149,109421,32036],{"class":162},[149,109423,102668],{"class":169},[149,109425,109426],{"class":169}," mujoco-render\n",[149,109428,109429,109431,109433,109435,109437],{"class":151,"line":235},[149,109430,25539],{"class":162},[149,109432,25542],{"class":169},[149,109434,102610],{"class":169},[149,109436,109390],{"class":169},[149,109438,109393],{"class":169},[24,109440,109441],{},"离屏渲染后端:",[140,109443,109445],{"className":25530,"code":109444,"language":25532,"meta":145,"style":145},"export MUJOCO_GL=egl\n",[48,109446,109447],{"__ignoreMap":145},[149,109448,109449,109451,109454,109456],{"class":151,"line":152},[149,109450,26751],{"class":325},[149,109452,109453],{"class":155}," MUJOCO_GL",[149,109455,166],{"class":325},[149,109457,109458],{"class":155},"egl\n",[24,109460,109461],{},"或:",[140,109463,109465],{"className":25530,"code":109464,"language":25532,"meta":145,"style":145},"export MUJOCO_GL=osmesa\n",[48,109466,109467],{"__ignoreMap":145},[149,109468,109469,109471,109473,109475],{"class":151,"line":152},[149,109470,26751],{"class":325},[149,109472,109453],{"class":155},[149,109474,166],{"class":325},[149,109476,109477],{"class":155},"osmesa\n",[24,109479,109480,109481,109484,109485,30091],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[48,109482,109483],{},"egl"," 失败，再尝试 ",[48,109486,109487],{},"osmesa",[24,109489,109490,109491,109494],{},"如果你在本机桌面环境运行，通常先不要设置 ",[48,109492,109493],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109496,102725],{"id":102724},[24,109498,109499],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[24,109501,109502],{},"典型 viewer 流程:",[140,109504,109506],{"className":32084,"code":109505,"language":32086,"meta":145,"style":145},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[48,109507,109508,109521,109528,109532],{"__ignoreMap":145},[149,109509,109510,109513,109516,109518],{"class":151,"line":152},[149,109511,109512],{"class":325},"with",[149,109514,109515],{"class":155}," mujoco.viewer.launch_passive(model, data) ",[149,109517,33089],{"class":325},[149,109519,109520],{"class":155}," viewer:\n",[149,109522,109523,109525],{"class":151,"line":193},[149,109524,3970],{"class":325},[149,109526,109527],{"class":155}," viewer.is_running():\n",[149,109529,109530],{"class":151,"line":235},[149,109531,103196],{"class":155},[149,109533,109534],{"class":151,"line":340},[149,109535,109536],{"class":155},"        viewer.sync()\n",[24,109538,109539],{},"典型 renderer 流程:",[140,109541,109543],{"className":32084,"code":109542,"language":32086,"meta":145,"style":145},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[48,109544,109545,109571,109575,109580],{"__ignoreMap":145},[149,109546,109547,109549,109551,109554,109556,109558,109560,109562,109564,109566,109569],{"class":151,"line":152},[149,109548,109249],{"class":155},[149,109550,166],{"class":325},[149,109552,109553],{"class":155}," mujoco.Renderer(model, ",[149,109555,26690],{"class":6932},[149,109557,166],{"class":325},[149,109559,44048],{"class":309},[149,109561,329],{"class":155},[149,109563,26686],{"class":6932},[149,109565,166],{"class":325},[149,109567,109568],{"class":309},"640",[149,109570,1878],{"class":155},[149,109572,109573],{"class":151,"line":193},[149,109574,106184],{"class":155},[149,109576,109577],{"class":151,"line":235},[149,109578,109579],{"class":155},"renderer.update_scene(data)\n",[149,109581,109582,109584,109586],{"class":151,"line":340},[149,109583,109259],{"class":155},[149,109585,166],{"class":325},[149,109587,109264],{"class":155},[19,109589,109591],{"id":109590},"viewer-的同步逻辑","viewer 的同步逻辑",[24,109593,109594],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[140,109596,109598],{"className":32084,"code":109597,"language":32086,"meta":145,"style":145},"mujoco.mj_step(model, data)\nviewer.sync()\n",[48,109599,109600,109604],{"__ignoreMap":145},[149,109601,109602],{"class":151,"line":152},[149,109603,106184],{"class":155},[149,109605,109606],{"class":151,"line":193},[149,109607,109608],{"class":155},"viewer.sync()\n",[24,109610,109611,109613,109614,109617],{},[48,109612,102895],{}," 负责算物理，",[48,109615,109616],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[19,109619,109621],{"id":109620},"为什么要-sleep","为什么要 sleep",[24,109623,109624],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[140,109626,109628],{"className":32084,"code":109627,"language":32086,"meta":145,"style":145},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[48,109629,109630],{"__ignoreMap":145},[149,109631,109632,109635,109637,109640,109642,109645,109647],{"class":151,"line":152},[149,109633,109634],{"class":155},"sleep_time ",[149,109636,166],{"class":325},[149,109638,109639],{"class":155}," model.opt.timestep ",[149,109641,2395],{"class":325},[149,109643,109644],{"class":155}," (time.time() ",[149,109646,2395],{"class":325},[149,109648,109649],{"class":155}," step_start)\n",[24,109651,109652],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[19,109654,109656],{"id":109655},"renderer-输出是什么","renderer 输出是什么",[140,109658,109660],{"className":32084,"code":109659,"language":32086,"meta":145,"style":145},"image = renderer.render()\n",[48,109661,109662],{"__ignoreMap":145},[149,109663,109664,109666,109668],{"class":151,"line":152},[149,109665,109259],{"class":155},[149,109667,166],{"class":325},[149,109669,109264],{"class":155},[24,109671,109672],{},"得到的是 NumPy 数组，形状通常是：",[140,109674,109677],{"className":109675,"code":109676,"language":1655,"meta":145},[1653],"(height, width, 3)\n",[48,109678,109676],{"__ignoreMap":145},[24,109680,109681],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[140,109683,109685],{"className":32084,"code":109684,"language":32086,"meta":145,"style":145},"Image.fromarray(image).save(\"render_output.png\")\n",[48,109686,109687],{"__ignoreMap":145},[149,109688,109689,109692,109695],{"class":151,"line":152},[149,109690,109691],{"class":155},"Image.fromarray(image).save(",[149,109693,109694],{"class":169},"\"render_output.png\"",[149,109696,1878],{"class":155},[14,109698,102933],{"id":102932},[24,109700,109701],{},"交互式 Viewer:",[140,109703,109705],{"className":32084,"code":109704,"language":32086,"meta":145,"style":145},"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",[48,109706,109707,109713,109717,109723,109729,109733,109737,109745,109750,109754,109758,109762,109767,109772,109776,109780,109784,109789,109793,109797,109801,109805,109809,109813,109825,109837,109845,109849,109859,109879,109889,109894,109899,109903,109920,109933,109938,109942,109946,109958],{"__ignoreMap":145},[149,109708,109709,109711],{"class":151,"line":152},[149,109710,32098],{"class":325},[149,109712,33535],{"class":155},[149,109714,109715],{"class":151,"line":193},[149,109716,4119],{"emptyLinePlaceholder":1800},[149,109718,109719,109721],{"class":151,"line":235},[149,109720,32098],{"class":325},[149,109722,102981],{"class":155},[149,109724,109725,109727],{"class":151,"line":340},[149,109726,32098],{"class":325},[149,109728,109231],{"class":155},[149,109730,109731],{"class":151,"line":346},[149,109732,4119],{"emptyLinePlaceholder":1800},[149,109734,109735],{"class":151,"line":352},[149,109736,4119],{"emptyLinePlaceholder":1800},[149,109738,109739,109741,109743],{"class":151,"line":1021},[149,109740,102994],{"class":309},[149,109742,15277],{"class":325},[149,109744,102999],{"class":169},[149,109746,109747],{"class":151,"line":1035},[149,109748,109749],{"class":169},"\u003Cmujoco model=\"viewer_demo\">\n",[149,109751,109752],{"class":151,"line":1054},[149,109753,103009],{"class":169},[149,109755,109756],{"class":151,"line":1072},[149,109757,4119],{"emptyLinePlaceholder":1800},[149,109759,109760],{"class":151,"line":1090},[149,109761,103018],{"class":169},[149,109763,109764],{"class":151,"line":1633},[149,109765,109766],{"class":169},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[149,109768,109769],{"class":151,"line":1644},[149,109770,109771],{"class":169},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[149,109773,109774],{"class":151,"line":3348},[149,109775,4119],{"emptyLinePlaceholder":1800},[149,109777,109778],{"class":151,"line":3362},[149,109779,103032],{"class":169},[149,109781,109782],{"class":151,"line":3367},[149,109783,103037],{"class":169},[149,109785,109786],{"class":151,"line":3373},[149,109787,109788],{"class":169},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[149,109790,109791],{"class":151,"line":3394},[149,109792,103047],{"class":169},[149,109794,109795],{"class":151,"line":3399},[149,109796,103052],{"class":169},[149,109798,109799],{"class":151,"line":3413},[149,109800,103057],{"class":169},[149,109802,109803],{"class":151,"line":3418},[149,109804,97378],{"class":169},[149,109806,109807],{"class":151,"line":3447},[149,109808,4119],{"emptyLinePlaceholder":1800},[149,109810,109811],{"class":151,"line":3452},[149,109812,4119],{"emptyLinePlaceholder":1800},[149,109814,109815,109817,109819,109821,109823],{"class":151,"line":3469},[149,109816,33653],{"class":325},[149,109818,3692],{"class":162},[149,109820,103078],{"class":155},[149,109822,97366],{"class":309},[149,109824,5457],{"class":155},[149,109826,109827,109829,109831,109833,109835],{"class":151,"line":3474},[149,109828,103087],{"class":155},[149,109830,166],{"class":325},[149,109832,103092],{"class":155},[149,109834,102994],{"class":309},[149,109836,1878],{"class":155},[149,109838,109839,109841,109843],{"class":151,"line":3479},[149,109840,103101],{"class":155},[149,109842,166],{"class":325},[149,109844,103106],{"class":155},[149,109846,109847],{"class":151,"line":3484},[149,109848,4119],{"emptyLinePlaceholder":1800},[149,109850,109851,109853,109855,109857],{"class":151,"line":3498},[149,109852,35884],{"class":325},[149,109854,109515],{"class":155},[149,109856,33089],{"class":325},[149,109858,109520],{"class":155},[149,109860,109861,109864,109867,109869,109872,109874,109877],{"class":151,"line":3503},[149,109862,109863],{"class":325},"        while",[149,109865,109866],{"class":155}," viewer.is_running() ",[149,109868,32168],{"class":325},[149,109870,109871],{"class":155}," data.time ",[149,109873,156],{"class":325},[149,109875,109876],{"class":309}," 5.0",[149,109878,5457],{"class":155},[149,109880,109881,109884,109886],{"class":151,"line":4296},[149,109882,109883],{"class":155},"            step_start ",[149,109885,166],{"class":325},[149,109887,109888],{"class":155}," time.time()\n",[149,109890,109891],{"class":151,"line":4310},[149,109892,109893],{"class":155},"            mujoco.mj_step(model, data)\n",[149,109895,109896],{"class":151,"line":4318},[149,109897,109898],{"class":155},"            viewer.sync()\n",[149,109900,109901],{"class":151,"line":4323},[149,109902,4119],{"emptyLinePlaceholder":1800},[149,109904,109905,109908,109910,109912,109914,109916,109918],{"class":151,"line":4329},[149,109906,109907],{"class":155},"            sleep_time ",[149,109909,166],{"class":325},[149,109911,109639],{"class":155},[149,109913,2395],{"class":325},[149,109915,109644],{"class":155},[149,109917,2395],{"class":325},[149,109919,109649],{"class":155},[149,109921,109922,109924,109927,109929,109931],{"class":151,"line":4335},[149,109923,6360],{"class":325},[149,109925,109926],{"class":155}," sleep_time ",[149,109928,2819],{"class":325},[149,109930,5811],{"class":309},[149,109932,5457],{"class":155},[149,109934,109935],{"class":151,"line":4340},[149,109936,109937],{"class":155},"                time.sleep(sleep_time)\n",[149,109939,109940],{"class":151,"line":9663},[149,109941,4119],{"emptyLinePlaceholder":1800},[149,109943,109944],{"class":151,"line":9687},[149,109945,4119],{"emptyLinePlaceholder":1800},[149,109947,109948,109950,109952,109954,109956],{"class":151,"line":9692},[149,109949,3255],{"class":325},[149,109951,32926],{"class":309},[149,109953,103239],{"class":325},[149,109955,103242],{"class":169},[149,109957,5457],{"class":155},[149,109959,109960],{"class":151,"line":9698},[149,109961,103249],{"class":155},[24,109963,105249],{},[140,109965,109967],{"className":25530,"code":109966,"language":25532,"meta":145,"style":145},"touch ch5_viewer.py\n",[48,109968,109969],{"__ignoreMap":145},[149,109970,109971,109973],{"class":151,"line":152},[149,109972,102963],{"class":162},[149,109974,109975],{"class":169}," ch5_viewer.py\n",[24,109977,109978],{},"离屏 Renderer 保存图片:",[140,109980,109982],{"className":32084,"code":109981,"language":32086,"meta":145,"style":145},"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",[48,109983,109984,109996,110000,110006,110016,110020,110024,110032,110037,110041,110045,110049,110053,110058,110062,110066,110070,110074,110078,110082,110086,110090,110094,110098,110102,110114,110126,110134,110159,110163,110179,110183,110187,110202,110211,110215,110229,110234,110239,110243,110255,110267,110271,110275,110287],{"__ignoreMap":145},[149,109985,109986,109988,109991,109993],{"class":151,"line":152},[149,109987,32443],{"class":325},[149,109989,109990],{"class":155}," pathlib ",[149,109992,32098],{"class":325},[149,109994,109995],{"class":155}," Path\n",[149,109997,109998],{"class":151,"line":193},[149,109999,4119],{"emptyLinePlaceholder":1800},[149,110001,110002,110004],{"class":151,"line":235},[149,110003,32098],{"class":325},[149,110005,102981],{"class":155},[149,110007,110008,110010,110012,110014],{"class":151,"line":340},[149,110009,32443],{"class":325},[149,110011,48969],{"class":309},[149,110013,48972],{"class":325},[149,110015,48975],{"class":155},[149,110017,110018],{"class":151,"line":346},[149,110019,4119],{"emptyLinePlaceholder":1800},[149,110021,110022],{"class":151,"line":352},[149,110023,4119],{"emptyLinePlaceholder":1800},[149,110025,110026,110028,110030],{"class":151,"line":1021},[149,110027,102994],{"class":309},[149,110029,15277],{"class":325},[149,110031,102999],{"class":169},[149,110033,110034],{"class":151,"line":1035},[149,110035,110036],{"class":169},"\u003Cmujoco model=\"renderer_demo\">\n",[149,110038,110039],{"class":151,"line":1054},[149,110040,103009],{"class":169},[149,110042,110043],{"class":151,"line":1072},[149,110044,4119],{"emptyLinePlaceholder":1800},[149,110046,110047],{"class":151,"line":1090},[149,110048,103018],{"class":169},[149,110050,110051],{"class":151,"line":1633},[149,110052,109766],{"class":169},[149,110054,110055],{"class":151,"line":1644},[149,110056,110057],{"class":169},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[149,110059,110060],{"class":151,"line":3348},[149,110061,109771],{"class":169},[149,110063,110064],{"class":151,"line":3362},[149,110065,4119],{"emptyLinePlaceholder":1800},[149,110067,110068],{"class":151,"line":3367},[149,110069,103032],{"class":169},[149,110071,110072],{"class":151,"line":3373},[149,110073,103037],{"class":169},[149,110075,110076],{"class":151,"line":3394},[149,110077,109788],{"class":169},[149,110079,110080],{"class":151,"line":3399},[149,110081,103047],{"class":169},[149,110083,110084],{"class":151,"line":3413},[149,110085,103052],{"class":169},[149,110087,110088],{"class":151,"line":3418},[149,110089,103057],{"class":169},[149,110091,110092],{"class":151,"line":3447},[149,110093,97378],{"class":169},[149,110095,110096],{"class":151,"line":3452},[149,110097,4119],{"emptyLinePlaceholder":1800},[149,110099,110100],{"class":151,"line":3469},[149,110101,4119],{"emptyLinePlaceholder":1800},[149,110103,110104,110106,110108,110110,110112],{"class":151,"line":3474},[149,110105,33653],{"class":325},[149,110107,3692],{"class":162},[149,110109,103078],{"class":155},[149,110111,97366],{"class":309},[149,110113,5457],{"class":155},[149,110115,110116,110118,110120,110122,110124],{"class":151,"line":3479},[149,110117,103087],{"class":155},[149,110119,166],{"class":325},[149,110121,103092],{"class":155},[149,110123,102994],{"class":309},[149,110125,1878],{"class":155},[149,110127,110128,110130,110132],{"class":151,"line":3484},[149,110129,103101],{"class":155},[149,110131,166],{"class":325},[149,110133,103106],{"class":155},[149,110135,110136,110139,110141,110143,110145,110147,110149,110151,110153,110155,110157],{"class":151,"line":3498},[149,110137,110138],{"class":155},"    renderer ",[149,110140,166],{"class":325},[149,110142,109553],{"class":155},[149,110144,26690],{"class":6932},[149,110146,166],{"class":325},[149,110148,44048],{"class":309},[149,110150,329],{"class":155},[149,110152,26686],{"class":6932},[149,110154,166],{"class":325},[149,110156,109568],{"class":309},[149,110158,1878],{"class":155},[149,110160,110161],{"class":151,"line":3503},[149,110162,4119],{"emptyLinePlaceholder":1800},[149,110164,110165,110167,110169,110171,110173,110175,110177],{"class":151,"line":4296},[149,110166,4919],{"class":325},[149,110168,103181],{"class":155},[149,110170,27752],{"class":325},[149,110172,34149],{"class":309},[149,110174,319],{"class":155},[149,110176,322],{"class":309},[149,110178,32492],{"class":155},[149,110180,110181],{"class":151,"line":4310},[149,110182,103196],{"class":155},[149,110184,110185],{"class":151,"line":4318},[149,110186,4119],{"emptyLinePlaceholder":1800},[149,110188,110189,110192,110195,110197,110200],{"class":151,"line":4323},[149,110190,110191],{"class":155},"    renderer.update_scene(data, ",[149,110193,110194],{"class":6932},"camera",[149,110196,166],{"class":325},[149,110198,110199],{"class":169},"\"fixed_camera\"",[149,110201,1878],{"class":155},[149,110203,110204,110207,110209],{"class":151,"line":4329},[149,110205,110206],{"class":155},"    image ",[149,110208,166],{"class":325},[149,110210,109264],{"class":155},[149,110212,110213],{"class":151,"line":4335},[149,110214,4119],{"emptyLinePlaceholder":1800},[149,110216,110217,110220,110222,110225,110227],{"class":151,"line":4340},[149,110218,110219],{"class":155},"    output_path ",[149,110221,166],{"class":325},[149,110223,110224],{"class":155}," Path(",[149,110226,109694],{"class":169},[149,110228,1878],{"class":155},[149,110230,110231],{"class":151,"line":9663},[149,110232,110233],{"class":155},"    Image.fromarray(image).save(output_path)\n",[149,110235,110236],{"class":151,"line":9687},[149,110237,110238],{"class":155},"    renderer.close()\n",[149,110240,110241],{"class":151,"line":9692},[149,110242,4119],{"emptyLinePlaceholder":1800},[149,110244,110245,110247,110249,110252],{"class":151,"line":9698},[149,110246,33005],{"class":309},[149,110248,319],{"class":155},[149,110250,110251],{"class":169},"\"saved:\"",[149,110253,110254],{"class":155},", output_path.resolve())\n",[149,110256,110257,110259,110261,110264],{"class":151,"line":9725},[149,110258,33005],{"class":309},[149,110260,319],{"class":155},[149,110262,110263],{"class":169},"\"image shape:\"",[149,110265,110266],{"class":155},", image.shape)\n",[149,110268,110269],{"class":151,"line":9730},[149,110270,4119],{"emptyLinePlaceholder":1800},[149,110272,110273],{"class":151,"line":9736},[149,110274,4119],{"emptyLinePlaceholder":1800},[149,110276,110277,110279,110281,110283,110285],{"class":151,"line":9748},[149,110278,3255],{"class":325},[149,110280,32926],{"class":309},[149,110282,103239],{"class":325},[149,110284,103242],{"class":169},[149,110286,5457],{"class":155},[149,110288,110289],{"class":151,"line":9760},[149,110290,103249],{"class":155},[24,110292,105249],{},[140,110294,110296],{"className":25530,"code":110295,"language":25532,"meta":145,"style":145},"touch ch5_renderer.py\n",[48,110297,110298],{"__ignoreMap":145},[149,110299,110300,110302],{"class":151,"line":152},[149,110301,102963],{"class":162},[149,110303,110304],{"class":169}," ch5_renderer.py\n",[19,110306,103252],{"id":103252},[24,110308,110309],{},"viewer 上下文：",[140,110311,110313],{"className":32084,"code":110312,"language":32086,"meta":145,"style":145},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[48,110314,110315],{"__ignoreMap":145},[149,110316,110317,110319,110321,110323],{"class":151,"line":152},[149,110318,109512],{"class":325},[149,110320,109515],{"class":155},[149,110322,33089],{"class":325},[149,110324,109520],{"class":155},[24,110326,110327,110329],{},[48,110328,109512],{}," 语句会创建窗口，并在退出时自动清理资源。",[24,110331,110332],{},"窗口循环：",[140,110334,110336],{"className":32084,"code":110335,"language":32086,"meta":145,"style":145},"while viewer.is_running() and data.time \u003C 5.0:\n",[48,110337,110338],{"__ignoreMap":145},[149,110339,110340,110343,110345,110347,110349,110351,110353],{"class":151,"line":152},[149,110341,110342],{"class":325},"while",[149,110344,109866],{"class":155},[149,110346,32168],{"class":325},[149,110348,109871],{"class":155},[149,110350,156],{"class":325},[149,110352,109876],{"class":309},[149,110354,5457],{"class":155},[24,110356,110357],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[24,110359,110360],{},"固定相机：",[140,110362,110364],{"className":54765,"code":110363,"language":54767,"meta":145,"style":145},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[48,110365,110366],{"__ignoreMap":145},[149,110367,110368,110370,110372,110374,110376,110378,110380,110382,110385,110388,110390,110393],{"class":151,"line":152},[149,110369,156],{"class":155},[149,110371,110194],{"class":159},[149,110373,515],{"class":162},[149,110375,166],{"class":155},[149,110377,110199],{"class":169},[149,110379,102786],{"class":162},[149,110381,166],{"class":155},[149,110383,110384],{"class":169},"\"1.5 -2.0 1.2\"",[149,110386,110387],{"class":162}," xyaxes",[149,110389,166],{"class":155},[149,110391,110392],{"class":169},"\"1 0.75 0 0 0 1\"",[149,110394,102824],{"class":155},[24,110396,110397],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[19,110399,110401],{"id":110400},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[140,110403,110405],{"className":32084,"code":110404,"language":32086,"meta":145,"style":145},"import time\n",[48,110406,110407],{"__ignoreMap":145},[149,110408,110409,110411],{"class":151,"line":152},[149,110410,32098],{"class":325},[149,110412,33535],{"class":155},[24,110414,110415],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[140,110417,110419],{"className":32084,"code":110418,"language":32086,"meta":145,"style":145},"import mujoco\nimport mujoco.viewer\n",[48,110420,110421,110427],{"__ignoreMap":145},[149,110422,110423,110425],{"class":151,"line":152},[149,110424,32098],{"class":325},[149,110426,102981],{"class":155},[149,110428,110429,110431],{"class":151,"line":193},[149,110430,32098],{"class":325},[149,110432,109231],{"class":155},[24,110434,110435],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[140,110437,110438],{"className":32084,"code":110312,"language":32086,"meta":145,"style":145},[48,110439,110440],{"__ignoreMap":145},[149,110441,110442,110444,110446,110448],{"class":151,"line":152},[149,110443,109512],{"class":325},[149,110445,109515],{"class":155},[149,110447,33089],{"class":325},[149,110449,109520],{"class":155},[24,110451,110452,110453,110456],{},"打开一个 viewer 窗口。",[48,110454,110455],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[140,110458,110459],{"className":32084,"code":110335,"language":32086,"meta":145,"style":145},[48,110460,110461],{"__ignoreMap":145},[149,110462,110463,110465,110467,110469,110471,110473,110475],{"class":151,"line":152},[149,110464,110342],{"class":325},[149,110466,109866],{"class":155},[149,110468,32168],{"class":325},[149,110470,109871],{"class":155},[149,110472,156],{"class":325},[149,110474,109876],{"class":309},[149,110476,5457],{"class":155},[24,110478,110479,110480,110483],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[48,110481,110482],{},"viewer.is_running()"," 会变成 false，循环结束。",[140,110485,110487],{"className":32084,"code":110486,"language":32086,"meta":145,"style":145},"step_start = time.time()\n",[48,110488,110489],{"__ignoreMap":145},[149,110490,110491,110494,110496],{"class":151,"line":152},[149,110492,110493],{"class":155},"step_start ",[149,110495,166],{"class":325},[149,110497,109888],{"class":155},[24,110499,110500],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[140,110502,110503],{"className":32084,"code":109597,"language":32086,"meta":145,"style":145},[48,110504,110505,110509],{"__ignoreMap":145},[149,110506,110507],{"class":151,"line":152},[149,110508,106184],{"class":155},[149,110510,110511],{"class":151,"line":193},[149,110512,109608],{"class":155},[24,110514,110515,110517,110518,110520,110521,110523,110524,110527],{},[48,110516,102895],{}," 推进物理仿真。",[48,110519,109616],{}," 把最新的 ",[48,110522,35107],{}," 同步到窗口里显示。没有 ",[48,110525,110526],{},"sync()","，窗口可能看不到最新状态。",[140,110529,110530],{"className":32084,"code":109627,"language":32086,"meta":145,"style":145},[48,110531,110532],{"__ignoreMap":145},[149,110533,110534,110536,110538,110540,110542,110544,110546],{"class":151,"line":152},[149,110535,109634],{"class":155},[149,110537,166],{"class":325},[149,110539,109639],{"class":155},[149,110541,2395],{"class":325},[149,110543,109644],{"class":155},[149,110545,2395],{"class":325},[149,110547,109649],{"class":155},[24,110549,110550],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[140,110552,110554],{"className":32084,"code":110553,"language":32086,"meta":145,"style":145},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[48,110555,110556,110568],{"__ignoreMap":145},[149,110557,110558,110560,110562,110564,110566],{"class":151,"line":152},[149,110559,3255],{"class":325},[149,110561,109926],{"class":155},[149,110563,2819],{"class":325},[149,110565,5811],{"class":309},[149,110567,5457],{"class":155},[149,110569,110570],{"class":151,"line":193},[149,110571,110572],{"class":155},"    time.sleep(sleep_time)\n",[24,110574,110575],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[19,110577,110579],{"id":110578},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[140,110581,110583],{"className":32084,"code":110582,"language":32086,"meta":145,"style":145},"from pathlib import Path\n",[48,110584,110585],{"__ignoreMap":145},[149,110586,110587,110589,110591,110593],{"class":151,"line":152},[149,110588,32443],{"class":325},[149,110590,109990],{"class":155},[149,110592,32098],{"class":325},[149,110594,109995],{"class":155},[24,110596,110597,110598,110601,110602,110605],{},"导入 ",[48,110599,110600],{},"Path","，用来处理文件路径。相比直接写字符串，",[48,110603,110604],{},"Path(\"render_output.png\")"," 更清晰。",[140,110607,110609],{"className":32084,"code":110608,"language":32086,"meta":145,"style":145},"from PIL import Image\n",[48,110610,110611],{"__ignoreMap":145},[149,110612,110613,110615,110617,110619],{"class":151,"line":152},[149,110614,32443],{"class":325},[149,110616,48969],{"class":309},[149,110618,48972],{"class":325},[149,110620,48975],{"class":155},[24,110622,110623],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[140,110625,110626],{"className":54765,"code":110363,"language":54767,"meta":145,"style":145},[48,110627,110628],{"__ignoreMap":145},[149,110629,110630,110632,110634,110636,110638,110640,110642,110644,110646,110648,110650,110652],{"class":151,"line":152},[149,110631,156],{"class":155},[149,110633,110194],{"class":159},[149,110635,515],{"class":162},[149,110637,166],{"class":155},[149,110639,110199],{"class":169},[149,110641,102786],{"class":162},[149,110643,166],{"class":155},[149,110645,110384],{"class":169},[149,110647,110387],{"class":162},[149,110649,166],{"class":155},[149,110651,110392],{"class":169},[149,110653,102824],{"class":155},[24,110655,110656,110657,110659,110660,110662,110663,110666,110667,110669],{},"定义一个相机。",[48,110658,81491],{}," 是相机名字。",[48,110661,105825],{}," 是相机在世界里的位置。",[48,110664,110665],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[48,110668,105825],{}," 来调视角。",[140,110671,110673],{"className":32084,"code":110672,"language":32086,"meta":145,"style":145},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[48,110674,110675],{"__ignoreMap":145},[149,110676,110677,110679,110681,110683,110685,110687,110689,110691,110693,110695,110697],{"class":151,"line":152},[149,110678,109249],{"class":155},[149,110680,166],{"class":325},[149,110682,109553],{"class":155},[149,110684,26690],{"class":6932},[149,110686,166],{"class":325},[149,110688,44048],{"class":309},[149,110690,329],{"class":155},[149,110692,26686],{"class":6932},[149,110694,166],{"class":325},[149,110696,109568],{"class":309},[149,110698,1878],{"class":155},[24,110700,110701,110702,102698,110704,110706],{},"创建离屏渲染器。",[48,110703,26690],{},[48,110705,26686],{}," 决定输出图片大小。",[140,110708,110709],{"className":32084,"code":103356,"language":32086,"meta":145,"style":145},[48,110710,110711,110727],{"__ignoreMap":145},[149,110712,110713,110715,110717,110719,110721,110723,110725],{"class":151,"line":152},[149,110714,4743],{"class":325},[149,110716,103181],{"class":155},[149,110718,27752],{"class":325},[149,110720,34149],{"class":309},[149,110722,319],{"class":155},[149,110724,322],{"class":309},[149,110726,32492],{"class":155},[149,110728,110729],{"class":151,"line":193},[149,110730,103379],{"class":155},[24,110732,110733],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[140,110735,110737],{"className":32084,"code":110736,"language":32086,"meta":145,"style":145},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[48,110738,110739],{"__ignoreMap":145},[149,110740,110741,110744,110746,110748,110750],{"class":151,"line":152},[149,110742,110743],{"class":155},"renderer.update_scene(data, ",[149,110745,110194],{"class":6932},[149,110747,166],{"class":325},[149,110749,110199],{"class":169},[149,110751,1878],{"class":155},[24,110753,110754,110755,110757,110758,110761],{},"告诉 renderer：用当前 ",[48,110756,35107],{}," 的状态更新画面，并使用名为 ",[48,110759,110760],{},"fixed_camera"," 的相机视角。",[140,110763,110764],{"className":32084,"code":109659,"language":32086,"meta":145,"style":145},[48,110765,110766],{"__ignoreMap":145},[149,110767,110768,110770,110772],{"class":151,"line":152},[149,110769,109259],{"class":155},[149,110771,166],{"class":325},[149,110773,109264],{"class":155},[24,110775,110776,110777,110780],{},"真正渲染出图像。",[48,110778,110779],{},"image"," 是一个 NumPy 数组，不是文件。",[140,110782,110784],{"className":32084,"code":110783,"language":32086,"meta":145,"style":145},"Image.fromarray(image).save(output_path)\n",[48,110785,110786],{"__ignoreMap":145},[149,110787,110788],{"class":151,"line":152},[149,110789,110783],{"class":155},[24,110791,110792,110793,30091],{},"把数组转换成图片，并保存到 ",[48,110794,110795],{},"render_output.png",[140,110797,110799],{"className":32084,"code":110798,"language":32086,"meta":145,"style":145},"renderer.close()\n",[48,110800,110801],{"__ignoreMap":145},[149,110802,110803],{"class":151,"line":152},[149,110804,110798],{"class":155},[24,110806,110807],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110809,103996],{"id":103995},[24,110811,110812,110813,110815,110816,30091],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[48,110814,110795],{},"，并输出图像数组形状，例如 ",[48,110817,110818],{},"(480, 640, 3)",[24,110820,110821],{},"如果图片里看不到方块，先检查：",[125,110823,110824,110827,110830],{},[45,110825,110826],{},"方块是否掉到相机视野外。",[45,110828,110829],{},"camera 位置是否合理。",[45,110831,110832,110833,110836],{},"是否在 ",[48,110834,110835],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110838,104028],{"id":104027},[24,110840,110841],{},"运行 viewer:",[140,110843,110845],{"className":25530,"code":110844,"language":25532,"meta":145,"style":145},"python ch5_viewer.py\n",[48,110846,110847],{"__ignoreMap":145},[149,110848,110849,110851],{"class":151,"line":152},[149,110850,32086],{"class":162},[149,110852,109975],{"class":169},[24,110854,110855],{},"运行 renderer:",[140,110857,110859],{"className":25530,"code":110858,"language":25532,"meta":145,"style":145},"python ch5_renderer.py\n",[48,110860,110861],{"__ignoreMap":145},[149,110862,110863,110865],{"class":151,"line":152},[149,110864,32086],{"class":162},[149,110866,110304],{"class":169},[24,110868,110869],{},"如果在服务器上运行:",[140,110871,110873],{"className":25530,"code":110872,"language":25532,"meta":145,"style":145},"MUJOCO_GL=egl python ch5_renderer.py\n",[48,110874,110875],{"__ignoreMap":145},[149,110876,110877,110879,110881,110883,110886],{"class":151,"line":152},[149,110878,109493],{"class":155},[149,110880,166],{"class":325},[149,110882,109483],{"class":169},[149,110884,110885],{"class":162}," python",[149,110887,110304],{"class":169},[24,110889,109461],{},[140,110891,110893],{"className":25530,"code":110892,"language":25532,"meta":145,"style":145},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[48,110894,110895],{"__ignoreMap":145},[149,110896,110897,110899,110901,110903,110905],{"class":151,"line":152},[149,110898,109493],{"class":155},[149,110900,166],{"class":325},[149,110902,109487],{"class":169},[149,110904,110885],{"class":162},[149,110906,110304],{"class":169},[24,110908,110909],{},"再做几个练习：",[125,110911,110912,110919,110922,110928],{},[45,110913,110914,110915,110918],{},"把 renderer 分辨率改成 ",[48,110916,110917],{},"height=240, width=320","，观察输出 shape。",[45,110920,110921],{},"把方块颜色改成蓝色，重新保存图片。",[45,110923,110924,110925,110927],{},"把相机 ",[48,110926,105825],{}," 改远一点，观察画面中物体是否变小。",[45,110929,110930,110931,104094,110934,110937],{},"把 viewer 示例中的 ",[48,110932,110933],{},"data.time \u003C 5.0",[48,110935,110936],{},"data.time \u003C 20.0","，观察更长时间。",[14,110939,104133],{"id":104132},[19,110941,110943],{"id":110942},"viewer-窗口打不开","viewer 窗口打不开",[24,110945,110946],{},"安装:",[140,110948,110950],{"className":25530,"code":110949,"language":25532,"meta":145,"style":145},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[48,110951,110952],{"__ignoreMap":145},[149,110953,110954,110956,110958,110960,110962,110964,110966,110968,110970,110972,110974],{"class":151,"line":152},[149,110955,26285],{"class":162},[149,110957,28024],{"class":169},[149,110959,25542],{"class":169},[149,110961,28109],{"class":309},[149,110963,104186],{"class":169},[149,110965,102514],{"class":169},[149,110967,104191],{"class":169},[149,110969,102527],{"class":169},[149,110971,102533],{"class":169},[149,110973,102524],{"class":169},[149,110975,110976],{"class":169}," libXinerama\n",[19,110978,110980],{"id":110979},"glfwerror",[48,110981,110982],{},"GLFWError",[24,110984,110985],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[19,110987,110989],{"id":110988},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[24,110991,110992,110993,84220,110995,110997],{},"尝试 ",[48,110994,102717],{},[48,110996,102720],{},"。可能存在版本差异。",[19,110999,111000],{"id":111000},"保存图片是黑的",[24,111002,104255],{},[125,111004,111005,111008,111011,111021],{},[45,111006,111007],{},"XML 里是否有 light。",[45,111009,111010],{},"相机是否对着模型。",[45,111012,111013,111014,111017,111018,30091],{},"是否先 ",[48,111015,111016],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[48,111019,111020],{},"renderer.render()",[45,111022,111023],{},"物体是否已经掉出视野。",[19,111025,111026],{"id":111026},"远程服务器没有显示器",[24,111028,111029],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[140,111031,111032],{"className":25530,"code":110872,"language":25532,"meta":145,"style":145},[48,111033,111034],{"__ignoreMap":145},[149,111035,111036,111038,111040,111042,111044],{"class":151,"line":152},[149,111037,109493],{"class":155},[149,111039,166],{"class":325},[149,111041,109483],{"class":169},[149,111043,110885],{"class":162},[149,111045,110304],{"class":169},[24,111047,111048],{},"如果 EGL 不可用，再尝试：",[140,111050,111051],{"className":25530,"code":110892,"language":25532,"meta":145,"style":145},[48,111052,111053],{"__ignoreMap":145},[149,111054,111055,111057,111059,111061,111063],{"class":151,"line":152},[149,111056,109493],{"class":155},[149,111058,166],{"class":325},[149,111060,109487],{"class":169},[149,111062,110885],{"class":162},[149,111064,110304],{"class":169},[14,111066,104287],{"id":104286},[24,111068,111069],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[125,111071,111072,111075,111078],{},[45,111073,111074],{},"先用 viewer 看模型和控制是否正常。",[45,111076,111077],{},"再用 renderer 保存图片或构造视觉观测。",[45,111079,111080],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1783,111082,111083],{},"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":145,"searchDepth":193,"depth":193,"links":111085},[111086,111087,111088,111093,111098,111099,111100,111107],{"id":102326,"depth":193,"text":102327},{"id":102449,"depth":193,"text":102450},{"id":102724,"depth":193,"text":102725,"children":111089},[111090,111091,111092],{"id":109590,"depth":235,"text":109591},{"id":109620,"depth":235,"text":109621},{"id":109655,"depth":235,"text":109656},{"id":102932,"depth":193,"text":102933,"children":111094},[111095,111096,111097],{"id":103252,"depth":235,"text":103252},{"id":110400,"depth":235,"text":110401},{"id":110578,"depth":235,"text":110579},{"id":103995,"depth":193,"text":103996},{"id":104027,"depth":193,"text":104028},{"id":104132,"depth":193,"text":104133,"children":111101},[111102,111103,111104,111105,111106],{"id":110942,"depth":235,"text":110943},{"id":110979,"depth":235,"text":110982},{"id":110988,"depth":235,"text":110989},{"id":111000,"depth":235,"text":111000},{"id":111026,"depth":235,"text":111026},{"id":104286,"depth":193,"text":104287},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109198,"description":145},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111114,"title":111115,"body":111116,"description":145,"extension":1798,"meta":113027,"navigation":1800,"path":113028,"seo":113029,"stem":113030,"__hash__":113031},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111117,"toc":113003},[111118,111121,111123,111126,111128,111147,111150,111156,111159,111161,111163,111187,111189,111203,111205,111246,111248,111259,111261,111264,111270,111273,111307,111310,111342,111345,111377,111381,111384,111424,111427,111433,111436,111442,111446,111449,111455,111458,111462,111465,111505,111507,111520,111523,111525,112107,112109,112121,112124,112135,112137,112140,112159,112171,112174,112195,112198,112201,112244,112247,112250,112270,112277,112279,112297,112312,112315,112321,112324,112330,112347,112354,112385,112396,112430,112441,112458,112467,112475,112480,112494,112497,112518,112524,112538,112543,112573,112583,112608,112616,112639,112642,112658,112661,112669,112675,112697,112710,112731,112740,112779,112790,112792,112795,112801,112804,112807,112813,112816,112836,112839,112841,112880,112882,112885,112893,112896,112899,112926,112929,112939,112945,112948,112954,112956,112962,112966,112969,112971,112974,112998,113001],[10,111119,111115],{"id":111120},"_6控制任务cartpole",[14,111122,102327],{"id":102326},[24,111124,111125],{},"本章搭建一个最小 Cartpole 控制任务。",[24,111127,106010],{},[125,111129,111130,111133,111135,111138,111141,111144],{},[45,111131,111132],{},"slide joint",[45,111134,107863],{},[45,111136,111137],{},"cart force actuator",[45,111139,111140],{},"状态观测",[45,111142,111143],{},"简单控制循环",[45,111145,111146],{},"reward 设计雏形",[24,111148,111149],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[140,111151,111154],{"className":111152,"code":111153,"language":1655,"meta":145},[1653],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[48,111155,111153],{"__ignoreMap":145},[24,111157,111158],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111160,102450],{"id":102449},[24,111162,102453],{},[140,111164,111165],{"className":25530,"code":106067,"language":25532,"meta":145,"style":145},[48,111166,111167],{"__ignoreMap":145},[149,111168,111169,111171,111173,111175,111177,111179,111181,111183,111185],{"class":151,"line":152},[149,111170,26285],{"class":162},[149,111172,28024],{"class":169},[149,111174,25542],{"class":169},[149,111176,28109],{"class":309},[149,111178,106082],{"class":169},[149,111180,102478],{"class":169},[149,111182,104181],{"class":169},[149,111184,102494],{"class":169},[149,111186,106091],{"class":169},[24,111188,104499],{},[140,111190,111191],{"className":25530,"code":102599,"language":25532,"meta":145,"style":145},[48,111192,111193],{"__ignoreMap":145},[149,111194,111195,111197,111199,111201],{"class":151,"line":152},[149,111196,25539],{"class":162},[149,111198,25542],{"class":169},[149,111200,102610],{"class":169},[149,111202,102613],{"class":169},[24,111204,104516],{},[140,111206,111208],{"className":25530,"code":111207,"language":25532,"meta":145,"style":145},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[48,111209,111210,111227,111236],{"__ignoreMap":145},[149,111211,111212,111214,111216,111218,111221,111223,111225],{"class":151,"line":152},[149,111213,32036],{"class":162},[149,111215,30882],{"class":169},[149,111217,26824],{"class":309},[149,111219,111220],{"class":169}," mujoco-cartpole",[149,111222,102655],{"class":169},[149,111224,102658],{"class":309},[149,111226,102661],{"class":309},[149,111228,111229,111231,111233],{"class":151,"line":193},[149,111230,32036],{"class":162},[149,111232,102668],{"class":169},[149,111234,111235],{"class":169}," mujoco-cartpole\n",[149,111237,111238,111240,111242,111244],{"class":151,"line":235},[149,111239,25539],{"class":162},[149,111241,25542],{"class":169},[149,111243,102610],{"class":169},[149,111245,102613],{"class":169},[24,111247,102684],{},[125,111249,111250,111253,111256],{},[45,111251,111252],{},"本章不依赖 Gymnasium。",[45,111254,111255],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[45,111257,111258],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111260,102725],{"id":102724},[24,111262,111263],{},"Cartpole 的模型结构:",[140,111265,111268],{"className":111266,"code":111267,"language":1655,"meta":145},[1653],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[48,111269,111267],{"__ignoreMap":145},[24,111271,111272],{},"小车通过 slide joint 左右移动:",[140,111274,111276],{"className":54765,"code":111275,"language":54767,"meta":145,"style":145},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[48,111277,111278],{"__ignoreMap":145},[149,111279,111280,111282,111284,111286,111288,111291,111293,111295,111298,111300,111302,111305],{"class":151,"line":152},[149,111281,156],{"class":155},[149,111283,104636],{"class":159},[149,111285,515],{"class":162},[149,111287,166],{"class":155},[149,111289,111290],{"class":169},"\"cart_x\"",[149,111292,507],{"class":162},[149,111294,166],{"class":155},[149,111296,111297],{"class":169},"\"slide\"",[149,111299,107707],{"class":162},[149,111301,166],{"class":155},[149,111303,111304],{"class":169},"\"1 0 0\"",[149,111306,102824],{"class":155},[24,111308,111309],{},"杆子通过 hinge joint 旋转:",[140,111311,111313],{"className":54765,"code":111312,"language":54767,"meta":145,"style":145},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[48,111314,111315],{"__ignoreMap":145},[149,111316,111317,111319,111321,111323,111325,111328,111330,111332,111334,111336,111338,111340],{"class":151,"line":152},[149,111318,156],{"class":155},[149,111320,104636],{"class":159},[149,111322,515],{"class":162},[149,111324,166],{"class":155},[149,111326,111327],{"class":169},"\"pole_hinge\"",[149,111329,507],{"class":162},[149,111331,166],{"class":155},[149,111333,107698],{"class":169},[149,111335,107707],{"class":162},[149,111337,166],{"class":155},[149,111339,107712],{"class":169},[149,111341,102824],{"class":155},[24,111343,111344],{},"控制力作用在小车 slide joint 上:",[140,111346,111348],{"className":54765,"code":111347,"language":54767,"meta":145,"style":145},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[48,111349,111350],{"__ignoreMap":145},[149,111351,111352,111354,111356,111358,111360,111363,111365,111367,111369,111371,111373,111375],{"class":151,"line":152},[149,111353,156],{"class":155},[149,111355,107753],{"class":159},[149,111357,515],{"class":162},[149,111359,166],{"class":155},[149,111361,111362],{"class":169},"\"cart_motor\"",[149,111364,107763],{"class":162},[149,111366,166],{"class":155},[149,111368,111290],{"class":169},[149,111370,107770],{"class":162},[149,111372,166],{"class":155},[149,111374,56011],{"class":169},[149,111376,102824],{"class":155},[19,111378,111380],{"id":111379},"cartpole-的状态是什么","Cartpole 的状态是什么",[24,111382,111383],{},"这个简化模型有两个关节：",[2003,111385,111386,111397],{},[2006,111387,111388],{},[2009,111389,111390,111392,111394],{},[2012,111391,104439],{"align":1566},[2012,111393,25445],{"align":1566},[2012,111395,111396],{"align":1566},"对应状态",[2049,111398,111399,111412],{},[2009,111400,111401,111406,111409],{},[2054,111402,111403],{"align":1566},[48,111404,111405],{},"cart_x",[2054,111407,111408],{"align":1566},"slide",[2054,111410,111411],{"align":1566},"小车 x 位置",[2009,111413,111414,111419,111421],{},[2054,111415,111416],{"align":1566},[48,111417,111418],{},"pole_hinge",[2054,111420,107519],{"align":1566},[2054,111422,111423],{"align":1566},"杆子角度",[24,111425,111426],{},"所以：",[140,111428,111431],{"className":111429,"code":111430,"language":1655,"meta":145},[1653],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[48,111432,111430],{"__ignoreMap":145},[24,111434,111435],{},"把它们拼起来就是观测：",[140,111437,111440],{"className":111438,"code":111439,"language":1655,"meta":145},[1653],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[48,111441,111439],{"__ignoreMap":145},[19,111443,111445],{"id":111444},"action-是什么","action 是什么",[24,111447,111448],{},"本章只有一个 actuator：",[140,111450,111453],{"className":111451,"code":111452,"language":1655,"meta":145},[1653],"data.ctrl[0] = action\n",[48,111454,111452],{"__ignoreMap":145},[24,111456,111457],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[19,111459,111461],{"id":111460},"reward-是什么","reward 是什么",[24,111463,111464],{},"奖励函数：",[140,111466,111468],{"className":32084,"code":111467,"language":32086,"meta":145,"style":145},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[48,111469,111470],{"__ignoreMap":145},[149,111471,111472,111474,111477,111479,111481,111483,111486,111488,111491,111493,111495,111497,111500,111502],{"class":151,"line":152},[149,111473,18756],{"class":325},[149,111475,111476],{"class":309}," float",[149,111478,319],{"class":155},[149,111480,104083],{"class":309},[149,111482,53969],{"class":325},[149,111484,111485],{"class":309}," 0.1",[149,111487,8234],{"class":325},[149,111489,111490],{"class":155}," cart_x ",[149,111492,2318],{"class":325},[149,111494,111490],{"class":155},[149,111496,2395],{"class":325},[149,111498,111499],{"class":155}," pole_angle ",[149,111501,2318],{"class":325},[149,111503,111504],{"class":155}," pole_angle)\n",[24,111506,107905],{},[125,111508,111509,111514,111517],{},[45,111510,111511,111512,30091],{},"基础奖励是 ",[48,111513,104083],{},[45,111515,111516],{},"小车离中心越远，扣分越多。",[45,111518,111519],{},"杆子角度越大，扣分越多。",[24,111521,111522],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111524,102933],{"id":102932},[140,111526,111528],{"className":32084,"code":111527,"language":32086,"meta":145,"style":145},"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",[48,111529,111530,111536,111546,111550,111554,111562,111567,111571,111575,111579,111584,111588,111593,111598,111603,111607,111612,111617,111622,111626,111630,111634,111638,111642,111647,111651,111655,111659,111663,111667,111677,111684,111688,111692,111706,111720,111733,111763,111767,111771,111783,111795,111803,111807,111820,111824,111828,111837,111841,111857,111867,111880,111893,111897,111920,111938,111942,111954,111958,111962,111972,111982,111986,112002,112043,112047,112067,112083,112087,112091,112103],{"__ignoreMap":145},[149,111531,111532,111534],{"class":151,"line":152},[149,111533,32098],{"class":325},[149,111535,102981],{"class":155},[149,111537,111538,111540,111542,111544],{"class":151,"line":193},[149,111539,32098],{"class":325},[149,111541,33086],{"class":155},[149,111543,33089],{"class":325},[149,111545,33092],{"class":155},[149,111547,111548],{"class":151,"line":235},[149,111549,4119],{"emptyLinePlaceholder":1800},[149,111551,111552],{"class":151,"line":340},[149,111553,4119],{"emptyLinePlaceholder":1800},[149,111555,111556,111558,111560],{"class":151,"line":346},[149,111557,102994],{"class":309},[149,111559,15277],{"class":325},[149,111561,102999],{"class":169},[149,111563,111564],{"class":151,"line":352},[149,111565,111566],{"class":169},"\u003Cmujoco model=\"cartpole\">\n",[149,111568,111569],{"class":151,"line":1021},[149,111570,103009],{"class":169},[149,111572,111573],{"class":151,"line":1035},[149,111574,4119],{"emptyLinePlaceholder":1800},[149,111576,111577],{"class":151,"line":1054},[149,111578,103018],{"class":169},[149,111580,111581],{"class":151,"line":1072},[149,111582,111583],{"class":169},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[149,111585,111586],{"class":151,"line":1090},[149,111587,4119],{"emptyLinePlaceholder":1800},[149,111589,111590],{"class":151,"line":1633},[149,111591,111592],{"class":169},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[149,111594,111595],{"class":151,"line":1644},[149,111596,111597],{"class":169},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[149,111599,111600],{"class":151,"line":3348},[149,111601,111602],{"class":169},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[149,111604,111605],{"class":151,"line":3362},[149,111606,4119],{"emptyLinePlaceholder":1800},[149,111608,111609],{"class":151,"line":3367},[149,111610,111611],{"class":169},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[149,111613,111614],{"class":151,"line":3373},[149,111615,111616],{"class":169},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[149,111618,111619],{"class":151,"line":3394},[149,111620,111621],{"class":169},"        \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",[149,111623,111624],{"class":151,"line":3399},[149,111625,108117],{"class":169},[149,111627,111628],{"class":151,"line":3413},[149,111629,103047],{"class":169},[149,111631,111632],{"class":151,"line":3418},[149,111633,103052],{"class":169},[149,111635,111636],{"class":151,"line":3447},[149,111637,4119],{"emptyLinePlaceholder":1800},[149,111639,111640],{"class":151,"line":3452},[149,111641,108134],{"class":169},[149,111643,111644],{"class":151,"line":3469},[149,111645,111646],{"class":169},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[149,111648,111649],{"class":151,"line":3474},[149,111650,108144],{"class":169},[149,111652,111653],{"class":151,"line":3479},[149,111654,103057],{"class":169},[149,111656,111657],{"class":151,"line":3484},[149,111658,97378],{"class":169},[149,111660,111661],{"class":151,"line":3498},[149,111662,4119],{"emptyLinePlaceholder":1800},[149,111664,111665],{"class":151,"line":3503},[149,111666,4119],{"emptyLinePlaceholder":1800},[149,111668,111669,111671,111674],{"class":151,"line":4296},[149,111670,33653],{"class":325},[149,111672,111673],{"class":162}," get_observation",[149,111675,111676],{"class":155},"(data: mujoco.MjData) -> np.ndarray:\n",[149,111678,111679,111681],{"class":151,"line":4310},[149,111680,5808],{"class":325},[149,111682,111683],{"class":155}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[149,111685,111686],{"class":151,"line":4318},[149,111687,4119],{"emptyLinePlaceholder":1800},[149,111689,111690],{"class":151,"line":4323},[149,111691,4119],{"emptyLinePlaceholder":1800},[149,111693,111694,111696,111699,111702,111704],{"class":151,"line":4329},[149,111695,33653],{"class":325},[149,111697,111698],{"class":162}," compute_reward",[149,111700,111701],{"class":155},"(obs: np.ndarray) -> ",[149,111703,1910],{"class":309},[149,111705,5457],{"class":155},[149,111707,111708,111711,111713,111716,111718],{"class":151,"line":4335},[149,111709,111710],{"class":155},"    cart_x ",[149,111712,166],{"class":325},[149,111714,111715],{"class":155}," obs[",[149,111717,2056],{"class":309},[149,111719,34952],{"class":155},[149,111721,111722,111725,111727,111729,111731],{"class":151,"line":4340},[149,111723,111724],{"class":155},"    pole_angle ",[149,111726,166],{"class":325},[149,111728,111715],{"class":155},[149,111730,830],{"class":309},[149,111732,34952],{"class":155},[149,111734,111735,111737,111739,111741,111743,111745,111747,111749,111751,111753,111755,111757,111759,111761],{"class":151,"line":9663},[149,111736,5808],{"class":325},[149,111738,111476],{"class":309},[149,111740,319],{"class":155},[149,111742,104083],{"class":309},[149,111744,53969],{"class":325},[149,111746,111485],{"class":309},[149,111748,8234],{"class":325},[149,111750,111490],{"class":155},[149,111752,2318],{"class":325},[149,111754,111490],{"class":155},[149,111756,2395],{"class":325},[149,111758,111499],{"class":155},[149,111760,2318],{"class":325},[149,111762,111504],{"class":155},[149,111764,111765],{"class":151,"line":9687},[149,111766,4119],{"emptyLinePlaceholder":1800},[149,111768,111769],{"class":151,"line":9692},[149,111770,4119],{"emptyLinePlaceholder":1800},[149,111772,111773,111775,111777,111779,111781],{"class":151,"line":9698},[149,111774,33653],{"class":325},[149,111776,3692],{"class":162},[149,111778,103078],{"class":155},[149,111780,97366],{"class":309},[149,111782,5457],{"class":155},[149,111784,111785,111787,111789,111791,111793],{"class":151,"line":9725},[149,111786,103087],{"class":155},[149,111788,166],{"class":325},[149,111790,103092],{"class":155},[149,111792,102994],{"class":309},[149,111794,1878],{"class":155},[149,111796,111797,111799,111801],{"class":151,"line":9730},[149,111798,103101],{"class":155},[149,111800,166],{"class":325},[149,111802,103106],{"class":155},[149,111804,111805],{"class":151,"line":9736},[149,111806,4119],{"emptyLinePlaceholder":1800},[149,111808,111809,111811,111813,111815,111817],{"class":151,"line":9748},[149,111810,106748],{"class":155},[149,111812,830],{"class":309},[149,111814,6161],{"class":155},[149,111816,166],{"class":325},[149,111818,111819],{"class":309}," 0.1\n",[149,111821,111822],{"class":151,"line":9760},[149,111823,106761],{"class":155},[149,111825,111826],{"class":151,"line":9772},[149,111827,4119],{"emptyLinePlaceholder":1800},[149,111829,111830,111833,111835],{"class":151,"line":11430},[149,111831,111832],{"class":155},"    total_reward ",[149,111834,166],{"class":325},[149,111836,106440],{"class":309},[149,111838,111839],{"class":151,"line":11455},[149,111840,4119],{"emptyLinePlaceholder":1800},[149,111842,111843,111845,111847,111849,111851,111853,111855],{"class":151,"line":11478},[149,111844,4919],{"class":325},[149,111846,33322],{"class":155},[149,111848,27752],{"class":325},[149,111850,34149],{"class":309},[149,111852,319],{"class":155},[149,111854,8126],{"class":309},[149,111856,32492],{"class":155},[149,111858,111859,111862,111864],{"class":151,"line":11502},[149,111860,111861],{"class":155},"        obs ",[149,111863,166],{"class":325},[149,111865,111866],{"class":155}," get_observation(data)\n",[149,111868,111869,111872,111874,111876,111878],{"class":151,"line":11507},[149,111870,111871],{"class":155},"        pole_angle ",[149,111873,166],{"class":325},[149,111875,111715],{"class":155},[149,111877,830],{"class":309},[149,111879,34952],{"class":155},[149,111881,111882,111885,111887,111889,111891],{"class":151,"line":11512},[149,111883,111884],{"class":155},"        pole_angular_velocity ",[149,111886,166],{"class":325},[149,111888,111715],{"class":155},[149,111890,1939],{"class":309},[149,111892,34952],{"class":155},[149,111894,111895],{"class":151,"line":11517},[149,111896,4119],{"emptyLinePlaceholder":1800},[149,111898,111899,111902,111904,111907,111909,111911,111913,111915,111917],{"class":151,"line":11526},[149,111900,111901],{"class":155},"        action ",[149,111903,166],{"class":325},[149,111905,111906],{"class":309}," 2.0",[149,111908,8234],{"class":325},[149,111910,111499],{"class":155},[149,111912,2344],{"class":325},[149,111914,63556],{"class":309},[149,111916,8234],{"class":325},[149,111918,111919],{"class":155}," pole_angular_velocity\n",[149,111921,111922,111924,111926,111928,111930,111932,111934,111936],{"class":151,"line":11531},[149,111923,111901],{"class":155},[149,111925,166],{"class":325},[149,111927,109126],{"class":155},[149,111929,2395],{"class":325},[149,111931,104083],{"class":309},[149,111933,329],{"class":155},[149,111935,104083],{"class":309},[149,111937,1878],{"class":155},[149,111939,111940],{"class":151,"line":11537},[149,111941,4119],{"emptyLinePlaceholder":1800},[149,111943,111944,111946,111948,111950,111952],{"class":151,"line":11558},[149,111945,108296],{"class":155},[149,111947,2056],{"class":309},[149,111949,6161],{"class":155},[149,111951,166],{"class":325},[149,111953,109149],{"class":155},[149,111955,111956],{"class":151,"line":11564},[149,111957,103196],{"class":155},[149,111959,111960],{"class":151,"line":11578},[149,111961,4119],{"emptyLinePlaceholder":1800},[149,111963,111964,111967,111969],{"class":151,"line":11584},[149,111965,111966],{"class":155},"        reward ",[149,111968,166],{"class":325},[149,111970,111971],{"class":155}," compute_reward(get_observation(data))\n",[149,111973,111974,111977,111979],{"class":151,"line":11611},[149,111975,111976],{"class":155},"        total_reward ",[149,111978,11191],{"class":325},[149,111980,111981],{"class":155}," reward\n",[149,111983,111984],{"class":151,"line":11620},[149,111985,4119],{"emptyLinePlaceholder":1800},[149,111987,111988,111990,111992,111994,111996,111998,112000],{"class":151,"line":11626},[149,111989,4216],{"class":325},[149,111991,33322],{"class":155},[149,111993,2191],{"class":325},[149,111995,7470],{"class":309},[149,111997,103239],{"class":325},[149,111999,5811],{"class":309},[149,112001,5457],{"class":155},[149,112003,112004,112006,112008,112011,112014,112017,112020,112022,112025,112028,112030,112032,112034,112036,112039,112041],{"class":151,"line":11634},[149,112005,36356],{"class":309},[149,112007,319],{"class":155},[149,112009,112010],{"class":169},"\"step:\"",[149,112012,112013],{"class":155},", step, ",[149,112015,112016],{"class":169},"\"obs:\"",[149,112018,112019],{"class":155},", np.round(obs, ",[149,112021,1939],{"class":309},[149,112023,112024],{"class":155},"), ",[149,112026,112027],{"class":169},"\"action:\"",[149,112029,329],{"class":155},[149,112031,33724],{"class":309},[149,112033,319],{"class":155},[149,112035,1910],{"class":309},[149,112037,112038],{"class":155},"(action), ",[149,112040,1939],{"class":309},[149,112042,32203],{"class":155},[149,112044,112045],{"class":151,"line":11639},[149,112046,4119],{"emptyLinePlaceholder":1800},[149,112048,112049,112051,112053,112056,112058,112060,112063,112065],{"class":151,"line":18314},[149,112050,33005],{"class":309},[149,112052,319],{"class":155},[149,112054,112055],{"class":169},"\"total_reward:\"",[149,112057,329],{"class":155},[149,112059,33724],{"class":309},[149,112061,112062],{"class":155},"(total_reward, ",[149,112064,1939],{"class":309},[149,112066,32203],{"class":155},[149,112068,112069,112071,112073,112076,112079,112081],{"class":151,"line":18320},[149,112070,33005],{"class":309},[149,112072,319],{"class":155},[149,112074,112075],{"class":169},"\"final obs:\"",[149,112077,112078],{"class":155},", np.round(get_observation(data), ",[149,112080,1939],{"class":309},[149,112082,32203],{"class":155},[149,112084,112085],{"class":151,"line":18343},[149,112086,4119],{"emptyLinePlaceholder":1800},[149,112088,112089],{"class":151,"line":18349},[149,112090,4119],{"emptyLinePlaceholder":1800},[149,112092,112093,112095,112097,112099,112101],{"class":151,"line":18372},[149,112094,3255],{"class":325},[149,112096,32926],{"class":309},[149,112098,103239],{"class":325},[149,112100,103242],{"class":169},[149,112102,5457],{"class":155},[149,112104,112105],{"class":151,"line":18386},[149,112106,103249],{"class":155},[24,112108,105249],{},[140,112110,112112],{"className":25530,"code":112111,"language":25532,"meta":145,"style":145},"touch ch6_cartpole.py\n",[48,112113,112114],{"__ignoreMap":145},[149,112115,112116,112118],{"class":151,"line":152},[149,112117,102963],{"class":162},[149,112119,112120],{"class":169}," ch6_cartpole.py\n",[24,112122,112123],{},"运行：",[140,112125,112127],{"className":25530,"code":112126,"language":25532,"meta":145,"style":145},"python ch6_cartpole.py\n",[48,112128,112129],{"__ignoreMap":145},[149,112130,112131,112133],{"class":151,"line":152},[149,112132,32086],{"class":162},[149,112134,112120],{"class":169},[19,112136,103252],{"id":103252},[24,112138,112139],{},"构造观测：",[140,112141,112143],{"className":32084,"code":112142,"language":32086,"meta":145,"style":145},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[48,112144,112145,112153],{"__ignoreMap":145},[149,112146,112147,112149,112151],{"class":151,"line":152},[149,112148,33653],{"class":325},[149,112150,111673],{"class":162},[149,112152,111676],{"class":155},[149,112154,112155,112157],{"class":151,"line":193},[149,112156,5808],{"class":325},[149,112158,111683],{"class":155},[24,112160,112161,112164,112165,112167,112168,112170],{},[48,112162,112163],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[48,112166,105709],{}," 2 维，",[48,112169,106039],{}," 2 维，所以 obs 是 4 维。",[24,112172,112173],{},"设置初始角度：",[140,112175,112177],{"className":32084,"code":112176,"language":32086,"meta":145,"style":145},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[48,112178,112179,112191],{"__ignoreMap":145},[149,112180,112181,112183,112185,112187,112189],{"class":151,"line":152},[149,112182,106378],{"class":155},[149,112184,830],{"class":309},[149,112186,6161],{"class":155},[149,112188,166],{"class":325},[149,112190,111819],{"class":309},[149,112192,112193],{"class":151,"line":193},[149,112194,106222],{"class":155},[24,112196,112197],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[24,112199,112200],{},"简单反馈控制：",[140,112202,112204],{"className":32084,"code":112203,"language":32086,"meta":145,"style":145},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[48,112205,112206,112226],{"__ignoreMap":145},[149,112207,112208,112210,112212,112214,112216,112218,112220,112222,112224],{"class":151,"line":152},[149,112209,109121],{"class":155},[149,112211,166],{"class":325},[149,112213,111906],{"class":309},[149,112215,8234],{"class":325},[149,112217,111499],{"class":155},[149,112219,2344],{"class":325},[149,112221,63556],{"class":309},[149,112223,8234],{"class":325},[149,112225,111919],{"class":155},[149,112227,112228,112230,112232,112234,112236,112238,112240,112242],{"class":151,"line":193},[149,112229,109121],{"class":155},[149,112231,166],{"class":325},[149,112233,109126],{"class":155},[149,112235,2395],{"class":325},[149,112237,104083],{"class":309},[149,112239,329],{"class":155},[149,112241,104083],{"class":309},[149,112243,1878],{"class":155},[24,112245,112246],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[24,112248,112249],{},"限制动作：",[140,112251,112253],{"className":32084,"code":112252,"language":32086,"meta":145,"style":145},"np.clip(action, -1.0, 1.0)\n",[48,112254,112255],{"__ignoreMap":145},[149,112256,112257,112260,112262,112264,112266,112268],{"class":151,"line":152},[149,112258,112259],{"class":155},"np.clip(action, ",[149,112261,2395],{"class":325},[149,112263,104083],{"class":309},[149,112265,329],{"class":155},[149,112267,104083],{"class":309},[149,112269,1878],{"class":155},[24,112271,112272,112273,112276],{},"因为 XML 里 ",[48,112274,112275],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[19,112278,103388],{"id":103388},[140,112280,112281],{"className":32084,"code":112142,"language":32086,"meta":145,"style":145},[48,112282,112283,112291],{"__ignoreMap":145},[149,112284,112285,112287,112289],{"class":151,"line":152},[149,112286,33653],{"class":325},[149,112288,111673],{"class":162},[149,112290,111676],{"class":155},[149,112292,112293,112295],{"class":151,"line":193},[149,112294,5808],{"class":325},[149,112296,111683],{"class":155},[24,112298,112299,112300,112303,112304,112307,112308,112311],{},"这段定义了一个函数，用来获取当前观测。",[48,112301,112302],{},"data.qpos.copy()"," 是位置数组副本，",[48,112305,112306],{},"data.qvel.copy()"," 是速度数组副本。",[48,112309,112310],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[24,112313,112314],{},"在本章模型里：",[140,112316,112319],{"className":112317,"code":112318,"language":1655,"meta":145},[1653],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[48,112320,112318],{"__ignoreMap":145},[24,112322,112323],{},"所以返回的 obs 是：",[140,112325,112328],{"className":112326,"code":112327,"language":1655,"meta":145},[1653],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[48,112329,112327],{"__ignoreMap":145},[140,112331,112333],{"className":32084,"code":112332,"language":32086,"meta":145,"style":145},"def compute_reward(obs: np.ndarray) -> float:\n",[48,112334,112335],{"__ignoreMap":145},[149,112336,112337,112339,112341,112343,112345],{"class":151,"line":152},[149,112338,33653],{"class":325},[149,112340,111698],{"class":162},[149,112342,111701],{"class":155},[149,112344,1910],{"class":309},[149,112346,5457],{"class":155},[24,112348,112349,112350,112353],{},"这行定义奖励函数。输入是观测 ",[48,112351,112352],{},"obs","，输出是一个浮点数奖励。",[140,112355,112357],{"className":32084,"code":112356,"language":32086,"meta":145,"style":145},"cart_x = obs[0]\npole_angle = obs[1]\n",[48,112358,112359,112372],{"__ignoreMap":145},[149,112360,112361,112364,112366,112368,112370],{"class":151,"line":152},[149,112362,112363],{"class":155},"cart_x ",[149,112365,166],{"class":325},[149,112367,111715],{"class":155},[149,112369,2056],{"class":309},[149,112371,34952],{"class":155},[149,112373,112374,112377,112379,112381,112383],{"class":151,"line":193},[149,112375,112376],{"class":155},"pole_angle ",[149,112378,166],{"class":325},[149,112380,111715],{"class":155},[149,112382,830],{"class":309},[149,112384,34952],{"class":155},[24,112386,112387,112388,112391,112392,112395],{},"数组索引从 0 开始。",[48,112389,112390],{},"obs[0]"," 是第一个元素，也就是小车位置。",[48,112393,112394],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[140,112397,112398],{"className":32084,"code":111467,"language":32086,"meta":145,"style":145},[48,112399,112400],{"__ignoreMap":145},[149,112401,112402,112404,112406,112408,112410,112412,112414,112416,112418,112420,112422,112424,112426,112428],{"class":151,"line":152},[149,112403,18756],{"class":325},[149,112405,111476],{"class":309},[149,112407,319],{"class":155},[149,112409,104083],{"class":309},[149,112411,53969],{"class":325},[149,112413,111485],{"class":309},[149,112415,8234],{"class":325},[149,112417,111490],{"class":155},[149,112419,2318],{"class":325},[149,112421,111490],{"class":155},[149,112423,2395],{"class":325},[149,112425,111499],{"class":155},[149,112427,2318],{"class":325},[149,112429,111504],{"class":155},[24,112431,112432,112433,112436,112437,112440],{},"这行计算奖励。",[48,112434,112435],{},"cart_x * cart_x"," 是小车位置的平方，",[48,112438,112439],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[140,112442,112444],{"className":32084,"code":112443,"language":32086,"meta":145,"style":145},"data.qpos[1] = 0.1\n",[48,112445,112446],{"__ignoreMap":145},[149,112447,112448,112450,112452,112454,112456],{"class":151,"line":152},[149,112449,106378],{"class":155},[149,112451,830],{"class":309},[149,112453,6161],{"class":155},[149,112455,166],{"class":325},[149,112457,111819],{"class":309},[24,112459,112460,112461,112463,112464,112466],{},"手动设置杆子的初始角度。因为 ",[48,112462,107135],{}," 是小车位置，",[48,112465,107138],{}," 是杆子角度，所以这里改的是杆子。",[140,112468,112469],{"className":32084,"code":106222,"language":32086,"meta":145,"style":145},[48,112470,112471],{"__ignoreMap":145},[149,112472,112473],{"class":151,"line":152},[149,112474,106222],{"class":155},[24,112476,107181,112477,112479],{},[48,112478,105709],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[140,112481,112483],{"className":32084,"code":112482,"language":32086,"meta":145,"style":145},"total_reward = 0.0\n",[48,112484,112485],{"__ignoreMap":145},[149,112486,112487,112490,112492],{"class":151,"line":152},[149,112488,112489],{"class":155},"total_reward ",[149,112491,166],{"class":325},[149,112493,106440],{"class":309},[24,112495,112496],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[140,112498,112500],{"className":32084,"code":112499,"language":32086,"meta":145,"style":145},"for step in range(1000):\n",[48,112501,112502],{"__ignoreMap":145},[149,112503,112504,112506,112508,112510,112512,112514,112516],{"class":151,"line":152},[149,112505,4743],{"class":325},[149,112507,33322],{"class":155},[149,112509,27752],{"class":325},[149,112511,34149],{"class":309},[149,112513,319],{"class":155},[149,112515,8126],{"class":309},[149,112517,32492],{"class":155},[24,112519,112520,112521,112523],{},"循环 1000 步。",[48,112522,108813],{}," 是当前步数，从 0 到 999。",[140,112525,112527],{"className":32084,"code":112526,"language":32086,"meta":145,"style":145},"obs = get_observation(data)\n",[48,112528,112529],{"__ignoreMap":145},[149,112530,112531,112534,112536],{"class":151,"line":152},[149,112532,112533],{"class":155},"obs ",[149,112535,166],{"class":325},[149,112537,111866],{"class":155},[24,112539,112540,112541,30091],{},"读取当前状态，保存到 ",[48,112542,112352],{},[140,112544,112546],{"className":32084,"code":112545,"language":32086,"meta":145,"style":145},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[48,112547,112548,112560],{"__ignoreMap":145},[149,112549,112550,112552,112554,112556,112558],{"class":151,"line":152},[149,112551,112376],{"class":155},[149,112553,166],{"class":325},[149,112555,111715],{"class":155},[149,112557,830],{"class":309},[149,112559,34952],{"class":155},[149,112561,112562,112565,112567,112569,112571],{"class":151,"line":193},[149,112563,112564],{"class":155},"pole_angular_velocity ",[149,112566,166],{"class":325},[149,112568,111715],{"class":155},[149,112570,1939],{"class":309},[149,112572,34952],{"class":155},[24,112574,112575,112576,112579,112580,30091],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[48,112577,112578],{},"obs[3]","？因为 obs 的顺序是 ",[48,112581,112582],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[140,112584,112586],{"className":32084,"code":112585,"language":32086,"meta":145,"style":145},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[48,112587,112588],{"__ignoreMap":145},[149,112589,112590,112592,112594,112596,112598,112600,112602,112604,112606],{"class":151,"line":152},[149,112591,109121],{"class":155},[149,112593,166],{"class":325},[149,112595,111906],{"class":309},[149,112597,8234],{"class":325},[149,112599,111499],{"class":155},[149,112601,2344],{"class":325},[149,112603,63556],{"class":309},[149,112605,8234],{"class":325},[149,112607,111919],{"class":155},[24,112609,112610,112611,102698,112613,112615],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[48,112612,106939],{},[48,112614,37035],{}," 是人为设置的系数，不是固定公式。",[140,112617,112619],{"className":32084,"code":112618,"language":32086,"meta":145,"style":145},"action = np.clip(action, -1.0, 1.0)\n",[48,112620,112621],{"__ignoreMap":145},[149,112622,112623,112625,112627,112629,112631,112633,112635,112637],{"class":151,"line":152},[149,112624,109121],{"class":155},[149,112626,166],{"class":325},[149,112628,109126],{"class":155},[149,112630,2395],{"class":325},[149,112632,104083],{"class":309},[149,112634,329],{"class":155},[149,112636,104083],{"class":309},[149,112638,1878],{"class":155},[24,112640,112641],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[140,112643,112644],{"className":32084,"code":111452,"language":32086,"meta":145,"style":145},[48,112645,112646],{"__ignoreMap":145},[149,112647,112648,112650,112652,112654,112656],{"class":151,"line":152},[149,112649,107550],{"class":155},[149,112651,2056],{"class":309},[149,112653,6161],{"class":155},[149,112655,166],{"class":325},[149,112657,109149],{"class":155},[24,112659,112660],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[140,112662,112663],{"className":32084,"code":106184,"language":32086,"meta":145,"style":145},[48,112664,112665],{"__ignoreMap":145},[149,112666,112667],{"class":151,"line":152},[149,112668,106184],{"class":155},[24,112670,112671,112672,112674],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[48,112673,107805],{}," 计算小车和杆子的下一刻状态。",[140,112676,112678],{"className":32084,"code":112677,"language":32086,"meta":145,"style":145},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[48,112679,112680,112689],{"__ignoreMap":145},[149,112681,112682,112685,112687],{"class":151,"line":152},[149,112683,112684],{"class":155},"reward ",[149,112686,166],{"class":325},[149,112688,111971],{"class":155},[149,112690,112691,112693,112695],{"class":151,"line":193},[149,112692,112489],{"class":155},[149,112694,11191],{"class":325},[149,112696,111981],{"class":155},[24,112698,112699,112700,112702,112703,112706,112707,30091],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[48,112701,11191],{}," 是简写，",[48,112704,112705],{},"total_reward += reward"," 等价于 ",[48,112708,112709],{},"total_reward = total_reward + reward",[140,112711,112713],{"className":32084,"code":112712,"language":32086,"meta":145,"style":145},"if step % 100 == 0:\n",[48,112714,112715],{"__ignoreMap":145},[149,112716,112717,112719,112721,112723,112725,112727,112729],{"class":151,"line":152},[149,112718,3255],{"class":325},[149,112720,33322],{"class":155},[149,112722,2191],{"class":325},[149,112724,7470],{"class":309},[149,112726,103239],{"class":325},[149,112728,5811],{"class":309},[149,112730,5457],{"class":155},[24,112732,112733,112735,112736,112739],{},[48,112734,2191],{}," 是取余数。",[48,112737,112738],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[140,112741,112743],{"className":32084,"code":112742,"language":32086,"meta":145,"style":145},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[48,112744,112745],{"__ignoreMap":145},[149,112746,112747,112749,112751,112753,112755,112757,112759,112761,112763,112765,112767,112769,112771,112773,112775,112777],{"class":151,"line":152},[149,112748,32121],{"class":309},[149,112750,319],{"class":155},[149,112752,112010],{"class":169},[149,112754,112013],{"class":155},[149,112756,112016],{"class":169},[149,112758,112019],{"class":155},[149,112760,1939],{"class":309},[149,112762,112024],{"class":155},[149,112764,112027],{"class":169},[149,112766,329],{"class":155},[149,112768,33724],{"class":309},[149,112770,319],{"class":155},[149,112772,1910],{"class":309},[149,112774,112038],{"class":155},[149,112776,1939],{"class":309},[149,112778,32203],{"class":155},[24,112780,112781,112782,112785,112786,112789],{},"打印当前步数、观测和动作。",[48,112783,112784],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[48,112787,112788],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112791,103996],{"id":103995},[24,112793,112794],{},"观测向量:",[140,112796,112799],{"className":112797,"code":112798,"language":1655,"meta":145},[1653],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[48,112800,112798],{"__ignoreMap":145},[24,112802,112803],{},"控制器是教学用的简单线性反馈，不保证最优。",[24,112805,112806],{},"每隔 100 步会打印一次：",[140,112808,112811],{"className":112809,"code":112810,"language":1655,"meta":145},[1653],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[48,112812,112810],{"__ignoreMap":145},[24,112814,112815],{},"重点观察：",[125,112817,112818,112824,112829],{},[45,112819,112820,112823],{},[48,112821,112822],{},"pole_angle"," 是否越来越大。",[45,112825,112826,112828],{},[48,112827,111405],{}," 是否跑得太远。",[45,112830,112831,112832,84220,112834,30091],{},"action 是否经常被 clip 到 ",[48,112833,105594],{},[48,112835,830],{},[24,112837,112838],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112840,104028],{"id":104027},[125,112842,112843,112849,112852,112858,112868,112874,112877],{},[45,112844,112845,112846,30091],{},"把初始角度改为 ",[48,112847,112848],{},"data.qpos[1] = 0.3",[45,112850,112851],{},"重新运行，观察控制是否变差。",[45,112853,112854,112855,112857],{},"把 actuator ",[48,112856,108746],{}," 改小。",[45,112859,112860,112861,112864,112865,30091],{},"打印 ",[48,112862,112863],{},"model.nq, model.nv, model.nu","，应为 ",[48,112866,112867],{},"2 2 1",[45,112869,112870,112871,112873],{},"把 reward 里的 ",[48,112872,112439],{}," 系数改大，观察总奖励变化。",[45,112875,112876],{},"把控制器改成反号，观察杆子是否更容易倒。",[45,112878,112879],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112881,104133],{"id":104132},[19,112883,112884],{"id":112884},"杆子方向和预期不一致",[24,112886,104076,112887,112889,112890,112892],{},[48,112888,107918],{}," 和 capsule 的 ",[48,112891,104855],{},"，必要时用 viewer 可视化确认。",[19,112894,112895],{"id":112895},"控制器越控越倒",[24,112897,112898],{},"说明反馈符号可能反了，尝试:",[140,112900,112902],{"className":32084,"code":112901,"language":32086,"meta":145,"style":145},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[48,112903,112904],{"__ignoreMap":145},[149,112905,112906,112908,112910,112912,112914,112916,112918,112920,112922,112924],{"class":151,"line":152},[149,112907,109121],{"class":155},[149,112909,166],{"class":325},[149,112911,53969],{"class":325},[149,112913,106939],{"class":309},[149,112915,8234],{"class":325},[149,112917,111499],{"class":155},[149,112919,2395],{"class":325},[149,112921,63556],{"class":309},[149,112923,8234],{"class":325},[149,112925,111919],{"class":155},[19,112927,112928],{"id":112928},"小车飞走",[24,112930,112931,112932,112934,112935,112938],{},"降低 ",[48,112933,108746],{}," 或缩小 ",[48,112936,112937],{},"action"," 的 clip 范围。",[19,112940,112942,112944],{"id":112941},"obs3-为什么是杆子角速度",[48,112943,112578],{}," 为什么是杆子角速度",[24,112946,112947],{},"因为这个模型里：",[140,112949,112952],{"className":112950,"code":112951,"language":1655,"meta":145},[1653],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[48,112953,112951],{"__ignoreMap":145},[24,112955,111426],{},[140,112957,112960],{"className":112958,"code":112959,"language":1655,"meta":145},[1653],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[48,112961,112959],{"__ignoreMap":145},[19,112963,112965],{"id":112964},"reward-变成负数是否错误","reward 变成负数是否错误",[24,112967,112968],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112970,104287],{"id":104286},[24,112972,112973],{},"一个控制任务通常包含：",[125,112975,112976,112979,112987,112992,112995],{},[45,112977,112978],{},"模型：Cartpole 的 body、joint、actuator。",[45,112980,112981,112982,2077,112984,112986],{},"观测：从 ",[48,112983,105709],{},[48,112985,106039],{}," 里取状态。",[45,112988,112989,112990,30091],{},"动作：写入 ",[48,112991,102756],{},[45,112993,112994],{},"奖励：根据任务目标打分。",[45,112996,112997],{},"循环：obs -> action -> step -> reward。",[24,112999,113000],{},"这就是后面 Gymnasium 环境的基本骨架。",[1783,113002,105965],{},{"title":145,"searchDepth":193,"depth":193,"links":113004},[113005,113006,113007,113012,113016,113017,113018,113026],{"id":102326,"depth":193,"text":102327},{"id":102449,"depth":193,"text":102450},{"id":102724,"depth":193,"text":102725,"children":113008},[113009,113010,113011],{"id":111379,"depth":235,"text":111380},{"id":111444,"depth":235,"text":111445},{"id":111460,"depth":235,"text":111461},{"id":102932,"depth":193,"text":102933,"children":113013},[113014,113015],{"id":103252,"depth":235,"text":103252},{"id":103388,"depth":235,"text":103388},{"id":103995,"depth":193,"text":103996},{"id":104027,"depth":193,"text":104028},{"id":104132,"depth":193,"text":104133,"children":113019},[113020,113021,113022,113023,113025],{"id":112884,"depth":235,"text":112884},{"id":112895,"depth":235,"text":112895},{"id":112928,"depth":235,"text":112928},{"id":112941,"depth":235,"text":113024},"obs[3] 为什么是杆子角速度",{"id":112964,"depth":235,"text":112965},{"id":104286,"depth":193,"text":104287},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111115,"description":145},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113033,"title":113034,"body":113035,"description":145,"extension":1798,"meta":115049,"navigation":1800,"path":115050,"seo":115051,"stem":115052,"__hash__":115053},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113036,"toc":115025},[113037,113040,113042,113045,113047,113064,113067,113070,113076,113079,113081,113083,113107,113109,113123,113125,113166,113168,113186,113188,113191,113197,113200,113228,113232,113238,113263,113266,113297,113304,113307,113310,113316,113319,113325,113328,113334,113338,113341,113366,113369,113371,114131,114133,114145,114147,114158,114160,114163,114180,114183,114185,114196,114199,114201,114247,114250,114263,114266,114348,114351,114353,114369,114379,114392,114395,114434,114444,114455,114465,114478,114481,114510,114513,114523,114526,114532,114549,114560,114562,114568,114585,114596,114617,114620,114632,114635,114656,114659,114667,114675,114692,114695,114764,114771,114779,114782,114795,114802,114804,114807,114813,114816,114819,114825,114831,114833,114873,114875,114881,114890,114893,114895,114915,114918,114921,114927,114931,114933,114960,114963,114966,114993,114999,115002,115005,115007,115010,115013,115019,115022],[10,113038,113034],{"id":113039},"_7控制任务reacher-机械臂到达目标",[14,113041,102327],{"id":102326},[24,113043,113044],{},"本章搭建一个二维两关节 reacher 任务。",[24,113046,106010],{},[125,113048,113049,113052,113055,113058,113061],{},[45,113050,113051],{},"两个 hinge joint",[45,113053,113054],{},"两个 motor actuator",[45,113056,113057],{},"site 作为末端点和目标点",[45,113059,113060],{},"根据末端和目标距离设计 reward",[45,113062,113063],{},"构造机械臂任务的基本形式",[24,113065,113066],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[24,113068,113069],{},"Reacher 任务可以理解为：",[140,113071,113074],{"className":113072,"code":113073,"language":1655,"meta":145},[1653],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[48,113075,113073],{"__ignoreMap":145},[24,113077,113078],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113080,102450],{"id":102449},[24,113082,102453],{},[140,113084,113085],{"className":25530,"code":106067,"language":25532,"meta":145,"style":145},[48,113086,113087],{"__ignoreMap":145},[149,113088,113089,113091,113093,113095,113097,113099,113101,113103,113105],{"class":151,"line":152},[149,113090,26285],{"class":162},[149,113092,28024],{"class":169},[149,113094,25542],{"class":169},[149,113096,28109],{"class":309},[149,113098,106082],{"class":169},[149,113100,102478],{"class":169},[149,113102,104181],{"class":169},[149,113104,102494],{"class":169},[149,113106,106091],{"class":169},[24,113108,104499],{},[140,113110,113111],{"className":25530,"code":102599,"language":25532,"meta":145,"style":145},[48,113112,113113],{"__ignoreMap":145},[149,113114,113115,113117,113119,113121],{"class":151,"line":152},[149,113116,25539],{"class":162},[149,113118,25542],{"class":169},[149,113120,102610],{"class":169},[149,113122,102613],{"class":169},[24,113124,104516],{},[140,113126,113128],{"className":25530,"code":113127,"language":25532,"meta":145,"style":145},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[48,113129,113130,113147,113156],{"__ignoreMap":145},[149,113131,113132,113134,113136,113138,113141,113143,113145],{"class":151,"line":152},[149,113133,32036],{"class":162},[149,113135,30882],{"class":169},[149,113137,26824],{"class":309},[149,113139,113140],{"class":169}," mujoco-reacher",[149,113142,102655],{"class":169},[149,113144,102658],{"class":309},[149,113146,102661],{"class":309},[149,113148,113149,113151,113153],{"class":151,"line":193},[149,113150,32036],{"class":162},[149,113152,102668],{"class":169},[149,113154,113155],{"class":169}," mujoco-reacher\n",[149,113157,113158,113160,113162,113164],{"class":151,"line":235},[149,113159,25539],{"class":162},[149,113161,25542],{"class":169},[149,113163,102610],{"class":169},[149,113165,102613],{"class":169},[24,113167,102684],{},[125,113169,113170,113173,113176],{},[45,113171,113172],{},"本章使用低维状态，不使用图像输入。",[45,113174,113175],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[45,113177,113178,113179,2077,113181,2077,113183,113185],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[48,113180,105709],{},[48,113182,106039],{},[48,113184,105359],{}," 的方法一致。",[14,113187,102725],{"id":102724},[24,113189,113190],{},"Reacher 任务核心:",[140,113192,113195],{"className":113193,"code":113194,"language":1655,"meta":145},[1653],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[48,113196,113194],{"__ignoreMap":145},[24,113198,113199],{},"读取 site 世界坐标:",[140,113201,113203],{"className":32084,"code":113202,"language":32086,"meta":145,"style":145},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[48,113204,113205,113218],{"__ignoreMap":145},[149,113206,113207,113209,113211,113213,113216],{"class":151,"line":152},[149,113208,105313],{"class":155},[149,113210,166],{"class":325},[149,113212,105084],{"class":155},[149,113214,113215],{"class":169},"\"tip\"",[149,113217,1878],{"class":155},[149,113219,113220,113223,113225],{"class":151,"line":193},[149,113221,113222],{"class":155},"tip_pos ",[149,113224,166],{"class":325},[149,113226,113227],{"class":155}," data.site_xpos[site_id]\n",[19,113229,113231],{"id":113230},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[24,113233,113234,113235,113237],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[48,113236,105709],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[140,113239,113241],{"className":32084,"code":113240,"language":32086,"meta":145,"style":145},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[48,113242,113243,113253],{"__ignoreMap":145},[149,113244,113245,113248,113250],{"class":151,"line":152},[149,113246,113247],{"class":155},"tip ",[149,113249,166],{"class":325},[149,113251,113252],{"class":155}," data.site_xpos[tip_site_id]\n",[149,113254,113255,113258,113260],{"class":151,"line":193},[149,113256,113257],{"class":155},"target ",[149,113259,166],{"class":325},[149,113261,113262],{"class":155}," data.site_xpos[target_site_id]\n",[24,113264,113265],{},"这样 reward 就很容易写：",[140,113267,113269],{"className":32084,"code":113268,"language":32086,"meta":145,"style":145},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[48,113270,113271,113286],{"__ignoreMap":145},[149,113272,113273,113276,113278,113281,113283],{"class":151,"line":152},[149,113274,113275],{"class":155},"dist ",[149,113277,166],{"class":325},[149,113279,113280],{"class":155}," np.linalg.norm(tip ",[149,113282,2395],{"class":325},[149,113284,113285],{"class":155}," target)\n",[149,113287,113288,113290,113292,113294],{"class":151,"line":193},[149,113289,112684],{"class":155},[149,113291,166],{"class":325},[149,113293,53969],{"class":325},[149,113295,113296],{"class":155},"dist\n",[24,113298,113299,113300,113303],{},"距离越小，",[48,113301,113302],{},"-dist"," 越接近 0，奖励越高。",[19,113305,113306],{"id":113306},"两关节机械臂的状态",[24,113308,113309],{},"这个模型有两个 hinge joint：",[140,113311,113314],{"className":113312,"code":113313,"language":1655,"meta":145},[1653],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[48,113315,113313],{"__ignoreMap":145},[24,113317,113318],{},"再加上末端和目标位置：",[140,113320,113323],{"className":113321,"code":113322,"language":1655,"meta":145},[1653],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[48,113324,113322],{"__ignoreMap":145},[24,113326,113327],{},"总维度：",[140,113329,113332],{"className":113330,"code":113331,"language":1655,"meta":145},[1653],"2 + 2 + 3 + 3 = 10\n",[48,113333,113331],{"__ignoreMap":145},[19,113335,113337],{"id":113336},"为什么-gravity-是-0","为什么 gravity 是 0",[24,113339,113340],{},"本章把重力设为：",[140,113342,113344],{"className":54765,"code":113343,"language":54767,"meta":145,"style":145},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[48,113345,113346],{"__ignoreMap":145},[149,113347,113348,113350,113352,113354,113356,113358,113360,113362,113364],{"class":151,"line":152},[149,113349,156],{"class":155},[149,113351,70850],{"class":159},[149,113353,102874],{"class":162},[149,113355,166],{"class":155},[149,113357,102879],{"class":169},[149,113359,102882],{"class":162},[149,113361,166],{"class":155},[149,113363,105450],{"class":169},[149,113365,102824],{"class":155},[24,113367,113368],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113370,102933],{"id":102932},[140,113372,113374],{"className":32084,"code":113373,"language":32086,"meta":145,"style":145},"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",[48,113375,113376,113382,113392,113396,113400,113408,113413,113418,113422,113426,113431,113436,113440,113445,113450,113455,113459,113464,113469,113474,113479,113483,113487,113491,113495,113499,113504,113509,113513,113517,113521,113525,113529,113544,113553,113565,113588,113595,113599,113603,113613,113627,113641,113648,113652,113656,113670,113682,113694,113707,113722,113739,113743,113747,113759,113771,113779,113787,113791,113807,113812,113825,113838,113853,113857,113892,113924,113928,113932,113941,113945,113961,113971,113982,113998,114014,114030,114046,114050,114068,114088,114107,114111,114115,114127],{"__ignoreMap":145},[149,113377,113378,113380],{"class":151,"line":152},[149,113379,32098],{"class":325},[149,113381,102981],{"class":155},[149,113383,113384,113386,113388,113390],{"class":151,"line":193},[149,113385,32098],{"class":325},[149,113387,33086],{"class":155},[149,113389,33089],{"class":325},[149,113391,33092],{"class":155},[149,113393,113394],{"class":151,"line":235},[149,113395,4119],{"emptyLinePlaceholder":1800},[149,113397,113398],{"class":151,"line":340},[149,113399,4119],{"emptyLinePlaceholder":1800},[149,113401,113402,113404,113406],{"class":151,"line":346},[149,113403,102994],{"class":309},[149,113405,15277],{"class":325},[149,113407,102999],{"class":169},[149,113409,113410],{"class":151,"line":352},[149,113411,113412],{"class":169},"\u003Cmujoco model=\"two_link_reacher\">\n",[149,113414,113415],{"class":151,"line":1021},[149,113416,113417],{"class":169},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[149,113419,113420],{"class":151,"line":1035},[149,113421,4119],{"emptyLinePlaceholder":1800},[149,113423,113424],{"class":151,"line":1054},[149,113425,103018],{"class":169},[149,113427,113428],{"class":151,"line":1072},[149,113429,113430],{"class":169},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[149,113432,113433],{"class":151,"line":1090},[149,113434,113435],{"class":169},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[149,113437,113438],{"class":151,"line":1633},[149,113439,4119],{"emptyLinePlaceholder":1800},[149,113441,113442],{"class":151,"line":1644},[149,113443,113444],{"class":169},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[149,113446,113447],{"class":151,"line":3348},[149,113448,113449],{"class":169},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[149,113451,113452],{"class":151,"line":3362},[149,113453,113454],{"class":169},"      \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",[149,113456,113457],{"class":151,"line":3367},[149,113458,4119],{"emptyLinePlaceholder":1800},[149,113460,113461],{"class":151,"line":3373},[149,113462,113463],{"class":169},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[149,113465,113466],{"class":151,"line":3394},[149,113467,113468],{"class":169},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[149,113470,113471],{"class":151,"line":3399},[149,113472,113473],{"class":169},"        \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",[149,113475,113476],{"class":151,"line":3413},[149,113477,113478],{"class":169},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[149,113480,113481],{"class":151,"line":3418},[149,113482,108117],{"class":169},[149,113484,113485],{"class":151,"line":3447},[149,113486,103047],{"class":169},[149,113488,113489],{"class":151,"line":3452},[149,113490,103052],{"class":169},[149,113492,113493],{"class":151,"line":3469},[149,113494,4119],{"emptyLinePlaceholder":1800},[149,113496,113497],{"class":151,"line":3474},[149,113498,108134],{"class":169},[149,113500,113501],{"class":151,"line":3479},[149,113502,113503],{"class":169},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[149,113505,113506],{"class":151,"line":3484},[149,113507,113508],{"class":169},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[149,113510,113511],{"class":151,"line":3498},[149,113512,108144],{"class":169},[149,113514,113515],{"class":151,"line":3503},[149,113516,103057],{"class":169},[149,113518,113519],{"class":151,"line":4296},[149,113520,97378],{"class":169},[149,113522,113523],{"class":151,"line":4310},[149,113524,4119],{"emptyLinePlaceholder":1800},[149,113526,113527],{"class":151,"line":4318},[149,113528,4119],{"emptyLinePlaceholder":1800},[149,113530,113531,113533,113536,113539,113541],{"class":151,"line":4323},[149,113532,33653],{"class":325},[149,113534,113535],{"class":162}," site_position",[149,113537,113538],{"class":155},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[149,113540,3027],{"class":309},[149,113542,113543],{"class":155},") -> np.ndarray:\n",[149,113545,113546,113548,113550],{"class":151,"line":4329},[149,113547,105079],{"class":155},[149,113549,166],{"class":325},[149,113551,113552],{"class":155}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[149,113554,113555,113557,113559,113561,113563],{"class":151,"line":4335},[149,113556,4819],{"class":325},[149,113558,105128],{"class":155},[149,113560,156],{"class":325},[149,113562,5811],{"class":309},[149,113564,5457],{"class":155},[149,113566,113567,113569,113571,113573,113575,113578,113580,113582,113584,113586],{"class":151,"line":4340},[149,113568,105111],{"class":325},[149,113570,105114],{"class":309},[149,113572,319],{"class":155},[149,113574,1921],{"class":325},[149,113576,113577],{"class":169},"\"site not found: ",[149,113579,2756],{"class":309},[149,113581,81491],{"class":155},[149,113583,2805],{"class":309},[149,113585,2115],{"class":169},[149,113587,1878],{"class":155},[149,113589,113590,113592],{"class":151,"line":9663},[149,113591,5808],{"class":325},[149,113593,113594],{"class":155}," data.site_xpos[site_id].copy()\n",[149,113596,113597],{"class":151,"line":9687},[149,113598,4119],{"emptyLinePlaceholder":1800},[149,113600,113601],{"class":151,"line":9692},[149,113602,4119],{"emptyLinePlaceholder":1800},[149,113604,113605,113607,113610],{"class":151,"line":9698},[149,113606,33653],{"class":325},[149,113608,113609],{"class":162}," get_obs",[149,113611,113612],{"class":155},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[149,113614,113615,113618,113620,113623,113625],{"class":151,"line":9725},[149,113616,113617],{"class":155},"    tip ",[149,113619,166],{"class":325},[149,113621,113622],{"class":155}," site_position(model, data, ",[149,113624,113215],{"class":169},[149,113626,1878],{"class":155},[149,113628,113629,113632,113634,113636,113639],{"class":151,"line":9730},[149,113630,113631],{"class":155},"    target ",[149,113633,166],{"class":325},[149,113635,113622],{"class":155},[149,113637,113638],{"class":169},"\"target\"",[149,113640,1878],{"class":155},[149,113642,113643,113645],{"class":151,"line":9736},[149,113644,5808],{"class":325},[149,113646,113647],{"class":155}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[149,113649,113650],{"class":151,"line":9748},[149,113651,4119],{"emptyLinePlaceholder":1800},[149,113653,113654],{"class":151,"line":9760},[149,113655,4119],{"emptyLinePlaceholder":1800},[149,113657,113658,113660,113663,113666,113668],{"class":151,"line":9772},[149,113659,33653],{"class":325},[149,113661,113662],{"class":162}," reward",[149,113664,113665],{"class":155},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[149,113667,1910],{"class":309},[149,113669,5457],{"class":155},[149,113671,113672,113674,113676,113678,113680],{"class":151,"line":11430},[149,113673,113617],{"class":155},[149,113675,166],{"class":325},[149,113677,113622],{"class":155},[149,113679,113215],{"class":169},[149,113681,1878],{"class":155},[149,113683,113684,113686,113688,113690,113692],{"class":151,"line":11455},[149,113685,113631],{"class":155},[149,113687,166],{"class":325},[149,113689,113622],{"class":155},[149,113691,113638],{"class":169},[149,113693,1878],{"class":155},[149,113695,113696,113699,113701,113703,113705],{"class":151,"line":11478},[149,113697,113698],{"class":155},"    dist ",[149,113700,166],{"class":325},[149,113702,113280],{"class":155},[149,113704,2395],{"class":325},[149,113706,113285],{"class":155},[149,113708,113709,113712,113714,113717,113719],{"class":151,"line":11502},[149,113710,113711],{"class":155},"    control_cost ",[149,113713,166],{"class":325},[149,113715,113716],{"class":309}," 0.01",[149,113718,8234],{"class":325},[149,113720,113721],{"class":155}," np.sum(np.square(data.ctrl))\n",[149,113723,113724,113726,113728,113730,113732,113734,113736],{"class":151,"line":11507},[149,113725,5808],{"class":325},[149,113727,111476],{"class":309},[149,113729,319],{"class":155},[149,113731,2395],{"class":325},[149,113733,113275],{"class":155},[149,113735,2395],{"class":325},[149,113737,113738],{"class":155}," control_cost)\n",[149,113740,113741],{"class":151,"line":11512},[149,113742,4119],{"emptyLinePlaceholder":1800},[149,113744,113745],{"class":151,"line":11517},[149,113746,4119],{"emptyLinePlaceholder":1800},[149,113748,113749,113751,113753,113755,113757],{"class":151,"line":11526},[149,113750,33653],{"class":325},[149,113752,3692],{"class":162},[149,113754,103078],{"class":155},[149,113756,97366],{"class":309},[149,113758,5457],{"class":155},[149,113760,113761,113763,113765,113767,113769],{"class":151,"line":11531},[149,113762,103087],{"class":155},[149,113764,166],{"class":325},[149,113766,103092],{"class":155},[149,113768,102994],{"class":309},[149,113770,1878],{"class":155},[149,113772,113773,113775,113777],{"class":151,"line":11537},[149,113774,103101],{"class":155},[149,113776,166],{"class":325},[149,113778,103106],{"class":155},[149,113780,113781,113783,113785],{"class":151,"line":11558},[149,113782,111832],{"class":155},[149,113784,166],{"class":325},[149,113786,106440],{"class":309},[149,113788,113789],{"class":151,"line":11564},[149,113790,4119],{"emptyLinePlaceholder":1800},[149,113792,113793,113795,113797,113799,113801,113803,113805],{"class":151,"line":11578},[149,113794,4919],{"class":325},[149,113796,33322],{"class":155},[149,113798,27752],{"class":325},[149,113800,34149],{"class":309},[149,113802,319],{"class":155},[149,113804,66761],{"class":309},[149,113806,32492],{"class":155},[149,113808,113809],{"class":151,"line":11584},[149,113810,113811],{"class":155},"        mujoco.mj_forward(model, data)\n",[149,113813,113814,113817,113819,113821,113823],{"class":151,"line":11611},[149,113815,113816],{"class":155},"        tip ",[149,113818,166],{"class":325},[149,113820,113622],{"class":155},[149,113822,113215],{"class":169},[149,113824,1878],{"class":155},[149,113826,113827,113830,113832,113834,113836],{"class":151,"line":11620},[149,113828,113829],{"class":155},"        target ",[149,113831,166],{"class":325},[149,113833,113622],{"class":155},[149,113835,113638],{"class":169},[149,113837,1878],{"class":155},[149,113839,113840,113843,113845,113848,113850],{"class":151,"line":11626},[149,113841,113842],{"class":155},"        error ",[149,113844,166],{"class":325},[149,113846,113847],{"class":155}," target ",[149,113849,2395],{"class":325},[149,113851,113852],{"class":155}," tip\n",[149,113854,113855],{"class":151,"line":11634},[149,113856,4119],{"emptyLinePlaceholder":1800},[149,113858,113859,113861,113863,113865,113867,113870,113872,113874,113877,113879,113882,113884,113886,113888,113890],{"class":151,"line":11639},[149,113860,108296],{"class":155},[149,113862,2056],{"class":309},[149,113864,6161],{"class":155},[149,113866,166],{"class":325},[149,113868,113869],{"class":155}," np.clip(",[149,113871,106939],{"class":309},[149,113873,8234],{"class":325},[149,113875,113876],{"class":155}," error[",[149,113878,1045],{"class":309},[149,113880,113881],{"class":155},"], ",[149,113883,2395],{"class":325},[149,113885,104083],{"class":309},[149,113887,329],{"class":155},[149,113889,104083],{"class":309},[149,113891,1878],{"class":155},[149,113893,113894,113896,113898,113900,113902,113904,113906,113908,113910,113912,113914,113916,113918,113920,113922],{"class":151,"line":18314},[149,113895,108296],{"class":155},[149,113897,830],{"class":309},[149,113899,6161],{"class":155},[149,113901,166],{"class":325},[149,113903,113869],{"class":155},[149,113905,106939],{"class":309},[149,113907,8234],{"class":325},[149,113909,113876],{"class":155},[149,113911,2056],{"class":309},[149,113913,113881],{"class":155},[149,113915,2395],{"class":325},[149,113917,104083],{"class":309},[149,113919,329],{"class":155},[149,113921,104083],{"class":309},[149,113923,1878],{"class":155},[149,113925,113926],{"class":151,"line":18320},[149,113927,4119],{"emptyLinePlaceholder":1800},[149,113929,113930],{"class":151,"line":18343},[149,113931,103196],{"class":155},[149,113933,113934,113936,113938],{"class":151,"line":18349},[149,113935,111976],{"class":155},[149,113937,11191],{"class":325},[149,113939,113940],{"class":155}," reward(model, data)\n",[149,113942,113943],{"class":151,"line":18372},[149,113944,4119],{"emptyLinePlaceholder":1800},[149,113946,113947,113949,113951,113953,113955,113957,113959],{"class":151,"line":18386},[149,113948,4216],{"class":325},[149,113950,33322],{"class":155},[149,113952,2191],{"class":325},[149,113954,7470],{"class":309},[149,113956,103239],{"class":325},[149,113958,5811],{"class":309},[149,113960,5457],{"class":155},[149,113962,113963,113966,113968],{"class":151,"line":18406},[149,113964,113965],{"class":155},"            obs ",[149,113967,166],{"class":325},[149,113969,113970],{"class":155}," get_obs(model, data)\n",[149,113972,113973,113975,113977,113979],{"class":151,"line":18412},[149,113974,36356],{"class":309},[149,113976,319],{"class":155},[149,113978,112010],{"class":169},[149,113980,113981],{"class":155},", step)\n",[149,113983,113984,113986,113988,113991,113994,113996],{"class":151,"line":18423},[149,113985,36356],{"class":309},[149,113987,319],{"class":155},[149,113989,113990],{"class":169},"\"  tip:\"",[149,113992,113993],{"class":155},", np.round(tip, ",[149,113995,1939],{"class":309},[149,113997,32203],{"class":155},[149,113999,114000,114002,114004,114007,114010,114012],{"class":151,"line":18446},[149,114001,36356],{"class":309},[149,114003,319],{"class":155},[149,114005,114006],{"class":169},"\"  target:\"",[149,114008,114009],{"class":155},", np.round(target, ",[149,114011,1939],{"class":309},[149,114013,32203],{"class":155},[149,114015,114016,114018,114020,114023,114026,114028],{"class":151,"line":18468},[149,114017,36356],{"class":309},[149,114019,319],{"class":155},[149,114021,114022],{"class":169},"\"  ctrl:\"",[149,114024,114025],{"class":155},", np.round(data.ctrl.copy(), ",[149,114027,1939],{"class":309},[149,114029,32203],{"class":155},[149,114031,114032,114034,114036,114039,114042,114044],{"class":151,"line":18473},[149,114033,36356],{"class":309},[149,114035,319],{"class":155},[149,114037,114038],{"class":169},"\"  obs_dim:\"",[149,114040,114041],{"class":155},", obs.shape[",[149,114043,2056],{"class":309},[149,114045,6375],{"class":155},[149,114047,114048],{"class":151,"line":18479},[149,114049,4119],{"emptyLinePlaceholder":1800},[149,114051,114052,114054,114056,114058,114060,114062,114064,114066],{"class":151,"line":18493},[149,114053,33005],{"class":309},[149,114055,319],{"class":155},[149,114057,112055],{"class":169},[149,114059,329],{"class":155},[149,114061,33724],{"class":309},[149,114063,112062],{"class":155},[149,114065,1939],{"class":309},[149,114067,32203],{"class":155},[149,114069,114070,114072,114074,114077,114080,114082,114084,114086],{"class":151,"line":18506},[149,114071,33005],{"class":309},[149,114073,319],{"class":155},[149,114075,114076],{"class":169},"\"final tip:\"",[149,114078,114079],{"class":155},", np.round(site_position(model, data, ",[149,114081,113215],{"class":169},[149,114083,112024],{"class":155},[149,114085,1939],{"class":309},[149,114087,32203],{"class":155},[149,114089,114090,114092,114094,114097,114099,114101,114103,114105],{"class":151,"line":18511},[149,114091,33005],{"class":309},[149,114093,319],{"class":155},[149,114095,114096],{"class":169},"\"target:\"",[149,114098,114079],{"class":155},[149,114100,113638],{"class":169},[149,114102,112024],{"class":155},[149,114104,1939],{"class":309},[149,114106,32203],{"class":155},[149,114108,114109],{"class":151,"line":18525},[149,114110,4119],{"emptyLinePlaceholder":1800},[149,114112,114113],{"class":151,"line":18530},[149,114114,4119],{"emptyLinePlaceholder":1800},[149,114116,114117,114119,114121,114123,114125],{"class":151,"line":18536},[149,114118,3255],{"class":325},[149,114120,32926],{"class":309},[149,114122,103239],{"class":325},[149,114124,103242],{"class":169},[149,114126,5457],{"class":155},[149,114128,114129],{"class":151,"line":18541},[149,114130,103249],{"class":155},[24,114132,105249],{},[140,114134,114136],{"className":25530,"code":114135,"language":25532,"meta":145,"style":145},"touch ch7_reacher.py\n",[48,114137,114138],{"__ignoreMap":145},[149,114139,114140,114142],{"class":151,"line":152},[149,114141,102963],{"class":162},[149,114143,114144],{"class":169}," ch7_reacher.py\n",[24,114146,112123],{},[140,114148,114150],{"className":25530,"code":114149,"language":25532,"meta":145,"style":145},"python ch7_reacher.py\n",[48,114151,114152],{"__ignoreMap":145},[149,114153,114154,114156],{"class":151,"line":152},[149,114155,32086],{"class":162},[149,114157,114144],{"class":169},[19,114159,103252],{"id":103252},[24,114161,114162],{},"读取 site 坐标：",[140,114164,114166],{"className":32084,"code":114165,"language":32086,"meta":145,"style":145},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[48,114167,114168],{"__ignoreMap":145},[149,114169,114170,114172,114174,114176,114178],{"class":151,"line":152},[149,114171,33653],{"class":325},[149,114173,113535],{"class":162},[149,114175,113538],{"class":155},[149,114177,3027],{"class":309},[149,114179,113543],{"class":155},[24,114181,114182],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[24,114184,112139],{},[140,114186,114188],{"className":32084,"code":114187,"language":32086,"meta":145,"style":145},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[48,114189,114190],{"__ignoreMap":145},[149,114191,114192,114194],{"class":151,"line":152},[149,114193,18756],{"class":325},[149,114195,113647],{"class":155},[24,114197,114198],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[24,114200,111464],{},[140,114202,114204],{"className":32084,"code":114203,"language":32086,"meta":145,"style":145},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[48,114205,114206,114218,114231],{"__ignoreMap":145},[149,114207,114208,114210,114212,114214,114216],{"class":151,"line":152},[149,114209,113275],{"class":155},[149,114211,166],{"class":325},[149,114213,113280],{"class":155},[149,114215,2395],{"class":325},[149,114217,113285],{"class":155},[149,114219,114220,114223,114225,114227,114229],{"class":151,"line":193},[149,114221,114222],{"class":155},"control_cost ",[149,114224,166],{"class":325},[149,114226,113716],{"class":309},[149,114228,8234],{"class":325},[149,114230,113721],{"class":155},[149,114232,114233,114235,114237,114239,114241,114243,114245],{"class":151,"line":235},[149,114234,18756],{"class":325},[149,114236,111476],{"class":309},[149,114238,319],{"class":155},[149,114240,2395],{"class":325},[149,114242,113275],{"class":155},[149,114244,2395],{"class":325},[149,114246,113738],{"class":155},[24,114248,114249],{},"奖励由两部分组成：",[125,114251,114252,114257],{},[45,114253,114254,114256],{},[48,114255,113302],{},"：末端离目标越远，奖励越低。",[45,114258,114259,114262],{},[48,114260,114261],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[24,114264,114265],{},"简单控制器：",[140,114267,114269],{"className":32084,"code":114268,"language":32086,"meta":145,"style":145},"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",[48,114270,114271,114284,114316],{"__ignoreMap":145},[149,114272,114273,114276,114278,114280,114282],{"class":151,"line":152},[149,114274,114275],{"class":155},"error ",[149,114277,166],{"class":325},[149,114279,113847],{"class":155},[149,114281,2395],{"class":325},[149,114283,113852],{"class":155},[149,114285,114286,114288,114290,114292,114294,114296,114298,114300,114302,114304,114306,114308,114310,114312,114314],{"class":151,"line":193},[149,114287,107550],{"class":155},[149,114289,2056],{"class":309},[149,114291,6161],{"class":155},[149,114293,166],{"class":325},[149,114295,113869],{"class":155},[149,114297,106939],{"class":309},[149,114299,8234],{"class":325},[149,114301,113876],{"class":155},[149,114303,1045],{"class":309},[149,114305,113881],{"class":155},[149,114307,2395],{"class":325},[149,114309,104083],{"class":309},[149,114311,329],{"class":155},[149,114313,104083],{"class":309},[149,114315,1878],{"class":155},[149,114317,114318,114320,114322,114324,114326,114328,114330,114332,114334,114336,114338,114340,114342,114344,114346],{"class":151,"line":235},[149,114319,107550],{"class":155},[149,114321,830],{"class":309},[149,114323,6161],{"class":155},[149,114325,166],{"class":325},[149,114327,113869],{"class":155},[149,114329,106939],{"class":309},[149,114331,8234],{"class":325},[149,114333,113876],{"class":155},[149,114335,2056],{"class":309},[149,114337,113881],{"class":155},[149,114339,2395],{"class":325},[149,114341,104083],{"class":309},[149,114343,329],{"class":155},[149,114345,104083],{"class":309},[149,114347,1878],{"class":155},[24,114349,114350],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[19,114352,103388],{"id":103388},[140,114354,114355],{"className":32084,"code":114165,"language":32086,"meta":145,"style":145},[48,114356,114357],{"__ignoreMap":145},[149,114358,114359,114361,114363,114365,114367],{"class":151,"line":152},[149,114360,33653],{"class":325},[149,114362,113535],{"class":162},[149,114364,113538],{"class":155},[149,114366,3027],{"class":309},[149,114368,113543],{"class":155},[24,114370,114371,114372,114374,114375,84220,114377,30091],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[48,114373,81491],{}," 是 site 的名字，比如 ",[48,114376,113215],{},[48,114378,113638],{},[140,114380,114382],{"className":32084,"code":114381,"language":32086,"meta":145,"style":145},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[48,114383,114384],{"__ignoreMap":145},[149,114385,114386,114388,114390],{"class":151,"line":152},[149,114387,105313],{"class":155},[149,114389,166],{"class":325},[149,114391,113552],{"class":155},[24,114393,114394],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[140,114396,114398],{"className":32084,"code":114397,"language":32086,"meta":145,"style":145},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[48,114399,114400,114412],{"__ignoreMap":145},[149,114401,114402,114404,114406,114408,114410],{"class":151,"line":152},[149,114403,3255],{"class":325},[149,114405,105128],{"class":155},[149,114407,156],{"class":325},[149,114409,5811],{"class":309},[149,114411,5457],{"class":155},[149,114413,114414,114416,114418,114420,114422,114424,114426,114428,114430,114432],{"class":151,"line":193},[149,114415,105574],{"class":325},[149,114417,105114],{"class":309},[149,114419,319],{"class":155},[149,114421,1921],{"class":325},[149,114423,113577],{"class":169},[149,114425,2756],{"class":309},[149,114427,81491],{"class":155},[149,114429,2805],{"class":309},[149,114431,2115],{"class":169},[149,114433,1878],{"class":155},[24,114435,114436,114437,114440,114441,114443],{},"如果 site 没找到，就主动报错。",[48,114438,114439],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[48,114442,81491],{}," 的值放进字符串里。",[140,114445,114447],{"className":32084,"code":114446,"language":32086,"meta":145,"style":145},"return data.site_xpos[site_id].copy()\n",[48,114448,114449],{"__ignoreMap":145},[149,114450,114451,114453],{"class":151,"line":152},[149,114452,18756],{"class":325},[149,114454,113594],{"class":155},[24,114456,114457,114458,114460,114461,114464],{},"返回这个 site 的世界坐标。",[48,114459,105359],{}," 里的每一行都是一个 site 的 ",[48,114462,114463],{},"(x, y, z)"," 坐标。",[140,114466,114468],{"className":32084,"code":114467,"language":32086,"meta":145,"style":145},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[48,114469,114470],{"__ignoreMap":145},[149,114471,114472,114474,114476],{"class":151,"line":152},[149,114473,33653],{"class":325},[149,114475,113609],{"class":162},[149,114477,113612],{"class":155},[24,114479,114480],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[140,114482,114484],{"className":32084,"code":114483,"language":32086,"meta":145,"style":145},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[48,114485,114486,114498],{"__ignoreMap":145},[149,114487,114488,114490,114492,114494,114496],{"class":151,"line":152},[149,114489,113247],{"class":155},[149,114491,166],{"class":325},[149,114493,113622],{"class":155},[149,114495,113215],{"class":169},[149,114497,1878],{"class":155},[149,114499,114500,114502,114504,114506,114508],{"class":151,"line":193},[149,114501,113257],{"class":155},[149,114503,166],{"class":325},[149,114505,113622],{"class":155},[149,114507,113638],{"class":169},[149,114509,1878],{"class":155},[24,114511,114512],{},"分别读取末端点和目标点的世界坐标。",[140,114514,114515],{"className":32084,"code":114187,"language":32086,"meta":145,"style":145},[48,114516,114517],{"__ignoreMap":145},[149,114518,114519,114521],{"class":151,"line":152},[149,114520,18756],{"class":325},[149,114522,113647],{"class":155},[24,114524,114525],{},"把四部分拼成一个观测数组：",[140,114527,114530],{"className":114528,"code":114529,"language":1655,"meta":145},[1653],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[48,114531,114529],{"__ignoreMap":145},[140,114533,114535],{"className":32084,"code":114534,"language":32086,"meta":145,"style":145},"dist = np.linalg.norm(tip - target)\n",[48,114536,114537],{"__ignoreMap":145},[149,114538,114539,114541,114543,114545,114547],{"class":151,"line":152},[149,114540,113275],{"class":155},[149,114542,166],{"class":325},[149,114544,113280],{"class":155},[149,114546,2395],{"class":325},[149,114548,113285],{"class":155},[24,114550,114551,114552,114555,114556,114559],{},"计算 tip 到 target 的距离。",[48,114553,114554],{},"tip - target"," 得到一个三维向量，",[48,114557,114558],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[24,114561,16346],{},[140,114563,114566],{"className":114564,"code":114565,"language":1655,"meta":145},[1653],"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",[48,114567,114565],{"__ignoreMap":145},[140,114569,114571],{"className":32084,"code":114570,"language":32086,"meta":145,"style":145},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[48,114572,114573],{"__ignoreMap":145},[149,114574,114575,114577,114579,114581,114583],{"class":151,"line":152},[149,114576,114222],{"class":155},[149,114578,166],{"class":325},[149,114580,113716],{"class":309},[149,114582,8234],{"class":325},[149,114584,113721],{"class":155},[24,114586,114587,114588,114591,114592,114595],{},"计算动作惩罚。",[48,114589,114590],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[48,114593,114594],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[140,114597,114599],{"className":32084,"code":114598,"language":32086,"meta":145,"style":145},"return float(-dist - control_cost)\n",[48,114600,114601],{"__ignoreMap":145},[149,114602,114603,114605,114607,114609,114611,114613,114615],{"class":151,"line":152},[149,114604,18756],{"class":325},[149,114606,111476],{"class":309},[149,114608,319],{"class":155},[149,114610,2395],{"class":325},[149,114612,113275],{"class":155},[149,114614,2395],{"class":325},[149,114616,113738],{"class":155},[24,114618,114619],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[140,114621,114622],{"className":32084,"code":112482,"language":32086,"meta":145,"style":145},[48,114623,114624],{"__ignoreMap":145},[149,114625,114626,114628,114630],{"class":151,"line":152},[149,114627,112489],{"class":155},[149,114629,166],{"class":325},[149,114631,106440],{"class":309},[24,114633,114634],{},"累计奖励变量，记录整个运行过程的总分。",[140,114636,114638],{"className":32084,"code":114637,"language":32086,"meta":145,"style":145},"for step in range(500):\n",[48,114639,114640],{"__ignoreMap":145},[149,114641,114642,114644,114646,114648,114650,114652,114654],{"class":151,"line":152},[149,114643,4743],{"class":325},[149,114645,33322],{"class":155},[149,114647,27752],{"class":325},[149,114649,34149],{"class":309},[149,114651,319],{"class":155},[149,114653,66761],{"class":309},[149,114655,32492],{"class":155},[24,114657,114658],{},"运行 500 个控制步。",[140,114660,114661],{"className":32084,"code":106222,"language":32086,"meta":145,"style":145},[48,114662,114663],{"__ignoreMap":145},[149,114664,114665],{"class":151,"line":152},[149,114666,106222],{"class":155},[24,114668,114669,114670,102698,114672,114674],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[48,114671,104910],{},[48,114673,104913],{}," 是当前状态下的坐标。",[140,114676,114678],{"className":32084,"code":114677,"language":32086,"meta":145,"style":145},"error = target - tip\n",[48,114679,114680],{"__ignoreMap":145},[149,114681,114682,114684,114686,114688,114690],{"class":151,"line":152},[149,114683,114275],{"class":155},[149,114685,166],{"class":325},[149,114687,113847],{"class":155},[149,114689,2395],{"class":325},[149,114691,113852],{"class":155},[24,114693,114694],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[140,114696,114698],{"className":32084,"code":114697,"language":32086,"meta":145,"style":145},"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",[48,114699,114700,114732],{"__ignoreMap":145},[149,114701,114702,114704,114706,114708,114710,114712,114714,114716,114718,114720,114722,114724,114726,114728,114730],{"class":151,"line":152},[149,114703,107550],{"class":155},[149,114705,2056],{"class":309},[149,114707,6161],{"class":155},[149,114709,166],{"class":325},[149,114711,113869],{"class":155},[149,114713,106939],{"class":309},[149,114715,8234],{"class":325},[149,114717,113876],{"class":155},[149,114719,1045],{"class":309},[149,114721,113881],{"class":155},[149,114723,2395],{"class":325},[149,114725,104083],{"class":309},[149,114727,329],{"class":155},[149,114729,104083],{"class":309},[149,114731,1878],{"class":155},[149,114733,114734,114736,114738,114740,114742,114744,114746,114748,114750,114752,114754,114756,114758,114760,114762],{"class":151,"line":193},[149,114735,107550],{"class":155},[149,114737,830],{"class":309},[149,114739,6161],{"class":155},[149,114741,166],{"class":325},[149,114743,113869],{"class":155},[149,114745,106939],{"class":309},[149,114747,8234],{"class":325},[149,114749,113876],{"class":155},[149,114751,2056],{"class":309},[149,114753,113881],{"class":155},[149,114755,2395],{"class":325},[149,114757,104083],{"class":309},[149,114759,329],{"class":155},[149,114761,104083],{"class":309},[149,114763,1878],{"class":155},[24,114765,114766,114767,114770],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[48,114768,114769],{},"error -> ctrl -> step"," 的流程。",[140,114772,114773],{"className":32084,"code":106184,"language":32086,"meta":145,"style":145},[48,114774,114775],{"__ignoreMap":145},[149,114776,114777],{"class":151,"line":152},[149,114778,106184],{"class":155},[24,114780,114781],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[140,114783,114785],{"className":32084,"code":114784,"language":32086,"meta":145,"style":145},"obs = get_obs(model, data)\n",[48,114786,114787],{"__ignoreMap":145},[149,114788,114789,114791,114793],{"class":151,"line":152},[149,114790,112533],{"class":155},[149,114792,166],{"class":325},[149,114794,113970],{"class":155},[24,114796,114797,114798,114801],{},"读取最新观测。后面打印 ",[48,114799,114800],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114803,103996],{"id":103995},[24,114805,114806],{},"观测维度为:",[140,114808,114811],{"className":114809,"code":114810,"language":1655,"meta":145},[1653],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[48,114812,114810],{"__ignoreMap":145},[24,114814,114815],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[24,114817,114818],{},"程序每 100 步打印：",[140,114820,114823],{"className":114821,"code":114822,"language":1655,"meta":145},[1653],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[48,114824,114822],{"__ignoreMap":145},[24,114826,114827,114828,114830],{},"如果控制有效，你应该看到最终 ",[48,114829,104910],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114832,104028],{"id":104027},[125,114834,114835,114838,114841,114847,114853,114860,114870],{},[45,114836,114837],{},"修改目标点位置。",[45,114839,114840],{},"重新运行，观察最终 tip 是否变化。",[45,114842,114843,114844,114846],{},"把 gravity 改成 ",[48,114845,104269],{},"，观察控制是否变差。",[45,114848,112860,114849,112864,114851,30091],{},[48,114850,103838],{},[48,114852,1045],{},[45,114854,104091,114855,104094,114857,114859],{},[48,114856,112275],{},[48,114858,108986],{},"，观察机械臂是否更难移动。",[45,114861,104091,114862,84211,114864,104094,114866,114869],{},[48,114863,104913],{},[48,114865,105825],{},[48,114867,114868],{},"0.2 0 0.6","，观察 reward 和 final tip。",[45,114871,114872],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114874,104133],{"id":104132},[19,114876,114878],{"id":114877},"site-not-found",[48,114879,114880],{},"site not found",[24,114882,114883,114884,102698,114887,30091],{},"检查 XML 中是否有 ",[48,114885,114886],{},"site name=\"tip\"",[48,114888,114889],{},"site name=\"target\"",[19,114891,114892],{"id":114892},"机械臂完全不动",[24,114894,104203],{},[125,114896,114897,114902,114905,114910],{},[45,114898,114899,114901],{},[48,114900,103838],{}," 是否为 2",[45,114903,114904],{},"actuator 是否引用正确 joint",[45,114906,114907,114909],{},[48,114908,102756],{}," 是否被赋值",[45,114911,114912,114913],{},"是否执行了 ",[48,114914,102365],{},[19,114916,114917],{"id":114917},"控制效果不好",[24,114919,114920],{},"正常。本章重点不是控制器最优，而是任务结构:",[140,114922,114925],{"className":114923,"code":114924,"language":1655,"meta":145},[1653],"obs → action → mj_step → reward → next_obs\n",[48,114926,114924],{"__ignoreMap":145},[19,114928,114930],{"id":114929},"tip-坐标不变化","tip 坐标不变化",[24,114932,104255],{},[125,114934,114935,114940,114948,114957],{},[45,114936,114937,114938,30091],{},"是否每步调用了 ",[48,114939,102365],{},[45,114941,114942,114943,102698,114945,30091],{},"是否写入了 ",[48,114944,107805],{},[48,114946,114947],{},"data.ctrl[1]",[45,114949,114950,114951,2077,114954,30091],{},"actuator 是否正确引用 ",[48,114952,114953],{},"joint1",[48,114955,114956],{},"joint2",[45,114958,114959],{},"控制输入是否太小。",[19,114961,114962],{"id":114962},"目标点不会动",[24,114964,114965],{},"本章的 target 是固定 site：",[140,114967,114969],{"className":54765,"code":114968,"language":54767,"meta":145,"style":145},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[48,114970,114971],{"__ignoreMap":145},[149,114972,114973,114975,114977,114979,114981,114983,114985,114987,114990],{"class":151,"line":152},[149,114974,156],{"class":155},[149,114976,104889],{"class":159},[149,114978,515],{"class":162},[149,114980,166],{"class":155},[149,114982,113638],{"class":169},[149,114984,102786],{"class":162},[149,114986,166],{"class":155},[149,114988,114989],{"class":169},"\"0.5 0 0.4\"",[149,114991,114992],{"class":155}," ...\u002F>\n",[24,114994,114995,114996,114998],{},"它直接挂在 ",[48,114997,103521],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[19,115000,115001],{"id":115001},"机械臂不像真实机械臂",[24,115003,115004],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115006,104287],{"id":104286},[24,115008,115009],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[24,115011,115012],{},"核心公式：",[140,115014,115017],{"className":115015,"code":115016,"language":1655,"meta":145},[1653],"distance = ||tip - target||\nreward = -distance - action_cost\n",[48,115018,115016],{"__ignoreMap":145},[24,115020,115021],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1783,115023,115024],{},"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":145,"searchDepth":193,"depth":193,"links":115026},[115027,115028,115029,115034,115038,115039,115040,115048],{"id":102326,"depth":193,"text":102327},{"id":102449,"depth":193,"text":102450},{"id":102724,"depth":193,"text":102725,"children":115030},[115031,115032,115033],{"id":113230,"depth":235,"text":113231},{"id":113306,"depth":235,"text":113306},{"id":113336,"depth":235,"text":113337},{"id":102932,"depth":193,"text":102933,"children":115035},[115036,115037],{"id":103252,"depth":235,"text":103252},{"id":103388,"depth":235,"text":103388},{"id":103995,"depth":193,"text":103996},{"id":104027,"depth":193,"text":104028},{"id":104132,"depth":193,"text":104133,"children":115041},[115042,115043,115044,115045,115046,115047],{"id":114877,"depth":235,"text":114880},{"id":114892,"depth":235,"text":114892},{"id":114917,"depth":235,"text":114917},{"id":114929,"depth":235,"text":114930},{"id":114962,"depth":235,"text":114962},{"id":115001,"depth":235,"text":115001},{"id":104286,"depth":193,"text":104287},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113034,"description":145},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115055,"title":115056,"body":115057,"description":145,"extension":1798,"meta":118519,"navigation":1800,"path":118520,"seo":118521,"stem":118522,"__hash__":118523},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115058,"toc":118490},[115059,115062,115064,115067,115070,115095,115098,115104,115107,115113,115115,115117,115141,115143,115161,115163,115206,115208,115235,115237,115240,115292,115295,115301,115310,115313,115351,115354,115393,115396,115404,115411,115414,115420,115422,115476,115483,115528,115531,115535,115551,115561,115563,116824,116826,116838,116840,116851,116853,116856,116877,116880,116883,116916,116922,116925,116958,116961,116964,117005,117010,117024,117027,117040,117045,117068,117070,117085,117095,117110,117117,117137,117152,117170,117173,117190,117198,117214,117220,117252,117265,117297,117307,117342,117356,117402,117416,117458,117469,117482,117488,117521,117524,117551,117561,117601,117611,117628,117635,117653,117656,117697,117710,117725,117728,117751,117754,117766,117769,117788,117793,117814,117817,117832,117835,117869,117881,117896,117899,117924,117927,117946,117949,117981,117984,118008,118014,118044,118051,118064,118067,118069,118071,118077,118080,118083,118095,118098,118100,118154,118156,118160,118166,118175,118178,118185,118187,118210,118213,118217,118219,118237,118243,118245,118278,118281,118287,118291,118294,118314,118319,118323,118330,118350,118355,118359,118362,118382,118385,118471,118475,118478,118484,118487],[10,115060,115056],{"id":115061},"_8gymnasium-风格强化学习接口基础",[14,115063,102327],{"id":102326},[24,115065,115066],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[24,115068,115069],{},"你将实现:",[140,115071,115073],{"className":32084,"code":115072,"language":32086,"meta":145,"style":145},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[48,115074,115075,115085],{"__ignoreMap":145},[149,115076,115077,115080,115082],{"class":151,"line":152},[149,115078,115079],{"class":155},"obs, info ",[149,115081,166],{"class":325},[149,115083,115084],{"class":155}," env.reset()\n",[149,115086,115087,115090,115092],{"class":151,"line":193},[149,115088,115089],{"class":155},"obs, reward, terminated, truncated, info ",[149,115091,166],{"class":325},[149,115093,115094],{"class":155}," env.step(action)\n",[24,115096,115097],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[24,115099,115100,115101,115103],{},"前面章节的代码都是“脚本式”的：在 ",[48,115102,103975],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[24,115105,115106],{},"可以先记住 Gymnasium 环境的核心交互：",[140,115108,115111],{"className":115109,"code":115110,"language":1655,"meta":145},[1653],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[48,115112,115110],{"__ignoreMap":145},[14,115114,102450],{"id":102449},[24,115116,102453],{},[140,115118,115119],{"className":25530,"code":106067,"language":25532,"meta":145,"style":145},[48,115120,115121],{"__ignoreMap":145},[149,115122,115123,115125,115127,115129,115131,115133,115135,115137,115139],{"class":151,"line":152},[149,115124,26285],{"class":162},[149,115126,28024],{"class":169},[149,115128,25542],{"class":169},[149,115130,28109],{"class":309},[149,115132,106082],{"class":169},[149,115134,102478],{"class":169},[149,115136,104181],{"class":169},[149,115138,102494],{"class":169},[149,115140,106091],{"class":169},[24,115142,104499],{},[140,115144,115146],{"className":25530,"code":115145,"language":25532,"meta":145,"style":145},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[48,115147,115148],{"__ignoreMap":145},[149,115149,115150,115152,115154,115156,115158],{"class":151,"line":152},[149,115151,25539],{"class":162},[149,115153,25542],{"class":169},[149,115155,102610],{"class":169},[149,115157,109390],{"class":169},[149,115159,115160],{"class":169}," gymnasium\n",[24,115162,104516],{},[140,115164,115166],{"className":25530,"code":115165,"language":25532,"meta":145,"style":145},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[48,115167,115168,115185,115194],{"__ignoreMap":145},[149,115169,115170,115172,115174,115176,115179,115181,115183],{"class":151,"line":152},[149,115171,32036],{"class":162},[149,115173,30882],{"class":169},[149,115175,26824],{"class":309},[149,115177,115178],{"class":169}," mujoco-gym-api",[149,115180,102655],{"class":169},[149,115182,102658],{"class":309},[149,115184,102661],{"class":309},[149,115186,115187,115189,115191],{"class":151,"line":193},[149,115188,32036],{"class":162},[149,115190,102668],{"class":169},[149,115192,115193],{"class":169}," mujoco-gym-api\n",[149,115195,115196,115198,115200,115202,115204],{"class":151,"line":235},[149,115197,25539],{"class":162},[149,115199,25542],{"class":169},[149,115201,102610],{"class":169},[149,115203,109390],{"class":169},[149,115205,115160],{"class":169},[24,115207,102684],{},[125,115209,115210,115220,115223,115229],{},[45,115211,115212,115213,115216,115217,30091],{},"本章使用 ",[48,115214,115215],{},"gymnasium","，不是旧版 ",[48,115218,115219],{},"gym",[45,115221,115222],{},"Gymnasium API 与旧 Gym API 有差异。",[45,115224,115225,115226,30091],{},"旧 Gym 常见返回值是 4 个: ",[48,115227,115228],{},"obs, reward, done, info",[45,115230,115231,115232,30091],{},"Gymnasium 返回值是 5 个: ",[48,115233,115234],{},"obs, reward, terminated, truncated, info",[14,115236,102725],{"id":102724},[24,115238,115239],{},"强化学习环境接口包含:",[2003,115241,115242,115251],{},[2006,115243,115244],{},[2009,115245,115246,115249],{},[2012,115247,115248],{"align":1566},"方法",[2012,115250,104376],{"align":1566},[2049,115252,115253,115263,115273,115283],{},[2009,115254,115255,115260],{},[2054,115256,115257],{"align":1566},[48,115258,115259],{},"reset()",[2054,115261,115262],{"align":1566},"重置环境",[2009,115264,115265,115270],{},[2054,115266,115267],{"align":1566},[48,115268,115269],{},"step(action)",[2054,115271,115272],{"align":1566},"执行动作",[2009,115274,115275,115280],{},[2054,115276,115277],{"align":1566},[48,115278,115279],{},"observation_space",[2054,115281,115282],{"align":1566},"观测空间",[2009,115284,115285,115290],{},[2054,115286,115287],{"align":1566},[48,115288,115289],{},"action_space",[2054,115291,25363],{"align":1566},[24,115293,115294],{},"一个最小环境需要完成:",[140,115296,115299],{"className":115297,"code":115298,"language":1655,"meta":145},[1653],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[48,115300,115298],{"__ignoreMap":145},[19,115302,115304,102698,115307,106317],{"id":115303},"terminated-和-truncated-的区别",[48,115305,115306],{},"terminated",[48,115308,115309],{},"truncated",[24,115311,115312],{},"Gymnasium 把“结束”拆成两个概念：",[2003,115314,115315,115325],{},[2006,115316,115317],{},[2009,115318,115319,115321,115323],{},[2012,115320,106253],{"align":1566},[2012,115322,102380],{"align":1566},[2012,115324,22897],{"align":1566},[2049,115326,115327,115339],{},[2009,115328,115329,115333,115336],{},[2054,115330,115331],{"align":1566},[48,115332,115306],{},[2054,115334,115335],{"align":1566},"任务自然结束",[2054,115337,115338],{"align":1566},"机械臂到达目标、机器人摔倒",[2009,115340,115341,115345,115348],{},[2054,115342,115343],{"align":1566},[48,115344,115309],{},[2054,115346,115347],{"align":1566},"因外部限制截断",[2054,115349,115350],{"align":1566},"达到最大步数、时间限制",[24,115352,115353],{},"本章中：",[140,115355,115357],{"className":32084,"code":115356,"language":32086,"meta":145,"style":145},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[48,115358,115359,115374],{"__ignoreMap":145},[149,115360,115361,115364,115366,115369,115371],{"class":151,"line":152},[149,115362,115363],{"class":155},"terminated ",[149,115365,166],{"class":325},[149,115367,115368],{"class":155}," dist ",[149,115370,156],{"class":325},[149,115372,115373],{"class":309}," 0.05\n",[149,115375,115376,115379,115381,115383,115386,115388,115390],{"class":151,"line":193},[149,115377,115378],{"class":155},"truncated ",[149,115380,166],{"class":325},[149,115382,40579],{"class":309},[149,115384,115385],{"class":155},".steps ",[149,115387,3430],{"class":325},[149,115389,40579],{"class":309},[149,115391,115392],{"class":155},".max_steps\n",[24,115394,115395],{},"也就是：",[125,115397,115398,115401],{},[45,115399,115400],{},"末端距离目标小于 0.05，任务成功结束。",[45,115402,115403],{},"步数超过上限，episode 被截断。",[19,115405,115407,102698,115409],{"id":115406},"observation_space-和-action_space",[48,115408,115279],{},[48,115410,115289],{},[24,115412,115413],{},"这两个对象告诉算法：",[140,115415,115418],{"className":115416,"code":115417,"language":1655,"meta":145},[1653],"观测长什么样\n动作允许多大\n",[48,115419,115417],{"__ignoreMap":145},[24,115421,16346],{},[140,115423,115425],{"className":32084,"code":115424,"language":32086,"meta":145,"style":145},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[48,115426,115427],{"__ignoreMap":145},[149,115428,115429,115431,115434,115436,115439,115442,115445,115447,115449,115452,115454,115456,115458,115460,115462,115464,115466,115469,115471,115473],{"class":151,"line":152},[149,115430,32529],{"class":309},[149,115432,115433],{"class":155},".action_space ",[149,115435,166],{"class":325},[149,115437,115438],{"class":155}," spaces.Box(",[149,115440,115441],{"class":6932},"low",[149,115443,115444],{"class":325},"=-",[149,115446,104083],{"class":309},[149,115448,329],{"class":155},[149,115450,115451],{"class":6932},"high",[149,115453,166],{"class":325},[149,115455,104083],{"class":309},[149,115457,329],{"class":155},[149,115459,97643],{"class":6932},[149,115461,166],{"class":325},[149,115463,319],{"class":155},[149,115465,1045],{"class":309},[149,115467,115468],{"class":155},",), ",[149,115470,95180],{"class":6932},[149,115472,166],{"class":325},[149,115474,115475],{"class":155},"np.float32)\n",[24,115477,115478,115479,115482],{},"表示动作是 2 维数组，每个值都在 ",[48,115480,115481],{},"[-1, 1]"," 范围内。",[140,115484,115486],{"className":32084,"code":115485,"language":32086,"meta":145,"style":145},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[48,115487,115488],{"__ignoreMap":145},[149,115489,115490,115492,115495,115497,115499,115501,115503,115506,115508,115510,115512,115514,115516,115518,115520,115522,115524,115526],{"class":151,"line":152},[149,115491,32529],{"class":309},[149,115493,115494],{"class":155},".observation_space ",[149,115496,166],{"class":325},[149,115498,115438],{"class":155},[149,115500,115441],{"class":6932},[149,115502,115444],{"class":325},[149,115504,115505],{"class":155},"np.inf, ",[149,115507,115451],{"class":6932},[149,115509,166],{"class":325},[149,115511,115505],{"class":155},[149,115513,97643],{"class":6932},[149,115515,166],{"class":325},[149,115517,319],{"class":155},[149,115519,2309],{"class":309},[149,115521,115468],{"class":155},[149,115523,95180],{"class":6932},[149,115525,166],{"class":325},[149,115527,115475],{"class":155},[24,115529,115530],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[19,115532,115534],{"id":115533},"frame_skip-是什么","frame_skip 是什么",[140,115536,115538],{"className":32084,"code":115537,"language":32086,"meta":145,"style":145},"self.frame_skip = 5\n",[48,115539,115540],{"__ignoreMap":145},[149,115541,115542,115544,115547,115549],{"class":151,"line":152},[149,115543,32529],{"class":309},[149,115545,115546],{"class":155},".frame_skip ",[149,115548,166],{"class":325},[149,115550,56122],{"class":309},[24,115552,115553,115554,115557,115558,115560],{},"表示外部调用一次 ",[48,115555,115556],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[48,115559,102895],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115562,102933],{"id":102932},[140,115564,115566],{"className":32084,"code":115565,"language":32086,"meta":145,"style":145},"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",[48,115567,115568,115580,115586,115596,115607,115611,115615,115623,115628,115632,115636,115640,115644,115648,115652,115656,115661,115665,115669,115673,115678,115682,115686,115690,115694,115698,115702,115706,115710,115714,115718,115722,115726,115730,115748,115763,115767,115780,115790,115805,115822,115826,115847,115866,115891,115905,115909,115919,115931,115941,115945,115987,116025,116029,116039,116055,116070,116089,116096,116100,116113,116128,116143,116156,116175,116191,116195,116236,116251,116266,116270,116309,116320,116333,116337,116347,116356,116360,116370,116385,116403,116407,116418,116435,116448,116452,116462,116466,116477,116488,116492,116506,116520,116536,116540,116553,116570,116585,116592,116596,116600,116612,116622,116640,116652,116664,116668,116676,116692,116701,116710,116718,116760,116773,116778,116782,116800,116804,116808,116820],{"__ignoreMap":145},[149,115569,115570,115572,115575,115577],{"class":151,"line":152},[149,115571,32098],{"class":325},[149,115573,115574],{"class":155}," gymnasium ",[149,115576,33089],{"class":325},[149,115578,115579],{"class":155}," gym\n",[149,115581,115582,115584],{"class":151,"line":193},[149,115583,32098],{"class":325},[149,115585,102981],{"class":155},[149,115587,115588,115590,115592,115594],{"class":151,"line":235},[149,115589,32098],{"class":325},[149,115591,33086],{"class":155},[149,115593,33089],{"class":325},[149,115595,33092],{"class":155},[149,115597,115598,115600,115602,115604],{"class":151,"line":340},[149,115599,32443],{"class":325},[149,115601,115574],{"class":155},[149,115603,32098],{"class":325},[149,115605,115606],{"class":155}," spaces\n",[149,115608,115609],{"class":151,"line":346},[149,115610,4119],{"emptyLinePlaceholder":1800},[149,115612,115613],{"class":151,"line":352},[149,115614,4119],{"emptyLinePlaceholder":1800},[149,115616,115617,115619,115621],{"class":151,"line":1021},[149,115618,102994],{"class":309},[149,115620,15277],{"class":325},[149,115622,102999],{"class":169},[149,115624,115625],{"class":151,"line":1035},[149,115626,115627],{"class":169},"\u003Cmujoco model=\"gym_reacher\">\n",[149,115629,115630],{"class":151,"line":1054},[149,115631,113417],{"class":169},[149,115633,115634],{"class":151,"line":1072},[149,115635,4119],{"emptyLinePlaceholder":1800},[149,115637,115638],{"class":151,"line":1090},[149,115639,103018],{"class":169},[149,115641,115642],{"class":151,"line":1633},[149,115643,113435],{"class":169},[149,115645,115646],{"class":151,"line":1644},[149,115647,4119],{"emptyLinePlaceholder":1800},[149,115649,115650],{"class":151,"line":3348},[149,115651,113444],{"class":169},[149,115653,115654],{"class":151,"line":3362},[149,115655,113449],{"class":169},[149,115657,115658],{"class":151,"line":3367},[149,115659,115660],{"class":169},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[149,115662,115663],{"class":151,"line":3373},[149,115664,4119],{"emptyLinePlaceholder":1800},[149,115666,115667],{"class":151,"line":3394},[149,115668,113463],{"class":169},[149,115670,115671],{"class":151,"line":3399},[149,115672,113468],{"class":169},[149,115674,115675],{"class":151,"line":3413},[149,115676,115677],{"class":169},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[149,115679,115680],{"class":151,"line":3418},[149,115681,113478],{"class":169},[149,115683,115684],{"class":151,"line":3447},[149,115685,108117],{"class":169},[149,115687,115688],{"class":151,"line":3452},[149,115689,103047],{"class":169},[149,115691,115692],{"class":151,"line":3469},[149,115693,103052],{"class":169},[149,115695,115696],{"class":151,"line":3474},[149,115697,4119],{"emptyLinePlaceholder":1800},[149,115699,115700],{"class":151,"line":3479},[149,115701,108134],{"class":169},[149,115703,115704],{"class":151,"line":3484},[149,115705,113503],{"class":169},[149,115707,115708],{"class":151,"line":3498},[149,115709,113508],{"class":169},[149,115711,115712],{"class":151,"line":3503},[149,115713,108144],{"class":169},[149,115715,115716],{"class":151,"line":4296},[149,115717,103057],{"class":169},[149,115719,115720],{"class":151,"line":4310},[149,115721,97378],{"class":169},[149,115723,115724],{"class":151,"line":4318},[149,115725,4119],{"emptyLinePlaceholder":1800},[149,115727,115728],{"class":151,"line":4323},[149,115729,4119],{"emptyLinePlaceholder":1800},[149,115731,115732,115734,115737,115739,115741,115743,115746],{"class":151,"line":4329},[149,115733,913],{"class":325},[149,115735,115736],{"class":162}," ReacherEnv",[149,115738,319],{"class":155},[149,115740,115219],{"class":162},[149,115742,2421],{"class":155},[149,115744,115745],{"class":162},"Env",[149,115747,32492],{"class":155},[149,115749,115750,115753,115755,115757,115760],{"class":151,"line":4335},[149,115751,115752],{"class":155},"    metadata ",[149,115754,166],{"class":325},[149,115756,6166],{"class":155},[149,115758,115759],{"class":169},"\"render_modes\"",[149,115761,115762],{"class":155},": []}\n",[149,115764,115765],{"class":151,"line":4340},[149,115766,4119],{"emptyLinePlaceholder":1800},[149,115768,115769,115771,115773,115776,115778],{"class":151,"line":9663},[149,115770,32507],{"class":325},[149,115772,32510],{"class":309},[149,115774,115775],{"class":155},"(self) -> ",[149,115777,97366],{"class":309},[149,115779,5457],{"class":155},[149,115781,115782,115784,115786,115788],{"class":151,"line":9687},[149,115783,32523],{"class":309},[149,115785,18971],{"class":155},[149,115787,32535],{"class":309},[149,115789,3695],{"class":155},[149,115791,115792,115794,115797,115799,115801,115803],{"class":151,"line":9692},[149,115793,32551],{"class":309},[149,115795,115796],{"class":155},".model ",[149,115798,166],{"class":325},[149,115800,103092],{"class":155},[149,115802,102994],{"class":309},[149,115804,1878],{"class":155},[149,115806,115807,115809,115812,115814,115817,115819],{"class":151,"line":9698},[149,115808,32551],{"class":309},[149,115810,115811],{"class":155},".data ",[149,115813,166],{"class":325},[149,115815,115816],{"class":155}," mujoco.MjData(",[149,115818,32529],{"class":309},[149,115820,115821],{"class":155},".model)\n",[149,115823,115824],{"class":151,"line":9725},[149,115825,4119],{"emptyLinePlaceholder":1800},[149,115827,115828,115830,115833,115835,115838,115840,115843,115845],{"class":151,"line":9730},[149,115829,32551],{"class":309},[149,115831,115832],{"class":155},".tip_site_id ",[149,115834,166],{"class":325},[149,115836,115837],{"class":155}," mujoco.mj_name2id(",[149,115839,32529],{"class":309},[149,115841,115842],{"class":155},".model, mujoco.mjtObj.mjOBJ_SITE, ",[149,115844,113215],{"class":169},[149,115846,1878],{"class":155},[149,115848,115849,115851,115854,115856,115858,115860,115862,115864],{"class":151,"line":9736},[149,115850,32551],{"class":309},[149,115852,115853],{"class":155},".target_site_id ",[149,115855,166],{"class":325},[149,115857,115837],{"class":155},[149,115859,32529],{"class":309},[149,115861,115842],{"class":155},[149,115863,113638],{"class":169},[149,115865,1878],{"class":155},[149,115867,115868,115870,115872,115874,115876,115878,115881,115883,115885,115887,115889],{"class":151,"line":9748},[149,115869,4216],{"class":325},[149,115871,40579],{"class":309},[149,115873,115832],{"class":155},[149,115875,156],{"class":325},[149,115877,5811],{"class":309},[149,115879,115880],{"class":325}," or",[149,115882,40579],{"class":309},[149,115884,115853],{"class":155},[149,115886,156],{"class":325},[149,115888,5811],{"class":309},[149,115890,5457],{"class":155},[149,115892,115893,115896,115898,115900,115903],{"class":151,"line":9760},[149,115894,115895],{"class":325},"            raise",[149,115897,105114],{"class":309},[149,115899,319],{"class":155},[149,115901,115902],{"class":169},"\"required sites not found\"",[149,115904,1878],{"class":155},[149,115906,115907],{"class":151,"line":9772},[149,115908,4119],{"emptyLinePlaceholder":1800},[149,115910,115911,115913,115915,115917],{"class":151,"line":11430},[149,115912,32551],{"class":309},[149,115914,115546],{"class":155},[149,115916,166],{"class":325},[149,115918,56122],{"class":309},[149,115920,115921,115923,115926,115928],{"class":151,"line":11455},[149,115922,32551],{"class":309},[149,115924,115925],{"class":155},".max_steps ",[149,115927,166],{"class":325},[149,115929,115930],{"class":309}," 200\n",[149,115932,115933,115935,115937,115939],{"class":151,"line":11478},[149,115934,32551],{"class":309},[149,115936,115385],{"class":155},[149,115938,166],{"class":325},[149,115940,49039],{"class":309},[149,115942,115943],{"class":151,"line":11502},[149,115944,4119],{"emptyLinePlaceholder":1800},[149,115946,115947,115949,115951,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985],{"class":151,"line":11507},[149,115948,32551],{"class":309},[149,115950,115433],{"class":155},[149,115952,166],{"class":325},[149,115954,115438],{"class":155},[149,115956,115441],{"class":6932},[149,115958,115444],{"class":325},[149,115960,104083],{"class":309},[149,115962,329],{"class":155},[149,115964,115451],{"class":6932},[149,115966,166],{"class":325},[149,115968,104083],{"class":309},[149,115970,329],{"class":155},[149,115972,97643],{"class":6932},[149,115974,166],{"class":325},[149,115976,319],{"class":155},[149,115978,1045],{"class":309},[149,115980,115468],{"class":155},[149,115982,95180],{"class":6932},[149,115984,166],{"class":325},[149,115986,115475],{"class":155},[149,115988,115989,115991,115993,115995,115997,115999,116001,116003,116005,116007,116009,116011,116013,116015,116017,116019,116021,116023],{"class":151,"line":11512},[149,115990,32551],{"class":309},[149,115992,115494],{"class":155},[149,115994,166],{"class":325},[149,115996,115438],{"class":155},[149,115998,115441],{"class":6932},[149,116000,115444],{"class":325},[149,116002,115505],{"class":155},[149,116004,115451],{"class":6932},[149,116006,166],{"class":325},[149,116008,115505],{"class":155},[149,116010,97643],{"class":6932},[149,116012,166],{"class":325},[149,116014,319],{"class":155},[149,116016,2309],{"class":309},[149,116018,115468],{"class":155},[149,116020,95180],{"class":6932},[149,116022,166],{"class":325},[149,116024,115475],{"class":155},[149,116026,116027],{"class":151,"line":11517},[149,116028,4119],{"emptyLinePlaceholder":1800},[149,116030,116031,116033,116036],{"class":151,"line":11526},[149,116032,32507],{"class":325},[149,116034,116035],{"class":162}," _get_obs",[149,116037,116038],{"class":155},"(self) -> np.ndarray:\n",[149,116040,116041,116043,116045,116047,116050,116052],{"class":151,"line":11531},[149,116042,113816],{"class":155},[149,116044,166],{"class":325},[149,116046,40579],{"class":309},[149,116048,116049],{"class":155},".data.site_xpos[",[149,116051,32529],{"class":309},[149,116053,116054],{"class":155},".tip_site_id].copy()\n",[149,116056,116057,116059,116061,116063,116065,116067],{"class":151,"line":11537},[149,116058,113829],{"class":155},[149,116060,166],{"class":325},[149,116062,40579],{"class":309},[149,116064,116049],{"class":155},[149,116066,32529],{"class":309},[149,116068,116069],{"class":155},".target_site_id].copy()\n",[149,116071,116072,116074,116076,116079,116081,116084,116086],{"class":151,"line":11558},[149,116073,111861],{"class":155},[149,116075,166],{"class":325},[149,116077,116078],{"class":155}," np.concatenate([",[149,116080,32529],{"class":309},[149,116082,116083],{"class":155},".data.qpos.copy(), ",[149,116085,32529],{"class":309},[149,116087,116088],{"class":155},".data.qvel.copy(), tip, target])\n",[149,116090,116091,116093],{"class":151,"line":11564},[149,116092,16464],{"class":325},[149,116094,116095],{"class":155}," obs.astype(np.float32)\n",[149,116097,116098],{"class":151,"line":11578},[149,116099,4119],{"emptyLinePlaceholder":1800},[149,116101,116102,116104,116107,116109,116111],{"class":151,"line":11584},[149,116103,32507],{"class":325},[149,116105,116106],{"class":162}," _get_reward",[149,116108,115775],{"class":155},[149,116110,1910],{"class":309},[149,116112,5457],{"class":155},[149,116114,116115,116117,116119,116121,116123,116125],{"class":151,"line":11611},[149,116116,113816],{"class":155},[149,116118,166],{"class":325},[149,116120,40579],{"class":309},[149,116122,116049],{"class":155},[149,116124,32529],{"class":309},[149,116126,116127],{"class":155},".tip_site_id]\n",[149,116129,116130,116132,116134,116136,116138,116140],{"class":151,"line":11620},[149,116131,113829],{"class":155},[149,116133,166],{"class":325},[149,116135,40579],{"class":309},[149,116137,116049],{"class":155},[149,116139,32529],{"class":309},[149,116141,116142],{"class":155},".target_site_id]\n",[149,116144,116145,116148,116150,116152,116154],{"class":151,"line":11626},[149,116146,116147],{"class":155},"        dist ",[149,116149,166],{"class":325},[149,116151,113280],{"class":155},[149,116153,2395],{"class":325},[149,116155,113285],{"class":155},[149,116157,116158,116161,116163,116165,116167,116170,116172],{"class":151,"line":11634},[149,116159,116160],{"class":155},"        control_cost ",[149,116162,166],{"class":325},[149,116164,113716],{"class":309},[149,116166,8234],{"class":325},[149,116168,116169],{"class":155}," np.sum(np.square(",[149,116171,32529],{"class":309},[149,116173,116174],{"class":155},".data.ctrl))\n",[149,116176,116177,116179,116181,116183,116185,116187,116189],{"class":151,"line":11639},[149,116178,16464],{"class":325},[149,116180,111476],{"class":309},[149,116182,319],{"class":155},[149,116184,2395],{"class":325},[149,116186,113275],{"class":155},[149,116188,2395],{"class":325},[149,116190,113738],{"class":155},[149,116192,116193],{"class":151,"line":18314},[149,116194,4119],{"emptyLinePlaceholder":1800},[149,116196,116197,116199,116202,116205,116207,116210,116212,116214,116216,116218,116220,116223,116226,116228,116230,116232,116234],{"class":151,"line":18320},[149,116198,32507],{"class":325},[149,116200,116201],{"class":162}," reset",[149,116203,116204],{"class":155},"(self, ",[149,116206,2318],{"class":325},[149,116208,116209],{"class":155},", seed: ",[149,116211,1875],{"class":309},[149,116213,26818],{"class":325},[149,116215,40639],{"class":309},[149,116217,15277],{"class":325},[149,116219,40639],{"class":309},[149,116221,116222],{"class":155},", options: ",[149,116224,116225],{"class":309},"dict",[149,116227,26818],{"class":325},[149,116229,40639],{"class":309},[149,116231,15277],{"class":325},[149,116233,40639],{"class":309},[149,116235,32492],{"class":155},[149,116237,116238,116240,116243,116246,116248],{"class":151,"line":18343},[149,116239,32523],{"class":309},[149,116241,116242],{"class":155},"().reset(",[149,116244,116245],{"class":6932},"seed",[149,116247,166],{"class":325},[149,116249,116250],{"class":155},"seed)\n",[149,116252,116253,116256,116258,116261,116263],{"class":151,"line":18349},[149,116254,116255],{"class":155},"        mujoco.mj_resetData(",[149,116257,32529],{"class":309},[149,116259,116260],{"class":155},".model, ",[149,116262,32529],{"class":309},[149,116264,116265],{"class":155},".data)\n",[149,116267,116268],{"class":151,"line":18372},[149,116269,4119],{"emptyLinePlaceholder":1800},[149,116271,116272,116274,116277,116279,116281,116284,116286,116288,116290,116292,116294,116296,116298,116300,116302,116304,116306],{"class":151,"line":18386},[149,116273,32551],{"class":309},[149,116275,116276],{"class":155},".data.qpos[:] ",[149,116278,166],{"class":325},[149,116280,40579],{"class":309},[149,116282,116283],{"class":155},".np_random.uniform(",[149,116285,115441],{"class":6932},[149,116287,115444],{"class":325},[149,116289,87891],{"class":309},[149,116291,329],{"class":155},[149,116293,115451],{"class":6932},[149,116295,166],{"class":325},[149,116297,87891],{"class":309},[149,116299,329],{"class":155},[149,116301,33202],{"class":6932},[149,116303,166],{"class":325},[149,116305,32529],{"class":309},[149,116307,116308],{"class":155},".model.nq)\n",[149,116310,116311,116313,116316,116318],{"class":151,"line":18406},[149,116312,32551],{"class":309},[149,116314,116315],{"class":155},".data.qvel[:] ",[149,116317,166],{"class":325},[149,116319,106440],{"class":309},[149,116321,116322,116325,116327,116329,116331],{"class":151,"line":18412},[149,116323,116324],{"class":155},"        mujoco.mj_forward(",[149,116326,32529],{"class":309},[149,116328,116260],{"class":155},[149,116330,32529],{"class":309},[149,116332,116265],{"class":155},[149,116334,116335],{"class":151,"line":18423},[149,116336,4119],{"emptyLinePlaceholder":1800},[149,116338,116339,116341,116343,116345],{"class":151,"line":18446},[149,116340,32551],{"class":309},[149,116342,115385],{"class":155},[149,116344,166],{"class":325},[149,116346,49039],{"class":309},[149,116348,116349,116351,116353],{"class":151,"line":18468},[149,116350,16464],{"class":325},[149,116352,40579],{"class":309},[149,116354,116355],{"class":155},"._get_obs(), {}\n",[149,116357,116358],{"class":151,"line":18473},[149,116359,4119],{"emptyLinePlaceholder":1800},[149,116361,116362,116364,116367],{"class":151,"line":18479},[149,116363,32507],{"class":325},[149,116365,116366],{"class":162}," step",[149,116368,116369],{"class":155},"(self, action):\n",[149,116371,116372,116374,116376,116379,116381,116383],{"class":151,"line":18493},[149,116373,111901],{"class":155},[149,116375,166],{"class":325},[149,116377,116378],{"class":155}," np.asarray(action, ",[149,116380,95180],{"class":6932},[149,116382,166],{"class":325},[149,116384,115475],{"class":155},[149,116386,116387,116389,116391,116393,116395,116398,116400],{"class":151,"line":18506},[149,116388,111901],{"class":155},[149,116390,166],{"class":325},[149,116392,109126],{"class":155},[149,116394,32529],{"class":309},[149,116396,116397],{"class":155},".action_space.low, ",[149,116399,32529],{"class":309},[149,116401,116402],{"class":155},".action_space.high)\n",[149,116404,116405],{"class":151,"line":18511},[149,116406,4119],{"emptyLinePlaceholder":1800},[149,116408,116409,116411,116414,116416],{"class":151,"line":18525},[149,116410,32551],{"class":309},[149,116412,116413],{"class":155},".data.ctrl[:] ",[149,116415,166],{"class":325},[149,116417,109149],{"class":155},[149,116419,116420,116422,116424,116426,116428,116430,116432],{"class":151,"line":18530},[149,116421,5121],{"class":325},[149,116423,103181],{"class":155},[149,116425,27752],{"class":325},[149,116427,34149],{"class":309},[149,116429,319],{"class":155},[149,116431,32529],{"class":309},[149,116433,116434],{"class":155},".frame_skip):\n",[149,116436,116437,116440,116442,116444,116446],{"class":151,"line":18536},[149,116438,116439],{"class":155},"            mujoco.mj_step(",[149,116441,32529],{"class":309},[149,116443,116260],{"class":155},[149,116445,32529],{"class":309},[149,116447,116265],{"class":155},[149,116449,116450],{"class":151,"line":18541},[149,116451,4119],{"emptyLinePlaceholder":1800},[149,116453,116454,116456,116458,116460],{"class":151,"line":18555},[149,116455,32551],{"class":309},[149,116457,115385],{"class":155},[149,116459,11191],{"class":325},[149,116461,57391],{"class":309},[149,116463,116464],{"class":151,"line":18560},[149,116465,4119],{"emptyLinePlaceholder":1800},[149,116467,116468,116470,116472,116474],{"class":151,"line":18565},[149,116469,111861],{"class":155},[149,116471,166],{"class":325},[149,116473,40579],{"class":309},[149,116475,116476],{"class":155},"._get_obs()\n",[149,116478,116479,116481,116483,116485],{"class":151,"line":18579},[149,116480,111966],{"class":155},[149,116482,166],{"class":325},[149,116484,40579],{"class":309},[149,116486,116487],{"class":155},"._get_reward()\n",[149,116489,116490],{"class":151,"line":18591},[149,116491,4119],{"emptyLinePlaceholder":1800},[149,116493,116494,116496,116498,116500,116502,116504],{"class":151,"line":18596},[149,116495,113816],{"class":155},[149,116497,166],{"class":325},[149,116499,40579],{"class":309},[149,116501,116049],{"class":155},[149,116503,32529],{"class":309},[149,116505,116127],{"class":155},[149,116507,116508,116510,116512,116514,116516,116518],{"class":151,"line":18609},[149,116509,113829],{"class":155},[149,116511,166],{"class":325},[149,116513,40579],{"class":309},[149,116515,116049],{"class":155},[149,116517,32529],{"class":309},[149,116519,116142],{"class":155},[149,116521,116522,116524,116526,116528,116531,116533],{"class":151,"line":18614},[149,116523,116147],{"class":155},[149,116525,166],{"class":325},[149,116527,111476],{"class":309},[149,116529,116530],{"class":155},"(np.linalg.norm(tip ",[149,116532,2395],{"class":325},[149,116534,116535],{"class":155}," target))\n",[149,116537,116538],{"class":151,"line":18619},[149,116539,4119],{"emptyLinePlaceholder":1800},[149,116541,116542,116545,116547,116549,116551],{"class":151,"line":18624},[149,116543,116544],{"class":155},"        terminated ",[149,116546,166],{"class":325},[149,116548,115368],{"class":155},[149,116550,156],{"class":325},[149,116552,115373],{"class":309},[149,116554,116555,116558,116560,116562,116564,116566,116568],{"class":151,"line":18637},[149,116556,116557],{"class":155},"        truncated ",[149,116559,166],{"class":325},[149,116561,40579],{"class":309},[149,116563,115385],{"class":155},[149,116565,3430],{"class":325},[149,116567,40579],{"class":309},[149,116569,115392],{"class":155},[149,116571,116572,116575,116577,116579,116582],{"class":151,"line":18642},[149,116573,116574],{"class":155},"        info ",[149,116576,166],{"class":325},[149,116578,6166],{"class":155},[149,116580,116581],{"class":169},"\"distance\"",[149,116583,116584],{"class":155},": dist}\n",[149,116586,116587,116589],{"class":151,"line":34339},[149,116588,16464],{"class":325},[149,116590,116591],{"class":155}," obs, reward, terminated, truncated, info\n",[149,116593,116594],{"class":151,"line":34345},[149,116595,4119],{"emptyLinePlaceholder":1800},[149,116597,116598],{"class":151,"line":34351},[149,116599,4119],{"emptyLinePlaceholder":1800},[149,116601,116602,116604,116606,116608,116610],{"class":151,"line":34357},[149,116603,33653],{"class":325},[149,116605,3692],{"class":162},[149,116607,103078],{"class":155},[149,116609,97366],{"class":309},[149,116611,5457],{"class":155},[149,116613,116614,116617,116619],{"class":151,"line":34363},[149,116615,116616],{"class":155},"    env ",[149,116618,166],{"class":325},[149,116620,116621],{"class":155}," ReacherEnv()\n",[149,116623,116624,116627,116629,116632,116634,116636,116638],{"class":151,"line":34374},[149,116625,116626],{"class":155},"    obs, info ",[149,116628,166],{"class":325},[149,116630,116631],{"class":155}," env.reset(",[149,116633,116245],{"class":6932},[149,116635,166],{"class":325},[149,116637,2056],{"class":309},[149,116639,1878],{"class":155},[149,116641,116642,116644,116646,116649],{"class":151,"line":34380},[149,116643,33005],{"class":309},[149,116645,319],{"class":155},[149,116647,116648],{"class":169},"\"initial obs shape:\"",[149,116650,116651],{"class":155},", obs.shape)\n",[149,116653,116654,116656,116658,116661],{"class":151,"line":34400},[149,116655,33005],{"class":309},[149,116657,319],{"class":155},[149,116659,116660],{"class":169},"\"initial info:\"",[149,116662,116663],{"class":155},", info)\n",[149,116665,116666],{"class":151,"line":34406},[149,116667,4119],{"emptyLinePlaceholder":1800},[149,116669,116670,116672,116674],{"class":151,"line":34417},[149,116671,111832],{"class":155},[149,116673,166],{"class":325},[149,116675,106440],{"class":309},[149,116677,116678,116680,116682,116684,116686,116688,116690],{"class":151,"line":34423},[149,116679,4919],{"class":325},[149,116681,33322],{"class":155},[149,116683,27752],{"class":325},[149,116685,34149],{"class":309},[149,116687,319],{"class":155},[149,116689,2561],{"class":309},[149,116691,32492],{"class":155},[149,116693,116694,116696,116698],{"class":151,"line":34429},[149,116695,111901],{"class":155},[149,116697,166],{"class":325},[149,116699,116700],{"class":155}," env.action_space.sample()\n",[149,116702,116703,116706,116708],{"class":151,"line":34435},[149,116704,116705],{"class":155},"        obs, reward, terminated, truncated, info ",[149,116707,166],{"class":325},[149,116709,115094],{"class":155},[149,116711,116712,116714,116716],{"class":151,"line":34441},[149,116713,111976],{"class":155},[149,116715,11191],{"class":325},[149,116717,111981],{"class":155},[149,116719,116720,116722,116724,116726,116728,116731,116733,116735,116738,116740,116742,116745,116747,116749,116752,116754,116756,116758],{"class":151,"line":34447},[149,116721,34157],{"class":309},[149,116723,319],{"class":155},[149,116725,112010],{"class":169},[149,116727,112013],{"class":155},[149,116729,116730],{"class":169},"\"reward:\"",[149,116732,329],{"class":155},[149,116734,33724],{"class":309},[149,116736,116737],{"class":155},"(reward, ",[149,116739,1939],{"class":309},[149,116741,112024],{"class":155},[149,116743,116744],{"class":169},"\"distance:\"",[149,116746,329],{"class":155},[149,116748,33724],{"class":309},[149,116750,116751],{"class":155},"(info[",[149,116753,116581],{"class":169},[149,116755,113881],{"class":155},[149,116757,1939],{"class":309},[149,116759,32203],{"class":155},[149,116761,116762,116764,116767,116770],{"class":151,"line":34453},[149,116763,4216],{"class":325},[149,116765,116766],{"class":155}," terminated ",[149,116768,116769],{"class":325},"or",[149,116771,116772],{"class":155}," truncated:\n",[149,116774,116775],{"class":151,"line":34459},[149,116776,116777],{"class":325},"            break\n",[149,116779,116780],{"class":151,"line":34479},[149,116781,4119],{"emptyLinePlaceholder":1800},[149,116783,116784,116786,116788,116790,116792,116794,116796,116798],{"class":151,"line":34485},[149,116785,33005],{"class":309},[149,116787,319],{"class":155},[149,116789,112055],{"class":169},[149,116791,329],{"class":155},[149,116793,33724],{"class":309},[149,116795,112062],{"class":155},[149,116797,1939],{"class":309},[149,116799,32203],{"class":155},[149,116801,116802],{"class":151,"line":34501},[149,116803,4119],{"emptyLinePlaceholder":1800},[149,116805,116806],{"class":151,"line":34507},[149,116807,4119],{"emptyLinePlaceholder":1800},[149,116809,116810,116812,116814,116816,116818],{"class":151,"line":34521},[149,116811,3255],{"class":325},[149,116813,32926],{"class":309},[149,116815,103239],{"class":325},[149,116817,103242],{"class":169},[149,116819,5457],{"class":155},[149,116821,116822],{"class":151,"line":34527},[149,116823,103249],{"class":155},[24,116825,105249],{},[140,116827,116829],{"className":25530,"code":116828,"language":25532,"meta":145,"style":145},"touch ch8_gym_env.py\n",[48,116830,116831],{"__ignoreMap":145},[149,116832,116833,116835],{"class":151,"line":152},[149,116834,102963],{"class":162},[149,116836,116837],{"class":169}," ch8_gym_env.py\n",[24,116839,112123],{},[140,116841,116843],{"className":25530,"code":116842,"language":25532,"meta":145,"style":145},"python ch8_gym_env.py\n",[48,116844,116845],{"__ignoreMap":145},[149,116846,116847,116849],{"class":151,"line":152},[149,116848,32086],{"class":162},[149,116850,116837],{"class":169},[19,116852,103252],{"id":103252},[24,116854,116855],{},"继承 Gymnasium 环境：",[140,116857,116859],{"className":32084,"code":116858,"language":32086,"meta":145,"style":145},"class ReacherEnv(gym.Env):\n",[48,116860,116861],{"__ignoreMap":145},[149,116862,116863,116865,116867,116869,116871,116873,116875],{"class":151,"line":152},[149,116864,913],{"class":325},[149,116866,115736],{"class":162},[149,116868,319],{"class":155},[149,116870,115219],{"class":162},[149,116872,2421],{"class":155},[149,116874,115745],{"class":162},[149,116876,32492],{"class":155},[24,116878,116879],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[24,116881,116882],{},"初始化模型：",[140,116884,116886],{"className":32084,"code":116885,"language":32086,"meta":145,"style":145},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[48,116887,116888,116902],{"__ignoreMap":145},[149,116889,116890,116892,116894,116896,116898,116900],{"class":151,"line":152},[149,116891,32529],{"class":309},[149,116893,115796],{"class":155},[149,116895,166],{"class":325},[149,116897,103092],{"class":155},[149,116899,102994],{"class":309},[149,116901,1878],{"class":155},[149,116903,116904,116906,116908,116910,116912,116914],{"class":151,"line":193},[149,116905,32529],{"class":309},[149,116907,115811],{"class":155},[149,116909,166],{"class":325},[149,116911,115816],{"class":155},[149,116913,32529],{"class":309},[149,116915,115821],{"class":155},[24,116917,116918,116919,116921],{},"这和前面章节一样，只是现在放到了类的 ",[48,116920,32535],{}," 里。",[24,116923,116924],{},"缓存 site ID：",[140,116926,116928],{"className":32084,"code":116927,"language":32086,"meta":145,"style":145},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[48,116929,116930,116944],{"__ignoreMap":145},[149,116931,116932,116934,116936,116938,116940,116942],{"class":151,"line":152},[149,116933,32529],{"class":309},[149,116935,115832],{"class":155},[149,116937,166],{"class":325},[149,116939,115837],{"class":155},[149,116941,91235],{"class":309},[149,116943,1878],{"class":155},[149,116945,116946,116948,116950,116952,116954,116956],{"class":151,"line":193},[149,116947,32529],{"class":309},[149,116949,115853],{"class":155},[149,116951,166],{"class":325},[149,116953,115837],{"class":155},[149,116955,91235],{"class":309},[149,116957,1878],{"class":155},[24,116959,116960],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[24,116962,116963],{},"reset：",[140,116965,116967],{"className":32084,"code":116966,"language":32086,"meta":145,"style":145},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[48,116968,116969],{"__ignoreMap":145},[149,116970,116971,116973,116975,116977,116979,116981,116983,116985,116987,116989,116991,116993,116995,116997,116999,117001,117003],{"class":151,"line":152},[149,116972,33653],{"class":325},[149,116974,116201],{"class":162},[149,116976,116204],{"class":155},[149,116978,2318],{"class":325},[149,116980,116209],{"class":155},[149,116982,1875],{"class":309},[149,116984,26818],{"class":325},[149,116986,40639],{"class":309},[149,116988,15277],{"class":325},[149,116990,40639],{"class":309},[149,116992,116222],{"class":155},[149,116994,116225],{"class":309},[149,116996,26818],{"class":325},[149,116998,40639],{"class":309},[149,117000,15277],{"class":325},[149,117002,40639],{"class":309},[149,117004,32492],{"class":155},[24,117006,117007,117009],{},[48,117008,71740],{}," 做四件事：",[125,117011,117012,117015,117018,117021],{},[45,117013,117014],{},"设置随机种子。",[45,117016,117017],{},"重置 MuJoCo data。",[45,117019,117020],{},"随机初始化关节角。",[45,117022,117023],{},"返回初始观测和 info。",[24,117025,117026],{},"step：",[140,117028,117030],{"className":32084,"code":117029,"language":32086,"meta":145,"style":145},"def step(self, action):\n",[48,117031,117032],{"__ignoreMap":145},[149,117033,117034,117036,117038],{"class":151,"line":152},[149,117035,33653],{"class":325},[149,117037,116366],{"class":162},[149,117039,116369],{"class":155},[24,117041,117042,117044],{},[48,117043,108813],{}," 做六件事：",[125,117046,117047,117050,117056,117059,117062,117065],{},[45,117048,117049],{},"检查并裁剪 action。",[45,117051,117052,117053,30091],{},"写入 ",[48,117054,117055],{},"self.data.ctrl",[45,117057,117058],{},"连续推进若干个 MuJoCo 物理步。",[45,117060,117061],{},"计算新观测。",[45,117063,117064],{},"计算奖励和结束条件。",[45,117066,117067],{},"返回 Gymnasium 标准五元组。",[19,117069,103388],{"id":103388},[140,117071,117073],{"className":32084,"code":117072,"language":32086,"meta":145,"style":145},"import gymnasium as gym\n",[48,117074,117075],{"__ignoreMap":145},[149,117076,117077,117079,117081,117083],{"class":151,"line":152},[149,117078,32098],{"class":325},[149,117080,115574],{"class":155},[149,117082,33089],{"class":325},[149,117084,115579],{"class":155},[24,117086,117087,117088,117090,117091,117094],{},"导入 Gymnasium，并起别名 ",[48,117089,115219],{},"。后面写 ",[48,117092,117093],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[140,117096,117098],{"className":32084,"code":117097,"language":32086,"meta":145,"style":145},"from gymnasium import spaces\n",[48,117099,117100],{"__ignoreMap":145},[149,117101,117102,117104,117106,117108],{"class":151,"line":152},[149,117103,32443],{"class":325},[149,117105,115574],{"class":155},[149,117107,32098],{"class":325},[149,117109,115606],{"class":155},[24,117111,117112,117113,117116],{},"导入空间定义工具。",[48,117114,117115],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[140,117118,117119],{"className":32084,"code":116858,"language":32086,"meta":145,"style":145},[48,117120,117121],{"__ignoreMap":145},[149,117122,117123,117125,117127,117129,117131,117133,117135],{"class":151,"line":152},[149,117124,913],{"class":325},[149,117126,115736],{"class":162},[149,117128,319],{"class":155},[149,117130,115219],{"class":162},[149,117132,2421],{"class":155},[149,117134,115745],{"class":162},[149,117136,32492],{"class":155},[24,117138,117139,117140,117143,117144,117146,117147,102698,117149,117151],{},"定义一个类，名字叫 ",[48,117141,117142],{},"ReacherEnv","。括号里的 ",[48,117145,117093],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[48,117148,71740],{},[48,117150,108813],{}," 这两个核心方法。",[140,117153,117155],{"className":32084,"code":117154,"language":32086,"meta":145,"style":145},"metadata = {\"render_modes\": []}\n",[48,117156,117157],{"__ignoreMap":145},[149,117158,117159,117162,117164,117166,117168],{"class":151,"line":152},[149,117160,117161],{"class":155},"metadata ",[149,117163,166],{"class":325},[149,117165,6166],{"class":155},[149,117167,115759],{"class":169},[149,117169,115762],{"class":155},[24,117171,117172],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[140,117174,117176],{"className":32084,"code":117175,"language":32086,"meta":145,"style":145},"def __init__(self) -> None:\n",[48,117177,117178],{"__ignoreMap":145},[149,117179,117180,117182,117184,117186,117188],{"class":151,"line":152},[149,117181,33653],{"class":325},[149,117183,32510],{"class":309},[149,117185,115775],{"class":155},[149,117187,97366],{"class":309},[149,117189,5457],{"class":155},[24,117191,117192,117194,117195,30091],{},[48,117193,32535],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[48,117196,117197],{},"env = ReacherEnv()",[140,117199,117201],{"className":32084,"code":117200,"language":32086,"meta":145,"style":145},"super().__init__()\n",[48,117202,117203],{"__ignoreMap":145},[149,117204,117205,117208,117210,117212],{"class":151,"line":152},[149,117206,117207],{"class":309},"super",[149,117209,18971],{"class":155},[149,117211,32535],{"class":309},[149,117213,3695],{"class":155},[24,117215,117216,117217,117219],{},"调用父类 ",[48,117218,117093],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[140,117221,117222],{"className":32084,"code":116885,"language":32086,"meta":145,"style":145},[48,117223,117224,117238],{"__ignoreMap":145},[149,117225,117226,117228,117230,117232,117234,117236],{"class":151,"line":152},[149,117227,32529],{"class":309},[149,117229,115796],{"class":155},[149,117231,166],{"class":325},[149,117233,103092],{"class":155},[149,117235,102994],{"class":309},[149,117237,1878],{"class":155},[149,117239,117240,117242,117244,117246,117248,117250],{"class":151,"line":193},[149,117241,32529],{"class":309},[149,117243,115811],{"class":155},[149,117245,166],{"class":325},[149,117247,115816],{"class":155},[149,117249,32529],{"class":309},[149,117251,115821],{"class":155},[24,117253,117254,117255,117257,117258,102698,117261,117264],{},"把 MuJoCo 模型和状态保存到 ",[48,117256,32529],{}," 上。",[48,117259,117260],{},"self.model",[48,117262,117263],{},"self.data"," 表示这个环境对象自己的模型和状态。",[140,117266,117267],{"className":32084,"code":116927,"language":32086,"meta":145,"style":145},[48,117268,117269,117283],{"__ignoreMap":145},[149,117270,117271,117273,117275,117277,117279,117281],{"class":151,"line":152},[149,117272,32529],{"class":309},[149,117274,115832],{"class":155},[149,117276,166],{"class":325},[149,117278,115837],{"class":155},[149,117280,91235],{"class":309},[149,117282,1878],{"class":155},[149,117284,117285,117287,117289,117291,117293,117295],{"class":151,"line":193},[149,117286,32529],{"class":309},[149,117288,115853],{"class":155},[149,117290,166],{"class":325},[149,117292,115837],{"class":155},[149,117294,91235],{"class":309},[149,117296,1878],{"class":155},[24,117298,117299,117300,102698,117303,117306],{},"提前查好 tip 和 target 的 site ID。这样 ",[48,117301,117302],{},"_get_obs",[48,117304,117305],{},"_get_reward"," 里就不用每次按名字查找。",[140,117308,117310],{"className":32084,"code":117309,"language":32086,"meta":145,"style":145},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[48,117311,117312,117322,117332],{"__ignoreMap":145},[149,117313,117314,117316,117318,117320],{"class":151,"line":152},[149,117315,32529],{"class":309},[149,117317,115546],{"class":155},[149,117319,166],{"class":325},[149,117321,56122],{"class":309},[149,117323,117324,117326,117328,117330],{"class":151,"line":193},[149,117325,32529],{"class":309},[149,117327,115925],{"class":155},[149,117329,166],{"class":325},[149,117331,115930],{"class":309},[149,117333,117334,117336,117338,117340],{"class":151,"line":235},[149,117335,32529],{"class":309},[149,117337,115385],{"class":155},[149,117339,166],{"class":325},[149,117341,49039],{"class":309},[24,117343,117344,117347,117348,117351,117352,117355],{},[48,117345,117346],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[48,117349,117350],{},"max_steps"," 是一个 episode 最多运行多少步。",[48,117353,117354],{},"steps"," 记录当前 episode 已经走了多少步。",[140,117357,117358],{"className":32084,"code":115424,"language":32086,"meta":145,"style":145},[48,117359,117360],{"__ignoreMap":145},[149,117361,117362,117364,117366,117368,117370,117372,117374,117376,117378,117380,117382,117384,117386,117388,117390,117392,117394,117396,117398,117400],{"class":151,"line":152},[149,117363,32529],{"class":309},[149,117365,115433],{"class":155},[149,117367,166],{"class":325},[149,117369,115438],{"class":155},[149,117371,115441],{"class":6932},[149,117373,115444],{"class":325},[149,117375,104083],{"class":309},[149,117377,329],{"class":155},[149,117379,115451],{"class":6932},[149,117381,166],{"class":325},[149,117383,104083],{"class":309},[149,117385,329],{"class":155},[149,117387,97643],{"class":6932},[149,117389,166],{"class":325},[149,117391,319],{"class":155},[149,117393,1045],{"class":309},[149,117395,115468],{"class":155},[149,117397,95180],{"class":6932},[149,117399,166],{"class":325},[149,117401,115475],{"class":155},[24,117403,117404,117405,117408,117409,102698,117412,117415],{},"定义动作空间。",[48,117406,117407],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[48,117410,117411],{},"low=-1.0",[48,117413,117414],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[140,117417,117418],{"className":32084,"code":115485,"language":32086,"meta":145,"style":145},[48,117419,117420],{"__ignoreMap":145},[149,117421,117422,117424,117426,117428,117430,117432,117434,117436,117438,117440,117442,117444,117446,117448,117450,117452,117454,117456],{"class":151,"line":152},[149,117423,32529],{"class":309},[149,117425,115494],{"class":155},[149,117427,166],{"class":325},[149,117429,115438],{"class":155},[149,117431,115441],{"class":6932},[149,117433,115444],{"class":325},[149,117435,115505],{"class":155},[149,117437,115451],{"class":6932},[149,117439,166],{"class":325},[149,117441,115505],{"class":155},[149,117443,97643],{"class":6932},[149,117445,166],{"class":325},[149,117447,319],{"class":155},[149,117449,2309],{"class":309},[149,117451,115468],{"class":155},[149,117453,95180],{"class":6932},[149,117455,166],{"class":325},[149,117457,115475],{"class":155},[24,117459,117460,117461,117464,117465,117468],{},"定义观测空间。",[48,117462,117463],{},"shape=(10,)"," 表示观测是 10 个数。",[48,117466,117467],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[140,117470,117472],{"className":32084,"code":117471,"language":32086,"meta":145,"style":145},"def _get_obs(self) -> np.ndarray:\n",[48,117473,117474],{"__ignoreMap":145},[149,117475,117476,117478,117480],{"class":151,"line":152},[149,117477,33653],{"class":325},[149,117479,116035],{"class":162},[149,117481,116038],{"class":155},[24,117483,117484,117485,117487],{},"定义内部函数，用来生成观测。函数名前面的 ",[48,117486,2851],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[140,117489,117491],{"className":32084,"code":117490,"language":32086,"meta":145,"style":145},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[48,117492,117493,117507],{"__ignoreMap":145},[149,117494,117495,117497,117499,117501,117503,117505],{"class":151,"line":152},[149,117496,113247],{"class":155},[149,117498,166],{"class":325},[149,117500,40579],{"class":309},[149,117502,116049],{"class":155},[149,117504,32529],{"class":309},[149,117506,116054],{"class":155},[149,117508,117509,117511,117513,117515,117517,117519],{"class":151,"line":193},[149,117510,113257],{"class":155},[149,117512,166],{"class":325},[149,117514,40579],{"class":309},[149,117516,116049],{"class":155},[149,117518,32529],{"class":309},[149,117520,116069],{"class":155},[24,117522,117523],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[140,117525,117527],{"className":32084,"code":117526,"language":32086,"meta":145,"style":145},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[48,117528,117529,117545],{"__ignoreMap":145},[149,117530,117531,117533,117535,117537,117539,117541,117543],{"class":151,"line":152},[149,117532,112533],{"class":155},[149,117534,166],{"class":325},[149,117536,116078],{"class":155},[149,117538,32529],{"class":309},[149,117540,116083],{"class":155},[149,117542,32529],{"class":309},[149,117544,116088],{"class":155},[149,117546,117547,117549],{"class":151,"line":193},[149,117548,18756],{"class":325},[149,117550,116095],{"class":155},[24,117552,117553,117554,117557,117558,117560],{},"拼接观测，并转换成 ",[48,117555,117556],{},"float32","。很多强化学习库默认使用 ",[48,117559,117556],{},"，所以这里主动转换。",[140,117562,117563],{"className":32084,"code":116966,"language":32086,"meta":145,"style":145},[48,117564,117565],{"__ignoreMap":145},[149,117566,117567,117569,117571,117573,117575,117577,117579,117581,117583,117585,117587,117589,117591,117593,117595,117597,117599],{"class":151,"line":152},[149,117568,33653],{"class":325},[149,117570,116201],{"class":162},[149,117572,116204],{"class":155},[149,117574,2318],{"class":325},[149,117576,116209],{"class":155},[149,117578,1875],{"class":309},[149,117580,26818],{"class":325},[149,117582,40639],{"class":309},[149,117584,15277],{"class":325},[149,117586,40639],{"class":309},[149,117588,116222],{"class":155},[149,117590,116225],{"class":309},[149,117592,26818],{"class":325},[149,117594,40639],{"class":309},[149,117596,15277],{"class":325},[149,117598,40639],{"class":309},[149,117600,32492],{"class":155},[24,117602,117603,117604,117606,117607,117610],{},"定义 reset。",[48,117605,116245],{}," 用来控制随机数，保证实验可以复现。",[48,117608,117609],{},"options"," 用来接收额外配置，本章暂时不用。",[140,117612,117614],{"className":32084,"code":117613,"language":32086,"meta":145,"style":145},"super().reset(seed=seed)\n",[48,117615,117616],{"__ignoreMap":145},[149,117617,117618,117620,117622,117624,117626],{"class":151,"line":152},[149,117619,117207],{"class":309},[149,117621,116242],{"class":155},[149,117623,116245],{"class":6932},[149,117625,166],{"class":325},[149,117627,116250],{"class":155},[24,117629,117630,117631,117634],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[48,117632,117633],{},"self.np_random"," 生成可复现的随机数。",[140,117636,117638],{"className":32084,"code":117637,"language":32086,"meta":145,"style":145},"mujoco.mj_resetData(self.model, self.data)\n",[48,117639,117640],{"__ignoreMap":145},[149,117641,117642,117645,117647,117649,117651],{"class":151,"line":152},[149,117643,117644],{"class":155},"mujoco.mj_resetData(",[149,117646,32529],{"class":309},[149,117648,116260],{"class":155},[149,117650,32529],{"class":309},[149,117652,116265],{"class":155},[24,117654,117655],{},"把 MuJoCo 状态重置到默认状态。",[140,117657,117659],{"className":32084,"code":117658,"language":32086,"meta":145,"style":145},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[48,117660,117661],{"__ignoreMap":145},[149,117662,117663,117665,117667,117669,117671,117673,117675,117677,117679,117681,117683,117685,117687,117689,117691,117693,117695],{"class":151,"line":152},[149,117664,32529],{"class":309},[149,117666,116276],{"class":155},[149,117668,166],{"class":325},[149,117670,40579],{"class":309},[149,117672,116283],{"class":155},[149,117674,115441],{"class":6932},[149,117676,115444],{"class":325},[149,117678,87891],{"class":309},[149,117680,329],{"class":155},[149,117682,115451],{"class":6932},[149,117684,166],{"class":325},[149,117686,87891],{"class":309},[149,117688,329],{"class":155},[149,117690,33202],{"class":6932},[149,117692,166],{"class":325},[149,117694,32529],{"class":309},[149,117696,116308],{"class":155},[24,117698,117020,117699,117702,117703,117706,117707,117709],{},[48,117700,117701],{},"[:]"," 表示修改整个数组。",[48,117704,117705],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[48,117708,103830],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[140,117711,117713],{"className":32084,"code":117712,"language":32086,"meta":145,"style":145},"self.data.qvel[:] = 0.0\n",[48,117714,117715],{"__ignoreMap":145},[149,117716,117717,117719,117721,117723],{"class":151,"line":152},[149,117718,32529],{"class":309},[149,117720,116315],{"class":155},[149,117722,166],{"class":325},[149,117724,106440],{"class":309},[24,117726,117727],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[140,117729,117731],{"className":32084,"code":117730,"language":32086,"meta":145,"style":145},"self.steps = 0\nreturn self._get_obs(), {}\n",[48,117732,117733,117743],{"__ignoreMap":145},[149,117734,117735,117737,117739,117741],{"class":151,"line":152},[149,117736,32529],{"class":309},[149,117738,115385],{"class":155},[149,117740,166],{"class":325},[149,117742,49039],{"class":309},[149,117744,117745,117747,117749],{"class":151,"line":193},[149,117746,18756],{"class":325},[149,117748,40579],{"class":309},[149,117750,116355],{"class":155},[24,117752,117753],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[140,117755,117756],{"className":32084,"code":117029,"language":32086,"meta":145,"style":145},[48,117757,117758],{"__ignoreMap":145},[149,117759,117760,117762,117764],{"class":151,"line":152},[149,117761,33653],{"class":325},[149,117763,116366],{"class":162},[149,117765,116369],{"class":155},[24,117767,117768],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[140,117770,117772],{"className":32084,"code":117771,"language":32086,"meta":145,"style":145},"action = np.asarray(action, dtype=np.float32)\n",[48,117773,117774],{"__ignoreMap":145},[149,117775,117776,117778,117780,117782,117784,117786],{"class":151,"line":152},[149,117777,109121],{"class":155},[149,117779,166],{"class":325},[149,117781,116378],{"class":155},[149,117783,95180],{"class":6932},[149,117785,166],{"class":325},[149,117787,115475],{"class":155},[24,117789,117790,117791,30091],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[48,117792,117556],{},[140,117794,117796],{"className":32084,"code":117795,"language":32086,"meta":145,"style":145},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[48,117797,117798],{"__ignoreMap":145},[149,117799,117800,117802,117804,117806,117808,117810,117812],{"class":151,"line":152},[149,117801,109121],{"class":155},[149,117803,166],{"class":325},[149,117805,109126],{"class":155},[149,117807,32529],{"class":309},[149,117809,116397],{"class":155},[149,117811,32529],{"class":309},[149,117813,116402],{"class":155},[24,117815,117816],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[140,117818,117820],{"className":32084,"code":117819,"language":32086,"meta":145,"style":145},"self.data.ctrl[:] = action\n",[48,117821,117822],{"__ignoreMap":145},[149,117823,117824,117826,117828,117830],{"class":151,"line":152},[149,117825,32529],{"class":309},[149,117827,116413],{"class":155},[149,117829,166],{"class":325},[149,117831,109149],{"class":155},[24,117833,117834],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[140,117836,117838],{"className":32084,"code":117837,"language":32086,"meta":145,"style":145},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[48,117839,117840,117856],{"__ignoreMap":145},[149,117841,117842,117844,117846,117848,117850,117852,117854],{"class":151,"line":152},[149,117843,4743],{"class":325},[149,117845,103181],{"class":155},[149,117847,27752],{"class":325},[149,117849,34149],{"class":309},[149,117851,319],{"class":155},[149,117853,32529],{"class":309},[149,117855,116434],{"class":155},[149,117857,117858,117861,117863,117865,117867],{"class":151,"line":193},[149,117859,117860],{"class":155},"    mujoco.mj_step(",[149,117862,32529],{"class":309},[149,117864,116260],{"class":155},[149,117866,32529],{"class":309},[149,117868,116265],{"class":155},[24,117870,117871,117872,117875,117876,117878,117879,30091],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[48,117873,117874],{},"frame_skip=5","，所以外部调用一次 ",[48,117877,115556],{},"，内部实际执行 5 次 ",[48,117880,102895],{},[140,117882,117884],{"className":32084,"code":117883,"language":32086,"meta":145,"style":145},"self.steps += 1\n",[48,117885,117886],{"__ignoreMap":145},[149,117887,117888,117890,117892,117894],{"class":151,"line":152},[149,117889,32529],{"class":309},[149,117891,115385],{"class":155},[149,117893,11191],{"class":325},[149,117895,57391],{"class":309},[24,117897,117898],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[140,117900,117902],{"className":32084,"code":117901,"language":32086,"meta":145,"style":145},"obs = self._get_obs()\nreward = self._get_reward()\n",[48,117903,117904,117914],{"__ignoreMap":145},[149,117905,117906,117908,117910,117912],{"class":151,"line":152},[149,117907,112533],{"class":155},[149,117909,166],{"class":325},[149,117911,40579],{"class":309},[149,117913,116476],{"class":155},[149,117915,117916,117918,117920,117922],{"class":151,"line":193},[149,117917,112684],{"class":155},[149,117919,166],{"class":325},[149,117921,40579],{"class":309},[149,117923,116487],{"class":155},[24,117925,117926],{},"计算新的观测和奖励。",[140,117928,117930],{"className":32084,"code":117929,"language":32086,"meta":145,"style":145},"dist = float(np.linalg.norm(tip - target))\n",[48,117931,117932],{"__ignoreMap":145},[149,117933,117934,117936,117938,117940,117942,117944],{"class":151,"line":152},[149,117935,113275],{"class":155},[149,117937,166],{"class":325},[149,117939,111476],{"class":309},[149,117941,116530],{"class":155},[149,117943,2395],{"class":325},[149,117945,116535],{"class":155},[24,117947,117948],{},"计算末端到目标的距离，并转换成 Python float。",[140,117950,117951],{"className":32084,"code":115356,"language":32086,"meta":145,"style":145},[48,117952,117953,117965],{"__ignoreMap":145},[149,117954,117955,117957,117959,117961,117963],{"class":151,"line":152},[149,117956,115363],{"class":155},[149,117958,166],{"class":325},[149,117960,115368],{"class":155},[149,117962,156],{"class":325},[149,117964,115373],{"class":309},[149,117966,117967,117969,117971,117973,117975,117977,117979],{"class":151,"line":193},[149,117968,115378],{"class":155},[149,117970,166],{"class":325},[149,117972,40579],{"class":309},[149,117974,115385],{"class":155},[149,117976,3430],{"class":325},[149,117978,40579],{"class":309},[149,117980,115392],{"class":155},[24,117982,117983],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[140,117985,117987],{"className":32084,"code":117986,"language":32086,"meta":145,"style":145},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[48,117988,117989,118002],{"__ignoreMap":145},[149,117990,117991,117994,117996,117998,118000],{"class":151,"line":152},[149,117992,117993],{"class":155},"info ",[149,117995,166],{"class":325},[149,117997,6166],{"class":155},[149,117999,116581],{"class":169},[149,118001,116584],{"class":155},[149,118003,118004,118006],{"class":151,"line":193},[149,118005,18756],{"class":325},[149,118007,116591],{"class":155},[24,118009,118010,118013],{},[48,118011,118012],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[140,118015,118017],{"className":32084,"code":118016,"language":32086,"meta":145,"style":145},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[48,118018,118019,118028],{"__ignoreMap":145},[149,118020,118021,118024,118026],{"class":151,"line":152},[149,118022,118023],{"class":155},"env ",[149,118025,166],{"class":325},[149,118027,116621],{"class":155},[149,118029,118030,118032,118034,118036,118038,118040,118042],{"class":151,"line":193},[149,118031,115079],{"class":155},[149,118033,166],{"class":325},[149,118035,116631],{"class":155},[149,118037,116245],{"class":6932},[149,118039,166],{"class":325},[149,118041,2056],{"class":309},[149,118043,1878],{"class":155},[24,118045,118046,118047,118050],{},"创建环境并重置。",[48,118048,118049],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[140,118052,118054],{"className":32084,"code":118053,"language":32086,"meta":145,"style":145},"action = env.action_space.sample()\n",[48,118055,118056],{"__ignoreMap":145},[149,118057,118058,118060,118062],{"class":151,"line":152},[149,118059,109121],{"class":155},[149,118061,166],{"class":325},[149,118063,116700],{"class":155},[24,118065,118066],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118068,103996],{"id":103995},[24,118070,107163],{},[140,118072,118075],{"className":118073,"code":118074,"language":1655,"meta":145},[1653],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[48,118076,118074],{"__ignoreMap":145},[24,118078,118079],{},"这个环境已经具备强化学习环境的基本结构。",[24,118081,118082],{},"主函数里使用随机动作：",[140,118084,118085],{"className":32084,"code":118053,"language":32086,"meta":145,"style":145},[48,118086,118087],{"__ignoreMap":145},[149,118088,118089,118091,118093],{"class":151,"line":152},[149,118090,109121],{"class":155},[149,118092,166],{"class":325},[149,118094,116700],{"class":155},[24,118096,118097],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118099,104028],{"id":104027},[125,118101,118102,118105,118111,118120,118129,118138,118144],{},[45,118103,118104],{},"运行程序。",[45,118106,118107,118108,30091],{},"确认 ",[48,118109,118110],{},"obs.shape == (10,)",[45,118112,112860,118113,118116,118117,30091],{},[48,118114,118115],{},"env.action_space","，应类似 ",[48,118118,118119],{},"Box(-1.0, 1.0, (2,), float32)",[45,118121,107264,118122,118125,118126,30091],{},[48,118123,118124],{},"self.max_steps = 10","，确认环境会更快 ",[48,118127,118128],{},"truncated=True",[45,118130,104091,118131,104094,118134,118137],{},[48,118132,118133],{},"terminated = dist \u003C 0.05",[48,118135,118136],{},"dist \u003C 0.2","，观察是否更容易结束。",[45,118139,104091,118140,118143],{},[48,118141,118142],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[45,118145,118146,118147,118149,118150,118153],{},"在 ",[48,118148,118012],{}," 里加入 ",[48,118151,118152],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118155,104133],{"id":104132},[19,118157,118159],{"id":118158},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[24,118161,118162,118163,118165],{},"Gymnasium 的 ",[48,118164,108813],{}," 返回 5 个值:",[140,118167,118169],{"className":32084,"code":118168,"language":32086,"meta":145,"style":145},"obs, reward, terminated, truncated, info\n",[48,118170,118171],{"__ignoreMap":145},[149,118172,118173],{"class":151,"line":152},[149,118174,118168],{"class":155},[24,118176,118177],{},"不是旧 Gym 的 4 个值。",[19,118179,118181,118184],{"id":118180},"datactrl-action-维度错误",[48,118182,118183],{},"data.ctrl[:] = action"," 维度错误",[24,118186,104203],{},[140,118188,118190],{"className":32084,"code":118189,"language":32086,"meta":145,"style":145},"print(self.model.nu)\nprint(action.shape)\n",[48,118191,118192,118203],{"__ignoreMap":145},[149,118193,118194,118196,118198,118200],{"class":151,"line":152},[149,118195,32121],{"class":309},[149,118197,319],{"class":155},[149,118199,32529],{"class":309},[149,118201,118202],{"class":155},".model.nu)\n",[149,118204,118205,118207],{"class":151,"line":193},[149,118206,32121],{"class":309},[149,118208,118209],{"class":155},"(action.shape)\n",[24,118211,118212],{},"两者必须匹配。",[19,118214,118216],{"id":118215},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[24,118218,104142],{},[140,118220,118222],{"className":32084,"code":118221,"language":32086,"meta":145,"style":145},"mujoco.mj_forward(self.model, self.data)\n",[48,118223,118224],{"__ignoreMap":145},[149,118225,118226,118229,118231,118233,118235],{"class":151,"line":152},[149,118227,118228],{"class":155},"mujoco.mj_forward(",[149,118230,32529],{"class":309},[149,118232,116260],{"class":155},[149,118234,32529],{"class":309},[149,118236,116265],{"class":155},[19,118238,118240,118242],{"id":118239},"observation_space-维度和-obs-不一致",[48,118241,115279],{}," 维度和 obs 不一致",[24,118244,104255],{},[140,118246,118248],{"className":32084,"code":118247,"language":32086,"meta":145,"style":145},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[48,118249,118250,118260,118267],{"__ignoreMap":145},[149,118251,118252,118254,118256,118258],{"class":151,"line":152},[149,118253,112533],{"class":155},[149,118255,166],{"class":325},[149,118257,40579],{"class":309},[149,118259,116476],{"class":155},[149,118261,118262,118264],{"class":151,"line":193},[149,118263,32121],{"class":309},[149,118265,118266],{"class":155},"(obs.shape)\n",[149,118268,118269,118271,118273,118275],{"class":151,"line":235},[149,118270,32121],{"class":309},[149,118272,319],{"class":155},[149,118274,32529],{"class":309},[149,118276,118277],{"class":155},".observation_space.shape)\n",[24,118279,118280],{},"两者必须一致。本章观测是：",[140,118282,118285],{"className":118283,"code":118284,"language":1655,"meta":145},[1653],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[48,118286,118284],{"__ignoreMap":145},[19,118288,118290],{"id":118289},"action-超过范围","action 超过范围",[24,118292,118293],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[140,118295,118296],{"className":32084,"code":117795,"language":32086,"meta":145,"style":145},[48,118297,118298],{"__ignoreMap":145},[149,118299,118300,118302,118304,118306,118308,118310,118312],{"class":151,"line":152},[149,118301,109121],{"class":155},[149,118303,166],{"class":325},[149,118305,109126],{"class":155},[149,118307,32529],{"class":309},[149,118309,116397],{"class":155},[149,118311,32529],{"class":309},[149,118313,116402],{"class":155},[24,118315,118316,118317,30091],{},"这能避免无效动作直接写入 ",[48,118318,102756],{},[19,118320,118322],{"id":118321},"忘记返回-info","忘记返回 info",[24,118324,118162,118325,102698,118327,118329],{},[48,118326,71740],{},[48,118328,108813],{}," 都会返回 info：",[140,118331,118332],{"className":32084,"code":115072,"language":32086,"meta":145,"style":145},[48,118333,118334,118342],{"__ignoreMap":145},[149,118335,118336,118338,118340],{"class":151,"line":152},[149,118337,115079],{"class":155},[149,118339,166],{"class":325},[149,118341,115084],{"class":155},[149,118343,118344,118346,118348],{"class":151,"line":193},[149,118345,115089],{"class":155},[149,118347,166],{"class":325},[149,118349,115094],{"class":155},[24,118351,118352,118353,30091],{},"即使暂时没有额外信息，也返回 ",[48,118354,34165],{},[14,118356,118358],{"id":118357},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[24,118360,118361],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[125,118363,118364,118367,118370,118373,118376,118379],{},[45,118365,118366],{},"更稳定的 reward。",[45,118368,118369],{},"合理的 episode 长度。",[45,118371,118372],{},"可重复的随机目标采样。",[45,118374,118375],{},"render 接口。",[45,118377,118378],{},"环境注册代码。",[45,118380,118381],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[24,118383,118384],{},"如果只是自己写训练循环，最小形式是：",[140,118386,118388],{"className":32084,"code":118387,"language":32086,"meta":145,"style":145},"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",[48,118389,118390,118398,118414,118418,118434,118443,118452,118462],{"__ignoreMap":145},[149,118391,118392,118394,118396],{"class":151,"line":152},[149,118393,118023],{"class":155},[149,118395,166],{"class":325},[149,118397,116621],{"class":155},[149,118399,118400,118402,118404,118406,118408,118410,118412],{"class":151,"line":193},[149,118401,115079],{"class":155},[149,118403,166],{"class":325},[149,118405,116631],{"class":155},[149,118407,116245],{"class":6932},[149,118409,166],{"class":325},[149,118411,2056],{"class":309},[149,118413,1878],{"class":155},[149,118415,118416],{"class":151,"line":235},[149,118417,4119],{"emptyLinePlaceholder":1800},[149,118419,118420,118422,118424,118426,118428,118430,118432],{"class":151,"line":340},[149,118421,4743],{"class":325},[149,118423,103181],{"class":155},[149,118425,27752],{"class":325},[149,118427,34149],{"class":309},[149,118429,319],{"class":155},[149,118431,8126],{"class":309},[149,118433,32492],{"class":155},[149,118435,118436,118439,118441],{"class":151,"line":346},[149,118437,118438],{"class":155},"    action ",[149,118440,166],{"class":325},[149,118442,116700],{"class":155},[149,118444,118445,118448,118450],{"class":151,"line":352},[149,118446,118447],{"class":155},"    obs, reward, terminated, truncated, info ",[149,118449,166],{"class":325},[149,118451,115094],{"class":155},[149,118453,118454,118456,118458,118460],{"class":151,"line":1021},[149,118455,4819],{"class":325},[149,118457,116766],{"class":155},[149,118459,116769],{"class":325},[149,118461,116772],{"class":155},[149,118463,118464,118467,118469],{"class":151,"line":1035},[149,118465,118466],{"class":155},"        obs, info ",[149,118468,166],{"class":325},[149,118470,115084],{"class":155},[14,118472,118474],{"id":118473},"_9本章小结","9.本章小结",[24,118476,118477],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[140,118479,118482],{"className":118480,"code":118481,"language":1655,"meta":145},[1653],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[48,118483,118481],{"__ignoreMap":145},[24,118485,118486],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1783,118488,118489],{},"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":145,"searchDepth":193,"depth":193,"links":118491},[118492,118493,118494,118501,118505,118506,118507,118517,118518],{"id":102326,"depth":193,"text":102327},{"id":102449,"depth":193,"text":102450},{"id":102724,"depth":193,"text":102725,"children":118495},[118496,118498,118500],{"id":115303,"depth":235,"text":118497},"terminated 和 truncated 的区别",{"id":115406,"depth":235,"text":118499},"observation_space 和 action_space",{"id":115533,"depth":235,"text":115534},{"id":102932,"depth":193,"text":102933,"children":118502},[118503,118504],{"id":103252,"depth":235,"text":103252},{"id":103388,"depth":235,"text":103388},{"id":103995,"depth":193,"text":103996},{"id":104027,"depth":193,"text":104028},{"id":104132,"depth":193,"text":104133,"children":118508},[118509,118510,118512,118513,118515,118516],{"id":118158,"depth":235,"text":118159},{"id":118180,"depth":235,"text":118511},"data.ctrl[:] = action 维度错误",{"id":118215,"depth":235,"text":118216},{"id":118239,"depth":235,"text":118514},"observation_space 维度和 obs 不一致",{"id":118289,"depth":235,"text":118290},{"id":118321,"depth":235,"text":118322},{"id":118357,"depth":193,"text":118358},{"id":118473,"depth":193,"text":118474},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115056,"description":145},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118525,"title":118526,"body":118527,"description":118950,"extension":1798,"meta":118951,"navigation":1800,"path":118952,"seo":118953,"stem":118954,"__hash__":118955},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118528,"toc":118940},[118529,118533,118536,118539,118559,118565,118571,118581,118584,118587,118607,118610,118614,118617,118623,118626,118640,118643,118646,118720,118723,118729,118732,118755,118758,118808,118811,118817,118820,118823,118826,118845,118848,118854,118857,118860,118863,118883,118886,118889,118892,118937],[10,118530,118532],{"id":118531},"mujoco-学习","MuJoCo 学习",[24,118534,118535],{},"初版",[24,118537,118538],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[125,118540,118541,118544,118547,118556],{},[45,118542,118543],{},"MuJoCo 模型文件在描述什么。",[45,118545,118546],{},"Python 代码怎样读取和推进仿真。",[45,118548,118549,2077,118551,2077,118553,118555],{},[48,118550,105709],{},[48,118552,106039],{},[48,118554,106042],{}," 这些数组为什么重要。",[45,118557,118558],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[24,118560,118561,118562,118564],{},"默认环境为 Fedora 44、Python >= 3.10、",[48,118563,102707],{}," 官方 Python bindings。",[24,118566,118567,118568,118570],{},"注意：本文禁止使用 ",[48,118569,102692],{},"。所有示例均使用：",[140,118572,118573],{"className":32084,"code":103258,"language":32086,"meta":145,"style":145},[48,118574,118575],{"__ignoreMap":145},[149,118576,118577,118579],{"class":151,"line":152},[149,118578,32098],{"class":325},[149,118580,102981],{"class":155},[14,118582,118583],{"id":118583},"适合谁阅读",[24,118585,118586],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[125,118588,118589,118592,118595,118598],{},[45,118590,118591],{},"没学过 MuJoCo，只会一点 Python。",[45,118593,118594],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[45,118596,118597],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[45,118599,118600,118601,118603,118604,118606],{},"以前接触过 ",[48,118602,102692],{},"，现在想迁移到官方 ",[48,118605,102701],{}," Python bindings。",[24,118608,118609],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118611,118613],{"id":118612},"mujoco-到底是什么","MuJoCo 到底是什么",[24,118615,118616],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[140,118618,118621],{"className":118619,"code":118620,"language":1655,"meta":145},[1653],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[48,118622,118620],{"__ignoreMap":145},[24,118624,118625],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[125,118627,118628,118631,118634,118637],{},[45,118629,118630],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[45,118632,118633],{},"快速测试控制算法，不必一开始就上真实机器人。",[45,118635,118636],{},"生成强化学习环境。",[45,118638,118639],{},"采集状态、动作、图像、奖励等训练数据。",[14,118641,118642],{"id":118642},"学习前的心智模型",[24,118644,118645],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[2003,118647,118648,118660],{},[2006,118649,118650],{},[2009,118651,118652,118655,118658],{},[2012,118653,118654],{"align":1566},"部分",[2012,118656,118657],{"align":1566},"负责什么",[2012,118659,22897],{"align":1566},[2049,118661,118662,118673,118685,118697,118709],{},[2009,118663,118664,118667,118670],{},[2054,118665,118666],{"align":1566},"MJCF XML",[2054,118668,118669],{"align":1566},"定义世界和机器人结构",[2054,118671,118672],{"align":1566},"地面、盒子、关节、电机、摄像头",[2009,118674,118675,118679,118682],{},[2054,118676,118677],{"align":1566},[48,118678,102389],{},[2054,118680,118681],{"align":1566},"编译后的静态模型",[2054,118683,118684],{"align":1566},"有几个关节、有几个电机、时间步长是多少",[2009,118686,118687,118691,118694],{},[2054,118688,118689],{"align":1566},[48,118690,102399],{},[2054,118692,118693],{"align":1566},"运行中的动态状态",[2054,118695,118696],{"align":1566},"当前时间、位置、速度、电机输入",[2009,118698,118699,118703,118706],{},[2054,118700,118701],{"align":1566},[48,118702,102895],{},[2054,118704,118705],{"align":1566},"推进一步物理仿真",[2054,118707,118708],{"align":1566},"根据重力、力、碰撞更新状态",[2009,118710,118711,118714,118717],{},[2054,118712,118713],{"align":1566},"Viewer \u002F Renderer",[2054,118715,118716],{"align":1566},"把仿真显示出来",[2054,118718,118719],{"align":1566},"打开窗口或保存图片",[24,118721,118722],{},"一句话总结：",[140,118724,118727],{"className":118725,"code":118726,"language":1655,"meta":145},[1653],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[48,118728,118726],{"__ignoreMap":145},[24,118730,118731],{},"参考来源：",[42,118733,118734,118741,118748],{},[45,118735,118736,118737],{},"MuJoCo Python 官方文档：",[2102,118738,118739],{"href":118739,"rel":118740},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25573],[45,118742,118743,118744],{},"MuJoCo XML Reference：",[2102,118745,118746],{"href":118746,"rel":118747},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25573],[45,118749,118750,118751],{},"MuJoCo Overview：",[2102,118752,118753],{"href":118753,"rel":118754},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25573],[14,118756,118757],{"id":118757},"章节目录",[125,118759,118760,118766,118772,118778,118784,118790,118796,118802],{},[45,118761,118762],{},[2102,118763,118765],{"href":118764},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[45,118767,118768],{},[2102,118769,118771],{"href":118770},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[45,118773,118774],{},[2102,118775,118777],{"href":118776},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[45,118779,118780],{},[2102,118781,118783],{"href":118782},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[45,118785,118786],{},[2102,118787,118789],{"href":118788},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[45,118791,118792],{},[2102,118793,118795],{"href":118794},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[45,118797,118798],{},[2102,118799,118801],{"href":118800},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[45,118803,118804],{},[2102,118805,118807],{"href":118806},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118809,118810],{"id":118810},"推荐学习路线",[140,118812,118815],{"className":118813,"code":118814,"language":1655,"meta":145},[1653],"环境安装\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",[48,118816,118814],{"__ignoreMap":145},[24,118818,118819],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118821,118822],{"id":118822},"建议的目录结构",[24,118824,118825],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[140,118827,118829],{"className":25530,"code":118828,"language":25532,"meta":145,"style":145},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[48,118830,118831,118839],{"__ignoreMap":145},[149,118832,118833,118835,118837],{"class":151,"line":152},[149,118834,102946],{"class":162},[149,118836,30922],{"class":309},[149,118838,102951],{"class":169},[149,118840,118841,118843],{"class":151,"line":193},[149,118842,102956],{"class":309},[149,118844,102951],{"class":169},[24,118846,118847],{},"每一章的代码都单独保存：",[140,118849,118852],{"className":118850,"code":118851,"language":1655,"meta":145},[1653],"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",[48,118853,118851],{"__ignoreMap":145},[24,118855,118856],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118858,118859],{"id":118859},"学习方法",[24,118861,118862],{},"每章建议按这个顺序操作：",[125,118864,118865,118868,118871,118874,118877,118880],{},[45,118866,118867],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[45,118869,118870],{},"复制最小可运行代码，保存成指定文件。",[45,118872,118873],{},"运行代码，确认没有报错。",[45,118875,118876],{},"对照“运行结果说明”理解输出。",[45,118878,118879],{},"做“验证步骤”，主动改一两个参数。",[45,118881,118882],{},"遇到报错先看“常见错误与解决方案”。",[24,118884,118885],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118887,118888],{"id":118888},"全局排错顺序",[24,118890,118891],{},"遇到问题时，按下面顺序查：",[125,118893,118894,118900,118906,118911,118914,118917,118924,118934],{},[45,118895,118896,118897],{},"Python 环境是否激活：",[48,118898,118899],{},"which python",[45,118901,118902,118903],{},"MuJoCo 是否能导入：",[48,118904,118905],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[45,118907,118908,118909],{},"是否误装了 ",[48,118910,102692],{},[45,118912,118913],{},"XML 标签是否闭合、属性是否拼写正确",[45,118915,118916],{},"actuator 引用的 joint 名字是否存在",[45,118918,118919,118921,118922],{},[48,118920,102756],{}," 的长度是否等于 ",[48,118923,103838],{},[45,118925,107264,118926,84220,118928,118930,118931],{},[48,118927,105709],{},[48,118929,106039],{}," 后是否调用了 ",[48,118932,118933],{},"mujoco.mj_forward",[45,118935,118936],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1783,118938,118939],{},"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":145,"searchDepth":193,"depth":193,"links":118941},[118942,118943,118944,118945,118946,118947,118948,118949],{"id":118583,"depth":193,"text":118583},{"id":118612,"depth":193,"text":118613},{"id":118642,"depth":193,"text":118642},{"id":118757,"depth":193,"text":118757},{"id":118810,"depth":193,"text":118810},{"id":118822,"depth":193,"text":118822},{"id":118859,"depth":193,"text":118859},{"id":118888,"depth":193,"text":118888},"仿真搭建。",{"category":25087},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118526,"description":118950},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118957,"title":118958,"body":118959,"description":1797,"extension":1798,"meta":119414,"navigation":1800,"path":119415,"seo":119416,"stem":119417,"__hash__":119418},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118960,"toc":119412},[118961,118964,118967,118973,119409],[10,118962,118958],{"id":118963},"_1-最常用的基本操作更新",[24,118965,118966],{},"装linux系统教程：",[24,118968,118969],{},[2102,118970,118971],{"href":118971,"rel":118972},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25573],[140,118974,118978],{"className":118975,"code":118976,"language":118977,"meta":145,"style":145},"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",[48,118979,118980,118985,118990,118999,119004,119013,119018,119038,119043,119054,119059,119068,119073,119101,119106,119125,119130,119149,119153,119158,119174,119178,119183,119213,119217,119222,119238,119242,119247,119262,119266,119271,119287,119291,119296,119308,119320,119324,119329,119346,119350,119355,119373,119377,119382,119391,119395,119400],{"__ignoreMap":145},[149,118981,118982],{"class":151,"line":152},[149,118983,118984],{"class":295},"#更新相关的知识\n",[149,118986,118987],{"class":151,"line":193},[149,118988,118989],{"class":295},"# 更新软件包列表（从服务器获取最新软件信息）\n",[149,118991,118992,118994,118997],{"class":151,"line":235},[149,118993,26285],{"class":162},[149,118995,118996],{"class":169}," apt",[149,118998,27951],{"class":169},[149,119000,119001],{"class":151,"line":340},[149,119002,119003],{"class":295},"# 升级所有可更新的软件包（不删除旧包）\n",[149,119005,119006,119008,119010],{"class":151,"line":346},[149,119007,26285],{"class":162},[149,119009,118996],{"class":169},[149,119011,119012],{"class":169}," upgrade\n",[149,119014,119015],{"class":151,"line":352},[149,119016,119017],{"class":295},"#更新和升级软件包\n",[149,119019,119020,119022,119024,119027,119029,119031,119033,119036],{"class":151,"line":1021},[149,119021,26285],{"class":162},[149,119023,118996],{"class":169},[149,119025,119026],{"class":169}," update",[149,119028,27899],{"class":155},[149,119030,26285],{"class":162},[149,119032,118996],{"class":169},[149,119034,119035],{"class":169}," upgrade",[149,119037,102661],{"class":309},[149,119039,119040],{"class":151,"line":1035},[149,119041,119042],{"class":295},"#列出可更新的软件包及版本信息\n",[149,119044,119045,119048,119051],{"class":151,"line":1054},[149,119046,119047],{"class":162},"apt",[149,119049,119050],{"class":169}," list",[149,119052,119053],{"class":309}," --upgradable\n",[149,119055,119056],{"class":151,"line":1072},[149,119057,119058],{"class":295},"#彻底升级（处理依赖关系，可能删除旧包）\n",[149,119060,119061,119063,119065],{"class":151,"line":1090},[149,119062,26285],{"class":162},[149,119064,118996],{"class":169},[149,119066,119067],{"class":169}," full-upgrade\n",[149,119069,119070],{"class":151,"line":1633},[149,119071,119072],{"class":295},"#设置指定版本\n",[149,119074,119075,119077,119079,119081,119083,119086,119088,119090,119092,119094,119097,119099],{"class":151,"line":1644},[149,119076,26285],{"class":162},[149,119078,118996],{"class":169},[149,119080,25542],{"class":169},[149,119082,30608],{"class":325},[149,119084,119085],{"class":169},"package_nam",[149,119087,1942],{"class":155},[149,119089,2819],{"class":325},[149,119091,166],{"class":169},[149,119093,156],{"class":325},[149,119095,119096],{"class":169},"version_numbe",[149,119098,2532],{"class":155},[149,119100,190],{"class":325},[149,119102,119103],{"class":151,"line":3348},[149,119104,119105],{"class":295},"#只安装软件包不升级\n",[149,119107,119108,119110,119112,119114,119116,119118,119120,119122],{"class":151,"line":3362},[149,119109,26285],{"class":162},[149,119111,118996],{"class":169},[149,119113,25542],{"class":169},[149,119115,30608],{"class":325},[149,119117,119085],{"class":169},[149,119119,1942],{"class":155},[149,119121,2819],{"class":325},[149,119123,119124],{"class":309}," --no-upgrade\n",[149,119126,119127],{"class":151,"line":3367},[149,119128,119129],{"class":295},"#只升级，不存在就不安装\n",[149,119131,119132,119134,119136,119138,119140,119142,119144,119146],{"class":151,"line":3373},[149,119133,26285],{"class":162},[149,119135,118996],{"class":169},[149,119137,25542],{"class":169},[149,119139,30608],{"class":325},[149,119141,119085],{"class":169},[149,119143,1942],{"class":155},[149,119145,2819],{"class":325},[149,119147,119148],{"class":309}," --only-upgrade\n",[149,119150,119151],{"class":151,"line":3394},[149,119152,4119],{"emptyLinePlaceholder":1800},[149,119154,119155],{"class":151,"line":3399},[149,119156,119157],{"class":295},"#安装指定的软件命令\n",[149,119159,119160,119162,119164,119166,119168,119170,119172],{"class":151,"line":3413},[149,119161,26285],{"class":162},[149,119163,118996],{"class":169},[149,119165,25542],{"class":169},[149,119167,30608],{"class":325},[149,119169,119085],{"class":169},[149,119171,1942],{"class":155},[149,119173,190],{"class":325},[149,119175,119176],{"class":151,"line":3418},[149,119177,4119],{"emptyLinePlaceholder":1800},[149,119179,119180],{"class":151,"line":3447},[149,119181,119182],{"class":295},"#安装多个软件包\n",[149,119184,119185,119187,119189,119191,119193,119196,119199,119201,119203,119206,119208,119210],{"class":151,"line":3452},[149,119186,26285],{"class":162},[149,119188,118996],{"class":169},[149,119190,25542],{"class":169},[149,119192,30608],{"class":325},[149,119194,119195],{"class":169},"package_",[149,119197,119198],{"class":325},"1>",[149,119200,30608],{"class":325},[149,119202,119195],{"class":169},[149,119204,119205],{"class":325},"2>",[149,119207,30608],{"class":325},[149,119209,119195],{"class":169},[149,119211,119212],{"class":325},"3>\n",[149,119214,119215],{"class":151,"line":3469},[149,119216,4119],{"emptyLinePlaceholder":1800},[149,119218,119219],{"class":151,"line":3474},[149,119220,119221],{"class":295},"#更新指定的软件命令\n",[149,119223,119224,119226,119228,119230,119232,119234,119236],{"class":151,"line":3479},[149,119225,26285],{"class":162},[149,119227,118996],{"class":169},[149,119229,119026],{"class":169},[149,119231,30608],{"class":325},[149,119233,119085],{"class":169},[149,119235,1942],{"class":155},[149,119237,190],{"class":325},[149,119239,119240],{"class":151,"line":3484},[149,119241,4119],{"emptyLinePlaceholder":1800},[149,119243,119244],{"class":151,"line":3498},[149,119245,119246],{"class":295},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[149,119248,119249,119251,119254,119256,119258,119260],{"class":151,"line":3503},[149,119250,119047],{"class":162},[149,119252,119253],{"class":169}," show",[149,119255,30608],{"class":325},[149,119257,119085],{"class":169},[149,119259,1942],{"class":155},[149,119261,190],{"class":325},[149,119263,119264],{"class":151,"line":4296},[149,119265,4119],{"emptyLinePlaceholder":1800},[149,119267,119268],{"class":151,"line":4310},[149,119269,119270],{"class":295},"#删除软件包命令\n",[149,119272,119273,119275,119277,119279,119281,119283,119285],{"class":151,"line":4318},[149,119274,26285],{"class":162},[149,119276,118996],{"class":169},[149,119278,27788],{"class":169},[149,119280,30608],{"class":325},[149,119282,119085],{"class":169},[149,119284,1942],{"class":155},[149,119286,190],{"class":325},[149,119288,119289],{"class":151,"line":4323},[149,119290,4119],{"emptyLinePlaceholder":1800},[149,119292,119293],{"class":151,"line":4329},[149,119294,119295],{"class":295},"# 清理旧版本和缓存（释放磁盘空间）\n",[149,119297,119298,119300,119302,119305],{"class":151,"line":4335},[149,119299,26285],{"class":162},[149,119301,118996],{"class":169},[149,119303,119304],{"class":169}," autoremove",[149,119306,119307],{"class":295},"  # 删除不再需要的依赖和库文件\n",[149,119309,119310,119312,119314,119317],{"class":151,"line":4340},[149,119311,26285],{"class":162},[149,119313,118996],{"class":169},[149,119315,119316],{"class":169}," clean",[149,119318,119319],{"class":295},"       # 清理下载的缓存包\n",[149,119321,119322],{"class":151,"line":9663},[149,119323,4119],{"emptyLinePlaceholder":1800},[149,119325,119326],{"class":151,"line":9687},[149,119327,119328],{"class":295},"#移除软件包及配置文件\n",[149,119330,119331,119333,119335,119338,119340,119342,119344],{"class":151,"line":9692},[149,119332,26285],{"class":162},[149,119334,118996],{"class":169},[149,119336,119337],{"class":169}," purge",[149,119339,30608],{"class":325},[149,119341,119085],{"class":169},[149,119343,1942],{"class":155},[149,119345,190],{"class":325},[149,119347,119348],{"class":151,"line":9698},[149,119349,4119],{"emptyLinePlaceholder":1800},[149,119351,119352],{"class":151,"line":9725},[149,119353,119354],{"class":295},"#查找软件包命令\n",[149,119356,119357,119359,119361,119364,119366,119369,119371],{"class":151,"line":9730},[149,119358,26285],{"class":162},[149,119360,118996],{"class":169},[149,119362,119363],{"class":169}," search",[149,119365,30608],{"class":325},[149,119367,119368],{"class":169},"keywor",[149,119370,2177],{"class":155},[149,119372,190],{"class":325},[149,119374,119375],{"class":151,"line":9736},[149,119376,4119],{"emptyLinePlaceholder":1800},[149,119378,119379],{"class":151,"line":9748},[149,119380,119381],{"class":295},"#列出所有已安装的包\n",[149,119383,119384,119386,119388],{"class":151,"line":9760},[149,119385,119047],{"class":162},[149,119387,119050],{"class":169},[149,119389,119390],{"class":309}," --installed\n",[149,119392,119393],{"class":151,"line":9772},[149,119394,4119],{"emptyLinePlaceholder":1800},[149,119396,119397],{"class":151,"line":11430},[149,119398,119399],{"class":295},"#列出所有已安装的包的版本信息\n",[149,119401,119402,119404,119406],{"class":151,"line":11455},[149,119403,119047],{"class":162},[149,119405,119050],{"class":169},[149,119407,119408],{"class":309}," --all-versions\n",[1783,119410,119411],{},"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":145,"searchDepth":193,"depth":193,"links":119413},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118958,"description":1797},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119420,"title":119421,"body":119422,"description":1797,"extension":1798,"meta":120163,"navigation":1800,"path":120164,"seo":120165,"stem":120166,"__hash__":120167},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119423,"toc":120150},[119424,119427,119431,119434,119440,119444,119448,119454,119459,119464,119469,119474,119479,119482,119485,119488,119491,119495,119498,119503,119506,119511,119514,119519,119526,119529,119532,119535,119538,119541,119552,119556,119560,119565,119570,119574,119579,119583,119588,119592,119596,119601,119604,119649,119654,119658,119662,119667,119673,119678,119688,119693,119703,119708,119713,119740,119744,119747,119752,119755,119780,119784,119789,119792,119797,119802,119822,119827,119830,119845,119849,119902,119905,119910,119914,119917,119932,119935,119938,119943,119947,119951,119954,119958,119962,119965,119970,119975,119979,119986,119994,119997,120004,120009,120014,120017,120022,120029,120034,120041,120045,120047,120052,120056,120059,120062,120067,120070,120075,120078,120083,120088,120093,120097,120102,120106,120147],[10,119425,119421],{"id":119426},"_2-linux装机教程",[14,119428,119430],{"id":119429},"_21-实体机","2.1 实体机",[24,119432,119433],{},"使用清华源：（Ubuntu24.04）",[24,119435,119436],{},[2102,119437,119438],{"href":119438,"rel":119439},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25573],[14,119441,119443],{"id":119442},"_22-普通虚拟机","2.2 普通虚拟机",[19,119445,119447],{"id":119446},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[24,119449,119450],{},[2102,119451,119452],{"href":119452,"rel":119453},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25573],[24,119455,119456],{},[83,119457],{"alt":145,"src":119458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[24,119460,119461],{},[83,119462],{"alt":145,"src":119463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[24,119465,119466],{},[83,119467],{"alt":145,"src":119468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[24,119470,119471],{},[83,119472],{"alt":145,"src":119473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[24,119475,119476],{},[83,119477],{"alt":145,"src":119478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[24,119480,119481],{},"内存4G（4096MB）；",[24,119483,119484],{},"CPU给4个核；",[24,119486,119487],{},"硬盘动态分配60G；",[24,119489,119490],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[19,119492,119494],{"id":119493},"_222-安装ubuntu","2.2.2 安装Ubuntu",[24,119496,119497],{},"按照1.1的步骤下载Ubuntu",[24,119499,119500],{},[83,119501],{"alt":145,"src":119502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[24,119504,119505],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[24,119507,119508],{},[83,119509],{"alt":145,"src":119510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[24,119512,119513],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[24,119515,119516],{},[83,119517],{"alt":145,"src":119518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[24,119520,119521,119522,119525],{},"选择“正常安装”(找不到都用Alt+F7)， ",[31,119523,119524],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[24,119527,119528],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[24,119530,119531],{},"将改动写入磁盘吗 继续",[24,119533,119534],{},"选择东八区（shanghai，大致在地图上点一下），继续",[24,119536,119537],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[24,119539,119540],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[24,119542,119543,119544,119547,119548,119551],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[31,119545,119546],{},"除了"," 选不发送系统信息与不升级之外， ",[31,119549,119550],{},"其它"," 都跳过或前进）",[19,119553,119555],{"id":119554},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[120,119557,119559],{"id":119558},"_2231-全屏","2.2.3.1 全屏",[24,119561,119562],{},[83,119563],{"alt":145,"src":119564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[24,119566,119567],{},[83,119568],{"alt":145,"src":119569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[120,119571,119573],{"id":119572},"_2232-文件交换","2.2.3.2 文件交换",[24,119575,119576],{},[83,119577],{"alt":145,"src":119578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[120,119580,119582],{"id":119581},"_2233-新建文本文档","2.2.3.3 新建文本文档",[24,119584,119585],{},[83,119586],{"alt":145,"src":119587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119589,119591],{"id":119590},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[19,119593,119595],{"id":119594},"_231-简介与优缺点","2.3.1 简介与优缺点",[125,119597,119598],{},[45,119599,119600],{},"什么情况下推荐？",[24,119602,119603],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[125,119605,119606],{"start":193},[45,119607,119608,119609],{},"优缺点：",[125,119610,119611,119641],{},[45,119612,119613,119614],{},"优点：",[125,119615,119616,119619,119626,119629,119632,119635,119638],{},[45,119617,119618],{},"WSL2是最好的Linux发行版;(bushi)",[45,119620,119621,119622,119625],{},"性能损耗极低。且比在Windows上跑深度性能 ",[31,119623,119624],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[45,119627,119628],{},"非常方便调用USB设备，可以USB直通;",[45,119630,119631],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[45,119633,119634],{},"非常方便Win与WSL2互相传文件等协同操作;",[45,119636,119637],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[45,119639,119640],{},"非常方便使用Windows的VScode远程开发;",[45,119642,119643,119644],{},"缺点：",[125,119645,119646],{},[45,119647,119648],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[24,119650,119651],{},[83,119652],{"alt":145,"src":119653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[19,119655,119657],{"id":119656},"_232-安装教程","2.3.2 安装教程",[120,119659,119661],{"id":119660},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[125,119663,119664],{},[45,119665,119666],{},"方法一(图形界面)",[24,119668,119669,119670,26327],{},"用Win+R输入",[48,119671,119672],{},"appwiz.cpl",[24,119674,119675],{},[83,119676],{"alt":145,"src":119677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[24,119679,119680,119681,119684,119685,28182],{},"点击OK进入 ",[31,119682,119683],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[31,119686,119687],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[24,119689,119690],{},[83,119691],{"alt":145,"src":119692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[24,119694,119695,119696,102698,119699,119702],{},"选择 ",[31,119697,119698],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[31,119700,119701],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[24,119704,119705],{},[83,119706],{"alt":145,"src":119707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[125,119709,119710],{"start":193},[45,119711,119712],{},"方法二(命令行)",[140,119714,119718],{"className":119715,"code":119716,"language":119717,"meta":145,"style":145},"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",[48,119719,119720,119725,119730,119735],{"__ignoreMap":145},[149,119721,119722],{"class":151,"line":152},[149,119723,119724],{},"# 开启 Linux 子系统\n",[149,119726,119727],{"class":151,"line":193},[149,119728,119729],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[149,119731,119732],{"class":151,"line":235},[149,119733,119734],{},"# 开启虚拟机平台\n",[149,119736,119737],{"class":151,"line":340},[149,119738,119739],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[120,119741,119743],{"id":119742},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[24,119745,119746],{},"用管理员权限打开powershell",[24,119748,119749],{},[83,119750],{"alt":145,"src":119751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[24,119753,119754],{},"升级WSL并设置默认版本为WSL2",[140,119756,119758],{"className":119715,"code":119757,"language":119717,"meta":145,"style":145},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[48,119759,119760,119765,119770,119775],{"__ignoreMap":145},[149,119761,119762],{"class":151,"line":152},[149,119763,119764],{},"# 更新 wsl\n",[149,119766,119767],{"class":151,"line":193},[149,119768,119769],{},"wsl --update\n",[149,119771,119772],{"class":151,"line":235},[149,119773,119774],{},"# 将 wsl 版本设置为 wsl2\n",[149,119776,119777],{"class":151,"line":340},[149,119778,119779],{},"wsl --set-default-version 2\n",[120,119781,119783],{"id":119782},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[125,119785,119786],{},[45,119787,119788],{},"方式一(商店下载)",[24,119790,119791],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[24,119793,119794],{},[83,119795],{"alt":145,"src":119796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[125,119798,119799],{"start":193},[45,119800,119801],{},"方式二(命令行安装)",[140,119803,119805],{"className":119715,"code":119804,"language":119717,"meta":145,"style":145},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[48,119806,119807,119812,119817],{"__ignoreMap":145},[149,119808,119809],{"class":151,"line":152},[149,119810,119811],{},"# 列出可安装的 Linux 版本\n",[149,119813,119814],{"class":151,"line":193},[149,119815,119816],{},"#（需要科学手段）\n",[149,119818,119819],{"class":151,"line":235},[149,119820,119821],{},"wsl --list --online\n",[24,119823,119824],{},[83,119825],{"alt":145,"src":119826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[24,119828,119829],{},"选择对应发行版并安装",[140,119831,119833],{"className":119715,"code":119832,"language":119717,"meta":145,"style":145},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[48,119834,119835,119840],{"__ignoreMap":145},[149,119836,119837],{"class":151,"line":152},[149,119838,119839],{},"# Ubuntu安装完毕后需要重启系统\n",[149,119841,119842],{"class":151,"line":193},[149,119843,119844],{},"wsl --install -d Ubuntu-24.04\n",[120,119846,119848],{"id":119847},"_2324-查看系统状态","2.3.2.4 查看系统状态",[140,119850,119852],{"className":119715,"code":119851,"language":119717,"meta":145,"style":145},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[48,119853,119854,119859,119864,119869,119874,119878,119882,119887,119892,119897],{"__ignoreMap":145},[149,119855,119856],{"class":151,"line":152},[149,119857,119858],{},"# 查看 wsl\n",[149,119860,119861],{"class":151,"line":193},[149,119862,119863],{},"wsl -l\n",[149,119865,119866],{"class":151,"line":235},[149,119867,119868],{},"# 查看 wsl 运行版本或模式\n",[149,119870,119871],{"class":151,"line":340},[149,119872,119873],{},"wsl -l -v\n",[149,119875,119876],{"class":151,"line":346},[149,119877,4119],{"emptyLinePlaceholder":1800},[149,119879,119880],{"class":151,"line":352},[149,119881,4119],{"emptyLinePlaceholder":1800},[149,119883,119884],{"class":151,"line":1021},[149,119885,119886],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[149,119888,119889],{"class":151,"line":1035},[149,119890,119891],{},"wsl --set-version \u003Cdistro> 2\n",[149,119893,119894],{"class":151,"line":1054},[149,119895,119896],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[149,119898,119899],{"class":151,"line":1072},[149,119900,119901],{},"wsl --unregister \u003Cdistro>\n",[24,119903,119904],{},"输出Version为2即正常",[24,119906,119907],{},[83,119908],{"alt":145,"src":119909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[120,119911,119913],{"id":119912},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[24,119915,119916],{},"直接在Powershell里输入wsl命令进入子系统",[140,119918,119920],{"className":119715,"code":119919,"language":119717,"meta":145,"style":145},"# 进入子系统\nwsl\n",[48,119921,119922,119927],{"__ignoreMap":145},[149,119923,119924],{"class":151,"line":152},[149,119925,119926],{},"# 进入子系统\n",[149,119928,119929],{"class":151,"line":193},[149,119930,119931],{},"wsl\n",[24,119933,119934],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[24,119936,119937],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[24,119939,119940],{},[83,119941],{"alt":145,"src":119942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[19,119944,119946],{"id":119945},"_233-配置各种环境","2.3.3 配置各种环境",[120,119948,119950],{"id":119949},"_2331-换源","2.3.3.1 换源",[24,119952,119953],{},"(同实体机LINUX，往下找教程)",[120,119955,119957],{"id":119956},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24619,119959,119961],{"id":119960},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[24,119963,119964],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[24,119966,119967],{},[83,119968],{"alt":145,"src":119969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[24,119971,119972],{},[83,119973],{"alt":145,"src":119974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24619,119976,119978],{"id":119977},"_23322-cuda","2.3.3.2.2 CUDA",[24,119980,119981,119982],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2102,119983,119984],{"href":119984,"rel":119985},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25573],[24,119987,119988,119991],{},[83,119989],{"alt":145,"src":119990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[83,119992],{"alt":145,"src":119993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[24,119995,119996],{},"在下方的网站，选择合适的版本。",[24,119998,119999,120000],{},"WSL2 专属 CUDA 指南：",[2102,120001,120002],{"href":120002,"rel":120003},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25573],[24,120005,120006],{},[31,120007,120008],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[24,120010,120011],{},[83,120012],{"alt":145,"src":120013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[24,120015,120016],{},"挨行敲一遍",[24,120018,120019],{},[83,120020],{"alt":145,"src":120021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[24,120023,120024,120025,120028],{},"敲完后，输入",[48,120026,120027],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[24,120030,120031],{},[83,120032],{"alt":145,"src":120033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[24,120035,120036,120037,120040],{},"（请详看下方教程的",[31,120038,120039],{},"安装CUDA的配置环境来看","如何配置环境）",[24619,120042,120044],{"id":120043},"_23323-cudnn","2.3.3.2.3 cuDNN",[24,120046,119953],{},[24,120048,120049],{},[83,120050],{"alt":145,"src":120051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[120,120053,120055],{"id":120054},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[24,120057,120058],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[24,120060,120061],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[24,120063,120064],{},[83,120065],{"alt":145,"src":120066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[24,120068,120069],{},"连接WSL2",[24,120071,120072],{},[83,120073],{"alt":145,"src":120074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[24,120076,120077],{},"远程开发成功。",[24,120079,120080],{},[83,120081],{"alt":145,"src":120082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[24,120084,120085],{},[83,120086],{"alt":145,"src":120087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[24,120089,120090],{},[83,120091],{"alt":145,"src":120092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[120,120094,120096],{"id":120095},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[24,120098,120099],{},[83,120100],{"alt":145,"src":120101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[120,120103,120105],{"id":120104},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[140,120107,120109],{"className":118975,"code":120108,"language":118977,"meta":145,"style":145},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[48,120110,120111,120119,120127,120138,120142],{"__ignoreMap":145},[149,120112,120113,120115,120117],{"class":151,"line":152},[149,120114,26285],{"class":162},[149,120116,118996],{"class":169},[149,120118,27951],{"class":169},[149,120120,120121,120123,120125],{"class":151,"line":193},[149,120122,26285],{"class":162},[149,120124,118996],{"class":169},[149,120126,119012],{"class":169},[149,120128,120129,120131,120133,120135],{"class":151,"line":235},[149,120130,26285],{"class":162},[149,120132,118996],{"class":169},[149,120134,25542],{"class":169},[149,120136,120137],{"class":169}," mesa-utils\n",[149,120139,120140],{"class":151,"line":340},[149,120141,4119],{"emptyLinePlaceholder":1800},[149,120143,120144],{"class":151,"line":346},[149,120145,120146],{"class":295},"#然后重启wsl2即可\n",[1783,120148,120149],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":145,"searchDepth":193,"depth":193,"links":120151},[120152,120153,120158],{"id":119429,"depth":193,"text":119430},{"id":119442,"depth":193,"text":119443,"children":120154},[120155,120156,120157],{"id":119446,"depth":235,"text":119447},{"id":119493,"depth":235,"text":119494},{"id":119554,"depth":235,"text":119555},{"id":119590,"depth":193,"text":119591,"children":120159},[120160,120161,120162],{"id":119594,"depth":235,"text":119595},{"id":119656,"depth":235,"text":119657},{"id":119945,"depth":235,"text":119946},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119421,"description":1797},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120169,"title":120170,"body":120171,"description":1797,"extension":1798,"meta":123107,"navigation":1800,"path":123108,"seo":123109,"stem":123110,"__hash__":123111},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120172,"toc":123079},[120173,120176,120180,120186,120190,120196,120200,120388,120391,120396,120400,120404,120407,120410,120416,120421,120424,120427,120432,120465,120470,120474,120551,120554,120559,120563,120566,120605,120608,120617,120635,120640,120647,120764,120769,120772,120799,120804,120808,120817,120867,120874,120878,120881,120895,120902,120936,120941,120945,120968,120971,120976,120980,120983,120986,120989,121031,121035,121038,121041,121082,121086,121090,121093,121098,121103,121106,121129,121132,121140,121145,121148,121153,121158,121161,121166,121170,121175,121198,121203,121265,121273,121278,121283,121286,121291,121294,121299,121304,121322,121327,121333,121338,121352,121356,121359,121362,121365,121408,121411,121416,121517,121520,121525,121529,121533,121570,121574,121578,121582,121628,121632,121677,121681,121688,121696,121751,121754,121831,121834,121857,121861,121864,121869,121874,121882,121885,121890,121895,121900,121903,121908,121917,121920,121925,121928,121999,122004,122007,122012,122015,122020,122023,122028,122031,122036,122041,122044,122119,122122,122135,122140,122143,122157,122160,122189,122194,122223,122226,122231,122235,122240,122249,122252,122257,122260,122265,122268,122271,122276,122279,122284,122289,122292,122297,122300,122425,122430,122460,122463,122468,122473,122490,122493,122536,122539,122566,122571,122584,122727,122731,122736,122750,122753,122804,122807,122837,122840,122856,122861,122875,122878,122945,122950,122959,122964,122967,122979,122984,122991,123015,123018,123023,123026,123045,123050,123057,123069,123076],[10,120174,120170],{"id":120175},"_3-安装必备配置",[14,120177,120179],{"id":120178},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[140,120181,120184],{"className":120182,"code":120183,"language":1655},[1653],"  打开下方网站（注意，该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",[48,120185,120183],{"__ignoreMap":145},[19,120187,120189],{"id":120188},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[140,120191,120194],{"className":120192,"code":120193,"language":1655},[1653],"  输入以下命令\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",[48,120195,120193],{"__ignoreMap":145},[19,120197,120199],{"id":120198},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[140,120201,120205],{"className":120202,"code":120203,"language":120204,"meta":145,"style":145},"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",[48,120206,120207,120215,120226,120238,120252,120256,120266,120271,120275,120279,120284,120288,120300,120304,120309,120313,120324,120328,120344,120348,120359,120363,120368,120372,120380],{"__ignoreMap":145},[149,120208,120209,120211,120213],{"class":151,"line":152},[149,120210,26285],{"class":162},[149,120212,118996],{"class":169},[149,120214,27951],{"class":169},[149,120216,120217,120219,120221,120223],{"class":151,"line":193},[149,120218,26285],{"class":162},[149,120220,118996],{"class":169},[149,120222,25542],{"class":169},[149,120224,120225],{"class":169}," vim\n",[149,120227,120228,120230,120233,120235],{"class":151,"line":235},[149,120229,26285],{"class":162},[149,120231,120232],{"class":169}," rm",[149,120234,27034],{"class":309},[149,120236,120237],{"class":169}," \u002Fetc\u002Fapt\u002Fsources.list\n",[149,120239,120240,120242,120244,120246,120249],{"class":151,"line":340},[149,120241,26285],{"class":162},[149,120243,120232],{"class":169},[149,120245,27034],{"class":309},[149,120247,120248],{"class":169}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[149,120250,120251],{"class":309},"**\n",[149,120253,120254],{"class":151,"line":346},[149,120255,4119],{"emptyLinePlaceholder":1800},[149,120257,120258,120260,120263],{"class":151,"line":352},[149,120259,26285],{"class":162},[149,120261,120262],{"class":169}," vim",[149,120264,120265],{"class":169}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[149,120267,120268],{"class":151,"line":1021},[149,120269,120270],{"class":169},"```\n",[149,120272,120273],{"class":151,"line":1035},[149,120274,4119],{"emptyLinePlaceholder":1800},[149,120276,120277],{"class":151,"line":1054},[149,120278,4119],{"emptyLinePlaceholder":1800},[149,120280,120281],{"class":151,"line":1072},[149,120282,120283],{"class":162},"选择好Ubuntu版本后，复制下方的内容。\n",[149,120285,120286],{"class":151,"line":1090},[149,120287,4119],{"emptyLinePlaceholder":1800},[149,120289,120290,120292,120295,120298],{"class":151,"line":1633},[149,120291,2090],{"class":325},[149,120293,120294],{"class":169},"[](",[149,120296,120297],{"class":162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[149,120299,1878],{"class":169},[149,120301,120302],{"class":151,"line":1644},[149,120303,4119],{"emptyLinePlaceholder":1800},[149,120305,120306],{"class":151,"line":3348},[149,120307,120308],{"class":162},"粘贴进去\n",[149,120310,120311],{"class":151,"line":3362},[149,120312,4119],{"emptyLinePlaceholder":1800},[149,120314,120315,120317,120319,120322],{"class":151,"line":3367},[149,120316,2090],{"class":325},[149,120318,120294],{"class":169},[149,120320,120321],{"class":162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[149,120323,1878],{"class":169},[149,120325,120326],{"class":151,"line":3373},[149,120327,4119],{"emptyLinePlaceholder":1800},[149,120329,120330,120333,120336,120339,120341],{"class":151,"line":3394},[149,120331,120332],{"class":162},"按一下ESC，然后英文冒号，输入",[149,120334,120335],{"class":169}," `",[149,120337,120338],{"class":162},":wq!",[149,120340,2831],{"class":169},[149,120342,120343],{"class":162},"然后回车\n",[149,120345,120346],{"class":151,"line":3399},[149,120347,4119],{"emptyLinePlaceholder":1800},[149,120349,120350,120352,120354,120357],{"class":151,"line":3413},[149,120351,2090],{"class":325},[149,120353,120294],{"class":169},[149,120355,120356],{"class":162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[149,120358,1878],{"class":169},[149,120360,120361],{"class":151,"line":3418},[149,120362,4119],{"emptyLinePlaceholder":1800},[149,120364,120365],{"class":151,"line":3447},[149,120366,120367],{"class":162},"输入以下命令\n",[149,120369,120370],{"class":151,"line":3452},[149,120371,4119],{"emptyLinePlaceholder":1800},[149,120373,120374,120377],{"class":151,"line":3469},[149,120375,120376],{"class":169},"```",[149,120378,120379],{"class":162},"Bash\n",[149,120381,120382,120384,120386],{"class":151,"line":3474},[149,120383,26285],{"class":162},[149,120385,118996],{"class":169},[149,120387,27951],{"class":169},[24,120389,120390],{},"这里被替换成对应学校则成功",[24,120392,120393],{},[83,120394],{"alt":145,"src":120395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120397,120399],{"id":120398},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[19,120401,120403],{"id":120402},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[24,120405,120406],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[24,120408,120409],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[24,120411,120412],{},[2102,120413,120414],{"href":120414,"rel":120415},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25573],[24,120417,120418],{},[83,120419],{"alt":145,"src":120420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[24,120422,120423],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[24,120425,120426],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[24,120428,120429],{},[83,120430],{"alt":145,"src":120431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[140,120433,120435],{"className":118975,"code":120434,"language":118977,"meta":145,"style":145},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[48,120436,120437,120442,120449,120454],{"__ignoreMap":145},[149,120438,120439],{"class":151,"line":152},[149,120440,120441],{"class":295},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[149,120443,120444,120446],{"class":151,"line":193},[149,120445,102956],{"class":309},[149,120447,120448],{"class":169}," ~\u002FDownloads\n",[149,120450,120451],{"class":151,"line":235},[149,120452,120453],{"class":295},"#下方chrome安装包名不一定是这个，根据名字来看\n",[149,120455,120456,120458,120460,120462],{"class":151,"line":340},[149,120457,26285],{"class":162},[149,120459,118996],{"class":169},[149,120461,25542],{"class":169},[149,120463,120464],{"class":169}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[24,120466,120467],{},[83,120468],{"alt":145,"src":120469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[19,120471,120473],{"id":120472},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[140,120475,120477],{"className":118975,"code":120476,"language":118977,"meta":145,"style":145},"# 老版\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",[48,120478,120479,120484,120492,120503,120508,120512,120517,120527,120535,120546],{"__ignoreMap":145},[149,120480,120481],{"class":151,"line":152},[149,120482,120483],{"class":295},"# 老版\n",[149,120485,120486,120488,120490],{"class":151,"line":193},[149,120487,26285],{"class":162},[149,120489,118996],{"class":169},[149,120491,27951],{"class":169},[149,120493,120494,120496,120498,120500],{"class":151,"line":235},[149,120495,26285],{"class":162},[149,120497,118996],{"class":169},[149,120499,25542],{"class":169},[149,120501,120502],{"class":169}," neofetch\n",[149,120504,120505],{"class":151,"line":340},[149,120506,120507],{"class":162},"neofetch\n",[149,120509,120510],{"class":151,"line":346},[149,120511,4119],{"emptyLinePlaceholder":1800},[149,120513,120514],{"class":151,"line":352},[149,120515,120516],{"class":295},"# 新版\n",[149,120518,120519,120521,120524],{"class":151,"line":1021},[149,120520,26285],{"class":162},[149,120522,120523],{"class":169}," add-apt-repository",[149,120525,120526],{"class":169}," ppa:zhangsongcui3371\u002Ffastfetch\n",[149,120528,120529,120531,120533],{"class":151,"line":1035},[149,120530,26285],{"class":162},[149,120532,118996],{"class":169},[149,120534,27951],{"class":169},[149,120536,120537,120539,120541,120543],{"class":151,"line":1054},[149,120538,26285],{"class":162},[149,120540,118996],{"class":169},[149,120542,25542],{"class":169},[149,120544,120545],{"class":169}," fastfetch\n",[149,120547,120548],{"class":151,"line":1072},[149,120549,120550],{"class":162},"fastfetch\n",[24,120552,120553],{},"这里显示，一共有3162个debian的程序，7个snap程序",[24,120555,120556],{},[83,120557],{"alt":145,"src":120558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[19,120560,120562],{"id":120561},"_323-移除snap应用","3.2.3 移除snap应用",[24,120564,120565],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[140,120567,120569],{"className":118975,"code":120568,"language":118977,"meta":145,"style":145},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[48,120570,120571,120583,120594],{"__ignoreMap":145},[149,120572,120573,120575,120577,120580],{"class":151,"line":152},[149,120574,26285],{"class":162},[149,120576,28222],{"class":169},[149,120578,120579],{"class":169}," disable",[149,120581,120582],{"class":169}," snapd.service\n",[149,120584,120585,120587,120589,120591],{"class":151,"line":193},[149,120586,26285],{"class":162},[149,120588,28222],{"class":169},[149,120590,120579],{"class":169},[149,120592,120593],{"class":169}," snapd.socket\n",[149,120595,120596,120598,120600,120602],{"class":151,"line":235},[149,120597,26285],{"class":162},[149,120599,28222],{"class":169},[149,120601,120579],{"class":169},[149,120603,120604],{"class":169}," snapd.seeded.service\n",[24,120606,120607],{},"然后查看snap应用列表",[24,120609,120610,120611,120616],{},"根据你安装的选择不同（最小安装或普通安装），有",[2102,120612,120615],{"href":120613,"rel":120614},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25573],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[140,120618,120620],{"className":118975,"code":120619,"language":118977,"meta":145,"style":145},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[48,120621,120622,120627],{"__ignoreMap":145},[149,120623,120624],{"class":151,"line":152},[149,120625,120626],{"class":295},"# 查询当前系统上snap安装了哪些app\n",[149,120628,120629,120632],{"class":151,"line":193},[149,120630,120631],{"class":162},"snap",[149,120633,120634],{"class":169}," list\n",[24,120636,120637],{},[83,120638],{"alt":145,"src":120639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[24,120641,120642,120643,120646],{},"卸载掉图中所有应用，按照 ",[31,120644,120645],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[140,120648,120650],{"className":118975,"code":120649,"language":118977,"meta":145,"style":145},"#移除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",[48,120651,120652,120657,120669,120674,120685,120690,120701,120706,120717,120722,120726,120731,120742,120753],{"__ignoreMap":145},[149,120653,120654],{"class":151,"line":152},[149,120655,120656],{"class":295},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[149,120658,120659,120661,120664,120666],{"class":151,"line":193},[149,120660,26285],{"class":162},[149,120662,120663],{"class":169}," snap",[149,120665,27788],{"class":169},[149,120667,120668],{"class":169}," snap-store\n",[149,120670,120671],{"class":151,"line":235},[149,120672,120673],{"class":295},"#移除firefox浏览器\n",[149,120675,120676,120678,120680,120682],{"class":151,"line":340},[149,120677,26285],{"class":162},[149,120679,120663],{"class":169},[149,120681,27788],{"class":169},[149,120683,120684],{"class":169}," firefox\n",[149,120686,120687],{"class":151,"line":346},[149,120688,120689],{"class":295},"#移除gnome-42-2204\n",[149,120691,120692,120694,120696,120698],{"class":151,"line":352},[149,120693,26285],{"class":162},[149,120695,120663],{"class":169},[149,120697,27788],{"class":169},[149,120699,120700],{"class":169}," gnome-42-2204\n",[149,120702,120703],{"class":151,"line":1021},[149,120704,120705],{"class":295},"#移除gtk-common-themes\n",[149,120707,120708,120710,120712,120714],{"class":151,"line":1035},[149,120709,26285],{"class":162},[149,120711,120663],{"class":169},[149,120713,27788],{"class":169},[149,120715,120716],{"class":169}," gtk-common-themes\n",[149,120718,120719],{"class":151,"line":1054},[149,120720,120721],{"class":295},"#移除其它...\n",[149,120723,120724],{"class":151,"line":1072},[149,120725,4393],{"class":155},[149,120727,120728],{"class":151,"line":1090},[149,120729,120730],{"class":295},"#移除core22,bare以及snapd\n",[149,120732,120733,120735,120737,120739],{"class":151,"line":1633},[149,120734,26285],{"class":162},[149,120736,120663],{"class":169},[149,120738,27788],{"class":169},[149,120740,120741],{"class":169}," core22\n",[149,120743,120744,120746,120748,120750],{"class":151,"line":1644},[149,120745,26285],{"class":162},[149,120747,120663],{"class":169},[149,120749,27788],{"class":169},[149,120751,120752],{"class":169}," bare\n",[149,120754,120755,120757,120759,120761],{"class":151,"line":3348},[149,120756,26285],{"class":162},[149,120758,120663],{"class":169},[149,120760,27788],{"class":169},[149,120762,120763],{"class":169}," snapd\n",[24,120765,120766],{},[83,120767],{"alt":145,"src":120768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[24,120770,120771],{},"输入以下命令查看是否还有snap包",[140,120773,120775],{"className":118975,"code":120774,"language":118977,"meta":145,"style":145},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[48,120776,120777,120783,120787,120791,120795],{"__ignoreMap":145},[149,120778,120779,120781],{"class":151,"line":152},[149,120780,120631],{"class":162},[149,120782,120634],{"class":169},[149,120784,120785],{"class":151,"line":193},[149,120786,120483],{"class":295},[149,120788,120789],{"class":151,"line":235},[149,120790,120507],{"class":162},[149,120792,120793],{"class":151,"line":340},[149,120794,120516],{"class":295},[149,120796,120797],{"class":151,"line":346},[149,120798,120550],{"class":162},[24,120800,120801],{},[83,120802],{"alt":145,"src":120803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[19,120805,120807],{"id":120806},"_324-移除snap","3.2.4 移除snap",[24,120809,120810,120811,120816],{},"在删除掉",[2102,120812,120815],{"href":120813,"rel":120814},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25573],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[140,120818,120820],{"className":118975,"code":120819,"language":118977,"meta":145,"style":145}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[48,120821,120822,120827,120840,120845,120856],{"__ignoreMap":145},[149,120823,120824],{"class":151,"line":152},[149,120825,120826],{"class":295}," #使用apt移除掉snap\n",[149,120828,120829,120831,120833,120835,120838],{"class":151,"line":193},[149,120830,26285],{"class":162},[149,120832,118996],{"class":169},[149,120834,119304],{"class":169},[149,120836,120837],{"class":309}," --purge",[149,120839,120763],{"class":169},[149,120841,120842],{"class":151,"line":235},[149,120843,120844],{"class":295},"#移除snapd的一些目录\n",[149,120846,120847,120849,120851,120853],{"class":151,"line":340},[149,120848,26285],{"class":162},[149,120850,120232],{"class":169},[149,120852,27034],{"class":309},[149,120854,120855],{"class":169}," \u002Fvar\u002Fcache\u002Fsnapd\n",[149,120857,120858,120860,120862,120864],{"class":151,"line":346},[149,120859,26285],{"class":162},[149,120861,120232],{"class":169},[149,120863,27034],{"class":309},[149,120865,120866],{"class":169}," ~\u002Fsnap\n",[24,120868,120869,120870,120873],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[48,120871,120872],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[19,120875,120877],{"id":120876},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[24,120879,120880],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[140,120882,120884],{"className":118975,"code":120883,"language":118977,"meta":145,"style":145},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[48,120885,120886],{"__ignoreMap":145},[149,120887,120888,120890,120892],{"class":151,"line":152},[149,120889,26285],{"class":162},[149,120891,120262],{"class":169},[149,120893,120894],{"class":169}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[24,120896,120897,120898,120901],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[48,120899,120900],{},":wq"," 回车",[140,120903,120905],{"className":118975,"code":120904,"language":118977,"meta":145,"style":145},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[48,120906,120907,120914,120928],{"__ignoreMap":145},[149,120908,120909,120912],{"class":151,"line":152},[149,120910,120911],{"class":162},"Package:",[149,120913,120763],{"class":169},[149,120915,120916,120919,120922,120925],{"class":151,"line":193},[149,120917,120918],{"class":162},"Pin:",[149,120920,120921],{"class":169}," release",[149,120923,120924],{"class":169}," a=",[149,120926,120927],{"class":309},"*\n",[149,120929,120930,120933],{"class":151,"line":235},[149,120931,120932],{"class":162},"Pin-Priority:",[149,120934,120935],{"class":309}," -10\n",[24,120937,120938],{},[83,120939],{"alt":145,"src":120940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[19,120942,120944],{"id":120943},"_326-测试是否成功","3.2.6 测试是否成功",[140,120946,120948],{"className":118975,"code":120947,"language":118977,"meta":145,"style":145},"sudo apt update\nsudo apt install firefox\n",[48,120949,120950,120958],{"__ignoreMap":145},[149,120951,120952,120954,120956],{"class":151,"line":152},[149,120953,26285],{"class":162},[149,120955,118996],{"class":169},[149,120957,27951],{"class":169},[149,120959,120960,120962,120964,120966],{"class":151,"line":193},[149,120961,26285],{"class":162},[149,120963,118996],{"class":169},[149,120965,25542],{"class":169},[149,120967,120684],{"class":169},[24,120969,120970],{},"这里提示snapd无法被安装，就证明成功了",[24,120972,120973],{},[83,120974],{"alt":145,"src":120975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[19,120977,120979],{"id":120978},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[24,120981,120982],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[24,120984,120985],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[24,120987,120988],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[140,120990,120992],{"className":118975,"code":120991,"language":118977,"meta":145,"style":145},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[48,120993,120994,120999,121008,121013,121021],{"__ignoreMap":145},[149,120995,120996],{"class":151,"line":152},[149,120997,120998],{"class":295},"# 添加Mozilla提供的源\n",[149,121000,121001,121003,121005],{"class":151,"line":193},[149,121002,26285],{"class":162},[149,121004,120523],{"class":169},[149,121006,121007],{"class":169}," ppa:mozillateam\u002Fppa\n",[149,121009,121010],{"class":151,"line":235},[149,121011,121012],{"class":295},"# 安装Firefox\n",[149,121014,121015,121017,121019],{"class":151,"line":340},[149,121016,26285],{"class":162},[149,121018,118996],{"class":169},[149,121020,27951],{"class":169},[149,121022,121023,121025,121027,121029],{"class":151,"line":346},[149,121024,26285],{"class":162},[149,121026,118996],{"class":169},[149,121028,25542],{"class":169},[149,121030,120684],{"class":169},[19,121032,121034],{"id":121033},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[24,121036,121037],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[24,121039,121040],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[140,121042,121044],{"className":118975,"code":121043,"language":118977,"meta":145,"style":145},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[48,121045,121046,121051,121061,121069,121073],{"__ignoreMap":145},[149,121047,121048],{"class":151,"line":152},[149,121049,121050],{"class":295},"#删掉禁止安装snap的配置文件\n",[149,121052,121053,121055,121057,121059],{"class":151,"line":193},[149,121054,26285],{"class":162},[149,121056,120232],{"class":169},[149,121058,27034],{"class":309},[149,121060,120894],{"class":169},[149,121062,121063,121065,121067],{"class":151,"line":235},[149,121064,26285],{"class":162},[149,121066,118996],{"class":169},[149,121068,27951],{"class":169},[149,121070,121071],{"class":151,"line":340},[149,121072,4119],{"emptyLinePlaceholder":1800},[149,121074,121075,121077,121079],{"class":151,"line":346},[149,121076,26285],{"class":162},[149,121078,118996],{"class":169},[149,121080,121081],{"class":169}," dist-update\n",[14,121083,121085],{"id":121084},"_33-中文输入法","3.3 中文输入法",[19,121087,121089],{"id":121088},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[24,121091,121092],{},"官网下载搜狗输入法",[24,121094,121095],{},[83,121096],{"alt":145,"src":121097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[24,121099,121100],{},[83,121101],{"alt":145,"src":121102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[24,121104,121105],{},"打开终端输入如下",[140,121107,121109],{"className":118975,"code":121108,"language":118977,"meta":145,"style":145},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[48,121110,121111,121118],{"__ignoreMap":145},[149,121112,121113,121115],{"class":151,"line":152},[149,121114,102956],{"class":309},[149,121116,121117],{"class":169}," ~\u002FDownloads\u002F\n",[149,121119,121120,121122,121124,121126],{"class":151,"line":193},[149,121121,26285],{"class":162},[149,121123,118996],{"class":169},[149,121125,25542],{"class":169},[149,121127,121128],{"class":169}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[24,121130,121131],{},"打开Fcitx",[24,121133,121134,121137],{},[83,121135],{"alt":145,"src":121136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[83,121138],{"alt":145,"src":121139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[24,121141,121142],{},[83,121143],{"alt":145,"src":121144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[24,121146,121147],{},"添加搜狗输入法",[24,121149,121150],{},[83,121151],{"alt":145,"src":121152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[24,121154,121155],{},[83,121156],{"alt":145,"src":121157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[24,121159,121160],{},"将搜狗输入法设置为唯一输入法",[24,121162,121163],{},[83,121164],{"alt":145,"src":121165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[19,121167,121169],{"id":121168},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[125,121171,121172],{},[45,121173,121174],{},"卸载旧输入法",[140,121176,121178],{"className":120202,"code":121177,"language":120204,"meta":145,"style":145},"sudo apt purge fcitx* ibus*\n",[48,121179,121180],{"__ignoreMap":145},[149,121181,121182,121184,121186,121188,121191,121193,121196],{"class":151,"line":152},[149,121183,26285],{"class":162},[149,121185,118996],{"class":169},[149,121187,119337],{"class":169},[149,121189,121190],{"class":169}," fcitx",[149,121192,2318],{"class":309},[149,121194,121195],{"class":169}," ibus",[149,121197,120927],{"class":309},[125,121199,121200],{"start":193},[45,121201,121202],{},"安装Fcitx5",[140,121204,121206],{"className":118975,"code":121205,"language":118977,"meta":145,"style":145},"# 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",[48,121207,121208,121213,121227,121231,121236,121245,121253],{"__ignoreMap":145},[149,121209,121210],{"class":151,"line":152},[149,121211,121212],{"class":295},"# Ubuntu22.04及以上、Debian12及以上\n",[149,121214,121215,121217,121219,121221,121224],{"class":151,"line":193},[149,121216,26285],{"class":162},[149,121218,118996],{"class":169},[149,121220,25542],{"class":169},[149,121222,121223],{"class":169}," fcitx5",[149,121225,121226],{"class":169}," fcitx5-chinese-addons\n",[149,121228,121229],{"class":151,"line":235},[149,121230,4119],{"emptyLinePlaceholder":1800},[149,121232,121233],{"class":151,"line":340},[149,121234,121235],{"class":295},"# Ubuntu20.04\n",[149,121237,121238,121240,121242],{"class":151,"line":346},[149,121239,26285],{"class":162},[149,121241,120523],{"class":169},[149,121243,121244],{"class":169}," ppa:zhsj\u002Ffcitx5\n",[149,121246,121247,121249,121251],{"class":151,"line":352},[149,121248,26285],{"class":162},[149,121250,118996],{"class":169},[149,121252,27951],{"class":169},[149,121254,121255,121257,121259,121261,121263],{"class":151,"line":1021},[149,121256,26285],{"class":162},[149,121258,118996],{"class":169},[149,121260,25542],{"class":169},[149,121262,121223],{"class":169},[149,121264,121226],{"class":169},[125,121266,121267,121270],{"start":235},[45,121268,121269],{},"Reboot System",[45,121271,121272],{},"启动Fcitx5",[24,121274,121275],{},[83,121276],{"alt":145,"src":121277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[125,121279,121280],{"start":346},[45,121281,121282],{},"修改一些设置",[24,121284,121285],{},"将Pinyin和Keyboard - English US加入到左边。",[24,121287,121288],{},[83,121289],{"alt":145,"src":121290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[24,121292,121293],{},"添加快捷键以便于更好切换中英文",[24,121295,121296],{},[83,121297],{"alt":145,"src":121298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[125,121300,121301],{"start":352},[45,121302,121303],{},"重启",[140,121305,121307],{"className":120202,"code":121306,"language":120204,"meta":145,"style":145},"sudo shutdown -r now\n",[48,121308,121309],{"__ignoreMap":145},[149,121310,121311,121313,121316,121319],{"class":151,"line":152},[149,121312,26285],{"class":162},[149,121314,121315],{"class":169}," shutdown",[149,121317,121318],{"class":309}," -r",[149,121320,121321],{"class":169}," now\n",[125,121323,121324],{"start":1021},[45,121325,121326],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[24,121328,121329],{},[2102,121330,121331],{"href":121331,"rel":121332},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25573],[125,121334,121335],{"start":1035},[45,121336,121337],{},"再重启",[140,121339,121340],{"className":120202,"code":121306,"language":120204,"meta":145,"style":145},[48,121341,121342],{"__ignoreMap":145},[149,121343,121344,121346,121348,121350],{"class":151,"line":152},[149,121345,26285],{"class":162},[149,121347,121315],{"class":169},[149,121349,121318],{"class":309},[149,121351,121321],{"class":169},[14,121353,121355],{"id":121354},"_34-pip3源替换","3.4 pip3源替换",[24,121357,121358],{},"非Debian系发行版需要做。",[24,121360,121361],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[24,121363,121364],{},"使用dnf的系统也可能不用做。",[140,121366,121368],{"className":118975,"code":121367,"language":118977,"meta":145,"style":145},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[48,121369,121370,121375,121382,121387,121392],{"__ignoreMap":145},[149,121371,121372],{"class":151,"line":152},[149,121373,121374],{"class":295},"# 检查是否已安装 pip\n",[149,121376,121377,121380],{"class":151,"line":193},[149,121378,121379],{"class":162},"pip3",[149,121381,28002],{"class":309},[149,121383,121384],{"class":151,"line":235},[149,121385,121386],{"class":295},"# 如果未安装，先安装 pip3（见下方）\n",[149,121388,121389],{"class":151,"line":340},[149,121390,121391],{"class":295},"# 配置 pip 使用清华源\n",[149,121393,121394,121396,121399,121402,121405],{"class":151,"line":346},[149,121395,121379],{"class":162},[149,121397,121398],{"class":169}," config",[149,121400,121401],{"class":169}," set",[149,121403,121404],{"class":169}," global.index-url",[149,121406,121407],{"class":169}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[24,121409,121410],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[24,121412,121413],{},[83,121414],{"alt":145,"src":121415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[140,121417,121419],{"className":118975,"code":121418,"language":118977,"meta":145,"style":145},"#安装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",[48,121420,121421,121426,121434,121445,121449,121454,121473,121477,121482,121494,121498,121503],{"__ignoreMap":145},[149,121422,121423],{"class":151,"line":152},[149,121424,121425],{"class":295},"#安装pip3\n",[149,121427,121428,121430,121432],{"class":151,"line":193},[149,121429,26285],{"class":162},[149,121431,118996],{"class":169},[149,121433,27951],{"class":169},[149,121435,121436,121438,121440,121442],{"class":151,"line":235},[149,121437,26285],{"class":162},[149,121439,27785],{"class":169},[149,121441,25542],{"class":169},[149,121443,121444],{"class":169}," python3-pip\n",[149,121446,121447],{"class":151,"line":340},[149,121448,4119],{"emptyLinePlaceholder":1800},[149,121450,121451],{"class":151,"line":346},[149,121452,121453],{"class":295},"#更新pip3\n",[149,121455,121456,121458,121460,121462,121464,121466,121469,121471],{"class":151,"line":352},[149,121457,102559],{"class":162},[149,121459,102562],{"class":309},[149,121461,102585],{"class":169},[149,121463,25542],{"class":169},[149,121465,28139],{"class":309},[149,121467,121468],{"class":169}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[149,121470,102590],{"class":309},[149,121472,102593],{"class":169},[149,121474,121475],{"class":151,"line":1021},[149,121476,4119],{"emptyLinePlaceholder":1800},[149,121478,121479],{"class":151,"line":1035},[149,121480,121481],{"class":295},"#设置pip源为清华源\n",[149,121483,121484,121486,121488,121490,121492],{"class":151,"line":1054},[149,121485,121379],{"class":162},[149,121487,121398],{"class":169},[149,121489,121401],{"class":169},[149,121491,121404],{"class":169},[149,121493,121407],{"class":169},[149,121495,121496],{"class":151,"line":1072},[149,121497,4119],{"emptyLinePlaceholder":1800},[149,121499,121500],{"class":151,"line":1090},[149,121501,121502],{"class":295},"#测试\n",[149,121504,121505,121507,121509,121511,121513,121515],{"class":151,"line":1633},[149,121506,102559],{"class":162},[149,121508,102562],{"class":309},[149,121510,102585],{"class":169},[149,121512,25542],{"class":169},[149,121514,102590],{"class":309},[149,121516,102593],{"class":169},[24,121518,121519],{},"成功的话，会看到Looking后面是tsinghua字样。",[24,121521,121522],{},[83,121523],{"alt":145,"src":121524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121526,121528],{"id":121527},"_35-显卡驱动安装","3.5 显卡驱动安装",[19,121530,121532],{"id":121531},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[140,121534,121536],{"className":120202,"code":121535,"language":120204,"meta":145,"style":145},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[48,121537,121538,121543,121558,121563],{"__ignoreMap":145},[149,121539,121540],{"class":151,"line":152},[149,121541,121542],{"class":295},"# 如果是使用apt安装的驱动\n",[149,121544,121545,121547,121549,121551,121553,121556],{"class":151,"line":193},[149,121546,26285],{"class":162},[149,121548,27785],{"class":169},[149,121550,27788],{"class":169},[149,121552,120837],{"class":309},[149,121554,121555],{"class":169}," nvidia",[149,121557,120927],{"class":309},[149,121559,121560],{"class":151,"line":235},[149,121561,121562],{"class":295},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[149,121564,121565,121567],{"class":151,"line":340},[149,121566,26285],{"class":162},[149,121568,121569],{"class":169}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[19,121571,121573],{"id":121572},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[120,121575,121577],{"id":121576},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24619,121579,121581],{"id":121580},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[140,121583,121585],{"className":120202,"code":121584,"language":120204,"meta":145,"style":145},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[48,121586,121587,121592,121603,121608,121618,121623],{"__ignoreMap":145},[149,121588,121589],{"class":151,"line":152},[149,121590,121591],{"class":295},"# 安装英伟达驱动\n",[149,121593,121594,121596,121598,121600],{"class":151,"line":193},[149,121595,26285],{"class":162},[149,121597,118996],{"class":169},[149,121599,25542],{"class":169},[149,121601,121602],{"class":169}," nvidia-driver-版本号\n",[149,121604,121605],{"class":151,"line":235},[149,121606,121607],{"class":295},"# 重启 \n",[149,121609,121610,121612,121614,121616],{"class":151,"line":340},[149,121611,26285],{"class":162},[149,121613,121315],{"class":169},[149,121615,121318],{"class":309},[149,121617,121321],{"class":169},[149,121619,121620],{"class":151,"line":346},[149,121621,121622],{"class":295},"# 检查驱动是否安装成功\n",[149,121624,121625],{"class":151,"line":352},[149,121626,121627],{"class":162},"nvidia-smi\n",[24619,121629,121631],{"id":121630},"_35212-debian","3.5.2.1.2 Debian",[140,121633,121635],{"className":120202,"code":121634,"language":120204,"meta":145,"style":145},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[48,121636,121637,121641,121655,121659,121669,121673],{"__ignoreMap":145},[149,121638,121639],{"class":151,"line":152},[149,121640,121591],{"class":295},[149,121642,121643,121645,121647,121649,121652],{"class":151,"line":193},[149,121644,26285],{"class":162},[149,121646,118996],{"class":169},[149,121648,25542],{"class":169},[149,121650,121651],{"class":169}," nvidia-driver",[149,121653,121654],{"class":169}," nvidia-settings\n",[149,121656,121657],{"class":151,"line":235},[149,121658,121607],{"class":295},[149,121660,121661,121663,121665,121667],{"class":151,"line":340},[149,121662,26285],{"class":162},[149,121664,121315],{"class":169},[149,121666,121318],{"class":309},[149,121668,121321],{"class":169},[149,121670,121671],{"class":151,"line":346},[149,121672,121622],{"class":295},[149,121674,121675],{"class":151,"line":352},[149,121676,121627],{"class":162},[120,121678,121680],{"id":121679},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[24,121682,121683,121684,121687],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[31,121685,121686],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[24,121689,121690,121691],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25262,121692,121693],{},[31,121694,121695],{},"（也可以不禁用桌面环境，直接进行下一步。）",[140,121697,121699],{"className":120202,"code":121698,"language":120204,"meta":145,"style":145},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[48,121700,121701,121706,121716,121721,121734,121739],{"__ignoreMap":145},[149,121702,121703],{"class":151,"line":152},[149,121704,121705],{"class":295},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[149,121707,121708,121710,121713],{"class":151,"line":193},[149,121709,26285],{"class":162},[149,121711,121712],{"class":169}," telinit",[149,121714,121715],{"class":309}," 3\n",[149,121717,121718],{"class":151,"line":235},[149,121719,121720],{"class":295},"# ubuntu 使用下方命令\n",[149,121722,121723,121725,121728,121731],{"class":151,"line":340},[149,121724,26285],{"class":162},[149,121726,121727],{"class":169}," service",[149,121729,121730],{"class":169}," lightdm",[149,121732,121733],{"class":169}," stop\n",[149,121735,121736],{"class":151,"line":346},[149,121737,121738],{"class":295},"# Fedora 使用下方命令\n",[149,121740,121741,121743,121745,121748],{"class":151,"line":352},[149,121742,26285],{"class":162},[149,121744,28222],{"class":169},[149,121746,121747],{"class":169}," isolate",[149,121749,121750],{"class":169}," multi-user.target\n",[24,121752,121753],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[140,121755,121757],{"className":120202,"code":121756,"language":120204,"meta":145,"style":145},"# 编译环境+准备工作\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",[48,121758,121759,121764,121775,121780,121787,121792,121804,121809,121816,121821],{"__ignoreMap":145},[149,121760,121761],{"class":151,"line":152},[149,121762,121763],{"class":295},"# 编译环境+准备工作\n",[149,121765,121766,121768,121770,121772],{"class":151,"line":193},[149,121767,26285],{"class":162},[149,121769,118996],{"class":169},[149,121771,25542],{"class":169},[149,121773,121774],{"class":169}," build-essential\n",[149,121776,121777],{"class":151,"line":235},[149,121778,121779],{"class":295},"# 进入到.run目录中\n",[149,121781,121782,121784],{"class":151,"line":340},[149,121783,102956],{"class":309},[149,121785,121786],{"class":169}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[149,121788,121789],{"class":151,"line":346},[149,121790,121791],{"class":295},"# 给驱动文件增加可执行权限：\n",[149,121793,121794,121796,121798,121801],{"class":151,"line":352},[149,121795,26285],{"class":162},[149,121797,26288],{"class":169},[149,121799,121800],{"class":169}," a+x",[149,121802,121803],{"class":169}," NVIDIA-Linux-x86_64-550.107.02.run\n",[149,121805,121806],{"class":151,"line":1021},[149,121807,121808],{"class":295},"# 然后执行安装：\n",[149,121810,121811,121813],{"class":151,"line":1035},[149,121812,26285],{"class":162},[149,121814,121815],{"class":169}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[149,121817,121818],{"class":151,"line":1054},[149,121819,121820],{"class":295},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[149,121822,121823,121825,121828],{"class":151,"line":1072},[149,121824,26285],{"class":162},[149,121826,121827],{"class":169}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[149,121829,121830],{"class":309},"  --no-opengl-files\n",[24,121832,121833],{},"安装完毕重启即可",[140,121835,121837],{"className":120202,"code":121836,"language":120204,"meta":145,"style":145},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[48,121838,121839,121843,121849,121853],{"__ignoreMap":145},[149,121840,121841],{"class":151,"line":152},[149,121842,121607],{"class":295},[149,121844,121845,121847],{"class":151,"line":193},[149,121846,26285],{"class":162},[149,121848,28356],{"class":169},[149,121850,121851],{"class":151,"line":235},[149,121852,121622],{"class":295},[149,121854,121855],{"class":151,"line":340},[149,121856,121627],{"class":162},[19,121858,121860],{"id":121859},"_353-安装cuda","3.5.3 安装CUDA",[24,121862,121863],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[24,121865,121866],{},[83,121867],{"alt":145,"src":121868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[125,121870,121871],{},[45,121872,121873],{},"先查看显卡驱动所支持的最高CUDA版本",[140,121875,121876],{"className":120202,"code":121627,"language":120204,"meta":145,"style":145},[48,121877,121878],{"__ignoreMap":145},[149,121879,121880],{"class":151,"line":152},[149,121881,121627],{"class":162},[24,121883,121884],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[24,121886,121887],{},[83,121888],{"alt":145,"src":121889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[125,121891,121892],{"start":193},[45,121893,121894],{},"下载CUDA并安装CUDA",[24,121896,119981,121897],{},[2102,121898,119984],{"href":119984,"rel":121899},[25573],[24,121901,121902],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[24,121904,121905],{},[83,121906],{"alt":145,"src":121907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[24,121909,121910,121911,121916],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2102,121912,121915],{"href":121913,"rel":121914},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25573],"Vinci机器人队单片机教程","）",[24,121918,121919],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[24,121921,121922],{},[83,121923],{"alt":145,"src":121924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[24,121926,121927],{},"将最下方框框里的命令敲入终端",[140,121929,121931],{"className":120202,"code":121930,"language":120204,"meta":145,"style":145},"# 在当前文件夹下创建一个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",[48,121932,121933,121938,121947,121952,121959,121964,121972,121977,121988,121993],{"__ignoreMap":145},[149,121934,121935],{"class":151,"line":152},[149,121936,121937],{"class":295},"# 在当前文件夹下创建一个ttt的子文件夹\n",[149,121939,121940,121942,121944],{"class":151,"line":193},[149,121941,102946],{"class":162},[149,121943,30922],{"class":309},[149,121945,121946],{"class":169}," .\u002Fttt\n",[149,121948,121949],{"class":151,"line":235},[149,121950,121951],{"class":295},"# 进入ttt文件夹\n",[149,121953,121954,121956],{"class":151,"line":340},[149,121955,102956],{"class":309},[149,121957,121958],{"class":169}," ttt\n",[149,121960,121961],{"class":151,"line":346},[149,121962,121963],{"class":295},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[149,121965,121966,121969],{"class":151,"line":352},[149,121967,121968],{"class":162},"wget",[149,121970,121971],{"class":169}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[149,121973,121974],{"class":151,"line":1021},[149,121975,121976],{"class":295},"# 给予权限\n",[149,121978,121979,121981,121983,121985],{"class":151,"line":1035},[149,121980,26285],{"class":162},[149,121982,26288],{"class":169},[149,121984,121800],{"class":169},[149,121986,121987],{"class":169}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[149,121989,121990],{"class":151,"line":1054},[149,121991,121992],{"class":295},"# 运行脚本\n",[149,121994,121995,121997],{"class":151,"line":1072},[149,121996,26285],{"class":162},[149,121998,121987],{"class":169},[24,122000,122001],{},[83,122002],{"alt":145,"src":122003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[24,122005,122006],{},"正在安装中：",[24,122008,122009],{},[83,122010],{"alt":145,"src":122011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[24,122013,122014],{},"输入accept接受即可",[24,122016,122017],{},[83,122018],{"alt":145,"src":122019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[24,122021,122022],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[24,122024,122025],{},[83,122026],{"alt":145,"src":122027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[24,122029,122030],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[24,122032,122033],{},[83,122034],{"alt":145,"src":122035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[125,122037,122038],{"start":235},[45,122039,122040],{},"配置环境",[24,122042,122043],{},"根据上方确认一下路径，比如我上面红色框起来的为",[140,122045,122047],{"className":120202,"code":122046,"language":120204,"meta":145,"style":145},"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",[48,122048,122049,122065,122080],{"__ignoreMap":145},[149,122050,122051,122054,122057,122060,122063],{"class":151,"line":152},[149,122052,122053],{"class":162},"Please",[149,122055,122056],{"class":169}," make",[149,122058,122059],{"class":169}," sure",[149,122061,122062],{"class":169}," that",[149,122064,4393],{"class":155},[149,122066,122067,122069,122072,122075,122078],{"class":151,"line":193},[149,122068,53969],{"class":162},[149,122070,122071],{"class":169},"   PATH",[149,122073,122074],{"class":169}," includes",[149,122076,122077],{"class":169}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[149,122079,4393],{"class":155},[149,122081,122082,122084,122087,122089,122092,122095,122097,122100,122103,122106,122109,122111,122114,122116],{"class":151,"line":235},[149,122083,53969],{"class":162},[149,122085,122086],{"class":169},"   LD_LIBRARY_PATH",[149,122088,122074],{"class":169},[149,122090,122091],{"class":169}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[149,122093,122094],{"class":169}," or,",[149,122096,6925],{"class":169},[149,122098,122099],{"class":169}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[149,122101,122102],{"class":169}," to",[149,122104,122105],{"class":169}," \u002Fetc\u002Fld.so.conf",[149,122107,122108],{"class":169}," and",[149,122110,28939],{"class":169},[149,122112,122113],{"class":169}," ldconfig",[149,122115,66291],{"class":169},[149,122117,122118],{"class":169}," root\n",[24,122120,122121],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[140,122123,122125],{"className":120202,"code":122124,"language":120204,"meta":145,"style":145},"which nvcc\n",[48,122126,122127],{"__ignoreMap":145},[149,122128,122129,122132],{"class":151,"line":152},[149,122130,122131],{"class":309},"which",[149,122133,122134],{"class":169}," nvcc\n",[24,122136,122137],{},[83,122138],{"alt":145,"src":122139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[24,122141,122142],{},"所以我进行以下操作：",[140,122144,122146],{"className":120202,"code":122145,"language":120204,"meta":145,"style":145},"sudo vim ~\u002F.bashrc\n",[48,122147,122148],{"__ignoreMap":145},[149,122149,122150,122152,122154],{"class":151,"line":152},[149,122151,26285],{"class":162},[149,122153,120262],{"class":169},[149,122155,122156],{"class":169}," ~\u002F.bashrc\n",[24,122158,122159],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[140,122161,122163],{"className":120202,"code":122162,"language":120204,"meta":145,"style":145},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[48,122164,122165,122177],{"__ignoreMap":145},[149,122166,122167,122169,122172,122174],{"class":151,"line":152},[149,122168,26751],{"class":325},[149,122170,122171],{"class":155}," PATH",[149,122173,166],{"class":325},[149,122175,122176],{"class":155},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[149,122178,122179,122181,122184,122186],{"class":151,"line":193},[149,122180,26751],{"class":325},[149,122182,122183],{"class":155}," LD_LIBRARY_PATH",[149,122185,166],{"class":325},[149,122187,122188],{"class":155},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[24,122190,122191],{},[83,122192],{"alt":145,"src":122193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[140,122195,122197],{"className":120202,"code":122196,"language":120204,"meta":145,"style":145},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[48,122198,122199,122204,122210,122215],{"__ignoreMap":145},[149,122200,122201],{"class":151,"line":152},[149,122202,122203],{"class":295},"# 刷新当前终端的环境变量\n",[149,122205,122206,122208],{"class":151,"line":193},[149,122207,102573],{"class":309},[149,122209,122156],{"class":169},[149,122211,122212],{"class":151,"line":235},[149,122213,122214],{"class":295},"# 验证CUDA是否安装成功\n",[149,122216,122217,122220],{"class":151,"line":340},[149,122218,122219],{"class":162},"nvcc",[149,122221,122222],{"class":309}," -V\n",[24,122224,122225],{},"出现下图这种则安装成功。",[24,122227,122228],{},[83,122229],{"alt":145,"src":122230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[19,122232,122234],{"id":122233},"_354-安装cudnn","3.5.4 安装cuDNN",[125,122236,122237],{},[45,122238,122239],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[24,122241,122242,122243,122248],{},"前往 NVIDIA cuDNN 下载页面：",[2102,122244,122247],{"href":122245,"rel":122246},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25573],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[24,122250,122251],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[24,122253,122254],{},[83,122255],{"alt":145,"src":122256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[24,122258,122259],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[24,122261,122262],{},[83,122263],{"alt":145,"src":122264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[24,122266,122267],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[24,122269,122270],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[24,122272,122273],{},[31,122274,122275],{},"我这里选择所有Linux X86_64最通用的办法：",[24,122277,122278],{},"下载好的：",[24,122280,122281],{},[83,122282],{"alt":145,"src":122283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[125,122285,122286],{"start":193},[45,122287,122288],{},"安装cuDNN",[24,122290,122291],{},"找到该文件所在目录，并打开终端，cd到该目录。",[24,122293,122294],{},[83,122295],{"alt":145,"src":122296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[24,122298,122299],{},"解压文件，并复制到对应位置完成安装",[140,122301,122303],{"className":120202,"code":122302,"language":120204,"meta":145,"style":145},"# 解压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",[48,122304,122305,122310,122321,122326,122333,122338,122354,122368,122373,122384,122393,122397,122413],{"__ignoreMap":145},[149,122306,122307],{"class":151,"line":152},[149,122308,122309],{"class":295},"# 解压cuDNN文件\n",[149,122311,122312,122315,122318],{"class":151,"line":193},[149,122313,122314],{"class":162},"tar",[149,122316,122317],{"class":309}," -xvf",[149,122319,122320],{"class":169}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[149,122322,122323],{"class":151,"line":235},[149,122324,122325],{"class":295},"# cd进文件夹\n",[149,122327,122328,122330],{"class":151,"line":340},[149,122329,102956],{"class":309},[149,122331,122332],{"class":169}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[149,122334,122335],{"class":151,"line":346},[149,122336,122337],{"class":295},"# 复制cuDNN文件到CUDA目录\n",[149,122339,122340,122342,122344,122347,122349,122352],{"class":151,"line":352},[149,122341,26285],{"class":162},[149,122343,29570],{"class":169},[149,122345,122346],{"class":169}," include\u002Fcudnn",[149,122348,2318],{"class":309},[149,122350,122351],{"class":169},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[149,122353,4393],{"class":155},[149,122355,122356,122358,122360,122363,122365],{"class":151,"line":1021},[149,122357,26285],{"class":162},[149,122359,29570],{"class":169},[149,122361,122362],{"class":169}," lib\u002Flibcudnn",[149,122364,2318],{"class":309},[149,122366,122367],{"class":169},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[149,122369,122370],{"class":151,"line":1035},[149,122371,122372],{"class":295},"# 对比一下有没有缺文件\n",[149,122374,122375,122377,122380,122382],{"class":151,"line":1054},[149,122376,28470],{"class":162},[149,122378,122379],{"class":169}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[149,122381,2318],{"class":309},[149,122383,4393],{"class":155},[149,122385,122386,122388,122391],{"class":151,"line":1072},[149,122387,28470],{"class":162},[149,122389,122390],{"class":169}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[149,122392,120927],{"class":309},[149,122394,122395],{"class":151,"line":1090},[149,122396,121976],{"class":295},[149,122398,122399,122401,122403,122406,122408,122410],{"class":151,"line":1633},[149,122400,26285],{"class":162},[149,122402,26288],{"class":169},[149,122404,122405],{"class":169}," a+r",[149,122407,122379],{"class":169},[149,122409,2318],{"class":309},[149,122411,122412],{"class":155},"   \n",[149,122414,122415,122417,122419,122421,122423],{"class":151,"line":1644},[149,122416,26285],{"class":162},[149,122418,26288],{"class":169},[149,122420,122405],{"class":169},[149,122422,122390],{"class":169},[149,122424,120927],{"class":309},[125,122426,122427],{"start":235},[45,122428,122429],{},"检查是否安装成功",[140,122431,122433],{"className":120202,"code":122432,"language":120204,"meta":145,"style":145},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[48,122434,122435,122440],{"__ignoreMap":145},[149,122436,122437],{"class":151,"line":152},[149,122438,122439],{"class":295},"# 检查cuDNN版本命令\n",[149,122441,122442,122445,122448,122450,122452,122455,122458],{"class":151,"line":193},[149,122443,122444],{"class":162},"cat",[149,122446,122447],{"class":169}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[149,122449,26818],{"class":325},[149,122451,31942],{"class":162},[149,122453,122454],{"class":169}," CUDNN_MAJOR",[149,122456,122457],{"class":309}," -A",[149,122459,49429],{"class":309},[24,122461,122462],{},"出现下图这样的就是安装成功了",[24,122464,122465],{},[83,122466],{"alt":145,"src":122467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[125,122469,122470],{"start":340},[45,122471,122472],{},"软链接(一般不需要)",[140,122474,122476],{"className":120202,"code":122475,"language":120204,"meta":145,"style":145},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[48,122477,122478,122483],{"__ignoreMap":145},[149,122479,122480],{"class":151,"line":152},[149,122481,122482],{"class":295},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[149,122484,122485,122487],{"class":151,"line":193},[149,122486,26285],{"class":162},[149,122488,122489],{"class":169}," ldconfig\n",[24,122491,122492],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[140,122494,122499],{"className":122495,"code":122496,"language":122497,"meta":122498,"style":145},"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",[48,122500,122501,122506,122511,122516,122521,122526,122531],{"__ignoreMap":145},[149,122502,122503],{"class":151,"line":152},[149,122504,122505],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[149,122507,122508],{"class":151,"line":193},[149,122509,122510],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[149,122512,122513],{"class":151,"line":235},[149,122514,122515],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[149,122517,122518],{"class":151,"line":340},[149,122519,122520],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[149,122522,122523],{"class":151,"line":346},[149,122524,122525],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[149,122527,122528],{"class":151,"line":352},[149,122529,122530],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[149,122532,122533],{"class":151,"line":1021},[149,122534,122535],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[24,122537,122538],{},"运行下方的命令",[140,122540,122542],{"className":120202,"code":122541,"language":120204,"meta":145,"style":145},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[48,122543,122544,122549,122556,122561],{"__ignoreMap":145},[149,122545,122546],{"class":151,"line":152},[149,122547,122548],{"class":295},"# cd进入CUDA路径\n",[149,122550,122551,122553],{"class":151,"line":193},[149,122552,102956],{"class":309},[149,122554,122555],{"class":169}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[149,122557,122558],{"class":151,"line":235},[149,122559,122560],{"class":295}," # 查看本路径下的需要软链接的文件名\n",[149,122562,122563],{"class":151,"line":340},[149,122564,122565],{"class":162}," ls\n",[24,122567,122568],{},[83,122569],{"alt":145,"src":122570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[24,122572,122573,122574,20120,122577,20120,122580,122583],{},"如上图，我需要将",[48,122575,122576],{},"libcudnn_xxx_xxxxx.so.8.9.7",[48,122578,122579],{},"libcudnn_xxx_xxxxx.so.8",[48,122581,122582],{},"libcudnn_xxx_xxxxx.so","软链接",[140,122585,122587],{"className":120202,"code":122586,"language":120204,"meta":145,"style":145},"# 创建符号链接。对于每个 .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",[48,122588,122589,122594,122610,122624,122638,122652,122666,122680,122694,122699,122705,122710],{"__ignoreMap":145},[149,122590,122591],{"class":151,"line":152},[149,122592,122593],{"class":295},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[149,122595,122596,122598,122601,122604,122607],{"class":151,"line":193},[149,122597,26285],{"class":162},[149,122599,122600],{"class":169}," ln",[149,122602,122603],{"class":309}," -sf",[149,122605,122606],{"class":169}," libcudnn_cnn_train.so.8.9.7",[149,122608,122609],{"class":169}," libcudnn_cnn_train.so.8\n",[149,122611,122612,122614,122616,122618,122621],{"class":151,"line":235},[149,122613,26285],{"class":162},[149,122615,122600],{"class":169},[149,122617,122603],{"class":309},[149,122619,122620],{"class":169}," libcudnn_adv_infer.so.8.9.7",[149,122622,122623],{"class":169}," libcudnn_adv_infer.so.8\n",[149,122625,122626,122628,122630,122632,122635],{"class":151,"line":340},[149,122627,26285],{"class":162},[149,122629,122600],{"class":169},[149,122631,122603],{"class":309},[149,122633,122634],{"class":169}," libcudnn_adv_train.so.8.9.7",[149,122636,122637],{"class":169}," libcudnn_adv_train.so.8\n",[149,122639,122640,122642,122644,122646,122649],{"class":151,"line":346},[149,122641,26285],{"class":162},[149,122643,122600],{"class":169},[149,122645,122603],{"class":309},[149,122647,122648],{"class":169}," libcudnn_cnn_infer.so.8.9.7",[149,122650,122651],{"class":169}," libcudnn_cnn_infer.so.8\n",[149,122653,122654,122656,122658,122660,122663],{"class":151,"line":352},[149,122655,26285],{"class":162},[149,122657,122600],{"class":169},[149,122659,122603],{"class":309},[149,122661,122662],{"class":169}," libcudnn.so.8.9.7",[149,122664,122665],{"class":169}," libcudnn.so.8\n",[149,122667,122668,122670,122672,122674,122677],{"class":151,"line":1021},[149,122669,26285],{"class":162},[149,122671,122600],{"class":169},[149,122673,122603],{"class":309},[149,122675,122676],{"class":169}," libcudnn_ops_infer.so.8.9.7",[149,122678,122679],{"class":169}," libcudnn_ops_infer.so.8\n",[149,122681,122682,122684,122686,122688,122691],{"class":151,"line":1035},[149,122683,26285],{"class":162},[149,122685,122600],{"class":169},[149,122687,122603],{"class":309},[149,122689,122690],{"class":169}," libcudnn_ops_train.so.8.9.7",[149,122692,122693],{"class":169}," libcudnn_ops_train.so.8\n",[149,122695,122696],{"class":151,"line":1054},[149,122697,122698],{"class":295},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[149,122700,122701,122703],{"class":151,"line":1072},[149,122702,26285],{"class":162},[149,122704,122489],{"class":169},[149,122706,122707],{"class":151,"line":1090},[149,122708,122709],{"class":295},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[149,122711,122712,122714,122717,122720,122722,122725],{"class":151,"line":1633},[149,122713,28470],{"class":162},[149,122715,122716],{"class":309}," -l",[149,122718,122719],{"class":169}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[149,122721,2318],{"class":309},[149,122723,122724],{"class":169},".so",[149,122726,120927],{"class":309},[19,122728,122730],{"id":122729},"_355-常见问题","3.5.5 常见问题",[125,122732,122733],{},[45,122734,122735],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[140,122737,122739],{"className":120202,"code":122738,"language":120204,"meta":145,"style":145},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[48,122740,122741],{"__ignoreMap":145},[149,122742,122743,122745,122747],{"class":151,"line":152},[149,122744,26285],{"class":162},[149,122746,120262],{"class":169},[149,122748,122749],{"class":169}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[24,122751,122752],{},"blacklist-nouveau.conf文件内容如下：",[140,122754,122756],{"className":120202,"code":122755,"language":120204,"meta":145,"style":145},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[48,122757,122758,122766,122773,122785,122795],{"__ignoreMap":145},[149,122759,122760,122763],{"class":151,"line":152},[149,122761,122762],{"class":162},"blacklist",[149,122764,122765],{"class":169}," nouveau\n",[149,122767,122768,122770],{"class":151,"line":193},[149,122769,122762],{"class":162},[149,122771,122772],{"class":169}," lbm-nouveau\n",[149,122774,122775,122777,122780,122783],{"class":151,"line":235},[149,122776,117609],{"class":162},[149,122778,122779],{"class":169}," nouveau",[149,122781,122782],{"class":169}," modeset=",[149,122784,4803],{"class":309},[149,122786,122787,122790,122792],{"class":151,"line":340},[149,122788,122789],{"class":309},"alias",[149,122791,122779],{"class":169},[149,122793,122794],{"class":169}," off\n",[149,122796,122797,122799,122802],{"class":151,"line":346},[149,122798,122789],{"class":309},[149,122800,122801],{"class":169}," lbm-nouveau",[149,122803,122794],{"class":169},[24,122805,122806],{},"接着运行下方命令",[140,122808,122810],{"className":120202,"code":122809,"language":120204,"meta":145,"style":145},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[48,122811,122812,122822,122827],{"__ignoreMap":145},[149,122813,122814,122816,122819],{"class":151,"line":152},[149,122815,26285],{"class":162},[149,122817,122818],{"class":169}," update-initramfs",[149,122820,122821],{"class":309}," -u\n",[149,122823,122824],{"class":151,"line":193},[149,122825,122826],{"class":162},"或者\n",[149,122828,122829,122831,122834],{"class":151,"line":235},[149,122830,26285],{"class":162},[149,122832,122833],{"class":169}," dracut",[149,122835,122836],{"class":309}," --force\n",[24,122838,122839],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[140,122841,122843],{"className":120202,"code":122842,"language":120204,"meta":145,"style":145},"lsmod | grep nouveau\n",[48,122844,122845],{"__ignoreMap":145},[149,122846,122847,122850,122852,122854],{"class":151,"line":152},[149,122848,122849],{"class":162},"lsmod",[149,122851,26818],{"class":325},[149,122853,31942],{"class":162},[149,122855,122765],{"class":169},[125,122857,122858],{"start":193},[45,122859,122860],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[140,122862,122864],{"className":120202,"code":122863,"language":120204,"meta":145,"style":145},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[48,122865,122866],{"__ignoreMap":145},[149,122867,122868,122870,122872],{"class":151,"line":152},[149,122869,26285],{"class":162},[149,122871,120262],{"class":169},[149,122873,122874],{"class":169}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[24,122876,122877],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[140,122879,122881],{"className":120202,"code":122880,"language":120204,"meta":145,"style":145},"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",[48,122882,122883,122891,122899,122907,122914,122922,122932,122940],{"__ignoreMap":145},[149,122884,122885,122888],{"class":151,"line":152},[149,122886,122887],{"class":162},"Section",[149,122889,122890],{"class":169}," \"OutputClass\"\n",[149,122892,122893,122896],{"class":151,"line":193},[149,122894,122895],{"class":162},"   Identifier",[149,122897,122898],{"class":169}," \"nvidia\"\n",[149,122900,122901,122904],{"class":151,"line":235},[149,122902,122903],{"class":162},"   MatchDriver",[149,122905,122906],{"class":169}," \"nvidia-drm\"\n",[149,122908,122909,122912],{"class":151,"line":340},[149,122910,122911],{"class":162},"   Driver",[149,122913,122898],{"class":169},[149,122915,122916,122919],{"class":151,"line":346},[149,122917,122918],{"class":162},"   Option",[149,122920,122921],{"class":169}," \"AllowEmptyInitialConfiguration\"\n",[149,122923,122924,122926,122929],{"class":151,"line":352},[149,122925,122918],{"class":162},[149,122927,122928],{"class":169}," \"PrimaryGPU\"",[149,122930,122931],{"class":169}," \"yes\"\n",[149,122933,122934,122937],{"class":151,"line":1021},[149,122935,122936],{"class":162},"   ModulePath",[149,122938,122939],{"class":169}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[149,122941,122942],{"class":151,"line":1035},[149,122943,122944],{"class":162},"EndSection\n",[125,122946,122947],{"start":235},[45,122948,122949],{},"安装N卡驱动提示错误",[140,122951,122953],{"className":122495,"code":122952,"language":122497,"meta":122498,"style":145},"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",[48,122954,122955],{"__ignoreMap":145},[149,122956,122957],{"class":151,"line":152},[149,122958,122952],{},[125,122960,122961],{},[45,122962,122963],{},"检查当前运行的内核版本：",[24,122965,122966],{},"运行以下命令以查看你当前正在使用的内核版本：",[140,122968,122970],{"className":118975,"code":122969,"language":118977,"meta":145,"style":145},"uname -r\n",[48,122971,122972],{"__ignoreMap":145},[149,122973,122974,122976],{"class":151,"line":152},[149,122975,71888],{"class":162},[149,122977,122978],{"class":309}," -r\n",[125,122980,122981],{"start":193},[45,122982,122983],{},"安装内核开发文件：",[24,122985,122986,122987,122990],{},"确保你已经安装了与当前内核版本相匹配的 ",[48,122988,122989],{},"kernel-devel"," 包。运行以下命令来安装：",[140,122992,122994],{"className":118975,"code":122993,"language":118977,"meta":145,"style":145},"sudo dnf install kernel-devel-$(uname -r)\n",[48,122995,122996],{"__ignoreMap":145},[149,122997,122998,123000,123002,123004,123007,123009,123011,123013],{"class":151,"line":152},[149,122999,26285],{"class":162},[149,123001,28024],{"class":169},[149,123003,25542],{"class":169},[149,123005,123006],{"class":169}," kernel-devel-",[149,123008,26808],{"class":155},[149,123010,71888],{"class":162},[149,123012,121318],{"class":309},[149,123014,1878],{"class":155},[24,123016,123017],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[125,123019,123020],{"start":235},[45,123021,123022],{},"安装内核源代码（如果需要）：",[24,123024,123025],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[140,123027,123029],{"className":118975,"code":123028,"language":118977,"meta":145,"style":145},"sudo dnf install kernel-headers kernel-source\n",[48,123030,123031],{"__ignoreMap":145},[149,123032,123033,123035,123037,123039,123042],{"class":151,"line":152},[149,123034,26285],{"class":162},[149,123036,28024],{"class":169},[149,123038,25542],{"class":169},[149,123040,123041],{"class":169}," kernel-headers",[149,123043,123044],{"class":169}," kernel-source\n",[125,123046,123047],{"start":340},[45,123048,123049],{},"检查安装：",[24,123051,123052,123053,123056],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[48,123054,123055],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[140,123058,123060],{"className":118975,"code":123059,"language":118977,"meta":145,"style":145},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[48,123061,123062],{"__ignoreMap":145},[149,123063,123064,123066],{"class":151,"line":152},[149,123065,28470],{"class":162},[149,123067,123068],{"class":169}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[24,123070,123071,123072,123075],{},"如果仍然遇到问题，可以通过 ",[48,123073,123074],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1783,123077,123078],{},"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":145,"searchDepth":193,"depth":193,"links":123080},[123081,123085,123095,123099,123100],{"id":120178,"depth":193,"text":120179,"children":123082},[123083,123084],{"id":120188,"depth":235,"text":120189},{"id":120198,"depth":235,"text":120199},{"id":120398,"depth":193,"text":120399,"children":123086},[123087,123088,123089,123090,123091,123092,123093,123094],{"id":120402,"depth":235,"text":120403},{"id":120472,"depth":235,"text":120473},{"id":120561,"depth":235,"text":120562},{"id":120806,"depth":235,"text":120807},{"id":120876,"depth":235,"text":120877},{"id":120943,"depth":235,"text":120944},{"id":120978,"depth":235,"text":120979},{"id":121033,"depth":235,"text":121034},{"id":121084,"depth":193,"text":121085,"children":123096},[123097,123098],{"id":121088,"depth":235,"text":121089},{"id":121168,"depth":235,"text":121169},{"id":121354,"depth":193,"text":121355},{"id":121527,"depth":193,"text":121528,"children":123101},[123102,123103,123104,123105,123106],{"id":121531,"depth":235,"text":121532},{"id":121572,"depth":235,"text":121573},{"id":121859,"depth":235,"text":121860},{"id":122233,"depth":235,"text":122234},{"id":122729,"depth":235,"text":122730},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120170,"description":1797},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123113,"title":123114,"body":123115,"description":1797,"extension":1798,"meta":123455,"navigation":1800,"path":123456,"seo":123457,"stem":123458,"__hash__":123459},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123116,"toc":123453},[123117,123120,123125,123128,123374,123379,123382,123418,123421,123450],[10,123118,123114],{"id":123119},"_4-命令教程长期积累",[125,123121,123122],{},[45,123123,123124],{},"大多数命令",[24,123126,123127],{},"常用 Linux 命令速查：",[140,123129,123131],{"className":118975,"code":123130,"language":118977,"meta":145,"style":145},"# 文件与目录\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",[48,123132,123133,123138,123145,123152,123160,123167,123174,123182,123190,123197,123204,123212,123216,123221,123228,123236,123243,123247,123252,123259,123267,123275,123283,123291,123295,123300,123308,123315,123322,123330,123338,123342,123347,123356,123365],{"__ignoreMap":145},[149,123134,123135],{"class":151,"line":152},[149,123136,123137],{"class":295},"# 文件与目录\n",[149,123139,123140,123142],{"class":151,"line":193},[149,123141,28470],{"class":162},[149,123143,123144],{"class":295},"        # 列出目录内容\n",[149,123146,123147,123149],{"class":151,"line":235},[149,123148,102956],{"class":309},[149,123150,123151],{"class":295},"        # 切换目录\n",[149,123153,123154,123157],{"class":151,"line":340},[149,123155,123156],{"class":309},"pwd",[149,123158,123159],{"class":295},"       # 显示当前路径\n",[149,123161,123162,123164],{"class":151,"line":346},[149,123163,102946],{"class":162},[149,123165,123166],{"class":295},"     # 创建目录\n",[149,123168,123169,123171],{"class":151,"line":352},[149,123170,27031],{"class":162},[149,123172,123173],{"class":295},"        # 删除文件或目录\n",[149,123175,123176,123179],{"class":151,"line":1021},[149,123177,123178],{"class":162},"cp",[149,123180,123181],{"class":295},"        # 复制文件或目录\n",[149,123183,123184,123187],{"class":151,"line":1035},[149,123185,123186],{"class":162},"mv",[149,123188,123189],{"class":295},"        # 移动\u002F重命名文件或目录\n",[149,123191,123192,123194],{"class":151,"line":1054},[149,123193,102963],{"class":162},[149,123195,123196],{"class":295},"     # 创建空文件\n",[149,123198,123199,123201],{"class":151,"line":1072},[149,123200,122444],{"class":162},[149,123202,123203],{"class":295},"       # 查看文件内容\n",[149,123205,123206,123209],{"class":151,"line":1090},[149,123207,123208],{"class":162},"head\u002Ftail",[149,123210,123211],{"class":295}," # 查看文件头部\u002F尾部\n",[149,123213,123214],{"class":151,"line":1633},[149,123215,4119],{"emptyLinePlaceholder":1800},[149,123217,123218],{"class":151,"line":1644},[149,123219,123220],{"class":295},"# 权限管理\n",[149,123222,123223,123225],{"class":151,"line":3348},[149,123224,26320],{"class":162},[149,123226,123227],{"class":295},"     # 修改文件权限\n",[149,123229,123230,123233],{"class":151,"line":3362},[149,123231,123232],{"class":162},"chown",[149,123234,123235],{"class":295},"     # 修改文件所有者\n",[149,123237,123238,123240],{"class":151,"line":3367},[149,123239,26285],{"class":162},[149,123241,123242],{"class":295},"      # 以管理员身份执行\n",[149,123244,123245],{"class":151,"line":3373},[149,123246,4119],{"emptyLinePlaceholder":1800},[149,123248,123249],{"class":151,"line":3394},[149,123250,123251],{"class":295},"# 系统信息\n",[149,123253,123254,123256],{"class":151,"line":3399},[149,123255,71888],{"class":162},[149,123257,123258],{"class":295},"     # 系统信息\n",[149,123260,123261,123264],{"class":151,"line":3413},[149,123262,123263],{"class":162},"df",[149,123265,123266],{"class":295},"        # 磁盘使用情况\n",[149,123268,123269,123272],{"class":151,"line":3418},[149,123270,123271],{"class":162},"free",[149,123273,123274],{"class":295},"      # 内存使用情况\n",[149,123276,123277,123280],{"class":151,"line":3447},[149,123278,123279],{"class":162},"top\u002Fhtop",[149,123281,123282],{"class":295},"  # 进程监控\n",[149,123284,123285,123288],{"class":151,"line":3452},[149,123286,123287],{"class":162},"ps",[149,123289,123290],{"class":295},"        # 查看进程\n",[149,123292,123293],{"class":151,"line":3469},[149,123294,4119],{"emptyLinePlaceholder":1800},[149,123296,123297],{"class":151,"line":3474},[149,123298,123299],{"class":295},"# 网络\n",[149,123301,123302,123305],{"class":151,"line":3479},[149,123303,123304],{"class":162},"ping",[149,123306,123307],{"class":295},"      # 测试网络连通性\n",[149,123309,123310,123312],{"class":151,"line":3484},[149,123311,28558],{"class":162},[149,123313,123314],{"class":295},"      # 发送 HTTP 请求\n",[149,123316,123317,123319],{"class":151,"line":3498},[149,123318,121968],{"class":162},[149,123320,123321],{"class":295},"      # 下载文件\n",[149,123323,123324,123327],{"class":151,"line":3503},[149,123325,123326],{"class":162},"ssh",[149,123328,123329],{"class":295},"       # 远程登录\n",[149,123331,123332,123335],{"class":151,"line":4296},[149,123333,123334],{"class":162},"scp",[149,123336,123337],{"class":295},"       # 远程文件传输\n",[149,123339,123340],{"class":151,"line":4310},[149,123341,4119],{"emptyLinePlaceholder":1800},[149,123343,123344],{"class":151,"line":4318},[149,123345,123346],{"class":295},"# 包管理（Debian\u002FUbuntu）\n",[149,123348,123349,123351,123353],{"class":151,"line":4323},[149,123350,119047],{"class":162},[149,123352,119026],{"class":169},[149,123354,123355],{"class":295},"   # 更新软件源\n",[149,123357,123358,123360,123362],{"class":151,"line":4329},[149,123359,119047],{"class":162},[149,123361,25542],{"class":169},[149,123363,123364],{"class":295},"  # 安装软件包\n",[149,123366,123367,123369,123371],{"class":151,"line":4335},[149,123368,119047],{"class":162},[149,123370,27788],{"class":169},[149,123372,123373],{"class":295},"   # 卸载软件包\n",[125,123375,123376],{"start":193},[45,123377,123378],{},"KDE Dolphin 以root打开",[24,123380,123381],{},"kde5",[140,123383,123385],{"className":118975,"code":123384,"language":118977,"meta":145,"style":145},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[48,123386,123387],{"__ignoreMap":145},[149,123388,123389,123392,123395,123398,123400,123402,123405,123408,123410,123413,123415],{"class":151,"line":152},[149,123390,123391],{"class":162},"pkexec",[149,123393,123394],{"class":169}," env",[149,123396,123397],{"class":169}," DISPLAY=",[149,123399,29851],{"class":155},[149,123401,29907],{"class":169},[149,123403,123404],{"class":155},"$XAUTHORITY ",[149,123406,123407],{"class":169},"KDE_SESSION_VERSION=",[149,123409,2182],{"class":309},[149,123411,123412],{"class":169}," KDE_FULL_SESSION=",[149,123414,3087],{"class":309},[149,123416,123417],{"class":169}," dolphin\n",[24,123419,123420],{},"kde6",[140,123422,123424],{"className":118975,"code":123423,"language":118977,"meta":145,"style":145},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[48,123425,123426],{"__ignoreMap":145},[149,123427,123428,123430,123432,123434,123436,123438,123440,123442,123444,123446,123448],{"class":151,"line":152},[149,123429,123391],{"class":162},[149,123431,123394],{"class":169},[149,123433,123397],{"class":169},[149,123435,29851],{"class":155},[149,123437,29907],{"class":169},[149,123439,123404],{"class":155},[149,123441,123407],{"class":169},[149,123443,2207],{"class":309},[149,123445,123412],{"class":169},[149,123447,3087],{"class":309},[149,123449,123417],{"class":169},[1783,123451,123452],{},"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":145,"searchDepth":193,"depth":193,"links":123454},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123114,"description":1797},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123461,"title":123462,"body":123463,"description":1797,"extension":1798,"meta":123477,"navigation":1800,"path":123478,"seo":123479,"stem":123480,"__hash__":123481},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123464,"toc":123475},[123465,123468],[10,123466,123462],{"id":123467},"_5-各种环境配置",[24,123469,123470],{},[2102,123471,123474],{"href":123472,"rel":123473},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25573],"电控组环境搭建大全",{"title":145,"searchDepth":193,"depth":193,"links":123476},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123462,"description":1797},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123483,"title":123484,"body":123485,"description":1797,"extension":1798,"meta":123833,"navigation":1800,"path":123834,"seo":123835,"stem":123836,"__hash__":123837},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123486,"toc":123825},[123487,123490,123494,123498,123502,123507,123514,123518,123811,123815,123822],[10,123488,123484],{"id":123489},"_6-拓展功能",[14,123491,123493],{"id":123492},"_61-wine","6.1 Wine",[14,123495,123497],{"id":123496},"_62-android","6.2 Android",[19,123499,123501],{"id":123500},"_621-i卡a卡","6.2.1 I卡、A卡",[125,123503,123504],{},[45,123505,123506],{},"Wayland-Waydroid(体验超级好)",[24,123508,123509,123510],{},"Waydroid 官网与安装指南：",[2102,123511,123512],{"href":123512,"rel":123513},"https:\u002F\u002Fwaydro.id\u002F",[25573],[19,123515,123517],{"id":123516},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[125,123519,123520],{},[45,123521,123522,123523,123525,123526,123530,123532,123535,123540,123737],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55414,123524],{},"BlissOS 官网下载：",[2102,123527,123528],{"href":123528,"rel":123529},"https:\u002F\u002Fblissos.org\u002F",[25573],[55414,123531],{},[83,123533],{"alt":145,"src":123534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[125,123536,123537],{"start":235},[45,123538,123539],{},"比较推荐的配置",[140,123541,123543],{"className":118975,"code":123542,"language":118977,"meta":145,"style":145},"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",[48,123544,123545,123552,123562,123572,123582,123594,123604,123611,123621,123630,123639,123649,123659,123668,123678,123688,123700,123710,123719,123729],{"__ignoreMap":145},[149,123546,123547,123550],{"class":151,"line":152},[149,123548,123549],{"class":162},"qemu-system-x86_64",[149,123551,26387],{"class":309},[149,123553,123554,123557,123560],{"class":151,"line":193},[149,123555,123556],{"class":309},"        -M",[149,123558,123559],{"class":169}," q35,vmport=off",[149,123561,26387],{"class":309},[149,123563,123564,123567,123570],{"class":151,"line":235},[149,123565,123566],{"class":309},"        -accel",[149,123568,123569],{"class":169}," kvm",[149,123571,26387],{"class":309},[149,123573,123574,123577,123580],{"class":151,"line":340},[149,123575,123576],{"class":309},"        -cpu",[149,123578,123579],{"class":169}," qemu64,+sse3,+sse4.2",[149,123581,26387],{"class":309},[149,123583,123584,123587,123590,123592],{"class":151,"line":346},[149,123585,123586],{"class":309},"        -smp",[149,123588,123589],{"class":169}," 8,cores=",[149,123591,2157],{"class":309},[149,123593,26387],{"class":309},[149,123595,123596,123599,123602],{"class":151,"line":352},[149,123597,123598],{"class":309},"        -m",[149,123600,123601],{"class":169}," 6G",[149,123603,26387],{"class":309},[149,123605,123606,123609],{"class":151,"line":1021},[149,123607,123608],{"class":309},"        -usb",[149,123610,26387],{"class":309},[149,123612,123613,123616,123619],{"class":151,"line":1035},[149,123614,123615],{"class":309},"        -device",[149,123617,123618],{"class":169}," virtio-tablet",[149,123620,26387],{"class":309},[149,123622,123623,123625,123628],{"class":151,"line":1054},[149,123624,123615],{"class":309},[149,123626,123627],{"class":169}," virtio-keyboard",[149,123629,26387],{"class":309},[149,123631,123632,123634,123637],{"class":151,"line":1072},[149,123633,123615],{"class":309},[149,123635,123636],{"class":169}," usb-tablet",[149,123638,26387],{"class":309},[149,123640,123641,123644,123647],{"class":151,"line":1090},[149,123642,123643],{"class":309},"        -bios",[149,123645,123646],{"class":169}," OVMF-pure-efi64.fd",[149,123648,26387],{"class":309},[149,123650,123651,123654,123657],{"class":151,"line":1633},[149,123652,123653],{"class":309},"        -net",[149,123655,123656],{"class":169}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[149,123658,26387],{"class":309},[149,123660,123661,123663,123666],{"class":151,"line":1644},[149,123662,123653],{"class":309},[149,123664,123665],{"class":169}," nic,model=virtio",[149,123667,26387],{"class":309},[149,123669,123670,123673,123676],{"class":151,"line":3348},[149,123671,123672],{"class":309},"        -audio",[149,123674,123675],{"class":169}," sdl,model=hda",[149,123677,26387],{"class":309},[149,123679,123680,123683,123686],{"class":151,"line":3362},[149,123681,123682],{"class":309},"        -display",[149,123684,123685],{"class":169}," sdl,gl=on,show-cursor=on",[149,123687,26387],{"class":309},[149,123689,123690,123692,123695,123698],{"class":151,"line":3367},[149,123691,123615],{"class":309},[149,123693,123694],{"class":169}," virtio-vga-gl,xres=1920,yres=",[149,123696,123697],{"class":309},"1080",[149,123699,26387],{"class":309},[149,123701,123702,123705,123708],{"class":151,"line":3373},[149,123703,123704],{"class":309},"        -drive",[149,123706,123707],{"class":169}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[149,123709,26387],{"class":309},[149,123711,123712,123714,123717],{"class":151,"line":3394},[149,123713,123704],{"class":309},[149,123715,123716],{"class":169}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[149,123718,26387],{"class":309},[149,123720,123721,123724,123727],{"class":151,"line":3399},[149,123722,123723],{"class":309},"        -monitor",[149,123725,123726],{"class":169}," stdio",[149,123728,26387],{"class":309},[149,123730,123731,123734],{"class":151,"line":3413},[149,123732,123733],{"class":309},"        -serial",[149,123735,123736],{"class":169}," none\n",[125,123738,123739],{"start":346},[45,123740,123741,123742],{},"常用操作：",[125,123743,123744,123747,123803],{},[45,123745,123746],{},"全屏：Ctrl+Alt+F",[45,123748,123749,123750,123755],{},"adb调试",[125,123751,123752],{},[45,123753,123754],{},"使Linux与Android用ADB连接。",[140,123756,123758],{"className":118975,"code":123757,"language":118977,"meta":145,"style":145},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[48,123759,123760,123765,123776,123781,123793,123798],{"__ignoreMap":145},[149,123761,123762],{"class":151,"line":152},[149,123763,123764],{"class":295},"# 连接安卓\n",[149,123766,123767,123770,123773],{"class":151,"line":193},[149,123768,123769],{"class":162},"adb",[149,123771,123772],{"class":169}," connect",[149,123774,123775],{"class":309}," 127.0.0.1\n",[149,123777,123778],{"class":151,"line":235},[149,123779,123780],{"class":295},"# 打开shell\n",[149,123782,123783,123785,123787,123790],{"class":151,"line":340},[149,123784,123769],{"class":162},[149,123786,28592],{"class":309},[149,123788,123789],{"class":169}," 127.0.0.1:5555",[149,123791,123792],{"class":169}," shell\n",[149,123794,123795],{"class":151,"line":346},[149,123796,123797],{"class":295},"# 使用root权限\n",[149,123799,123800],{"class":151,"line":352},[149,123801,123802],{"class":162},"su\n",[45,123804,123805,123806],{},"中文输入法",[125,123807,123808],{},[45,123809,123810],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123812,123814],{"id":123813},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[24,123816,123817,123818],{},"rEFInd 官网与文档：",[2102,123819,123820],{"href":123820,"rel":123821},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25573],[1783,123823,123824],{},"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":145,"searchDepth":193,"depth":193,"links":123826},[123827,123828,123832],{"id":123492,"depth":193,"text":123493},{"id":123496,"depth":193,"text":123497,"children":123829},[123830,123831],{"id":123500,"depth":235,"text":123501},{"id":123516,"depth":235,"text":123517},{"id":123813,"depth":193,"text":123814},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123484,"description":1797},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123839,"title":123840,"body":123841,"description":1797,"extension":1798,"meta":127140,"navigation":1800,"path":127141,"seo":127142,"stem":127143,"__hash__":127144},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123842,"toc":127114},[123843,123846,123850,123853,123860,124110,124113,124185,124188,124192,124196,124201,124204,124207,124210,124215,124218,124221,124224,124229,124232,124237,124240,124243,124248,124251,124256,124259,124263,124267,124270,124275,124278,124292,124295,124298,124307,124310,124319,124322,124325,124334,124337,124346,124349,124352,124361,124364,124367,124382,124385,124388,124397,124402,124405,124408,124417,124420,124429,124432,124441,124444,124453,124458,124461,124469,124474,124477,124486,124489,124497,124502,124505,124514,124517,124520,124524,124527,124532,124535,124540,124554,124559,124564,124575,124580,124586,124591,124606,124611,124614,124619,124624,124629,124637,124642,124649,124654,124665,124670,124673,124677,124680,124683,124688,124691,124710,124715,124718,124727,124732,124735,124757,124760,124790,124793,124798,124801,124815,124820,124839,124842,124845,124850,124862,124867,124872,124875,124880,124883,124898,124901,124906,124911,124915,124920,124960,124963,124967,124973,124979,124984,124987,124994,124999,125006,125009,125012,125019,125033,125036,125096,125099,125113,125125,125128,125131,125134,125198,125201,125204,125207,125227,125230,125235,125242,125246,125249,125253,125258,125263,125267,125270,125273,125315,125320,125323,125345,125360,125362,125367,125379,125439,125441,125443,125497,125499,125501,125507,125512,125515,125520,125524,125527,125589,125594,125597,125599,125603,125615,125697,125699,125701,125755,125761,125763,125767,125772,125774,125779,125783,125803,125838,125842,125845,125848,125851,125858,125861,125873,125876,125891,125894,125913,125961,125964,125981,125984,125998,126003,126006,126015,126030,126042,126080,126085,126094,126099,126104,126130,126139,126143,126147,126152,126155,126159,126163,126168,126171,126176,126179,126184,126187,126192,126195,126199,126204,126207,126212,126215,126219,126224,126227,126232,126235,126240,126243,126247,126252,126255,126260,126263,126268,126271,126275,126280,126283,126288,126291,126296,126299,126304,126307,126312,126315,126320,126323,126327,126332,126335,126340,126347,126351,126356,126359,126364,126367,126371,126376,126379,126382,126385,126388,126391,126395,126398,126408,126413,126418,126440,126445,126450,126457,126461,126466,126469,126472,126477,126480,126483,126486,126489,126492,126495,126498,126501,126504,126507,126510,126513,126518,126523,126528,126533,126538,126543,126548,126551,126555,126558,126562,126567,126572,126577,126582,126586,126592,126600,126605,126608,126613,126628,126631,126636,126670,126685,126688,126743,126769,126781,126784,126793,126796,126811,126816,126819,126825,126830,126833,126838,126841,126846,126851,126858,126861,126876,126879,126914,126919,126927,126965,126968,126971,126976,126979,126984,126995,127029,127034,127037,127046,127051,127057,127060,127065,127074,127079,127082,127085,127090,127098,127101,127106,127111],[10,123844,123840],{"id":123845},"_7-其他操作",[14,123847,123849],{"id":123848},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[24,123851,123852],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[24,123854,123855,123856,123859],{},"进入工控机的硬盘目录，进入",[48,123857,123858],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[140,123861,123865],{"className":123862,"code":123863,"language":123864,"meta":145,"style":145},"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",[48,123866,123867,123875,123886,123893,123900,123912,123919,123931,123942,123953,123960,123967,123974,123986,123998,124005,124017,124029,124036,124048,124060,124072,124083,124090,124101],{"__ignoreMap":145},[149,123868,123869,123872],{"class":151,"line":152},[149,123870,123871],{"class":159},"network",[149,123873,123874],{"class":155},": \n",[149,123876,123877,123880,123882,123884],{"class":151,"line":193},[149,123878,123879],{"class":159},"  version",[149,123881,313],{"class":155},[149,123883,1045],{"class":309},[149,123885,4393],{"class":155},[149,123887,123888,123891],{"class":151,"line":235},[149,123889,123890],{"class":159},"  wifis",[149,123892,123874],{"class":155},[149,123894,123895,123898],{"class":151,"line":340},[149,123896,123897],{"class":159},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[149,123899,123874],{"class":155},[149,123901,123902,123905,123907,123910],{"class":151,"line":346},[149,123903,123904],{"class":159},"      renderer",[149,123906,313],{"class":155},[149,123908,123909],{"class":169},"NetworkManager",[149,123911,4393],{"class":155},[149,123913,123914,123917],{"class":151,"line":352},[149,123915,123916],{"class":159},"      match",[149,123918,123874],{"class":155},[149,123920,123921,123924,123926,123929],{"class":151,"line":1021},[149,123922,123923],{"class":159},"        name",[149,123925,313],{"class":155},[149,123927,123928],{"class":169},"\"wlan0\"",[149,123930,4393],{"class":155},[149,123932,123933,123936,123938,123940],{"class":151,"line":1035},[149,123934,123935],{"class":159},"      dhcp4",[149,123937,313],{"class":155},[149,123939,3087],{"class":309},[149,123941,4393],{"class":155},[149,123943,123944,123947,123949,123951],{"class":151,"line":1054},[149,123945,123946],{"class":159},"      dhcp6",[149,123948,313],{"class":155},[149,123950,3087],{"class":309},[149,123952,4393],{"class":155},[149,123954,123955,123958],{"class":151,"line":1072},[149,123956,123957],{"class":159},"      access-points",[149,123959,123874],{"class":155},[149,123961,123962,123965],{"class":151,"line":1090},[149,123963,123964],{"class":169},"        \"EMIS_Vinci_Robocon_5G\"",[149,123966,123874],{"class":155},[149,123968,123969,123972],{"class":151,"line":1633},[149,123970,123971],{"class":159},"          auth",[149,123973,123874],{"class":155},[149,123975,123976,123979,123981,123984],{"class":151,"line":1644},[149,123977,123978],{"class":159},"            key-management",[149,123980,313],{"class":155},[149,123982,123983],{"class":169},"\"psk\"",[149,123985,4393],{"class":155},[149,123987,123988,123991,123993,123996],{"class":151,"line":3348},[149,123989,123990],{"class":159},"            password",[149,123992,313],{"class":155},[149,123994,123995],{"class":169},"\"vinci666\"",[149,123997,4393],{"class":155},[149,123999,124000,124003],{"class":151,"line":3362},[149,124001,124002],{"class":159},"          networkmanager",[149,124004,123874],{"class":155},[149,124006,124007,124010,124012,124015],{"class":151,"line":3367},[149,124008,124009],{"class":159},"            uuid",[149,124011,313],{"class":155},[149,124013,124014],{"class":169},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[149,124016,4393],{"class":155},[149,124018,124019,124022,124024,124027],{"class":151,"line":3373},[149,124020,124021],{"class":159},"            name",[149,124023,313],{"class":155},[149,124025,124026],{"class":169},"\"EMIS_Vinci_Robocon_5G\"",[149,124028,4393],{"class":155},[149,124030,124031,124034],{"class":151,"line":3394},[149,124032,124033],{"class":159},"            passthrough",[149,124035,123874],{"class":155},[149,124037,124038,124041,124043,124046],{"class":151,"line":3399},[149,124039,124040],{"class":159},"              wifi-security.auth-alg",[149,124042,313],{"class":155},[149,124044,124045],{"class":169},"\"open\"",[149,124047,4393],{"class":155},[149,124049,124050,124053,124055,124058],{"class":151,"line":3413},[149,124051,124052],{"class":159},"              ipv6.addr-gen-mode",[149,124054,313],{"class":155},[149,124056,124057],{"class":169},"\"default\"",[149,124059,4393],{"class":155},[149,124061,124062,124065,124067,124070],{"class":151,"line":3418},[149,124063,124064],{"class":159},"              ipv6.ip6-privacy",[149,124066,313],{"class":155},[149,124068,124069],{"class":169},"\"-1\"",[149,124071,4393],{"class":155},[149,124073,124074,124077,124079,124081],{"class":151,"line":3447},[149,124075,124076],{"class":159},"              proxy._",[149,124078,313],{"class":155},[149,124080,1382],{"class":169},[149,124082,4393],{"class":155},[149,124084,124085,124088],{"class":151,"line":3452},[149,124086,124087],{"class":159},"      networkmanager",[149,124089,123874],{"class":155},[149,124091,124092,124095,124097,124099],{"class":151,"line":3469},[149,124093,124094],{"class":159},"        uuid",[149,124096,313],{"class":155},[149,124098,124014],{"class":169},[149,124100,4393],{"class":155},[149,124102,124103,124105,124107],{"class":151,"line":3474},[149,124104,123923],{"class":159},[149,124106,313],{"class":155},[149,124108,124109],{"class":169},"\"EMIS_Vinci_Robocon_5G\"\n",[24,124111,124112],{},"将其改为新wifi的名和密码：",[140,124114,124116],{"className":123862,"code":124115,"language":123864,"meta":145,"style":145},"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",[48,124117,124118,124124,124133,124139,124146,124155,124163,124169,124175],{"__ignoreMap":145},[149,124119,124120,124122],{"class":151,"line":152},[149,124121,123871],{"class":159},[149,124123,5457],{"class":155},[149,124125,124126,124128,124130],{"class":151,"line":193},[149,124127,123879],{"class":159},[149,124129,313],{"class":155},[149,124131,124132],{"class":309},"2\n",[149,124134,124135,124137],{"class":151,"line":235},[149,124136,123890],{"class":159},[149,124138,5457],{"class":155},[149,124140,124141,124144],{"class":151,"line":340},[149,124142,124143],{"class":159},"    wlan0",[149,124145,5457],{"class":155},[149,124147,124148,124150,124152],{"class":151,"line":346},[149,124149,123935],{"class":159},[149,124151,313],{"class":155},[149,124153,124154],{"class":309},"true\n",[149,124156,124157,124159,124161],{"class":151,"line":352},[149,124158,123946],{"class":159},[149,124160,313],{"class":155},[149,124162,124154],{"class":309},[149,124164,124165,124167],{"class":151,"line":1021},[149,124166,123957],{"class":159},[149,124168,5457],{"class":155},[149,124170,124171,124173],{"class":151,"line":1035},[149,124172,123964],{"class":169},[149,124174,5457],{"class":155},[149,124176,124177,124180,124182],{"class":151,"line":1054},[149,124178,124179],{"class":159},"          password",[149,124181,313],{"class":155},[149,124183,124184],{"class":169},"\"vinci666\"\n",[24,124186,124187],{},"工控机开机即可连上网。",[14,124189,124191],{"id":124190},"_72-ssh远程开发","7.2 SSH远程开发",[19,124193,124195],{"id":124194},"_721-环境准备","7.2.1 环境准备",[24,124197,124198],{},[31,124199,124200],{},"1.硬件准备",[24,124202,124203],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[24,124205,124206],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[24,124208,124209],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[24,124211,124212],{},[31,124213,124214],{},"2.设置固定IP",[24,124216,124217],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[24,124219,124220],{},"1.进入设置界面",[24,124222,124223],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[24,124225,124226],{},[83,124227],{"alt":145,"src":124228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[24,124230,124231],{},"2.配置所连接的网络",[24,124233,124234],{},[83,124235],{"alt":145,"src":124236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[24,124238,124239],{},"3.设置固定IP",[24,124241,124242],{},"查看当前IP地址。",[24,124244,124245],{},[83,124246],{"alt":145,"src":124247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[24,124249,124250],{},"设置固定IP。",[24,124252,124253],{},[83,124254],{"alt":145,"src":124255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[24,124257,124258],{},"至此，IP配置完毕。",[19,124260,124262],{"id":124261},"_722-环境搭建","7.2.2 环境搭建",[24,124264,124265],{},[31,124266,27462],{},[24,124268,124269],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[24,124271,124272],{},[31,124273,124274],{},"实现",[24,124276,124277],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[125,124279,124280,124283,124286,124289],{},[45,124281,124282],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[45,124284,124285],{},"远程主机启动SSH服务；",[45,124287,124288],{},"本地主机登陆远程主机；",[45,124290,124291],{},"实现数据传输。",[24,124293,124294],{},"1.安装SSH客户端与服务端",[24,124296,124297],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[140,124299,124301],{"className":122495,"code":124300,"language":122497,"meta":122498,"style":145}," sudo apt install openssh-server\n",[48,124302,124303],{"__ignoreMap":145},[149,124304,124305],{"class":151,"line":152},[149,124306,124300],{},[24,124308,124309],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[140,124311,124313],{"className":122495,"code":124312,"language":122497,"meta":122498,"style":145},"sudo apt install openssh-client\n",[48,124314,124315],{"__ignoreMap":145},[149,124316,124317],{"class":151,"line":152},[149,124318,124312],{},[24,124320,124321],{},"2.远程主机启动SSH服务",[24,124323,124324],{},"远程主机启动 ssh 服务命令如下：",[140,124326,124328],{"className":122495,"code":124327,"language":122497,"meta":122498,"style":145},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[48,124329,124330],{"__ignoreMap":145},[149,124331,124332],{"class":151,"line":152},[149,124333,124327],{},[24,124335,124336],{},"启动后可使用如下命令查看服务是否正常运行：",[140,124338,124340],{"className":122495,"code":124339,"language":122497,"meta":122498,"style":145},"ps -e | grep ssh\n",[48,124341,124342],{"__ignoreMap":145},[149,124343,124344],{"class":151,"line":152},[149,124345,124339],{},[24,124347,124348],{},"如果启动成功，会包含 sshd 程序。",[24,124350,124351],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[140,124353,124355],{"className":122495,"code":124354,"language":122497,"meta":122498,"style":145},"sudo systemctl enable ssh\n",[48,124356,124357],{"__ignoreMap":145},[149,124358,124359],{"class":151,"line":152},[149,124360,124354],{},[24,124362,124363],{},"3.本地远程登录",[24,124365,124366],{},"登录远程主机可以调用如下命令:",[140,124368,124370],{"className":118975,"code":124369,"language":118977,"meta":145,"style":145},"ssh -X 用户名@ip地址\n",[48,124371,124372],{"__ignoreMap":145},[149,124373,124374,124376,124379],{"class":151,"line":152},[149,124375,123326],{"class":162},[149,124377,124378],{"class":309}," -X",[149,124380,124381],{"class":169}," 用户名@ip地址\n",[24,124383,124384],{},"然后根据提示，录入登陆密码，即可成功登录。",[24,124386,124387],{},"如果退出，可以调用exit命令：",[140,124389,124391],{"className":122495,"code":124390,"language":122497,"meta":122498,"style":145},"exit\n",[48,124392,124393],{"__ignoreMap":145},[149,124394,124395],{"class":151,"line":152},[149,124396,124390],{},[24,124398,124399],{},[31,124400,124401],{},"4.实现数据传输",[24,124403,124404],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[24,124406,124407],{},"上传文件指令格式如下：",[140,124409,124411],{"className":122495,"code":124410,"language":122497,"meta":122498,"style":145},"scp 本地文件路径 账号@ip:路径\n",[48,124412,124413],{"__ignoreMap":145},[149,124414,124415],{"class":151,"line":152},[149,124416,124410],{},[24,124418,124419],{},"上传文件夹指令格式如下：",[140,124421,124423],{"className":122495,"code":124422,"language":122497,"meta":122498,"style":145},"scp -r 本地文件夹路径 账号@ip:路径\n",[48,124424,124425],{"__ignoreMap":145},[149,124426,124427],{"class":151,"line":152},[149,124428,124422],{},[24,124430,124431],{},"下载文件指令格式如下：",[140,124433,124435],{"className":122495,"code":124434,"language":122497,"meta":122498,"style":145},"scp 账号@ip:路径 本地文件夹路径\n",[48,124436,124437],{"__ignoreMap":145},[149,124438,124439],{"class":151,"line":152},[149,124440,124434],{},[24,124442,124443],{},"下载文件夹指令格式如下：",[140,124445,124447],{"className":122495,"code":124446,"language":122497,"meta":122498,"style":145},"scp -r 账号@ip:路径 本地文件夹路径\n",[48,124448,124449],{"__ignoreMap":145},[149,124450,124451],{"class":151,"line":152},[149,124452,124446],{},[24,124454,124455],{},[31,124456,124457],{},"优化",[24,124459,124460],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[125,124462,124463,124466],{},[45,124464,124465],{},"本地生成密钥对；",[45,124467,124468],{},"将公钥上传至远程主机。",[24,124470,124471],{},[31,124472,124473],{},"1.生成密钥对",[24,124475,124476],{},"本地客户端生成公私钥：（一路回车默认即可）",[140,124478,124480],{"className":122495,"code":124479,"language":122497,"meta":122498,"style":145},"ssh-keygen\n",[48,124481,124482],{"__ignoreMap":145},[149,124483,124484],{"class":151,"line":152},[149,124485,124479],{},[24,124487,124488],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[125,124490,124491,124494],{},[45,124492,124493],{},"id_rsa （私钥）；",[45,124495,124496],{},"id_rsa.pub (公钥)。",[24,124498,124499],{},[31,124500,124501],{},"2.公钥上传",[24,124503,124504],{},"上传指令如下：",[140,124506,124508],{"className":122495,"code":124507,"language":122497,"meta":122498,"style":145},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[48,124509,124510],{"__ignoreMap":145},[149,124511,124512],{"class":151,"line":152},[149,124513,124507],{},[24,124515,124516],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[24,124518,124519],{},"以后再远程登录就无需录入密码了。",[19,124521,124523],{"id":124522},"_723-使用vscode优化","7.2.3 使用VScode优化",[24,124525,124526],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[24,124528,124529],{},[31,124530,124531],{},"1.准备工作",[24,124533,124534],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[24,124536,124537],{},[31,124538,124539],{},"2.为VScode安装远程开发插件",[24,124541,124542,124543,124546,124547,124550,124551,30091],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[48,124544,124545],{},"扩展：商店","的搜索栏输入",[48,124548,124549],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[48,124552,124553],{},"安装",[24,124555,124556],{},[83,124557],{"alt":145,"src":124558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[24,124560,124561],{},[31,124562,124563],{},"3.配置远程连接",[24,124565,124566,124567,124570,124571,124574],{},"步骤1：使用快捷键",[48,124568,124569],{},"ctrl + shift + p","打开命令输入窗口，并输入",[48,124572,124573],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[24,124576,124577],{},[83,124578],{"alt":145,"src":124579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[24,124581,124582,124583,30091],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[48,124584,124585],{},"Add New SSH Host",[24,124587,124588],{},[83,124589],{"alt":145,"src":124590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[24,124592,124593,124594,124597,124598,124601,124602,124605],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[48,124595,124596],{},"ssh +X ubuntu@192.168.43.164","，其中，",[48,124599,124600],{},"ubuntu","需要替换为你的登录用户名，",[48,124603,124604],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[24,124607,124608],{},[83,124609],{"alt":145,"src":124610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[24,124612,124613],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[24,124615,124616],{},[83,124617],{"alt":145,"src":124618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[24,124620,124621],{},[83,124622],{"alt":145,"src":124623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[24,124625,124626],{},[31,124627,124628],{},"4.使用",[24,124630,124631,124632,124570,124634,124636],{},"步骤1：继续使用快捷键",[48,124633,124569],{},[48,124635,124573],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[24,124638,124639],{},[83,124640],{"alt":145,"src":124641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[24,124643,124644,124645,124648],{},"或者，也可以点击侧边栏的",[48,124646,124647],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[24,124650,124651],{},[83,124652],{"alt":145,"src":124653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[24,124655,124656,124657,124660,124661,124664],{},"步骤2：选择菜单栏的",[48,124658,124659],{},"文件","下的",[48,124662,124663],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[24,124666,124667],{},[83,124668],{"alt":145,"src":124669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[24,124671,124672],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124674,124676],{"id":124675},"_73-远程桌面","7.3 远程桌面",[24,124678,124679],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[24,124681,124682],{},"我们选择使用VNC来看。",[125,124684,124685],{},[45,124686,124687],{},"安装VNC服务器：",[24,124689,124690],{},"这里以TigerVNC为例进行安装：",[140,124692,124694],{"className":118975,"code":124693,"language":118977,"meta":145,"style":145},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[48,124695,124696],{"__ignoreMap":145},[149,124697,124698,124700,124702,124704,124707],{"class":151,"line":152},[149,124699,26285],{"class":162},[149,124701,118996],{"class":169},[149,124703,25542],{"class":169},[149,124705,124706],{"class":169}," tigervnc-standalone-server",[149,124708,124709],{"class":169}," tigervnc-common\n",[125,124711,124712],{"start":193},[45,124713,124714],{},"设置VNC密码：",[24,124716,124717],{},"为VNC用户设置密码，运行以下命令：",[140,124719,124721],{"className":118975,"code":124720,"language":118977,"meta":145,"style":145},"vncpasswd\n",[48,124722,124723],{"__ignoreMap":145},[149,124724,124725],{"class":151,"line":152},[149,124726,124720],{"class":162},[125,124728,124729],{"start":235},[45,124730,124731],{},"配置VNC启动脚本:",[24,124733,124734],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[140,124736,124738],{"className":118975,"code":124737,"language":118977,"meta":145,"style":145},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[48,124739,124740,124749],{"__ignoreMap":145},[149,124741,124742,124744,124746],{"class":151,"line":152},[149,124743,102946],{"class":162},[149,124745,30922],{"class":309},[149,124747,124748],{"class":169}," ~\u002F.vnc\n",[149,124750,124751,124754],{"class":151,"line":193},[149,124752,124753],{"class":162},"nano",[149,124755,124756],{"class":169}," ~\u002F.vnc\u002Fxstartup\n",[24,124758,124759],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[140,124761,124763],{"className":118975,"code":124762,"language":118977,"meta":145,"style":145},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[48,124764,124765,124770,124778,124785],{"__ignoreMap":145},[149,124766,124767],{"class":151,"line":152},[149,124768,124769],{"class":295},"#!\u002Fbin\u002Fsh\n",[149,124771,124772,124775],{"class":151,"line":193},[149,124773,124774],{"class":309},"unset",[149,124776,124777],{"class":169}," SESSION_MANAGER\n",[149,124779,124780,124782],{"class":151,"line":235},[149,124781,124774],{"class":309},[149,124783,124784],{"class":169}," DBUS_SESSION_BUS_ADDRESS\n",[149,124786,124787],{"class":151,"line":340},[149,124788,124789],{"class":162},"gnome-session\n",[24,124791,124792],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[125,124794,124795],{"start":340},[45,124796,124797],{},"给予执行权限：",[24,124799,124800],{},"为xstartup文件设置执行权限：",[140,124802,124804],{"className":118975,"code":124803,"language":118977,"meta":145,"style":145},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[48,124805,124806],{"__ignoreMap":145},[149,124807,124808,124810,124813],{"class":151,"line":152},[149,124809,26320],{"class":162},[149,124811,124812],{"class":169}," +x",[149,124814,124756],{"class":169},[125,124816,124817],{"start":346},[45,124818,124819],{},"启动VNC服务器：",[140,124821,124823],{"className":118975,"code":124822,"language":118977,"meta":145,"style":145},"vncserver -geometry 1920x1080 -localhost=0\n",[48,124824,124825],{"__ignoreMap":145},[149,124826,124827,124830,124833,124836],{"class":151,"line":152},[149,124828,124829],{"class":162},"vncserver",[149,124831,124832],{"class":309}," -geometry",[149,124834,124835],{"class":169}," 1920x1080",[149,124837,124838],{"class":309}," -localhost=0\n",[24,124840,124841],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[24,124843,124844],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[125,124846,124847],{"start":352},[45,124848,124849],{},"查看已开启的VNC服务器：",[140,124851,124853],{"className":118975,"code":124852,"language":118977,"meta":145,"style":145},"vncserver -list\n",[48,124854,124855],{"__ignoreMap":145},[149,124856,124857,124859],{"class":151,"line":152},[149,124858,124829],{"class":162},[149,124860,124861],{"class":309}," -list\n",[24,124863,124864],{},[83,124865],{"alt":145,"src":124866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[125,124868,124869],{"start":1021},[45,124870,124871],{},"连接到VNC服务器：",[24,124873,124874],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[125,124876,124877],{"start":1035},[45,124878,124879],{},"停止VNC服务器：",[24,124881,124882],{},"如果需要停止VNC服务器，可以使用以下命令：",[140,124884,124886],{"className":118975,"code":124885,"language":118977,"meta":145,"style":145},"vncserver -kill :1\n",[48,124887,124888],{"__ignoreMap":145},[149,124889,124890,124892,124895],{"class":151,"line":152},[149,124891,124829],{"class":162},[149,124893,124894],{"class":309}," -kill",[149,124896,124897],{"class":169}," :1\n",[24,124899,124900],{},"将:1替换为你实际使用的显示编号。",[24,124902,124903],{},[83,124904],{"alt":145,"src":124905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[24,124907,124908],{},[83,124909],{"alt":145,"src":124910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124912,124914],{"id":124913},"_74-usb端口设置","7.4 USB端口设置",[24,124916,124917],{},[31,124918,124919],{},"首先先配置好权限",[140,124921,124923],{"className":118975,"code":124922,"language":118977,"meta":145,"style":145},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[48,124924,124925,124930,124943,124950,124955],{"__ignoreMap":145},[149,124926,124927],{"class":151,"line":152},[149,124928,124929],{"class":295},"# 将用户权限提高\n",[149,124931,124932,124934,124936,124938,124941],{"class":151,"line":193},[149,124933,26285],{"class":162},[149,124935,28283],{"class":169},[149,124937,28286],{"class":309},[149,124939,124940],{"class":169}," dialout",[149,124942,28291],{"class":155},[149,124944,124945,124947],{"class":151,"line":235},[149,124946,28310],{"class":162},[149,124948,124949],{"class":169}," dialout\n",[149,124951,124952],{"class":151,"line":340},[149,124953,124954],{"class":295},"# 查看下面命令是否输出dialout（若输出才正常）\n",[149,124956,124957],{"class":151,"line":346},[149,124958,124959],{"class":162},"groups\n",[24,124961,124962],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[19,124964,124966],{"id":124965},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[24,124968,124969,124972],{},[31,124970,124971],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[24,124974,124975,124978],{},[31,124976,124977],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[24,124980,124981],{},[31,124982,124983],{},"流程如下：",[24,124985,124986],{},"（1）.查找设备idVendor和idProduct",[24,124988,124989,124990,124993],{},"接入两个USB设备，在终端调用指令",[48,124991,124992],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[24,124995,124996],{},[83,124997],{"alt":145,"src":124998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[24,125000,125001,125002,125005],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[48,125003,125004],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[24,125007,125008],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[24,125010,125011],{},"（2）.编写映射规则",[24,125013,125014,125015,125018],{},"在",[48,125016,125017],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[140,125020,125022],{"className":118975,"code":125021,"language":118977,"meta":145,"style":145},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[48,125023,125024],{"__ignoreMap":145},[149,125025,125026,125028,125030],{"class":151,"line":152},[149,125027,26285],{"class":162},[149,125029,120262],{"class":169},[149,125031,125032],{"class":169}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[24,125034,125035],{},"输入如下内容：",[140,125037,125039],{"className":118975,"code":125038,"language":118977,"meta":145,"style":145},"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",[48,125040,125041,125071],{"__ignoreMap":145},[149,125042,125043,125046,125048,125051,125054,125057,125060,125062,125065,125068],{"class":151,"line":152},[149,125044,125045],{"class":155},"KERNEL",[149,125047,166],{"class":325},[149,125049,125050],{"class":169},"=\"ttyUSB*\",",[149,125052,125053],{"class":162}," ATTRS",[149,125055,125056],{"class":169},"{idVendor}==",[149,125058,125059],{"class":162},"\"10c4\"",[149,125061,2241],{"class":162},[149,125063,125064],{"class":169}," ATTRS{idProduct}==\"ea60\",",[149,125066,125067],{"class":169}," MODE:=\"0777\",",[149,125069,125070],{"class":169}," SYMLINK+=\"mylidar\"\n",[149,125072,125073,125075,125077,125079,125081,125083,125086,125088,125091,125093],{"class":151,"line":193},[149,125074,125045],{"class":155},[149,125076,166],{"class":325},[149,125078,125050],{"class":169},[149,125080,125053],{"class":162},[149,125082,125056],{"class":169},[149,125084,125085],{"class":162},"\"1a86\"",[149,125087,2241],{"class":162},[149,125089,125090],{"class":169}," ATTRS{idProduct}==\"7523\",",[149,125092,125067],{"class":169},[149,125094,125095],{"class":169}," SYMLINK+=\"mycar\"\n",[24,125097,125098],{},"代码解释：",[42,125100,125101,125104,125107,125110],{},[45,125102,125103],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[45,125105,125106],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[45,125108,125109],{},"SYMLINK是符号连接，即绑定的别名；",[45,125111,125112],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[24,125114,125115,125116,125119,125122],{},"***小提示：***",[25262,125117,125118],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[48,125120,125121],{},"\u002Fetc\u002Fudev\u002Frule.d",[25262,125123,125124],{},"目录即可。",[24,125126,125127],{},"表格 还在加载中，请等待加载完成后再尝试复制",[24,125129,125130],{},"（3）.使规则生效",[24,125132,125133],{},"在终端下输入如下指令：",[140,125135,125137],{"className":118975,"code":125136,"language":118977,"meta":145,"style":145},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[48,125138,125139,125144,125156,125167,125171,125176,125189],{"__ignoreMap":145},[149,125140,125141],{"class":151,"line":152},[149,125142,125143],{"class":295},"# Ubuntu用下方命令\n",[149,125145,125146,125148,125150,125153],{"class":151,"line":193},[149,125147,26285],{"class":162},[149,125149,121727],{"class":169},[149,125151,125152],{"class":169}," udev",[149,125154,125155],{"class":169}," reload\n",[149,125157,125158,125160,125162,125164],{"class":151,"line":235},[149,125159,26285],{"class":162},[149,125161,121727],{"class":169},[149,125163,125152],{"class":169},[149,125165,125166],{"class":169}," restart\n",[149,125168,125169],{"class":151,"line":340},[149,125170,4119],{"emptyLinePlaceholder":1800},[149,125172,125173],{"class":151,"line":346},[149,125174,125175],{"class":295},"#Fedora用下方命令\n",[149,125177,125178,125180,125183,125186],{"class":151,"line":352},[149,125179,26285],{"class":162},[149,125181,125182],{"class":169}," udevadm",[149,125184,125185],{"class":169}," control",[149,125187,125188],{"class":309}," --reload\n",[149,125190,125191,125193,125195],{"class":151,"line":1021},[149,125192,26285],{"class":162},[149,125194,125182],{"class":169},[149,125196,125197],{"class":169}," trigger\n",[24,125199,125200],{},"再重新插拔设备即可。",[24,125202,125203],{},"（4）.测试",[24,125205,125206],{},"终端下输入如下指令",[140,125208,125210],{"className":118975,"code":125209,"language":118977,"meta":145,"style":145},"ll \u002Fdev | grep ttyUSB\n",[48,125211,125212],{"__ignoreMap":145},[149,125213,125214,125217,125220,125222,125224],{"class":151,"line":152},[149,125215,125216],{"class":162},"ll",[149,125218,125219],{"class":169}," \u002Fdev",[149,125221,26818],{"class":325},[149,125223,31942],{"class":162},[149,125225,125226],{"class":169}," ttyUSB\n",[24,125228,125229],{},"运行结果如下：",[24,125231,125232],{},[83,125233],{"alt":145,"src":125234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[24,125236,125237,125238,125241],{},"也可以多次插拔USB设备，会发现设备端口",[48,125239,125240],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[24,125243,125244],{},[31,125245,119643],{},[24,125247,125248],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[19,125250,125252],{"id":125251},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[24,125254,125255,125257],{},[31,125256,124971],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[24,125259,125260,125262],{},[31,125261,124977],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[24,125264,125265],{},[31,125266,124983],{},[24,125268,125269],{},"（1）.查看所连接的主机USB接口的KERNELS",[24,125271,125272],{},"调用如下指令查看第一台雷达的USB信息：",[140,125274,125276],{"className":118975,"code":125275,"language":118977,"meta":145,"style":145},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[48,125277,125278,125298],{"__ignoreMap":145},[149,125279,125280,125283,125285,125288,125291,125293,125295],{"class":151,"line":152},[149,125281,125282],{"class":162},"udevadm",[149,125284,71505],{"class":169},[149,125286,125287],{"class":309}," --attribute-walk",[149,125289,125290],{"class":309}," --name=\u002Fdev\u002FttyUSB0",[149,125292,26818],{"class":325},[149,125294,31942],{"class":162},[149,125296,125297],{"class":169}," KERNELS\n",[149,125299,125300,125302,125304,125306,125309,125311,125313],{"class":151,"line":193},[149,125301,125282],{"class":162},[149,125303,71505],{"class":169},[149,125305,125287],{"class":309},[149,125307,125308],{"class":309}," --name=\u002Fdev\u002FttyACM0",[149,125310,26818],{"class":325},[149,125312,31942],{"class":162},[149,125314,125297],{"class":169},[24,125316,125317],{},[83,125318],{"alt":145,"src":125319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[24,125321,125322],{},"调用如下指令查看第二台雷达的USB信息：",[140,125324,125326],{"className":118975,"code":125325,"language":118977,"meta":145,"style":145},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[48,125327,125328],{"__ignoreMap":145},[149,125329,125330,125332,125334,125336,125339,125341,125343],{"class":151,"line":152},[149,125331,125282],{"class":162},[149,125333,71505],{"class":169},[149,125335,125287],{"class":309},[149,125337,125338],{"class":309}," --name=\u002Fdev\u002FttyUSB1",[149,125340,26818],{"class":325},[149,125342,31942],{"class":162},[149,125344,125297],{"class":169},[24,125346,125347,125348,125351,125352,125355,125356,125359],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[48,125349,125350],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[48,125353,125354],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[31,125357,125358],{},"唯一性标识","”。",[24,125361,125011],{},[24,125363,125014,125364,125366],{},[48,125365,125017],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[140,125368,125369],{"className":118975,"code":125021,"language":118977,"meta":145,"style":145},[48,125370,125371],{"__ignoreMap":145},[149,125372,125373,125375,125377],{"class":151,"line":152},[149,125374,26285],{"class":162},[149,125376,120262],{"class":169},[149,125378,125032],{"class":169},[140,125380,125382],{"className":118975,"code":125381,"language":118977,"meta":145,"style":145},"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",[48,125383,125384,125413],{"__ignoreMap":145},[149,125385,125386,125388,125390,125392,125395,125397,125400,125403,125405,125408,125410],{"class":151,"line":152},[149,125387,125045],{"class":155},[149,125389,166],{"class":325},[149,125391,125050],{"class":169},[149,125393,125394],{"class":155}," KERNELS",[149,125396,166],{"class":325},[149,125398,125399],{"class":169},"=\"1-1.3:1.0\",",[149,125401,125402],{"class":162}," MODE:",[149,125404,166],{"class":169},[149,125406,125407],{"class":162},"\"0777\"",[149,125409,2241],{"class":162},[149,125411,125412],{"class":169}," SYMLINK+=\"rplidar_front\"\n",[149,125414,125415,125417,125419,125421,125423,125425,125428,125430,125432,125434,125436],{"class":151,"line":193},[149,125416,125045],{"class":155},[149,125418,166],{"class":325},[149,125420,125050],{"class":169},[149,125422,125394],{"class":155},[149,125424,166],{"class":325},[149,125426,125427],{"class":169},"=\"1-1.4:1.0\",",[149,125429,125402],{"class":162},[149,125431,166],{"class":169},[149,125433,125407],{"class":162},[149,125435,2241],{"class":162},[149,125437,125438],{"class":169}," SYMLINK+=\"rplidar_back\"\n",[24,125440,125130],{},[24,125442,125133],{},[140,125444,125445],{"className":118975,"code":125136,"language":118977,"meta":145,"style":145},[48,125446,125447,125451,125461,125471,125475,125479,125489],{"__ignoreMap":145},[149,125448,125449],{"class":151,"line":152},[149,125450,125143],{"class":295},[149,125452,125453,125455,125457,125459],{"class":151,"line":193},[149,125454,26285],{"class":162},[149,125456,121727],{"class":169},[149,125458,125152],{"class":169},[149,125460,125155],{"class":169},[149,125462,125463,125465,125467,125469],{"class":151,"line":235},[149,125464,26285],{"class":162},[149,125466,121727],{"class":169},[149,125468,125152],{"class":169},[149,125470,125166],{"class":169},[149,125472,125473],{"class":151,"line":340},[149,125474,4119],{"emptyLinePlaceholder":1800},[149,125476,125477],{"class":151,"line":346},[149,125478,125175],{"class":295},[149,125480,125481,125483,125485,125487],{"class":151,"line":352},[149,125482,26285],{"class":162},[149,125484,125182],{"class":169},[149,125486,125185],{"class":169},[149,125488,125188],{"class":309},[149,125490,125491,125493,125495],{"class":151,"line":1021},[149,125492,26285],{"class":162},[149,125494,125182],{"class":169},[149,125496,125197],{"class":169},[24,125498,125200],{},[24,125500,125203],{},[24,125502,125206,125503,125506],{},[48,125504,125505],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[24,125508,125509],{},[83,125510],{"alt":145,"src":125511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[24,125513,125514],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[24,125516,125517,125519],{},[31,125518,119643],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[19,125521,125523],{"id":125522},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[24,125525,125526],{},"（1）.查看所连接的主机USB接口的信息",[140,125528,125530],{"className":118975,"code":125529,"language":118977,"meta":145,"style":145},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[48,125531,125532,125562],{"__ignoreMap":145},[149,125533,125534,125536,125538,125541,125543,125545,125547,125549,125552,125555,125557,125560],{"class":151,"line":152},[149,125535,125282],{"class":162},[149,125537,71505],{"class":169},[149,125539,125540],{"class":309}," -a",[149,125542,30922],{"class":309},[149,125544,30128],{"class":155},[149,125546,125282],{"class":162},[149,125548,71505],{"class":169},[149,125550,125551],{"class":309}," -q",[149,125553,125554],{"class":169}," path",[149,125556,26824],{"class":309},[149,125558,125559],{"class":169}," \u002Fdev\u002FttyACM0",[149,125561,1878],{"class":155},[149,125563,125564,125566,125568,125570,125572,125574,125576,125578,125580,125582,125584,125587],{"class":151,"line":193},[149,125565,125282],{"class":162},[149,125567,71505],{"class":169},[149,125569,125540],{"class":309},[149,125571,30922],{"class":309},[149,125573,30128],{"class":155},[149,125575,125282],{"class":162},[149,125577,71505],{"class":169},[149,125579,125551],{"class":309},[149,125581,125554],{"class":169},[149,125583,26824],{"class":309},[149,125585,125586],{"class":169}," \u002Fdev\u002FttyUSB0",[149,125588,1878],{"class":155},[24,125590,125591],{},[83,125592],{"alt":145,"src":125593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[24,125595,125596],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[24,125598,125011],{},[24,125600,125014,125601,125366],{},[48,125602,125017],{},[140,125604,125605],{"className":118975,"code":125021,"language":118977,"meta":145,"style":145},[48,125606,125607],{"__ignoreMap":145},[149,125608,125609,125611,125613],{"class":151,"line":152},[149,125610,26285],{"class":162},[149,125612,120262],{"class":169},[149,125614,125032],{"class":169},[140,125616,125618],{"className":118975,"code":125617,"language":118977,"meta":145,"style":145},"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",[48,125619,125620,125648,125674],{"__ignoreMap":145},[149,125621,125622,125624,125626,125629,125631,125633,125635,125637,125640,125643,125645],{"class":151,"line":152},[149,125623,125045],{"class":155},[149,125625,166],{"class":325},[149,125627,125628],{"class":169},"=\"ttyACM*\",",[149,125630,125053],{"class":162},[149,125632,125056],{"class":169},[149,125634,125085],{"class":162},[149,125636,2241],{"class":162},[149,125638,125639],{"class":169}," ATTRS{idProduct}==\"55d4\",",[149,125641,125642],{"class":169}," ATTRS{serial}==\"0001\",",[149,125644,125067],{"class":169},[149,125646,125647],{"class":169}," SYMLINK+=\"ttyACM_MCU\"\n",[149,125649,125650,125652,125654,125656,125658,125660,125662,125664,125666,125669,125671],{"class":151,"line":193},[149,125651,125045],{"class":155},[149,125653,166],{"class":325},[149,125655,125628],{"class":169},[149,125657,125053],{"class":162},[149,125659,125056],{"class":169},[149,125661,125085],{"class":162},[149,125663,2241],{"class":162},[149,125665,125639],{"class":169},[149,125667,125668],{"class":169}," ATTRS{serial}==\"0002\",",[149,125670,125067],{"class":169},[149,125672,125673],{"class":169}," SYMLINK+=\"ttyACM_Lidar\"\n",[149,125675,125676,125678,125680,125682,125684,125686,125688,125690,125692,125694],{"class":151,"line":235},[149,125677,125045],{"class":155},[149,125679,166],{"class":325},[149,125681,125050],{"class":169},[149,125683,125053],{"class":162},[149,125685,125056],{"class":169},[149,125687,125085],{"class":162},[149,125689,2241],{"class":162},[149,125691,125090],{"class":169},[149,125693,125067],{"class":169},[149,125695,125696],{"class":169}," SYMLINK+=\"ttyUSB_IMU\"\n",[24,125698,125130],{},[24,125700,125133],{},[140,125702,125703],{"className":118975,"code":125136,"language":118977,"meta":145,"style":145},[48,125704,125705,125709,125719,125729,125733,125737,125747],{"__ignoreMap":145},[149,125706,125707],{"class":151,"line":152},[149,125708,125143],{"class":295},[149,125710,125711,125713,125715,125717],{"class":151,"line":193},[149,125712,26285],{"class":162},[149,125714,121727],{"class":169},[149,125716,125152],{"class":169},[149,125718,125155],{"class":169},[149,125720,125721,125723,125725,125727],{"class":151,"line":235},[149,125722,26285],{"class":162},[149,125724,121727],{"class":169},[149,125726,125152],{"class":169},[149,125728,125166],{"class":169},[149,125730,125731],{"class":151,"line":340},[149,125732,4119],{"emptyLinePlaceholder":1800},[149,125734,125735],{"class":151,"line":346},[149,125736,125175],{"class":295},[149,125738,125739,125741,125743,125745],{"class":151,"line":352},[149,125740,26285],{"class":162},[149,125742,125182],{"class":169},[149,125744,125185],{"class":169},[149,125746,125188],{"class":309},[149,125748,125749,125751,125753],{"class":151,"line":1021},[149,125750,26285],{"class":162},[149,125752,125182],{"class":169},[149,125754,125197],{"class":169},[24,125756,125757,125758],{},"再重新插拔设备即可，或者 ",[31,125759,125760],{},"直接重启系统。",[24,125762,125203],{},[24,125764,125206,125765,125506],{},[48,125766,125505],{},[24,125768,125769],{},[83,125770],{"alt":145,"src":125771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[24,125773,125514],{},[24,125775,125776,125778],{},[31,125777,119643],{}," 一些设备可能没有串口号等。",[19,125780,125782],{"id":125781},"_744-其他注意事项","7.4.4 其他注意事项",[24,125784,125785,125786,125788,125789,125792,125793,20120,125796,125799,125800,125802],{},"并非所有的USB设备端口号都是",[48,125787,125240],{},"的格式，比如Arduino的端口号可能是",[48,125790,125791],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[48,125794,125795],{},"videon",[48,125797,125798],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[48,125801,125795],{},"端口，绑定时需要关联的也是该接口。",[24,125804,125805,125806,125809,125810,125813,125814,125816,125817,125820,125821,125824,125825,125828,125829,125828,125832,125828,125835,30091],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[48,125807,125808],{},"KERNEL==\"ttyUSB*\"","修改为",[48,125811,125812],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[48,125815,125808],{},"修改为类似于",[48,125818,125819],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[48,125822,125823],{},"video[0,2,4,6]","表示可以绑定的端口为",[48,125826,125827],{},"video0","或",[48,125830,125831],{},"video2",[48,125833,125834],{},"video4",[48,125836,125837],{},"video6",[14,125839,125841],{"id":125840},"_75-挂载内网网页","7.5 挂载内网网页",[24,125843,125844],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[24,125846,125847],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[24,125849,125850],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[24,125852,125853,125854],{},"Termux 下载地址（F-Droid）：",[2102,125855,125856],{"href":125856,"rel":125857},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25573],[24,125859,125860],{},"首先打开app后，先更新软件缓存：",[140,125862,125864],{"className":118975,"code":125863,"language":118977,"meta":145,"style":145},"pkg update\n",[48,125865,125866],{"__ignoreMap":145},[149,125867,125868,125871],{"class":151,"line":152},[149,125869,125870],{"class":162},"pkg",[149,125872,27951],{"class":169},[24,125874,125875],{},"然后换源",[140,125877,125879],{"className":118975,"code":125878,"language":118977,"meta":145,"style":145},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[48,125880,125881],{"__ignoreMap":145},[149,125882,125883,125885,125888],{"class":151,"line":152},[149,125884,124753],{"class":162},[149,125886,125887],{"class":155}," $PREFIX",[149,125889,125890],{"class":169},"\u002Fetc\u002Fapt\u002Fsources.list\n",[24,125892,125893],{},"将该文件内容替换为下面：",[140,125895,125897],{"className":118975,"code":125896,"language":118977,"meta":145,"style":145},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[48,125898,125899],{"__ignoreMap":145},[149,125900,125901,125904,125907,125910],{"class":151,"line":152},[149,125902,125903],{"class":162},"deb",[149,125905,125906],{"class":169}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[149,125908,125909],{"class":169}," stable",[149,125911,125912],{"class":169}," main\n",[42,125914,125915,125942],{},[45,125916,125917,125918,125920,125921],{},"如果你使用的是",[48,125919,124753],{},"编辑器：",[42,125922,125923,125930,125936],{},[45,125924,125925,125926,125929],{},"按 ",[48,125927,125928],{},"Ctrl+O"," 保存文件。",[45,125931,125925,125932,125935],{},[48,125933,125934],{},"Enter"," 确认文件名。",[45,125937,125925,125938,125941],{},[48,125939,125940],{},"Ctrl+X"," 退出编辑器。",[45,125943,125917,125944,125920,125947],{},[48,125945,125946],{},"vim",[42,125948,125949,125955],{},[45,125950,125925,125951,125954],{},[48,125952,125953],{},"Esc"," 退出编辑模式。",[45,125956,125957,125958,125960],{},"输入 ",[48,125959,120900],{}," 保存并退出。",[24,125962,125963],{},"接下来重新更新软件源：",[140,125965,125967],{"className":118975,"code":125966,"language":118977,"meta":145,"style":145},"pkg update && pkg upgrade\n",[48,125968,125969],{"__ignoreMap":145},[149,125970,125971,125973,125975,125977,125979],{"class":151,"line":152},[149,125972,125870],{"class":162},[149,125974,119026],{"class":169},[149,125976,27899],{"class":155},[149,125978,125870],{"class":162},[149,125980,119012],{"class":169},[24,125982,125983],{},"安装python：",[140,125985,125987],{"className":118975,"code":125986,"language":118977,"meta":145,"style":145},"pkg install python\n",[48,125988,125989],{"__ignoreMap":145},[149,125990,125991,125993,125995],{"class":151,"line":152},[149,125992,125870],{"class":162},[149,125994,25542],{"class":169},[149,125996,125997],{"class":169}," python\n",[24,125999,126000,28182],{},[31,126001,126002],{},"通过Termux访问设备存储",[24,126004,126005],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[140,126007,126009],{"className":118975,"code":126008,"language":118977,"meta":145,"style":145},"termux-setup-storage\n",[48,126010,126011],{"__ignoreMap":145},[149,126012,126013],{"class":151,"line":152},[149,126014,126008],{"class":162},[125,126016,126017],{},[45,126018,126019,28182,126022],{},[31,126020,126021],{},"进入HTML文件所在的目录",[125,126023,126024],{},[45,126025,126026,126027,126029],{},"使用",[48,126028,102956],{},"命令进入HTML文件所在的目录：",[140,126031,126033],{"className":118975,"code":126032,"language":118977,"meta":145,"style":145},"cd ~\u002Fyour_html_folder\n",[48,126034,126035],{"__ignoreMap":145},[149,126036,126037,126039],{"class":151,"line":152},[149,126038,102956],{"class":309},[149,126040,126041],{"class":169}," ~\u002Fyour_html_folder\n",[125,126043,126044],{"start":193},[45,126045,126046,28182,126049,126054,126071],{},[31,126047,126048],{},"启动Python HTTP服务器",[125,126050,126051],{},[45,126052,126053],{},"运行以下命令启动一个简单的HTTP服务器：",[140,126055,126057],{"className":118975,"code":126056,"language":118977,"meta":145,"style":145},"python -m http.server 8000\n",[48,126058,126059],{"__ignoreMap":145},[149,126060,126061,126063,126065,126068],{"class":151,"line":152},[149,126062,32086],{"class":162},[149,126064,102562],{"class":309},[149,126066,126067],{"class":169}," http.server",[149,126069,126070],{"class":309}," 8000\n",[125,126072,126073],{"start":235},[45,126074,126075,126076,126079],{},"这会在端口",[48,126077,126078],{},"8000","上启动一个Web服务器。",[42,126081,126082],{},[45,126083,126084],{},"启动服务器后，Termux会显示日志信息，例如：",[140,126086,126088],{"className":122495,"code":126087,"language":122497,"meta":122498,"style":145},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[48,126089,126090],{"__ignoreMap":145},[149,126091,126092],{"class":151,"line":152},[149,126093,126087],{},[42,126095,126096],{},[45,126097,126098],{},"这表示服务器已成功启动。",[24,126100,126101],{},[31,126102,126103],{},"在浏览器中访问HTML文件",[125,126105,126106],{},[45,126107,126108,28182,126111,126116],{},[31,126109,126110],{},"在同一设备上访问",[125,126112,126113],{},[45,126114,126115],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[140,126117,126120],{"className":126118,"code":126119,"language":73346,"meta":145,"style":145},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[48,126121,126122],{"__ignoreMap":145},[149,126123,126124,126127],{"class":151,"line":152},[149,126125,126126],{"class":155},"http:",[149,126128,126129],{"class":295},"\u002F\u002Flocalhost:8000\n",[42,126131,126132],{},[45,126133,126134,126135,126138],{},"如果HTML文件中有",[48,126136,126137],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126140,126142],{"id":126141},"_76-linux重点知识","7.6 Linux重点知识",[19,126144,126146],{"id":126145},"_761-关于点的说明","7.6.1 关于点的说明",[24,126148,126149],{},[83,126150],{"alt":145,"src":126151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[24,126153,126154],{},"一点本目录，两点上目录",[19,126156,126158],{"id":126157},"_762-目录","7.6.2 目录",[120,126160,126162],{"id":126161},"_7621-系统启动必须","7.6.2.1 系统启动必须",[24,126164,126165],{},[31,126166,126167],{},"\u002Fboot:",[24,126169,126170],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[24,126172,126173],{},[31,126174,126175],{},"\u002Fetc:",[24,126177,126178],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[24,126180,126181],{},[31,126182,126183],{},"\u002Flib：",[24,126185,126186],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[24,126188,126189],{},[31,126190,126191],{},"\u002Fsys:",[24,126193,126194],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[120,126196,126198],{"id":126197},"_7622-指令集合","7.6.2.2 指令集合",[24,126200,126201],{},[31,126202,126203],{},"\u002Fbin:",[24,126205,126206],{},"为二进制文件的缩写，存放最经常使用的命令",[24,126208,126209],{},[31,126210,126211],{},"\u002Fsbin:",[24,126213,126214],{},"只有系统管理员才能使用的程序和指令",[120,126216,126218],{"id":126217},"_7623-外部文件管理","7.6.2.3 外部文件管理",[24,126220,126221],{},[31,126222,126223],{},"\u002Fdev:",[24,126225,126226],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[24,126228,126229],{},[31,126230,126231],{},"\u002Fmedia:",[24,126233,126234],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[24,126236,126237],{},[31,126238,126239],{},"\u002Fmnt:",[24,126241,126242],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[120,126244,126246],{"id":126245},"_7624-临时文件","7.6.2.4 临时文件",[24,126248,126249],{},[31,126250,126251],{},"\u002Frun:",[24,126253,126254],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[24,126256,126257],{},[31,126258,126259],{},"\u002Flost+found:",[24,126261,126262],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[24,126264,126265],{},[31,126266,126267],{},"\u002Ftmp:",[24,126269,126270],{},"这个目录是用来存放一些临时文件的",[120,126272,126274],{"id":126273},"_7625-账户","7.6.2.5 账户",[24,126276,126277],{},[31,126278,126279],{},"\u002Froot：",[24,126281,126282],{},"系统管理员的用户主目录",[24,126284,126285,28182],{},[31,126286,126287],{},"\u002Fhome",[24,126289,126290],{},"用户的主目录，以用户的账号命名的",[24,126292,126293,28182],{},[31,126294,126295],{},"\u002Fusr",[24,126297,126298],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[24,126300,126301],{},[31,126302,126303],{},"\u002Fusr\u002Fbin：",[24,126305,126306],{},"系统用户使用的应用程序与指令",[24,126308,126309],{},[31,126310,126311],{},"\u002Fusr\u002Fsbin：",[24,126313,126314],{},"超级用户使用的比较高级的管理程序和系统守护程序",[24,126316,126317],{},[31,126318,126319],{},"\u002Fusr\u002Fsrc：",[24,126321,126322],{},"内核源代码默认的放置目录",[120,126324,126326],{"id":126325},"_7626-运行过程要用","7.6.2.6 运行过程要用",[24,126328,126329],{},[31,126330,126331],{},"\u002Fvar：",[24,126333,126334],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[24,126336,126337],{},[31,126338,126339],{},"\u002Fproc:",[24,126341,126342,126343,126346],{},"管理 ",[31,126344,126345],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[120,126348,126350],{"id":126349},"_7627-扩展用的","7.6.2.7 扩展用的",[24,126352,126353],{},[31,126354,126355],{},"\u002Fopt:",[24,126357,126358],{},"默认是空的，我们安装额外软件可以放在这个里面",[24,126360,126361],{},[31,126362,126363],{},"\u002Fsrv:",[24,126365,126366],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[19,126368,126370],{"id":126369},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[24,126372,126373],{},[83,126374],{"alt":145,"src":126375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[24,126377,126378],{},"windows-->linux:",[24,126380,126381],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[24,126383,126384],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[24,126386,126387],{},"linux传输文件到windows",[24,126389,126390],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[19,126392,126394],{"id":126393},"_764-易忘知识","7.6.4 易忘知识",[24,126396,126397],{},"操作系统内核查看",[140,126399,126400],{"className":118975,"code":122969,"language":118977,"meta":145,"style":145},[48,126401,126402],{"__ignoreMap":145},[149,126403,126404,126406],{"class":151,"line":152},[149,126405,71888],{"class":162},[149,126407,122978],{"class":309},[24,126409,126410],{},[83,126411],{"alt":145,"src":126412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[24,126414,126415],{},[83,126416],{"alt":145,"src":126417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[140,126419,126421],{"className":118975,"code":126420,"language":118977,"meta":145,"style":145},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[48,126422,126423,126435],{"__ignoreMap":145},[149,126424,126425,126427,126430,126433],{"class":151,"line":152},[149,126426,123186],{"class":162},[149,126428,126429],{"class":169}," mvtest",[149,126431,126432],{"class":169}," mvtest2",[149,126434,4393],{"class":155},[149,126436,126437],{"class":151,"line":193},[149,126438,126439],{"class":162},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[24,126441,126442],{},[83,126443],{"alt":145,"src":126444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[24,126446,126447],{},[83,126448],{"alt":145,"src":126449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[24,126451,126452,126453,126456],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[48,126454,126455],{},"du -a"," 可以快速查看磁盘使用细节。",[19,126458,126460],{"id":126459},"_765-vim","7.6.5 Vim",[24,126462,126463],{},[83,126464],{"alt":145,"src":126465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[24,126467,126468],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[24,126470,126471],{},"一开始进去为命令模式，此时点击输入的字母为命令",[24,126473,126474],{},[31,126475,126476],{},"1.命令模式：",[24,126478,126479],{},"i 切换到输入模式，在光标当前位置开始输入文本",[24,126481,126482],{},"x 删除当前光标所在处的字符",[24,126484,126485],{},"：切换到底线命令模式，以在最底一行输入命令",[24,126487,126488],{},"a 进行插入模式，在光标下一个位置输入文本",[24,126490,126491],{},"o 在当前的下方插入一个新行，并进入插入模式",[24,126493,126494],{},"0 在当前行的上方插入一个新行，并进入插入模式",[24,126496,126497],{},"dd 剪切当前行",[24,126499,126500],{},"yy 复制当前行",[24,126502,126503],{},"p 粘贴剪贴板内容到光标下方",[24,126505,126506],{},"P 粘贴剪贴板内容到光标上方",[24,126508,126509],{},"u 撤销上一次操作",[24,126511,126512],{},"ctrl+r 重做上一次操作",[24,126514,126515,126517],{},[2656,126516],{}," 保存文件",[24,126519,126520,126522],{},[2508,126521],{}," 退出Vim编辑器",[24,126524,126525,126527],{},[2508,126526],{},"! 强制退出Vim编辑器，不保存修改",[24,126529,126530],{},[31,126531,126532],{},"2.输入模式：",[24,126534,126535],{},[83,126536],{"alt":145,"src":126537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[24,126539,126540],{},[31,126541,126542],{},"3.底线命令模式：",[24,126544,126545],{},[83,126546],{"alt":145,"src":126547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[24,126549,126550],{},"按下esc可以退出底线命令模式",[19,126552,126554],{"id":126553},"_766-apt","7.6.6 apt",[24,126556,126557],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[19,126559,126561],{"id":126560},"_767-home与root的区别","7.6.7 home与root的区别",[24,126563,126564],{},[83,126565],{"alt":145,"src":126566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[24,126568,126569],{},[83,126570],{"alt":145,"src":126571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[24,126573,126574],{},[83,126575],{"alt":145,"src":126576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[24,126578,126579],{},[83,126580],{"alt":145,"src":126581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[19,126583,126585],{"id":126584},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[24,126587,126588],{},[2102,126589,126590],{"href":126590,"rel":126591},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25573],[125,126593,126594,126597],{},[45,126595,126596],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[45,126598,126599],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[24,126601,126602],{},[83,126603],{"alt":145,"src":126604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[24,126606,126607],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[24,126609,126610],{},[83,126611],{"alt":145,"src":126612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[140,126614,126616],{"className":122495,"code":126615,"language":122497,"meta":122498,"style":145},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[48,126617,126618,126623],{"__ignoreMap":145},[149,126619,126620],{"class":151,"line":152},[149,126621,126622],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[149,126624,126625],{"class":151,"line":193},[149,126626,126627],{},".\u002Fpycharm.sh\n",[24,126629,126630],{},"3️⃣创建.desktop文件",[24,126632,126633],{},[31,126634,126635],{},"原理：",[42,126637,126638,126648],{},[45,126639,126640,126641,126647],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[31,126642,126643,126646],{},[48,126644,126645],{},".desktop"," 文件"," 来识别应用。",[45,126649,126650,126652,126653],{},[48,126651,126645],{}," 文件相当于一个“应用注册表”，告诉系统：",[42,126654,126655,126658,126661,126664,126667],{},[45,126656,126657],{},"应用名字（Name）",[45,126659,126660],{},"图标（Icon）",[45,126662,126663],{},"执行命令（Exec）",[45,126665,126666],{},"分类（Categories）",[45,126668,126669],{},"是否需要终端（Terminal）",[140,126671,126673],{"className":122495,"code":126672,"language":122497,"meta":122498,"style":145},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[48,126674,126675,126680],{"__ignoreMap":145},[149,126676,126677],{"class":151,"line":152},[149,126678,126679],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[149,126681,126682],{"class":151,"line":193},[149,126683,126684],{},"nano pycharm.desktop\n",[24,126686,126687],{},"nano是一个命令行下的编辑器，也可以使用vim",[140,126689,126691],{"className":122495,"code":126690,"language":122497,"meta":122498,"style":145},"[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",[48,126692,126693,126698,126703,126708,126713,126718,126723,126728,126733,126738],{"__ignoreMap":145},[149,126694,126695],{"class":151,"line":152},[149,126696,126697],{},"[Desktop Entry]\n",[149,126699,126700],{"class":151,"line":193},[149,126701,126702],{},"Version=1.0\n",[149,126704,126705],{"class":151,"line":235},[149,126706,126707],{},"Type=Application\n",[149,126709,126710],{"class":151,"line":340},[149,126711,126712],{},"Name=PyCharm\n",[149,126714,126715],{"class":151,"line":346},[149,126716,126717],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[149,126719,126720],{"class":151,"line":352},[149,126721,126722],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[149,126724,126725],{"class":151,"line":1021},[149,126726,126727],{},"Comment=JetBrains PyCharm IDE\n",[149,126729,126730],{"class":151,"line":1035},[149,126731,126732],{},"Categories=Development;IDE;\n",[149,126734,126735],{"class":151,"line":1054},[149,126736,126737],{},"Terminal=false\n",[149,126739,126740],{"class":151,"line":1072},[149,126741,126742],{},"StartupWMClass=jetbrains-pycharm\n",[42,126744,126745,126751,126757,126763],{},[45,126746,126747,126750],{},[48,126748,126749],{},"Exec"," → 点击图标时执行的命令",[45,126752,126753,126756],{},[48,126754,126755],{},"Icon"," → 显示在菜单和桌面上的图标",[45,126758,126759,126762],{},[48,126760,126761],{},"Terminal=false"," → 不打开终端",[45,126764,126765,126768],{},[48,126766,126767],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126770,126771,126772],"blockquote",{},[24,126773,126774,126775,126777,126778],{},"可以理解成 ",[48,126776,126645],{}," 文件是 Linux 的 ",[31,126779,126780],{},"快捷方式配置文件",[24,126782,126783],{},"4️⃣设置可执行权限",[140,126785,126787],{"className":122495,"code":126786,"language":122497,"meta":122498,"style":145},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[48,126788,126789],{"__ignoreMap":145},[149,126790,126791],{"class":151,"line":152},[149,126792,126786],{},[24,126794,126795],{},"5️⃣桌面图标启动的话如下：",[140,126797,126799],{"className":122495,"code":126798,"language":122497,"meta":122498,"style":145},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[48,126800,126801,126806],{"__ignoreMap":145},[149,126802,126803],{"class":151,"line":152},[149,126804,126805],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[149,126807,126808],{"class":151,"line":193},[149,126809,126810],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[125,126812,126813],{"start":235},[45,126814,126815],{},"下载Appimage文件实现软件的安装",[24,126817,126818],{},"1️⃣先下载appimage",[24,126820,126821],{},[2102,126822,126823],{"href":126823,"rel":126824},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25573],[24,126826,126827],{},[83,126828],{"alt":145,"src":126829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[24,126831,126832],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[24,126834,126835],{},[83,126836],{"alt":145,"src":126837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[24,126839,126840],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[24,126842,126843],{},[83,126844],{"alt":145,"src":126845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[24,126847,126848],{},[83,126849],{"alt":145,"src":126850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[24,126852,126853,126854,126857],{},"3️⃣给他们放在",[48,126855,126856],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[24,126859,126860],{},"4️⃣给软件执行权限",[140,126862,126864],{"className":122495,"code":126863,"language":122497,"meta":122498,"style":145},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[48,126865,126866,126871],{"__ignoreMap":145},[149,126867,126868],{"class":151,"line":152},[149,126869,126870],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[149,126872,126873],{"class":151,"line":193},[149,126874,126875],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[24,126877,126878],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[140,126880,126882],{"className":118975,"code":126881,"language":118977,"meta":145,"style":145},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[48,126883,126884,126891,126898,126904],{"__ignoreMap":145},[149,126885,126886,126888],{"class":151,"line":152},[149,126887,102956],{"class":309},[149,126889,126890],{"class":169}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[149,126892,126893,126895],{"class":151,"line":193},[149,126894,102963],{"class":162},[149,126896,126897],{"class":169}," .\u002Fqqmusic.desktop\n",[149,126899,126900,126902],{"class":151,"line":235},[149,126901,125946],{"class":162},[149,126903,126897],{"class":169},[149,126905,126906,126908,126910,126912],{"class":151,"line":340},[149,126907,26285],{"class":162},[149,126909,26288],{"class":169},[149,126911,124812],{"class":169},[149,126913,126897],{"class":169},[24,126915,126916,126918],{},[48,126917,102963],{},"：一个 Linux 命令，主要功能是：",[42,126920,126921,126924],{},[45,126922,126923],{},"如果文件不存在，就创建一个新的空文件",[45,126925,126926],{},"如果文件已存在，就更新该文件的最后修改时间",[140,126928,126930],{"className":122495,"code":126929,"language":122497,"meta":122498,"style":145},"[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",[48,126931,126932,126936,126941,126946,126951,126955,126960],{"__ignoreMap":145},[149,126933,126934],{"class":151,"line":152},[149,126935,126697],{},[149,126937,126938],{"class":151,"line":193},[149,126939,126940],{},"Name=QQ音乐\n",[149,126942,126943],{"class":151,"line":235},[149,126944,126945],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[149,126947,126948],{"class":151,"line":340},[149,126949,126950],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[149,126952,126953],{"class":151,"line":346},[149,126954,126707],{},[149,126956,126957],{"class":151,"line":352},[149,126958,126959],{},"Categories=Audio;Music;Player;\n",[149,126961,126962],{"class":151,"line":1021},[149,126963,126964],{},"Comment=QQ Music Client for Linux\n",[24,126966,126967],{},"将文件复制进去",[24,126969,126970],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[24,126972,126973],{},[83,126974],{"alt":145,"src":126975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[24,126977,126978],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[24,126980,126981],{},[83,126982],{"alt":145,"src":126983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[24,126985,126986,126987,126990,126991,126994],{},"如果你用的不是KDE，那么也可以直接修改",[48,126988,126989],{},"qqmuic.desktop","：在exec的末尾加上",[48,126992,126993],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[140,126996,126998],{"className":122495,"code":126997,"language":122497,"meta":122498,"style":145},"[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",[48,126999,127000,127004,127008,127013,127017,127021,127025],{"__ignoreMap":145},[149,127001,127002],{"class":151,"line":152},[149,127003,126697],{},[149,127005,127006],{"class":151,"line":193},[149,127007,126940],{},[149,127009,127010],{"class":151,"line":235},[149,127011,127012],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[149,127014,127015],{"class":151,"line":340},[149,127016,126950],{},[149,127018,127019],{"class":151,"line":346},[149,127020,126707],{},[149,127022,127023],{"class":151,"line":352},[149,127024,126959],{},[149,127026,127027],{"class":151,"line":1021},[149,127028,126964],{},[24,127030,127031],{},[83,127032],{"alt":145,"src":127033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[24,127035,127036],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[140,127038,127040],{"className":122495,"code":127039,"language":122497,"meta":122498,"style":145},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[48,127041,127042],{"__ignoreMap":145},[149,127043,127044],{"class":151,"line":152},[149,127045,127039],{},[125,127047,127048],{"start":340},[45,127049,127050],{},"去Flathub上安装软件",[24,127052,127053],{},[2102,127054,127055],{"href":127055,"rel":127056},"https:\u002F\u002Fflathub.org\u002F",[25573],[24,127058,127059],{},"1️⃣去上面的官网搜索软件+下载软件",[24,127061,127062],{},[83,127063],{"alt":145,"src":127064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[140,127066,127068],{"className":122495,"code":127067,"language":122497,"meta":122498,"style":145},"flatpak install flathub com.obsproject.Studio\n",[48,127069,127070],{"__ignoreMap":145},[149,127071,127072],{"class":151,"line":152},[149,127073,127067],{},[24,127075,127076],{},[83,127077],{"alt":145,"src":127078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[24,127080,127081],{},"2️⃣运行软件",[24,127083,127084],{},"a.官方方式：",[24,127086,127087],{},[83,127088],{"alt":145,"src":127089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[140,127091,127092],{"className":122495,"code":127067,"language":122497,"meta":122498,"style":145},[48,127093,127094],{"__ignoreMap":145},[149,127095,127096],{"class":151,"line":152},[149,127097,127067],{},[24,127099,127100],{},"b.当普通软件运行：",[24,127102,127103],{},[83,127104],{"alt":145,"src":127105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[24,127107,127108],{},[83,127109],{"alt":145,"src":127110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1783,127112,127113],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":145,"searchDepth":193,"depth":193,"links":127115},[127116,127117,127122,127123,127129,127130],{"id":123848,"depth":193,"text":123849},{"id":124190,"depth":193,"text":124191,"children":127118},[127119,127120,127121],{"id":124194,"depth":235,"text":124195},{"id":124261,"depth":235,"text":124262},{"id":124522,"depth":235,"text":124523},{"id":124675,"depth":193,"text":124676},{"id":124913,"depth":193,"text":124914,"children":127124},[127125,127126,127127,127128],{"id":124965,"depth":235,"text":124966},{"id":125251,"depth":235,"text":125252},{"id":125522,"depth":235,"text":125523},{"id":125781,"depth":235,"text":125782},{"id":125840,"depth":193,"text":125841},{"id":126141,"depth":193,"text":126142,"children":127131},[127132,127133,127134,127135,127136,127137,127138,127139],{"id":126145,"depth":235,"text":126146},{"id":126157,"depth":235,"text":126158},{"id":126369,"depth":235,"text":126370},{"id":126393,"depth":235,"text":126394},{"id":126459,"depth":235,"text":126460},{"id":126553,"depth":235,"text":126554},{"id":126560,"depth":235,"text":126561},{"id":126584,"depth":235,"text":126585},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123840,"description":1797},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127146,"title":127147,"body":127148,"description":1797,"extension":1798,"meta":127152,"navigation":1800,"path":127153,"seo":127154,"stem":127155,"__hash__":127156},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127149,"toc":127150},[],{"title":145,"searchDepth":193,"depth":193,"links":127151},[],{"category":31969},"\u002Fwiki\u002F2025-01-27-linux",{"title":127147,"description":1797},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127158,"title":127159,"body":127160,"description":127164,"extension":1798,"meta":127555,"navigation":1800,"path":127556,"seo":127557,"stem":127558,"__hash__":127559},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127161,"toc":127553},[127162,127165,127169,127186,127189,127242,127246,127248,127288,127297,127301,127304,127545,127550],[24,127163,127164],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127166,127168],{"id":127167},"_1ubuntu环境配置","1.Ubuntu环境配置",[125,127170,127171,127174,127177,127180,127183],{},[45,127172,127173],{},"ubuntu环境换源",[45,127175,127176],{},"安装cuda",[45,127178,127179],{},"安装miniconda",[45,127181,127182],{},"安装pytorch",[45,127184,127185],{},"安装genesis",[24,127187,127188],{},"参考链接：",[140,127190,127192],{"className":25530,"code":127191,"language":25532,"meta":145,"style":145},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[48,127193,127194],{"__ignoreMap":145},[149,127195,127196,127199,127202,127205,127207,127210,127213,127215,127218,127221,127223,127226,127229,127231,127234,127237,127239],{"class":151,"line":152},[149,127197,127198],{"class":162},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[149,127200,127201],{"class":169},"=blogdetail",[149,127203,127204],{"class":155},"&sharetype",[149,127206,166],{"class":325},[149,127208,127209],{"class":169},"blogdetail",[149,127211,127212],{"class":155},"&sharerId",[149,127214,166],{"class":325},[149,127216,127217],{"class":169},"144728092",[149,127219,127220],{"class":155},"&sharerefer",[149,127222,166],{"class":325},[149,127224,127225],{"class":169},"PC",[149,127227,127228],{"class":155},"&sharesource",[149,127230,166],{"class":325},[149,127232,127233],{"class":169},"qq_69379513",[149,127235,127236],{"class":155},"&sharefrom",[149,127238,166],{"class":325},[149,127240,127241],{"class":169},"from_link\n",[10,127243,127245],{"id":127244},"_2genesis-报错issue","2.Genesis 报错issue",[24,127247,127188],{},[140,127249,127250],{"className":25530,"code":127191,"language":25532,"meta":145,"style":145},[48,127251,127252],{"__ignoreMap":145},[149,127253,127254,127256,127258,127260,127262,127264,127266,127268,127270,127272,127274,127276,127278,127280,127282,127284,127286],{"class":151,"line":152},[149,127255,127198],{"class":162},[149,127257,127201],{"class":169},[149,127259,127204],{"class":155},[149,127261,166],{"class":325},[149,127263,127209],{"class":169},[149,127265,127212],{"class":155},[149,127267,166],{"class":325},[149,127269,127217],{"class":169},[149,127271,127220],{"class":155},[149,127273,166],{"class":325},[149,127275,127225],{"class":169},[149,127277,127228],{"class":155},[149,127279,166],{"class":325},[149,127281,127233],{"class":169},[149,127283,127236],{"class":155},[149,127285,166],{"class":325},[149,127287,127241],{"class":169},[140,127289,127291],{"className":25530,"code":127290,"language":25532,"meta":145,"style":145},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[48,127292,127293],{"__ignoreMap":145},[149,127294,127295],{"class":151,"line":152},[149,127296,127290],{"class":162},[10,127298,127300],{"id":127299},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[24,127302,127303],{},"hello_robot.py",[140,127305,127307],{"className":32084,"code":127306,"language":32086,"meta":145,"style":145},"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",[48,127308,127309,127315,127330,127334,127346,127358,127362,127375,127379,127398,127408,127418,127432,127436,127440,127445,127449,127459,127466,127480,127487,127497,127502,127506,127524,127529,127533,127540],{"__ignoreMap":145},[149,127310,127311,127313],{"class":151,"line":152},[149,127312,32098],{"class":325},[149,127314,47011],{"class":155},[149,127316,127317,127320,127323,127325,127327],{"class":151,"line":193},[149,127318,127319],{"class":155},"os.environ[",[149,127321,127322],{"class":169},"'PYOPENGL_PLATFORM'",[149,127324,6161],{"class":155},[149,127326,166],{"class":325},[149,127328,127329],{"class":169}," 'glx'\n",[149,127331,127332],{"class":151,"line":235},[149,127333,4119],{"emptyLinePlaceholder":1800},[149,127335,127336,127338,127341,127343],{"class":151,"line":340},[149,127337,32098],{"class":325},[149,127339,127340],{"class":155}," genesis ",[149,127342,33089],{"class":325},[149,127344,127345],{"class":155}," gs\n",[149,127347,127348,127350,127353,127355],{"class":151,"line":346},[149,127349,32443],{"class":325},[149,127351,127352],{"class":155}," pynput ",[149,127354,32098],{"class":325},[149,127356,127357],{"class":155}," keyboard\n",[149,127359,127360],{"class":151,"line":352},[149,127361,4119],{"emptyLinePlaceholder":1800},[149,127363,127364,127367,127370,127372],{"class":151,"line":1021},[149,127365,127366],{"class":155},"gs.init(",[149,127368,127369],{"class":6932},"backend",[149,127371,166],{"class":325},[149,127373,127374],{"class":155},"gs.gpu)\n",[149,127376,127377],{"class":151,"line":1035},[149,127378,4119],{"emptyLinePlaceholder":1800},[149,127380,127381,127384,127386,127389,127392,127394,127396],{"class":151,"line":1054},[149,127382,127383],{"class":155},"scene ",[149,127385,166],{"class":325},[149,127387,127388],{"class":155}," gs.Scene(",[149,127390,127391],{"class":6932},"show_viewer",[149,127393,166],{"class":325},[149,127395,33182],{"class":309},[149,127397,1878],{"class":155},[149,127399,127400,127403,127405],{"class":151,"line":1072},[149,127401,127402],{"class":155},"plane ",[149,127404,166],{"class":325},[149,127406,127407],{"class":155}," scene.add_entity(gs.morphs.Plane())\n",[149,127409,127410,127413,127415],{"class":151,"line":1090},[149,127411,127412],{"class":155},"franka ",[149,127414,166],{"class":325},[149,127416,127417],{"class":155}," scene.add_entity(\n",[149,127419,127420,127423,127425,127427,127430],{"class":151,"line":1633},[149,127421,127422],{"class":155},"    gs.morphs.MJCF(",[149,127424,47060],{"class":6932},[149,127426,166],{"class":325},[149,127428,127429],{"class":169},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[149,127431,39753],{"class":155},[149,127433,127434],{"class":151,"line":1644},[149,127435,1878],{"class":155},[149,127437,127438],{"class":151,"line":3348},[149,127439,4119],{"emptyLinePlaceholder":1800},[149,127441,127442],{"class":151,"line":3362},[149,127443,127444],{"class":155},"scene.build()\n",[149,127446,127447],{"class":151,"line":3367},[149,127448,4119],{"emptyLinePlaceholder":1800},[149,127450,127451,127453,127456],{"class":151,"line":3373},[149,127452,33653],{"class":325},[149,127454,127455],{"class":162}," on_press",[149,127457,127458],{"class":155},"(key):\n",[149,127460,127461,127464],{"class":151,"line":3394},[149,127462,127463],{"class":325},"    try",[149,127465,5457],{"class":155},[149,127467,127468,127470,127473,127475,127478],{"class":151,"line":3399},[149,127469,4216],{"class":325},[149,127471,127472],{"class":155}," key.char ",[149,127474,4667],{"class":325},[149,127476,127477],{"class":169}," 'q'",[149,127479,5457],{"class":155},[149,127481,127482,127484],{"class":151,"line":3413},[149,127483,17442],{"class":325},[149,127485,127486],{"class":309}," False\n",[149,127488,127489,127492,127495],{"class":151,"line":3418},[149,127490,127491],{"class":325},"    except",[149,127493,127494],{"class":309}," AttributeError",[149,127496,5457],{"class":155},[149,127498,127499],{"class":151,"line":3447},[149,127500,127501],{"class":325},"        pass\n",[149,127503,127504],{"class":151,"line":3452},[149,127505,4119],{"emptyLinePlaceholder":1800},[149,127507,127508,127511,127513,127516,127519,127521],{"class":151,"line":3469},[149,127509,127510],{"class":155},"listener ",[149,127512,166],{"class":325},[149,127514,127515],{"class":155}," keyboard.Listener(",[149,127517,127518],{"class":6932},"on_press",[149,127520,166],{"class":325},[149,127522,127523],{"class":155},"on_press)\n",[149,127525,127526],{"class":151,"line":3474},[149,127527,127528],{"class":155},"listener.start()\n",[149,127530,127531],{"class":151,"line":3479},[149,127532,4119],{"emptyLinePlaceholder":1800},[149,127534,127535,127537],{"class":151,"line":3484},[149,127536,110342],{"class":325},[149,127538,127539],{"class":155}," listener.running:\n",[149,127541,127542],{"class":151,"line":3498},[149,127543,127544],{"class":155},"    scene.step()\n",[24,127546,127547],{},[83,127548],{"alt":145,"src":127549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1783,127551,127552],{},"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":145,"searchDepth":193,"depth":193,"links":127554},[],{"category":25087},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127159,"description":127164},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127561,"title":127562,"body":127563,"description":1797,"extension":1798,"meta":127578,"navigation":1800,"path":127579,"seo":127580,"stem":127581,"__hash__":127582},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127564,"toc":127575},[127565,127568,127572],[10,127566,127562],{"id":127567},"_1-基础知识",[14,127569,127571],{"id":127570},"_11-js的组成","1.1 js的组成",[24,127573,127574],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":145,"searchDepth":193,"depth":193,"links":127576},[127577],{"id":127570,"depth":193,"text":127571},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127562,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127584,"title":127585,"body":127586,"description":1797,"extension":1798,"meta":127725,"navigation":1800,"path":127726,"seo":127727,"stem":127728,"__hash__":127729},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127587,"toc":127713},[127588,127591,127595,127598,127602,127612,127616,127619,127622,127625,127629,127636,127642,127646,127652,127663,127667,127670,127674,127677,127681,127684,127688,127691,127695,127698,127701,127704,127707,127710],[10,127589,127585],{"id":127590},"_2-vscode必备内容",[14,127592,127594],{"id":127593},"_21-标签分类","2.1 标签分类",[24,127596,127597],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127599,127601],{"id":127600},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[24,127603,127604,127605,127607,127608,127611],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[48,127606,2090],{}," 然后按 ",[48,127609,127610],{},"Tab","，快速自动生成基本结构。",[14,127613,127615],{"id":127614},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[24,127617,127618],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[24,127620,127621],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[24,127623,127624],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127626,127628],{"id":127627},"_24-视图缩放","2.4 视图缩放",[24,127630,127631,127632,127635],{},"缩放视图 ",[48,127633,127634],{},"ctrl+"," 可实现代码增大。",[24,127637,127638,127641],{},[48,127639,127640],{},"ctrl-"," 可实现代码减小。",[14,127643,127645],{"id":127644},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[24,127647,127648,127649,30091],{},"VSCode 新建文件快捷键为 ",[48,127650,127651],{},"ctrl+N",[24,127653,127654,127655,127658,127659,127662],{},"保存快捷键为 ",[48,127656,127657],{},"ctrl+S","，将文本保存为 ",[48,127660,127661],{},".html"," 文件。",[14,127664,127666],{"id":127665},"_26-auto-rename-tag","2.6 Auto Rename Tag",[24,127668,127669],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127671,127673],{"id":127672},"_27-vscode-icons","2.7 vscode-icons",[24,127675,127676],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127678,127680],{"id":127679},"_28-easy-less","2.8 Easy LESS",[24,127682,127683],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127685,127687],{"id":127686},"_29-会了吧插件","2.9 会了吧插件",[24,127689,127690],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127692,127694],{"id":127693},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[24,127696,127697],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[24,127699,127700],{},"②选定多个相同的单词:ctrl+D",[24,127702,127703],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[24,127705,127706],{},"④全局替换某些单词:ctrl+h",[24,127708,127709],{},"⑤快速定位到某一行:ctrl+g",[24,127711,127712],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":145,"searchDepth":193,"depth":193,"links":127714},[127715,127716,127717,127718,127719,127720,127721,127722,127723,127724],{"id":127593,"depth":193,"text":127594},{"id":127600,"depth":193,"text":127601},{"id":127614,"depth":193,"text":127615},{"id":127627,"depth":193,"text":127628},{"id":127644,"depth":193,"text":127645},{"id":127665,"depth":193,"text":127666},{"id":127672,"depth":193,"text":127673},{"id":127679,"depth":193,"text":127680},{"id":127686,"depth":193,"text":127687},{"id":127693,"depth":193,"text":127694},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127585,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127731,"title":127732,"body":127733,"description":1797,"extension":1798,"meta":127892,"navigation":1800,"path":127893,"seo":127894,"stem":127895,"__hash__":127896},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127734,"toc":127884},[127735,127738,127742,127752,127758,127764,127768,127777,127781,127786,127789,127792,127796,127799,127809,127818,127827,127836,127846,127853,127858,127863,127876],[10,127736,127732],{"id":127737},"_3-html文本与容器标签",[14,127739,127741],{"id":127740},"_31-标题标签","3.1 标题标签",[24,127743,127744,127747,127748,127751],{},[48,127745,127746],{},"\u003Ch1>","我是一级标签",[48,127749,127750],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[24,127753,127754,127747,127756],{},[48,127755,127746],{},[48,127757,127750],{},[24,127759,125014,127760,127763],{},[48,127761,127762],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127765,127767],{"id":127766},"_32-段落标签","3.2 段落标签",[24,127769,127770,127773,127774],{},[48,127771,127772],{},"\u003Cp>","....",[48,127775,127776],{},"\u003C\u002Fp>",[14,127778,127780],{"id":127779},"_33-换行标签","3.3 换行标签",[24,127782,127783],{},[48,127784,127785],{},"\u003Cbr \u002F>",[24,127787,127788],{},"具有强制换行的作用",[24,127790,127791],{},"单标签",[14,127793,127795],{"id":127794},"_34-文本格式化标签","3.4 文本格式化标签",[24,127797,127798],{},"提供粗体、斜体和下划线等效果",[24,127800,127801,127802,84220,127805,127808],{},"加粗：",[48,127803,127804],{},"\u003Cstrong>...\u003C\u002Fstrong>",[48,127806,127807],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[24,127810,127811,127812,84220,127815,127808],{},"斜体：",[48,127813,127814],{},"\u003Cem>...\u003C\u002Fem>",[48,127816,127817],{},"\u003Ci>...\u003C\u002Fi>",[24,127819,127820,127821,84220,127824,127808],{},"删除线：",[48,127822,127823],{},"\u003Cdel>...\u003C\u002Fdel>",[48,127825,127826],{},"\u003Cs>...\u003C\u002Fs>",[24,127828,127829,127830,84220,127833,127808],{},"下划线：",[48,127831,127832],{},"\u003Cins>...\u003C\u002Fins>",[48,127834,127835],{},"\u003Cu>...\u003C\u002Fu>",[14,127837,127839,127840,20120,127843,104373],{"id":127838},"_35-div和span标签","3.5 ",[48,127841,127842],{},"\u003Cdiv>",[48,127844,127845],{},"\u003Cspan>",[24,127847,127848,102698,127850,127852],{},[48,127849,127842],{},[48,127851,127845],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[24,127854,127855],{},[48,127856,127857],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[24,127859,127860],{},[48,127861,127862],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[24,127864,127865,127866,127868,127869,127871,127872,127875],{},"两者特点：①",[48,127867,127842],{}," 标签用来布局，但一行通常只放一个 ",[48,127870,127842],{},"。可以理解为一个大盒子，独占一行，在 ",[48,127873,127874],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[24,127877,78931,127878,127880,127881,127883],{},[48,127879,127845],{}," 标签也可用于布局，一行可以放多个 ",[48,127882,127845],{},"，可理解为小盒子。",{"title":145,"searchDepth":193,"depth":193,"links":127885},[127886,127887,127888,127889,127890],{"id":127740,"depth":193,"text":127741},{"id":127766,"depth":193,"text":127767},{"id":127779,"depth":193,"text":127780},{"id":127794,"depth":193,"text":127795},{"id":127838,"depth":193,"text":127891},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127732,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127898,"title":127899,"body":127900,"description":1797,"extension":1798,"meta":128096,"navigation":1800,"path":128097,"seo":128098,"stem":128099,"__hash__":128100},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127901,"toc":128088},[127902,127905,127909,127912,127918,127925,127931,127937,127940,127943,127946,127949,127952,127955,127958,127962,127965,127968,127971,127977,127983,127989,127996,128000,128006,128012,128015,128018,128024,128030,128036,128039,128042,128046,128049,128059,128065,128069,128078,128082,128085],[10,127903,127899],{"id":127904},"_4-html图像与链接",[14,127906,127908],{"id":127907},"_41-图像标签","4.1 图像标签",[24,127910,127911],{},"（1）标签",[24,127913,127914,127917],{},[48,127915,127916],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[24,127919,127920,127921,127924],{},"src是",[48,127922,127923],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[24,127926,127927,127928],{},"alt:文本，替换文本。图像不能显示的文字 ",[48,127929,127930],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[24,127932,127933,127934],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[48,127935,127936],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[24,127938,127939],{},"width:像素，设置图像的宽度",[24,127941,127942],{},"height:像素，设置图像的高度",[24,127944,127945],{},"border：像素，设置图像的边框粗细",[24,127947,127948],{},"（2）图像标签属性的注意点：",[24,127950,127951],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[24,127953,127954],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[24,127956,127957],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127959,127961],{"id":127960},"_42-路径注意要点","4.2 路径注意要点：",[24,127963,127964],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[24,127966,127967],{},"（2）根目录：就是打开文件夹的第一层根目录",[24,127969,127970],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[24,127972,127973,127974],{},"①同一级路径：图像文件位于HTML文件同一级，如",[48,127975,127976],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[24,127978,127979,127980],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[48,127981,127982],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[24,127984,127985,127986],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[48,127987,127988],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[24,127990,127991,127992,2115],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2102,127993,127994],{"href":127994,"rel":127995},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25573],[14,127997,127999],{"id":127998},"_43-超链接标签","4.3 超链接标签",[24,128001,128002,128005],{},[48,128003,128004],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[24,128007,128008,128009],{},"①语法格式：",[48,128010,128011],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[24,128013,128014],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[24,128016,128017],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[24,128019,128020,128021],{},"③链接分类：外部链接：",[48,128022,128023],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[24,128025,128026,128027],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[48,128028,128029],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[24,128031,128032,128033],{},"空链接：如果当时没有确定链接目标时，",[48,128034,128035],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[24,128037,128038],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[24,128040,128041],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128043,128045],{"id":128044},"_44-锚点链接","4.4 锚点链接",[24,128047,128048],{},"点我们点击链接，可以快速定位到页面中的某个位置",[24,128050,128051,128052,128055,128056],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[48,128053,128054],{},"\u003Ca href=\"#two\">","第二级",[48,128057,128058],{},"\u003C\u002Fa>",[24,128060,128061,128062],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[48,128063,128064],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128066,128068],{"id":128067},"_45-注释标签","4.5 注释标签",[24,128070,128071,128074,128075],{},[48,128072,128073],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[48,128076,128077],{},"ctrl+\u002F",[14,128079,128081],{"id":128080},"_46-特殊字符","4.6 特殊字符",[24,128083,128084],{},"可以实现添加多个空格",[83,128086],{"style":85,"src":128087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":145,"searchDepth":193,"depth":193,"links":128089},[128090,128091,128092,128093,128094,128095],{"id":127907,"depth":193,"text":127908},{"id":127960,"depth":193,"text":127961},{"id":127998,"depth":193,"text":127999},{"id":128044,"depth":193,"text":128045},{"id":128067,"depth":193,"text":128068},{"id":128080,"depth":193,"text":128081},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127899,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128102,"title":128103,"body":128104,"description":1797,"extension":1798,"meta":128395,"navigation":1800,"path":128396,"seo":128397,"stem":128398,"__hash__":128399},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128105,"toc":128386},[128106,128109,128113,128116,128119,128122,128125,128128,128131,128134,128137,128140,128160,128166,128170,128173,128176,128179,128182,128185,128188,128192,128195,128198,128201,128204,128217,128222,128225,128228,128241,128244,128247,128250,128253,128256,128260,128263,128270,128273,128276,128279,128282,128285,128291,128294,128297,128303,128306,128309,128312,128318,128321,128324,128338,128345,128348,128351,128358,128367,128370,128373,128376,128380,128383],[10,128107,128103],{"id":128108},"_5-html表格列表与表单",[14,128110,128112],{"id":128111},"_51-表格标签","5.1 表格标签",[24,128114,128115],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[24,128117,128118],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[24,128120,128121],{},"②表格基本语法：",[83,128123],{"style":85,"src":128124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[24,128126,128127],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[83,128129],{"style":85,"src":128130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[24,128132,128133],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[83,128135],{"style":85,"src":128136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[24,128138,128139],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[24,128141,128142,128145,128146,128148,128149,128152,128153,128155,128156,128159],{},[48,128143,128144],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[48,128147,128144],{},"内部必须拥有",[48,128150,128151],{},"\u003Ctr>","标签，一般位于第一行，",[48,128154,128144],{},"比",[48,128157,128158],{},"\u003Cth>","范围广",[24,128161,128162,128165],{},[48,128163,128164],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128167,128169],{"id":128168},"_52-合并单元格","5.2 合并单元格",[24,128171,128172],{},"（1）合并单元格方式：",[24,128174,128175],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[24,128177,128178],{},"②跨列合并：colspan=\"合并单元格的个数\"",[24,128180,128181],{},"（2）目标单元格：",[24,128183,128184],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[24,128186,128187],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128189,128191],{"id":128190},"_53-列表标签","5.3 列表标签",[24,128193,128194],{},"（1）分类：无序列表、有序列表、自定义列表",[24,128196,128197],{},"①无序列表：",[83,128199],{"style":85,"src":128200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[24,128202,128203],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[24,128205,128206,128209,128210,128213,128214,128216],{},[48,128207,128208],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[48,128211,128212],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[48,128215,128208],{},"中输入其他标签或文字是不对的",[24,128218,128219,128221],{},[48,128220,128212],{},"之间相当于一个容器，可以容纳所有元素",[24,128223,128224],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[24,128226,128227],{},"在css中去除前边的小圆点采用如下代码:",[140,128229,128231],{"className":286,"code":128230,"language":288,"meta":145,"style":145},"list-style: none;\n",[48,128232,128233],{"__ignoreMap":145},[149,128234,128235,128238],{"class":151,"line":152},[149,128236,128237],{"class":159},"list-style",[149,128239,128240],{"class":155},": none;\n",[24,128242,128243],{},"②有序列表：",[83,128245],{"style":85,"src":128246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[24,128248,128249],{},"③自定义列表：",[83,128251],{"style":85,"src":128252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[83,128254],{"style":85,"src":128255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128257,128259],{"id":128258},"_54-表单标签","5.4 表单标签",[24,128261,128262],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[24,128264,128265,128266,128269],{},"（1）表单域：包含单元素的区域，",[48,128267,128268],{},"\u003Cform>","标签可以实现信息的收集和传递。",[83,128271],{"style":85,"src":128272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[24,128274,128275],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[24,128277,128278],{},"表单元素提交必须有name属性",[24,128280,128281],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[24,128283,128284],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[24,128286,78908,128287,128290],{},[48,128288,128289],{},"\u003Cinput>","输入表单元素",[83,128292],{"style":85,"src":128293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[83,128295],{"style":85,"src":128296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[24,128298,128299,128300],{},"单选按钮：",[48,128301,128302],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[83,128304],{"style":85,"src":128305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[24,128307,128308],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[83,128310],{"style":85,"src":128311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[24,128313,128314,128317],{},[31,128315,128316],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[24,128319,128320],{},"②select下拉表单元素：可以节约页面控件",[83,128322],{"style":85,"src":128323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[24,128325,128326,15508,128328,128331,128332,128334,128335,128337],{},[31,128327,89],{},[48,128329,128330],{},"\u003Cselect>","中至少包含一对",[48,128333,104394],{},"；在",[48,128336,104394],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[24,128339,128340,128341,128344],{},"③",[48,128342,128343],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[83,128346],{"style":85,"src":128347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[24,128349,128350],{},"3行20列",[14,128352,128354,128355,104373],{"id":128353},"_55-lable标签","5.5 ",[48,128356,128357],{},"\u003Clable>",[24,128359,128360,128361,128363,128364,128366],{},"它不是表单标签，但常常与表单标签搭配使用，",[48,128362,128357],{},"标签用于绑定一个表单标签，当点击",[48,128365,128357],{},"标签内的文本",[24,128368,128369],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[83,128371],{"style":85,"src":128372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[83,128374],{"style":85,"src":128375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128377,128379],{"id":128378},"_56-实例","5.6 实例",[83,128381],{"style":85,"src":128382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1783,128384,128385],{},"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":145,"searchDepth":193,"depth":193,"links":128387},[128388,128389,128390,128391,128392,128394],{"id":128111,"depth":193,"text":128112},{"id":128168,"depth":193,"text":128169},{"id":128190,"depth":193,"text":128191},{"id":128258,"depth":193,"text":128259},{"id":128353,"depth":193,"text":128393},"5.5 \u003Clable>标签",{"id":128378,"depth":193,"text":128379},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128103,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128401,"title":128402,"body":128403,"description":1797,"extension":1798,"meta":128951,"navigation":1800,"path":128952,"seo":128953,"stem":128954,"__hash__":128955},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128404,"toc":128926},[128405,128408,128412,128415,128418,128422,128425,128428,128431,128434,128437,128440,128443,128447,128450,128454,128457,128460,128463,128467,128470,128473,128476,128482,128485,128488,128491,128494,128497,128500,128503,128535,128539,128542,128545,128548,128552,128555,128558,128561,128564,128567,128571,128574,128577,128580,128584,128587,128591,128594,128598,128601,128606,128610,128613,128617,128620,128623,128626,128629,128656,128659,128663,128666,128669,128674,128677,128680,128684,128687,128692,128695,128698,128701,128705,128708,128711,128714,128718,128721,128724,128727,128731,128735,128738,128778,128781,128785,128792,128795,128799,128802,128848,128852,128855,128858,128861,128889,128893,128896,128923],[10,128406,128402],{"id":128407},"_6-css语法与文本样式",[14,128409,128411],{"id":128410},"_61-css语法规范","6.1 css语法规范",[24,128413,128414],{},"由两部分组成，选择器及一条或多条声明",[83,128416],{"style":85,"src":128417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[24,128419,128420],{},[31,128421,89],{},[24,128423,128424],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[24,128426,128427],{},"②属性与属性值以“键值对”的形式出现",[24,128429,128430],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[24,128432,128433],{},"④属性和属性值之间用英文“;”分开",[83,128435],{"style":85,"src":128436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[83,128438],{"style":85,"src":128439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[83,128441],{"style":85,"src":128442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128444,128446],{"id":128445},"_62-css选择器","6.2 css选择器",[24,128448,128449],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[19,128451,128453],{"id":128452},"_621-标签选择器","6.2.1 标签选择器",[24,128455,128456],{},"①优点：能快速为页面中同类型的标签统一设置样式",[24,128458,128459],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[83,128461],{"style":85,"src":128462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[19,128464,128466],{"id":128465},"_622-类选择器","6.2.2 类选择器",[24,128468,128469],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[24,128471,128472],{},"②样例",[83,128474],{"style":85,"src":128475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[24,128477,128478,128479,128481],{},"③ ",[31,128480,128316],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[24,128483,128484],{},"可以理解为给这个标签起了个名字，来表示；",[24,128486,128487],{},"长名称或词组可以使用横线来为选择器命名；",[24,128489,128490],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[24,128492,128493],{},"命名要有意义；",[83,128495],{"style":85,"src":128496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[24,128498,128499],{},"类选择器也可以指定特殊的元素p.center{}",[24,128501,128502],{},"p.center和.center都对",[140,128504,128506],{"className":286,"code":128505,"language":288,"meta":145,"style":145},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[48,128507,128508,128513,128521,128531],{"__ignoreMap":145},[149,128509,128510],{"class":151,"line":152},[149,128511,128512],{"class":295},"\u002F* 类选择器指定特殊元素 *\u002F\n",[149,128514,128515,128517,128519],{"class":151,"line":193},[149,128516,24],{"class":159},[149,128518,977],{"class":162},[149,128520,304],{"class":155},[149,128522,128523,128525,128527,128529],{"class":151,"line":235},[149,128524,72210],{"class":309},[149,128526,313],{"class":155},[149,128528,53293],{"class":309},[149,128530,841],{"class":155},[149,128532,128533],{"class":151,"line":340},[149,128534,355],{"class":155},[19,128536,128538],{"id":128537},"_623-多类名使用","6.2.3 多类名使用",[24,128540,128541],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[83,128543],{"style":85,"src":128544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[24,128546,128547],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[19,128549,128551],{"id":128550},"_624-id选择器","6.2.4 id选择器",[24,128553,128554],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[24,128556,128557],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[83,128559],{"style":85,"src":128560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[24,128562,128563],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[24,128565,128566],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[19,128568,128570],{"id":128569},"_625-通配符选择器","6.2.5 通配符选择器",[24,128572,128573],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[24,128575,128576],{},"* {",[24,128578,128579],{},"color=\"red\"}",[19,128581,128583],{"id":128582},"_626-总结","6.2.6 总结",[83,128585],{"style":85,"src":128586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128588,128590],{"id":128589},"_63-css字体属性","6.3 css字体属性",[24,128592,128593],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[19,128595,128597],{"id":128596},"_631-字体系列","6.3.1 字体系列",[24,128599,128600],{},"font-family: '宋体';",[24,128602,128603,128605],{},[31,128604,89],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[19,128607,128609],{"id":128608},"_632-字体大小","6.3.2 字体大小",[24,128611,128612],{},"font-size: 20px",[24,128614,128615,28182],{},[31,128616,128316],{},[24,128618,128619],{},"①px（像素）大小是网页的最常用单位",[24,128621,128622],{},"②谷歌浏览器默认为16px",[24,128624,128625],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[24,128627,128628],{},"④可以给body指定整个页面的大小：会自动引用",[140,128630,128632],{"className":286,"code":128631,"language":288,"meta":145,"style":145},"body {\n  font-size: 16px;\n}\n",[48,128633,128634,128640,128652],{"__ignoreMap":145},[149,128635,128636,128638],{"class":151,"line":152},[149,128637,53499],{"class":159},[149,128639,304],{"class":155},[149,128641,128642,128644,128646,128648,128650],{"class":151,"line":193},[149,128643,72310],{"class":309},[149,128645,313],{"class":155},[149,128647,2464],{"class":309},[149,128649,326],{"class":325},[149,128651,841],{"class":155},[149,128653,128654],{"class":151,"line":235},[149,128655,355],{"class":155},[24,128657,128658],{},"⑤标题标签比较特殊，需要单独指定大小",[19,128660,128662],{"id":128661},"_633-字体粗细","6.3.3 字体粗细",[24,128664,128665],{},"font-weight: bold;",[24,128667,128668],{},"font-weight: 100；",[24,128670,128671,128673],{},[31,128672,89],{}," ①粗体文字变细：尽量别用normal，多用数字",[24,128675,128676],{},"font-weight= 400;",[24,128678,128679],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[19,128681,128683],{"id":128682},"_634-文字样式","6.3.4 文字样式",[24,128685,128686],{},"font-style: normal；",[24,128688,128689,28182],{},[31,128690,128691],{},"属性值",[24,128693,128694],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[24,128696,128697],{},"②italic：浏览器会显示斜体的字体样式",[83,128699],{"style":85,"src":128700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[19,128702,128704],{"id":128703},"_635-字体符合属性","6.3.5 字体符合属性",[83,128706],{"style":85,"src":128707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[83,128709],{"style":85,"src":128710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[24,128712,128713],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[24,128715,128716,28182],{},[31,128717,128316],{},[24,128719,128720],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[24,128722,128723],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[24,128725,128726],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128728,128730],{"id":128729},"_64-css-test文本属性","6.4 css test文本属性",[19,128732,128734],{"id":128733},"_641-文本颜色","6.4.1 文本颜色",[24,128736,128737],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[140,128739,128741],{"className":286,"code":128740,"language":288,"meta":145,"style":145},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[48,128742,128743,128748,128754,128764,128769,128774],{"__ignoreMap":145},[149,128744,128745],{"class":151,"line":152},[149,128746,128747],{"class":295},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[149,128749,128750,128752],{"class":151,"line":193},[149,128751,24],{"class":159},[149,128753,304],{"class":155},[149,128755,128756,128758,128760,128762],{"class":151,"line":235},[149,128757,984],{"class":309},[149,128759,313],{"class":155},[149,128761,989],{"class":309},[149,128763,841],{"class":155},[149,128765,128766],{"class":151,"line":340},[149,128767,128768],{"class":295},"  \u002F* color: #ff0000; *\u002F\n",[149,128770,128771],{"class":151,"line":346},[149,128772,128773],{"class":295},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[149,128775,128776],{"class":151,"line":352},[149,128777,355],{"class":155},[83,128779],{"style":85,"src":128780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[19,128782,128784],{"id":128783},"_642-对齐文本","6.4.2 对齐文本",[24,128786,128787,128788,128791],{},"text-align属于用于设置元素内文本内容的 ",[31,128789,128790],{},"水平对齐"," 方式",[24,128793,128794],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[19,128796,128798],{"id":128797},"_643-装饰文本","6.4.3 装饰文本",[24,128800,128801],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[140,128803,128805],{"className":286,"code":128804,"language":288,"meta":145,"style":145},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[48,128806,128807,128813,128823,128827,128833,128844],{"__ignoreMap":145},[149,128808,128809,128811],{"class":151,"line":152},[149,128810,2102],{"class":159},[149,128812,304],{"class":155},[149,128814,128815,128817,128819,128821],{"class":151,"line":193},[149,128816,72186],{"class":309},[149,128818,313],{"class":155},[149,128820,56432],{"class":309},[149,128822,841],{"class":155},[149,128824,128825],{"class":151,"line":235},[149,128826,355],{"class":155},[149,128828,128829,128831],{"class":151,"line":340},[149,128830,24],{"class":159},[149,128832,304],{"class":155},[149,128834,128835,128837,128839,128842],{"class":151,"line":346},[149,128836,72186],{"class":309},[149,128838,313],{"class":155},[149,128840,128841],{"class":309},"underline",[149,128843,841],{"class":155},[149,128845,128846],{"class":151,"line":352},[149,128847,355],{"class":155},[19,128849,128851],{"id":128850},"_644-文本缩进","6.4.4 文本缩进",[24,128853,128854],{},"实现文本的第一行首行缩进自己指定的距离",[24,128856,128857],{},"20px往右边走；-20px往左边走",[24,128859,128860],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[140,128862,128864],{"className":286,"code":128863,"language":288,"meta":145,"style":145},"p {\n  text-indent: 2em;\n}\n",[48,128865,128866,128872,128885],{"__ignoreMap":145},[149,128867,128868,128870],{"class":151,"line":152},[149,128869,24],{"class":159},[149,128871,304],{"class":155},[149,128873,128874,128877,128879,128881,128883],{"class":151,"line":193},[149,128875,128876],{"class":309},"  text-indent",[149,128878,313],{"class":155},[149,128880,1045],{"class":309},[149,128882,25262],{"class":325},[149,128884,841],{"class":155},[149,128886,128887],{"class":151,"line":235},[149,128888,355],{"class":155},[19,128890,128892],{"id":128891},"_645-行间距","6.4.5 行间距",[24,128894,128895],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[140,128897,128899],{"className":286,"code":128898,"language":288,"meta":145,"style":145},"p {\n  line-height: 1.6;\n}\n",[48,128900,128901,128907,128919],{"__ignoreMap":145},[149,128902,128903,128905],{"class":151,"line":152},[149,128904,24],{"class":159},[149,128906,304],{"class":155},[149,128908,128909,128912,128914,128917],{"class":151,"line":193},[149,128910,128911],{"class":309},"  line-height",[149,128913,313],{"class":155},[149,128915,128916],{"class":309},"1.6",[149,128918,841],{"class":155},[149,128920,128921],{"class":151,"line":235},[149,128922,355],{"class":155},[1783,128924,128925],{},"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":145,"searchDepth":193,"depth":193,"links":128927},[128928,128929,128937,128944],{"id":128410,"depth":193,"text":128411},{"id":128445,"depth":193,"text":128446,"children":128930},[128931,128932,128933,128934,128935,128936],{"id":128452,"depth":235,"text":128453},{"id":128465,"depth":235,"text":128466},{"id":128537,"depth":235,"text":128538},{"id":128550,"depth":235,"text":128551},{"id":128569,"depth":235,"text":128570},{"id":128582,"depth":235,"text":128583},{"id":128589,"depth":193,"text":128590,"children":128938},[128939,128940,128941,128942,128943],{"id":128596,"depth":235,"text":128597},{"id":128608,"depth":235,"text":128609},{"id":128661,"depth":235,"text":128662},{"id":128682,"depth":235,"text":128683},{"id":128703,"depth":235,"text":128704},{"id":128729,"depth":193,"text":128730,"children":128945},[128946,128947,128948,128949,128950],{"id":128733,"depth":235,"text":128734},{"id":128783,"depth":235,"text":128784},{"id":128797,"depth":235,"text":128798},{"id":128850,"depth":235,"text":128851},{"id":128891,"depth":235,"text":128892},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128402,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128957,"title":128958,"body":128959,"description":1797,"extension":1798,"meta":129606,"navigation":1800,"path":129607,"seo":129608,"stem":129609,"__hash__":129610},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128960,"toc":129587},[128961,128964,128968,128972,129030,129034,129044,129047,129050,129054,129079,129083,129086,129089,129092,129095,129098,129102,129105,129108,129150,129153,129179,129185,129188,129192,129196,129202,129205,129208,129211,129214,129217,129220,129265,129269,129272,129275,129279,129283,129312,129315,129320,129323,129326,129329,129332,129336,129340,129343,129345,129348,129352,129355,129359,129362,129365,129368,129372,129376,129382,129392,129395,129398,129401,129404,129407,129530,129538,129546,129584],[10,128962,128958],{"id":128963},"_7-css引入方式与选择器进阶",[14,128965,128967],{"id":128966},"_71-css引入方式","7.1 css引入方式",[19,128969,128971],{"id":128970},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[140,128973,128975],{"className":142,"code":128974,"language":144,"meta":145,"style":145},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[48,128976,128977,128985,128992,129004,129017,129022],{"__ignoreMap":145},[149,128978,128979,128981,128983],{"class":151,"line":152},[149,128980,156],{"class":155},[149,128982,1783],{"class":159},[149,128984,190],{"class":155},[149,128986,128987,128990],{"class":151,"line":193},[149,128988,128989],{"class":159},"  h1",[149,128991,304],{"class":155},[149,128993,128994,128997,128999,129002],{"class":151,"line":235},[149,128995,128996],{"class":309},"    color",[149,128998,313],{"class":155},[149,129000,129001],{"class":309},"blue",[149,129003,841],{"class":155},[149,129005,129006,129009,129011,129013,129015],{"class":151,"line":340},[149,129007,129008],{"class":309},"    font-size",[149,129010,313],{"class":155},[149,129012,2661],{"class":309},[149,129014,326],{"class":325},[149,129016,841],{"class":155},[149,129018,129019],{"class":151,"line":346},[149,129020,129021],{"class":155},"  }\n",[149,129023,129024,129026,129028],{"class":151,"line":352},[149,129025,665],{"class":155},[149,129027,1783],{"class":159},[149,129029,190],{"class":155},[24,129031,129032,28182],{},[31,129033,128316],{},[24,129035,78908,129036,129039,129040,129043],{},[48,129037,129038],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[48,129041,129042],{},"\u003Chead>","标签中",[24,129045,129046],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[24,129048,129049],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[19,129051,129053],{"id":129052},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[140,129055,129057],{"className":142,"code":129056,"language":144,"meta":145,"style":145},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[48,129058,129059],{"__ignoreMap":145},[149,129060,129061,129063,129065,129067,129069,129072,129075,129077],{"class":151,"line":152},[149,129062,156],{"class":155},[149,129064,24],{"class":159},[149,129066,64314],{"class":162},[149,129068,166],{"class":155},[149,129070,129071],{"class":169},"\"color: red; font-size: 16px;\"",[149,129073,129074],{"class":155},">这是一个段落\u003C\u002F",[149,129076,24],{"class":159},[149,129078,190],{"class":155},[24,129080,129081,28182],{},[31,129082,128316],{},[24,129084,129085],{},"①style其实就是标签的属性",[24,129087,129088],{},"②在双引号中间，写法要符合css规范",[24,129090,129091],{},"③可以控制当前的标签设置样式",[24,129093,129094],{},"④书写繁琐，简单时才用",[24,129096,129097],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[19,129099,129101],{"id":129100},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[24,129103,129104],{},"使用最多，单独建一个css文件，然后html引用",[24,129106,129107],{},"①css文件部分： style.css",[140,129109,129111],{"className":286,"code":129110,"language":288,"meta":145,"style":145},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[48,129112,129113,129118,129124,129134,129146],{"__ignoreMap":145},[149,129114,129115],{"class":151,"line":152},[149,129116,129117],{"class":295},"\u002F* style.css *\u002F\n",[149,129119,129120,129122],{"class":151,"line":193},[149,129121,10],{"class":159},[149,129123,304],{"class":155},[149,129125,129126,129128,129130,129132],{"class":151,"line":235},[149,129127,984],{"class":309},[149,129129,313],{"class":155},[149,129131,129001],{"class":309},[149,129133,841],{"class":155},[149,129135,129136,129138,129140,129142,129144],{"class":151,"line":340},[149,129137,72310],{"class":309},[149,129139,313],{"class":155},[149,129141,2661],{"class":309},[149,129143,326],{"class":325},[149,129145,841],{"class":155},[149,129147,129148],{"class":151,"line":346},[149,129149,355],{"class":155},[24,129151,129152],{},"②html部分",[140,129154,129156],{"className":142,"code":129155,"language":144,"meta":145,"style":145},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[48,129157,129158],{"__ignoreMap":145},[149,129159,129160,129162,129164,129166,129168,129170,129172,129174,129177],{"class":151,"line":152},[149,129161,156],{"class":155},[149,129163,70689],{"class":159},[149,129165,70692],{"class":162},[149,129167,166],{"class":155},[149,129169,70697],{"class":169},[149,129171,62746],{"class":162},[149,129173,166],{"class":155},[149,129175,129176],{"class":169},"\"style.css\"",[149,129178,190],{"class":155},[24,129180,129181,129184],{},[48,129182,129183],{},"\u003Chr>","水平线标签（但是不常用！）",[24,129186,129187],{},"ctrl+0回到页面原来大小",[14,129189,129191],{"id":129190},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[19,129193,129195],{"id":129194},"_721-快速生成html","7.2.1 快速生成html",[24,129197,129198,129199],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[48,129200,129201],{},"\u003Cdiv>``\u003C\u002Fdiv>",[24,129203,129204],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[24,129206,129207],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[24,129209,129210],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[24,129212,129213],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[24,129215,129216],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[24,129218,129219],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[140,129221,129223],{"className":142,"code":129222,"language":144,"meta":145,"style":145},"\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",[48,129224,129225,129230,129235,129240,129245,129250,129255,129260],{"__ignoreMap":145},[149,129226,129227],{"class":151,"line":152},[149,129228,129229],{"class":295},"\u003C!-- Emmet 语法示例 -->\n",[149,129231,129232],{"class":151,"line":193},[149,129233,129234],{"class":295},"\u003C!-- div*3        → 生成3个div -->\n",[149,129236,129237],{"class":151,"line":235},[149,129238,129239],{"class":295},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[149,129241,129242],{"class":151,"line":340},[149,129243,129244],{"class":295},"\u003C!-- div+p        → 兄弟div和p -->\n",[149,129246,129247],{"class":151,"line":346},[149,129248,129249],{"class":295},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[149,129251,129252],{"class":151,"line":352},[149,129253,129254],{"class":295},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[149,129256,129257],{"class":151,"line":1021},[149,129258,129259],{"class":295},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[149,129261,129262],{"class":151,"line":1035},[149,129263,129264],{"class":295},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[19,129266,129268],{"id":129267},"_722-快速生成css","7.2.2 快速生成css",[24,129270,129271],{},"简写开头",[24,129273,129274],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129276,129278],{"id":129277},"_73-css复合选择器","7.3 css复合选择器",[19,129280,129282],{"id":129281},"_731-后代选择器","7.3.1 后代选择器",[140,129284,129286],{"className":286,"code":129285,"language":288,"meta":145,"style":145},".parent .child {\n  color: blue;\n}\n",[48,129287,129288,129298,129308],{"__ignoreMap":145},[149,129289,129290,129293,129296],{"class":151,"line":152},[149,129291,129292],{"class":162},".parent",[149,129294,129295],{"class":162}," .child",[149,129297,304],{"class":155},[149,129299,129300,129302,129304,129306],{"class":151,"line":193},[149,129301,984],{"class":309},[149,129303,313],{"class":155},[149,129305,129001],{"class":309},[149,129307,841],{"class":155},[149,129309,129310],{"class":151,"line":235},[149,129311,355],{"class":155},[24,129313,129314],{},"元素1 元素2 {样式声明}",[24,129316,129317],{},[31,129318,129319],{},"注意点:",[24,129321,129322],{},"①元素1和元素2中间用空格隔开",[24,129324,129325],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[24,129327,129328],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[24,129330,129331],{},"④元素1和元素2可以是任意基础选择器",[19,129333,129335],{"id":129334},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[24,129337,129338],{},[31,129339,129319],{},[24,129341,129342],{},"①元素1和元素2中间用大于号隔开",[24,129344,129325],{},[24,129346,129347],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[19,129349,129351],{"id":129350},"_733-并集选择器","7.3.3 并集选择器",[24,129353,129354],{},"元素1，元素2 {样式声明}",[24,129356,129357],{},[31,129358,129319],{},[24,129360,129361],{},"①元素1和元素2中间用逗号隔开",[24,129363,129364],{},"②逗号可以理解为和的意思",[24,129366,129367],{},"③并集选择器通常用于集体声明",[19,129369,129371],{"id":129370},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[24,129373,129374],{},[31,129375,129319],{},[24,129377,129378,129379,129381],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70689,129380],{},"－:visited－:hover－:active。",[24,129383,129384,129385,129388,129389,27449],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129386,129387],"hover",{}," 、 ",[129390,129391],"first-child",{},[24,129393,129394],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[24,129396,129397],{},"link对没访问的进行设置",[24,129399,129400],{},"vistied对已访问的进行改变",[24,129402,129403],{},"hover鼠标经过就会变",[24,129405,129406],{},"active常按(点)就会变",[140,129408,129410],{"className":286,"code":129409,"language":288,"meta":145,"style":145},"\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",[48,129411,129412,129417,129426,129436,129446,129450,129459,129470,129474,129482,129492,129502,129506,129515,129526],{"__ignoreMap":145},[149,129413,129414],{"class":151,"line":152},[149,129415,129416],{"class":295},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[149,129418,129419,129421,129424],{"class":151,"line":193},[149,129420,2102],{"class":159},[149,129422,129423],{"class":162},":link",[149,129425,304],{"class":155},[149,129427,129428,129430,129432,129434],{"class":151,"line":235},[149,129429,984],{"class":309},[149,129431,313],{"class":155},[149,129433,64057],{"class":309},[149,129435,841],{"class":155},[149,129437,129438,129440,129442,129444],{"class":151,"line":340},[149,129439,72186],{"class":309},[149,129441,313],{"class":155},[149,129443,56432],{"class":309},[149,129445,841],{"class":155},[149,129447,129448],{"class":151,"line":346},[149,129449,355],{"class":155},[149,129451,129452,129454,129457],{"class":151,"line":352},[149,129453,2102],{"class":159},[149,129455,129456],{"class":162},":visited",[149,129458,304],{"class":155},[149,129460,129461,129463,129465,129468],{"class":151,"line":1021},[149,129462,984],{"class":309},[149,129464,313],{"class":155},[149,129466,129467],{"class":309},"purple",[149,129469,841],{"class":155},[149,129471,129472],{"class":151,"line":1035},[149,129473,355],{"class":155},[149,129475,129476,129478,129480],{"class":151,"line":1054},[149,129477,2102],{"class":159},[149,129479,62630],{"class":162},[149,129481,304],{"class":155},[149,129483,129484,129486,129488,129490],{"class":151,"line":1072},[149,129485,984],{"class":309},[149,129487,313],{"class":155},[149,129489,56584],{"class":309},[149,129491,841],{"class":155},[149,129493,129494,129496,129498,129500],{"class":151,"line":1090},[149,129495,72186],{"class":309},[149,129497,313],{"class":155},[149,129499,128841],{"class":309},[149,129501,841],{"class":155},[149,129503,129504],{"class":151,"line":1633},[149,129505,355],{"class":155},[149,129507,129508,129510,129513],{"class":151,"line":1644},[149,129509,2102],{"class":159},[149,129511,129512],{"class":162},":active",[149,129514,304],{"class":155},[149,129516,129517,129519,129521,129524],{"class":151,"line":3348},[149,129518,984],{"class":309},[149,129520,313],{"class":155},[149,129522,129523],{"class":309},"green",[149,129525,841],{"class":155},[149,129527,129528],{"class":151,"line":3362},[149,129529,355],{"class":155},[19,129531,129533,129534,129537],{"id":129532},"_735-伪类选择器","7.3.5 ",[129535,129536],"focus",{},"伪类选择器",[24,129539,129540,129542,129543,129545],{},[129535,129541],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[48,129544,128289],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[140,129547,129549],{"className":286,"code":129548,"language":288,"meta":145,"style":145},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[48,129550,129551,129559,129570,129580],{"__ignoreMap":145},[149,129552,129553,129555,129557],{"class":151,"line":152},[149,129554,504],{"class":159},[149,129556,63589],{"class":162},[149,129558,304],{"class":155},[149,129560,129561,129564,129566,129568],{"class":151,"line":193},[149,129562,129563],{"class":309},"  border-color",[149,129565,313],{"class":155},[149,129567,56584],{"class":309},[149,129569,841],{"class":155},[149,129571,129572,129574,129576,129578],{"class":151,"line":235},[149,129573,72482],{"class":309},[149,129575,313],{"class":155},[149,129577,56432],{"class":309},[149,129579,841],{"class":155},[149,129581,129582],{"class":151,"line":340},[149,129583,355],{"class":155},[1783,129585,129586],{},"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":145,"searchDepth":193,"depth":193,"links":129588},[129589,129594,129598],{"id":128966,"depth":193,"text":128967,"children":129590},[129591,129592,129593],{"id":128970,"depth":235,"text":128971},{"id":129052,"depth":235,"text":129053},{"id":129100,"depth":235,"text":129101},{"id":129190,"depth":193,"text":129191,"children":129595},[129596,129597],{"id":129194,"depth":235,"text":129195},{"id":129267,"depth":235,"text":129268},{"id":129277,"depth":193,"text":129278,"children":129599},[129600,129601,129602,129603,129604],{"id":129281,"depth":235,"text":129282},{"id":129334,"depth":235,"text":129335},{"id":129350,"depth":235,"text":129351},{"id":129370,"depth":235,"text":129371},{"id":129532,"depth":235,"text":129605},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128958,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129612,"title":129613,"body":129614,"description":1797,"extension":1798,"meta":131535,"navigation":1800,"path":131536,"seo":131537,"stem":131538,"__hash__":131539},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129615,"toc":131509},[129616,129619,129623,129632,129636,129662,129667,129670,129673,129676,129679,129683,129686,129696,129704,129708,129743,129748,129751,129754,129757,129760,129764,129767,129776,129780,129793,129798,129801,129804,129807,129811,129814,129818,129821,129875,129878,129909,129912,129966,129970,129973,130139,130262,130265,130268,130271,130274,130278,130281,130285,130288,130291,130295,130298,130329,130356,130384,130387,130391,130417,130460,130464,130558,130561,130588,130591,130594,130597,130600,130603,130606,130609,130612,130615,130619,130676,130703,130707,130755,130759,130800,130802,130805,130808,130811,130814,130818,130910,130913,130916,130919,130923,131046,131246,131250,131254,131257,131260,131263,131267,131270,131273,131298,131301,131304,131307,131310,131313,131317,131325,131387,131390,131448,131451,131454,131457,131460,131463,131466,131469,131506],[10,129617,129613],{"id":129618},"_8-css显示模式与背景特性",[14,129620,129622],{"id":129621},"_81-css元素显示模式","8.1 css元素显示模式",[24,129624,129625,129626,129628,129629,129631],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[48,129627,127842],{},"自己占一行，比如一行可以放多个",[48,129630,127845],{},"，HTML 元素一般分为块元素和行内元素两种类型",[19,129633,129635],{"id":129634},"_811-块元素","8.1.1 块元素",[24,129637,129638,129639,129641,129642,2077,129645,2077,129647,2077,129649,2077,129652,2077,129655,129658,129659,129661],{},"常见的块元素有",[48,129640,127746],{},"~",[48,129643,129644],{},"\u003Ch6>",[48,129646,127772],{},[48,129648,127842],{},[48,129650,129651],{},"\u003Cul>",[48,129653,129654],{},"\u003Col>",[48,129656,129657],{},"\u003Cli>","等，其中 ",[48,129660,127842],{}," 标签是最典型的块元素",[24,129663,129664],{},[31,129665,129666],{},"块级元素的特点：",[24,129668,129669],{},"① 比较霸道，自己独占一行。",[24,129671,129672],{},"② 高度，宽度、外边距以及内边距都可以控制。",[24,129674,129675],{},"③ 宽度默认是容器（父级宽度）的100%。",[24,129677,129678],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[24,129680,129681],{},[31,129682,89],{},[24,129684,129685],{},"①文字类的元素内不能使用块级元素",[24,129687,78931,129688,129690,129691,129693,129694],{},[48,129689,127772],{}," 标签主要用于存放文字，因此 ",[48,129692,127772],{}," 里面不能放块级元素，特别是不能放",[48,129695,127842],{},[24,129697,129698,129699,129641,129701,129703],{},"⑥同理， ",[48,129700,127746],{},[48,129702,129644],{},"等都是文字类块级标签，里面也不能放其他块级元素",[19,129705,129707],{"id":129706},"_812-行内元素","8.1.2 行内元素",[24,129709,129710,129711,2077,129713,2077,129716,2077,129719,2077,129722,2077,129725,2077,129728,2077,129731,2077,129734,2077,129737,129739,129740,129742],{},"常见的行内元素有 ",[48,129712,128004],{},[48,129714,129715],{},"\u003Cstrong>",[48,129717,129718],{},"\u003Cb>",[48,129720,129721],{},"\u003Cem>",[48,129723,129724],{},"\u003Ci>",[48,129726,129727],{},"\u003Cdel>",[48,129729,129730],{},"\u003Cs>",[48,129732,129733],{},"\u003Cins>",[48,129735,129736],{},"\u003Cu>",[48,129738,127845],{}," 等，其中 ",[48,129741,127845],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[24,129744,129745],{},[31,129746,129747],{},"特点：",[24,129749,129750],{},"① 相邻行内元素在一行上，一行可以显示多个。",[24,129752,129753],{},"② 高、宽直接设置是无效的。",[24,129755,129756],{},"③ 默认宽度就是它本身内容的宽度。",[24,129758,129759],{},"④ 行内元素只能容纳文本或其他行内元素。",[24,129761,129762],{},[31,129763,89],{},[24,129765,129766],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[24,129768,129769,129770,129772,129773,129775],{},"②特殊情况链接 ",[48,129771,128004],{}," 里面可以放块级元素，但是给 ",[48,129774,128004],{}," 转换一下块级模式最安全",[19,129777,129779],{"id":129778},"_813-行内块元素","8.1.3 行内块元素",[24,129781,129782,129783,2077,129786,2077,129789,129792],{},"在行内元素中有几个特殊的标签 —— ",[48,129784,129785],{},"\u003Cimg \u002F>",[48,129787,129788],{},"\u003Cinput \u002F>",[48,129790,129791],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[24,129794,129795],{},[31,129796,129797],{},"行内块元素的特点：",[24,129799,129800],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[24,129802,129803],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[24,129805,129806],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[19,129808,129810],{"id":129809},"_814-总结","8.1.4 总结",[83,129812],{"style":85,"src":129813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[19,129815,129817],{"id":129816},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[24,129819,129820],{},"①转换为块元素：display:block;",[140,129822,129824],{"className":286,"code":129823,"language":288,"meta":145,"style":145},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[48,129825,129826,129831,129837,129847,129859,129871],{"__ignoreMap":145},[149,129827,129828],{"class":151,"line":152},[149,129829,129830],{"class":295},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[149,129832,129833,129835],{"class":151,"line":193},[149,129834,2102],{"class":159},[149,129836,304],{"class":155},[149,129838,129839,129841,129843,129845],{"class":151,"line":235},[149,129840,1389],{"class":309},[149,129842,313],{"class":155},[149,129844,1394],{"class":309},[149,129846,841],{"class":155},[149,129848,129849,129851,129853,129855,129857],{"class":151,"line":340},[149,129850,72252],{"class":309},[149,129852,313],{"class":155},[149,129854,322],{"class":309},[149,129856,326],{"class":325},[149,129858,841],{"class":155},[149,129860,129861,129863,129865,129867,129869],{"class":151,"line":346},[149,129862,72472],{"class":309},[149,129864,313],{"class":155},[149,129866,2264],{"class":309},[149,129868,326],{"class":325},[149,129870,841],{"class":155},[149,129872,129873],{"class":151,"line":352},[149,129874,355],{"class":155},[24,129876,129877],{},"②转换为行内元素：display:inline;",[140,129879,129881],{"className":286,"code":129880,"language":288,"meta":145,"style":145},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[48,129882,129883,129888,129894,129905],{"__ignoreMap":145},[149,129884,129885],{"class":151,"line":152},[149,129886,129887],{"class":295},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[149,129889,129890,129892],{"class":151,"line":193},[149,129891,301],{"class":159},[149,129893,304],{"class":155},[149,129895,129896,129898,129900,129903],{"class":151,"line":235},[149,129897,1389],{"class":309},[149,129899,313],{"class":155},[149,129901,129902],{"class":309},"inline",[149,129904,841],{"class":155},[149,129906,129907],{"class":151,"line":340},[149,129908,355],{"class":155},[24,129910,129911],{},"③转换为行内块：display:inline-block;",[140,129913,129915],{"className":286,"code":129914,"language":288,"meta":145,"style":145},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[48,129916,129917,129922,129928,129938,129950,129962],{"__ignoreMap":145},[149,129918,129919],{"class":151,"line":152},[149,129920,129921],{"class":295},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[149,129923,129924,129926],{"class":151,"line":193},[149,129925,149],{"class":159},[149,129927,304],{"class":155},[149,129929,129930,129932,129934,129936],{"class":151,"line":235},[149,129931,1389],{"class":309},[149,129933,313],{"class":155},[149,129935,74065],{"class":309},[149,129937,841],{"class":155},[149,129939,129940,129942,129944,129946,129948],{"class":151,"line":340},[149,129941,72252],{"class":309},[149,129943,313],{"class":155},[149,129945,2475],{"class":309},[149,129947,326],{"class":325},[149,129949,841],{"class":155},[149,129951,129952,129954,129956,129958,129960],{"class":151,"line":346},[149,129953,72472],{"class":309},[149,129955,313],{"class":155},[149,129957,2810],{"class":309},[149,129959,326],{"class":325},[149,129961,841],{"class":155},[149,129963,129964],{"class":151,"line":352},[149,129965,355],{"class":155},[19,129967,129969],{"id":129968},"_816-小米侧边栏","8.1.6 小米侧边栏",[83,129971],{"style":85,"src":129972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[140,129974,129976],{"className":142,"code":129975,"language":144,"meta":145,"style":145},"\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",[48,129977,129978,129983,129998,130017,130036,130055,130074,130093,130112,130131],{"__ignoreMap":145},[149,129979,129980],{"class":151,"line":152},[149,129981,129982],{"class":295},"\u003C!-- 小米侧边栏案例 -->\n",[149,129984,129985,129987,129989,129991,129993,129996],{"class":151,"line":193},[149,129986,156],{"class":155},[149,129988,301],{"class":159},[149,129990,55184],{"class":162},[149,129992,166],{"class":155},[149,129994,129995],{"class":169},"\"sidebar\"",[149,129997,190],{"class":155},[149,129999,130000,130002,130004,130006,130008,130010,130013,130015],{"class":151,"line":235},[149,130001,587],{"class":155},[149,130003,2102],{"class":159},[149,130005,62746],{"class":162},[149,130007,166],{"class":155},[149,130009,62751],{"class":169},[149,130011,130012],{"class":155},">手机 电话卡\u003C\u002F",[149,130014,2102],{"class":159},[149,130016,190],{"class":155},[149,130018,130019,130021,130023,130025,130027,130029,130032,130034],{"class":151,"line":340},[149,130020,587],{"class":155},[149,130022,2102],{"class":159},[149,130024,62746],{"class":162},[149,130026,166],{"class":155},[149,130028,62751],{"class":169},[149,130030,130031],{"class":155},">电视 盒子\u003C\u002F",[149,130033,2102],{"class":159},[149,130035,190],{"class":155},[149,130037,130038,130040,130042,130044,130046,130048,130051,130053],{"class":151,"line":346},[149,130039,587],{"class":155},[149,130041,2102],{"class":159},[149,130043,62746],{"class":162},[149,130045,166],{"class":155},[149,130047,62751],{"class":169},[149,130049,130050],{"class":155},">笔记本 平板\u003C\u002F",[149,130052,2102],{"class":159},[149,130054,190],{"class":155},[149,130056,130057,130059,130061,130063,130065,130067,130070,130072],{"class":151,"line":352},[149,130058,587],{"class":155},[149,130060,2102],{"class":159},[149,130062,62746],{"class":162},[149,130064,166],{"class":155},[149,130066,62751],{"class":169},[149,130068,130069],{"class":155},">出行 穿戴\u003C\u002F",[149,130071,2102],{"class":159},[149,130073,190],{"class":155},[149,130075,130076,130078,130080,130082,130084,130086,130089,130091],{"class":151,"line":1021},[149,130077,587],{"class":155},[149,130079,2102],{"class":159},[149,130081,62746],{"class":162},[149,130083,166],{"class":155},[149,130085,62751],{"class":169},[149,130087,130088],{"class":155},">智能 路由器\u003C\u002F",[149,130090,2102],{"class":159},[149,130092,190],{"class":155},[149,130094,130095,130097,130099,130101,130103,130105,130108,130110],{"class":151,"line":1035},[149,130096,587],{"class":155},[149,130098,2102],{"class":159},[149,130100,62746],{"class":162},[149,130102,166],{"class":155},[149,130104,62751],{"class":169},[149,130106,130107],{"class":155},">健康 儿童\u003C\u002F",[149,130109,2102],{"class":159},[149,130111,190],{"class":155},[149,130113,130114,130116,130118,130120,130122,130124,130127,130129],{"class":151,"line":1054},[149,130115,587],{"class":155},[149,130117,2102],{"class":159},[149,130119,62746],{"class":162},[149,130121,166],{"class":155},[149,130123,62751],{"class":169},[149,130125,130126],{"class":155},">耳机 音响\u003C\u002F",[149,130128,2102],{"class":159},[149,130130,190],{"class":155},[149,130132,130133,130135,130137],{"class":151,"line":1072},[149,130134,665],{"class":155},[149,130136,301],{"class":159},[149,130138,190],{"class":155},[140,130140,130142],{"className":286,"code":130141,"language":288,"meta":145,"style":145},".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",[48,130143,130144,130153,130163,130176,130188,130200,130212,130222,130233,130237,130247,130258],{"__ignoreMap":145},[149,130145,130146,130149,130151],{"class":151,"line":152},[149,130147,130148],{"class":162},".sidebar",[149,130150,3123],{"class":159},[149,130152,304],{"class":155},[149,130154,130155,130157,130159,130161],{"class":151,"line":193},[149,130156,1389],{"class":309},[149,130158,313],{"class":155},[149,130160,1394],{"class":309},[149,130162,841],{"class":155},[149,130164,130165,130167,130169,130172,130174],{"class":151,"line":235},[149,130166,72252],{"class":309},[149,130168,313],{"class":155},[149,130170,130171],{"class":309},"234",[149,130173,326],{"class":325},[149,130175,841],{"class":155},[149,130177,130178,130180,130182,130184,130186],{"class":151,"line":340},[149,130179,72472],{"class":309},[149,130181,313],{"class":155},[149,130183,2315],{"class":309},[149,130185,326],{"class":325},[149,130187,841],{"class":155},[149,130189,130190,130192,130194,130196,130198],{"class":151,"line":346},[149,130191,128911],{"class":309},[149,130193,313],{"class":155},[149,130195,2315],{"class":309},[149,130197,326],{"class":325},[149,130199,841],{"class":155},[149,130201,130202,130204,130206,130208,130210],{"class":151,"line":352},[149,130203,72507],{"class":309},[149,130205,313],{"class":155},[149,130207,2810],{"class":309},[149,130209,326],{"class":325},[149,130211,841],{"class":155},[149,130213,130214,130216,130218,130220],{"class":151,"line":1021},[149,130215,984],{"class":309},[149,130217,313],{"class":155},[149,130219,62533],{"class":309},[149,130221,841],{"class":155},[149,130223,130224,130226,130228,130231],{"class":151,"line":1035},[149,130225,72562],{"class":309},[149,130227,313],{"class":155},[149,130229,130230],{"class":309},"#55585a",[149,130232,841],{"class":155},[149,130234,130235],{"class":151,"line":1054},[149,130236,355],{"class":155},[149,130238,130239,130241,130243,130245],{"class":151,"line":1072},[149,130240,130148],{"class":162},[149,130242,3123],{"class":159},[149,130244,62630],{"class":162},[149,130246,304],{"class":155},[149,130248,130249,130251,130253,130256],{"class":151,"line":1090},[149,130250,72562],{"class":309},[149,130252,313],{"class":155},[149,130254,130255],{"class":309},"#ff6700",[149,130257,841],{"class":155},[149,130259,130260],{"class":151,"line":1633},[149,130261,355],{"class":155},[83,130263],{"style":85,"src":130264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[24,130266,130267],{},"行高=盒子高度：实现文字的垂直居中",[24,130269,130270],{},"原理讲解：",[83,130272],{"style":85,"src":130273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130275,130277],{"id":130276},"_82-css背景","8.2 css背景",[24,130279,130280],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[19,130282,130284],{"id":130283},"_821-背景颜色","8.2.1 背景颜色",[24,130286,130287],{},"background-color:颜色值;",[24,130289,130290],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[19,130292,130294],{"id":130293},"_822-背景图片","8.2.2 背景图片",[24,130296,130297],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[140,130299,130301],{"className":286,"code":130300,"language":288,"meta":145,"style":145},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[48,130302,130303,130309,130325],{"__ignoreMap":145},[149,130304,130305,130307],{"class":151,"line":152},[149,130306,301],{"class":159},[149,130308,304],{"class":155},[149,130310,130311,130314,130316,130318,130320,130323],{"class":151,"line":193},[149,130312,130313],{"class":309},"  background-image",[149,130315,313],{"class":155},[149,130317,63415],{"class":309},[149,130319,319],{"class":155},[149,130321,130322],{"class":6932},"images\u002Fbg.png",[149,130324,337],{"class":155},[149,130326,130327],{"class":151,"line":235},[149,130328,355],{"class":155},[2003,130330,130331,130340],{},[2006,130332,130333],{},[2009,130334,130335,130338],{},[2012,130336,130337],{"align":1566},"参数值",[2012,130339,104376],{"align":1566},[2049,130341,130342,130349],{},[2009,130343,130344,130346],{},[2054,130345,56432],{"align":1566},[2054,130347,130348],{"align":1566},"无背景图（默认的）",[2009,130350,130351,130353],{},[2054,130352,63415],{"align":1566},[2054,130354,130355],{"align":1566},"使用绝对或相对地址指定背景图像",[140,130357,130358],{"className":286,"code":130300,"language":288,"meta":145,"style":145},[48,130359,130360,130366,130380],{"__ignoreMap":145},[149,130361,130362,130364],{"class":151,"line":152},[149,130363,301],{"class":159},[149,130365,304],{"class":155},[149,130367,130368,130370,130372,130374,130376,130378],{"class":151,"line":193},[149,130369,130313],{"class":309},[149,130371,313],{"class":155},[149,130373,63415],{"class":309},[149,130375,319],{"class":155},[149,130377,130322],{"class":6932},[149,130379,337],{"class":155},[149,130381,130382],{"class":151,"line":235},[149,130383,355],{"class":155},[24,130385,130386],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[19,130388,130390],{"id":130389},"_823-背景平铺","8.2.3 背景平铺",[140,130392,130394],{"className":286,"code":130393,"language":288,"meta":145,"style":145},"div {\n  background-repeat: no-repeat;\n}\n",[48,130395,130396,130402,130413],{"__ignoreMap":145},[149,130397,130398,130400],{"class":151,"line":152},[149,130399,301],{"class":159},[149,130401,304],{"class":155},[149,130403,130404,130407,130409,130411],{"class":151,"line":193},[149,130405,130406],{"class":309},"  background-repeat",[149,130408,313],{"class":155},[149,130410,63425],{"class":309},[149,130412,841],{"class":155},[149,130414,130415],{"class":151,"line":235},[149,130416,355],{"class":155},[2003,130418,130419,130427],{},[2006,130420,130421],{},[2009,130422,130423,130425],{},[2012,130424,130337],{"align":1566},[2012,130426,104376],{"align":1566},[2049,130428,130429,130437,130444,130452],{},[2009,130430,130431,130434],{},[2054,130432,130433],{"align":1566},"repeat",[2054,130435,130436],{"align":1566},"背景图像在纵向和横向上平铺（默认的）",[2009,130438,130439,130441],{},[2054,130440,63425],{"align":1566},[2054,130442,130443],{"align":1566},"背景图像不平铺",[2009,130445,130446,130449],{},[2054,130447,130448],{"align":1566},"repeat-x",[2054,130450,130451],{"align":1566},"背景图像在横向上平铺",[2009,130453,130454,130457],{},[2054,130455,130456],{"align":1566},"repeat-y",[2054,130458,130459],{"align":1566},"背景图像在纵向平铺",[19,130461,130463],{"id":130462},"_824-背景图片位置","8.2.4 背景图片位置",[140,130465,130467],{"className":286,"code":130466,"language":288,"meta":145,"style":145},"\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",[48,130468,130469,130474,130480,130494,130498,130503,130509,130525,130529,130534,130540,130554],{"__ignoreMap":145},[149,130470,130471],{"class":151,"line":152},[149,130472,130473],{"class":295},"\u002F* 方位名词 *\u002F\n",[149,130475,130476,130478],{"class":151,"line":193},[149,130477,301],{"class":159},[149,130479,304],{"class":155},[149,130481,130482,130485,130487,130489,130492],{"class":151,"line":235},[149,130483,130484],{"class":309},"  background-position",[149,130486,313],{"class":155},[149,130488,53293],{"class":309},[149,130490,130491],{"class":309}," top",[149,130493,841],{"class":155},[149,130495,130496],{"class":151,"line":340},[149,130497,355],{"class":155},[149,130499,130500],{"class":151,"line":346},[149,130501,130502],{"class":295},"\u002F* 精确单位 *\u002F\n",[149,130504,130505,130507],{"class":151,"line":352},[149,130506,301],{"class":159},[149,130508,304],{"class":155},[149,130510,130511,130513,130515,130517,130519,130521,130523],{"class":151,"line":1021},[149,130512,130484],{"class":309},[149,130514,313],{"class":155},[149,130516,2561],{"class":309},[149,130518,326],{"class":325},[149,130520,59195],{"class":309},[149,130522,326],{"class":325},[149,130524,841],{"class":155},[149,130526,130527],{"class":151,"line":1035},[149,130528,355],{"class":155},[149,130530,130531],{"class":151,"line":1054},[149,130532,130533],{"class":295},"\u002F* 混合单位 *\u002F\n",[149,130535,130536,130538],{"class":151,"line":1072},[149,130537,301],{"class":159},[149,130539,304],{"class":155},[149,130541,130542,130544,130546,130548,130550,130552],{"class":151,"line":1090},[149,130543,130484],{"class":309},[149,130545,313],{"class":155},[149,130547,2561],{"class":309},[149,130549,326],{"class":325},[149,130551,18854],{"class":309},[149,130553,841],{"class":155},[149,130555,130556],{"class":151,"line":1633},[149,130557,355],{"class":155},[24,130559,130560],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[2003,130562,130563,130571],{},[2006,130564,130565],{},[2009,130566,130567,130569],{},[2012,130568,130337],{"align":1566},[2012,130570,27578],{"align":1566},[2049,130572,130573,130580],{},[2009,130574,130575,130577],{},[2054,130576,53667],{"align":1566},[2054,130578,130579],{"align":1566},"百分数|由浮点数和单位标识符组成的长度值",[2009,130581,130582,130585],{},[2054,130583,130584],{"align":1566},"position",[2054,130586,130587],{"align":1566},"top|center|bottom|left|center|right 方位名词",[24,130589,130590],{},"其他说明：",[24,130592,130593],{},"①参数是方位名词",[24,130595,130596],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[24,130598,130599],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[24,130601,130602],{},"②参数是精确单位",[24,130604,130605],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[24,130607,130608],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[24,130610,130611],{},"③参数是混合单位",[24,130613,130614],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[19,130616,130618],{"id":130617},"_825-背景图片固定","8.2.5 背景图片固定",[140,130620,130622],{"className":286,"code":130621,"language":288,"meta":145,"style":145},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[48,130623,130624,130629,130635,130647,130651,130656,130662,130672],{"__ignoreMap":145},[149,130625,130626],{"class":151,"line":152},[149,130627,130628],{"class":295},"\u002F* 背景滚动（默认） *\u002F\n",[149,130630,130631,130633],{"class":151,"line":193},[149,130632,301],{"class":159},[149,130634,304],{"class":155},[149,130636,130637,130640,130642,130645],{"class":151,"line":235},[149,130638,130639],{"class":309},"  background-attachment",[149,130641,313],{"class":155},[149,130643,130644],{"class":309},"scroll",[149,130646,841],{"class":155},[149,130648,130649],{"class":151,"line":340},[149,130650,355],{"class":155},[149,130652,130653],{"class":151,"line":346},[149,130654,130655],{"class":295},"\u002F* 背景固定 *\u002F\n",[149,130657,130658,130660],{"class":151,"line":352},[149,130659,301],{"class":159},[149,130661,304],{"class":155},[149,130663,130664,130666,130668,130670],{"class":151,"line":1021},[149,130665,130639],{"class":309},[149,130667,313],{"class":155},[149,130669,87914],{"class":309},[149,130671,841],{"class":155},[149,130673,130674],{"class":151,"line":1035},[149,130675,355],{"class":155},[2003,130677,130678,130687],{},[2006,130679,130680],{},[2009,130681,130682,130685],{},[2012,130683,130684],{"align":1566},"参数",[2012,130686,104376],{"align":1566},[2049,130688,130689,130696],{},[2009,130690,130691,130693],{},[2054,130692,130644],{"align":1566},[2054,130694,130695],{"align":1566},"背景图像是随对象内容滚动",[2009,130697,130698,130700],{},[2054,130699,87914],{"align":1566},[2054,130701,130702],{"align":1566},"背景图像固定",[19,130704,130706],{"id":130705},"_826-背景样式合写","8.2.6 背景样式合写",[140,130708,130710],{"className":286,"code":130709,"language":288,"meta":145,"style":145},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[48,130711,130712,130717,130723,130751],{"__ignoreMap":145},[149,130713,130714],{"class":151,"line":152},[149,130715,130716],{"class":295},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[149,130718,130719,130721],{"class":151,"line":193},[149,130720,301],{"class":159},[149,130722,304],{"class":155},[149,130724,130725,130727,130729,130731,130734,130736,130738,130740,130742,130745,130747,130749],{"class":151,"line":235},[149,130726,72295],{"class":309},[149,130728,313],{"class":155},[149,130730,62533],{"class":309},[149,130732,130733],{"class":309}," url",[149,130735,319],{"class":155},[149,130737,130322],{"class":6932},[149,130739,15427],{"class":155},[149,130741,63425],{"class":309},[149,130743,130744],{"class":309}," fixed",[149,130746,18854],{"class":309},[149,130748,130491],{"class":309},[149,130750,841],{"class":155},[149,130752,130753],{"class":151,"line":340},[149,130754,355],{"class":155},[19,130756,130758],{"id":130757},"_827-背景色半透明","8.2.7 背景色半透明",[140,130760,130762],{"className":286,"code":130761,"language":288,"meta":145,"style":145},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[48,130763,130764,130770,130796],{"__ignoreMap":145},[149,130765,130766,130768],{"class":151,"line":152},[149,130767,301],{"class":159},[149,130769,304],{"class":155},[149,130771,130772,130774,130776,130778,130780,130782,130784,130786,130788,130790,130792,130794],{"class":151,"line":193},[149,130773,72295],{"class":309},[149,130775,313],{"class":155},[149,130777,56805],{"class":309},[149,130779,319],{"class":155},[149,130781,2056],{"class":309},[149,130783,329],{"class":155},[149,130785,2056],{"class":309},[149,130787,329],{"class":155},[149,130789,2056],{"class":309},[149,130791,329],{"class":155},[149,130793,102201],{"class":309},[149,130795,337],{"class":155},[149,130797,130798],{"class":151,"line":235},[149,130799,355],{"class":155},[24,130801,101076],{},[24,130803,130804],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[24,130806,130807],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[24,130809,130810],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[24,130812,130813],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[19,130815,130817],{"id":130816},"_828-总结","8.2.8 总结",[2003,130819,130820,130831],{},[2006,130821,130822],{},[2009,130823,130824,130827,130829],{},[2012,130825,130826],{"align":1566},"属性",[2012,130828,104376],{"align":1566},[2012,130830,2017],{"align":1566},[2049,130832,130833,130844,130855,130866,130877,130888,130899],{},[2009,130834,130835,130838,130841],{},[2054,130836,130837],{"align":1566},"background-color",[2054,130839,130840],{"align":1566},"背景颜色",[2054,130842,130843],{"align":1566},"预定义的颜色值\u002F十六进制\u002FRGB代码",[2009,130845,130846,130849,130852],{},[2054,130847,130848],{"align":1566},"background-image",[2054,130850,130851],{"align":1566},"背景图片",[2054,130853,130854],{"align":1566},"url(图片路径)",[2009,130856,130857,130860,130863],{},[2054,130858,130859],{"align":1566},"background-repeat",[2054,130861,130862],{"align":1566},"是否平铺",[2054,130864,130865],{"align":1566},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[2009,130867,130868,130871,130874],{},[2054,130869,130870],{"align":1566},"background-position",[2054,130872,130873],{"align":1566},"背景位置",[2054,130875,130876],{"align":1566},"length\u002Fposition 分别是x和y坐标",[2009,130878,130879,130882,130885],{},[2054,130880,130881],{"align":1566},"background-attachment",[2054,130883,130884],{"align":1566},"背景附着",[2054,130886,130887],{"align":1566},"scroll(背景滚动) \u002Ffixed (背景固定)",[2009,130889,130890,130893,130896],{},[2054,130891,130892],{"align":1566},"背景简写",[2054,130894,130895],{"align":1566},"书写更简单",[2054,130897,130898],{"align":1566},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[2009,130900,130901,130904,130907],{},[2054,130902,130903],{"align":1566},"背景半透明",[2054,130905,130906],{"align":1566},"背景颜色半透明",[2054,130908,130909],{"align":1566},"background: rgba(0,0,0.3); 后面必须是4个值",[24,130911,130912],{},"颜色渐变：",[83,130914],{"style":85,"src":130915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[83,130917],{"style":85,"src":130918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[19,130920,130922],{"id":130921},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[140,130924,130926],{"className":142,"code":130925,"language":144,"meta":145,"style":145},"\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",[48,130927,130928,130943,130962,130981,131000,131019,131038],{"__ignoreMap":145},[149,130929,130930,130932,130934,130936,130938,130941],{"class":151,"line":152},[149,130931,156],{"class":155},[149,130933,301],{"class":159},[149,130935,55184],{"class":162},[149,130937,166],{"class":155},[149,130939,130940],{"class":169},"\"nav\"",[149,130942,190],{"class":155},[149,130944,130945,130947,130949,130951,130953,130955,130958,130960],{"class":151,"line":193},[149,130946,587],{"class":155},[149,130948,2102],{"class":159},[149,130950,62746],{"class":162},[149,130952,166],{"class":155},[149,130954,62751],{"class":169},[149,130956,130957],{"class":155},">五彩导航1\u003C\u002F",[149,130959,2102],{"class":159},[149,130961,190],{"class":155},[149,130963,130964,130966,130968,130970,130972,130974,130977,130979],{"class":151,"line":235},[149,130965,587],{"class":155},[149,130967,2102],{"class":159},[149,130969,62746],{"class":162},[149,130971,166],{"class":155},[149,130973,62751],{"class":169},[149,130975,130976],{"class":155},">五彩导航2\u003C\u002F",[149,130978,2102],{"class":159},[149,130980,190],{"class":155},[149,130982,130983,130985,130987,130989,130991,130993,130996,130998],{"class":151,"line":340},[149,130984,587],{"class":155},[149,130986,2102],{"class":159},[149,130988,62746],{"class":162},[149,130990,166],{"class":155},[149,130992,62751],{"class":169},[149,130994,130995],{"class":155},">五彩导航3\u003C\u002F",[149,130997,2102],{"class":159},[149,130999,190],{"class":155},[149,131001,131002,131004,131006,131008,131010,131012,131015,131017],{"class":151,"line":346},[149,131003,587],{"class":155},[149,131005,2102],{"class":159},[149,131007,62746],{"class":162},[149,131009,166],{"class":155},[149,131011,62751],{"class":169},[149,131013,131014],{"class":155},">五彩导航4\u003C\u002F",[149,131016,2102],{"class":159},[149,131018,190],{"class":155},[149,131020,131021,131023,131025,131027,131029,131031,131034,131036],{"class":151,"line":352},[149,131022,587],{"class":155},[149,131024,2102],{"class":159},[149,131026,62746],{"class":162},[149,131028,166],{"class":155},[149,131030,62751],{"class":169},[149,131032,131033],{"class":155},">五彩导航5\u003C\u002F",[149,131035,2102],{"class":159},[149,131037,190],{"class":155},[149,131039,131040,131042,131044],{"class":151,"line":1021},[149,131041,665],{"class":155},[149,131043,301],{"class":159},[149,131045,190],{"class":155},[140,131047,131049],{"className":286,"code":131048,"language":288,"meta":145,"style":145},".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",[48,131050,131051,131060,131070,131082,131094,131104,131116,131126,131130,131154,131177,131200,131223],{"__ignoreMap":145},[149,131052,131053,131056,131058],{"class":151,"line":152},[149,131054,131055],{"class":162},".nav",[149,131057,3123],{"class":159},[149,131059,304],{"class":155},[149,131061,131062,131064,131066,131068],{"class":151,"line":193},[149,131063,1389],{"class":309},[149,131065,313],{"class":155},[149,131067,74065],{"class":309},[149,131069,841],{"class":155},[149,131071,131072,131074,131076,131078,131080],{"class":151,"line":235},[149,131073,72252],{"class":309},[149,131075,313],{"class":155},[149,131077,2678],{"class":309},[149,131079,326],{"class":325},[149,131081,841],{"class":155},[149,131083,131084,131086,131088,131090,131092],{"class":151,"line":340},[149,131085,72472],{"class":309},[149,131087,313],{"class":155},[149,131089,2717],{"class":309},[149,131091,326],{"class":325},[149,131093,841],{"class":155},[149,131095,131096,131098,131100,131102],{"class":151,"line":346},[149,131097,72210],{"class":309},[149,131099,313],{"class":155},[149,131101,53293],{"class":309},[149,131103,841],{"class":155},[149,131105,131106,131108,131110,131112,131114],{"class":151,"line":352},[149,131107,128911],{"class":309},[149,131109,313],{"class":155},[149,131111,2717],{"class":309},[149,131113,326],{"class":325},[149,131115,841],{"class":155},[149,131117,131118,131120,131122,131124],{"class":151,"line":1021},[149,131119,984],{"class":309},[149,131121,313],{"class":155},[149,131123,62533],{"class":309},[149,131125,841],{"class":155},[149,131127,131128],{"class":151,"line":1035},[149,131129,355],{"class":155},[149,131131,131132,131134,131136,131138,131140,131142,131145,131147,131149,131151],{"class":151,"line":1054},[149,131133,131055],{"class":162},[149,131135,3123],{"class":159},[149,131137,1040],{"class":162},[149,131139,319],{"class":155},[149,131141,830],{"class":309},[149,131143,131144],{"class":155},") { ",[149,131146,130837],{"class":309},[149,131148,313],{"class":155},[149,131150,130255],{"class":309},[149,131152,131153],{"class":155},"; }\n",[149,131155,131156,131158,131160,131162,131164,131166,131168,131170,131172,131175],{"class":151,"line":1072},[149,131157,131055],{"class":162},[149,131159,3123],{"class":159},[149,131161,1040],{"class":162},[149,131163,319],{"class":155},[149,131165,1045],{"class":309},[149,131167,131144],{"class":155},[149,131169,130837],{"class":309},[149,131171,313],{"class":155},[149,131173,131174],{"class":309},"#ff0000",[149,131176,131153],{"class":155},[149,131178,131179,131181,131183,131185,131187,131189,131191,131193,131195,131198],{"class":151,"line":1090},[149,131180,131055],{"class":162},[149,131182,3123],{"class":159},[149,131184,1040],{"class":162},[149,131186,319],{"class":155},[149,131188,1939],{"class":309},[149,131190,131144],{"class":155},[149,131192,130837],{"class":309},[149,131194,313],{"class":155},[149,131196,131197],{"class":309},"#00a4ff",[149,131199,131153],{"class":155},[149,131201,131202,131204,131206,131208,131210,131212,131214,131216,131218,131221],{"class":151,"line":1633},[149,131203,131055],{"class":162},[149,131205,3123],{"class":159},[149,131207,1040],{"class":162},[149,131209,319],{"class":155},[149,131211,2157],{"class":309},[149,131213,131144],{"class":155},[149,131215,130837],{"class":309},[149,131217,313],{"class":155},[149,131219,131220],{"class":309},"#ff00ff",[149,131222,131153],{"class":155},[149,131224,131225,131227,131229,131231,131233,131235,131237,131239,131241,131244],{"class":151,"line":1644},[149,131226,131055],{"class":162},[149,131228,3123],{"class":159},[149,131230,1040],{"class":162},[149,131232,319],{"class":155},[149,131234,2182],{"class":309},[149,131236,131144],{"class":155},[149,131238,130837],{"class":309},[149,131240,313],{"class":155},[149,131242,131243],{"class":309},"#00ff00",[149,131245,131153],{"class":155},[14,131247,131249],{"id":131248},"_83-css三大特性","8.3 css三大特性",[19,131251,131253],{"id":131252},"_831-层叠性","8.3.1 层叠性",[24,131255,131256],{},"为了解决样式冲突问题",[24,131258,131259],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[24,131261,131262],{},"   ②样式不冲突，不会层叠",[19,131264,131266],{"id":131265},"_832-继承性","8.3.2 继承性",[24,131268,131269],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[24,131271,131272],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[140,131274,131276],{"className":286,"code":131275,"language":288,"meta":145,"style":145},"p {\n  color: #333;\n}\n",[48,131277,131278,131284,131294],{"__ignoreMap":145},[149,131279,131280,131282],{"class":151,"line":152},[149,131281,24],{"class":159},[149,131283,304],{"class":155},[149,131285,131286,131288,131290,131292],{"class":151,"line":193},[149,131287,984],{"class":309},[149,131289,313],{"class":155},[149,131291,64057],{"class":309},[149,131293,841],{"class":155},[149,131295,131296],{"class":151,"line":235},[149,131297,355],{"class":155},[83,131299],{"style":85,"src":131300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[24,131302,131303],{},"解释：①行高可以跟单位也可以不跟单位",[24,131305,131306],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[24,131308,131309],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[24,131311,131312],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[19,131314,131316],{"id":131315},"_833-优先级","8.3.3 优先级",[125,131318,131319,131322],{},[45,131320,131321],{},"选择器相同，则执行层叠性",[45,131323,131324],{},"选择器不同，则根据选择器权重执行",[2003,131326,131327,131337],{},[2006,131328,131329],{},[2009,131330,131331,131334],{},[2012,131332,131333],{"align":1566},"选择器",[2012,131335,131336],{"align":1566},"选择器权重",[2049,131338,131339,131347,131355,131363,131371,131379],{},[2009,131340,131341,131344],{},[2054,131342,131343],{"align":1566},"继承 或者*",[2054,131345,131346],{"align":1566},"0，0，0，0",[2009,131348,131349,131352],{},[2054,131350,131351],{"align":1566},"标签选择器",[2054,131353,131354],{"align":1566},"0，0，0，1",[2009,131356,131357,131360],{},[2054,131358,131359],{"align":1566},"类选择器，伪类选择器",[2054,131361,131362],{"align":1566},"0，0，1，0",[2009,131364,131365,131368],{},[2054,131366,131367],{"align":1566},"ID选择器",[2054,131369,131370],{"align":1566},"0，1，0，0",[2009,131372,131373,131376],{},[2054,131374,131375],{"align":1566},"行内样式",[2054,131377,131378],{"align":1566},"1，0，0，0",[2009,131380,131381,131384],{},[2054,131382,131383],{"align":1566},"！important",[2054,131385,131386],{"align":1566},"无穷大",[24,131388,131389],{},"! important用法：",[140,131391,131393],{"className":286,"code":131392,"language":288,"meta":145,"style":145},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[48,131394,131395,131400,131406,131419,131423,131428,131434,131444],{"__ignoreMap":145},[149,131396,131397],{"class":151,"line":152},[149,131398,131399],{"class":295},"\u002F* !important 拥有最高优先级 *\u002F\n",[149,131401,131402,131404],{"class":151,"line":193},[149,131403,301],{"class":159},[149,131405,304],{"class":155},[149,131407,131408,131410,131412,131414,131417],{"class":151,"line":235},[149,131409,984],{"class":309},[149,131411,313],{"class":155},[149,131413,53345],{"class":309},[149,131415,131416],{"class":325}," !important",[149,131418,841],{"class":155},[149,131420,131421],{"class":151,"line":340},[149,131422,355],{"class":155},[149,131424,131425],{"class":151,"line":346},[149,131426,131427],{"class":295},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[149,131429,131430,131432],{"class":151,"line":352},[149,131431,301],{"class":159},[149,131433,304],{"class":155},[149,131435,131436,131438,131440,131442],{"class":151,"line":1021},[149,131437,984],{"class":309},[149,131439,313],{"class":155},[149,131441,989],{"class":309},[149,131443,841],{"class":155},[149,131445,131446],{"class":151,"line":1035},[149,131447,355],{"class":155},[24,131449,131450],{},"优先级注意点：",[24,131452,131453],{},"①权重是有4组数字组成,但是不会有进位",[24,131455,131456],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[24,131458,131459],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[24,131461,131462],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[24,131464,131465],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[24,131467,131468],{},"⑥复合选择器",[2003,131470,131471,131481],{},[2006,131472,131473],{},[2009,131474,131475,131478],{},[2012,131476,131477],{"align":1566},"div ul li",[2012,131479,131480],{"align":1566},"0,0,0,3",[2049,131482,131483,131491,131499],{},[2009,131484,131485,131488],{},[2054,131486,131487],{"align":1566},".nav ul li",[2054,131489,131490],{"align":1566},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[2009,131492,131493,131496],{},[2054,131494,131495],{"align":1566},"a:hover",[2054,131497,131498],{"align":1566},"0,0,1,1",[2009,131500,131501,131504],{},[2054,131502,131503],{"align":1566},".nav a",[2054,131505,131498],{"align":1566},[1783,131507,131508],{},"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":145,"searchDepth":193,"depth":193,"links":131510},[131511,131519,131530],{"id":129621,"depth":193,"text":129622,"children":131512},[131513,131514,131515,131516,131517,131518],{"id":129634,"depth":235,"text":129635},{"id":129706,"depth":235,"text":129707},{"id":129778,"depth":235,"text":129779},{"id":129809,"depth":235,"text":129810},{"id":129816,"depth":235,"text":129817},{"id":129968,"depth":235,"text":129969},{"id":130276,"depth":193,"text":130277,"children":131520},[131521,131522,131523,131524,131525,131526,131527,131528,131529],{"id":130283,"depth":235,"text":130284},{"id":130293,"depth":235,"text":130294},{"id":130389,"depth":235,"text":130390},{"id":130462,"depth":235,"text":130463},{"id":130617,"depth":235,"text":130618},{"id":130705,"depth":235,"text":130706},{"id":130757,"depth":235,"text":130758},{"id":130816,"depth":235,"text":130817},{"id":130921,"depth":235,"text":130922},{"id":131248,"depth":193,"text":131249,"children":131531},[131532,131533,131534],{"id":131252,"depth":235,"text":131253},{"id":131265,"depth":235,"text":131266},{"id":131315,"depth":235,"text":131316},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129613,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131541,"title":131542,"body":131543,"description":1797,"extension":1798,"meta":133130,"navigation":1800,"path":133131,"seo":133132,"stem":133133,"__hash__":133134},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131544,"toc":133109},[131545,131548,131552,131555,131558,131561,131564,131567,131570,131573,131577,131585,131622,131658,131661,131675,131680,131714,131717,131809,131814,131817,131847,131850,131855,131863,131867,131874,131920,131964,131969,131972,131975,131978,131981,131984,131987,131989,131992,131996,132001,132045,132050,132053,132056,132092,132097,132100,132103,132106,132109,132141,132144,132147,132150,132182,132185,132188,132191,132195,132198,132230,132233,132237,132257,132260,132268,132271,132275,132280,132283,132315,132320,132323,132361,132365,132370,132373,132376,132407,132410,132427,132432,132484,132544,132549,132603,132641,132645,132649,132652,132656,132664,132667,132669,132680,132685,132732,132766,132769,132772,132775,132778,132822,132825,132828,132831,132834,132837,132840,132884,132887,132890,132893,132896,132899,132902,132908,132911,132955,132958,132961,132964,132967,132970,133014,133017,133019,133022,133026,133030,133068,133072,133075,133078,133082,133090,133094,133097,133100,133103,133106],[10,131546,131542],{"id":131547},"_9-css盒模型浮动与切图",[14,131549,131551],{"id":131550},"_91-盒子模型","9.1 盒子模型",[24,131553,131554],{},"利用盒子来设计网页",[24,131556,131557],{},"盒子包含：边框、外边距、内边距、实际内容",[24,131559,131560],{},"网页布局设置：",[24,131562,131563],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[24,131565,131566],{},"②利用css设置好盒子样式，然后摆放到相应位置",[24,131568,131569],{},"③往盒子里装内容",[83,131571],{"style":85,"src":131572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[19,131574,131576],{"id":131575},"_911-边框border","9.1.1 边框（border）",[125,131578,131579,131582],{},[45,131580,131581],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[45,131583,131584],{},"语法",[140,131586,131588],{"className":286,"code":131587,"language":288,"meta":145,"style":145},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[48,131589,131590,131595,131601,131618],{"__ignoreMap":145},[149,131591,131592],{"class":151,"line":152},[149,131593,131594],{"class":295},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[149,131596,131597,131599],{"class":151,"line":193},[149,131598,301],{"class":159},[149,131600,304],{"class":155},[149,131602,131603,131605,131607,131609,131611,131613,131616],{"class":151,"line":235},[149,131604,825],{"class":309},[149,131606,313],{"class":155},[149,131608,830],{"class":309},[149,131610,326],{"class":325},[149,131612,835],{"class":309},[149,131614,131615],{"class":309}," #ccc",[149,131617,841],{"class":155},[149,131619,131620],{"class":151,"line":340},[149,131621,355],{"class":155},[2003,131623,131624,131632],{},[2006,131625,131626],{},[2009,131627,131628,131630],{},[2012,131629,130826],{"align":1566},[2012,131631,104376],{"align":1566},[2049,131633,131634,131642,131650],{},[2009,131635,131636,131639],{},[2054,131637,131638],{"align":1566},"border-width",[2054,131640,131641],{"align":1566},"定义边框粗细，单位是px",[2009,131643,131644,131647],{},[2054,131645,131646],{"align":1566},"border-style",[2054,131648,131649],{"align":1566},"边框的样式",[2009,131651,131652,131655],{},[2054,131653,131654],{"align":1566},"border-color",[2054,131656,131657],{"align":1566},"边框的颜色",[24,131659,131660],{},"边框样式 border-style 可以设置如下值：",[42,131662,131663,131666,131669,131672],{},[45,131664,131665],{},"none：没有边框即忽略所有边框的宽度（默认值）",[45,131667,131668],{},"solid：边框为单实线(最为常用的)",[45,131670,131671],{},"dashed：边框为虚线",[45,131673,131674],{},"dotted：边框为点线",[125,131676,131677],{"start":235},[45,131678,131679],{},"边框的合写分写",[140,131681,131682],{"className":286,"code":131587,"language":288,"meta":145,"style":145},[48,131683,131684,131688,131694,131710],{"__ignoreMap":145},[149,131685,131686],{"class":151,"line":152},[149,131687,131594],{"class":295},[149,131689,131690,131692],{"class":151,"line":193},[149,131691,301],{"class":159},[149,131693,304],{"class":155},[149,131695,131696,131698,131700,131702,131704,131706,131708],{"class":151,"line":235},[149,131697,825],{"class":309},[149,131699,313],{"class":155},[149,131701,830],{"class":309},[149,131703,326],{"class":325},[149,131705,835],{"class":309},[149,131707,131615],{"class":309},[149,131709,841],{"class":155},[149,131711,131712],{"class":151,"line":340},[149,131713,355],{"class":155},[24,131715,131716],{},"边框分开写法：",[140,131718,131720],{"className":286,"code":131719,"language":288,"meta":145,"style":145},"\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",[48,131721,131722,131727,131733,131751,131769,131788,131805],{"__ignoreMap":145},[149,131723,131724],{"class":151,"line":152},[149,131725,131726],{"class":295},"\u002F* 边框分开写法 *\u002F\n",[149,131728,131729,131731],{"class":151,"line":193},[149,131730,301],{"class":159},[149,131732,304],{"class":155},[149,131734,131735,131738,131740,131742,131744,131746,131749],{"class":151,"line":235},[149,131736,131737],{"class":309},"  border-top",[149,131739,313],{"class":155},[149,131741,830],{"class":309},[149,131743,326],{"class":325},[149,131745,835],{"class":309},[149,131747,131748],{"class":309}," #000",[149,131750,841],{"class":155},[149,131752,131753,131756,131758,131760,131762,131764,131767],{"class":151,"line":340},[149,131754,131755],{"class":309},"  border-right",[149,131757,313],{"class":155},[149,131759,1045],{"class":309},[149,131761,326],{"class":325},[149,131763,63929],{"class":309},[149,131765,131766],{"class":309}," #333",[149,131768,841],{"class":155},[149,131770,131771,131774,131776,131778,131780,131783,131786],{"class":151,"line":346},[149,131772,131773],{"class":309},"  border-bottom",[149,131775,313],{"class":155},[149,131777,1939],{"class":309},[149,131779,326],{"class":325},[149,131781,131782],{"class":309}," dotted",[149,131784,131785],{"class":309}," #666",[149,131787,841],{"class":155},[149,131789,131790,131793,131795,131797,131799,131801,131803],{"class":151,"line":352},[149,131791,131792],{"class":309},"  border-left",[149,131794,313],{"class":155},[149,131796,830],{"class":309},[149,131798,326],{"class":325},[149,131800,835],{"class":309},[149,131802,838],{"class":309},[149,131804,841],{"class":155},[149,131806,131807],{"class":151,"line":1021},[149,131808,355],{"class":155},[125,131810,131811],{"start":340},[45,131812,131813],{},"表格的细线边框",[24,131815,131816],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[140,131818,131820],{"className":286,"code":131819,"language":288,"meta":145,"style":145},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[48,131821,131822,131827,131833,131843],{"__ignoreMap":145},[149,131823,131824],{"class":151,"line":152},[149,131825,131826],{"class":295},"\u002F* 表格细线边框合并 *\u002F\n",[149,131828,131829,131831],{"class":151,"line":193},[149,131830,2003],{"class":159},[149,131832,304],{"class":155},[149,131834,131835,131837,131839,131841],{"class":151,"line":235},[149,131836,72262],{"class":309},[149,131838,313],{"class":155},[149,131840,66722],{"class":309},[149,131842,841],{"class":155},[149,131844,131845],{"class":151,"line":340},[149,131846,355],{"class":155},[24,131848,131849],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[125,131851,131852],{"start":346},[45,131853,131854],{},"解决边框额外增加盒子的实际大小的方法：",[42,131856,131857,131860],{},[45,131858,131859],{},"测量盒子大小的时候,不量边框",[45,131861,131862],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[19,131864,131866],{"id":131865},"_912-内边距","9.1.2 内边距",[125,131868,131869,131872],{},[45,131870,131871],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[45,131873,131584],{},[2003,131875,131876,131886],{},[2006,131877,131878],{},[2009,131879,131880,131883],{},[2012,131881,131882],{"align":1566},"值的个数",[2012,131884,131885],{"align":1566},"表达意思",[2049,131887,131888,131896,131904,131912],{},[2009,131889,131890,131893],{},[2054,131891,131892],{"align":1566},"padding: 5px;",[2054,131894,131895],{"align":1566},"1个值，代表上下左右都有5个元素",[2009,131897,131898,131901],{},[2054,131899,131900],{"align":1566},"padding: 5px 10px;",[2054,131902,131903],{"align":1566},"2个值，代表上下内边距为5像素，左右内边距为10像素",[2009,131905,131906,131909],{},[2054,131907,131908],{"align":1566},"padding: 5px 10px 20px;",[2054,131910,131911],{"align":1566},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[2009,131913,131914,131917],{},[2054,131915,131916],{"align":1566},"padding: 5px 10px 20px 30px;",[2054,131918,131919],{"align":1566},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[2003,131921,131922,131930],{},[2006,131923,131924],{},[2009,131925,131926,131928],{},[2012,131927,130826],{"align":1566},[2012,131929,104376],{"align":1566},[2049,131931,131932,131940,131948,131956],{},[2009,131933,131934,131937],{},[2054,131935,131936],{"align":1566},"padding-left",[2054,131938,131939],{"align":1566},"左内边距",[2009,131941,131942,131945],{},[2054,131943,131944],{"align":1566},"padding-right",[2054,131946,131947],{"align":1566},"右内边距",[2009,131949,131950,131953],{},[2054,131951,131952],{"align":1566},"padding-top",[2054,131954,131955],{"align":1566},"上内边距",[2009,131957,131958,131961],{},[2054,131959,131960],{"align":1566},"padding-bottom",[2054,131962,131963],{"align":1566},"下内边距",[125,131965,131966],{"start":235},[45,131967,131968],{},"内边距会影响盒子的实际大小",[24,131970,131971],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[24,131973,131974],{},"①内容和边框有了距离，添加了内边距",[24,131976,131977],{},"②padding影响了盒子实际大小",[24,131979,131980],{},"内边距对盒子大小的影响：",[24,131982,131983],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[24,131985,131986],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[24,131988,96900],{},[24,131990,131991],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[19,131993,131995],{"id":131994},"_913-外边距","9.1.3 外边距",[125,131997,131998],{},[45,131999,132000],{},"控制盒子与盒子之间的距离",[2003,132002,132003,132011],{},[2006,132004,132005],{},[2009,132006,132007,132009],{},[2012,132008,130826],{"align":1566},[2012,132010,104376],{"align":1566},[2049,132012,132013,132021,132029,132037],{},[2009,132014,132015,132018],{},[2054,132016,132017],{"align":1566},"margin-left",[2054,132019,132020],{"align":1566},"左外边距",[2009,132022,132023,132026],{},[2054,132024,132025],{"align":1566},"margin-right",[2054,132027,132028],{"align":1566},"右外边距",[2009,132030,132031,132034],{},[2054,132032,132033],{"align":1566},"margin-top",[2054,132035,132036],{"align":1566},"上外边距",[2009,132038,132039,132042],{},[2054,132040,132041],{"align":1566},"margin-bottom",[2054,132043,132044],{"align":1566},"下外边距",[125,132046,132047],{"start":193},[45,132048,132049],{},"外边距可以让块级盒子水平居中的两个条件：",[24,132051,132052],{},"①盒子必须指定了宽度（width）",[24,132054,132055],{},"②盒子左右的外边距都设置为 auto",[140,132057,132059],{"className":286,"code":132058,"language":288,"meta":145,"style":145},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[48,132060,132061,132066,132072,132088],{"__ignoreMap":145},[149,132062,132063],{"class":151,"line":152},[149,132064,132065],{"class":295},"\u002F* margin 复合写法（同上） *\u002F\n",[149,132067,132068,132070],{"class":151,"line":193},[149,132069,1554],{"class":162},[149,132071,304],{"class":155},[149,132073,132074,132076,132078,132080,132082,132085],{"class":151,"line":235},[149,132075,72154],{"class":309},[149,132077,313],{"class":155},[149,132079,2056],{"class":309},[149,132081,53257],{"class":309},[149,132083,132084],{"class":155},";  ",[149,132086,132087],{"class":295},"\u002F* 块级盒子水平居中 *\u002F\n",[149,132089,132090],{"class":151,"line":340},[149,132091,355],{"class":155},[125,132093,132094],{"start":235},[45,132095,132096],{},"外边距塌陷问题",[24,132098,132099],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[83,132101],{"style":85,"src":132102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[24,132104,132105],{},"解决方案：",[24,132107,132108],{},"①可以为父亲元素定义上边距",[140,132110,132111],{"className":286,"code":132058,"language":288,"meta":145,"style":145},[48,132112,132113,132117,132123,132137],{"__ignoreMap":145},[149,132114,132115],{"class":151,"line":152},[149,132116,132065],{"class":295},[149,132118,132119,132121],{"class":151,"line":193},[149,132120,1554],{"class":162},[149,132122,304],{"class":155},[149,132124,132125,132127,132129,132131,132133,132135],{"class":151,"line":235},[149,132126,72154],{"class":309},[149,132128,313],{"class":155},[149,132130,2056],{"class":309},[149,132132,53257],{"class":309},[149,132134,132084],{"class":155},[149,132136,132087],{"class":295},[149,132138,132139],{"class":151,"line":340},[149,132140,355],{"class":155},[24,132142,132143],{},"②可以为父亲元素定义上内边距",[24,132145,132146],{},"③可以为父亲元素添加overflow:hidden",[83,132148],{"style":85,"src":132149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[140,132151,132152],{"className":286,"code":132058,"language":288,"meta":145,"style":145},[48,132153,132154,132158,132164,132178],{"__ignoreMap":145},[149,132155,132156],{"class":151,"line":152},[149,132157,132065],{"class":295},[149,132159,132160,132162],{"class":151,"line":193},[149,132161,1554],{"class":162},[149,132163,304],{"class":155},[149,132165,132166,132168,132170,132172,132174,132176],{"class":151,"line":235},[149,132167,72154],{"class":309},[149,132169,313],{"class":155},[149,132171,2056],{"class":309},[149,132173,53257],{"class":309},[149,132175,132084],{"class":155},[149,132177,132087],{"class":295},[149,132179,132180],{"class":151,"line":340},[149,132181,355],{"class":155},[83,132183],{"style":85,"src":132184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[24,132186,132187],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[24,132189,132190],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[19,132192,132194],{"id":132193},"_914-清除内外边距","9.1.4 清除内外边距",[24,132196,132197],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[140,132199,132200],{"className":286,"code":132058,"language":288,"meta":145,"style":145},[48,132201,132202,132206,132212,132226],{"__ignoreMap":145},[149,132203,132204],{"class":151,"line":152},[149,132205,132065],{"class":295},[149,132207,132208,132210],{"class":151,"line":193},[149,132209,1554],{"class":162},[149,132211,304],{"class":155},[149,132213,132214,132216,132218,132220,132222,132224],{"class":151,"line":235},[149,132215,72154],{"class":309},[149,132217,313],{"class":155},[149,132219,2056],{"class":309},[149,132221,53257],{"class":309},[149,132223,132084],{"class":155},[149,132225,132087],{"class":295},[149,132227,132228],{"class":151,"line":340},[149,132229,355],{"class":155},[24,132231,132232],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[19,132234,132236],{"id":132235},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[42,132238,132239,132242,132245,132248,132251,132254],{},[45,132240,132241],{},"文件→打开 ：可以打开我们要测量的图片",[45,132243,132244],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[45,132246,132247],{},"右击标尺，把里面的单位改为像素",[45,132249,132250],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[45,132252,132253],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[45,132255,132256],{},"用选区拖动 可以测量大小",[83,132258],{"style":85,"src":132259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[42,132261,132262,132265],{},[45,132263,132264],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[45,132266,132267],{},"吸管取色工具",[83,132269],{"style":85,"src":132270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[19,132272,132274],{"id":132273},"_916-案例","9.1.6 案例",[125,132276,132277],{},[45,132278,132279],{},"小米商品",[83,132281],{"style":85,"src":132282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[140,132284,132285],{"className":286,"code":132058,"language":288,"meta":145,"style":145},[48,132286,132287,132291,132297,132311],{"__ignoreMap":145},[149,132288,132289],{"class":151,"line":152},[149,132290,132065],{"class":295},[149,132292,132293,132295],{"class":151,"line":193},[149,132294,1554],{"class":162},[149,132296,304],{"class":155},[149,132298,132299,132301,132303,132305,132307,132309],{"class":151,"line":235},[149,132300,72154],{"class":309},[149,132302,313],{"class":155},[149,132304,2056],{"class":309},[149,132306,53257],{"class":309},[149,132308,132084],{"class":155},[149,132310,132087],{"class":295},[149,132312,132313],{"class":151,"line":340},[149,132314,355],{"class":155},[125,132316,132317],{"start":193},[45,132318,132319],{},"快报模块",[83,132321],{"style":85,"src":132322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[140,132324,132326],{"className":142,"code":132325,"language":144,"meta":145,"style":145},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[48,132327,132328,132333,132348,132353],{"__ignoreMap":145},[149,132329,132330],{"class":151,"line":152},[149,132331,132332],{"class":295},"\u003C!-- HTML 代码示例 -->\n",[149,132334,132335,132337,132339,132341,132343,132346],{"class":151,"line":193},[149,132336,156],{"class":155},[149,132338,301],{"class":159},[149,132340,55184],{"class":162},[149,132342,166],{"class":155},[149,132344,132345],{"class":169},"\"example\"",[149,132347,190],{"class":155},[149,132349,132350],{"class":151,"line":235},[149,132351,132352],{"class":155},"  示例内容\n",[149,132354,132355,132357,132359],{"class":151,"line":340},[149,132356,665],{"class":155},[149,132358,301],{"class":159},[149,132360,190],{"class":155},[19,132362,132364],{"id":132363},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[125,132366,132367],{},[45,132368,132369],{},"圆角边框",[24,132371,132372],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[83,132374],{"style":85,"src":132375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[140,132377,132379],{"className":286,"code":132378,"language":288,"meta":145,"style":145},"div {\n  border: 1px solid #ccc;\n}\n",[48,132380,132381,132387,132403],{"__ignoreMap":145},[149,132382,132383,132385],{"class":151,"line":152},[149,132384,301],{"class":159},[149,132386,304],{"class":155},[149,132388,132389,132391,132393,132395,132397,132399,132401],{"class":151,"line":193},[149,132390,825],{"class":309},[149,132392,313],{"class":155},[149,132394,830],{"class":309},[149,132396,326],{"class":325},[149,132398,835],{"class":309},[149,132400,131615],{"class":309},[149,132402,841],{"class":155},[149,132404,132405],{"class":151,"line":235},[149,132406,355],{"class":155},[24,132408,132409],{},"解释:",[42,132411,132412,132415,132418,132421,132424],{},[45,132413,132414],{},"参数值可以为数值或百分比的形式",[45,132416,132417],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[45,132419,132420],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[45,132422,132423],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[45,132425,132426],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[125,132428,132429],{"start":193},[45,132430,132431],{},"盒子阴影",[140,132433,132435],{"className":286,"code":132434,"language":288,"meta":145,"style":145},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[48,132436,132437,132443,132480],{"__ignoreMap":145},[149,132438,132439,132441],{"class":151,"line":152},[149,132440,301],{"class":159},[149,132442,304],{"class":155},[149,132444,132445,132448,132450,132452,132454,132456,132458,132460,132462,132464,132466,132468,132470,132472,132474,132476,132478],{"class":151,"line":193},[149,132446,132447],{"class":309},"  box-shadow",[149,132449,313],{"class":155},[149,132451,2056],{"class":309},[149,132453,16467],{"class":309},[149,132455,326],{"class":325},[149,132457,3757],{"class":309},[149,132459,326],{"class":325},[149,132461,80448],{"class":309},[149,132463,319],{"class":155},[149,132465,2056],{"class":309},[149,132467,329],{"class":155},[149,132469,2056],{"class":309},[149,132471,329],{"class":155},[149,132473,2056],{"class":309},[149,132475,329],{"class":155},[149,132477,87891],{"class":309},[149,132479,337],{"class":155},[149,132481,132482],{"class":151,"line":235},[149,132483,355],{"class":155},[2003,132485,132486,132494],{},[2006,132487,132488],{},[2009,132489,132490,132492],{},[2012,132491,2017],{"align":1566},[2012,132493,29198],{"align":1566},[2049,132495,132496,132504,132512,132520,132528,132536],{},[2009,132497,132498,132501],{},[2054,132499,132500],{"align":1566},"h-shadow",[2054,132502,132503],{"align":1566},"必需,水平阴影的位置,允许负值",[2009,132505,132506,132509],{},[2054,132507,132508],{"align":1566},"v-shadow",[2054,132510,132511],{"align":1566},"必需,垂直阴影的位置,允许负值",[2009,132513,132514,132517],{},[2054,132515,132516],{"align":1566},"blur",[2054,132518,132519],{"align":1566},"可选,模糊距离,就是影子的虚实",[2009,132521,132522,132525],{},[2054,132523,132524],{"align":1566},"spread",[2054,132526,132527],{"align":1566},"可选,阴影尺寸",[2009,132529,132530,132533],{},[2054,132531,132532],{"align":1566},"color",[2054,132534,132535],{"align":1566},"可选,阴影的颜色",[2009,132537,132538,132541],{},[2054,132539,132540],{"align":1566},"inset",[2054,132542,132543],{"align":1566},"可选,将外部阴影(outset)改为内部阴影",[125,132545,132546],{"start":235},[45,132547,132548],{},"文字阴影",[140,132550,132552],{"className":286,"code":132551,"language":288,"meta":145,"style":145},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[48,132553,132554,132560,132599],{"__ignoreMap":145},[149,132555,132556,132558],{"class":151,"line":152},[149,132557,24],{"class":159},[149,132559,304],{"class":155},[149,132561,132562,132565,132567,132569,132571,132573,132575,132577,132579,132581,132583,132585,132587,132589,132591,132593,132595,132597],{"class":151,"line":193},[149,132563,132564],{"class":309},"  text-shadow",[149,132566,313],{"class":155},[149,132568,830],{"class":309},[149,132570,326],{"class":325},[149,132572,26827],{"class":309},[149,132574,326],{"class":325},[149,132576,16467],{"class":309},[149,132578,326],{"class":325},[149,132580,80448],{"class":309},[149,132582,319],{"class":155},[149,132584,2056],{"class":309},[149,132586,329],{"class":155},[149,132588,2056],{"class":309},[149,132590,329],{"class":155},[149,132592,2056],{"class":309},[149,132594,329],{"class":155},[149,132596,102201],{"class":309},[149,132598,337],{"class":155},[149,132600,132601],{"class":151,"line":235},[149,132602,355],{"class":155},[2003,132604,132605,132613],{},[2006,132606,132607],{},[2009,132608,132609,132611],{},[2012,132610,2017],{"align":1566},[2012,132612,29198],{"align":1566},[2049,132614,132615,132621,132628,132635],{},[2009,132616,132617,132619],{},[2054,132618,132500],{"align":1566},[2054,132620,132503],{"align":1566},[2009,132622,132623,132625],{},[2054,132624,132508],{"align":1566},[2054,132626,132627],{"align":1566},"必需,垂直阴影位置,允许负值",[2009,132629,132630,132632],{},[2054,132631,132516],{"align":1566},[2054,132633,132634],{"align":1566},"可选,模糊的距离",[2009,132636,132637,132639],{},[2054,132638,132532],{"align":1566},[2054,132640,132535],{"align":1566},[14,132642,132644],{"id":132643},"_92-浮动","9.2 浮动",[19,132646,132648],{"id":132647},"_921-浮动介绍","9.2.1 浮动介绍",[24,132650,132651],{},"在16.2中详细介绍",[19,132653,132655],{"id":132654},"_922-清除浮动","9.2.2 清除浮动",[125,132657,132658,132661],{},[45,132659,132660],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[45,132662,132663],{},"清除浮动的本质",[24,132665,132666],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[24,132668,866],{},[42,132670,132671,132674,132677],{},[45,132672,132673],{},"如果父盒子本身有高度，则不需要清除浮动",[45,132675,132676],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[45,132678,132679],{},"父级有了高度，就不会影响下面的标准流了",[125,132681,132682],{"start":235},[45,132683,132684],{},"清除浮动样式",[140,132686,132688],{"className":286,"code":132687,"language":288,"meta":145,"style":145},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[48,132689,132690,132697,132707,132711,132718,132728],{"__ignoreMap":145},[149,132691,132692,132695],{"class":151,"line":152},[149,132693,132694],{"class":162},".left",[149,132696,304],{"class":155},[149,132698,132699,132701,132703,132705],{"class":151,"line":193},[149,132700,1561],{"class":309},[149,132702,313],{"class":155},[149,132704,1566],{"class":309},[149,132706,841],{"class":155},[149,132708,132709],{"class":151,"line":235},[149,132710,355],{"class":155},[149,132712,132713,132716],{"class":151,"line":340},[149,132714,132715],{"class":162},".right",[149,132717,304],{"class":155},[149,132719,132720,132722,132724,132726],{"class":151,"line":346},[149,132721,1561],{"class":309},[149,132723,313],{"class":155},[149,132725,74204],{"class":309},[149,132727,841],{"class":155},[149,132729,132730],{"class":151,"line":352},[149,132731,355],{"class":155},[2003,132733,132734,132742],{},[2006,132735,132736],{},[2009,132737,132738,132740],{},[2012,132739,128691],{"align":1566},[2012,132741,29198],{"align":1566},[2049,132743,132744,132751,132758],{},[2009,132745,132746,132748],{},[2054,132747,1566],{"align":1566},[2054,132749,132750],{"align":1566},"不允许左侧有浮动元素（清除左侧浮动的影响）",[2009,132752,132753,132755],{},[2054,132754,74204],{"align":1566},[2054,132756,132757],{"align":1566},"不允许右侧有浮动元素（清除右侧浮动的影响）",[2009,132759,132760,132763],{},[2054,132761,132762],{"align":1566},"both",[2054,132764,132765],{"align":1566},"同时清除左右侧浮动的影响",[24,132767,132768],{},"法一",[24,132770,132771],{},"额外标签法也称为隔墙法",[24,132773,132774],{},"使用方式：",[24,132776,132777],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[140,132779,132780],{"className":286,"code":132687,"language":288,"meta":145,"style":145},[48,132781,132782,132788,132798,132802,132808,132818],{"__ignoreMap":145},[149,132783,132784,132786],{"class":151,"line":152},[149,132785,132694],{"class":162},[149,132787,304],{"class":155},[149,132789,132790,132792,132794,132796],{"class":151,"line":193},[149,132791,1561],{"class":309},[149,132793,313],{"class":155},[149,132795,1566],{"class":309},[149,132797,841],{"class":155},[149,132799,132800],{"class":151,"line":235},[149,132801,355],{"class":155},[149,132803,132804,132806],{"class":151,"line":340},[149,132805,132715],{"class":162},[149,132807,304],{"class":155},[149,132809,132810,132812,132814,132816],{"class":151,"line":346},[149,132811,1561],{"class":309},[149,132813,313],{"class":155},[149,132815,74204],{"class":309},[149,132817,841],{"class":155},[149,132819,132820],{"class":151,"line":352},[149,132821,355],{"class":155},[24,132823,132824],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[24,132826,132827],{},"优点： 通俗易懂，书写方便",[24,132829,132830],{},"缺点： 添加许多无意义的标签，结构化较差",[24,132832,132833],{},"注意： 要求这个新的空标签必须是块级元素。",[24,132835,132836],{},"法二",[24,132838,132839],{},"父级添加overflow属性",[140,132841,132842],{"className":286,"code":132687,"language":288,"meta":145,"style":145},[48,132843,132844,132850,132860,132864,132870,132880],{"__ignoreMap":145},[149,132845,132846,132848],{"class":151,"line":152},[149,132847,132694],{"class":162},[149,132849,304],{"class":155},[149,132851,132852,132854,132856,132858],{"class":151,"line":193},[149,132853,1561],{"class":309},[149,132855,313],{"class":155},[149,132857,1566],{"class":309},[149,132859,841],{"class":155},[149,132861,132862],{"class":151,"line":235},[149,132863,355],{"class":155},[149,132865,132866,132868],{"class":151,"line":340},[149,132867,132715],{"class":162},[149,132869,304],{"class":155},[149,132871,132872,132874,132876,132878],{"class":151,"line":346},[149,132873,1561],{"class":309},[149,132875,313],{"class":155},[149,132877,74204],{"class":309},[149,132879,841],{"class":155},[149,132881,132882],{"class":151,"line":352},[149,132883,355],{"class":155},[24,132885,132886],{},"overflow: hidden;",[24,132888,132889],{},"优点：代码简洁",[24,132891,132892],{},"缺点：无法显示溢出的部分",[24,132894,132895],{},"注意：是给父元素添加代码",[24,132897,132898],{},"法三",[24,132900,132901],{},"父级添加after伪元素",[24,132903,132904,132907],{},[132905,132906],"after",{}," 方式是额外标签法的升级版",[24,132909,132910],{},"使用的时候复制就可以",[140,132912,132913],{"className":286,"code":132687,"language":288,"meta":145,"style":145},[48,132914,132915,132921,132931,132935,132941,132951],{"__ignoreMap":145},[149,132916,132917,132919],{"class":151,"line":152},[149,132918,132694],{"class":162},[149,132920,304],{"class":155},[149,132922,132923,132925,132927,132929],{"class":151,"line":193},[149,132924,1561],{"class":309},[149,132926,313],{"class":155},[149,132928,1566],{"class":309},[149,132930,841],{"class":155},[149,132932,132933],{"class":151,"line":235},[149,132934,355],{"class":155},[149,132936,132937,132939],{"class":151,"line":340},[149,132938,132715],{"class":162},[149,132940,304],{"class":155},[149,132942,132943,132945,132947,132949],{"class":151,"line":346},[149,132944,1561],{"class":309},[149,132946,313],{"class":155},[149,132948,74204],{"class":309},[149,132950,841],{"class":155},[149,132952,132953],{"class":151,"line":352},[149,132954,355],{"class":155},[24,132956,132957],{},"优点：没有增加标签，结构更简单",[24,132959,132960],{},"缺点：照顾低版本浏览器",[24,132962,132963],{},"代表网站： 百度、淘宝网、网易等",[24,132965,132966],{},"法四",[24,132968,132969],{},"父级添加双伪元素",[140,132971,132972],{"className":286,"code":132687,"language":288,"meta":145,"style":145},[48,132973,132974,132980,132990,132994,133000,133010],{"__ignoreMap":145},[149,132975,132976,132978],{"class":151,"line":152},[149,132977,132694],{"class":162},[149,132979,304],{"class":155},[149,132981,132982,132984,132986,132988],{"class":151,"line":193},[149,132983,1561],{"class":309},[149,132985,313],{"class":155},[149,132987,1566],{"class":309},[149,132989,841],{"class":155},[149,132991,132992],{"class":151,"line":235},[149,132993,355],{"class":155},[149,132995,132996,132998],{"class":151,"line":340},[149,132997,132715],{"class":162},[149,132999,304],{"class":155},[149,133001,133002,133004,133006,133008],{"class":151,"line":346},[149,133003,1561],{"class":309},[149,133005,313],{"class":155},[149,133007,74204],{"class":309},[149,133009,841],{"class":155},[149,133011,133012],{"class":151,"line":352},[149,133013,355],{"class":155},[24,133015,133016],{},"优点：代码更简洁",[24,133018,132960],{},[24,133020,133021],{},"代表网站：小米、腾讯等",[14,133023,133025],{"id":133024},"_93-ps切图","9.3 PS切图",[19,133027,133029],{"id":133028},"_931-常见图片格式","9.3.1 常见图片格式",[2003,133031,133032,133042],{},[2006,133033,133034],{},[2009,133035,133036,133039],{},[2012,133037,133038],{"align":1566},"jpg图像格式",[2012,133040,133041],{"align":1566},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[2049,133043,133044,133052,133060],{},[2009,133045,133046,133049],{},[2054,133047,133048],{"align":1566},"gif图像格式",[2054,133050,133051],{"align":1566},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[2009,133053,133054,133057],{},[2054,133055,133056],{"align":1566},"png图像格式",[2054,133058,133059],{"align":1566},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[2009,133061,133062,133065],{},[2054,133063,133064],{"align":1566},"PSD图像格式",[2054,133066,133067],{"align":1566},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[19,133069,133071],{"id":133070},"_932-图层切图","9.3.2 图层切图",[24,133073,133074],{},"最简单的切图方式：右击图层 → 导出 → 切片",[24,133076,133077],{},"按住shift选中两个图层->图层菜单->合并图层",[19,133079,133081],{"id":133080},"_933-切片切图","9.3.3 切片切图",[42,133083,133084,133087],{},[45,133085,133086],{},"利用切片工具手动划出",[45,133088,133089],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[19,133091,133093],{"id":133092},"_934-切图步骤","9.3.4 切图步骤",[24,133095,133096],{},"用切片工具选中：",[83,133098],{"style":85,"src":133099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[24,133101,133102],{},"文件 -> 导出",[83,133104],{"style":85,"src":133105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1783,133107,133108],{},"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":145,"searchDepth":193,"depth":193,"links":133110},[133111,133120,133124],{"id":131550,"depth":193,"text":131551,"children":133112},[133113,133114,133115,133116,133117,133118,133119],{"id":131575,"depth":235,"text":131576},{"id":131865,"depth":235,"text":131866},{"id":131994,"depth":235,"text":131995},{"id":132193,"depth":235,"text":132194},{"id":132235,"depth":235,"text":132236},{"id":132273,"depth":235,"text":132274},{"id":132363,"depth":235,"text":132364},{"id":132643,"depth":193,"text":132644,"children":133121},[133122,133123],{"id":132647,"depth":235,"text":132648},{"id":132654,"depth":235,"text":132655},{"id":133024,"depth":193,"text":133025,"children":133125},[133126,133127,133128,133129],{"id":133028,"depth":235,"text":133029},{"id":133070,"depth":235,"text":133071},{"id":133080,"depth":235,"text":133081},{"id":133092,"depth":235,"text":133093},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131542,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133136,"title":133137,"body":133138,"description":1797,"extension":1798,"meta":133779,"navigation":1800,"path":133780,"seo":133781,"stem":133782,"__hash__":133783},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133139,"toc":133767},[133140,133143,133147,133173,133207,133211,133215,133218,133260,133267,133277,133285,133287,133290,133293,133296,133303,133317,133321,133324,133353,133357,133360,133374,133378,133381,133409,133413,133416,133442,133446,133451,133484,133489,133517,133521,133538,133584,133589,133633,133650,133757,133765],[10,133141,133137],{"id":133142},"_10-css规范与学成在线案例",[14,133144,133146],{"id":133145},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[125,133148,133149,133155,133161,133167],{},[45,133150,133151,133154],{},[31,133152,133153],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[45,133156,133157,133160],{},[31,133158,133159],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[45,133162,133163,133166],{},[31,133164,133165],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[45,133168,133169,133172],{},[31,133170,133171],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[140,133174,133175],{"className":286,"code":131587,"language":288,"meta":145,"style":145},[48,133176,133177,133181,133187,133203],{"__ignoreMap":145},[149,133178,133179],{"class":151,"line":152},[149,133180,131594],{"class":295},[149,133182,133183,133185],{"class":151,"line":193},[149,133184,301],{"class":159},[149,133186,304],{"class":155},[149,133188,133189,133191,133193,133195,133197,133199,133201],{"class":151,"line":235},[149,133190,825],{"class":309},[149,133192,313],{"class":155},[149,133194,830],{"class":309},[149,133196,326],{"class":325},[149,133198,835],{"class":309},[149,133200,131615],{"class":309},[149,133202,841],{"class":155},[149,133204,133205],{"class":151,"line":340},[149,133206,355],{"class":155},[14,133208,133210],{"id":133209},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[19,133212,133214],{"id":133213},"_1021-header头部制作","10.2.1 header头部制作",[83,133216],{"style":85,"src":133217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[42,133219,133220,133227,133234,133240,133247,133254],{},[45,133221,133222,133223,133226],{},"1号是版心盒子 ",[31,133224,133225],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[45,133228,133229,133230,133233],{},"版心盒子 里面包含 2号盒子 ",[31,133231,133232],{},"logo"," 图标",[45,133235,133236,133237,133239],{},"版心盒子 里面包含 3号盒子 ",[31,133238,55411],{}," 导航栏",[45,133241,133242,133243,133246],{},"版心盒子 里面包含 4号盒子 ",[31,133244,133245],{},"search"," 搜索框",[45,133248,133249,133250,133253],{},"版心盒子 里面包含 5号盒子 ",[31,133251,133252],{},"user"," 个人信息",[45,133255,133256,133257],{},"注意，要求里面的 ",[31,133258,133259],{},"4个子盒子 必须都浮动",[125,133261,133262],{},[45,133263,133264],{},[31,133265,133266],{},"导航栏注意点:",[24,133268,133269,133270,133273,133274],{},"实际开发中， ",[31,133271,133272],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[31,133275,133276],{},"用 li 包含链接(li+a)的做法",[42,133278,133279,133282],{},[45,133280,133281],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[45,133283,133284],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[24,133286,866],{},[24,133288,133289],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[24,133291,133292],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[24,133294,133295],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[125,133297,133298],{"start":193},[45,133299,133300],{},[31,133301,133302],{},"4号盒子search的细节：",[42,133304,133305,133308,133311],{},[45,133306,133307],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[45,133309,133310],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[45,133312,133313,133316],{},[48,133314,133315],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[19,133318,133320],{"id":133319},"_1022-banner制作","10.2.2 banner制作",[83,133322],{"style":85,"src":133323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[42,133325,133326,133333,133339,133346],{},[45,133327,133328,133329,133332],{},"1号盒子是通栏的大盒子 ",[31,133330,133331],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[45,133334,133335,133336,133338],{},"2号盒子是版心 ",[31,133337,2656],{}," ， 要水平居中对齐",[45,133340,133341,133342,133345],{},"3号盒子版心内，左对齐 ",[31,133343,133344],{},"subnav"," 侧导航栏",[45,133347,133348,133349,133352],{},"4号盒子版心内，右对齐 ",[31,133350,133351],{},"course"," 课程",[19,133354,133356],{"id":133355},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[83,133358],{"style":85,"src":133359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[42,133361,133362,133365,133368,133371],{},[45,133363,133364],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[45,133366,133367],{},"1号盒子是标题 H3 左侧浮动",[45,133369,133370],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[45,133372,133373],{},"3号盒子 右浮动 mod 修改",[19,133375,133377],{"id":133376},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[83,133379],{"style":85,"src":133380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[42,133382,133383,133389,133396,133403,133406],{},[45,133384,133385,133386,133388],{},"1号盒子为最大的盒子 ",[31,133387,55412],{}," 版心水平居中对齐",[45,133390,133391,133392,133395],{},"2号盒子为上面部分 ",[31,133393,133394],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[45,133397,133398,133399,133402],{},"3号盒子为底下部分 ",[31,133400,133401],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[45,133404,133405],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[45,133407,133408],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[19,133410,133412],{"id":133411},"_1025-底部模块制作","10.2.5 底部模块制作",[83,133414],{"style":85,"src":133415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[42,133417,133418,133425,133428,133435],{},[45,133419,133420,133421,133424],{},"1号盒子通栏大盒子 底部 ",[31,133422,133423],{},"footer"," 给高度 底色是白色",[45,133426,133427],{},"2号盒子版心水平居中",[45,133429,133430,133431,133434],{},"3号盒子版权 ",[31,133432,133433],{},"copyright"," 左对齐",[45,133436,133437,133438,133441],{},"4号盒子 链接组 ",[31,133439,133440],{},"links"," 右对齐",[19,133443,133445],{"id":133444},"_1026-代码模块","10.2.6 代码模块",[125,133447,133448],{},[45,133449,133450],{},"html部分",[140,133452,133454],{"className":142,"code":133453,"language":144,"meta":145,"style":145},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[48,133455,133456],{"__ignoreMap":145},[149,133457,133458,133460,133462,133464,133466,133469,133472,133474,133477,133480,133482],{"class":151,"line":152},[149,133459,156],{"class":155},[149,133461,2102],{"class":159},[149,133463,62746],{"class":162},[149,133465,166],{"class":155},[149,133467,133468],{"class":169},"\"https:\u002F\u002Fexample.com\"",[149,133470,133471],{"class":162}," target",[149,133473,166],{"class":155},[149,133475,133476],{"class":169},"\"_blank\"",[149,133478,133479],{"class":155},">链接文字\u003C\u002F",[149,133481,2102],{"class":159},[149,133483,190],{"class":155},[125,133485,133486],{"start":193},[45,133487,133488],{},"css部分",[140,133490,133491],{"className":142,"code":133453,"language":144,"meta":145,"style":145},[48,133492,133493],{"__ignoreMap":145},[149,133494,133495,133497,133499,133501,133503,133505,133507,133509,133511,133513,133515],{"class":151,"line":152},[149,133496,156],{"class":155},[149,133498,2102],{"class":159},[149,133500,62746],{"class":162},[149,133502,166],{"class":155},[149,133504,133468],{"class":169},[149,133506,133471],{"class":162},[149,133508,166],{"class":155},[149,133510,133476],{"class":169},[149,133512,133479],{"class":155},[149,133514,2102],{"class":159},[149,133516,190],{"class":155},[19,133518,133520],{"id":133519},"_1027-收获","10.2.7 收获",[125,133522,133523,133526,133529,133532,133535],{},[45,133524,133525],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[45,133527,133528],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[45,133530,133531],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[45,133533,133534],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[45,133536,133537],{},"遗忘代码",[140,133539,133541],{"className":286,"code":133540,"language":288,"meta":145,"style":145},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[48,133542,133543,133565,133570,133580],{"__ignoreMap":145},[149,133544,133545,133547,133549,133551,133553,133555,133557,133559,133561,133563],{"class":151,"line":152},[149,133546,301],{"class":159},[149,133548,329],{"class":155},[149,133550,24],{"class":159},[149,133552,329],{"class":155},[149,133554,10],{"class":159},[149,133556,329],{"class":155},[149,133558,42],{"class":159},[149,133560,329],{"class":155},[149,133562,45],{"class":159},[149,133564,304],{"class":155},[149,133566,133567],{"class":151,"line":193},[149,133568,133569],{"class":295},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[149,133571,133572,133574,133576,133578],{"class":151,"line":235},[149,133573,1389],{"class":309},[149,133575,313],{"class":155},[149,133577,1394],{"class":309},[149,133579,841],{"class":155},[149,133581,133582],{"class":151,"line":340},[149,133583,355],{"class":155},[125,133585,133586],{"start":352},[45,133587,133588],{},"html引css的程序",[140,133590,133591],{"className":286,"code":133540,"language":288,"meta":145,"style":145},[48,133592,133593,133615,133619,133629],{"__ignoreMap":145},[149,133594,133595,133597,133599,133601,133603,133605,133607,133609,133611,133613],{"class":151,"line":152},[149,133596,301],{"class":159},[149,133598,329],{"class":155},[149,133600,24],{"class":159},[149,133602,329],{"class":155},[149,133604,10],{"class":159},[149,133606,329],{"class":155},[149,133608,42],{"class":159},[149,133610,329],{"class":155},[149,133612,45],{"class":159},[149,133614,304],{"class":155},[149,133616,133617],{"class":151,"line":193},[149,133618,133569],{"class":295},[149,133620,133621,133623,133625,133627],{"class":151,"line":235},[149,133622,1389],{"class":309},[149,133624,313],{"class":155},[149,133626,1394],{"class":309},[149,133628,841],{"class":155},[149,133630,133631],{"class":151,"line":340},[149,133632,355],{"class":155},[125,133634,133635,133638,133641,133644,133647],{"start":1021},[45,133636,133637],{},"浮动的盒子不会有外边距合并问题",[45,133639,133640],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[45,133642,133643],{},"ctrl+g快速定位行；shift+alt多个光标",[45,133645,133646],{},"学习上方各个模块的选择器起名方法，以后就这样用",[45,133648,133649],{},"在写选择器时尽量写全一些，例如",[140,133651,133653],{"className":286,"code":133652,"language":288,"meta":145,"style":145},"\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",[48,133654,133655,133660,133676,133681,133696,133701,133716,133721,133736,133741],{"__ignoreMap":145},[149,133656,133657],{"class":151,"line":152},[149,133658,133659],{"class":295},"\u002F* 静态定位（默认） *\u002F\n",[149,133661,133662,133665,133667,133669,133671,133674],{"class":151,"line":193},[149,133663,133664],{"class":162},".static",[149,133666,81488],{"class":155},[149,133668,130584],{"class":309},[149,133670,313],{"class":155},[149,133672,133673],{"class":309},"static",[149,133675,131153],{"class":155},[149,133677,133678],{"class":151,"line":235},[149,133679,133680],{"class":295},"\u002F* 相对定位 *\u002F\n",[149,133682,133683,133686,133688,133690,133692,133694],{"class":151,"line":340},[149,133684,133685],{"class":162},".relative",[149,133687,81488],{"class":155},[149,133689,130584],{"class":309},[149,133691,313],{"class":155},[149,133693,56459],{"class":309},[149,133695,131153],{"class":155},[149,133697,133698],{"class":151,"line":346},[149,133699,133700],{"class":295},"\u002F* 绝对定位 *\u002F\n",[149,133702,133703,133706,133708,133710,133712,133714],{"class":151,"line":352},[149,133704,133705],{"class":162},".absolute",[149,133707,81488],{"class":155},[149,133709,130584],{"class":309},[149,133711,313],{"class":155},[149,133713,56526],{"class":309},[149,133715,131153],{"class":155},[149,133717,133718],{"class":151,"line":1021},[149,133719,133720],{"class":295},"\u002F* 固定定位 *\u002F\n",[149,133722,133723,133726,133728,133730,133732,133734],{"class":151,"line":1035},[149,133724,133725],{"class":162},".fixed",[149,133727,81488],{"class":155},[149,133729,130584],{"class":309},[149,133731,313],{"class":155},[149,133733,87914],{"class":309},[149,133735,131153],{"class":155},[149,133737,133738],{"class":151,"line":1054},[149,133739,133740],{"class":295},"\u002F* 粘性定位 *\u002F\n",[149,133742,133743,133746,133748,133750,133752,133755],{"class":151,"line":1072},[149,133744,133745],{"class":162},".sticky",[149,133747,81488],{"class":155},[149,133749,130584],{"class":309},[149,133751,313],{"class":155},[149,133753,133754],{"class":309},"sticky",[149,133756,131153],{"class":155},[125,133758,133759,133762],{"start":1633},[45,133760,133761],{},"一定要用好注释",[45,133763,133764],{},"浮动的盒子不会有外边距合并的问题",[1783,133766,133108],{},{"title":145,"searchDepth":193,"depth":193,"links":133768},[133769,133770],{"id":133145,"depth":193,"text":133146},{"id":133209,"depth":193,"text":133210,"children":133771},[133772,133773,133774,133775,133776,133777,133778],{"id":133213,"depth":235,"text":133214},{"id":133319,"depth":235,"text":133320},{"id":133355,"depth":235,"text":133356},{"id":133376,"depth":235,"text":133377},{"id":133411,"depth":235,"text":133412},{"id":133444,"depth":235,"text":133445},{"id":133519,"depth":235,"text":133520},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133137,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133785,"title":133786,"body":133787,"description":1797,"extension":1798,"meta":135273,"navigation":1800,"path":135274,"seo":135275,"stem":135276,"__hash__":135277},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133788,"toc":135265},[133789,133792,133796,133800,133811,133815,133832,133876,133909,133912,133929,133932,133935,133979,133983,133987,133990,133993,133997,134000,134011,134074,134115,134118,134133,134187,134195,134198,134209,134263,134289,134292,134305,134359,134391,134445,134468,134522,134525,134528,134535,134589,134610,134664,134667,134670,134755,134763,134820,134843,134847,134850,134868,134872,134891,134945,134983,134987,134990,134993,135015,135019,135027,135030,135035,135046,135049,135053,135067,135111,135114,135118,135121,135126,135152,135157,135234,135237,135241,135244,135247,135250,135253,135256,135259,135262],[10,133790,133786],{"id":133791},"_11-传统布局与定位体系",[14,133793,133795],{"id":133794},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[19,133797,133799],{"id":133798},"_1111-普通流标准流","11.1.1 普通流（标准流）",[42,133801,133802,133805,133808],{},[45,133803,133804],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[45,133806,133807],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[45,133809,133810],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[19,133812,133814],{"id":133813},"_1112-浮动","11.1.2 浮动",[42,133816,133817,133820,133823,133826,133829],{},[45,133818,133819],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[45,133821,133822],{},"浮动可以改变元素标签默认的排列方式",[45,133824,133825],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[45,133827,133828],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[45,133830,133831],{},"在使用行内块转换时盒子之间是有空隙的",[140,133833,133834],{"className":286,"code":132687,"language":288,"meta":145,"style":145},[48,133835,133836,133842,133852,133856,133862,133872],{"__ignoreMap":145},[149,133837,133838,133840],{"class":151,"line":152},[149,133839,132694],{"class":162},[149,133841,304],{"class":155},[149,133843,133844,133846,133848,133850],{"class":151,"line":193},[149,133845,1561],{"class":309},[149,133847,313],{"class":155},[149,133849,1566],{"class":309},[149,133851,841],{"class":155},[149,133853,133854],{"class":151,"line":235},[149,133855,355],{"class":155},[149,133857,133858,133860],{"class":151,"line":340},[149,133859,132715],{"class":162},[149,133861,304],{"class":155},[149,133863,133864,133866,133868,133870],{"class":151,"line":346},[149,133865,1561],{"class":309},[149,133867,313],{"class":155},[149,133869,74204],{"class":309},[149,133871,841],{"class":155},[149,133873,133874],{"class":151,"line":352},[149,133875,355],{"class":155},[2003,133877,133878,133886],{},[2006,133879,133880],{},[2009,133881,133882,133884],{},[2012,133883,128691],{"align":1566},[2012,133885,29198],{"align":1566},[2049,133887,133888,133895,133902],{},[2009,133889,133890,133892],{},[2054,133891,56432],{"align":1566},[2054,133893,133894],{"align":1566},"元素不浮动（默认值）",[2009,133896,133897,133899],{},[2054,133898,1566],{"align":1566},[2054,133900,133901],{"align":1566},"元素向左浮动",[2009,133903,133904,133906],{},[2054,133905,74204],{"align":1566},[2054,133907,133908],{"align":1566},"元素向右浮动",[24,133910,133911],{},"浮动重点：",[42,133913,133914,133917,133920,133923,133926],{},[45,133915,133916],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[45,133918,133919],{},"浮动的元素会一行内显示并且元素顶部对齐",[45,133921,133922],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[45,133924,133925],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[45,133927,133928],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[24,133930,133931],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[24,133933,133934],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[140,133936,133937],{"className":286,"code":132687,"language":288,"meta":145,"style":145},[48,133938,133939,133945,133955,133959,133965,133975],{"__ignoreMap":145},[149,133940,133941,133943],{"class":151,"line":152},[149,133942,132694],{"class":162},[149,133944,304],{"class":155},[149,133946,133947,133949,133951,133953],{"class":151,"line":193},[149,133948,1561],{"class":309},[149,133950,313],{"class":155},[149,133952,1566],{"class":309},[149,133954,841],{"class":155},[149,133956,133957],{"class":151,"line":235},[149,133958,355],{"class":155},[149,133960,133961,133963],{"class":151,"line":340},[149,133962,132715],{"class":162},[149,133964,304],{"class":155},[149,133966,133967,133969,133971,133973],{"class":151,"line":346},[149,133968,1561],{"class":309},[149,133970,313],{"class":155},[149,133972,74204],{"class":309},[149,133974,841],{"class":155},[149,133976,133977],{"class":151,"line":352},[149,133978,355],{"class":155},[19,133980,133982],{"id":133981},"_1113-定位","11.1.3 定位",[120,133984,133986],{"id":133985},"_11131-使用场景","11.1.3.1 使用场景",[24,133988,133989],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[24,133991,133992],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[120,133994,133996],{"id":133995},"_11132-定位组成","11.1.3.2 定位组成",[24,133998,133999],{},"定位 = 定位模式 + 边偏移",[125,134001,134002],{},[45,134003,134004,134007,134008],{},[31,134005,134006],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[31,134009,134010],{},"定位模式",[140,134012,134014],{"className":286,"code":134013,"language":288,"meta":145,"style":145},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[48,134015,134016,134022,134036,134053,134070],{"__ignoreMap":145},[149,134017,134018,134020],{"class":151,"line":152},[149,134019,1554],{"class":162},[149,134021,304],{"class":155},[149,134023,134024,134027,134029,134031,134033],{"class":151,"line":193},[149,134025,134026],{"class":309},"  position",[149,134028,313],{"class":155},[149,134030,56459],{"class":309},[149,134032,132084],{"class":155},[149,134034,134035],{"class":295},"\u002F* 定位模式 *\u002F\n",[149,134037,134038,134041,134043,134045,134047,134050],{"class":151,"line":235},[149,134039,134040],{"class":309},"  top",[149,134042,313],{"class":155},[149,134044,2309],{"class":309},[149,134046,326],{"class":325},[149,134048,134049],{"class":155},";           ",[149,134051,134052],{"class":295},"\u002F* 边偏移：上 *\u002F\n",[149,134054,134055,134058,134060,134062,134064,134067],{"class":151,"line":340},[149,134056,134057],{"class":309},"  left",[149,134059,313],{"class":155},[149,134061,2561],{"class":309},[149,134063,326],{"class":325},[149,134065,134066],{"class":155},";          ",[149,134068,134069],{"class":295},"\u002F* 边偏移：左 *\u002F\n",[149,134071,134072],{"class":151,"line":346},[149,134073,355],{"class":155},[2003,134075,134076,134085],{},[2006,134077,134078],{},[2009,134079,134080,134082],{},[2012,134081,2017],{"align":1566},[2012,134083,134084],{"align":1566},"语义",[2049,134086,134087,134094,134101,134108],{},[2009,134088,134089,134091],{},[2054,134090,133673],{"align":1566},[2054,134092,134093],{"align":1566},"静态定位",[2009,134095,134096,134098],{},[2054,134097,56459],{"align":1566},[2054,134099,134100],{"align":1566},"相对定位",[2009,134102,134103,134105],{},[2054,134104,56526],{"align":1566},[2054,134106,134107],{"align":1566},"绝对定位",[2009,134109,134110,134112],{},[2054,134111,87914],{"align":1566},[2054,134113,134114],{"align":1566},"固定定位",[24,134116,134117],{},"（1）静态定位：",[42,134119,134120,134131],{},[45,134121,134122,134123,134126,134127,134130],{},"静态定位是元素的 ",[31,134124,134125],{},"默认定位方式"," ， ",[31,134128,134129],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[45,134132,6899],{},[140,134134,134135],{"className":286,"code":134013,"language":288,"meta":145,"style":145},[48,134136,134137,134143,134155,134169,134183],{"__ignoreMap":145},[149,134138,134139,134141],{"class":151,"line":152},[149,134140,1554],{"class":162},[149,134142,304],{"class":155},[149,134144,134145,134147,134149,134151,134153],{"class":151,"line":193},[149,134146,134026],{"class":309},[149,134148,313],{"class":155},[149,134150,56459],{"class":309},[149,134152,132084],{"class":155},[149,134154,134035],{"class":295},[149,134156,134157,134159,134161,134163,134165,134167],{"class":151,"line":235},[149,134158,134040],{"class":309},[149,134160,313],{"class":155},[149,134162,2309],{"class":309},[149,134164,326],{"class":325},[149,134166,134049],{"class":155},[149,134168,134052],{"class":295},[149,134170,134171,134173,134175,134177,134179,134181],{"class":151,"line":340},[149,134172,134057],{"class":309},[149,134174,313],{"class":155},[149,134176,2561],{"class":309},[149,134178,326],{"class":325},[149,134180,134066],{"class":155},[149,134182,134069],{"class":295},[149,134184,134185],{"class":151,"line":346},[149,134186,355],{"class":155},[42,134188,134189,134192],{},[45,134190,134191],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[45,134193,134194],{},"静态定位在布局时我们几乎不用的",[24,134196,134197],{},"（2）相对定位",[42,134199,134200,134207],{},[45,134201,134202,134203,134206],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[31,134204,134205],{},"原来的位置"," 来说的（自恋型）",[45,134208,6899],{},[140,134210,134211],{"className":286,"code":134013,"language":288,"meta":145,"style":145},[48,134212,134213,134219,134231,134245,134259],{"__ignoreMap":145},[149,134214,134215,134217],{"class":151,"line":152},[149,134216,1554],{"class":162},[149,134218,304],{"class":155},[149,134220,134221,134223,134225,134227,134229],{"class":151,"line":193},[149,134222,134026],{"class":309},[149,134224,313],{"class":155},[149,134226,56459],{"class":309},[149,134228,132084],{"class":155},[149,134230,134035],{"class":295},[149,134232,134233,134235,134237,134239,134241,134243],{"class":151,"line":235},[149,134234,134040],{"class":309},[149,134236,313],{"class":155},[149,134238,2309],{"class":309},[149,134240,326],{"class":325},[149,134242,134049],{"class":155},[149,134244,134052],{"class":295},[149,134246,134247,134249,134251,134253,134255,134257],{"class":151,"line":340},[149,134248,134057],{"class":309},[149,134250,313],{"class":155},[149,134252,2561],{"class":309},[149,134254,326],{"class":325},[149,134256,134066],{"class":155},[149,134258,134069],{"class":295},[149,134260,134261],{"class":151,"line":346},[149,134262,355],{"class":155},[42,134264,134265],{},[45,134266,134267,134268,134270,134271,134273,134274,134277,134278,134281,134282,134284,134285,134288],{},"相对定位的特点：",[55414,134269],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55414,134272],{},"  ② ",[31,134275,134276],{},"原来"," 在标准流的 ",[31,134279,134280],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55414,134283],{},"  ③因此， ",[31,134286,134287],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[24,134290,134291],{},"（3）绝对定位",[42,134293,134294,134303],{},[45,134295,134296,134298,134299,134302],{},[31,134297,134107],{}," 是元素在移动位置的时候，是相对于它 ",[31,134300,134301],{},"祖先元素"," 来说的（拼爹型）",[45,134304,6899],{},[140,134306,134307],{"className":286,"code":134013,"language":288,"meta":145,"style":145},[48,134308,134309,134315,134327,134341,134355],{"__ignoreMap":145},[149,134310,134311,134313],{"class":151,"line":152},[149,134312,1554],{"class":162},[149,134314,304],{"class":155},[149,134316,134317,134319,134321,134323,134325],{"class":151,"line":193},[149,134318,134026],{"class":309},[149,134320,313],{"class":155},[149,134322,56459],{"class":309},[149,134324,132084],{"class":155},[149,134326,134035],{"class":295},[149,134328,134329,134331,134333,134335,134337,134339],{"class":151,"line":235},[149,134330,134040],{"class":309},[149,134332,313],{"class":155},[149,134334,2309],{"class":309},[149,134336,326],{"class":325},[149,134338,134049],{"class":155},[149,134340,134052],{"class":295},[149,134342,134343,134345,134347,134349,134351,134353],{"class":151,"line":340},[149,134344,134057],{"class":309},[149,134346,313],{"class":155},[149,134348,2561],{"class":309},[149,134350,326],{"class":325},[149,134352,134066],{"class":155},[149,134354,134069],{"class":295},[149,134356,134357],{"class":151,"line":346},[149,134358,355],{"class":155},[42,134360,134361,134376,134385,134388],{},[45,134362,134363,134364,134366,134367,134369,134370,134372,134373,134375],{},"绝对定位的特点：",[55414,134365],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55414,134368],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55414,134371],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55414,134374],{},"  (4)固定定位",[45,134377,134378,134380,134381,134384],{},[31,134379,134114],{}," 是元素 ",[31,134382,134383],{},"固定于浏览器可视区的位置"," 。（认死理型）",[45,134386,134387],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[45,134389,134390],{},"语法:",[140,134392,134393],{"className":286,"code":134013,"language":288,"meta":145,"style":145},[48,134394,134395,134401,134413,134427,134441],{"__ignoreMap":145},[149,134396,134397,134399],{"class":151,"line":152},[149,134398,1554],{"class":162},[149,134400,304],{"class":155},[149,134402,134403,134405,134407,134409,134411],{"class":151,"line":193},[149,134404,134026],{"class":309},[149,134406,313],{"class":155},[149,134408,56459],{"class":309},[149,134410,132084],{"class":155},[149,134412,134035],{"class":295},[149,134414,134415,134417,134419,134421,134423,134425],{"class":151,"line":235},[149,134416,134040],{"class":309},[149,134418,313],{"class":155},[149,134420,2309],{"class":309},[149,134422,326],{"class":325},[149,134424,134049],{"class":155},[149,134426,134052],{"class":295},[149,134428,134429,134431,134433,134435,134437,134439],{"class":151,"line":340},[149,134430,134057],{"class":309},[149,134432,313],{"class":155},[149,134434,2561],{"class":309},[149,134436,326],{"class":325},[149,134438,134066],{"class":155},[149,134440,134069],{"class":295},[149,134442,134443],{"class":151,"line":346},[149,134444,355],{"class":155},[42,134446,134447,134456],{},[45,134448,134449,134450,134452,134453,134455],{},"特点:",[55414,134451],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55414,134454],{},"  ②固定定位不再占有原先的位置,完全脱标",[45,134457,134458,134459,134461,134462,134464,134465,134467],{},"固定在版心位置的方法:",[55414,134460],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55414,134463],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55414,134466],{},"  实例：",[140,134469,134470],{"className":286,"code":134013,"language":288,"meta":145,"style":145},[48,134471,134472,134478,134490,134504,134518],{"__ignoreMap":145},[149,134473,134474,134476],{"class":151,"line":152},[149,134475,1554],{"class":162},[149,134477,304],{"class":155},[149,134479,134480,134482,134484,134486,134488],{"class":151,"line":193},[149,134481,134026],{"class":309},[149,134483,313],{"class":155},[149,134485,56459],{"class":309},[149,134487,132084],{"class":155},[149,134489,134035],{"class":295},[149,134491,134492,134494,134496,134498,134500,134502],{"class":151,"line":235},[149,134493,134040],{"class":309},[149,134495,313],{"class":155},[149,134497,2309],{"class":309},[149,134499,326],{"class":325},[149,134501,134049],{"class":155},[149,134503,134052],{"class":295},[149,134505,134506,134508,134510,134512,134514,134516],{"class":151,"line":340},[149,134507,134057],{"class":309},[149,134509,313],{"class":155},[149,134511,2561],{"class":309},[149,134513,326],{"class":325},[149,134515,134066],{"class":155},[149,134517,134069],{"class":295},[149,134519,134520],{"class":151,"line":346},[149,134521,355],{"class":155},[83,134523],{"style":85,"src":134524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[24,134526,134527],{},"(5)粘性定位",[42,134529,134530,134533],{},[45,134531,134532],{},"粘性定位可以被认为是相对定位和固定定位的混合",[45,134534,6899],{},[140,134536,134537],{"className":286,"code":134013,"language":288,"meta":145,"style":145},[48,134538,134539,134545,134557,134571,134585],{"__ignoreMap":145},[149,134540,134541,134543],{"class":151,"line":152},[149,134542,1554],{"class":162},[149,134544,304],{"class":155},[149,134546,134547,134549,134551,134553,134555],{"class":151,"line":193},[149,134548,134026],{"class":309},[149,134550,313],{"class":155},[149,134552,56459],{"class":309},[149,134554,132084],{"class":155},[149,134556,134035],{"class":295},[149,134558,134559,134561,134563,134565,134567,134569],{"class":151,"line":235},[149,134560,134040],{"class":309},[149,134562,313],{"class":155},[149,134564,2309],{"class":309},[149,134566,326],{"class":325},[149,134568,134049],{"class":155},[149,134570,134052],{"class":295},[149,134572,134573,134575,134577,134579,134581,134583],{"class":151,"line":340},[149,134574,134057],{"class":309},[149,134576,313],{"class":155},[149,134578,2561],{"class":309},[149,134580,326],{"class":325},[149,134582,134066],{"class":155},[149,134584,134069],{"class":295},[149,134586,134587],{"class":151,"line":346},[149,134588,355],{"class":155},[42,134590,134591],{},[45,134592,134593,134594,134596,134597,134599,134600,134602,134603,134606,134607,134609],{},"粘性定位的特点：",[55414,134595],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55414,134598],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55414,134601],{},"  ③必须添加 top 、left、right、bottom ",[31,134604,134605],{},"其中一个"," 才有效",[55414,134608],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[140,134611,134612],{"className":286,"code":134013,"language":288,"meta":145,"style":145},[48,134613,134614,134620,134632,134646,134660],{"__ignoreMap":145},[149,134615,134616,134618],{"class":151,"line":152},[149,134617,1554],{"class":162},[149,134619,304],{"class":155},[149,134621,134622,134624,134626,134628,134630],{"class":151,"line":193},[149,134623,134026],{"class":309},[149,134625,313],{"class":155},[149,134627,56459],{"class":309},[149,134629,132084],{"class":155},[149,134631,134035],{"class":295},[149,134633,134634,134636,134638,134640,134642,134644],{"class":151,"line":235},[149,134635,134040],{"class":309},[149,134637,313],{"class":155},[149,134639,2309],{"class":309},[149,134641,326],{"class":325},[149,134643,134049],{"class":155},[149,134645,134052],{"class":295},[149,134647,134648,134650,134652,134654,134656,134658],{"class":151,"line":340},[149,134649,134057],{"class":309},[149,134651,313],{"class":155},[149,134653,2561],{"class":309},[149,134655,326],{"class":325},[149,134657,134066],{"class":155},[149,134659,134069],{"class":295},[149,134661,134662],{"class":151,"line":346},[149,134663,355],{"class":155},[83,134665],{"style":85,"src":134666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[24,134668,134669],{},"(6)总结",[2003,134671,134672,134687],{},[2006,134673,134674],{},[2009,134675,134676,134678,134681,134684],{},[2012,134677,134010],{"align":1566},[2012,134679,134680],{"align":1566},"是否脱标",[2012,134682,134683],{"align":1566},"移动位置",[2012,134685,134686],{"align":1566},"是否常用",[2049,134688,134689,134702,134716,134730,134743],{},[2009,134690,134691,134694,134696,134699],{},[2054,134692,134693],{"align":1566},"Static 静态定位",[2054,134695,106357],{"align":1566},[2054,134697,134698],{"align":1566},"不能使用边偏移",[2054,134700,134701],{"align":1566},"很少",[2009,134703,134704,134707,134710,134713],{},[2054,134705,134706],{"align":1566},"Relative 相对定位",[2054,134708,134709],{"align":1566},"否(占有位置)",[2054,134711,134712],{"align":1566},"相对于自身位置移动",[2054,134714,134715],{"align":1566},"基本单独使用",[2009,134717,134718,134721,134724,134727],{},[2054,134719,134720],{"align":1566},"Absolute 绝对定位",[2054,134722,134723],{"align":1566},"是(不占有位置)",[2054,134725,134726],{"align":1566},"带有定位的父级",[2054,134728,134729],{"align":1566},"要和定位父级元素搭配使用",[2009,134731,134732,134735,134737,134740],{},[2054,134733,134734],{"align":1566},"Fixed 固定定位",[2054,134736,134723],{"align":1566},[2054,134738,134739],{"align":1566},"浏览器可视区",[2054,134741,134742],{"align":1566},"单独使用,不需要父级",[2009,134744,134745,134748,134750,134752],{},[2054,134746,134747],{"align":1566},"Sticky 粘性定位",[2054,134749,134709],{"align":1566},[2054,134751,134739],{"align":1566},[2054,134753,134754],{"align":1566},"当前阶段少",[125,134756,134757],{"start":193},[45,134758,134759,134762],{},[31,134760,134761],{},"边偏移"," 则决定了该元素的最终位置",[2003,134764,134765,134776],{},[2006,134766,134767],{},[2009,134768,134769,134772,134774],{},[2012,134770,134771],{"align":1566},"边偏移属性",[2012,134773,29201],{"align":1566},[2012,134775,29198],{"align":1566},[2049,134777,134778,134789,134800,134810],{},[2009,134779,134780,134783,134786],{},[2054,134781,134782],{"align":1566},"top",[2054,134784,134785],{"align":1566},"top: 80px;",[2054,134787,134788],{"align":1566},"顶端偏移量，定义元素相对于父元素上边线的距离",[2009,134790,134791,134794,134797],{},[2054,134792,134793],{"align":1566},"bottom",[2054,134795,134796],{"align":1566},"bottom: 80px ;",[2054,134798,134799],{"align":1566},"底部偏移量，定义元素相对于其父元素下边线的距离",[2009,134801,134802,134804,134807],{},[2054,134803,1566],{"align":1566},[2054,134805,134806],{"align":1566},"left: 80px ;",[2054,134808,134809],{"align":1566},"左侧偏移量，定义元素相对于其父元素左边线的距离",[2009,134811,134812,134814,134817],{},[2054,134813,74204],{"align":1566},[2054,134815,134816],{"align":1566},"right: 80px ;",[2054,134818,134819],{"align":1566},"右侧偏移量，定义元素相对于其父元素右边线的距离",[42,134821,134822],{},[45,134823,866,134824,134826,134827,134829,134830,134832,134833,134836,134837,134839,134840,134842],{},[55414,134825],{},"  ① ",[31,134828,134761],{}," 需要和 ",[31,134831,134010],{}," 联合使用， ",[31,134834,134835],{},"单独使用无效"," ；",[55414,134838],{},"  ②top和bottom不要同时使用",[55414,134841],{},"  ③left和right不要同时使用",[120,134844,134846],{"id":134845},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[24,134848,134849],{},"子级是绝对定位的话，父级要用相对定位",[42,134851,134852,134855,134858,134861],{},[45,134853,134854],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[45,134856,134857],{},"父盒子需要加定位限制子盒子在父盒子内显示",[45,134859,134860],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[45,134862,134863,134864,134867],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[31,134865,134866],{},"子绝父绝"," 也会遇到",[120,134869,134871],{"id":134870},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[42,134873,134874,134889],{},[45,134875,134876,134877,134880,134881,134884,134885,134888],{},"在使用 ",[31,134878,134879],{},"定位"," 布局时，可能会 ",[31,134882,134883],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[31,134886,134887],{},"z-index"," 来控制盒子的前后次序 (z轴)",[45,134890,6899],{},[140,134892,134893],{"className":286,"code":134013,"language":288,"meta":145,"style":145},[48,134894,134895,134901,134913,134927,134941],{"__ignoreMap":145},[149,134896,134897,134899],{"class":151,"line":152},[149,134898,1554],{"class":162},[149,134900,304],{"class":155},[149,134902,134903,134905,134907,134909,134911],{"class":151,"line":193},[149,134904,134026],{"class":309},[149,134906,313],{"class":155},[149,134908,56459],{"class":309},[149,134910,132084],{"class":155},[149,134912,134035],{"class":295},[149,134914,134915,134917,134919,134921,134923,134925],{"class":151,"line":235},[149,134916,134040],{"class":309},[149,134918,313],{"class":155},[149,134920,2309],{"class":309},[149,134922,326],{"class":325},[149,134924,134049],{"class":155},[149,134926,134052],{"class":295},[149,134928,134929,134931,134933,134935,134937,134939],{"class":151,"line":340},[149,134930,134057],{"class":309},[149,134932,313],{"class":155},[149,134934,2561],{"class":309},[149,134936,326],{"class":325},[149,134938,134066],{"class":155},[149,134940,134069],{"class":295},[149,134942,134943],{"class":151,"line":346},[149,134944,355],{"class":155},[42,134946,134947],{},[45,134948,134949,134950,134826,134952,134954,134955,129388,134958,84220,134961,134963,134964,134966,134967,134970,134971,134836,134974,134976,134977,134980,134982],{},"z-index的特性",[55414,134951],{},[31,134953,128691],{}," ： ",[31,134956,134957],{},"正整数",[31,134959,134960],{},"负整数",[31,134962,2056],{}," ，默认值是 0，数值越大，盒子越靠上；",[55414,134965],{},"  ②如果 ",[31,134968,134969],{},"属性值相同"," ，则按照书写顺序， ",[31,134972,134973],{},"后来居上",[55414,134975],{},"  ③数字后面 ",[31,134978,134979],{},"不能加单位",[55414,134981],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[120,134984,134986],{"id":134985},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[24,134988,134989],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[24,134991,134992],{},"方法:",[42,134994,134995,135005],{},[45,134996,134997,134998,135001,135002],{},"left: 50%; 让 ",[31,134999,135000],{},"盒子的左侧"," 移动到 ",[31,135003,135004],{},"父级元素的水平中心位置",[45,135006,135007,135008,135011,135012],{},"margin-left: -100px; 让盒子 ",[31,135009,135010],{},"向左"," 移动 ",[31,135013,135014],{},"自身宽度的一半",[120,135016,135018],{"id":135017},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[125,135020,135021,135024],{},[45,135022,135023],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[45,135025,135026],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[24,135028,135029],{},"也就是说绝对定位和固定定位和浮动类似",[125,135031,135032],{"start":235},[45,135033,135034],{},"display 是显示模式， 可以改变显示模式有以下方式:",[42,135036,135037,135040,135043],{},[45,135038,135039],{},"可以用inline-block 转换为行内块",[45,135041,135042],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[45,135044,135045],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[24,135047,135048],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[120,135050,135052],{"id":135051},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[125,135054,135055,135058,135061,135064],{},[45,135056,135057],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[45,135059,135060],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[45,135062,135063],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[45,135065,135066],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[140,135068,135069],{"className":286,"code":132687,"language":288,"meta":145,"style":145},[48,135070,135071,135077,135087,135091,135097,135107],{"__ignoreMap":145},[149,135072,135073,135075],{"class":151,"line":152},[149,135074,132694],{"class":162},[149,135076,304],{"class":155},[149,135078,135079,135081,135083,135085],{"class":151,"line":193},[149,135080,1561],{"class":309},[149,135082,313],{"class":155},[149,135084,1566],{"class":309},[149,135086,841],{"class":155},[149,135088,135089],{"class":151,"line":235},[149,135090,355],{"class":155},[149,135092,135093,135095],{"class":151,"line":340},[149,135094,132715],{"class":162},[149,135096,304],{"class":155},[149,135098,135099,135101,135103,135105],{"class":151,"line":346},[149,135100,1561],{"class":309},[149,135102,313],{"class":155},[149,135104,74204],{"class":309},[149,135106,841],{"class":155},[149,135108,135109],{"class":151,"line":352},[149,135110,355],{"class":155},[83,135112],{"style":85,"src":135113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[120,135115,135117],{"id":135116},"_11138-轮播图","11.1.3.8 轮播图",[83,135119],{"style":85,"src":135120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[125,135122,135123],{},[45,135124,135125],{},"制作顺序:",[42,135127,135128,135131,135134,135143],{},[45,135129,135130],{},"大盒子我们类名为： tb-promo 淘宝广告",[45,135132,135133],{},"里面先放一张图片",[45,135135,135136,135137,135139,135140,135142],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55414,135138],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55414,135141],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[45,135144,135145,135146,135148,135149,135151],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55414,135147],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55414,135150],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[125,135153,135154],{"start":193},[45,135155,135156],{},"代码模块",[140,135158,135160],{"className":286,"code":135159,"language":288,"meta":145,"style":145},"\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",[48,135161,135162,135167,135174,135184,135194,135204,135208,135213,135220,135230],{"__ignoreMap":145},[149,135163,135164],{"class":151,"line":152},[149,135165,135166],{"class":295},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[149,135168,135169,135172],{"class":151,"line":193},[149,135170,135171],{"class":162},".son",[149,135173,304],{"class":155},[149,135175,135176,135178,135180,135182],{"class":151,"line":235},[149,135177,134026],{"class":309},[149,135179,313],{"class":155},[149,135181,56526],{"class":309},[149,135183,841],{"class":155},[149,135185,135186,135188,135190,135192],{"class":151,"line":340},[149,135187,134040],{"class":309},[149,135189,313],{"class":155},[149,135191,2056],{"class":309},[149,135193,841],{"class":155},[149,135195,135196,135198,135200,135202],{"class":151,"line":346},[149,135197,134057],{"class":309},[149,135199,313],{"class":155},[149,135201,2056],{"class":309},[149,135203,841],{"class":155},[149,135205,135206],{"class":151,"line":352},[149,135207,355],{"class":155},[149,135209,135210],{"class":151,"line":1021},[149,135211,135212],{"class":295},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[149,135214,135215,135218],{"class":151,"line":1035},[149,135216,135217],{"class":162},".father",[149,135219,304],{"class":155},[149,135221,135222,135224,135226,135228],{"class":151,"line":1054},[149,135223,134026],{"class":309},[149,135225,313],{"class":155},[149,135227,56459],{"class":309},[149,135229,841],{"class":155},[149,135231,135232],{"class":151,"line":1072},[149,135233,355],{"class":155},[24,135235,135236],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[19,135238,135240],{"id":135239},"_1114-定位数值的移动","11.1.4 定位数值的移动",[83,135242],{"style":85,"src":135243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[24,135245,135246],{},"✨ 黄金口诀：",[24,135248,135249],{},"\"TOP正下负上，LEFT正右负左\"",[24,135251,135252],{},"\"RIGHT正左负右，BOTTOM正上负下",[24,135254,135255],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[24,135257,135258],{},"✨ 简单记：",[24,135260,135261],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1783,135263,135264],{},"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":145,"searchDepth":193,"depth":193,"links":135266},[135267],{"id":133794,"depth":193,"text":133795,"children":135268},[135269,135270,135271,135272],{"id":133798,"depth":235,"text":133799},{"id":133813,"depth":235,"text":133814},{"id":133981,"depth":235,"text":133982},{"id":135239,"depth":235,"text":135240},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133786,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135279,"title":135280,"body":135281,"description":1797,"extension":1798,"meta":136699,"navigation":1800,"path":136700,"seo":136701,"stem":136702,"__hash__":136703},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135282,"toc":136678},[135283,135286,135290,135298,135302,135307,135315,135327,135331,135336,135344,135355,135359,135364,135405,135413,135417,135420,135423,135426,135520,135523,135617,135620,135714,135717,135720,135750,135753,135756,135786,135789,135792,135795,135798,135801,135804,135807,135877,135880,135884,135888,135929,135933,135939,135942,135945,135949,135952,135955,135958,136039,136042,136045,136049,136053,136056,136059,136062,136065,136068,136074,136083,136087,136106,136110,136120,136123,136126,136129,136132,136135,136138,136141,136144,136153,136157,136166,136169,136174,136227,136232,136398,136401,136404,136409,136412,136415,136418,136421,136426,136574,136577,136580,136585,136588,136593,136627,136630,136633,136637,136640,136647,136650,136653,136656,136659,136662,136665,136668,136672,136675],[10,135284,135280],{"id":135285},"_12-显示隐藏与图形资源",[14,135287,135289],{"id":135288},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[42,135291,135292,135295],{},[45,135293,135294],{},"目的:让一个元素在页面中消失或者显示出来",[45,135296,135297],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[19,135299,135301],{"id":135300},"_1211-display-显示","12.1.1 display 显示",[125,135303,135304],{},[45,135305,135306],{},"display 设置或检索对象是否及如何显示",[42,135308,135309,135312],{},[45,135310,135311],{},"display: none;隐藏对象",[45,135313,135314],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[125,135316,135317,135324],{"start":193},[45,135318,135319,135320,135323],{},"特点： display 隐藏元素后， ",[31,135321,135322],{},"不再占"," 有原来的位置",[45,135325,135326],{},"在js中使用非常的广泛",[19,135328,135330],{"id":135329},"_1212-visibility可见性","12.1.2 visibility可见性",[125,135332,135333],{},[45,135334,135335],{},"visibility 属性用于指定一个元素应可见还是隐藏",[42,135337,135338,135341],{},[45,135339,135340],{},"visibility： visible；元素可见",[45,135342,135343],{},"visibility：hidden；元素隐藏",[125,135345,135346,135349,135352],{"start":193},[45,135347,135348],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[45,135350,135351],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[45,135353,135354],{},"隐藏后继续占有原有位置",[19,135356,135358],{"id":135357},"_1213-overflow溢出","12.1.3 overflow溢出",[42,135360,135361],{},[45,135362,135363],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[2003,135365,135366,135374],{},[2006,135367,135368],{},[2009,135369,135370,135372],{},[2012,135371,128691],{"align":1566},[2012,135373,29198],{"align":1566},[2049,135375,135376,135384,135391,135398],{},[2009,135377,135378,135381],{},[2054,135379,135380],{"align":1566},"visible",[2054,135382,135383],{"align":1566},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[2009,135385,135386,135388],{},[2054,135387,63403],{"align":1566},[2054,135389,135390],{"align":1566},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[2009,135392,135393,135395],{},[2054,135394,130644],{"align":1566},[2054,135396,135397],{"align":1566},"不管超出内容否，总是显示滚动条",[2009,135399,135400,135402],{},[2054,135401,74345],{"align":1566},[2054,135403,135404],{"align":1566},"超出自动显示滚动条，不超出不显示滚动条",[42,135406,135407,135410],{},[45,135408,135409],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[45,135411,135412],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[19,135414,135416],{"id":135415},"_1214-案例收获","12.1.4 案例收获",[83,135418],{"style":85,"src":135419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[24,135421,135422],{},"问题：没做出来动态效果，使用hover没实现",[24,135424,135425],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[140,135427,135428],{"className":286,"code":133652,"language":288,"meta":145,"style":145},[48,135429,135430,135434,135448,135452,135466,135470,135484,135488,135502,135506],{"__ignoreMap":145},[149,135431,135432],{"class":151,"line":152},[149,135433,133659],{"class":295},[149,135435,135436,135438,135440,135442,135444,135446],{"class":151,"line":193},[149,135437,133664],{"class":162},[149,135439,81488],{"class":155},[149,135441,130584],{"class":309},[149,135443,313],{"class":155},[149,135445,133673],{"class":309},[149,135447,131153],{"class":155},[149,135449,135450],{"class":151,"line":235},[149,135451,133680],{"class":295},[149,135453,135454,135456,135458,135460,135462,135464],{"class":151,"line":340},[149,135455,133685],{"class":162},[149,135457,81488],{"class":155},[149,135459,130584],{"class":309},[149,135461,313],{"class":155},[149,135463,56459],{"class":309},[149,135465,131153],{"class":155},[149,135467,135468],{"class":151,"line":346},[149,135469,133700],{"class":295},[149,135471,135472,135474,135476,135478,135480,135482],{"class":151,"line":352},[149,135473,133705],{"class":162},[149,135475,81488],{"class":155},[149,135477,130584],{"class":309},[149,135479,313],{"class":155},[149,135481,56526],{"class":309},[149,135483,131153],{"class":155},[149,135485,135486],{"class":151,"line":1021},[149,135487,133720],{"class":295},[149,135489,135490,135492,135494,135496,135498,135500],{"class":151,"line":1035},[149,135491,133725],{"class":162},[149,135493,81488],{"class":155},[149,135495,130584],{"class":309},[149,135497,313],{"class":155},[149,135499,87914],{"class":309},[149,135501,131153],{"class":155},[149,135503,135504],{"class":151,"line":1054},[149,135505,133740],{"class":295},[149,135507,135508,135510,135512,135514,135516,135518],{"class":151,"line":1072},[149,135509,133745],{"class":162},[149,135511,81488],{"class":155},[149,135513,130584],{"class":309},[149,135515,313],{"class":155},[149,135517,133754],{"class":309},[149,135519,131153],{"class":155},[24,135521,135522],{},"完整代码：",[140,135524,135525],{"className":286,"code":133652,"language":288,"meta":145,"style":145},[48,135526,135527,135531,135545,135549,135563,135567,135581,135585,135599,135603],{"__ignoreMap":145},[149,135528,135529],{"class":151,"line":152},[149,135530,133659],{"class":295},[149,135532,135533,135535,135537,135539,135541,135543],{"class":151,"line":193},[149,135534,133664],{"class":162},[149,135536,81488],{"class":155},[149,135538,130584],{"class":309},[149,135540,313],{"class":155},[149,135542,133673],{"class":309},[149,135544,131153],{"class":155},[149,135546,135547],{"class":151,"line":235},[149,135548,133680],{"class":295},[149,135550,135551,135553,135555,135557,135559,135561],{"class":151,"line":340},[149,135552,133685],{"class":162},[149,135554,81488],{"class":155},[149,135556,130584],{"class":309},[149,135558,313],{"class":155},[149,135560,56459],{"class":309},[149,135562,131153],{"class":155},[149,135564,135565],{"class":151,"line":346},[149,135566,133700],{"class":295},[149,135568,135569,135571,135573,135575,135577,135579],{"class":151,"line":352},[149,135570,133705],{"class":162},[149,135572,81488],{"class":155},[149,135574,130584],{"class":309},[149,135576,313],{"class":155},[149,135578,56526],{"class":309},[149,135580,131153],{"class":155},[149,135582,135583],{"class":151,"line":1021},[149,135584,133720],{"class":295},[149,135586,135587,135589,135591,135593,135595,135597],{"class":151,"line":1035},[149,135588,133725],{"class":162},[149,135590,81488],{"class":155},[149,135592,130584],{"class":309},[149,135594,313],{"class":155},[149,135596,87914],{"class":309},[149,135598,131153],{"class":155},[149,135600,135601],{"class":151,"line":1054},[149,135602,133740],{"class":295},[149,135604,135605,135607,135609,135611,135613,135615],{"class":151,"line":1072},[149,135606,133745],{"class":162},[149,135608,81488],{"class":155},[149,135610,130584],{"class":309},[149,135612,313],{"class":155},[149,135614,133754],{"class":309},[149,135616,131153],{"class":155},[24,135618,135619],{},"分布思路重点详解：",[140,135621,135622],{"className":286,"code":133652,"language":288,"meta":145,"style":145},[48,135623,135624,135628,135642,135646,135660,135664,135678,135682,135696,135700],{"__ignoreMap":145},[149,135625,135626],{"class":151,"line":152},[149,135627,133659],{"class":295},[149,135629,135630,135632,135634,135636,135638,135640],{"class":151,"line":193},[149,135631,133664],{"class":162},[149,135633,81488],{"class":155},[149,135635,130584],{"class":309},[149,135637,313],{"class":155},[149,135639,133673],{"class":309},[149,135641,131153],{"class":155},[149,135643,135644],{"class":151,"line":235},[149,135645,133680],{"class":295},[149,135647,135648,135650,135652,135654,135656,135658],{"class":151,"line":340},[149,135649,133685],{"class":162},[149,135651,81488],{"class":155},[149,135653,130584],{"class":309},[149,135655,313],{"class":155},[149,135657,56459],{"class":309},[149,135659,131153],{"class":155},[149,135661,135662],{"class":151,"line":346},[149,135663,133700],{"class":295},[149,135665,135666,135668,135670,135672,135674,135676],{"class":151,"line":352},[149,135667,133705],{"class":162},[149,135669,81488],{"class":155},[149,135671,130584],{"class":309},[149,135673,313],{"class":155},[149,135675,56526],{"class":309},[149,135677,131153],{"class":155},[149,135679,135680],{"class":151,"line":1021},[149,135681,133720],{"class":295},[149,135683,135684,135686,135688,135690,135692,135694],{"class":151,"line":1035},[149,135685,133725],{"class":162},[149,135687,81488],{"class":155},[149,135689,130584],{"class":309},[149,135691,313],{"class":155},[149,135693,87914],{"class":309},[149,135695,131153],{"class":155},[149,135697,135698],{"class":151,"line":1054},[149,135699,133740],{"class":295},[149,135701,135702,135704,135706,135708,135710,135712],{"class":151,"line":1072},[149,135703,133745],{"class":162},[149,135705,81488],{"class":155},[149,135707,130584],{"class":309},[149,135709,313],{"class":155},[149,135711,133754],{"class":309},[149,135713,131153],{"class":155},[83,135715],{"style":85,"src":135716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[24,135718,135719],{},"图片太大，盒子太小，此时需要修改图片的大小",[140,135721,135722],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,135723,135724],{"__ignoreMap":145},[149,135725,135726,135728,135730,135732,135734,135736,135738,135740,135742,135744,135746,135748],{"class":151,"line":152},[149,135727,156],{"class":155},[149,135729,83],{"class":159},[149,135731,163],{"class":162},[149,135733,166],{"class":155},[149,135735,262],{"class":169},[149,135737,265],{"class":162},[149,135739,166],{"class":155},[149,135741,270],{"class":169},[149,135743,273],{"class":162},[149,135745,166],{"class":155},[149,135747,278],{"class":169},[149,135749,190],{"class":155},[83,135751],{"style":85,"src":135752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[24,135754,135755],{},"制造遮罩层",[140,135757,135758],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,135759,135760],{"__ignoreMap":145},[149,135761,135762,135764,135766,135768,135770,135772,135774,135776,135778,135780,135782,135784],{"class":151,"line":152},[149,135763,156],{"class":155},[149,135765,83],{"class":159},[149,135767,163],{"class":162},[149,135769,166],{"class":155},[149,135771,262],{"class":169},[149,135773,265],{"class":162},[149,135775,166],{"class":155},[149,135777,270],{"class":169},[149,135779,273],{"class":162},[149,135781,166],{"class":155},[149,135783,278],{"class":169},[149,135785,190],{"class":155},[24,135787,135788],{},"此时是这样的为标准流",[83,135790],{"style":85,"src":135791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[24,135793,135794],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[24,135796,135797],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[24,135799,135800],{},"让他在中间，用center(background-position)",[24,135802,135803],{},"将需要变的尽可能放到一个盒子中",[24,135805,135806],{},"放大盒子上内部盒子发生变化",[140,135808,135810],{"className":286,"code":135809,"language":288,"meta":145,"style":145},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[48,135811,135812,135818,135828,135832,135839,135849,135861,135873],{"__ignoreMap":145},[149,135813,135814,135816],{"class":151,"line":152},[149,135815,129292],{"class":162},[149,135817,304],{"class":155},[149,135819,135820,135822,135824,135826],{"class":151,"line":193},[149,135821,134026],{"class":309},[149,135823,313],{"class":155},[149,135825,56459],{"class":309},[149,135827,841],{"class":155},[149,135829,135830],{"class":151,"line":235},[149,135831,355],{"class":155},[149,135833,135834,135837],{"class":151,"line":340},[149,135835,135836],{"class":162},".child",[149,135838,304],{"class":155},[149,135840,135841,135843,135845,135847],{"class":151,"line":346},[149,135842,134026],{"class":309},[149,135844,313],{"class":155},[149,135846,56526],{"class":309},[149,135848,841],{"class":155},[149,135850,135851,135853,135855,135857,135859],{"class":151,"line":352},[149,135852,134040],{"class":309},[149,135854,313],{"class":155},[149,135856,332],{"class":309},[149,135858,2191],{"class":325},[149,135860,841],{"class":155},[149,135862,135863,135865,135867,135869,135871],{"class":151,"line":1021},[149,135864,134057],{"class":309},[149,135866,313],{"class":155},[149,135868,332],{"class":309},[149,135870,2191],{"class":325},[149,135872,841],{"class":155},[149,135874,135875],{"class":151,"line":1035},[149,135876,355],{"class":155},[24,135878,135879],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135881,135883],{"id":135882},"_122-精灵图","12.2 精灵图",[19,135885,135887],{"id":135886},"_1221-理解","12.2.1 理解",[125,135889,135890,135908],{},[45,135891,135892,135893,134126,135896,135899,135900,135903,135904,135907],{},"目的： ",[31,135894,135895],{},"为了有效地减少服务器接收和发送请求的次数",[31,135897,135898],{},"提高"," 页面的 ",[31,135901,135902],{},"加载速度"," ，出现了 ",[31,135905,135906],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[45,135909,135910,135911,135913,135914,135916,135917,135919,135920,135922,135923,135925,135926,135928],{},"使用精灵图核心：",[55414,135912],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55414,135915],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55414,135918],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55414,135921],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55414,135924],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55414,135927],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[19,135930,135932],{"id":135931},"_1222-扒图","12.2.2 扒图",[140,135934,135937],{"className":135935,"code":135936,"language":1655},[1653],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[48,135938,135936],{"__ignoreMap":145},[83,135940],{"style":85,"src":135941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[83,135943],{"style":85,"src":135944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[19,135946,135948],{"id":135947},"_1223-精灵图的实现","12.2.3 精灵图的实现",[83,135950],{"style":85,"src":135951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[24,135953,135954],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[83,135956],{"style":85,"src":135957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[140,135959,135961],{"className":286,"code":135960,"language":288,"meta":145,"style":145},"\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",[48,135962,135963,135968,135975,135987,135999,136018,136035],{"__ignoreMap":145},[149,135964,135965],{"class":151,"line":152},[149,135966,135967],{"class":295},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[149,135969,135970,135973],{"class":151,"line":193},[149,135971,135972],{"class":162},".icon",[149,135974,304],{"class":155},[149,135976,135977,135979,135981,135983,135985],{"class":151,"line":235},[149,135978,72252],{"class":309},[149,135980,313],{"class":155},[149,135982,2561],{"class":309},[149,135984,326],{"class":325},[149,135986,841],{"class":155},[149,135988,135989,135991,135993,135995,135997],{"class":151,"line":340},[149,135990,72472],{"class":309},[149,135992,313],{"class":155},[149,135994,2561],{"class":309},[149,135996,326],{"class":325},[149,135998,841],{"class":155},[149,136000,136001,136003,136005,136007,136009,136012,136014,136016],{"class":151,"line":346},[149,136002,72295],{"class":309},[149,136004,313],{"class":155},[149,136006,63415],{"class":309},[149,136008,319],{"class":155},[149,136010,136011],{"class":6932},"sprites.png",[149,136013,15427],{"class":155},[149,136015,63425],{"class":309},[149,136017,841],{"class":155},[149,136019,136020,136022,136024,136026,136028,136031,136033],{"class":151,"line":352},[149,136021,130484],{"class":309},[149,136023,313],{"class":155},[149,136025,53463],{"class":309},[149,136027,326],{"class":325},[149,136029,136030],{"class":309}," -20",[149,136032,326],{"class":325},[149,136034,841],{"class":155},[149,136036,136037],{"class":151,"line":1021},[149,136038,355],{"class":155},[83,136040],{"style":85,"src":136041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[24,136043,136044],{},"在前端中坐标轴的正方向是右和下",[14,136046,136048],{"id":136047},"_123-字体图标","12.3 字体图标",[19,136050,136052],{"id":136051},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[24,136054,136055],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[24,136057,136058],{},"精灵图是有诸多优点的，但是缺点很明显。",[24,136060,136061],{},"1.图片文件还是比较大的。",[24,136063,136064],{},"2.图片本身放大和缩小会失真。",[24,136066,136067],{},"3.一旦图片制作完毕想要更换非常复杂。",[24,136069,136070,136071,27449],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[31,136072,136073],{},"字体图标 iconfont",[24,136075,136076,136079,136080,30091],{},[31,136077,136078],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[31,136081,136082],{},"展示的是图标，本质属于字体",[19,136084,136086],{"id":136085},"_1232-字体图标的优点","12.3.2 字体图标的优点",[42,136088,136089,136094,136097,136100,136103],{},[45,136090,136091,136093],{},[31,136092,27585],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[45,136095,136096],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[45,136098,136099],{},"兼容性：几乎支持所有的浏览器，请放心使用",[45,136101,136102],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[45,136104,136105],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[19,136107,136109],{"id":136108},"_1233-字体库下载网站","12.3.3 字体库下载网站",[42,136111,136112],{},[45,136113,136114,136115],{},"icomoon字体库：",[2102,136116,136119],{"href":136117,"rel":136118},"http:\u002F\u002Ficomoon.io\u002F",[25573],"http:\u002F\u002Ficomoon.io",[24,136121,136122],{},"进去之后点icomoon app",[83,136124],{"style":85,"src":136125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[24,136127,136128],{},"可以对其编辑：",[83,136130],{"style":85,"src":136131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[24,136133,136134],{},"生成字体：",[83,136136],{"style":85,"src":136137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[24,136139,136140],{},"下载：",[83,136142],{"style":85,"src":136143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[42,136145,136146],{},[45,136147,136148,136149],{},"阿里iconfont字体库： ",[2102,136150,136151],{"href":136151,"rel":136152},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25573],[19,136154,136156],{"id":136155},"_1234-字体图标的引入","12.3.4 字体图标的引入",[125,136158,136159],{},[45,136160,136161,136162,136165],{},"把下载包里面的 ",[31,136163,136164],{},"fonts"," 文件夹放入页面根目录下",[83,136167],{"style":85,"src":136168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[125,136170,136171],{"start":193},[45,136172,136173],{},"字体文件格式",[2003,136175,136176,136185],{},[2006,136177,136178],{},[2009,136179,136180,136183],{},[2012,136181,136182],{"align":1566},"格式",[2012,136184,25448],{"align":1566},[2049,136186,136187,136197,136207,136217],{},[2009,136188,136189,136194],{},[2054,136190,136191],{"align":1566},[31,136192,136193],{},".ttf",[2054,136195,136196],{"align":1566},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[2009,136198,136199,136204],{},[2054,136200,136201],{"align":1566},[31,136202,136203],{},".woff",[2054,136205,136206],{"align":1566},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[2009,136208,136209,136214],{},[2054,136210,136211],{"align":1566},[31,136212,136213],{},".eot",[2054,136215,136216],{"align":1566},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[2009,136218,136219,136224],{},[2054,136220,136221],{"align":1566},[31,136222,136223],{},"svg",[2054,136225,136226],{"align":1566},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[125,136228,136229],{"start":235},[45,136230,136231],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[140,136233,136235],{"className":286,"code":136234,"language":288,"meta":145,"style":145},"\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",[48,136236,136237,136242,136249,136261,136277,136302,136323,136343,136363,136367,136373,136383,136394],{"__ignoreMap":145},[149,136238,136239],{"class":151,"line":152},[149,136240,136241],{"class":295},"\u002F* 引入字体图标 *\u002F\n",[149,136243,136244,136247],{"class":151,"line":193},[149,136245,136246],{"class":325},"@font-face",[149,136248,304],{"class":155},[149,136250,136251,136254,136256,136259],{"class":151,"line":235},[149,136252,136253],{"class":309},"  font-family",[149,136255,313],{"class":155},[149,136257,136258],{"class":169},"'icomoon'",[149,136260,841],{"class":155},[149,136262,136263,136266,136268,136270,136272,136275],{"class":151,"line":340},[149,136264,136265],{"class":309},"  src",[149,136267,313],{"class":155},[149,136269,63415],{"class":309},[149,136271,319],{"class":155},[149,136273,136274],{"class":169},"'fonts\u002Ficomoon.eot'",[149,136276,337],{"class":155},[149,136278,136279,136281,136283,136285,136287,136290,136292,136295,136297,136300],{"class":151,"line":346},[149,136280,136265],{"class":309},[149,136282,313],{"class":155},[149,136284,63415],{"class":309},[149,136286,319],{"class":155},[149,136288,136289],{"class":169},"'fonts\u002Ficomoon.eot?#iefix'",[149,136291,15427],{"class":155},[149,136293,136294],{"class":309},"format",[149,136296,319],{"class":155},[149,136298,136299],{"class":169},"'embedded-opentype'",[149,136301,39753],{"class":155},[149,136303,136304,136307,136309,136312,136314,136316,136318,136321],{"class":151,"line":352},[149,136305,136306],{"class":309},"       url",[149,136308,319],{"class":155},[149,136310,136311],{"class":169},"'fonts\u002Ficomoon.woff'",[149,136313,15427],{"class":155},[149,136315,136294],{"class":309},[149,136317,319],{"class":155},[149,136319,136320],{"class":169},"'woff'",[149,136322,39753],{"class":155},[149,136324,136325,136327,136329,136332,136334,136336,136338,136341],{"class":151,"line":1021},[149,136326,136306],{"class":309},[149,136328,319],{"class":155},[149,136330,136331],{"class":169},"'fonts\u002Ficomoon.ttf'",[149,136333,15427],{"class":155},[149,136335,136294],{"class":309},[149,136337,319],{"class":155},[149,136339,136340],{"class":169},"'truetype'",[149,136342,39753],{"class":155},[149,136344,136345,136347,136349,136352,136354,136356,136358,136361],{"class":151,"line":1035},[149,136346,136306],{"class":309},[149,136348,319],{"class":155},[149,136350,136351],{"class":169},"'fonts\u002Ficomoon.svg#icomoon'",[149,136353,15427],{"class":155},[149,136355,136294],{"class":309},[149,136357,319],{"class":155},[149,136359,136360],{"class":169},"'svg'",[149,136362,337],{"class":155},[149,136364,136365],{"class":151,"line":1054},[149,136366,355],{"class":155},[149,136368,136369,136371],{"class":151,"line":1072},[149,136370,135972],{"class":162},[149,136372,304],{"class":155},[149,136374,136375,136377,136379,136381],{"class":151,"line":1090},[149,136376,136253],{"class":309},[149,136378,313],{"class":155},[149,136380,136258],{"class":169},[149,136382,841],{"class":155},[149,136384,136385,136388,136390,136392],{"class":151,"line":1633},[149,136386,136387],{"class":309},"  font-style",[149,136389,313],{"class":155},[149,136391,65528],{"class":309},[149,136393,841],{"class":155},[149,136395,136396],{"class":151,"line":1644},[149,136397,355],{"class":155},[24,136399,136400],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[83,136402],{"style":85,"src":136403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[125,136405,136406],{"start":340},[45,136407,136408],{},"添加字体",[83,136410],{"style":85,"src":136411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[24,136413,136414],{},"复制：",[83,136416],{"style":85,"src":136417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[24,136419,136420],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[125,136422,136423],{"start":346},[45,136424,136425],{},"代码展示：",[140,136427,136428],{"className":286,"code":136234,"language":288,"meta":145,"style":145},[48,136429,136430,136434,136440,136450,136464,136486,136504,136522,136540,136544,136550,136560,136570],{"__ignoreMap":145},[149,136431,136432],{"class":151,"line":152},[149,136433,136241],{"class":295},[149,136435,136436,136438],{"class":151,"line":193},[149,136437,136246],{"class":325},[149,136439,304],{"class":155},[149,136441,136442,136444,136446,136448],{"class":151,"line":235},[149,136443,136253],{"class":309},[149,136445,313],{"class":155},[149,136447,136258],{"class":169},[149,136449,841],{"class":155},[149,136451,136452,136454,136456,136458,136460,136462],{"class":151,"line":340},[149,136453,136265],{"class":309},[149,136455,313],{"class":155},[149,136457,63415],{"class":309},[149,136459,319],{"class":155},[149,136461,136274],{"class":169},[149,136463,337],{"class":155},[149,136465,136466,136468,136470,136472,136474,136476,136478,136480,136482,136484],{"class":151,"line":346},[149,136467,136265],{"class":309},[149,136469,313],{"class":155},[149,136471,63415],{"class":309},[149,136473,319],{"class":155},[149,136475,136289],{"class":169},[149,136477,15427],{"class":155},[149,136479,136294],{"class":309},[149,136481,319],{"class":155},[149,136483,136299],{"class":169},[149,136485,39753],{"class":155},[149,136487,136488,136490,136492,136494,136496,136498,136500,136502],{"class":151,"line":352},[149,136489,136306],{"class":309},[149,136491,319],{"class":155},[149,136493,136311],{"class":169},[149,136495,15427],{"class":155},[149,136497,136294],{"class":309},[149,136499,319],{"class":155},[149,136501,136320],{"class":169},[149,136503,39753],{"class":155},[149,136505,136506,136508,136510,136512,136514,136516,136518,136520],{"class":151,"line":1021},[149,136507,136306],{"class":309},[149,136509,319],{"class":155},[149,136511,136331],{"class":169},[149,136513,15427],{"class":155},[149,136515,136294],{"class":309},[149,136517,319],{"class":155},[149,136519,136340],{"class":169},[149,136521,39753],{"class":155},[149,136523,136524,136526,136528,136530,136532,136534,136536,136538],{"class":151,"line":1035},[149,136525,136306],{"class":309},[149,136527,319],{"class":155},[149,136529,136351],{"class":169},[149,136531,15427],{"class":155},[149,136533,136294],{"class":309},[149,136535,319],{"class":155},[149,136537,136360],{"class":169},[149,136539,337],{"class":155},[149,136541,136542],{"class":151,"line":1054},[149,136543,355],{"class":155},[149,136545,136546,136548],{"class":151,"line":1072},[149,136547,135972],{"class":162},[149,136549,304],{"class":155},[149,136551,136552,136554,136556,136558],{"class":151,"line":1090},[149,136553,136253],{"class":309},[149,136555,313],{"class":155},[149,136557,136258],{"class":169},[149,136559,841],{"class":155},[149,136561,136562,136564,136566,136568],{"class":151,"line":1633},[149,136563,136387],{"class":309},[149,136565,313],{"class":155},[149,136567,65528],{"class":309},[149,136569,841],{"class":155},[149,136571,136572],{"class":151,"line":1644},[149,136573,355],{"class":155},[83,136575],{"style":85,"src":136576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[24,136578,136579],{},"更加细节展示：",[125,136581,136582],{},[45,136583,136584],{},"html 标签内添加小图标",[83,136586],{"style":85,"src":136587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[125,136589,136590],{"start":193},[45,136591,136592],{},"给标签定义字体",[140,136594,136595],{"className":142,"code":132325,"language":144,"meta":145,"style":145},[48,136596,136597,136601,136615,136619],{"__ignoreMap":145},[149,136598,136599],{"class":151,"line":152},[149,136600,132332],{"class":295},[149,136602,136603,136605,136607,136609,136611,136613],{"class":151,"line":193},[149,136604,156],{"class":155},[149,136606,301],{"class":159},[149,136608,55184],{"class":162},[149,136610,166],{"class":155},[149,136612,132345],{"class":169},[149,136614,190],{"class":155},[149,136616,136617],{"class":151,"line":235},[149,136618,132352],{"class":155},[149,136620,136621,136623,136625],{"class":151,"line":340},[149,136622,665],{"class":155},[149,136624,301],{"class":159},[149,136626,190],{"class":155},[24,136628,136629],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[83,136631],{"style":85,"src":136632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[19,136634,136636],{"id":136635},"_1235-字体图标的追加","12.3.5 字体图标的追加",[24,136638,136639],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[24,136641,136642,136643,136646],{},"把压缩包里面的 ",[31,136644,136645],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[24,136648,136649],{},"打开网站，点下方：",[83,136651],{"style":85,"src":136652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[83,136654],{"style":85,"src":136655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[83,136657],{"style":85,"src":136658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[24,136660,136661],{},"点yes重新加载",[24,136663,136664],{},"然后重复之前的操作就可以实现了",[24,136666,136667],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[19,136669,136671],{"id":136670},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[83,136673],{"style":85,"src":136674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1783,136676,136677],{},"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":145,"searchDepth":193,"depth":193,"links":136679},[136680,136686,136691],{"id":135288,"depth":193,"text":135289,"children":136681},[136682,136683,136684,136685],{"id":135300,"depth":235,"text":135301},{"id":135329,"depth":235,"text":135330},{"id":135357,"depth":235,"text":135358},{"id":135415,"depth":235,"text":135416},{"id":135882,"depth":193,"text":135883,"children":136687},[136688,136689,136690],{"id":135886,"depth":235,"text":135887},{"id":135931,"depth":235,"text":135932},{"id":135947,"depth":235,"text":135948},{"id":136047,"depth":193,"text":136048,"children":136692},[136693,136694,136695,136696,136697,136698],{"id":136051,"depth":235,"text":136052},{"id":136085,"depth":235,"text":136086},{"id":136108,"depth":235,"text":136109},{"id":136155,"depth":235,"text":136156},{"id":136635,"depth":235,"text":136636},{"id":136670,"depth":235,"text":136671},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135280,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136705,"title":136706,"body":136707,"description":1797,"extension":1798,"meta":137933,"navigation":1800,"path":137934,"seo":137935,"stem":137936,"__hash__":137937},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136708,"toc":137914},[136709,136712,136716,136719,136733,136801,136831,136834,136838,136842,136944,136991,136995,136998,137001,137035,137038,137041,137044,137047,137050,137053,137056,137058,137061,137064,137067,137070,137073,137076,137079,137107,137110,137114,137117,137124,137127,137130,137156,137159,137163,137166,137169,137176,137180,137183,137185,137217,137220,137223,137235,137241,137244,137247,137250,137252,137256,137259,137262,137265,137310,137314,137316,137319,137326,137368,137371,137375,137380,137394,137398,137401,137404,137407,137410,137413,137447,137450,137453,137507,137510,137513,137516,137519,137571,137574,137577,137626,137630,137632,137635,137638,137641,137644,137647,137704,137707,137713,137716,137719,137751,137754,137758,137762,137765,137797,137801,137804,137848,137852,137855,137858,137861,137864,137867,137870,137873,137875,137878,137880,137883,137886,137889,137892,137897,137900,137902,137905,137908,137911],[10,136710,136706],{"id":136711},"_13-界面样式与布局技巧",[14,136713,136715],{"id":136714},"_131-css三角","13.1 css三角",[24,136717,136718],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[42,136720,136721,136724,136727,136730],{},[45,136722,136723],{},"用css 边框可以模拟三角效果",[45,136725,136726],{},"宽度高度为0",[45,136728,136729],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[45,136731,136732],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[140,136734,136736],{"className":286,"code":136735,"language":288,"meta":145,"style":145},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[48,136737,136738,136743,136750,136760,136770,136786,136797],{"__ignoreMap":145},[149,136739,136740],{"class":151,"line":152},[149,136741,136742],{"class":295},"\u002F* CSS 实现三角形 *\u002F\n",[149,136744,136745,136748],{"class":151,"line":193},[149,136746,136747],{"class":162},".triangle",[149,136749,304],{"class":155},[149,136751,136752,136754,136756,136758],{"class":151,"line":235},[149,136753,72252],{"class":309},[149,136755,313],{"class":155},[149,136757,2056],{"class":309},[149,136759,841],{"class":155},[149,136761,136762,136764,136766,136768],{"class":151,"line":340},[149,136763,72472],{"class":309},[149,136765,313],{"class":155},[149,136767,2056],{"class":309},[149,136769,841],{"class":155},[149,136771,136772,136774,136776,136778,136780,136782,136784],{"class":151,"line":346},[149,136773,825],{"class":309},[149,136775,313],{"class":155},[149,136777,2309],{"class":309},[149,136779,326],{"class":325},[149,136781,835],{"class":309},[149,136783,65678],{"class":309},[149,136785,841],{"class":155},[149,136787,136788,136791,136793,136795],{"class":151,"line":352},[149,136789,136790],{"class":309},"  border-bottom-color",[149,136792,313],{"class":155},[149,136794,64057],{"class":309},[149,136796,841],{"class":155},[149,136798,136799],{"class":151,"line":1021},[149,136800,355],{"class":155},[140,136802,136803],{"className":286,"code":132378,"language":288,"meta":145,"style":145},[48,136804,136805,136811,136827],{"__ignoreMap":145},[149,136806,136807,136809],{"class":151,"line":152},[149,136808,301],{"class":159},[149,136810,304],{"class":155},[149,136812,136813,136815,136817,136819,136821,136823,136825],{"class":151,"line":193},[149,136814,825],{"class":309},[149,136816,313],{"class":155},[149,136818,830],{"class":309},[149,136820,326],{"class":325},[149,136822,835],{"class":309},[149,136824,131615],{"class":309},[149,136826,841],{"class":155},[149,136828,136829],{"class":151,"line":235},[149,136830,355],{"class":155},[83,136832],{"style":85,"src":136833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136835,136837],{"id":136836},"_132-css用户界面样式","13.2 css用户界面样式",[19,136839,136841],{"id":136840},"_1321-鼠标样式","13.2.1 鼠标样式",[140,136843,136845],{"className":286,"code":136844,"language":288,"meta":145,"style":145},"\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",[48,136846,136847,136852,136871,136889,136908,136925],{"__ignoreMap":145},[149,136848,136849],{"class":151,"line":152},[149,136850,136851],{"class":295},"\u002F* 鼠标样式 *\u002F\n",[149,136853,136854,136856,136858,136861,136863,136865,136868],{"class":151,"line":193},[149,136855,301],{"class":159},[149,136857,81488],{"class":155},[149,136859,136860],{"class":309},"cursor",[149,136862,313],{"class":155},[149,136864,63719],{"class":309},[149,136866,136867],{"class":155},"; }   ",[149,136869,136870],{"class":295},"\u002F* 手型 *\u002F\n",[149,136872,136873,136875,136877,136879,136881,136884,136886],{"class":151,"line":235},[149,136874,301],{"class":159},[149,136876,81488],{"class":155},[149,136878,136860],{"class":309},[149,136880,313],{"class":155},[149,136882,136883],{"class":309},"default",[149,136885,136867],{"class":155},[149,136887,136888],{"class":295},"\u002F* 默认 *\u002F\n",[149,136890,136891,136893,136895,136897,136899,136902,136905],{"class":151,"line":340},[149,136892,301],{"class":159},[149,136894,81488],{"class":155},[149,136896,136860],{"class":309},[149,136898,313],{"class":155},[149,136900,136901],{"class":309},"move",[149,136903,136904],{"class":155},"; }      ",[149,136906,136907],{"class":295},"\u002F* 移动 *\u002F\n",[149,136909,136910,136912,136914,136916,136918,136920,136922],{"class":151,"line":346},[149,136911,301],{"class":159},[149,136913,81488],{"class":155},[149,136915,136860],{"class":309},[149,136917,313],{"class":155},[149,136919,1655],{"class":309},[149,136921,136904],{"class":155},[149,136923,136924],{"class":295},"\u002F* 文本 *\u002F\n",[149,136926,136927,136929,136931,136933,136935,136938,136941],{"class":151,"line":352},[149,136928,301],{"class":159},[149,136930,81488],{"class":155},[149,136932,136860],{"class":309},[149,136934,313],{"class":155},[149,136936,136937],{"class":309},"not-allowed",[149,136939,136940],{"class":155},"; } ",[149,136942,136943],{"class":295},"\u002F* 禁止 *\u002F\n",[2003,136945,136946,136954],{},[2006,136947,136948],{},[2009,136949,136950,136952],{},[2012,136951,128691],{"align":1566},[2012,136953,29198],{"align":1566},[2049,136955,136956,136963,136970,136977,136984],{},[2009,136957,136958,136960],{},[2054,136959,136883],{"align":1566},[2054,136961,136962],{"align":1566},"小白 默认",[2009,136964,136965,136967],{},[2054,136966,63719],{"align":1566},[2054,136968,136969],{"align":1566},"小手",[2009,136971,136972,136974],{},[2054,136973,136901],{"align":1566},[2054,136975,136976],{"align":1566},"移动",[2009,136978,136979,136981],{},[2054,136980,1655],{"align":1566},[2054,136982,136983],{"align":1566},"文本",[2009,136985,136986,136988],{},[2054,136987,136937],{"align":1566},[2054,136989,136990],{"align":1566},"禁止",[19,136992,136994],{"id":136993},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[24,136996,136997],{},"去除表单轮廓线",[24,136999,137000],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[140,137002,137003],{"className":286,"code":131587,"language":288,"meta":145,"style":145},[48,137004,137005,137009,137015,137031],{"__ignoreMap":145},[149,137006,137007],{"class":151,"line":152},[149,137008,131594],{"class":295},[149,137010,137011,137013],{"class":151,"line":193},[149,137012,301],{"class":159},[149,137014,304],{"class":155},[149,137016,137017,137019,137021,137023,137025,137027,137029],{"class":151,"line":235},[149,137018,825],{"class":309},[149,137020,313],{"class":155},[149,137022,830],{"class":309},[149,137024,326],{"class":325},[149,137026,835],{"class":309},[149,137028,131615],{"class":309},[149,137030,841],{"class":155},[149,137032,137033],{"class":151,"line":340},[149,137034,355],{"class":155},[24,137036,137037],{},"文本域：",[83,137039],{"style":85,"src":137040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[24,137042,137043],{},"此时会有一个空白区域",[83,137045],{"style":85,"src":137046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[24,137048,137049],{},"写在同一行就不会出现这个问题",[83,137051],{"style":85,"src":137052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[24,137054,137055],{},"文本域是行内块元素，一定记住！！！",[24,137057,99913],{},[83,137059],{"style":85,"src":137060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[24,137062,137063],{},"文本域尽量放在一行",[24,137065,137066],{},"知识回顾：cols是列，rols是行",[83,137068],{"style":85,"src":137069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[24,137071,137072],{},"它可以进行拖动，显然这是我们不愿意看到的",[83,137074],{"style":85,"src":137075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[24,137077,137078],{},"使用resize进行解决",[140,137080,137082],{"className":286,"code":137081,"language":288,"meta":145,"style":145},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[48,137083,137084,137090,137103],{"__ignoreMap":145},[149,137085,137086,137088],{"class":151,"line":152},[149,137087,504],{"class":159},[149,137089,304],{"class":155},[149,137091,137092,137094,137096,137098,137100],{"class":151,"line":193},[149,137093,72482],{"class":309},[149,137095,313],{"class":155},[149,137097,56432],{"class":309},[149,137099,132084],{"class":155},[149,137101,137102],{"class":295},"\u002F* 取消表单轮廓线 *\u002F\n",[149,137104,137105],{"class":151,"line":235},[149,137106,355],{"class":155},[24,137108,137109],{},"此时就无法通过右下方实现拖动了",[19,137111,137113],{"id":137112},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[24,137115,137116],{},"实现一个盒子中的文字和图片对齐",[24,137118,137119,137120,137123],{},"用于设置一个元素的 ",[31,137121,137122],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[24,137125,137126],{},"图片和文字默认是基线对齐",[83,137128],{"style":85,"src":137129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[140,137131,137132],{"className":286,"code":137081,"language":288,"meta":145,"style":145},[48,137133,137134,137140,137152],{"__ignoreMap":145},[149,137135,137136,137138],{"class":151,"line":152},[149,137137,504],{"class":159},[149,137139,304],{"class":155},[149,137141,137142,137144,137146,137148,137150],{"class":151,"line":193},[149,137143,72482],{"class":309},[149,137145,313],{"class":155},[149,137147,56432],{"class":309},[149,137149,132084],{"class":155},[149,137151,137102],{"class":295},[149,137153,137154],{"class":151,"line":235},[149,137155,355],{"class":155},[83,137157],{"style":85,"src":137158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[120,137160,137162],{"id":137161},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[24,137164,137165],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[83,137167],{"style":85,"src":137168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[24,137170,137171,137172,137175],{},"此时可以给图片、表单这些行内块元素的 ",[31,137173,137174],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[120,137177,137179],{"id":137178},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[24,137181,137182],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[24,137184,16346],{},[140,137186,137188],{"className":286,"code":137187,"language":288,"meta":145,"style":145},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[48,137189,137190,137195,137201,137213],{"__ignoreMap":145},[149,137191,137192],{"class":151,"line":152},[149,137193,137194],{"class":295},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[149,137196,137197,137199],{"class":151,"line":193},[149,137198,83],{"class":159},[149,137200,304],{"class":155},[149,137202,137203,137206,137208,137211],{"class":151,"line":235},[149,137204,137205],{"class":309},"  vertical-align",[149,137207,313],{"class":155},[149,137209,137210],{"class":309},"middle",[149,137212,841],{"class":155},[149,137214,137215],{"class":151,"line":340},[149,137216,355],{"class":155},[83,137218],{"style":85,"src":137219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[24,137221,137222],{},"主要解决方法有两种：",[125,137224,137225],{},[45,137226,137227,137230,137231,137234],{},[31,137228,137229],{},"给图片"," 添加 ",[31,137232,137233],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[24,137236,137237,137238],{},"2.把图片转换为块级元素 ",[31,137239,137240],{},"display: block",[24,137242,137243],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[24,137245,137246],{},"img {",[24,137248,137249],{},"vertical-align:middle;",[24,137251,2805],{},[19,137253,137255],{"id":137254},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[24,137257,137258],{},"效果：",[83,137260],{"style":85,"src":137261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[24,137263,137264],{},"单行文本溢出显示省略号--必须满足三个条件：",[140,137266,137268],{"className":286,"code":137267,"language":288,"meta":145,"style":145},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[48,137269,137270,137275,137281,137291,137296,137306],{"__ignoreMap":145},[149,137271,137272],{"class":151,"line":152},[149,137273,137274],{"class":295},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[149,137276,137277,137279],{"class":151,"line":193},[149,137278,83],{"class":159},[149,137280,304],{"class":155},[149,137282,137283,137285,137287,137289],{"class":151,"line":235},[149,137284,137205],{"class":309},[149,137286,313],{"class":155},[149,137288,137210],{"class":309},[149,137290,841],{"class":155},[149,137292,137293],{"class":151,"line":340},[149,137294,137295],{"class":295},"  \u002F* 或 *\u002F\n",[149,137297,137298,137300,137302,137304],{"class":151,"line":346},[149,137299,1389],{"class":309},[149,137301,313],{"class":155},[149,137303,1394],{"class":309},[149,137305,841],{"class":155},[149,137307,137308],{"class":151,"line":352},[149,137309,355],{"class":155},[19,137311,137313],{"id":137312},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[24,137315,137258],{},[83,137317],{"style":85,"src":137318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[24,137320,137321,137322,137325],{},"多行文本溢出显示省略号， ",[31,137323,137324],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[140,137327,137328],{"className":286,"code":137267,"language":288,"meta":145,"style":145},[48,137329,137330,137334,137340,137350,137354,137364],{"__ignoreMap":145},[149,137331,137332],{"class":151,"line":152},[149,137333,137274],{"class":295},[149,137335,137336,137338],{"class":151,"line":193},[149,137337,83],{"class":159},[149,137339,304],{"class":155},[149,137341,137342,137344,137346,137348],{"class":151,"line":235},[149,137343,137205],{"class":309},[149,137345,313],{"class":155},[149,137347,137210],{"class":309},[149,137349,841],{"class":155},[149,137351,137352],{"class":151,"line":340},[149,137353,137295],{"class":295},[149,137355,137356,137358,137360,137362],{"class":151,"line":346},[149,137357,1389],{"class":309},[149,137359,313],{"class":155},[149,137361,1394],{"class":309},[149,137363,841],{"class":155},[149,137365,137366],{"class":151,"line":352},[149,137367,355],{"class":155},[24,137369,137370],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137372,137374],{"id":137373},"_133-常见布局技巧","13.3 常见布局技巧",[24,137376,137377],{},[31,137378,137379],{},"巧妙利用一个技术更快更好的布局：",[125,137381,137382,137385,137388,137391],{},[45,137383,137384],{},"margin负值的运用",[45,137386,137387],{},"文字围绕浮动元素",[45,137389,137390],{},"行内块的巧妙运用",[45,137392,137393],{},"CSS三角强化",[19,137395,137397],{"id":137396},"_1331-margin负值的运用","13.3.1 margin负值的运用",[24,137399,137400],{},"应用场景：",[83,137402],{"style":85,"src":137403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[83,137405],{"style":85,"src":137406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[24,137408,137409],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[24,137411,137412],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[140,137414,137415],{"className":286,"code":131587,"language":288,"meta":145,"style":145},[48,137416,137417,137421,137427,137443],{"__ignoreMap":145},[149,137418,137419],{"class":151,"line":152},[149,137420,131594],{"class":295},[149,137422,137423,137425],{"class":151,"line":193},[149,137424,301],{"class":159},[149,137426,304],{"class":155},[149,137428,137429,137431,137433,137435,137437,137439,137441],{"class":151,"line":235},[149,137430,825],{"class":309},[149,137432,313],{"class":155},[149,137434,830],{"class":309},[149,137436,326],{"class":325},[149,137438,835],{"class":309},[149,137440,131615],{"class":309},[149,137442,841],{"class":155},[149,137444,137445],{"class":151,"line":340},[149,137446,355],{"class":155},[83,137448],{"style":85,"src":137449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[24,137451,137452],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[140,137454,137456],{"className":286,"code":137455,"language":288,"meta":145,"style":145},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[48,137457,137458,137463,137469,137479,137491,137503],{"__ignoreMap":145},[149,137459,137460],{"class":151,"line":152},[149,137461,137462],{"class":295},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[149,137464,137465,137467],{"class":151,"line":193},[149,137466,1554],{"class":162},[149,137468,304],{"class":155},[149,137470,137471,137473,137475,137477],{"class":151,"line":235},[149,137472,134026],{"class":309},[149,137474,313],{"class":155},[149,137476,56459],{"class":309},[149,137478,841],{"class":155},[149,137480,137481,137483,137485,137487,137489],{"class":151,"line":340},[149,137482,134040],{"class":309},[149,137484,313],{"class":155},[149,137486,2309],{"class":309},[149,137488,326],{"class":325},[149,137490,841],{"class":155},[149,137492,137493,137495,137497,137499,137501],{"class":151,"line":346},[149,137494,134057],{"class":309},[149,137496,313],{"class":155},[149,137498,2561],{"class":309},[149,137500,326],{"class":325},[149,137502,841],{"class":155},[149,137504,137505],{"class":151,"line":352},[149,137506,355],{"class":155},[24,137508,137509],{},"加上上述代码会发现：",[83,137511],{"style":85,"src":137512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[24,137514,137515],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[24,137517,137518],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[140,137520,137521],{"className":286,"code":137455,"language":288,"meta":145,"style":145},[48,137522,137523,137527,137533,137543,137555,137567],{"__ignoreMap":145},[149,137524,137525],{"class":151,"line":152},[149,137526,137462],{"class":295},[149,137528,137529,137531],{"class":151,"line":193},[149,137530,1554],{"class":162},[149,137532,304],{"class":155},[149,137534,137535,137537,137539,137541],{"class":151,"line":235},[149,137536,134026],{"class":309},[149,137538,313],{"class":155},[149,137540,56459],{"class":309},[149,137542,841],{"class":155},[149,137544,137545,137547,137549,137551,137553],{"class":151,"line":340},[149,137546,134040],{"class":309},[149,137548,313],{"class":155},[149,137550,2309],{"class":309},[149,137552,326],{"class":325},[149,137554,841],{"class":155},[149,137556,137557,137559,137561,137563,137565],{"class":151,"line":346},[149,137558,134057],{"class":309},[149,137560,313],{"class":155},[149,137562,2561],{"class":309},[149,137564,326],{"class":325},[149,137566,841],{"class":155},[149,137568,137569],{"class":151,"line":352},[149,137570,355],{"class":155},[24,137572,137573],{},"解决方式2：",[24,137575,137576],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[140,137578,137580],{"className":286,"code":137579,"language":288,"meta":145,"style":145},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[48,137581,137582,137588,137598,137610,137622],{"__ignoreMap":145},[149,137583,137584,137586],{"class":151,"line":152},[149,137585,301],{"class":159},[149,137587,304],{"class":155},[149,137589,137590,137592,137594,137596],{"class":151,"line":193},[149,137591,134026],{"class":309},[149,137593,313],{"class":155},[149,137595,56459],{"class":309},[149,137597,841],{"class":155},[149,137599,137600,137602,137604,137606,137608],{"class":151,"line":235},[149,137601,134040],{"class":309},[149,137603,313],{"class":155},[149,137605,2309],{"class":309},[149,137607,326],{"class":325},[149,137609,841],{"class":155},[149,137611,137612,137614,137616,137618,137620],{"class":151,"line":340},[149,137613,134057],{"class":309},[149,137615,313],{"class":155},[149,137617,2561],{"class":309},[149,137619,326],{"class":325},[149,137621,841],{"class":155},[149,137623,137624],{"class":151,"line":346},[149,137625,355],{"class":155},[19,137627,137629],{"id":137628},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[24,137631,137400],{},[83,137633],{"style":85,"src":137634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[24,137636,137637],{},"实现结构图：",[83,137639],{"style":85,"src":137640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[24,137642,137643],{},"巧妙运用浮动元素不会压住文字的特性",[24,137645,137646],{},"代码显示：",[140,137648,137650],{"className":286,"code":137649,"language":288,"meta":145,"style":145},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[48,137651,137652,137658,137668,137672,137676,137680,137686,137700],{"__ignoreMap":145},[149,137653,137654,137656],{"class":151,"line":152},[149,137655,1554],{"class":162},[149,137657,304],{"class":155},[149,137659,137660,137662,137664,137666],{"class":151,"line":193},[149,137661,1561],{"class":309},[149,137663,313],{"class":155},[149,137665,1566],{"class":309},[149,137667,841],{"class":155},[149,137669,137670],{"class":151,"line":235},[149,137671,355],{"class":155},[149,137673,137674],{"class":151,"line":340},[149,137675,1000],{"class":155},[149,137677,137678],{"class":151,"line":346},[149,137679,132065],{"class":295},[149,137681,137682,137684],{"class":151,"line":352},[149,137683,1554],{"class":162},[149,137685,304],{"class":155},[149,137687,137688,137690,137692,137694,137696,137698],{"class":151,"line":1021},[149,137689,72154],{"class":309},[149,137691,313],{"class":155},[149,137693,2056],{"class":309},[149,137695,53257],{"class":309},[149,137697,132084],{"class":155},[149,137699,132087],{"class":295},[149,137701,137702],{"class":151,"line":1035},[149,137703,355],{"class":155},[24,137705,137706],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[140,137708,137711],{"className":137709,"code":137710,"language":1655},[1653],"\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",[48,137712,137710],{"__ignoreMap":145},[83,137714],{"style":85,"src":137715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[24,137717,137718],{},"最终展示结果：",[140,137720,137721],{"className":286,"code":132058,"language":288,"meta":145,"style":145},[48,137722,137723,137727,137733,137747],{"__ignoreMap":145},[149,137724,137725],{"class":151,"line":152},[149,137726,132065],{"class":295},[149,137728,137729,137731],{"class":151,"line":193},[149,137730,1554],{"class":162},[149,137732,304],{"class":155},[149,137734,137735,137737,137739,137741,137743,137745],{"class":151,"line":235},[149,137736,72154],{"class":309},[149,137738,313],{"class":155},[149,137740,2056],{"class":309},[149,137742,53257],{"class":309},[149,137744,132084],{"class":155},[149,137746,132087],{"class":295},[149,137748,137749],{"class":151,"line":340},[149,137750,355],{"class":155},[83,137752],{"style":85,"src":137753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137755,137757],{"id":137756},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[19,137759,137761],{"id":137760},"_1341-原理","13.4.1 原理",[83,137763],{"style":85,"src":137764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[140,137766,137767],{"className":286,"code":132058,"language":288,"meta":145,"style":145},[48,137768,137769,137773,137779,137793],{"__ignoreMap":145},[149,137770,137771],{"class":151,"line":152},[149,137772,132065],{"class":295},[149,137774,137775,137777],{"class":151,"line":193},[149,137776,1554],{"class":162},[149,137778,304],{"class":155},[149,137780,137781,137783,137785,137787,137789,137791],{"class":151,"line":235},[149,137782,72154],{"class":309},[149,137784,313],{"class":155},[149,137786,2056],{"class":309},[149,137788,53257],{"class":309},[149,137790,132084],{"class":155},[149,137792,132087],{"class":295},[149,137794,137795],{"class":151,"line":340},[149,137796,355],{"class":155},[19,137798,137800],{"id":137799},"_1342-实例","13.4.2 实例",[83,137802],{"style":85,"src":137803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[140,137805,137806],{"className":286,"code":132687,"language":288,"meta":145,"style":145},[48,137807,137808,137814,137824,137828,137834,137844],{"__ignoreMap":145},[149,137809,137810,137812],{"class":151,"line":152},[149,137811,132694],{"class":162},[149,137813,304],{"class":155},[149,137815,137816,137818,137820,137822],{"class":151,"line":193},[149,137817,1561],{"class":309},[149,137819,313],{"class":155},[149,137821,1566],{"class":309},[149,137823,841],{"class":155},[149,137825,137826],{"class":151,"line":235},[149,137827,355],{"class":155},[149,137829,137830,137832],{"class":151,"line":340},[149,137831,132715],{"class":162},[149,137833,304],{"class":155},[149,137835,137836,137838,137840,137842],{"class":151,"line":346},[149,137837,1561],{"class":309},[149,137839,313],{"class":155},[149,137841,74204],{"class":309},[149,137843,841],{"class":155},[149,137845,137846],{"class":151,"line":352},[149,137847,355],{"class":155},[14,137849,137851],{"id":137850},"_135-css的初始化","13.5 css的初始化",[24,137853,137854],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[24,137856,137857],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[24,137859,137860],{},"每个网页都必须首先进行 CSS初始化。",[24,137862,137863],{},"这里我们以 京东CSS初始化代码为例。",[24,137865,137866],{},"在网页右键查看网页源代码",[24,137868,137869],{},"找到css的link引入语句",[24,137871,137872],{},"然后ctrl+f 输入body",[24,137874,78908],{},[83,137876],{"style":85,"src":137877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[24,137879,78931],{},[83,137881],{"style":85,"src":137882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[24,137884,137885],{},"③打开了网页上传压缩的代码",[83,137887],{"style":85,"src":137888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[24,137890,137891],{},"④从body前可以查看这个网页的初始化代码",[24,137893,137894],{},[31,137895,137896],{},"Unicode编码字体：",[24,137898,137899],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[24,137901,84888],{},[24,137903,137904],{},"黑体 \\9ED1\\4F53",[24,137906,137907],{},"宋体 \\5B8B\\4F53",[24,137909,137910],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1783,137912,137913],{},"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":145,"searchDepth":193,"depth":193,"links":137915},[137916,137917,137924,137928,137932],{"id":136714,"depth":193,"text":136715},{"id":136836,"depth":193,"text":136837,"children":137918},[137919,137920,137921,137922,137923],{"id":136840,"depth":235,"text":136841},{"id":136993,"depth":235,"text":136994},{"id":137112,"depth":235,"text":137113},{"id":137254,"depth":235,"text":137255},{"id":137312,"depth":235,"text":137313},{"id":137373,"depth":193,"text":137374,"children":137925},[137926,137927],{"id":137396,"depth":235,"text":137397},{"id":137628,"depth":235,"text":137629},{"id":137756,"depth":193,"text":137757,"children":137929},[137930,137931],{"id":137760,"depth":235,"text":137761},{"id":137799,"depth":235,"text":137800},{"id":137850,"depth":193,"text":137851},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136706,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":4,"title":5,"body":137939,"description":1797,"extension":1798,"meta":139404,"navigation":1800,"path":1801,"seo":139405,"stem":1803,"__hash__":1804},{"type":7,"value":137940,"toc":139393},[137941,137943,137945,137947,137949,137953,137955,137957,137983,137985,137987,137997,137999,138005,138007,138011,138013,138015,138017,138047,138051,138053,138083,138085,138089,138091,138093,138123,138125,138173,138175,138177,138181,138189,138191,138195,138225,138227,138231,138233,138263,138265,138267,138279,138281,138283,138285,138315,138317,138319,138321,138323,138325,138327,138329,138431,138433,138435,138437,138539,138541,138543,138545,138547,138549,138587,138589,138591,138603,138605,138607,138611,138681,138683,138685,138793,138796,138798,138804,138806,138810,138894,138896,138898,138900,138902,138906,138920,138924,139008,139010,139014,139016,139018,139090,139092,139094,139096,139098,139100,139104,139106,139108,139180,139182,139186,139188,139284,139286,139291,139293,139295,139297,139299,139301,139303,139305,139307,139309,139313,139315,139345,139349,139351,139389,139391],[10,137942,5],{"id":12},[14,137944,17],{"id":16},[19,137946,22],{"id":21},[24,137948,26],{},[24,137950,29,137951,34],{},[31,137952,33],{},[24,137954,37],{},[24,137956,40],{},[42,137958,137959,137963,137967,137971,137975,137979],{},[45,137960,137961,51],{},[48,137962,50],{},[45,137964,137965,57],{},[48,137966,56],{},[45,137968,137969,63],{},[48,137970,62],{},[45,137972,137973,69],{},[48,137974,68],{},[45,137976,137977,75],{},[48,137978,74],{},[45,137980,137981,81],{},[48,137982,80],{},[83,137984],{"style":85,"src":86},[24,137986,89],{},[42,137988,137989,137991,137993,137995],{},[45,137990,94],{},[45,137992,97],{},[45,137994,100],{},[45,137996,103],{},[19,137998,107],{"id":106},[24,138000,110,138001,114,138003,118],{},[31,138002,113],{},[31,138004,117],{},[120,138006,123],{"id":122},[125,138008,138009],{},[45,138010,129],{},[83,138012],{"style":85,"src":132},[24,138014,135],{},[24,138016,138],{},[140,138018,138019],{"className":142,"code":143,"language":144,"meta":145,"style":145},[48,138020,138021],{"__ignoreMap":145},[149,138022,138023,138025,138027,138029,138031,138033,138035,138037,138039,138041,138043,138045],{"class":151,"line":152},[149,138024,156],{"class":155},[149,138026,117],{"class":159},[149,138028,163],{"class":162},[149,138030,166],{"class":155},[149,138032,170],{"class":169},[149,138034,173],{"class":162},[149,138036,176],{"class":162},[149,138038,179],{"class":162},[149,138040,182],{"class":162},[149,138042,185],{"class":155},[149,138044,117],{"class":159},[149,138046,190],{"class":155},[125,138048,138049],{"start":193},[45,138050,196],{},[24,138052,199],{},[140,138054,138055],{"className":142,"code":143,"language":144,"meta":145,"style":145},[48,138056,138057],{"__ignoreMap":145},[149,138058,138059,138061,138063,138065,138067,138069,138071,138073,138075,138077,138079,138081],{"class":151,"line":152},[149,138060,156],{"class":155},[149,138062,117],{"class":159},[149,138064,163],{"class":162},[149,138066,166],{"class":155},[149,138068,170],{"class":169},[149,138070,173],{"class":162},[149,138072,176],{"class":162},[149,138074,179],{"class":162},[149,138076,182],{"class":162},[149,138078,185],{"class":155},[149,138080,117],{"class":159},[149,138082,190],{"class":155},[24,138084,232],{},[125,138086,138087],{"start":235},[45,138088,238],{},[83,138090],{"style":85,"src":241},[24,138092,244],{},[140,138094,138095],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,138096,138097],{"__ignoreMap":145},[149,138098,138099,138101,138103,138105,138107,138109,138111,138113,138115,138117,138119,138121],{"class":151,"line":152},[149,138100,156],{"class":155},[149,138102,83],{"class":159},[149,138104,163],{"class":162},[149,138106,166],{"class":155},[149,138108,262],{"class":169},[149,138110,265],{"class":162},[149,138112,166],{"class":155},[149,138114,270],{"class":169},[149,138116,273],{"class":162},[149,138118,166],{"class":155},[149,138120,278],{"class":169},[149,138122,190],{"class":155},[24,138124,283],{},[140,138126,138127],{"className":286,"code":287,"language":288,"meta":145,"style":145},[48,138128,138129,138133,138139,138161,138165,138169],{"__ignoreMap":145},[149,138130,138131],{"class":151,"line":152},[149,138132,296],{"class":295},[149,138134,138135,138137],{"class":151,"line":193},[149,138136,301],{"class":159},[149,138138,304],{"class":155},[149,138140,138141,138143,138145,138147,138149,138151,138153,138155,138157,138159],{"class":151,"line":235},[149,138142,310],{"class":309},[149,138144,313],{"class":155},[149,138146,316],{"class":309},[149,138148,319],{"class":155},[149,138150,322],{"class":309},[149,138152,326],{"class":325},[149,138154,329],{"class":155},[149,138156,332],{"class":309},[149,138158,326],{"class":325},[149,138160,337],{"class":155},[149,138162,138163],{"class":151,"line":340},[149,138164,343],{"class":295},[149,138166,138167],{"class":151,"line":346},[149,138168,349],{"class":295},[149,138170,138171],{"class":151,"line":352},[149,138172,355],{"class":155},[24,138174,358],{},[120,138176,362],{"id":361},[125,138178,138179],{},[45,138180,367],{},[24,138182,370,138183,376,138187],{},[31,138184,138185],{},[48,138186,375],{},[31,138188,379],{},[83,138190],{"style":85,"src":382},[125,138192,138193],{"start":193},[45,138194,196],{},[140,138196,138197],{"className":142,"code":143,"language":144,"meta":145,"style":145},[48,138198,138199],{"__ignoreMap":145},[149,138200,138201,138203,138205,138207,138209,138211,138213,138215,138217,138219,138221,138223],{"class":151,"line":152},[149,138202,156],{"class":155},[149,138204,117],{"class":159},[149,138206,163],{"class":162},[149,138208,166],{"class":155},[149,138210,170],{"class":169},[149,138212,173],{"class":162},[149,138214,176],{"class":162},[149,138216,179],{"class":162},[149,138218,182],{"class":162},[149,138220,185],{"class":155},[149,138222,117],{"class":159},[149,138224,190],{"class":155},[24,138226,419],{},[125,138228,138229],{"start":235},[45,138230,424],{},[83,138232],{"style":85,"src":427},[140,138234,138235],{"className":142,"code":143,"language":144,"meta":145,"style":145},[48,138236,138237],{"__ignoreMap":145},[149,138238,138239,138241,138243,138245,138247,138249,138251,138253,138255,138257,138259,138261],{"class":151,"line":152},[149,138240,156],{"class":155},[149,138242,117],{"class":159},[149,138244,163],{"class":162},[149,138246,166],{"class":155},[149,138248,170],{"class":169},[149,138250,173],{"class":162},[149,138252,176],{"class":162},[149,138254,179],{"class":162},[149,138256,182],{"class":162},[149,138258,185],{"class":155},[149,138260,117],{"class":159},[149,138262,190],{"class":155},[24,138264,460],{},[120,138266,464],{"id":463},[42,138268,138269,138271,138273,138275,138277],{},[45,138270,469],{},[45,138272,472],{},[45,138274,475],{},[45,138276,478],{},[45,138278,481],{},[19,138280,485],{"id":484},[120,138282,489],{"id":488},[83,138284],{"style":85,"src":492},[140,138286,138287],{"className":142,"code":495,"language":144,"meta":145,"style":145},[48,138288,138289],{"__ignoreMap":145},[149,138290,138291,138293,138295,138297,138299,138301,138303,138305,138307,138309,138311,138313],{"class":151,"line":152},[149,138292,156],{"class":155},[149,138294,504],{"class":159},[149,138296,507],{"class":162},[149,138298,166],{"class":155},[149,138300,512],{"class":169},[149,138302,515],{"class":162},[149,138304,166],{"class":155},[149,138306,520],{"class":169},[149,138308,523],{"class":162},[149,138310,166],{"class":155},[149,138312,528],{"class":169},[149,138314,190],{"class":155},[83,138316],{"style":85,"src":533},[120,138318,537],{"id":536},[83,138320],{"style":85,"src":540},[24,138322,543],{},[24,138324,546],{},[83,138326],{"style":85,"src":549},[24,138328,552],{},[140,138330,138331],{"className":142,"code":555,"language":144,"meta":145,"style":145},[48,138332,138333,138353,138379,138405,138423],{"__ignoreMap":145},[149,138334,138335,138337,138339,138341,138343,138345,138347,138349,138351],{"class":151,"line":152},[149,138336,156],{"class":155},[149,138338,564],{"class":159},[149,138340,567],{"class":162},[149,138342,166],{"class":155},[149,138344,572],{"class":169},[149,138346,575],{"class":162},[149,138348,166],{"class":155},[149,138350,580],{"class":169},[149,138352,190],{"class":155},[149,138354,138355,138357,138359,138361,138363,138365,138367,138369,138371,138373,138375,138377],{"class":151,"line":193},[149,138356,587],{"class":155},[149,138358,504],{"class":159},[149,138360,507],{"class":162},[149,138362,166],{"class":155},[149,138364,512],{"class":169},[149,138366,515],{"class":162},[149,138368,166],{"class":155},[149,138370,520],{"class":169},[149,138372,523],{"class":162},[149,138374,166],{"class":155},[149,138376,608],{"class":169},[149,138378,190],{"class":155},[149,138380,138381,138383,138385,138387,138389,138391,138393,138395,138397,138399,138401,138403],{"class":151,"line":235},[149,138382,587],{"class":155},[149,138384,504],{"class":159},[149,138386,507],{"class":162},[149,138388,166],{"class":155},[149,138390,623],{"class":169},[149,138392,515],{"class":162},[149,138394,166],{"class":155},[149,138396,630],{"class":169},[149,138398,523],{"class":162},[149,138400,166],{"class":155},[149,138402,637],{"class":169},[149,138404,190],{"class":155},[149,138406,138407,138409,138411,138413,138415,138417,138419,138421],{"class":151,"line":340},[149,138408,587],{"class":155},[149,138410,646],{"class":159},[149,138412,507],{"class":162},[149,138414,166],{"class":155},[149,138416,653],{"class":169},[149,138418,656],{"class":155},[149,138420,646],{"class":159},[149,138422,190],{"class":155},[149,138424,138425,138427,138429],{"class":151,"line":346},[149,138426,665],{"class":155},[149,138428,564],{"class":159},[149,138430,190],{"class":155},[83,138432],{"style":85,"src":672},[24,138434,675],{},[24,138436,678],{},[140,138438,138439],{"className":142,"code":555,"language":144,"meta":145,"style":145},[48,138440,138441,138461,138487,138513,138531],{"__ignoreMap":145},[149,138442,138443,138445,138447,138449,138451,138453,138455,138457,138459],{"class":151,"line":152},[149,138444,156],{"class":155},[149,138446,564],{"class":159},[149,138448,567],{"class":162},[149,138450,166],{"class":155},[149,138452,572],{"class":169},[149,138454,575],{"class":162},[149,138456,166],{"class":155},[149,138458,580],{"class":169},[149,138460,190],{"class":155},[149,138462,138463,138465,138467,138469,138471,138473,138475,138477,138479,138481,138483,138485],{"class":151,"line":193},[149,138464,587],{"class":155},[149,138466,504],{"class":159},[149,138468,507],{"class":162},[149,138470,166],{"class":155},[149,138472,512],{"class":169},[149,138474,515],{"class":162},[149,138476,166],{"class":155},[149,138478,520],{"class":169},[149,138480,523],{"class":162},[149,138482,166],{"class":155},[149,138484,608],{"class":169},[149,138486,190],{"class":155},[149,138488,138489,138491,138493,138495,138497,138499,138501,138503,138505,138507,138509,138511],{"class":151,"line":235},[149,138490,587],{"class":155},[149,138492,504],{"class":159},[149,138494,507],{"class":162},[149,138496,166],{"class":155},[149,138498,623],{"class":169},[149,138500,515],{"class":162},[149,138502,166],{"class":155},[149,138504,630],{"class":169},[149,138506,523],{"class":162},[149,138508,166],{"class":155},[149,138510,637],{"class":169},[149,138512,190],{"class":155},[149,138514,138515,138517,138519,138521,138523,138525,138527,138529],{"class":151,"line":340},[149,138516,587],{"class":155},[149,138518,646],{"class":159},[149,138520,507],{"class":162},[149,138522,166],{"class":155},[149,138524,653],{"class":169},[149,138526,656],{"class":155},[149,138528,646],{"class":159},[149,138530,190],{"class":155},[149,138532,138533,138535,138537],{"class":151,"line":346},[149,138534,665],{"class":155},[149,138536,564],{"class":159},[149,138538,190],{"class":155},[83,138540],{"style":85,"src":783},[14,138542,787],{"id":786},[19,138544,791],{"id":790},[120,138546,795],{"id":794},[83,138548],{"style":85,"src":798},[140,138550,138551],{"className":286,"code":801,"language":288,"meta":145,"style":145},[48,138552,138553,138567,138583],{"__ignoreMap":145},[149,138554,138555,138557,138559,138561,138563,138565],{"class":151,"line":152},[149,138556,504],{"class":159},[149,138558,810],{"class":155},[149,138560,813],{"class":162},[149,138562,166],{"class":325},[149,138564,512],{"class":169},[149,138566,820],{"class":155},[149,138568,138569,138571,138573,138575,138577,138579,138581],{"class":151,"line":193},[149,138570,825],{"class":309},[149,138572,313],{"class":155},[149,138574,830],{"class":309},[149,138576,326],{"class":325},[149,138578,835],{"class":309},[149,138580,838],{"class":309},[149,138582,841],{"class":155},[149,138584,138585],{"class":151,"line":235},[149,138586,355],{"class":155},[83,138588],{"style":85,"src":848},[24,138590,89],{},[42,138592,138593,138595,138597,138599],{},[45,138594,855],{},[45,138596,858],{},[45,138598,861],{},[45,138600,138601,867],{},[31,138602,866],{},[120,138604,871],{"id":870},[83,138606],{"style":85,"src":874},[125,138608,138609],{},[45,138610,879],{},[140,138612,138613],{"className":286,"code":882,"language":288,"meta":145,"style":145},[48,138614,138615,138619,138633,138649,138665],{"__ignoreMap":145},[149,138616,138617],{"class":151,"line":152},[149,138618,889],{"class":295},[149,138620,138621,138623,138625,138627,138629,138631],{"class":151,"line":193},[149,138622,504],{"class":159},[149,138624,810],{"class":155},[149,138626,813],{"class":162},[149,138628,166],{"class":325},[149,138630,512],{"class":169},[149,138632,904],{"class":155},[149,138634,138635,138637,138639,138641,138643,138645,138647],{"class":151,"line":235},[149,138636,504],{"class":159},[149,138638,810],{"class":155},[149,138640,913],{"class":162},[149,138642,916],{"class":325},[149,138644,919],{"class":169},[149,138646,922],{"class":155},[149,138648,925],{"class":295},[149,138650,138651,138653,138655,138657,138659,138661,138663],{"class":151,"line":340},[149,138652,504],{"class":159},[149,138654,810],{"class":155},[149,138656,913],{"class":162},[149,138658,936],{"class":325},[149,138660,919],{"class":169},[149,138662,922],{"class":155},[149,138664,943],{"class":295},[149,138666,138667,138669,138671,138673,138675,138677,138679],{"class":151,"line":346},[149,138668,504],{"class":159},[149,138670,810],{"class":155},[149,138672,913],{"class":162},[149,138674,954],{"class":325},[149,138676,919],{"class":169},[149,138678,922],{"class":155},[149,138680,961],{"class":295},[24,138682,964],{},[24,138684,967],{},[140,138686,138687],{"className":286,"code":970,"language":288,"meta":145,"style":145},[48,138688,138689,138695,138705,138709,138713,138717,138727,138737,138751,138765,138779],{"__ignoreMap":145},[149,138690,138691,138693],{"class":151,"line":152},[149,138692,977],{"class":162},[149,138694,304],{"class":155},[149,138696,138697,138699,138701,138703],{"class":151,"line":193},[149,138698,984],{"class":309},[149,138700,313],{"class":155},[149,138702,989],{"class":309},[149,138704,841],{"class":155},[149,138706,138707],{"class":151,"line":235},[149,138708,355],{"class":155},[149,138710,138711],{"class":151,"line":340},[149,138712,1000],{"class":155},[149,138714,138715],{"class":151,"line":346},[149,138716,1005],{"class":295},[149,138718,138719,138721,138723,138725],{"class":151,"line":352},[149,138720,45],{"class":159},[149,138722,1012],{"class":162},[149,138724,1015],{"class":155},[149,138726,1018],{"class":295},[149,138728,138729,138731,138733,138735],{"class":151,"line":1021},[149,138730,45],{"class":159},[149,138732,1026],{"class":162},[149,138734,1029],{"class":155},[149,138736,1032],{"class":295},[149,138738,138739,138741,138743,138745,138747,138749],{"class":151,"line":1035},[149,138740,45],{"class":159},[149,138742,1040],{"class":162},[149,138744,319],{"class":155},[149,138746,1045],{"class":309},[149,138748,1048],{"class":155},[149,138750,1051],{"class":295},[149,138752,138753,138755,138757,138759,138761,138763],{"class":151,"line":1054},[149,138754,45],{"class":159},[149,138756,1040],{"class":162},[149,138758,319],{"class":155},[149,138760,1063],{"class":309},[149,138762,1066],{"class":155},[149,138764,1069],{"class":295},[149,138766,138767,138769,138771,138773,138775,138777],{"class":151,"line":1072},[149,138768,45],{"class":159},[149,138770,1040],{"class":162},[149,138772,319],{"class":155},[149,138774,1081],{"class":309},[149,138776,1084],{"class":155},[149,138778,1087],{"class":295},[149,138780,138781,138783,138785,138787,138789,138791],{"class":151,"line":1090},[149,138782,45],{"class":159},[149,138784,1040],{"class":162},[149,138786,319],{"class":155},[149,138788,1099],{"class":309},[149,138790,1084],{"class":155},[149,138792,1104],{"class":295},[301,138794,1109],{"className":138795},[1108],[24,138797,1112],{},[42,138799,138800],{},[45,138801,138802,1120],{},[48,138803,1119],{},[24,138805,1123],{},[125,138807,138808],{"start":352},[45,138809,1128],{},[140,138811,138812],{"className":286,"code":1131,"language":288,"meta":145,"style":145},[48,138813,138814,138818,138828,138838,138852,138866,138880],{"__ignoreMap":145},[149,138815,138816],{"class":151,"line":152},[149,138817,1005],{"class":295},[149,138819,138820,138822,138824,138826],{"class":151,"line":193},[149,138821,45],{"class":159},[149,138823,1012],{"class":162},[149,138825,1015],{"class":155},[149,138827,1018],{"class":295},[149,138829,138830,138832,138834,138836],{"class":151,"line":235},[149,138831,45],{"class":159},[149,138833,1026],{"class":162},[149,138835,1029],{"class":155},[149,138837,1032],{"class":295},[149,138839,138840,138842,138844,138846,138848,138850],{"class":151,"line":340},[149,138841,45],{"class":159},[149,138843,1040],{"class":162},[149,138845,319],{"class":155},[149,138847,1045],{"class":309},[149,138849,1048],{"class":155},[149,138851,1051],{"class":295},[149,138853,138854,138856,138858,138860,138862,138864],{"class":151,"line":346},[149,138855,45],{"class":159},[149,138857,1040],{"class":162},[149,138859,319],{"class":155},[149,138861,1063],{"class":309},[149,138863,1066],{"class":155},[149,138865,1069],{"class":295},[149,138867,138868,138870,138872,138874,138876,138878],{"class":151,"line":352},[149,138869,45],{"class":159},[149,138871,1040],{"class":162},[149,138873,319],{"class":155},[149,138875,1081],{"class":309},[149,138877,1084],{"class":155},[149,138879,1087],{"class":295},[149,138881,138882,138884,138886,138888,138890,138892],{"class":151,"line":1021},[149,138883,45],{"class":159},[149,138885,1040],{"class":162},[149,138887,319],{"class":155},[149,138889,1099],{"class":309},[149,138891,1084],{"class":155},[149,138893,1104],{"class":295},[24,138895,1216],{},[120,138897,1220],{"id":1219},[24,138899,1223],{},[83,138901],{"style":85,"src":1226},[125,138903,138904],{},[45,138905,89],{},[42,138907,138908,138910,138912,138914,138916,138918],{},[45,138909,1235],{},[45,138911,1238],{},[45,138913,1241],{},[45,138915,1244],{},[45,138917,1247],{},[45,138919,1250],{},[125,138921,138922],{"start":193},[45,138923,1255],{},[140,138925,138926],{"className":286,"code":1131,"language":288,"meta":145,"style":145},[48,138927,138928,138932,138942,138952,138966,138980,138994],{"__ignoreMap":145},[149,138929,138930],{"class":151,"line":152},[149,138931,1005],{"class":295},[149,138933,138934,138936,138938,138940],{"class":151,"line":193},[149,138935,45],{"class":159},[149,138937,1012],{"class":162},[149,138939,1015],{"class":155},[149,138941,1018],{"class":295},[149,138943,138944,138946,138948,138950],{"class":151,"line":235},[149,138945,45],{"class":159},[149,138947,1026],{"class":162},[149,138949,1029],{"class":155},[149,138951,1032],{"class":295},[149,138953,138954,138956,138958,138960,138962,138964],{"class":151,"line":340},[149,138955,45],{"class":159},[149,138957,1040],{"class":162},[149,138959,319],{"class":155},[149,138961,1045],{"class":309},[149,138963,1048],{"class":155},[149,138965,1051],{"class":295},[149,138967,138968,138970,138972,138974,138976,138978],{"class":151,"line":346},[149,138969,45],{"class":159},[149,138971,1040],{"class":162},[149,138973,319],{"class":155},[149,138975,1063],{"class":309},[149,138977,1066],{"class":155},[149,138979,1069],{"class":295},[149,138981,138982,138984,138986,138988,138990,138992],{"class":151,"line":352},[149,138983,45],{"class":159},[149,138985,1040],{"class":162},[149,138987,319],{"class":155},[149,138989,1081],{"class":309},[149,138991,1084],{"class":155},[149,138993,1087],{"class":295},[149,138995,138996,138998,139000,139002,139004,139006],{"class":151,"line":1021},[149,138997,45],{"class":159},[149,138999,1040],{"class":162},[149,139001,319],{"class":155},[149,139003,1099],{"class":309},[149,139005,1084],{"class":155},[149,139007,1104],{"class":295},[83,139009],{"style":85,"src":1342},[125,139011,139012],{"start":235},[45,139013,1347],{},[83,139015],{"style":85,"src":1350},[24,139017,1353],{},[140,139019,139020],{"className":286,"code":1356,"language":288,"meta":145,"style":145},[48,139021,139022,139026,139034,139044,139054,139058,139066,139076,139086],{"__ignoreMap":145},[149,139023,139024],{"class":151,"line":152},[149,139025,1363],{"class":295},[149,139027,139028,139030,139032],{"class":151,"line":193},[149,139029,301],{"class":159},[149,139031,1370],{"class":162},[149,139033,304],{"class":155},[149,139035,139036,139038,139040,139042],{"class":151,"line":235},[149,139037,1377],{"class":309},[149,139039,313],{"class":155},[149,139041,1382],{"class":169},[149,139043,841],{"class":155},[149,139045,139046,139048,139050,139052],{"class":151,"line":340},[149,139047,1389],{"class":309},[149,139049,313],{"class":155},[149,139051,1394],{"class":309},[149,139053,841],{"class":155},[149,139055,139056],{"class":151,"line":346},[149,139057,355],{"class":155},[149,139059,139060,139062,139064],{"class":151,"line":352},[149,139061,301],{"class":159},[149,139063,1407],{"class":162},[149,139065,304],{"class":155},[149,139067,139068,139070,139072,139074],{"class":151,"line":1021},[149,139069,1377],{"class":309},[149,139071,313],{"class":155},[149,139073,1418],{"class":169},[149,139075,841],{"class":155},[149,139077,139078,139080,139082,139084],{"class":151,"line":1035},[149,139079,984],{"class":309},[149,139081,313],{"class":155},[149,139083,1429],{"class":309},[149,139085,841],{"class":155},[149,139087,139088],{"class":151,"line":1054},[149,139089,355],{"class":155},[83,139091],{"style":85,"src":1438},[24,139093,1441],{},[83,139095],{"style":85,"src":1444},[24,139097,1447],{},[24,139099,1450],{},[125,139101,139102],{"start":340},[45,139103,1455],{},[24,139105,1458],{},[24,139107,1461],{},[140,139109,139110],{"className":286,"code":1356,"language":288,"meta":145,"style":145},[48,139111,139112,139116,139124,139134,139144,139148,139156,139166,139176],{"__ignoreMap":145},[149,139113,139114],{"class":151,"line":152},[149,139115,1363],{"class":295},[149,139117,139118,139120,139122],{"class":151,"line":193},[149,139119,301],{"class":159},[149,139121,1370],{"class":162},[149,139123,304],{"class":155},[149,139125,139126,139128,139130,139132],{"class":151,"line":235},[149,139127,1377],{"class":309},[149,139129,313],{"class":155},[149,139131,1382],{"class":169},[149,139133,841],{"class":155},[149,139135,139136,139138,139140,139142],{"class":151,"line":340},[149,139137,1389],{"class":309},[149,139139,313],{"class":155},[149,139141,1394],{"class":309},[149,139143,841],{"class":155},[149,139145,139146],{"class":151,"line":346},[149,139147,355],{"class":155},[149,139149,139150,139152,139154],{"class":151,"line":352},[149,139151,301],{"class":159},[149,139153,1407],{"class":162},[149,139155,304],{"class":155},[149,139157,139158,139160,139162,139164],{"class":151,"line":1021},[149,139159,1377],{"class":309},[149,139161,313],{"class":155},[149,139163,1418],{"class":169},[149,139165,841],{"class":155},[149,139167,139168,139170,139172,139174],{"class":151,"line":1035},[149,139169,984],{"class":309},[149,139171,313],{"class":155},[149,139173,1429],{"class":309},[149,139175,841],{"class":155},[149,139177,139178],{"class":151,"line":1054},[149,139179,355],{"class":155},[83,139181],{"style":85,"src":1536},[125,139183,139184],{"start":346},[45,139185,1541],{},[24,139187,1544],{},[140,139189,139190],{"className":286,"code":1547,"language":288,"meta":145,"style":145},[48,139191,139192,139198,139208,139212,139216,139220,139228,139238,139248,139252,139260,139270,139280],{"__ignoreMap":145},[149,139193,139194,139196],{"class":151,"line":152},[149,139195,1554],{"class":162},[149,139197,304],{"class":155},[149,139199,139200,139202,139204,139206],{"class":151,"line":193},[149,139201,1561],{"class":309},[149,139203,313],{"class":155},[149,139205,1566],{"class":309},[149,139207,841],{"class":155},[149,139209,139210],{"class":151,"line":235},[149,139211,355],{"class":155},[149,139213,139214],{"class":151,"line":340},[149,139215,1000],{"class":155},[149,139217,139218],{"class":151,"line":346},[149,139219,1363],{"class":295},[149,139221,139222,139224,139226],{"class":151,"line":352},[149,139223,301],{"class":159},[149,139225,1370],{"class":162},[149,139227,304],{"class":155},[149,139229,139230,139232,139234,139236],{"class":151,"line":1021},[149,139231,1377],{"class":309},[149,139233,313],{"class":155},[149,139235,1382],{"class":169},[149,139237,841],{"class":155},[149,139239,139240,139242,139244,139246],{"class":151,"line":1035},[149,139241,1389],{"class":309},[149,139243,313],{"class":155},[149,139245,1394],{"class":309},[149,139247,841],{"class":155},[149,139249,139250],{"class":151,"line":1054},[149,139251,355],{"class":155},[149,139253,139254,139256,139258],{"class":151,"line":1072},[149,139255,301],{"class":159},[149,139257,1407],{"class":162},[149,139259,304],{"class":155},[149,139261,139262,139264,139266,139268],{"class":151,"line":1090},[149,139263,1377],{"class":309},[149,139265,313],{"class":155},[149,139267,1418],{"class":169},[149,139269,841],{"class":155},[149,139271,139272,139274,139276,139278],{"class":151,"line":1633},[149,139273,984],{"class":309},[149,139275,313],{"class":155},[149,139277,1429],{"class":309},[149,139279,841],{"class":155},[149,139281,139282],{"class":151,"line":1644},[149,139283,355],{"class":155},[24,139285,1649],{},[140,139287,139289],{"className":139288,"code":1654,"language":1655},[1653],[48,139290,1654],{"__ignoreMap":145},[24,139292,1660],{},[24,139294,1663],{},[24,139296,1666],{},[24,139298,1669],{},[24,139300,1672],{},[24,139302,1675],{},[24,139304,1678],{},[24,139306,1681],{},[19,139308,1685],{"id":1684},[125,139310,139311],{},[45,139312,1690],{},[83,139314],{"style":85,"src":1693},[140,139316,139317],{"className":286,"code":1696,"language":288,"meta":145,"style":145},[48,139318,139319,139325,139341],{"__ignoreMap":145},[149,139320,139321,139323],{"class":151,"line":152},[149,139322,301],{"class":159},[149,139324,304],{"class":155},[149,139326,139327,139329,139331,139333,139335,139337,139339],{"class":151,"line":193},[149,139328,1709],{"class":309},[149,139330,313],{"class":155},[149,139332,1714],{"class":309},[149,139334,1717],{"class":309},[149,139336,1720],{"class":325},[149,139338,1723],{"class":309},[149,139340,841],{"class":155},[149,139342,139343],{"class":151,"line":235},[149,139344,355],{"class":155},[125,139346,139347],{"start":193},[45,139348,1734],{},[24,139350,1737],{},[140,139352,139353],{"className":286,"code":1740,"language":288,"meta":145,"style":145},[48,139354,139355,139359,139365,139381,139385],{"__ignoreMap":145},[149,139356,139357],{"class":151,"line":152},[149,139358,1747],{"class":295},[149,139360,139361,139363],{"class":151,"line":193},[149,139362,301],{"class":159},[149,139364,304],{"class":155},[149,139366,139367,139369,139371,139373,139375,139377,139379],{"class":151,"line":235},[149,139368,1709],{"class":309},[149,139370,313],{"class":155},[149,139372,1714],{"class":309},[149,139374,1717],{"class":309},[149,139376,1720],{"class":325},[149,139378,1723],{"class":309},[149,139380,841],{"class":155},[149,139382,139383],{"class":151,"line":340},[149,139384,1774],{"class":295},[149,139386,139387],{"class":151,"line":346},[149,139388,355],{"class":155},[24,139390,1781],{},[1783,139392,1785],{},{"title":145,"searchDepth":193,"depth":193,"links":139394},[139395,139400],{"id":16,"depth":193,"text":17,"children":139396},[139397,139398,139399],{"id":21,"depth":235,"text":22},{"id":106,"depth":235,"text":107},{"id":484,"depth":235,"text":485},{"id":786,"depth":193,"text":787,"children":139401},[139402,139403],{"id":790,"depth":235,"text":791},{"id":1684,"depth":235,"text":1685},{},{"title":5,"description":1797},{"id":139407,"title":139408,"body":139409,"description":1797,"extension":1798,"meta":141153,"navigation":1800,"path":141154,"seo":141155,"stem":141156,"__hash__":141157},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139410,"toc":141134},[139411,139414,139418,139421,139427,139433,139437,139439,139442,139445,139448,139451,139454,139457,139460,139464,139468,139471,139474,139477,139481,139484,139487,139492,139495,139498,139501,139505,139508,139517,139520,139523,139527,139530,139533,139538,139545,139559,139567,139574,139579,139582,139585,139588,139595,139599,139605,139611,139614,139617,139622,139628,139630,139638,139643,139646,139652,139654,139659,139664,139667,139669,139674,139677,139682,139687,139721,139725,139729,139732,139736,139739,139825,139828,139865,139868,139904,139908,139913,139926,139980,139982,140010,140012,140040,140046,140060,140062,140106,140108,140152,140155,140162,140173,140175,140202,140204,140230,140237,140253,140255,140349,140351,140445,140452,140455,140460,140466,140540,140543,140545,140581,140583,140619,140622,140629,140648,140651,140654,140656,140681,140683,140707,140710,140713,140743,140747,140750,140813,140815,140881,140883,140947,140950,140982,140984,141010,141012,141038,141041,141072,141074,141100,141102,141128,141131],[10,139412,139408],{"id":139413},"_15-品优购项目上篇-搭建与公共模块",[14,139415,139417],{"id":139416},"_151-项目规划","15.1 项目规划",[83,139419],{"style":85,"src":139420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[24,139422,139423,139426],{},[31,139424,139425],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[24,139428,139429,139432],{},[31,139430,139431],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139434,139436],{"id":139435},"_152-项目介绍","15.2 项目介绍",[24,139438,139425],{},[83,139440],{"style":85,"src":139441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[24,139443,139444],{},"主页：",[83,139446],{"style":85,"src":139447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[24,139449,139450],{},"列表页：",[83,139452],{"style":85,"src":139453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[24,139455,139456],{},"注册页：",[83,139458],{"style":85,"src":139459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139461,139463],{"id":139462},"_153-项目搭建工作","15.3 项目搭建工作",[19,139465,139467],{"id":139466},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[83,139469],{"style":85,"src":139470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[24,139472,139473],{},"经常更换的图片要放到upload文件夹中",[24,139475,139476],{},"不经常换的放到images文件夹中",[19,139478,139480],{"id":139479},"_1532-创建文件如下","15.3.2 创建文件如下",[83,139482],{"style":85,"src":139483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[83,139485],{"style":85,"src":139486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[24,139488,139489],{},[31,139490,139491],{},"初始化样式：",[24,139493,139494],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[24,139496,139497],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[24,139499,139500],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[19,139502,139504],{"id":139503},"_1533-项目模块化开发","15.3.3 项目模块化开发",[24,139506,139507],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[24,139509,139510,139511,139516],{},"这里最典型的应用就是 ",[31,139512,139513],{},[48,139514,139515],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[83,139518],{"style":85,"src":139519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[24,139521,139522],{},"通过link方法来引入",[19,139524,139526],{"id":139525},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[83,139528],{"style":85,"src":139529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[24,139531,139532],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[125,139534,139535],{},[45,139536,139537],{},"制作favicon图标",[24,139539,139540,139541,139544],{},"①把品优购图标切成 ",[48,139542,139543],{},"png"," 图片",[24,139546,139547,139548,139550,139551,139554,139555],{},"②把 ",[48,139549,139543],{}," 图片转换为 ",[48,139552,139553],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2102,139556,139557],{"href":139557,"rel":139558},"http:\u002F\u002Fwww.bitbug.net\u002F",[25573],[125,139560,139561,139564],{"start":193},[45,139562,139563],{},"favicon图标放到网站根目录下",[45,139565,139566],{},"HTML页面引入favicon",[24,139568,139569,139570,139573],{},"在html 页面里面的 ",[48,139571,139572],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[24,139575,139576],{},[48,139577,139578],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[24,139580,139581],{},"复制这行代码或者在生成这个的网站进行复制",[83,139583],{"style":85,"src":139584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[24,139586,139587],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[24,139589,139590,139591],{},"例如:",[2102,139592,139593],{"href":139593,"rel":139594},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25573],[19,139596,139598],{"id":139597},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[24,139600,139601,139604],{},[31,139602,139603],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[24,139606,139607,139610],{},[31,139608,139609],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[24,139612,139613],{},"页面必须有三个标签用来符合 SEO 优化",[83,139615],{"style":85,"src":139616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[125,139618,139619],{},[45,139620,139621],{},"title网站标题",[24,139623,139624,139627],{},[31,139625,139626],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[24,139629,70474],{},[42,139631,139632,139635],{},[45,139633,139634],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[45,139636,139637],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[125,139639,139640],{"start":193},[45,139641,139642],{},"description网站描述",[24,139644,139645],{},"简要说明我们网站主要是做什么的",[24,139647,139648,139651],{},[31,139649,139650],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[24,139653,70474],{},[24,139655,139656],{},[48,139657,139658],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[125,139660,139661],{"start":235},[45,139662,139663],{},"keywords关键词",[24,139665,139666],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[24,139668,70474],{},[24,139670,139671],{},[48,139672,139673],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[24,139675,139676],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[24,139678,139679],{},[31,139680,139681],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[125,139683,139684],{"start":340},[45,139685,139686],{},"代码总结",[140,139688,139689],{"className":142,"code":132325,"language":144,"meta":145,"style":145},[48,139690,139691,139695,139709,139713],{"__ignoreMap":145},[149,139692,139693],{"class":151,"line":152},[149,139694,132332],{"class":295},[149,139696,139697,139699,139701,139703,139705,139707],{"class":151,"line":193},[149,139698,156],{"class":155},[149,139700,301],{"class":159},[149,139702,55184],{"class":162},[149,139704,166],{"class":155},[149,139706,132345],{"class":169},[149,139708,190],{"class":155},[149,139710,139711],{"class":151,"line":235},[149,139712,132352],{"class":155},[149,139714,139715,139717,139719],{"class":151,"line":340},[149,139716,665],{"class":155},[149,139718,301],{"class":159},[149,139720,190],{"class":155},[14,139722,139724],{"id":139723},"_154-项目公共部分制作","15.4 项目公共部分制作",[19,139726,139728],{"id":139727},"_1541-常用模块类命名","15.4.1 常用模块类命名",[83,139730],{"style":85,"src":139731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[19,139733,139735],{"id":139734},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[24,139737,139738],{},"布局思路：",[42,139740,139741,139744,139747,139769,139802],{},[45,139742,139743],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[45,139745,139746],{},"里面包含版心的盒子",[45,139748,139749,139750],{},"版心盒子里面包含 1 号左侧盒子左浮动",[42,139751,139752,139760,139766],{},[45,139753,139754,139755,23210,139757,139759],{},"1 号盒子 里面包含一个",[48,139756,42],{},[48,139758,42],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[45,139761,139762,139763,139765],{},"里面的内容是水平排列，所以需要给",[48,139764,45],{},"设置浮动",[45,139767,139768],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[45,139770,139771,139772],{},"版心盒子里面包含 2 号右侧盒子右浮动",[42,139773,139774,139788,139793],{},[45,139775,139776,139777,23210,139779,139781,139782,139784,139785,139787],{},"2 号盒子 里面包含一个",[48,139778,42],{},[48,139780,42],{},"包裹",[48,139783,45],{},"，中间的",[48,139786,2780],{},"可以用样式去设置，也可以用字符 |",[45,139789,139790,139791,139765],{},"里面内容水平排列，给",[48,139792,45],{},[45,139794,139795,139796,139798,139799,139801],{},"找到里面所有偶数的 ",[48,139797,45],{}," 设置样式（偶数的 ",[48,139800,45],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[45,139803,139804,139805],{},"需要用到字体图标",[42,139806,139807,139813,139816,139819,139822],{},[45,139808,139809,139810],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[48,139811,139812],{},"arrow-icon",[45,139814,139815],{},"先要引入字体图片的资源",[45,139817,139818],{},"在样式里面利用 font-face 来进行声明",[45,139820,139821],{},"在伪元素的 content属性设置 图标的编码",[45,139823,139824],{},"给伪元素设置font-family属性",[24,139826,139827],{},"结构实例代码：",[140,139829,139831],{"className":286,"code":139830,"language":288,"meta":145,"style":145},"div::before {\n  content: \"\";\n  display: block;\n}\n",[48,139832,139833,139841,139851,139861],{"__ignoreMap":145},[149,139834,139835,139837,139839],{"class":151,"line":152},[149,139836,301],{"class":159},[149,139838,1370],{"class":162},[149,139840,304],{"class":155},[149,139842,139843,139845,139847,139849],{"class":151,"line":193},[149,139844,1377],{"class":309},[149,139846,313],{"class":155},[149,139848,1382],{"class":169},[149,139850,841],{"class":155},[149,139852,139853,139855,139857,139859],{"class":151,"line":235},[149,139854,1389],{"class":309},[149,139856,313],{"class":155},[149,139858,1394],{"class":309},[149,139860,841],{"class":155},[149,139862,139863],{"class":151,"line":340},[149,139864,355],{"class":155},[24,139866,139867],{},"样式实例代码：",[140,139869,139870],{"className":286,"code":139830,"language":288,"meta":145,"style":145},[48,139871,139872,139880,139890,139900],{"__ignoreMap":145},[149,139873,139874,139876,139878],{"class":151,"line":152},[149,139875,301],{"class":159},[149,139877,1370],{"class":162},[149,139879,304],{"class":155},[149,139881,139882,139884,139886,139888],{"class":151,"line":193},[149,139883,1377],{"class":309},[149,139885,313],{"class":155},[149,139887,1382],{"class":169},[149,139889,841],{"class":155},[149,139891,139892,139894,139896,139898],{"class":151,"line":235},[149,139893,1389],{"class":309},[149,139895,313],{"class":155},[149,139897,1394],{"class":309},[149,139899,841],{"class":155},[149,139901,139902],{"class":151,"line":340},[149,139903,355],{"class":155},[19,139905,139907],{"id":139906},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[42,139909,139910],{},[45,139911,139912],{},"header 盒子必须要有高度",[24,139914,139915,139916,139918,139919],{},"1 号盒子是 ",[48,139917,133232],{}," 标志定位，在正常开发过程中， ",[31,139920,139921,139922,139925],{},"logo的布局其实是有讲究的，需要进行 ",[48,139923,139924],{},"logoSEO","的优化 （★★★）",[42,139927,139928,139936,139944,139971],{},[45,139929,139930,139932,139933,139935],{},[48,139931,133232],{}," 里面首先放一个 ",[48,139934,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[45,139937,139938,139940,139941,139943],{},[48,139939,10],{}," 里面再放一个链接，可以返回首页的，把 ",[48,139942,133232],{}," 的背景图片给链接即可",[45,139945,139946,139947],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[42,139948,139949,139964],{},[45,139950,139951,139952,139955,139956,139959,139960,139963],{},"方法1：",[48,139953,139954],{},"text-indent"," 移到盒子外面（",[48,139957,139958],{},"text-indent: -9999px",") ，然后 ",[48,139961,139962],{},"overflow:hidden"," ，淘宝的做法",[45,139965,139966,139967,139970],{},"方法2：直接给 ",[48,139968,139969],{},"font-size: 0;"," 就看不到文字了，京东的做法",[45,139972,139973,139974,139976,139977,139979],{},"最后给链接一个 ",[48,139975,53111],{}," 属性，这样鼠标放到 ",[48,139978,133232],{}," 上就可以看到提示文字了",[24,139981,139827],{},[140,139983,139984],{"className":142,"code":133453,"language":144,"meta":145,"style":145},[48,139985,139986],{"__ignoreMap":145},[149,139987,139988,139990,139992,139994,139996,139998,140000,140002,140004,140006,140008],{"class":151,"line":152},[149,139989,156],{"class":155},[149,139991,2102],{"class":159},[149,139993,62746],{"class":162},[149,139995,166],{"class":155},[149,139997,133468],{"class":169},[149,139999,133471],{"class":162},[149,140001,166],{"class":155},[149,140003,133476],{"class":169},[149,140005,133479],{"class":155},[149,140007,2102],{"class":159},[149,140009,190],{"class":155},[24,140011,139867],{},[140,140013,140014],{"className":142,"code":133453,"language":144,"meta":145,"style":145},[48,140015,140016],{"__ignoreMap":145},[149,140017,140018,140020,140022,140024,140026,140028,140030,140032,140034,140036,140038],{"class":151,"line":152},[149,140019,156],{"class":155},[149,140021,2102],{"class":159},[149,140023,62746],{"class":162},[149,140025,166],{"class":155},[149,140027,133468],{"class":169},[149,140029,133471],{"class":162},[149,140031,166],{"class":155},[149,140033,133476],{"class":169},[149,140035,133479],{"class":155},[149,140037,2102],{"class":159},[149,140039,190],{"class":155},[24,140041,140042,140043,140045],{},"2 号盒子是 ",[48,140044,133245],{}," 搜索模块定位",[42,140047,140048,140051,140054,140057],{},[45,140049,140050],{},"search盒子利用定位的方式放在对应的位置",[45,140052,140053],{},"search盒子设置绝对定位，header盒子设置相对定位",[45,140055,140056],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[45,140058,140059],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[24,140061,139827],{},[140,140063,140064],{"className":286,"code":133540,"language":288,"meta":145,"style":145},[48,140065,140066,140088,140092,140102],{"__ignoreMap":145},[149,140067,140068,140070,140072,140074,140076,140078,140080,140082,140084,140086],{"class":151,"line":152},[149,140069,301],{"class":159},[149,140071,329],{"class":155},[149,140073,24],{"class":159},[149,140075,329],{"class":155},[149,140077,10],{"class":159},[149,140079,329],{"class":155},[149,140081,42],{"class":159},[149,140083,329],{"class":155},[149,140085,45],{"class":159},[149,140087,304],{"class":155},[149,140089,140090],{"class":151,"line":193},[149,140091,133569],{"class":295},[149,140093,140094,140096,140098,140100],{"class":151,"line":235},[149,140095,1389],{"class":309},[149,140097,313],{"class":155},[149,140099,1394],{"class":309},[149,140101,841],{"class":155},[149,140103,140104],{"class":151,"line":340},[149,140105,355],{"class":155},[24,140107,139867],{},[140,140109,140110],{"className":286,"code":133540,"language":288,"meta":145,"style":145},[48,140111,140112,140134,140138,140148],{"__ignoreMap":145},[149,140113,140114,140116,140118,140120,140122,140124,140126,140128,140130,140132],{"class":151,"line":152},[149,140115,301],{"class":159},[149,140117,329],{"class":155},[149,140119,24],{"class":159},[149,140121,329],{"class":155},[149,140123,10],{"class":159},[149,140125,329],{"class":155},[149,140127,42],{"class":159},[149,140129,329],{"class":155},[149,140131,45],{"class":159},[149,140133,304],{"class":155},[149,140135,140136],{"class":151,"line":193},[149,140137,133569],{"class":295},[149,140139,140140,140142,140144,140146],{"class":151,"line":235},[149,140141,1389],{"class":309},[149,140143,313],{"class":155},[149,140145,1394],{"class":309},[149,140147,841],{"class":155},[149,140149,140150],{"class":151,"line":340},[149,140151,355],{"class":155},[24,140153,140154],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[24,140156,140157,140158,140161],{},"3 号盒子是 ",[48,140159,140160],{},"hotwords"," 热词模块定位",[42,140163,140164,140167,140170],{},[45,140165,140166],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[45,140168,140169],{},"给里面所有的a标签设置 左右10px的外边距",[45,140171,140172],{},"给第一个a标签设置文字变红色（#c81623）",[24,140174,139827],{},[140,140176,140178],{"className":286,"code":140177,"language":288,"meta":145,"style":145},"div {\n  margin: 0 auto;\n}\n",[48,140179,140180,140186,140198],{"__ignoreMap":145},[149,140181,140182,140184],{"class":151,"line":152},[149,140183,301],{"class":159},[149,140185,304],{"class":155},[149,140187,140188,140190,140192,140194,140196],{"class":151,"line":193},[149,140189,72154],{"class":309},[149,140191,313],{"class":155},[149,140193,2056],{"class":309},[149,140195,53257],{"class":309},[149,140197,841],{"class":155},[149,140199,140200],{"class":151,"line":235},[149,140201,355],{"class":155},[24,140203,139867],{},[140,140205,140206],{"className":286,"code":140177,"language":288,"meta":145,"style":145},[48,140207,140208,140214,140226],{"__ignoreMap":145},[149,140209,140210,140212],{"class":151,"line":152},[149,140211,301],{"class":159},[149,140213,304],{"class":155},[149,140215,140216,140218,140220,140222,140224],{"class":151,"line":193},[149,140217,72154],{"class":309},[149,140219,313],{"class":155},[149,140221,2056],{"class":309},[149,140223,53257],{"class":309},[149,140225,841],{"class":155},[149,140227,140228],{"class":151,"line":235},[149,140229,355],{"class":155},[24,140231,140232,140233,140236],{},"4 号盒子是 ",[48,140234,140235],{},"shopcar"," 购物车模块",[42,140238,140239,140244,140247,140250],{},[45,140240,125014,140241,140243],{},[48,140242,140235],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[45,140245,140246],{},"count 统计部分用绝对定位做",[45,140248,140249],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[45,140251,140252],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[24,140254,139827],{},[140,140256,140257],{"className":286,"code":133652,"language":288,"meta":145,"style":145},[48,140258,140259,140263,140277,140281,140295,140299,140313,140317,140331,140335],{"__ignoreMap":145},[149,140260,140261],{"class":151,"line":152},[149,140262,133659],{"class":295},[149,140264,140265,140267,140269,140271,140273,140275],{"class":151,"line":193},[149,140266,133664],{"class":162},[149,140268,81488],{"class":155},[149,140270,130584],{"class":309},[149,140272,313],{"class":155},[149,140274,133673],{"class":309},[149,140276,131153],{"class":155},[149,140278,140279],{"class":151,"line":235},[149,140280,133680],{"class":295},[149,140282,140283,140285,140287,140289,140291,140293],{"class":151,"line":340},[149,140284,133685],{"class":162},[149,140286,81488],{"class":155},[149,140288,130584],{"class":309},[149,140290,313],{"class":155},[149,140292,56459],{"class":309},[149,140294,131153],{"class":155},[149,140296,140297],{"class":151,"line":346},[149,140298,133700],{"class":295},[149,140300,140301,140303,140305,140307,140309,140311],{"class":151,"line":352},[149,140302,133705],{"class":162},[149,140304,81488],{"class":155},[149,140306,130584],{"class":309},[149,140308,313],{"class":155},[149,140310,56526],{"class":309},[149,140312,131153],{"class":155},[149,140314,140315],{"class":151,"line":1021},[149,140316,133720],{"class":295},[149,140318,140319,140321,140323,140325,140327,140329],{"class":151,"line":1035},[149,140320,133725],{"class":162},[149,140322,81488],{"class":155},[149,140324,130584],{"class":309},[149,140326,313],{"class":155},[149,140328,87914],{"class":309},[149,140330,131153],{"class":155},[149,140332,140333],{"class":151,"line":1054},[149,140334,133740],{"class":295},[149,140336,140337,140339,140341,140343,140345,140347],{"class":151,"line":1072},[149,140338,133745],{"class":162},[149,140340,81488],{"class":155},[149,140342,130584],{"class":309},[149,140344,313],{"class":155},[149,140346,133754],{"class":309},[149,140348,131153],{"class":155},[24,140350,139867],{},[140,140352,140353],{"className":286,"code":133652,"language":288,"meta":145,"style":145},[48,140354,140355,140359,140373,140377,140391,140395,140409,140413,140427,140431],{"__ignoreMap":145},[149,140356,140357],{"class":151,"line":152},[149,140358,133659],{"class":295},[149,140360,140361,140363,140365,140367,140369,140371],{"class":151,"line":193},[149,140362,133664],{"class":162},[149,140364,81488],{"class":155},[149,140366,130584],{"class":309},[149,140368,313],{"class":155},[149,140370,133673],{"class":309},[149,140372,131153],{"class":155},[149,140374,140375],{"class":151,"line":235},[149,140376,133680],{"class":295},[149,140378,140379,140381,140383,140385,140387,140389],{"class":151,"line":340},[149,140380,133685],{"class":162},[149,140382,81488],{"class":155},[149,140384,130584],{"class":309},[149,140386,313],{"class":155},[149,140388,56459],{"class":309},[149,140390,131153],{"class":155},[149,140392,140393],{"class":151,"line":346},[149,140394,133700],{"class":295},[149,140396,140397,140399,140401,140403,140405,140407],{"class":151,"line":352},[149,140398,133705],{"class":162},[149,140400,81488],{"class":155},[149,140402,130584],{"class":309},[149,140404,313],{"class":155},[149,140406,56526],{"class":309},[149,140408,131153],{"class":155},[149,140410,140411],{"class":151,"line":1021},[149,140412,133720],{"class":295},[149,140414,140415,140417,140419,140421,140423,140425],{"class":151,"line":1035},[149,140416,133725],{"class":162},[149,140418,81488],{"class":155},[149,140420,130584],{"class":309},[149,140422,313],{"class":155},[149,140424,87914],{"class":309},[149,140426,131153],{"class":155},[149,140428,140429],{"class":151,"line":1054},[149,140430,133740],{"class":295},[149,140432,140433,140435,140437,140439,140441,140443],{"class":151,"line":1072},[149,140434,133745],{"class":162},[149,140436,81488],{"class":155},[149,140438,130584],{"class":309},[149,140440,313],{"class":155},[149,140442,133754],{"class":309},[149,140444,131153],{"class":155},[19,140446,140448,140449,140451],{"id":140447},"_1544-nav导航模块制作","15.4.4 ",[48,140450,55411],{},"导航模块制作",[83,140453],{"style":85,"src":140454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[24,140456,140457,140459],{},[48,140458,55411],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[24,140461,140462,140463],{},"1 号盒子左侧浮动，",[48,140464,140465],{},"dropdown",[42,140467,140468,140478,140486,140492,140500,140510,140518,140529],{},[45,140469,140470,140471,102698,140474,140477],{},"1号盒子有讲究，根据相关性 里面包含 ",[48,140472,140473],{},".dt",[48,140475,140476],{},".dd"," 两个盒子",[45,140479,140480,140482,140483,140485],{},[48,140481,140473],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[48,140484,140476],{}," 挤到下面去了",[45,140487,140488,140489,140491],{},"给 ",[48,140490,140476],{}," 盒子设置宽度 和 高度，以及背景颜色",[45,140493,140488,140494,140496,140497,121916],{},[48,140495,140476],{}," 盒子里面定义 无序列表 （",[48,140498,140499],{},"ul > li > a",[45,140501,140502,140503,140505,140506,140509],{},"每个 ",[48,140504,45],{}," 都有一个高度（",[48,140507,140508],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[45,140511,140488,140512,140514,140515,121916],{},[48,140513,45],{}," 里面的a设置文字大小（",[48,140516,140517],{},"14px",[45,140519,140488,140520,140522,140523,140525,140526,140528],{},[48,140521,45],{}," 设置 ",[48,140524,129386],{},"，当鼠标移入的时候，让",[48,140527,45],{},"的背景变成白色，让里面的文字变成红色",[45,140530,140531,140533,140534,140536,140537,140539],{},[48,140532,45],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[48,140535,45],{},"的右侧，那么给",[48,140538,45],{},"设置相对定位",[24,140541,140542],{},"一定要注意相关性",[24,140544,139827],{},[140,140546,140547],{"className":286,"code":139830,"language":288,"meta":145,"style":145},[48,140548,140549,140557,140567,140577],{"__ignoreMap":145},[149,140550,140551,140553,140555],{"class":151,"line":152},[149,140552,301],{"class":159},[149,140554,1370],{"class":162},[149,140556,304],{"class":155},[149,140558,140559,140561,140563,140565],{"class":151,"line":193},[149,140560,1377],{"class":309},[149,140562,313],{"class":155},[149,140564,1382],{"class":169},[149,140566,841],{"class":155},[149,140568,140569,140571,140573,140575],{"class":151,"line":235},[149,140570,1389],{"class":309},[149,140572,313],{"class":155},[149,140574,1394],{"class":309},[149,140576,841],{"class":155},[149,140578,140579],{"class":151,"line":340},[149,140580,355],{"class":155},[24,140582,139867],{},[140,140584,140585],{"className":286,"code":139830,"language":288,"meta":145,"style":145},[48,140586,140587,140595,140605,140615],{"__ignoreMap":145},[149,140588,140589,140591,140593],{"class":151,"line":152},[149,140590,301],{"class":159},[149,140592,1370],{"class":162},[149,140594,304],{"class":155},[149,140596,140597,140599,140601,140603],{"class":151,"line":193},[149,140598,1377],{"class":309},[149,140600,313],{"class":155},[149,140602,1382],{"class":169},[149,140604,841],{"class":155},[149,140606,140607,140609,140611,140613],{"class":151,"line":235},[149,140608,1389],{"class":309},[149,140610,313],{"class":155},[149,140612,1394],{"class":309},[149,140614,841],{"class":155},[149,140616,140617],{"class":151,"line":340},[149,140618,355],{"class":155},[24,140620,140621],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[24,140623,140624,140625,140628],{},"2 号盒子左侧浮动，",[48,140626,140627],{},"navitems"," 导航栏组",[42,140630,140631,140636,140645],{},[45,140632,140633,140634],{},"里面结构是 ",[48,140635,140499],{},[45,140637,140638,140639,140641,140642,140644],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[48,140640,2102],{},"左右的",[48,140643,32589],{},"把两侧撑开",[45,140646,140647],{},"让文字垂直居中（行高等于高度）",[83,140649],{"style":85,"src":140650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[24,140652,140653],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[24,140655,139827],{},[140,140657,140659],{"className":286,"code":140658,"language":288,"meta":145,"style":145},".box {\n  float: left;\n}\n",[48,140660,140661,140667,140677],{"__ignoreMap":145},[149,140662,140663,140665],{"class":151,"line":152},[149,140664,1554],{"class":162},[149,140666,304],{"class":155},[149,140668,140669,140671,140673,140675],{"class":151,"line":193},[149,140670,1561],{"class":309},[149,140672,313],{"class":155},[149,140674,1566],{"class":309},[149,140676,841],{"class":155},[149,140678,140679],{"class":151,"line":235},[149,140680,355],{"class":155},[24,140682,139867],{},[140,140684,140685],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,140686,140687,140693,140703],{"__ignoreMap":145},[149,140688,140689,140691],{"class":151,"line":152},[149,140690,1554],{"class":162},[149,140692,304],{"class":155},[149,140694,140695,140697,140699,140701],{"class":151,"line":193},[149,140696,1561],{"class":309},[149,140698,313],{"class":155},[149,140700,1566],{"class":309},[149,140702,841],{"class":155},[149,140704,140705],{"class":151,"line":235},[149,140706,355],{"class":155},[24,140708,140709],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[83,140711],{"style":85,"src":140712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[140,140714,140715],{"className":286,"code":132378,"language":288,"meta":145,"style":145},[48,140716,140717,140723,140739],{"__ignoreMap":145},[149,140718,140719,140721],{"class":151,"line":152},[149,140720,301],{"class":159},[149,140722,304],{"class":155},[149,140724,140725,140727,140729,140731,140733,140735,140737],{"class":151,"line":193},[149,140726,825],{"class":309},[149,140728,313],{"class":155},[149,140730,830],{"class":309},[149,140732,326],{"class":325},[149,140734,835],{"class":309},[149,140736,131615],{"class":309},[149,140738,841],{"class":155},[149,140740,140741],{"class":151,"line":235},[149,140742,355],{"class":155},[19,140744,140746],{"id":140745},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[83,140748],{"style":85,"src":140749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[42,140751,140752,140757,140762],{},[45,140753,140754,140756],{},[48,140755,133423],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[45,140758,140759,140761],{},[48,140760,133423],{}," 里面有一个大的版心",[45,140763,140764,140765,140768,140769],{},"版心里面包含 1 号盒子，",[48,140766,140767],{},"mod_service"," 是服务模块，mod 是模块的意思",[42,140770,140771,140776,140789,140805,140810],{},[45,140772,140488,140773,140775],{},[48,140774,140767],{}," 设置高度（80px）和下边框",[45,140777,140778,140779,140782,140783,140785,140786,140788],{},"在里面定义 ",[48,140780,140781],{},"ul > li"," ,每个",[48,140784,45],{}," 宽度是300px 高度是 50px，给每个",[48,140787,45],{},"设置35px的左内边距",[45,140790,140791,140792,140794,140795,140797,140798,140800,140801,20120,140803,121916],{},"在每个",[48,140793,45],{},"里面，放一个 ",[48,140796,24619],{},"（里面放图标），一个",[48,140799,301],{},"（里面放",[48,140802,301],{},[48,140804,24],{},[45,140806,140488,140807,140809],{},[48,140808,24619],{},"设置浮动，让h5与这个div左右排列",[45,140811,140812],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[24,140814,139827],{},[140,140816,140818],{"className":286,"code":140817,"language":288,"meta":145,"style":145},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[48,140819,140820,140826,140838,140850,140877],{"__ignoreMap":145},[149,140821,140822,140824],{"class":151,"line":152},[149,140823,135972],{"class":162},[149,140825,304],{"class":155},[149,140827,140828,140830,140832,140834,140836],{"class":151,"line":193},[149,140829,72252],{"class":309},[149,140831,313],{"class":155},[149,140833,2561],{"class":309},[149,140835,326],{"class":325},[149,140837,841],{"class":155},[149,140839,140840,140842,140844,140846,140848],{"class":151,"line":235},[149,140841,72472],{"class":309},[149,140843,313],{"class":155},[149,140845,2561],{"class":309},[149,140847,326],{"class":325},[149,140849,841],{"class":155},[149,140851,140852,140854,140856,140858,140860,140862,140864,140866,140869,140871,140873,140875],{"class":151,"line":340},[149,140853,72295],{"class":309},[149,140855,313],{"class":155},[149,140857,63415],{"class":309},[149,140859,319],{"class":155},[149,140861,136011],{"class":6932},[149,140863,15427],{"class":155},[149,140865,63425],{"class":309},[149,140867,140868],{"class":309}," -10",[149,140870,326],{"class":325},[149,140872,136030],{"class":309},[149,140874,326],{"class":325},[149,140876,841],{"class":155},[149,140878,140879],{"class":151,"line":346},[149,140880,355],{"class":155},[24,140882,139867],{},[140,140884,140885],{"className":286,"code":140817,"language":288,"meta":145,"style":145},[48,140886,140887,140893,140905,140917,140943],{"__ignoreMap":145},[149,140888,140889,140891],{"class":151,"line":152},[149,140890,135972],{"class":162},[149,140892,304],{"class":155},[149,140894,140895,140897,140899,140901,140903],{"class":151,"line":193},[149,140896,72252],{"class":309},[149,140898,313],{"class":155},[149,140900,2561],{"class":309},[149,140902,326],{"class":325},[149,140904,841],{"class":155},[149,140906,140907,140909,140911,140913,140915],{"class":151,"line":235},[149,140908,72472],{"class":309},[149,140910,313],{"class":155},[149,140912,2561],{"class":309},[149,140914,326],{"class":325},[149,140916,841],{"class":155},[149,140918,140919,140921,140923,140925,140927,140929,140931,140933,140935,140937,140939,140941],{"class":151,"line":340},[149,140920,72295],{"class":309},[149,140922,313],{"class":155},[149,140924,63415],{"class":309},[149,140926,319],{"class":155},[149,140928,136011],{"class":6932},[149,140930,15427],{"class":155},[149,140932,63425],{"class":309},[149,140934,140868],{"class":309},[149,140936,326],{"class":325},[149,140938,136030],{"class":309},[149,140940,326],{"class":325},[149,140942,841],{"class":155},[149,140944,140945],{"class":151,"line":346},[149,140946,355],{"class":155},[24,140948,140949],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[42,140951,140952,140955,140961,140967,140979],{},[45,140953,140954],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[45,140956,140957,140958,121916],{},"里面的布局利用 自定义列表来实现（",[48,140959,140960],{},"dl > dt + dd",[45,140962,140488,140963,140966],{},[48,140964,140965],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[45,140968,140488,140969,140972,140973,20120,140975,140978],{},[48,140970,140971],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[48,140974,140971],{},[48,140976,140977],{},"dd","之间有些距离",[45,140980,140981],{},"最后一个 dl 结构和样式不一样，需要单独设置",[24,140983,139827],{},[140,140985,140986],{"className":286,"code":140177,"language":288,"meta":145,"style":145},[48,140987,140988,140994,141006],{"__ignoreMap":145},[149,140989,140990,140992],{"class":151,"line":152},[149,140991,301],{"class":159},[149,140993,304],{"class":155},[149,140995,140996,140998,141000,141002,141004],{"class":151,"line":193},[149,140997,72154],{"class":309},[149,140999,313],{"class":155},[149,141001,2056],{"class":309},[149,141003,53257],{"class":309},[149,141005,841],{"class":155},[149,141007,141008],{"class":151,"line":235},[149,141009,355],{"class":155},[24,141011,139867],{},[140,141013,141014],{"className":286,"code":140177,"language":288,"meta":145,"style":145},[48,141015,141016,141022,141034],{"__ignoreMap":145},[149,141017,141018,141020],{"class":151,"line":152},[149,141019,301],{"class":159},[149,141021,304],{"class":155},[149,141023,141024,141026,141028,141030,141032],{"class":151,"line":193},[149,141025,72154],{"class":309},[149,141027,313],{"class":155},[149,141029,2056],{"class":309},[149,141031,53257],{"class":309},[149,141033,841],{"class":155},[149,141035,141036],{"class":151,"line":235},[149,141037,355],{"class":155},[24,141039,141040],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[42,141042,141043,141052,141055,141066],{},[45,141044,141045,141046,141048,141049,141051],{},"分为上下两块，上面是 ",[48,141047,133440],{}," 友情链接，下面是 ",[48,141050,133433],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[45,141053,141054],{},"把内容分别复制到相应模块中",[45,141056,140488,141057,141059,141060,141062,141063,141065],{},[48,141058,133440],{}," 设置 15px 的下外边距，给",[48,141061,133440],{}," 里面 的 ",[48,141064,2102],{}," 标签设置 左右 3px 的外边距",[45,141067,141068,141069,141071],{},"给",[48,141070,133433],{}," 设置 20px 的行高",[24,141073,139827],{},[140,141075,141076],{"className":286,"code":140177,"language":288,"meta":145,"style":145},[48,141077,141078,141084,141096],{"__ignoreMap":145},[149,141079,141080,141082],{"class":151,"line":152},[149,141081,301],{"class":159},[149,141083,304],{"class":155},[149,141085,141086,141088,141090,141092,141094],{"class":151,"line":193},[149,141087,72154],{"class":309},[149,141089,313],{"class":155},[149,141091,2056],{"class":309},[149,141093,53257],{"class":309},[149,141095,841],{"class":155},[149,141097,141098],{"class":151,"line":235},[149,141099,355],{"class":155},[24,141101,139867],{},[140,141103,141104],{"className":286,"code":140177,"language":288,"meta":145,"style":145},[48,141105,141106,141112,141124],{"__ignoreMap":145},[149,141107,141108,141110],{"class":151,"line":152},[149,141109,301],{"class":159},[149,141111,304],{"class":155},[149,141113,141114,141116,141118,141120,141122],{"class":151,"line":193},[149,141115,72154],{"class":309},[149,141117,313],{"class":155},[149,141119,2056],{"class":309},[149,141121,53257],{"class":309},[149,141123,841],{"class":155},[149,141125,141126],{"class":151,"line":235},[149,141127,355],{"class":155},[24,141129,141130],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1783,141132,141133],{},"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":145,"searchDepth":193,"depth":193,"links":141135},[141136,141137,141138,141145],{"id":139416,"depth":193,"text":139417},{"id":139435,"depth":193,"text":139436},{"id":139462,"depth":193,"text":139463,"children":141139},[141140,141141,141142,141143,141144],{"id":139466,"depth":235,"text":139467},{"id":139479,"depth":235,"text":139480},{"id":139503,"depth":235,"text":139504},{"id":139525,"depth":235,"text":139526},{"id":139597,"depth":235,"text":139598},{"id":139723,"depth":193,"text":139724,"children":141146},[141147,141148,141149,141150,141152],{"id":139727,"depth":235,"text":139728},{"id":139734,"depth":235,"text":139735},{"id":139906,"depth":235,"text":139907},{"id":140447,"depth":235,"text":141151},"15.4.4 nav导航模块制作",{"id":140745,"depth":235,"text":140746},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139408,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141159,"title":141160,"body":141161,"description":1797,"extension":1798,"meta":143563,"navigation":1800,"path":143564,"seo":143565,"stem":143566,"__hash__":143567},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141162,"toc":143540},[141163,141166,141170,141174,141186,141189,141192,141195,141206,141208,141232,141234,141258,141263,141266,141268,141304,141306,141342,141345,141350,141353,141356,141359,141389,141396,141399,141409,141411,141445,141448,141482,141488,141505,141507,141543,141545,141581,141586,141611,141613,141639,141641,141665,141672,141675,141739,141741,141783,141785,141825,141832,141837,141839,141869,141871,141901,141905,141908,141915,141927,141929,141955,141957,141981,141984,141986,142010,142016,142026,142028,142058,142060,142090,142097,142138,142140,142176,142178,142214,142218,142221,142224,142227,142233,142238,142241,142264,142267,142291,142294,142318,142323,142326,142329,142332,142335,142338,142412,142414,142444,142446,142476,142479,142482,142514,142518,142522,142536,142545,142548,142553,142555,142649,142651,142745,142768,142770,142794,142796,142820,142827,142830,142840,142842,142866,142871,142879,142881,142911,142916,142956,142958,142984,142986,143012,143016,143019,143024,143027,143031,143039,143046,143054,143056,143086,143088,143118,143126,143129,143132,143134,143164,143166,143196,143199,143204,143206,143230,143232,143256,143259,143344,143346,143370,143372,143396,143400,143402,143426,143428,143462,143466,143480,143483,143488,143491,143496,143499,143529,143537],[10,141164,141160],{"id":141165},"_16-品优购项目下篇-主体与页面开发",[14,141167,141169],{"id":141168},"_161-项目主体模块制作","16.1 项目主体模块制作",[19,141171,141173],{"id":141172},"_1611-首页制作","16.1.1 首页制作",[24,141175,141176,141178,141179,141181,141182,141185],{},[31,141177,103738],{}," 主体模块是 ",[31,141180,75740],{}," 里面专有的，注意需要新的样式文件 ",[31,141183,141184],{},"index.css，"," 就不要写在common.css中了",[83,141187],{"style":85,"src":141188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[83,141190],{"style":85,"src":141191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[24,141193,141194],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[42,141196,141197,141200,141203],{},[45,141198,141199],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[45,141201,141202],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[45,141204,141205],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[24,141207,139827],{},[140,141209,141210],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,141211,141212,141218,141228],{"__ignoreMap":145},[149,141213,141214,141216],{"class":151,"line":152},[149,141215,1554],{"class":162},[149,141217,304],{"class":155},[149,141219,141220,141222,141224,141226],{"class":151,"line":193},[149,141221,1561],{"class":309},[149,141223,313],{"class":155},[149,141225,1566],{"class":309},[149,141227,841],{"class":155},[149,141229,141230],{"class":151,"line":235},[149,141231,355],{"class":155},[24,141233,139867],{},[140,141235,141236],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,141237,141238,141244,141254],{"__ignoreMap":145},[149,141239,141240,141242],{"class":151,"line":152},[149,141241,1554],{"class":162},[149,141243,304],{"class":155},[149,141245,141246,141248,141250,141252],{"class":151,"line":193},[149,141247,1561],{"class":309},[149,141249,313],{"class":155},[149,141251,1566],{"class":309},[149,141253,841],{"class":155},[149,141255,141256],{"class":151,"line":235},[149,141257,355],{"class":155},[125,141259,141260],{},[45,141261,141262],{},"左侧focus模块制作",[83,141264],{"style":85,"src":141265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[24,141267,139827],{},[140,141269,141270],{"className":286,"code":129548,"language":288,"meta":145,"style":145},[48,141271,141272,141280,141290,141300],{"__ignoreMap":145},[149,141273,141274,141276,141278],{"class":151,"line":152},[149,141275,504],{"class":159},[149,141277,63589],{"class":162},[149,141279,304],{"class":155},[149,141281,141282,141284,141286,141288],{"class":151,"line":193},[149,141283,129563],{"class":309},[149,141285,313],{"class":155},[149,141287,56584],{"class":309},[149,141289,841],{"class":155},[149,141291,141292,141294,141296,141298],{"class":151,"line":235},[149,141293,72482],{"class":309},[149,141295,313],{"class":155},[149,141297,56432],{"class":309},[149,141299,841],{"class":155},[149,141301,141302],{"class":151,"line":340},[149,141303,355],{"class":155},[24,141305,139867],{},[140,141307,141308],{"className":286,"code":129548,"language":288,"meta":145,"style":145},[48,141309,141310,141318,141328,141338],{"__ignoreMap":145},[149,141311,141312,141314,141316],{"class":151,"line":152},[149,141313,504],{"class":159},[149,141315,63589],{"class":162},[149,141317,304],{"class":155},[149,141319,141320,141322,141324,141326],{"class":151,"line":193},[149,141321,129563],{"class":309},[149,141323,313],{"class":155},[149,141325,56584],{"class":309},[149,141327,841],{"class":155},[149,141329,141330,141332,141334,141336],{"class":151,"line":235},[149,141331,72482],{"class":309},[149,141333,313],{"class":155},[149,141335,56432],{"class":309},[149,141337,841],{"class":155},[149,141339,141340],{"class":151,"line":340},[149,141341,355],{"class":155},[24,141343,141344],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[125,141346,141347],{"start":193},[45,141348,141349],{},"右侧newsflash模块制作",[83,141351],{"style":85,"src":141352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[24,141354,141355],{},"右侧的模块 分为上中下三个盒子",[24,141357,141358],{},"结构代码：",[140,141360,141361],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,141362,141363],{"__ignoreMap":145},[149,141364,141365,141367,141369,141371,141373,141375,141377,141379,141381,141383,141385,141387],{"class":151,"line":152},[149,141366,156],{"class":155},[149,141368,83],{"class":159},[149,141370,163],{"class":162},[149,141372,166],{"class":155},[149,141374,262],{"class":169},[149,141376,265],{"class":162},[149,141378,166],{"class":155},[149,141380,270],{"class":169},[149,141382,273],{"class":162},[149,141384,166],{"class":155},[149,141386,278],{"class":169},[149,141388,190],{"class":155},[24,141390,141391,141392,141395],{},"1 号盒子为 ",[48,141393,141394],{},"news"," 新闻模块 高度为 165px",[83,141397],{"style":85,"src":141398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[24,141400,141401,141402,141405,141406],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[48,141403,141404],{},"news-hd","，下面是 ",[48,141407,141408],{},"news-bd",[24,141410,141358],{},[140,141412,141413],{"className":142,"code":132325,"language":144,"meta":145,"style":145},[48,141414,141415,141419,141433,141437],{"__ignoreMap":145},[149,141416,141417],{"class":151,"line":152},[149,141418,132332],{"class":295},[149,141420,141421,141423,141425,141427,141429,141431],{"class":151,"line":193},[149,141422,156],{"class":155},[149,141424,301],{"class":159},[149,141426,55184],{"class":162},[149,141428,166],{"class":155},[149,141430,132345],{"class":169},[149,141432,190],{"class":155},[149,141434,141435],{"class":151,"line":235},[149,141436,132352],{"class":155},[149,141438,141439,141441,141443],{"class":151,"line":340},[149,141440,665],{"class":155},[149,141442,301],{"class":159},[149,141444,190],{"class":155},[24,141446,141447],{},"样式代码：",[140,141449,141450],{"className":142,"code":132325,"language":144,"meta":145,"style":145},[48,141451,141452,141456,141470,141474],{"__ignoreMap":145},[149,141453,141454],{"class":151,"line":152},[149,141455,132332],{"class":295},[149,141457,141458,141460,141462,141464,141466,141468],{"class":151,"line":193},[149,141459,156],{"class":155},[149,141461,301],{"class":159},[149,141463,55184],{"class":162},[149,141465,166],{"class":155},[149,141467,132345],{"class":169},[149,141469,190],{"class":155},[149,141471,141472],{"class":151,"line":235},[149,141473,132352],{"class":155},[149,141475,141476,141478,141480],{"class":151,"line":340},[149,141477,665],{"class":155},[149,141479,301],{"class":159},[149,141481,190],{"class":155},[24,141483,141484,141485,141487],{},"上面是",[48,141486,141404],{},"，设置高度是 33px，设置下边框",[42,141489,141490,141496],{},[45,141491,141492,141493,141495],{},"里面放一个",[48,141494,24619],{}," 标题",[45,141497,141498,141499,141501,141502,141504],{},"放一个a",[48,141500,104373],{},"，内容是 更多，然后让 ",[48,141503,2102],{}," 进行右浮动，三角用伪元素设置字体图标就好",[24,141506,141358],{},[140,141508,141509],{"className":286,"code":139830,"language":288,"meta":145,"style":145},[48,141510,141511,141519,141529,141539],{"__ignoreMap":145},[149,141512,141513,141515,141517],{"class":151,"line":152},[149,141514,301],{"class":159},[149,141516,1370],{"class":162},[149,141518,304],{"class":155},[149,141520,141521,141523,141525,141527],{"class":151,"line":193},[149,141522,1377],{"class":309},[149,141524,313],{"class":155},[149,141526,1382],{"class":169},[149,141528,841],{"class":155},[149,141530,141531,141533,141535,141537],{"class":151,"line":235},[149,141532,1389],{"class":309},[149,141534,313],{"class":155},[149,141536,1394],{"class":309},[149,141538,841],{"class":155},[149,141540,141541],{"class":151,"line":340},[149,141542,355],{"class":155},[24,141544,141447],{},[140,141546,141547],{"className":286,"code":139830,"language":288,"meta":145,"style":145},[48,141548,141549,141557,141567,141577],{"__ignoreMap":145},[149,141550,141551,141553,141555],{"class":151,"line":152},[149,141552,301],{"class":159},[149,141554,1370],{"class":162},[149,141556,304],{"class":155},[149,141558,141559,141561,141563,141565],{"class":151,"line":193},[149,141560,1377],{"class":309},[149,141562,313],{"class":155},[149,141564,1382],{"class":169},[149,141566,841],{"class":155},[149,141568,141569,141571,141573,141575],{"class":151,"line":235},[149,141570,1389],{"class":309},[149,141572,313],{"class":155},[149,141574,1394],{"class":309},[149,141576,841],{"class":155},[149,141578,141579],{"class":151,"line":340},[149,141580,355],{"class":155},[24,141582,141583,141584],{},"下面是",[48,141585,141408],{},[42,141587,141588,141596],{},[45,141589,141590,141591,102698,141593,141595],{},"里面包含 ",[48,141592,42],{},[48,141594,45],{}," 还有链接",[45,141597,141068,141598,141600,141601,141603,141604,141607,141608],{},[48,141599,45],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[48,141602,132886],{}," 2.设置 ",[48,141605,141606],{},"white-space: nowrap;"," 3. 设置 ",[48,141609,141610],{},"text-overflow: ellipsis;",[24,141612,141358],{},[140,141614,141616],{"className":286,"code":141615,"language":288,"meta":145,"style":145},"div {\n  overflow: hidden;\n}\n",[48,141617,141618,141624,141635],{"__ignoreMap":145},[149,141619,141620,141622],{"class":151,"line":152},[149,141621,301],{"class":159},[149,141623,304],{"class":155},[149,141625,141626,141629,141631,141633],{"class":151,"line":193},[149,141627,141628],{"class":309},"  overflow",[149,141630,313],{"class":155},[149,141632,63403],{"class":309},[149,141634,841],{"class":155},[149,141636,141637],{"class":151,"line":235},[149,141638,355],{"class":155},[24,141640,141447],{},[140,141642,141643],{"className":286,"code":141615,"language":288,"meta":145,"style":145},[48,141644,141645,141651,141661],{"__ignoreMap":145},[149,141646,141647,141649],{"class":151,"line":152},[149,141648,301],{"class":159},[149,141650,304],{"class":155},[149,141652,141653,141655,141657,141659],{"class":151,"line":193},[149,141654,141628],{"class":309},[149,141656,313],{"class":155},[149,141658,63403],{"class":309},[149,141660,841],{"class":155},[149,141662,141663],{"class":151,"line":235},[149,141664,355],{"class":155},[24,141666,141667,141668,141671],{},"2 号盒子为 ",[48,141669,141670],{},"lifeservice"," 生活服务模块 高度为 209px",[83,141673],{"style":85,"src":141674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[42,141676,141677,141680,141690,141714,141725],{},[45,141678,141679],{},"设置边框（左右下边框）",[45,141681,141682,141683,141686,141687,141689],{},"里面的内容 是 ",[48,141684,141685],{},"ul > 12*li","，给",[48,141688,45],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[45,141691,141692,141693],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[42,141694,141695,141700,141709],{},[45,141696,141697,141699],{},[48,141698,141670],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[45,141701,141702,141703,141705,141706,141708],{},"可以让 ",[48,141704,141670],{}," 里面的 ",[48,141707,42],{}," 宽度为 252，就可以装的下 4 个 小 li",[45,141710,141711,141713],{},[48,141712,141670],{}," 盒子 overflow 隐藏多余的部分就可以了",[45,141715,118146,141716,141718,141719,141721,141722,141724],{},[48,141717,45],{}," 里面放一个 ",[48,141720,2304],{},"（里面放图标），下面的文本用 ",[48,141723,24],{}," 标签包裹",[45,141726,140488,141727,141729,141730,141732,141733,140522,141735,141738],{},[48,141728,2304],{}," 设置 24px宽和28px的高（注意 ",[48,141731,2304],{}," 是行内元素， 转成行内块），给 ",[48,141734,45],{},[48,141736,141737],{},"text-align:center"," 让里面内容居中显示",[24,141740,141358],{},[140,141742,141744],{"className":286,"code":141743,"language":288,"meta":145,"style":145},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[48,141745,141746,141764,141769,141779],{"__ignoreMap":145},[149,141747,141748,141750,141752,141754,141756,141758,141760,141762],{"class":151,"line":152},[149,141749,149],{"class":159},[149,141751,329],{"class":155},[149,141753,2102],{"class":159},[149,141755,329],{"class":155},[149,141757,25262],{"class":159},[149,141759,329],{"class":155},[149,141761,31],{"class":159},[149,141763,304],{"class":155},[149,141765,141766],{"class":151,"line":193},[149,141767,141768],{"class":295},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[149,141770,141771,141773,141775,141777],{"class":151,"line":235},[149,141772,1389],{"class":309},[149,141774,313],{"class":155},[149,141776,129902],{"class":309},[149,141778,841],{"class":155},[149,141780,141781],{"class":151,"line":340},[149,141782,355],{"class":155},[24,141784,141447],{},[140,141786,141787],{"className":286,"code":141743,"language":288,"meta":145,"style":145},[48,141788,141789,141807,141811,141821],{"__ignoreMap":145},[149,141790,141791,141793,141795,141797,141799,141801,141803,141805],{"class":151,"line":152},[149,141792,149],{"class":159},[149,141794,329],{"class":155},[149,141796,2102],{"class":159},[149,141798,329],{"class":155},[149,141800,25262],{"class":159},[149,141802,329],{"class":155},[149,141804,31],{"class":159},[149,141806,304],{"class":155},[149,141808,141809],{"class":151,"line":193},[149,141810,141768],{"class":295},[149,141812,141813,141815,141817,141819],{"class":151,"line":235},[149,141814,1389],{"class":309},[149,141816,313],{"class":155},[149,141818,129902],{"class":309},[149,141820,841],{"class":155},[149,141822,141823],{"class":151,"line":340},[149,141824,355],{"class":155},[24,141826,141827,141828,141831],{},"3 号盒子为 ",[48,141829,141830],{},"bargain"," 特价商品",[42,141833,141834],{},[45,141835,141836],{},"这个比较简单，直接插入一张图片即可",[24,141838,141358],{},[140,141840,141841],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,141842,141843],{"__ignoreMap":145},[149,141844,141845,141847,141849,141851,141853,141855,141857,141859,141861,141863,141865,141867],{"class":151,"line":152},[149,141846,156],{"class":155},[149,141848,83],{"class":159},[149,141850,163],{"class":162},[149,141852,166],{"class":155},[149,141854,262],{"class":169},[149,141856,265],{"class":162},[149,141858,166],{"class":155},[149,141860,270],{"class":169},[149,141862,273],{"class":162},[149,141864,166],{"class":155},[149,141866,278],{"class":169},[149,141868,190],{"class":155},[24,141870,141447],{},[140,141872,141873],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,141874,141875],{"__ignoreMap":145},[149,141876,141877,141879,141881,141883,141885,141887,141889,141891,141893,141895,141897,141899],{"class":151,"line":152},[149,141878,156],{"class":155},[149,141880,83],{"class":159},[149,141882,163],{"class":162},[149,141884,166],{"class":155},[149,141886,262],{"class":169},[149,141888,265],{"class":162},[149,141890,166],{"class":155},[149,141892,270],{"class":169},[149,141894,273],{"class":162},[149,141896,166],{"class":155},[149,141898,278],{"class":169},[149,141900,190],{"class":155},[19,141902,141904],{"id":141903},"_1612-推荐模块制作","16.1.2 推荐模块制作",[83,141906],{"style":85,"src":141907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[24,141909,141910,141911,141914],{},"大盒子 ",[48,141912,141913],{},"recom"," 推荐模块 recommend",[42,141916,141917],{},[45,141918,141919,141920,141922,141923,141926],{},"给这个 ",[48,141921,141913],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[48,141924,141925],{},"#ebebeb","），设置距离上边 12px",[24,141928,141358],{},[140,141930,141932],{"className":286,"code":141931,"language":288,"meta":145,"style":145},"div {\n  background-color: #f0f0f0;\n}\n",[48,141933,141934,141940,141951],{"__ignoreMap":145},[149,141935,141936,141938],{"class":151,"line":152},[149,141937,301],{"class":159},[149,141939,304],{"class":155},[149,141941,141942,141944,141946,141949],{"class":151,"line":193},[149,141943,72562],{"class":309},[149,141945,313],{"class":155},[149,141947,141948],{"class":309},"#f0f0f0",[149,141950,841],{"class":155},[149,141952,141953],{"class":151,"line":235},[149,141954,355],{"class":155},[24,141956,141447],{},[140,141958,141959],{"className":286,"code":141931,"language":288,"meta":145,"style":145},[48,141960,141961,141967,141977],{"__ignoreMap":145},[149,141962,141963,141965],{"class":151,"line":152},[149,141964,301],{"class":159},[149,141966,304],{"class":155},[149,141968,141969,141971,141973,141975],{"class":151,"line":193},[149,141970,72562],{"class":309},[149,141972,313],{"class":155},[149,141974,141948],{"class":309},[149,141976,841],{"class":155},[149,141978,141979],{"class":151,"line":235},[149,141980,355],{"class":155},[24,141982,141983],{},"里面包含 2 个盒子， 浮动即可",[24,141985,141358],{},[140,141987,141988],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,141989,141990,141996,142006],{"__ignoreMap":145},[149,141991,141992,141994],{"class":151,"line":152},[149,141993,1554],{"class":162},[149,141995,304],{"class":155},[149,141997,141998,142000,142002,142004],{"class":151,"line":193},[149,141999,1561],{"class":309},[149,142001,313],{"class":155},[149,142003,1566],{"class":309},[149,142005,841],{"class":155},[149,142007,142008],{"class":151,"line":235},[149,142009,355],{"class":155},[24,142011,142012,142013],{},"1 号盒子 ",[48,142014,142015],{},"recom_hd",[42,142017,142018,142021],{},[45,142019,142020],{},"设置宽度205px，高度163px",[45,142022,141492,142023,142025],{},[48,142024,83],{},"标签，插入图片即可",[24,142027,141358],{},[140,142029,142030],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,142031,142032],{"__ignoreMap":145},[149,142033,142034,142036,142038,142040,142042,142044,142046,142048,142050,142052,142054,142056],{"class":151,"line":152},[149,142035,156],{"class":155},[149,142037,83],{"class":159},[149,142039,163],{"class":162},[149,142041,166],{"class":155},[149,142043,262],{"class":169},[149,142045,265],{"class":162},[149,142047,166],{"class":155},[149,142049,270],{"class":169},[149,142051,273],{"class":162},[149,142053,166],{"class":155},[149,142055,278],{"class":169},[149,142057,190],{"class":155},[24,142059,141447],{},[140,142061,142062],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,142063,142064],{"__ignoreMap":145},[149,142065,142066,142068,142070,142072,142074,142076,142078,142080,142082,142084,142086,142088],{"class":151,"line":152},[149,142067,156],{"class":155},[149,142069,83],{"class":159},[149,142071,163],{"class":162},[149,142073,166],{"class":155},[149,142075,262],{"class":169},[149,142077,265],{"class":162},[149,142079,166],{"class":155},[149,142081,270],{"class":169},[149,142083,273],{"class":162},[149,142085,166],{"class":155},[149,142087,278],{"class":169},[149,142089,190],{"class":155},[24,142091,142092,142093,142096],{},"2 号盒子 ",[48,142094,142095],{},"recom_bd"," ，注意里面的小竖线",[42,142098,142099,142110,142113,142118,142123],{},[45,142100,142101,142102,142104,142105,142107,142108],{},"右侧结构里面放 ",[48,142103,42],{}," 包含 4个 ",[48,142106,45],{},"，每个li里面包含一个",[48,142109,83],{},[45,142111,142112],{},"直接利用切片工具把里面的内容当成一张图片",[45,142114,140488,142115,142117],{},[48,142116,45],{}," 设置浮动",[45,142119,140488,142120,142122],{},[48,142121,83],{}," 设置宽高，宽度 248px，高度 163px",[45,142124,142125,142126,141686,142129,142131,142132,142134,142135],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[48,142127,142128],{},"top 10px",[48,142130,45],{},"设置相对定位（注意，最后一个",[48,142133,45],{},"不用设置伪元素），可以利用 ",[48,142136,142137],{},"nth-child(-n+3){...}",[24,142139,141358],{},[140,142141,142142],{"className":286,"code":139830,"language":288,"meta":145,"style":145},[48,142143,142144,142152,142162,142172],{"__ignoreMap":145},[149,142145,142146,142148,142150],{"class":151,"line":152},[149,142147,301],{"class":159},[149,142149,1370],{"class":162},[149,142151,304],{"class":155},[149,142153,142154,142156,142158,142160],{"class":151,"line":193},[149,142155,1377],{"class":309},[149,142157,313],{"class":155},[149,142159,1382],{"class":169},[149,142161,841],{"class":155},[149,142163,142164,142166,142168,142170],{"class":151,"line":235},[149,142165,1389],{"class":309},[149,142167,313],{"class":155},[149,142169,1394],{"class":309},[149,142171,841],{"class":155},[149,142173,142174],{"class":151,"line":340},[149,142175,355],{"class":155},[24,142177,141447],{},[140,142179,142180],{"className":286,"code":139830,"language":288,"meta":145,"style":145},[48,142181,142182,142190,142200,142210],{"__ignoreMap":145},[149,142183,142184,142186,142188],{"class":151,"line":152},[149,142185,301],{"class":159},[149,142187,1370],{"class":162},[149,142189,304],{"class":155},[149,142191,142192,142194,142196,142198],{"class":151,"line":193},[149,142193,1377],{"class":309},[149,142195,313],{"class":155},[149,142197,1382],{"class":169},[149,142199,841],{"class":155},[149,142201,142202,142204,142206,142208],{"class":151,"line":235},[149,142203,1389],{"class":309},[149,142205,313],{"class":155},[149,142207,1394],{"class":309},[149,142209,841],{"class":155},[149,142211,142212],{"class":151,"line":340},[149,142213,355],{"class":155},[19,142215,142217],{"id":142216},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[83,142219],{"style":85,"src":142220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[24,142222,142223],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[24,142225,142226],{},"第一楼是家用电器模块： 里面包含两个盒子",[24,142228,142229,142232],{},[48,142230,142231],{},"box_hd"," 制作",[24,142234,142012,142235,142237],{},[48,142236,142231],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[83,142239],{"style":85,"src":142240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[42,142242,142243,142248,142253,142256],{},[45,142244,142245,142247],{},[48,142246,142231],{}," 给 30px 的高度，2个像素的下边框",[45,142249,142250,142251],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[48,142252,140499],{},[45,142254,142255],{},"左侧盒左浮动，右侧盒子右浮动",[45,142257,142258,142260,142261,142263],{},[48,142259,2102],{},"标签之间的距离用左右的",[48,142262,32589],{},"撑开即可",[24,142265,142266],{},"结构代码",[140,142268,142269],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,142270,142271,142277,142287],{"__ignoreMap":145},[149,142272,142273,142275],{"class":151,"line":152},[149,142274,1554],{"class":162},[149,142276,304],{"class":155},[149,142278,142279,142281,142283,142285],{"class":151,"line":193},[149,142280,1561],{"class":309},[149,142282,313],{"class":155},[149,142284,1566],{"class":309},[149,142286,841],{"class":155},[149,142288,142289],{"class":151,"line":235},[149,142290,355],{"class":155},[24,142292,142293],{},"样式代码",[140,142295,142296],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,142297,142298,142304,142314],{"__ignoreMap":145},[149,142299,142300,142302],{"class":151,"line":152},[149,142301,1554],{"class":162},[149,142303,304],{"class":155},[149,142305,142306,142308,142310,142312],{"class":151,"line":193},[149,142307,1561],{"class":309},[149,142309,313],{"class":155},[149,142311,1566],{"class":309},[149,142313,841],{"class":155},[149,142315,142316],{"class":151,"line":235},[149,142317,355],{"class":155},[24,142319,142320,142232],{},[48,142321,142322],{},"box_bd",[24,142324,142325],{},"2 号盒子 box_bd，不要给高度",[83,142327],{"style":85,"src":142328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[24,142330,142331],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[24,142333,142334],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[24,142336,142337],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[42,142339,142340,142352,142368],{},[45,142341,142342,142344,142345,142348,142349,142351],{},[48,142343,142322],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[48,142346,142347],{},"tab_content","，在",[48,142350,142347],{}," 里面包裹tab选项卡对应的内容",[45,142353,142354,142355,142358,142359,142361,142362,142364,142365,142367],{},"内容被一个大盒子包裹（",[48,142356,142357],{},"tab_list_item","），里面是 ",[48,142360,42],{}," 包裹 5个 ",[48,142363,45],{},"，每个",[48,142366,45],{},"设置对应的宽度，然后设置浮动",[45,142369,142370,142371,142373,142374,142376,142377],{},"而这5个",[48,142372,45],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[48,142375,45],{},"设置",[42,142378,142379,142397,142400],{},[45,142380,142381,142382,142384,142385,142387,142388,142390,142391,142393,142394,142396],{},"第一个小 ",[48,142383,45],{}," 分为上下结构，上面是 ",[48,142386,42],{}," 包裹 ",[48,142389,45],{}," ，",[48,142392,45],{},"里面包裹 ",[48,142395,2102],{},"，下面插入一张图片",[45,142398,142399],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[45,142401,142402,142403,142405,142406,142408,142409,142411],{},"后面的小 ",[48,142404,45],{}," 里面先放一个",[48,142407,2102],{},"标签，然后在",[48,142410,2102],{},"标签里面插入图片即可",[24,142413,142266],{},[140,142415,142416],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,142417,142418],{"__ignoreMap":145},[149,142419,142420,142422,142424,142426,142428,142430,142432,142434,142436,142438,142440,142442],{"class":151,"line":152},[149,142421,156],{"class":155},[149,142423,83],{"class":159},[149,142425,163],{"class":162},[149,142427,166],{"class":155},[149,142429,262],{"class":169},[149,142431,265],{"class":162},[149,142433,166],{"class":155},[149,142435,270],{"class":169},[149,142437,273],{"class":162},[149,142439,166],{"class":155},[149,142441,278],{"class":169},[149,142443,190],{"class":155},[24,142445,142293],{},[140,142447,142448],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,142449,142450],{"__ignoreMap":145},[149,142451,142452,142454,142456,142458,142460,142462,142464,142466,142468,142470,142472,142474],{"class":151,"line":152},[149,142453,156],{"class":155},[149,142455,83],{"class":159},[149,142457,163],{"class":162},[149,142459,166],{"class":155},[149,142461,262],{"class":169},[149,142463,265],{"class":162},[149,142465,166],{"class":155},[149,142467,270],{"class":169},[149,142469,273],{"class":162},[149,142471,166],{"class":155},[149,142473,278],{"class":169},[149,142475,190],{"class":155},[24,142477,142478],{},"tab栏切换需求！！！！！！介绍：",[83,142480],{"style":85,"src":142481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[42,142483,142484,142492,142498,142501],{},[45,142485,142486,142489,142490],{},[48,142487,142488],{},"tab","栏的布局是 ",[48,142491,140499],{},[45,142493,142494,142495,142497],{},"有多少个",[48,142496,142488],{},"选项卡，那么对应就有多少个内容",[45,142499,142500],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[45,142502,142503,142504,142507,142508,142510,142511,142513],{},"等后面我们学习了",[48,142505,142506],{},"js","之后，我们就会配合",[48,142509,142506],{},"来实现，",[48,142512,142488],{},"栏的切换",[14,142515,142517],{"id":142516},"_162-列表制作","16.2 列表制作",[19,142519,142521],{"id":142520},"_1621-准备工作","16.2.1 准备工作",[42,142523,142524,142527,142530,142533],{},[45,142525,142526],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[45,142528,142529],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[45,142531,142532],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[45,142534,142535],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[19,142537,142539,142540,102698,142542,142544],{"id":142538},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[48,142541,133225],{},[48,142543,55411],{}," 修改",[83,142546],{"style":85,"src":142547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[42,142549,142550],{},[45,142551,142552],{},"秒杀盒子 sk（ second kill ） 定位即可",[24,142554,141358],{},[140,142556,142557],{"className":286,"code":133652,"language":288,"meta":145,"style":145},[48,142558,142559,142563,142577,142581,142595,142599,142613,142617,142631,142635],{"__ignoreMap":145},[149,142560,142561],{"class":151,"line":152},[149,142562,133659],{"class":295},[149,142564,142565,142567,142569,142571,142573,142575],{"class":151,"line":193},[149,142566,133664],{"class":162},[149,142568,81488],{"class":155},[149,142570,130584],{"class":309},[149,142572,313],{"class":155},[149,142574,133673],{"class":309},[149,142576,131153],{"class":155},[149,142578,142579],{"class":151,"line":235},[149,142580,133680],{"class":295},[149,142582,142583,142585,142587,142589,142591,142593],{"class":151,"line":340},[149,142584,133685],{"class":162},[149,142586,81488],{"class":155},[149,142588,130584],{"class":309},[149,142590,313],{"class":155},[149,142592,56459],{"class":309},[149,142594,131153],{"class":155},[149,142596,142597],{"class":151,"line":346},[149,142598,133700],{"class":295},[149,142600,142601,142603,142605,142607,142609,142611],{"class":151,"line":352},[149,142602,133705],{"class":162},[149,142604,81488],{"class":155},[149,142606,130584],{"class":309},[149,142608,313],{"class":155},[149,142610,56526],{"class":309},[149,142612,131153],{"class":155},[149,142614,142615],{"class":151,"line":1021},[149,142616,133720],{"class":295},[149,142618,142619,142621,142623,142625,142627,142629],{"class":151,"line":1035},[149,142620,133725],{"class":162},[149,142622,81488],{"class":155},[149,142624,130584],{"class":309},[149,142626,313],{"class":155},[149,142628,87914],{"class":309},[149,142630,131153],{"class":155},[149,142632,142633],{"class":151,"line":1054},[149,142634,133740],{"class":295},[149,142636,142637,142639,142641,142643,142645,142647],{"class":151,"line":1072},[149,142638,133745],{"class":162},[149,142640,81488],{"class":155},[149,142642,130584],{"class":309},[149,142644,313],{"class":155},[149,142646,133754],{"class":309},[149,142648,131153],{"class":155},[24,142650,141447],{},[140,142652,142653],{"className":286,"code":133652,"language":288,"meta":145,"style":145},[48,142654,142655,142659,142673,142677,142691,142695,142709,142713,142727,142731],{"__ignoreMap":145},[149,142656,142657],{"class":151,"line":152},[149,142658,133659],{"class":295},[149,142660,142661,142663,142665,142667,142669,142671],{"class":151,"line":193},[149,142662,133664],{"class":162},[149,142664,81488],{"class":155},[149,142666,130584],{"class":309},[149,142668,313],{"class":155},[149,142670,133673],{"class":309},[149,142672,131153],{"class":155},[149,142674,142675],{"class":151,"line":235},[149,142676,133680],{"class":295},[149,142678,142679,142681,142683,142685,142687,142689],{"class":151,"line":340},[149,142680,133685],{"class":162},[149,142682,81488],{"class":155},[149,142684,130584],{"class":309},[149,142686,313],{"class":155},[149,142688,56459],{"class":309},[149,142690,131153],{"class":155},[149,142692,142693],{"class":151,"line":346},[149,142694,133700],{"class":295},[149,142696,142697,142699,142701,142703,142705,142707],{"class":151,"line":352},[149,142698,133705],{"class":162},[149,142700,81488],{"class":155},[149,142702,130584],{"class":309},[149,142704,313],{"class":155},[149,142706,56526],{"class":309},[149,142708,131153],{"class":155},[149,142710,142711],{"class":151,"line":1021},[149,142712,133720],{"class":295},[149,142714,142715,142717,142719,142721,142723,142725],{"class":151,"line":1035},[149,142716,133725],{"class":162},[149,142718,81488],{"class":155},[149,142720,130584],{"class":309},[149,142722,313],{"class":155},[149,142724,87914],{"class":309},[149,142726,131153],{"class":155},[149,142728,142729],{"class":151,"line":1054},[149,142730,133740],{"class":295},[149,142732,142733,142735,142737,142739,142741,142743],{"class":151,"line":1072},[149,142734,133745],{"class":162},[149,142736,81488],{"class":155},[149,142738,130584],{"class":309},[149,142740,313],{"class":155},[149,142742,133754],{"class":309},[149,142744,131153],{"class":155},[42,142746,142747,142758],{},[45,142748,142749,142750,142753,142754,102698,142756],{},"1 号盒子左侧浮动 ",[48,142751,142752],{},"sk_list"," 里面包含 ",[48,142755,42],{},[48,142757,45],{},[45,142759,142760,142761,142753,142764,102698,142766],{},"2 号盒子左侧浮动 ",[48,142762,142763],{},"sk_con",[48,142765,42],{},[48,142767,45],{},[24,142769,141358],{},[140,142771,142772],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,142773,142774,142780,142790],{"__ignoreMap":145},[149,142775,142776,142778],{"class":151,"line":152},[149,142777,1554],{"class":162},[149,142779,304],{"class":155},[149,142781,142782,142784,142786,142788],{"class":151,"line":193},[149,142783,1561],{"class":309},[149,142785,313],{"class":155},[149,142787,1566],{"class":309},[149,142789,841],{"class":155},[149,142791,142792],{"class":151,"line":235},[149,142793,355],{"class":155},[24,142795,141447],{},[140,142797,142798],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,142799,142800,142806,142816],{"__ignoreMap":145},[149,142801,142802,142804],{"class":151,"line":152},[149,142803,1554],{"class":162},[149,142805,304],{"class":155},[149,142807,142808,142810,142812,142814],{"class":151,"line":193},[149,142809,1561],{"class":309},[149,142811,313],{"class":155},[149,142813,1566],{"class":309},[149,142815,841],{"class":155},[149,142817,142818],{"class":151,"line":235},[149,142819,355],{"class":155},[19,142821,142823,142824],{"id":142822},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[48,142825,142826],{},"sk_container",[83,142828],{"style":85,"src":142829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[42,142831,142832,142837],{},[45,142833,142012,142834,142836],{},[48,142835,142826],{}," 给宽度 1200，不要给高度",[45,142838,142839],{},"一定不要忘记清除浮动",[24,142841,141358],{},[140,142843,142844],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,142845,142846,142852,142862],{"__ignoreMap":145},[149,142847,142848,142850],{"class":151,"line":152},[149,142849,1554],{"class":162},[149,142851,304],{"class":155},[149,142853,142854,142856,142858,142860],{"class":151,"line":193},[149,142855,1561],{"class":309},[149,142857,313],{"class":155},[149,142859,1566],{"class":309},[149,142861,841],{"class":155},[149,142863,142864],{"class":151,"line":235},[149,142865,355],{"class":155},[125,142867,142868],{},[45,142869,142870],{},"sk_hd制作",[42,142872,142873],{},[45,142874,142092,142875,142878],{},[48,142876,142877],{},"sk_hd"," ，插入图片即可",[24,142880,141358],{},[140,142882,142883],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,142884,142885],{"__ignoreMap":145},[149,142886,142887,142889,142891,142893,142895,142897,142899,142901,142903,142905,142907,142909],{"class":151,"line":152},[149,142888,156],{"class":155},[149,142890,83],{"class":159},[149,142892,163],{"class":162},[149,142894,166],{"class":155},[149,142896,262],{"class":169},[149,142898,265],{"class":162},[149,142900,166],{"class":155},[149,142902,270],{"class":169},[149,142904,273],{"class":162},[149,142906,166],{"class":155},[149,142908,278],{"class":169},[149,142910,190],{"class":155},[125,142912,142913],{"start":193},[45,142914,142915],{},"sk_bd制作",[42,142917,142918],{},[45,142919,142920,142921,142924,142925,102698,142927,142929],{},"3 号盒子 ",[48,142922,142923],{},"sk_bd"," ，里面包含很多的 ",[48,142926,42],{},[48,142928,45],{},[42,142930,142931,142940],{},[45,142932,142933,142934,142936,142937,142939],{},"当鼠标移入到 ",[48,142935,45],{}," 上面的时候显示红色的边框，在这里先给 ",[48,142938,45],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[45,142941,142942,142943,142945,142946,142948,142949,142952,142953,142955],{},"由于给每个 ",[48,142944,45],{}," 都设置了外边距，导致一行的最后一个 ",[48,142947,45],{}," 掉了下来，在这里我们利用 ",[48,142950,142951],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[48,142954,45],{},"，去掉外边距就好了",[24,142957,141358],{},[140,142959,142960],{"className":286,"code":140177,"language":288,"meta":145,"style":145},[48,142961,142962,142968,142980],{"__ignoreMap":145},[149,142963,142964,142966],{"class":151,"line":152},[149,142965,301],{"class":159},[149,142967,304],{"class":155},[149,142969,142970,142972,142974,142976,142978],{"class":151,"line":193},[149,142971,72154],{"class":309},[149,142973,313],{"class":155},[149,142975,2056],{"class":309},[149,142977,53257],{"class":309},[149,142979,841],{"class":155},[149,142981,142982],{"class":151,"line":235},[149,142983,355],{"class":155},[24,142985,141447],{},[140,142987,142988],{"className":286,"code":140177,"language":288,"meta":145,"style":145},[48,142989,142990,142996,143008],{"__ignoreMap":145},[149,142991,142992,142994],{"class":151,"line":152},[149,142993,301],{"class":159},[149,142995,304],{"class":155},[149,142997,142998,143000,143002,143004,143006],{"class":151,"line":193},[149,142999,72154],{"class":309},[149,143001,313],{"class":155},[149,143003,2056],{"class":309},[149,143005,53257],{"class":309},[149,143007,841],{"class":155},[149,143009,143010],{"class":151,"line":235},[149,143011,355],{"class":155},[14,143013,143015],{"id":143014},"_163-注册页面制作","16.3 注册页面制作",[83,143017],{"style":85,"src":143018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[24,143020,143021,143023],{},[31,143022,866],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[83,143025],{"style":85,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[19,143028,143030],{"id":143029},"_1631-准备工作","16.3.1 准备工作",[42,143032,143033,143036],{},[45,143034,143035],{},"创建register.html，引入 base.css，引入favicon图标",[45,143037,143038],{},"创建register.css ，在html页面进行引入",[19,143040,143042,143043,143045],{"id":143041},"_1632-header-头部实现","16.3.2 ",[48,143044,133225],{}," 头部实现",[42,143047,143048,143051],{},[45,143049,143050],{},"整个内容用 版心 进行包裹",[45,143052,143053],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[24,143055,141358],{},[140,143057,143058],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,143059,143060],{"__ignoreMap":145},[149,143061,143062,143064,143066,143068,143070,143072,143074,143076,143078,143080,143082,143084],{"class":151,"line":152},[149,143063,156],{"class":155},[149,143065,83],{"class":159},[149,143067,163],{"class":162},[149,143069,166],{"class":155},[149,143071,262],{"class":169},[149,143073,265],{"class":162},[149,143075,166],{"class":155},[149,143077,270],{"class":169},[149,143079,273],{"class":162},[149,143081,166],{"class":155},[149,143083,278],{"class":169},[149,143085,190],{"class":155},[24,143087,141447],{},[140,143089,143090],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,143091,143092],{"__ignoreMap":145},[149,143093,143094,143096,143098,143100,143102,143104,143106,143108,143110,143112,143114,143116],{"class":151,"line":152},[149,143095,156],{"class":155},[149,143097,83],{"class":159},[149,143099,163],{"class":162},[149,143101,166],{"class":155},[149,143103,262],{"class":169},[149,143105,265],{"class":162},[149,143107,166],{"class":155},[149,143109,270],{"class":169},[149,143111,273],{"class":162},[149,143113,166],{"class":155},[149,143115,278],{"class":169},[149,143117,190],{"class":155},[19,143119,143121,143122,143125],{"id":143120},"_1633-registerarea-主体模块实现","16.3.3 ",[48,143123,143124],{},"registerarea"," 主体模块实现",[83,143127],{"style":85,"src":143128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[24,143130,143131],{},"整个大盒子 高度为 522px，设置4个边框",[24,143133,141358],{},[140,143135,143136],{"className":286,"code":132378,"language":288,"meta":145,"style":145},[48,143137,143138,143144,143160],{"__ignoreMap":145},[149,143139,143140,143142],{"class":151,"line":152},[149,143141,301],{"class":159},[149,143143,304],{"class":155},[149,143145,143146,143148,143150,143152,143154,143156,143158],{"class":151,"line":193},[149,143147,825],{"class":309},[149,143149,313],{"class":155},[149,143151,830],{"class":309},[149,143153,326],{"class":325},[149,143155,835],{"class":309},[149,143157,131615],{"class":309},[149,143159,841],{"class":155},[149,143161,143162],{"class":151,"line":235},[149,143163,355],{"class":155},[24,143165,141447],{},[140,143167,143168],{"className":286,"code":132378,"language":288,"meta":145,"style":145},[48,143169,143170,143176,143192],{"__ignoreMap":145},[149,143171,143172,143174],{"class":151,"line":152},[149,143173,301],{"class":159},[149,143175,304],{"class":155},[149,143177,143178,143180,143182,143184,143186,143188,143190],{"class":151,"line":193},[149,143179,825],{"class":309},[149,143181,313],{"class":155},[149,143183,830],{"class":309},[149,143185,326],{"class":325},[149,143187,835],{"class":309},[149,143189,131615],{"class":309},[149,143191,841],{"class":155},[149,143193,143194],{"class":151,"line":235},[149,143195,355],{"class":155},[24,143197,143198],{},"1号盒子 是一个 h3 标签，放标题",[42,143200,143201],{},[45,143202,143203],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[24,143205,141358],{},[140,143207,143208],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,143209,143210,143216,143226],{"__ignoreMap":145},[149,143211,143212,143214],{"class":151,"line":152},[149,143213,1554],{"class":162},[149,143215,304],{"class":155},[149,143217,143218,143220,143222,143224],{"class":151,"line":193},[149,143219,1561],{"class":309},[149,143221,313],{"class":155},[149,143223,1566],{"class":309},[149,143225,841],{"class":155},[149,143227,143228],{"class":151,"line":235},[149,143229,355],{"class":155},[24,143231,141447],{},[140,143233,143234],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,143235,143236,143242,143252],{"__ignoreMap":145},[149,143237,143238,143240],{"class":151,"line":152},[149,143239,1554],{"class":162},[149,143241,304],{"class":155},[149,143243,143244,143246,143248,143250],{"class":151,"line":193},[149,143245,1561],{"class":309},[149,143247,313],{"class":155},[149,143249,1566],{"class":309},[149,143251,841],{"class":155},[149,143253,143254],{"class":151,"line":235},[149,143255,355],{"class":155},[24,143257,143258],{},"2号盒子 里面放注册的内容",[42,143260,143261,143264,143273,143287,143300,143303,143306,143324,143338],{},[45,143262,143263],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[45,143265,143266,143267,143269,143270,143272],{},"里面的内容利用 ",[48,143268,42],{}," 包含 ",[48,143271,45],{}," 来实现的（不需要用表格）",[45,143274,140502,143275,143277,143278,143280,143281,143283,143284,143286],{},[48,143276,45],{}," 里面，左侧放 ",[48,143279,35314],{}," 标签， 中间放",[48,143282,504],{}," 标签， 右侧放 ",[48,143285,149],{}," 提示信息",[45,143288,143289,143290,143292,143293,143295,143296,143299],{},"左侧 ",[48,143291,35314],{},"里面的文字都是右对齐，我们可以给",[48,143294,35314],{},"设置一个宽度（88px），然后利用",[48,143297,143298],{},"text-align"," 来设置右对齐",[45,143301,143302],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[45,143304,143305],{},"右侧 span修饰一下文字颜色",[45,143307,143308,143309],{},"提示信息的样式优化",[42,143310,143311,143314,143317],{},[45,143312,143313],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[45,143315,143316],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[45,143318,143319,143320,143323],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[48,143321,143322],{},"vertical-algin"," 来设置 图片与文字对齐方式",[45,143325,143326,143327],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[42,143328,143329,143335],{},[45,143330,143331,143332,143334],{},"设置 ",[48,143333,25262],{}," 的 左右 12px 的内边距，设置一下文字颜色",[45,143336,143337],{},"分别设置 背景颜色",[45,143339,143340,143341,143343],{},"同意协议 和 完成注册 都是用 ",[48,143342,45],{}," 进行包裹",[24,143345,141358],{},[140,143347,143348],{"className":286,"code":141931,"language":288,"meta":145,"style":145},[48,143349,143350,143356,143366],{"__ignoreMap":145},[149,143351,143352,143354],{"class":151,"line":152},[149,143353,301],{"class":159},[149,143355,304],{"class":155},[149,143357,143358,143360,143362,143364],{"class":151,"line":193},[149,143359,72562],{"class":309},[149,143361,313],{"class":155},[149,143363,141948],{"class":309},[149,143365,841],{"class":155},[149,143367,143368],{"class":151,"line":235},[149,143369,355],{"class":155},[24,143371,141447],{},[140,143373,143374],{"className":286,"code":141931,"language":288,"meta":145,"style":145},[48,143375,143376,143382,143392],{"__ignoreMap":145},[149,143377,143378,143380],{"class":151,"line":152},[149,143379,301],{"class":159},[149,143381,304],{"class":155},[149,143383,143384,143386,143388,143390],{"class":151,"line":193},[149,143385,72562],{"class":309},[149,143387,313],{"class":155},[149,143389,141948],{"class":309},[149,143391,841],{"class":155},[149,143393,143394],{"class":151,"line":235},[149,143395,355],{"class":155},[19,143397,143399],{"id":143398},"_1634-底部实现","16.3.4 底部实现",[24,143401,141358],{},[140,143403,143404],{"className":286,"code":141931,"language":288,"meta":145,"style":145},[48,143405,143406,143412,143422],{"__ignoreMap":145},[149,143407,143408,143410],{"class":151,"line":152},[149,143409,301],{"class":159},[149,143411,304],{"class":155},[149,143413,143414,143416,143418,143420],{"class":151,"line":193},[149,143415,72562],{"class":309},[149,143417,313],{"class":155},[149,143419,141948],{"class":309},[149,143421,841],{"class":155},[149,143423,143424],{"class":151,"line":235},[149,143425,355],{"class":155},[24,143427,141447],{},[140,143429,143430],{"className":142,"code":132325,"language":144,"meta":145,"style":145},[48,143431,143432,143436,143450,143454],{"__ignoreMap":145},[149,143433,143434],{"class":151,"line":152},[149,143435,132332],{"class":295},[149,143437,143438,143440,143442,143444,143446,143448],{"class":151,"line":193},[149,143439,156],{"class":155},[149,143441,301],{"class":159},[149,143443,55184],{"class":162},[149,143445,166],{"class":155},[149,143447,132345],{"class":169},[149,143449,190],{"class":155},[149,143451,143452],{"class":151,"line":235},[149,143453,132352],{"class":155},[149,143455,143456,143458,143460],{"class":151,"line":340},[149,143457,665],{"class":155},[149,143459,301],{"class":159},[149,143461,190],{"class":155},[14,143463,143465],{"id":143464},"_164-项目总结","16.4 项目总结",[125,143467,143468,143471,143474,143477],{},[45,143469,143470],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[45,143472,143473],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[45,143475,143476],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[45,143478,143479],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[83,143481],{"style":85,"src":143482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[125,143484,143485],{"start":346},[45,143486,143487],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[83,143489],{"style":85,"src":143490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[125,143492,143493],{"start":352},[45,143494,143495],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[83,143497],{"style":85,"src":143498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[140,143500,143501],{"className":142,"code":495,"language":144,"meta":145,"style":145},[48,143502,143503],{"__ignoreMap":145},[149,143504,143505,143507,143509,143511,143513,143515,143517,143519,143521,143523,143525,143527],{"class":151,"line":152},[149,143506,156],{"class":155},[149,143508,504],{"class":159},[149,143510,507],{"class":162},[149,143512,166],{"class":155},[149,143514,512],{"class":169},[149,143516,515],{"class":162},[149,143518,166],{"class":155},[149,143520,520],{"class":169},[149,143522,523],{"class":162},[149,143524,166],{"class":155},[149,143526,528],{"class":169},[149,143528,190],{"class":155},[125,143530,143531,143534],{"start":1021},[45,143532,143533],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[45,143535,143536],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1783,143538,143539],{},"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":145,"searchDepth":193,"depth":193,"links":143541},[143542,143547,143554,143562],{"id":141168,"depth":193,"text":141169,"children":143543},[143544,143545,143546],{"id":141172,"depth":235,"text":141173},{"id":141903,"depth":235,"text":141904},{"id":142216,"depth":235,"text":142217},{"id":142516,"depth":193,"text":142517,"children":143548},[143549,143550,143552],{"id":142520,"depth":235,"text":142521},{"id":142538,"depth":235,"text":143551},"16.2.2 列表页 header 和 nav 修改",{"id":142822,"depth":235,"text":143553},"16.2.3 列表页主体 sk_container",{"id":143014,"depth":193,"text":143015,"children":143555},[143556,143557,143559,143561],{"id":143029,"depth":235,"text":143030},{"id":143041,"depth":235,"text":143558},"16.3.2 header 头部实现",{"id":143120,"depth":235,"text":143560},"16.3.3 registerarea 主体模块实现",{"id":143398,"depth":235,"text":143399},{"id":143464,"depth":193,"text":143465},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141160,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143569,"title":143570,"body":143571,"description":1797,"extension":1798,"meta":143679,"navigation":1800,"path":143680,"seo":143681,"stem":143682,"__hash__":143683},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143572,"toc":143674},[143573,143576,143580,143583,143586,143595,143604,143608,143613,143620,143638,143641,143644,143647,143650,143653,143656,143659,143662,143665,143668,143671],[10,143574,143570],{"id":143575},"_17-web服务器与网站发布",[14,143577,143579],{"id":143578},"_171-web服务器","17.1 Web服务器",[24,143581,143582],{},"把自己网站上传到服务器上，可以让其他人访问",[83,143584],{"style":85,"src":143585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[24,143587,143588,143591,143592],{},[31,143589,143590],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[31,143593,143594],{},"Web 服务器等",[24,143596,143597,143598,102698,143601,27449],{},"根据服务器在网络中所在的位置不同，又可分为 ",[31,143599,143600],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[31,143602,143603],{},"远程服务器",[19,143605,143607],{"id":143606},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[24,143609,143610],{},[31,143611,143612],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[24,143614,143615,143616],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2102,143617,143618],{"href":143618,"rel":143619},"http:\u002F\u002Ffree.3v.do\u002F",[25573],[42,143621,143622,143625,143628,143635],{},[45,143623,143624],{},"去免费空间网站注册账号。",[45,143626,143627],{},"记录下主机名、用户名、密码、域名。",[45,143629,143630,143631,143634],{},"利用 ",[48,143632,143633],{},"utftp"," 软件 上传网站到远程服务器",[45,143636,143637],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[24,143639,143640],{},"使用软件上传，对上传软件文件进行解压",[83,143642],{"style":85,"src":143643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[83,143645],{"style":85,"src":143646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[24,143648,143649],{},"输入刚刚申请的服务器账号信息：",[83,143651],{"style":85,"src":143652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[83,143654],{"style":85,"src":143655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[83,143657],{"style":85,"src":143658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[83,143660],{"style":85,"src":143661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[24,143663,143664],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[83,143666],{"style":85,"src":143667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[24,143669,143670],{},"浏览器输入域名即可访问",[24,143672,143673],{},"首页一定必须是index",{"title":145,"searchDepth":193,"depth":193,"links":143675},[143676],{"id":143578,"depth":193,"text":143579,"children":143677},[143678],{"id":143606,"depth":235,"text":143607},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143570,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143685,"title":143686,"body":143687,"description":1797,"extension":1798,"meta":144614,"navigation":1800,"path":144615,"seo":144616,"stem":144617,"__hash__":144618},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143688,"toc":144597},[143689,143692,143696,143699,143702,143713,143716,143720,143724,143729,143732,143735,143738,143741,143745,143771,143775,143779,143782,143785,143789,143822,143826,143829,143832,143896,143900,143904,143907,143910,143913,143917,143962,143966,143969,143999,144003,144007,144010,144013,144017,144020,144089,144092,144200,144202,144208,144212,144215,144218,144314,144317,144321,144345,144349,144352,144356,144359,144363,144366,144369,144372,144375,144379,144382,144385,144389,144393,144396,144399,144402,144405,144409,144412,144416,144419,144422,144467,144471,144475,144478,144481,144484,144516,144520,144523,144557,144561,144564,144594],[10,143690,143686],{"id":143691},"_18-2d动画与3d转换",[14,143693,143695],{"id":143694},"_181-css3-2d转换","18.1 CSS3 2D转换",[24,143697,143698],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[24,143700,143701],{},"转换（transform）你可以简单理解为变形",[42,143703,143704,143707,143710],{},[45,143705,143706],{},"移动：translate",[45,143708,143709],{},"旋转：rotate",[45,143711,143712],{},"缩放：scale",[83,143714],{"style":85,"src":143715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[19,143717,143719],{"id":143718},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[120,143721,143723],{"id":143722},"_18111-translate介绍","18.1.1.1 translate介绍",[24,143725,143726,143727],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[31,143728,134879],{},[83,143730],{"style":85,"src":143731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[24,143733,143734],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[24,143736,143737],{},"对于行内元素无效",[24,143739,143740],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[120,143742,143744],{"id":143743},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[140,143746,143747],{"className":286,"code":140177,"language":288,"meta":145,"style":145},[48,143748,143749,143755,143767],{"__ignoreMap":145},[149,143750,143751,143753],{"class":151,"line":152},[149,143752,301],{"class":159},[149,143754,304],{"class":155},[149,143756,143757,143759,143761,143763,143765],{"class":151,"line":193},[149,143758,72154],{"class":309},[149,143760,313],{"class":155},[149,143762,2056],{"class":309},[149,143764,53257],{"class":309},[149,143766,841],{"class":155},[149,143768,143769],{"class":151,"line":235},[149,143770,355],{"class":155},[19,143772,143774],{"id":143773},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[120,143776,143778],{"id":143777},"_18121-rotate介绍","18.1.2.1 rotate介绍",[24,143780,143781],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[83,143783],{"style":85,"src":143784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[120,143786,143788],{"id":143787},"_18122-旋转效果","18.1.2.2 旋转效果",[140,143790,143792],{"className":286,"code":143791,"language":288,"meta":145,"style":145},"div {\n  transform: rotate(45deg);\n}\n",[48,143793,143794,143800,143818],{"__ignoreMap":145},[149,143795,143796,143798],{"class":151,"line":152},[149,143797,301],{"class":159},[149,143799,304],{"class":155},[149,143801,143802,143804,143806,143809,143811,143813,143816],{"class":151,"line":193},[149,143803,310],{"class":309},[149,143805,313],{"class":155},[149,143807,143808],{"class":309},"rotate",[149,143810,319],{"class":155},[149,143812,2392],{"class":309},[149,143814,143815],{"class":325},"deg",[149,143817,337],{"class":155},[149,143819,143820],{"class":151,"line":235},[149,143821,355],{"class":155},[120,143823,143825],{"id":143824},"_18123-三角做法","18.1.2.3 三角做法",[24,143827,143828],{},"该下标当经过最外层大盒子时会实现向上反转",[83,143830],{"style":85,"src":143831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[140,143833,143834],{"className":286,"code":136735,"language":288,"meta":145,"style":145},[48,143835,143836,143840,143846,143856,143866,143882,143892],{"__ignoreMap":145},[149,143837,143838],{"class":151,"line":152},[149,143839,136742],{"class":295},[149,143841,143842,143844],{"class":151,"line":193},[149,143843,136747],{"class":162},[149,143845,304],{"class":155},[149,143847,143848,143850,143852,143854],{"class":151,"line":235},[149,143849,72252],{"class":309},[149,143851,313],{"class":155},[149,143853,2056],{"class":309},[149,143855,841],{"class":155},[149,143857,143858,143860,143862,143864],{"class":151,"line":340},[149,143859,72472],{"class":309},[149,143861,313],{"class":155},[149,143863,2056],{"class":309},[149,143865,841],{"class":155},[149,143867,143868,143870,143872,143874,143876,143878,143880],{"class":151,"line":346},[149,143869,825],{"class":309},[149,143871,313],{"class":155},[149,143873,2309],{"class":309},[149,143875,326],{"class":325},[149,143877,835],{"class":309},[149,143879,65678],{"class":309},[149,143881,841],{"class":155},[149,143883,143884,143886,143888,143890],{"class":151,"line":352},[149,143885,136790],{"class":309},[149,143887,313],{"class":155},[149,143889,64057],{"class":309},[149,143891,841],{"class":155},[149,143893,143894],{"class":151,"line":1021},[149,143895,355],{"class":155},[19,143897,143899],{"id":143898},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[120,143901,143903],{"id":143902},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[24,143905,143906],{},"设置中心点",[83,143908],{"style":85,"src":143909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[24,143911,143912],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[120,143914,143916],{"id":143915},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[140,143918,143920],{"className":286,"code":143919,"language":288,"meta":145,"style":145},"\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",[48,143921,143922,143927,143933,143948,143953,143958],{"__ignoreMap":145},[149,143923,143924],{"class":151,"line":152},[149,143925,143926],{"class":295},"\u002F* 转换中心点 *\u002F\n",[149,143928,143929,143931],{"class":151,"line":193},[149,143930,301],{"class":159},[149,143932,304],{"class":155},[149,143934,143935,143938,143940,143942,143944,143946],{"class":151,"line":235},[149,143936,143937],{"class":309},"  transform-origin",[149,143939,313],{"class":155},[149,143941,53293],{"class":309},[149,143943,18854],{"class":309},[149,143945,132084],{"class":155},[149,143947,136888],{"class":295},[149,143949,143950],{"class":151,"line":340},[149,143951,143952],{"class":295},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[149,143954,143955],{"class":151,"line":346},[149,143956,143957],{"class":295},"  \u002F* transform-origin: left top; *\u002F\n",[149,143959,143960],{"class":151,"line":352},[149,143961,355],{"class":155},[120,143963,143965],{"id":143964},"_18133-旋转案例","18.1.3.3 旋转案例",[83,143967],{"style":85,"src":143968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[140,143970,143971],{"className":286,"code":143791,"language":288,"meta":145,"style":145},[48,143972,143973,143979,143995],{"__ignoreMap":145},[149,143974,143975,143977],{"class":151,"line":152},[149,143976,301],{"class":159},[149,143978,304],{"class":155},[149,143980,143981,143983,143985,143987,143989,143991,143993],{"class":151,"line":193},[149,143982,310],{"class":309},[149,143984,313],{"class":155},[149,143986,143808],{"class":309},[149,143988,319],{"class":155},[149,143990,2392],{"class":309},[149,143992,143815],{"class":325},[149,143994,337],{"class":155},[149,143996,143997],{"class":151,"line":235},[149,143998,355],{"class":155},[19,144000,144002],{"id":144001},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[120,144004,144006],{"id":144005},"_18141-scale介绍","18.1.4.1 scale介绍",[24,144008,144009],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[83,144011],{"style":85,"src":144012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[120,144014,144016],{"id":144015},"_18142-分页按钮","18.1.4.2 分页按钮",[83,144018],{"style":85,"src":144019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[140,144021,144023],{"className":286,"code":144022,"language":288,"meta":145,"style":145},"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",[48,144024,144025,144031,144047,144051,144055,144060,144066,144080,144085],{"__ignoreMap":145},[149,144026,144027,144029],{"class":151,"line":152},[149,144028,301],{"class":159},[149,144030,304],{"class":155},[149,144032,144033,144035,144037,144040,144042,144045],{"class":151,"line":193},[149,144034,310],{"class":309},[149,144036,313],{"class":155},[149,144038,144039],{"class":309},"scale",[149,144041,319],{"class":155},[149,144043,144044],{"class":309},"1.2",[149,144046,337],{"class":155},[149,144048,144049],{"class":151,"line":235},[149,144050,355],{"class":155},[149,144052,144053],{"class":151,"line":340},[149,144054,1000],{"class":155},[149,144056,144057],{"class":151,"line":346},[149,144058,144059],{"class":295},"\u002F* 2D 缩放 *\u002F\n",[149,144061,144062,144064],{"class":151,"line":352},[149,144063,301],{"class":159},[149,144065,304],{"class":155},[149,144067,144068,144070,144072,144074,144076,144078],{"class":151,"line":1021},[149,144069,310],{"class":309},[149,144071,313],{"class":155},[149,144073,144039],{"class":309},[149,144075,319],{"class":155},[149,144077,144044],{"class":309},[149,144079,337],{"class":155},[149,144081,144082],{"class":151,"line":1035},[149,144083,144084],{"class":295},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[149,144086,144087],{"class":151,"line":1054},[149,144088,355],{"class":155},[24,144090,144091],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[140,144093,144095],{"className":286,"code":144094,"language":288,"meta":145,"style":145},"\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",[48,144096,144097,144102,144112,144133,144154,144158,144163,144169,144196],{"__ignoreMap":145},[149,144098,144099],{"class":151,"line":152},[149,144100,144101],{"class":295},"\u002F* 定义动画 *\u002F\n",[149,144103,144104,144107,144110],{"class":151,"line":193},[149,144105,144106],{"class":325},"@keyframes",[149,144108,144109],{"class":6932}," move",[149,144111,304],{"class":155},[149,144113,144114,144117,144119,144121,144123,144126,144128,144130],{"class":151,"line":235},[149,144115,144116],{"class":162},"  0%",[149,144118,81488],{"class":155},[149,144120,49840],{"class":309},[149,144122,313],{"class":155},[149,144124,144125],{"class":309},"translateX",[149,144127,319],{"class":155},[149,144129,2056],{"class":309},[149,144131,144132],{"class":155},"); }\n",[149,144134,144135,144138,144140,144142,144144,144146,144148,144150,144152],{"class":151,"line":340},[149,144136,144137],{"class":162},"  100%",[149,144139,81488],{"class":155},[149,144141,49840],{"class":309},[149,144143,313],{"class":155},[149,144145,144125],{"class":309},[149,144147,319],{"class":155},[149,144149,322],{"class":309},[149,144151,326],{"class":325},[149,144153,144132],{"class":155},[149,144155,144156],{"class":151,"line":346},[149,144157,355],{"class":155},[149,144159,144160],{"class":151,"line":352},[149,144161,144162],{"class":295},"\u002F* 调用动画 *\u002F\n",[149,144164,144165,144167],{"class":151,"line":1021},[149,144166,301],{"class":159},[149,144168,304],{"class":155},[149,144170,144171,144174,144176,144178,144180,144182,144184,144186,144188,144191,144194],{"class":151,"line":1035},[149,144172,144173],{"class":309},"  animation",[149,144175,313],{"class":155},[149,144177,136901],{"class":309},[149,144179,26827],{"class":309},[149,144181,1720],{"class":325},[149,144183,1723],{"class":309},[149,144185,5811],{"class":309},[149,144187,1720],{"class":325},[149,144189,144190],{"class":309}," infinite",[149,144192,144193],{"class":309}," alternate",[149,144195,841],{"class":155},[149,144197,144198],{"class":151,"line":1054},[149,144199,355],{"class":155},[24,144201,144091],{},[140,144203,144206],{"className":144204,"code":144205,"language":1655},[1653],"\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",[48,144207,144205],{"__ignoreMap":145},[120,144209,144211],{"id":144210},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[24,144213,144214],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[83,144216],{"style":85,"src":144217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[140,144219,144220],{"className":286,"code":144094,"language":288,"meta":145,"style":145},[48,144221,144222,144226,144234,144252,144272,144276,144280,144286,144310],{"__ignoreMap":145},[149,144223,144224],{"class":151,"line":152},[149,144225,144101],{"class":295},[149,144227,144228,144230,144232],{"class":151,"line":193},[149,144229,144106],{"class":325},[149,144231,144109],{"class":6932},[149,144233,304],{"class":155},[149,144235,144236,144238,144240,144242,144244,144246,144248,144250],{"class":151,"line":235},[149,144237,144116],{"class":162},[149,144239,81488],{"class":155},[149,144241,49840],{"class":309},[149,144243,313],{"class":155},[149,144245,144125],{"class":309},[149,144247,319],{"class":155},[149,144249,2056],{"class":309},[149,144251,144132],{"class":155},[149,144253,144254,144256,144258,144260,144262,144264,144266,144268,144270],{"class":151,"line":340},[149,144255,144137],{"class":162},[149,144257,81488],{"class":155},[149,144259,49840],{"class":309},[149,144261,313],{"class":155},[149,144263,144125],{"class":309},[149,144265,319],{"class":155},[149,144267,322],{"class":309},[149,144269,326],{"class":325},[149,144271,144132],{"class":155},[149,144273,144274],{"class":151,"line":346},[149,144275,355],{"class":155},[149,144277,144278],{"class":151,"line":352},[149,144279,144162],{"class":295},[149,144281,144282,144284],{"class":151,"line":1021},[149,144283,301],{"class":159},[149,144285,304],{"class":155},[149,144287,144288,144290,144292,144294,144296,144298,144300,144302,144304,144306,144308],{"class":151,"line":1035},[149,144289,144173],{"class":309},[149,144291,313],{"class":155},[149,144293,136901],{"class":309},[149,144295,26827],{"class":309},[149,144297,1720],{"class":325},[149,144299,1723],{"class":309},[149,144301,5811],{"class":309},[149,144303,1720],{"class":325},[149,144305,144190],{"class":309},[149,144307,144193],{"class":309},[149,144309,841],{"class":155},[149,144311,144312],{"class":151,"line":1054},[149,144313,355],{"class":155},[24,144315,144316],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[19,144318,144320],{"id":144319},"_1823-知识点回顾","18.2.3 知识点回顾",[140,144322,144323],{"className":286,"code":130393,"language":288,"meta":145,"style":145},[48,144324,144325,144331,144341],{"__ignoreMap":145},[149,144326,144327,144329],{"class":151,"line":152},[149,144328,301],{"class":159},[149,144330,304],{"class":155},[149,144332,144333,144335,144337,144339],{"class":151,"line":193},[149,144334,130406],{"class":309},[149,144336,313],{"class":155},[149,144338,63425],{"class":309},[149,144340,841],{"class":155},[149,144342,144343],{"class":151,"line":235},[149,144344,355],{"class":155},[14,144346,144348],{"id":144347},"_183-3d-转换","18.3 3D 转换",[24,144350,144351],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[19,144353,144355],{"id":144354},"_1831-坐标轴认识","18.3.1 坐标轴认识",[83,144357],{"style":85,"src":144358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[19,144360,144362],{"id":144361},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[83,144364],{"style":85,"src":144365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[24,144367,144368],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[24,144370,144371],{},"translate3d的效果需要搭配透视perspective来使用",[83,144373],{"style":85,"src":144374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[19,144376,144378],{"id":144377},"_1833-透视-perspective","18.3.3 透视 perspective",[83,144380],{"style":85,"src":144381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[24,144383,144384],{},"透视写在父盒子上，单位为像素",[19,144386,144388],{"id":144387},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[120,144390,144392],{"id":144391},"_18341-分开解释","18.3.4.1 分开解释",[83,144394],{"style":85,"src":144395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[83,144397],{"style":85,"src":144398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[83,144400],{"style":85,"src":144401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[24,144403,144404],{},"总结来说就是左手原则",[120,144406,144408],{"id":144407},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[83,144410],{"style":85,"src":144411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[19,144413,144415],{"id":144414},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[83,144417],{"style":85,"src":144418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[83,144420],{"style":85,"src":144421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[140,144423,144425],{"className":286,"code":144424,"language":288,"meta":145,"style":145},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[48,144426,144427,144433,144446,144463],{"__ignoreMap":145},[149,144428,144429,144431],{"class":151,"line":152},[149,144430,301],{"class":159},[149,144432,304],{"class":155},[149,144434,144435,144438,144440,144442,144444],{"class":151,"line":193},[149,144436,144437],{"class":309},"  perspective",[149,144439,313],{"class":155},[149,144441,66761],{"class":309},[149,144443,326],{"class":325},[149,144445,841],{"class":155},[149,144447,144448,144450,144452,144455,144457,144459,144461],{"class":151,"line":235},[149,144449,310],{"class":309},[149,144451,313],{"class":155},[149,144453,144454],{"class":309},"rotateX",[149,144456,319],{"class":155},[149,144458,2392],{"class":309},[149,144460,143815],{"class":325},[149,144462,337],{"class":155},[149,144464,144465],{"class":151,"line":340},[149,144466,355],{"class":155},[19,144468,144470],{"id":144469},"_1836-案例","18.3.6 案例",[120,144472,144474],{"id":144473},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[83,144476],{"style":85,"src":144477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[83,144479],{"style":85,"src":144480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[83,144482],{"style":85,"src":144483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[140,144485,144487],{"className":286,"code":144486,"language":288,"meta":145,"style":145},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[48,144488,144489,144494,144500,144512],{"__ignoreMap":145},[149,144490,144491],{"class":151,"line":152},[149,144492,144493],{"class":295},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[149,144495,144496,144498],{"class":151,"line":193},[149,144497,135217],{"class":162},[149,144499,304],{"class":155},[149,144501,144502,144504,144506,144508,144510],{"class":151,"line":235},[149,144503,144437],{"class":309},[149,144505,313],{"class":155},[149,144507,66761],{"class":309},[149,144509,326],{"class":325},[149,144511,841],{"class":155},[149,144513,144514],{"class":151,"line":340},[149,144515,355],{"class":155},[120,144517,144519],{"id":144518},"_18362-3d导航栏","18.3.6.2 3D导航栏",[83,144521],{"style":85,"src":144522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[140,144524,144525],{"className":142,"code":132325,"language":144,"meta":145,"style":145},[48,144526,144527,144531,144545,144549],{"__ignoreMap":145},[149,144528,144529],{"class":151,"line":152},[149,144530,132332],{"class":295},[149,144532,144533,144535,144537,144539,144541,144543],{"class":151,"line":193},[149,144534,156],{"class":155},[149,144536,301],{"class":159},[149,144538,55184],{"class":162},[149,144540,166],{"class":155},[149,144542,132345],{"class":169},[149,144544,190],{"class":155},[149,144546,144547],{"class":151,"line":235},[149,144548,132352],{"class":155},[149,144550,144551,144553,144555],{"class":151,"line":340},[149,144552,665],{"class":155},[149,144554,301],{"class":159},[149,144556,190],{"class":155},[120,144558,144560],{"id":144559},"_18363-旋转木马","18.3.6.3 旋转木马",[83,144562],{"style":85,"src":144563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[140,144565,144566],{"className":286,"code":143791,"language":288,"meta":145,"style":145},[48,144567,144568,144574,144590],{"__ignoreMap":145},[149,144569,144570,144572],{"class":151,"line":152},[149,144571,301],{"class":159},[149,144573,304],{"class":155},[149,144575,144576,144578,144580,144582,144584,144586,144588],{"class":151,"line":193},[149,144577,310],{"class":309},[149,144579,313],{"class":155},[149,144581,143808],{"class":309},[149,144583,319],{"class":155},[149,144585,2392],{"class":309},[149,144587,143815],{"class":325},[149,144589,337],{"class":155},[149,144591,144592],{"class":151,"line":235},[149,144593,355],{"class":155},[1783,144595,144596],{},"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":145,"searchDepth":193,"depth":193,"links":144598},[144599,144606],{"id":143694,"depth":193,"text":143695,"children":144600},[144601,144602,144603,144604,144605],{"id":143718,"depth":235,"text":143719},{"id":143773,"depth":235,"text":143774},{"id":143898,"depth":235,"text":143899},{"id":144001,"depth":235,"text":144002},{"id":144319,"depth":235,"text":144320},{"id":144347,"depth":193,"text":144348,"children":144607},[144608,144609,144610,144611,144612,144613],{"id":144354,"depth":235,"text":144355},{"id":144361,"depth":235,"text":144362},{"id":144377,"depth":235,"text":144378},{"id":144387,"depth":235,"text":144388},{"id":144414,"depth":235,"text":144415},{"id":144469,"depth":235,"text":144470},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143686,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144620,"title":144621,"body":144622,"description":1797,"extension":1798,"meta":144825,"navigation":1800,"path":144826,"seo":144827,"stem":144828,"__hash__":144829},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144623,"toc":144814},[144624,144627,144631,144634,144637,144641,144644,144647,144650,144654,144657,144661,144664,144668,144671,144675,144689,144693,144718,144721,144724,144741,144745,144749,144752,144755,144759,144762,144765,144783,144787,144790,144804,144808,144811],[10,144625,144621],{"id":144626},"_19-移动端基础-前缀现状与视口",[14,144628,144630],{"id":144629},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[83,144632],{"style":85,"src":144633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[24,144635,144636],{},"意思就是加个前缀，增加兼容性",[14,144638,144640],{"id":144639},"_192-移动端现状认识","19.2 移动端现状认识",[83,144642],{"style":85,"src":144643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[24,144645,144646],{},"调试方法：",[83,144648],{"style":85,"src":144649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144651,144653],{"id":144652},"_193-视口","19.3 视口",[24,144655,144656],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[19,144658,144660],{"id":144659},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[83,144662],{"style":85,"src":144663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[19,144665,144667],{"id":144666},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[83,144669],{"style":85,"src":144670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[19,144672,144674],{"id":144673},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[42,144676,144677,144680,144683,144686],{},[45,144678,144679],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[45,144681,144682],{},"理想视口，对设备来讲，是最理想的视口尺寸",[45,144684,144685],{},"需要手动添写meta视口标签通知浏览器操作",[45,144687,144688],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[19,144690,144692],{"id":144691},"_1934-meta视口标签","19.3.4 meta视口标签",[140,144694,144696],{"className":142,"code":144695,"language":144,"meta":145,"style":145},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[48,144697,144698],{"__ignoreMap":145},[149,144699,144700,144702,144704,144706,144708,144710,144712,144714,144716],{"class":151,"line":152},[149,144701,156],{"class":155},[149,144703,53048],{"class":159},[149,144705,515],{"class":162},[149,144707,166],{"class":155},[149,144709,53095],{"class":169},[149,144711,53075],{"class":162},[149,144713,166],{"class":155},[149,144715,53102],{"class":169},[149,144717,190],{"class":155},[83,144719],{"style":85,"src":144720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[24,144722,144723],{},"标准视口设置：",[125,144725,144726,144729,144732,144735,144738],{},[45,144727,144728],{},"视口宽度和设备保持一致",[45,144730,144731],{},"视口的默认缩放比例1.0",[45,144733,144734],{},"不允许用户自行缩放",[45,144736,144737],{},"最大允许的缩放比例1.0",[45,144739,144740],{},"最小允许的缩放比例1.0",[19,144742,144744],{"id":144743},"_1935-二倍图","19.3.5 二倍图",[120,144746,144748],{"id":144747},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[83,144750],{"style":85,"src":144751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[83,144753],{"style":85,"src":144754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[120,144756,144758],{"id":144757},"_19352-多倍图","19.3.5.2 多倍图",[83,144760],{"style":85,"src":144761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[24,144763,144764],{},"二倍图法，代码如下：",[140,144766,144768],{"className":286,"code":144767,"language":288,"meta":145,"style":145},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[48,144769,144770,144775],{"__ignoreMap":145},[149,144771,144772],{"class":151,"line":152},[149,144773,144774],{"class":295},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[149,144776,144777,144780],{"class":151,"line":193},[149,144778,144779],{"class":159},"background-size",[149,144781,144782],{"class":155},": 50% 50%;\n",[120,144784,144786],{"id":144785},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[83,144788],{"style":85,"src":144789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[125,144791,144792,144795,144798,144801],{},[45,144793,144794],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[45,144796,144797],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[45,144799,144800],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[45,144802,144803],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[120,144805,144807],{"id":144806},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[83,144809],{"style":85,"src":144810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1783,144812,144813],{},"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":145,"searchDepth":193,"depth":193,"links":144815},[144816,144817,144818],{"id":144629,"depth":193,"text":144630},{"id":144639,"depth":193,"text":144640},{"id":144652,"depth":193,"text":144653,"children":144819},[144820,144821,144822,144823,144824],{"id":144659,"depth":235,"text":144660},{"id":144666,"depth":235,"text":144667},{"id":144673,"depth":235,"text":144674},{"id":144691,"depth":235,"text":144692},{"id":144743,"depth":235,"text":144744},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144621,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144831,"title":144832,"body":144833,"description":1797,"extension":1798,"meta":145710,"navigation":1800,"path":145711,"seo":145712,"stem":145713,"__hash__":145714},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144834,"toc":145694},[144835,144838,144842,144849,144852,144859,144862,144867,144870,144874,144878,144885,144888,144891,144895,144898,144901,144904,144907,144910,144914,144917,144921,144923,144926,144929,144932,144935,144937,144940,144942,144972,144974,145004,145008,145011,145015,145018,145035,145038,145041,145117,145119,145122,145125,145128,145131,145133,145136,145139,145143,145165,145168,145171,145175,145178,145184,145187,145191,145194,145197,145201,145204,145207,145210,145214,145217,145220,145223,145226,145230,145233,145237,145244,145247,145250,145253,145256,145266,145269,145272,145279,145282,145286,145289,145292,145296,145299,145302,145305,145350,145353,145356,145359,145361,145490,145492,145530,145533,145536,145538,145656,145658,145692],[10,144836,144832],{"id":144837},"_20-移动端布局实战上篇",[14,144839,144841],{"id":144840},"_201-移动端主流方案","20.1 移动端主流方案",[125,144843,144844],{},[45,144845,144846],{},[31,144847,144848],{},"单独移动端页面（主流）",[83,144850],{"style":85,"src":144851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[125,144853,144854],{"start":193},[45,144855,144856],{},[31,144857,144858],{},"响应式兼容PC移动端",[83,144860],{"style":85,"src":144861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[125,144863,144864],{"start":235},[45,144865,144866],{},"两种页面选型布局方式",[83,144868],{"style":85,"src":144869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144871,144873],{"id":144872},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[19,144875,144877],{"id":144876},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[24,144879,144880,144881],{},"官网地址： ",[2102,144882,144883],{"href":144883,"rel":144884},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25573],[83,144886],{"style":85,"src":144887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[83,144889],{"style":85,"src":144890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[19,144892,144894],{"id":144893},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[83,144896],{"style":85,"src":144897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[83,144899],{"style":85,"src":144900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[24,144902,144903],{},"去除高亮：",[24,144905,144906],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[24,144908,144909],{},"-webkit- tap-highlight-color: transparent;",[14,144911,144913],{"id":144912},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[83,144915],{"style":85,"src":144916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144918,144920],{"id":144919},"_204-流式布局案例","20.4 流式布局案例",[24,144922,89],{},[24,144924,144925],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[24,144927,144928],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[24,144930,144931],{},"图片格式：",[83,144933],{"style":85,"src":144934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[24,144936,137258],{},[83,144938],{"style":85,"src":144939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[24,144941,141358],{},[140,144943,144944],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,144945,144946],{"__ignoreMap":145},[149,144947,144948,144950,144952,144954,144956,144958,144960,144962,144964,144966,144968,144970],{"class":151,"line":152},[149,144949,156],{"class":155},[149,144951,83],{"class":159},[149,144953,163],{"class":162},[149,144955,166],{"class":155},[149,144957,262],{"class":169},[149,144959,265],{"class":162},[149,144961,166],{"class":155},[149,144963,270],{"class":169},[149,144965,273],{"class":162},[149,144967,166],{"class":155},[149,144969,278],{"class":169},[149,144971,190],{"class":155},[24,144973,141447],{},[140,144975,144976],{"className":142,"code":247,"language":144,"meta":145,"style":145},[48,144977,144978],{"__ignoreMap":145},[149,144979,144980,144982,144984,144986,144988,144990,144992,144994,144996,144998,145000,145002],{"class":151,"line":152},[149,144981,156],{"class":155},[149,144983,83],{"class":159},[149,144985,163],{"class":162},[149,144987,166],{"class":155},[149,144989,262],{"class":169},[149,144991,265],{"class":162},[149,144993,166],{"class":155},[149,144995,270],{"class":169},[149,144997,273],{"class":162},[149,144999,166],{"class":155},[149,145001,278],{"class":169},[149,145003,190],{"class":155},[14,145005,145007],{"id":145006},"_205-flex布局","20.5 flex布局",[83,145009],{"style":85,"src":145010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[19,145012,145014],{"id":145013},"_2051-布局原理","20.5.1 布局原理",[24,145016,145017],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[42,145019,145020,145023,145026,145029,145032],{},[45,145021,145022],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[45,145024,145025],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[45,145027,145028],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[45,145030,145031],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[45,145033,145034],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[24,145036,145037],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[24,145039,145040],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[140,145042,145044],{"className":286,"code":145043,"language":288,"meta":145,"style":145},"\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",[48,145045,145046,145051,145058,145068,145080,145091,145102,145113],{"__ignoreMap":145},[149,145047,145048],{"class":151,"line":152},[149,145049,145050],{"class":295},"\u002F* Flex 弹性布局 *\u002F\n",[149,145052,145053,145056],{"class":151,"line":193},[149,145054,145055],{"class":162},".container",[149,145057,304],{"class":155},[149,145059,145060,145062,145064,145066],{"class":151,"line":235},[149,145061,1389],{"class":309},[149,145063,313],{"class":155},[149,145065,53180],{"class":309},[149,145067,841],{"class":155},[149,145069,145070,145073,145075,145078],{"class":151,"line":340},[149,145071,145072],{"class":309},"  flex-direction",[149,145074,313],{"class":155},[149,145076,145077],{"class":309},"row",[149,145079,841],{"class":155},[149,145081,145082,145085,145087,145089],{"class":151,"line":346},[149,145083,145084],{"class":309},"  justify-content",[149,145086,313],{"class":155},[149,145088,53368],{"class":309},[149,145090,841],{"class":155},[149,145092,145093,145096,145098,145100],{"class":151,"line":352},[149,145094,145095],{"class":309},"  align-items",[149,145097,313],{"class":155},[149,145099,53293],{"class":309},[149,145101,841],{"class":155},[149,145103,145104,145107,145109,145111],{"class":151,"line":1021},[149,145105,145106],{"class":309},"  flex-wrap",[149,145108,313],{"class":155},[149,145110,80292],{"class":309},[149,145112,841],{"class":155},[149,145114,145115],{"class":151,"line":1035},[149,145116,355],{"class":155},[24,145118,72137],{},[24,145120,145121],{},".form-item .male-label {",[24,145123,145124],{},"   margin-right: 20px;",[24,145126,145127],{},"   display: inline-flex;",[24,145129,145130],{},"   align-items: center;",[24,145132,2805],{},[83,145134],{"style":85,"src":145135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[83,145137],{"style":85,"src":145138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[19,145140,145142],{"id":145141},"_2052-常见父项属性","20.5.2 常见父项属性",[125,145144,145145,145148,145151,145154,145157,145160,145163],{},[45,145146,145147],{},"flex-direction：设置主轴的方向",[45,145149,145150],{},"justify-content：设置主轴上的子元素排列方式",[45,145152,145153],{},"flex-wrap：设置子元素是否换行",[45,145155,145156],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[45,145158,145159],{},"align-items：设置侧轴上的子元素排列方式（单行）",[45,145161,145162],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[45,145164,145147],{},[83,145166],{"style":85,"src":145167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[83,145169],{"style":85,"src":145170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[125,145172,145173],{"start":193},[45,145174,145150],{},[83,145176],{"style":85,"src":145177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[24,145179,145180,145183],{},[48,145181,145182],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[24,145185,145186],{},"跟着主轴走",[125,145188,145189],{"start":235},[45,145190,145153],{},[83,145192],{"style":85,"src":145193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[24,145195,145196],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[125,145198,145199],{"start":340},[45,145200,145156],{},[83,145202],{"style":85,"src":145203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[24,145205,145206],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[24,145208,145209],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[125,145211,145212],{"start":346},[45,145213,145159],{},[83,145215],{"style":85,"src":145216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[24,145218,145219],{},"align-items与align-content之间的区别：",[24,145221,145222],{},"单找items，多找content",[83,145224],{"style":85,"src":145225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[125,145227,145228],{"start":352},[45,145229,145162],{},[83,145231],{"style":85,"src":145232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[19,145234,145236],{"id":145235},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[125,145238,145239],{},[45,145240,145241],{},[31,145242,145243],{},"flex 属性",[24,145245,145246],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[83,145248],{"style":85,"src":145249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[24,145251,145252],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[24,145254,145255],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[125,145257,145258],{"start":193},[45,145259,145260,15508,145263],{},[31,145261,145262],{},"align-self",[31,145264,145265],{},"控制子项自己在侧轴上的排列方式",[83,145267],{"style":85,"src":145268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[24,145270,145271],{},"单个子盒子在父盒子侧轴上的排列方式",[125,145273,145274],{"start":235},[45,145275,145276,145278],{},[31,145277,96977],{}," 属性定义项目的排列顺序",[83,145280],{"style":85,"src":145281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[19,145283,145285],{"id":145284},"_2054-背景线性渐变","20.5.4 背景线性渐变",[83,145287],{"style":85,"src":145288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[24,145290,145291],{},"必须要添加浏览器的私有前缀",[19,145293,145295],{"id":145294},"_2055-携程网首页案例","20.5.5 携程网首页案例",[24,145297,145298],{},"学到最重要的知识：",[24,145300,145301],{},"flex处理这样的布局思路",[83,145303],{"style":85,"src":145304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[140,145306,145308],{"className":286,"code":145307,"language":288,"meta":145,"style":145},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[48,145309,145310,145316,145326,145336,145346],{"__ignoreMap":145},[149,145311,145312,145314],{"class":151,"line":152},[149,145313,145055],{"class":162},[149,145315,304],{"class":155},[149,145317,145318,145320,145322,145324],{"class":151,"line":193},[149,145319,1389],{"class":309},[149,145321,313],{"class":155},[149,145323,53180],{"class":309},[149,145325,841],{"class":155},[149,145327,145328,145330,145332,145334],{"class":151,"line":235},[149,145329,145084],{"class":309},[149,145331,313],{"class":155},[149,145333,53293],{"class":309},[149,145335,841],{"class":155},[149,145337,145338,145340,145342,145344],{"class":151,"line":340},[149,145339,145095],{"class":309},[149,145341,313],{"class":155},[149,145343,53293],{"class":309},[149,145345,841],{"class":155},[149,145347,145348],{"class":151,"line":346},[149,145349,355],{"class":155},[24,145351,145352],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[24,145354,145355],{},"使用属性选择器",[83,145357],{"style":85,"src":145358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[24,145360,70573],{},[140,145362,145364],{"className":142,"code":145363,"language":144,"meta":145,"style":145},"\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",[48,145365,145366,145371,145385,145390,145410,145415,145434,145439,145458,145463,145482],{"__ignoreMap":145},[149,145367,145368],{"class":151,"line":152},[149,145369,145370],{"class":295},"\u003C!-- 携程网移动端案例结构 -->\n",[149,145372,145373,145375,145377,145379,145381,145383],{"class":151,"line":193},[149,145374,156],{"class":155},[149,145376,301],{"class":159},[149,145378,55184],{"class":162},[149,145380,166],{"class":155},[149,145382,94004],{"class":169},[149,145384,190],{"class":155},[149,145386,145387],{"class":151,"line":235},[149,145388,145389],{"class":295},"  \u003C!-- 搜索栏 -->\n",[149,145391,145392,145394,145396,145398,145400,145403,145406,145408],{"class":151,"line":340},[149,145393,587],{"class":155},[149,145395,301],{"class":159},[149,145397,55184],{"class":162},[149,145399,166],{"class":155},[149,145401,145402],{"class":169},"\"search-index\"",[149,145404,145405],{"class":155},">...\u003C\u002F",[149,145407,301],{"class":159},[149,145409,190],{"class":155},[149,145411,145412],{"class":151,"line":346},[149,145413,145414],{"class":295},"  \u003C!-- 焦点图 -->\n",[149,145416,145417,145419,145421,145423,145425,145428,145430,145432],{"class":151,"line":352},[149,145418,587],{"class":155},[149,145420,301],{"class":159},[149,145422,55184],{"class":162},[149,145424,166],{"class":155},[149,145426,145427],{"class":169},"\"focus\"",[149,145429,145405],{"class":155},[149,145431,301],{"class":159},[149,145433,190],{"class":155},[149,145435,145436],{"class":151,"line":1021},[149,145437,145438],{"class":295},"  \u003C!-- 主导航 -->\n",[149,145440,145441,145443,145445,145447,145449,145452,145454,145456],{"class":151,"line":1035},[149,145442,587],{"class":155},[149,145444,301],{"class":159},[149,145446,55184],{"class":162},[149,145448,166],{"class":155},[149,145450,145451],{"class":169},"\"local-nav\"",[149,145453,145405],{"class":155},[149,145455,301],{"class":159},[149,145457,190],{"class":155},[149,145459,145460],{"class":151,"line":1054},[149,145461,145462],{"class":295},"  \u003C!-- 子导航 -->\n",[149,145464,145465,145467,145469,145471,145473,145476,145478,145480],{"class":151,"line":1072},[149,145466,587],{"class":155},[149,145468,301],{"class":159},[149,145470,55184],{"class":162},[149,145472,166],{"class":155},[149,145474,145475],{"class":169},"\"nav-common\"",[149,145477,145405],{"class":155},[149,145479,301],{"class":159},[149,145481,190],{"class":155},[149,145483,145484,145486,145488],{"class":151,"line":1090},[149,145485,665],{"class":155},[149,145487,301],{"class":159},[149,145489,190],{"class":155},[24,145491,72137],{},[140,145493,145494],{"className":286,"code":801,"language":288,"meta":145,"style":145},[48,145495,145496,145510,145526],{"__ignoreMap":145},[149,145497,145498,145500,145502,145504,145506,145508],{"class":151,"line":152},[149,145499,504],{"class":159},[149,145501,810],{"class":155},[149,145503,813],{"class":162},[149,145505,166],{"class":325},[149,145507,512],{"class":169},[149,145509,820],{"class":155},[149,145511,145512,145514,145516,145518,145520,145522,145524],{"class":151,"line":193},[149,145513,825],{"class":309},[149,145515,313],{"class":155},[149,145517,830],{"class":309},[149,145519,326],{"class":325},[149,145521,835],{"class":309},[149,145523,838],{"class":309},[149,145525,841],{"class":155},[149,145527,145528],{"class":151,"line":235},[149,145529,355],{"class":155},[24,145531,145532],{},"总代码和效果展示：",[83,145534],{"style":85,"src":145535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[24,145537,70573],{},[140,145539,145540],{"className":142,"code":145363,"language":144,"meta":145,"style":145},[48,145541,145542,145546,145560,145564,145582,145586,145604,145608,145626,145630,145648],{"__ignoreMap":145},[149,145543,145544],{"class":151,"line":152},[149,145545,145370],{"class":295},[149,145547,145548,145550,145552,145554,145556,145558],{"class":151,"line":193},[149,145549,156],{"class":155},[149,145551,301],{"class":159},[149,145553,55184],{"class":162},[149,145555,166],{"class":155},[149,145557,94004],{"class":169},[149,145559,190],{"class":155},[149,145561,145562],{"class":151,"line":235},[149,145563,145389],{"class":295},[149,145565,145566,145568,145570,145572,145574,145576,145578,145580],{"class":151,"line":340},[149,145567,587],{"class":155},[149,145569,301],{"class":159},[149,145571,55184],{"class":162},[149,145573,166],{"class":155},[149,145575,145402],{"class":169},[149,145577,145405],{"class":155},[149,145579,301],{"class":159},[149,145581,190],{"class":155},[149,145583,145584],{"class":151,"line":346},[149,145585,145414],{"class":295},[149,145587,145588,145590,145592,145594,145596,145598,145600,145602],{"class":151,"line":352},[149,145589,587],{"class":155},[149,145591,301],{"class":159},[149,145593,55184],{"class":162},[149,145595,166],{"class":155},[149,145597,145427],{"class":169},[149,145599,145405],{"class":155},[149,145601,301],{"class":159},[149,145603,190],{"class":155},[149,145605,145606],{"class":151,"line":1021},[149,145607,145438],{"class":295},[149,145609,145610,145612,145614,145616,145618,145620,145622,145624],{"class":151,"line":1035},[149,145611,587],{"class":155},[149,145613,301],{"class":159},[149,145615,55184],{"class":162},[149,145617,166],{"class":155},[149,145619,145451],{"class":169},[149,145621,145405],{"class":155},[149,145623,301],{"class":159},[149,145625,190],{"class":155},[149,145627,145628],{"class":151,"line":1054},[149,145629,145462],{"class":295},[149,145631,145632,145634,145636,145638,145640,145642,145644,145646],{"class":151,"line":1072},[149,145633,587],{"class":155},[149,145635,301],{"class":159},[149,145637,55184],{"class":162},[149,145639,166],{"class":155},[149,145641,145475],{"class":169},[149,145643,145405],{"class":155},[149,145645,301],{"class":159},[149,145647,190],{"class":155},[149,145649,145650,145652,145654],{"class":151,"line":1090},[149,145651,665],{"class":155},[149,145653,301],{"class":159},[149,145655,190],{"class":155},[24,145657,72137],{},[140,145659,145660],{"className":142,"code":132325,"language":144,"meta":145,"style":145},[48,145661,145662,145666,145680,145684],{"__ignoreMap":145},[149,145663,145664],{"class":151,"line":152},[149,145665,132332],{"class":295},[149,145667,145668,145670,145672,145674,145676,145678],{"class":151,"line":193},[149,145669,156],{"class":155},[149,145671,301],{"class":159},[149,145673,55184],{"class":162},[149,145675,166],{"class":155},[149,145677,132345],{"class":169},[149,145679,190],{"class":155},[149,145681,145682],{"class":151,"line":235},[149,145683,132352],{"class":155},[149,145685,145686,145688,145690],{"class":151,"line":340},[149,145687,665],{"class":155},[149,145689,301],{"class":159},[149,145691,190],{"class":155},[1783,145693,1785],{},{"title":145,"searchDepth":193,"depth":193,"links":145695},[145696,145697,145701,145702,145703],{"id":144840,"depth":193,"text":144841},{"id":144872,"depth":193,"text":144873,"children":145698},[145699,145700],{"id":144876,"depth":235,"text":144877},{"id":144893,"depth":235,"text":144894},{"id":144912,"depth":193,"text":144913},{"id":144919,"depth":193,"text":144920},{"id":145006,"depth":193,"text":145007,"children":145704},[145705,145706,145707,145708,145709],{"id":145013,"depth":235,"text":145014},{"id":145141,"depth":235,"text":145142},{"id":145235,"depth":235,"text":145236},{"id":145284,"depth":235,"text":145285},{"id":145294,"depth":235,"text":145295},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144832,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145716,"title":145717,"body":145718,"description":1797,"extension":1798,"meta":146945,"navigation":1800,"path":146946,"seo":146947,"stem":146948,"__hash__":146949},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145719,"toc":146923},[145720,145723,145727,145731,145734,145737,145741,145746,145749,145752,145755,145758,145761,145818,145821,145826,145829,145832,145836,145847,145851,145854,145857,145864,145869,145873,145876,145882,145885,145889,145892,145899,145902,145905,145912,145915,145922,145925,145928,145935,145938,145941,145943,145960,145964,145967,145970,145973,145977,145980,145983,145986,145989,145992,145995,145997,146000,146003,146065,146068,146178,146185,146191,146194,146197,146201,146204,146208,146213,146216,146223,146226,146232,146237,146240,146243,146246,146249,146252,146255,146258,146261,146317,146319,146345,146349,146352,146355,146358,146366,146369,146372,146376,146432,146435,146439,146445,146456,146459,146464,146467,146470,146476,146479,146482,146485,146488,146491,146494,146497,146500,146525,146531,146534,146537,146540,146543,146546,146549,146554,146557,146560,146563,146571,146574,146581,146584,146587,146589,146613,146615,146618,146621,146624,146627,146630,146633,146636,146670,146673,146676,146710,146717,146720,146723,146726,146729,146732,146735,146742,146745,146748,146751,146754,146761,146764,146767,146774,146777,146780,146784,146787,146790,146793,146796,146799,146802,146805,146808,146810,146834,146836,146860,146864,146875,146878,146881,146884,146887,146890,146893,146896,146899,146902,146905,146908,146911,146914,146917,146920],[10,145721,145717],{"id":145722},"_21-移动端布局实战下篇",[14,145724,145726],{"id":145725},"_211-rem适配布局","21.1 rem适配布局",[19,145728,145730],{"id":145729},"_2111-rem单位","21.1.1 rem单位",[83,145732],{"style":85,"src":145733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[24,145735,145736],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[19,145738,145740],{"id":145739},"_2112-媒体查询","21.1.2 媒体查询",[125,145742,145743],{},[45,145744,145745],{},"参数介绍",[83,145747],{"style":85,"src":145748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[83,145750],{"style":85,"src":145751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[83,145753],{"style":85,"src":145754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[83,145756],{"style":85,"src":145757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[83,145759],{"style":85,"src":145760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[140,145762,145764],{"className":286,"code":145763,"language":288,"meta":145,"style":145},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[48,145765,145766,145771,145790,145797,145810,145814],{"__ignoreMap":145},[149,145767,145768],{"class":151,"line":152},[149,145769,145770],{"class":295},"\u002F* 媒体查询 *\u002F\n",[149,145772,145773,145776,145778,145781,145783,145786,145788],{"class":151,"line":193},[149,145774,145775],{"class":325},"@media",[149,145777,3378],{"class":155},[149,145779,145780],{"class":309},"max-width",[149,145782,313],{"class":155},[149,145784,145785],{"class":309},"768",[149,145787,326],{"class":325},[149,145789,14155],{"class":155},[149,145791,145792,145795],{"class":151,"line":235},[149,145793,145794],{"class":162},"  .container",[149,145796,304],{"class":155},[149,145798,145799,145802,145804,145806,145808],{"class":151,"line":340},[149,145800,145801],{"class":309},"    width",[149,145803,313],{"class":155},[149,145805,322],{"class":309},[149,145807,2191],{"class":325},[149,145809,841],{"class":155},[149,145811,145812],{"class":151,"line":346},[149,145813,129021],{"class":155},[149,145815,145816],{"class":151,"line":352},[149,145817,355],{"class":155},[24,145819,145820],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[125,145822,145823],{"start":193},[45,145824,145825],{},"引入资源",[83,145827],{"style":85,"src":145828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[24,145830,145831],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[19,145833,145835],{"id":145834},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[42,145837,145838,145841,145844],{},[45,145839,145840],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[45,145842,145843],{},"媒体查询可以根据不同设备宽度来修改样式",[45,145845,145846],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145848,145850],{"id":145849},"_212-less基础","21.2 Less基础",[24,145852,145853],{},"css冗余度较高，不利于复用，没有很好的计算能力",[24,145855,145856],{},"Less可以解决该问题，它是css的扩展语言",[24,145858,145859,145860],{},"Less中文网址： ",[2102,145861,145862],{"href":145862,"rel":145863},"http:\u002F\u002Flesscss.cn\u002F",[25573],[24,145865,145866],{},[31,145867,145868],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[19,145870,145872],{"id":145871},"_2121-less安装","21.2.1 less安装",[24,145874,145875],{},"如果使用vscode，则无需进行下方安装步骤",[24,145877,145878],{},[2102,145879,145880],{"href":145880,"rel":145881},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25573],[83,145883],{"style":85,"src":145884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[19,145886,145888],{"id":145887},"_2122-less使用","21.2.2 less使用",[24,145890,145891],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[125,145893,145894],{},[45,145895,145896],{},[31,145897,145898],{},"Less 变量",[83,145900],{"style":85,"src":145901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[83,145903],{"style":85,"src":145904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[125,145906,145907],{"start":193},[45,145908,145909],{},[31,145910,145911],{},"Less 编译",[83,145913],{"style":85,"src":145914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[125,145916,145917],{"start":235},[45,145918,145919],{},[31,145920,145921],{},"Less 嵌套",[83,145923],{"style":85,"src":145924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[83,145926],{"style":85,"src":145927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[125,145929,145930],{"start":340},[45,145931,145932],{},[31,145933,145934],{},"Less 运算",[83,145936],{"style":85,"src":145937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[24,145939,145940],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[24,145942,89],{},[42,145944,145945,145948,145951,145954,145957],{},[45,145946,145947],{},"乘号（*）和除号（\u002F）的写法",[45,145949,145950],{},"运算符中间左右有个空格隔开 1px + 5",[45,145952,145953],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[45,145955,145956],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[45,145958,145959],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145961,145963],{"id":145962},"_213-rem-适配方案","21.3 rem 适配方案",[24,145965,145966],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[24,145968,145969],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[83,145971],{"style":85,"src":145972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[19,145974,145976],{"id":145975},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[24,145978,145979],{},"rem + 媒体查询 + less 技术",[83,145981],{"style":85,"src":145982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[24,145984,145985],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[24,145987,145988],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[83,145990],{"style":85,"src":145991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[24,145993,145994],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[24,145996,16346],{},[83,145998],{"style":85,"src":145999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[24,146001,146002],{},"index.html:",[140,146004,146006],{"className":286,"code":146005,"language":288,"meta":145,"style":145},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[48,146007,146008,146013,146019,146035,146039,146045,146061],{"__ignoreMap":145},[149,146009,146010],{"class":151,"line":152},[149,146011,146012],{"class":295},"\u002F* rem 适配方案 *\u002F\n",[149,146014,146015,146017],{"class":151,"line":193},[149,146016,52341],{"class":159},[149,146018,304],{"class":155},[149,146020,146021,146023,146025,146028,146030,146032],{"class":151,"line":235},[149,146022,72310],{"class":309},[149,146024,313],{"class":155},[149,146026,146027],{"class":309},"62.5",[149,146029,2191],{"class":325},[149,146031,132084],{"class":155},[149,146033,146034],{"class":295},"\u002F* 1rem = 10px *\u002F\n",[149,146036,146037],{"class":151,"line":340},[149,146038,355],{"class":155},[149,146040,146041,146043],{"class":151,"line":346},[149,146042,1554],{"class":162},[149,146044,304],{"class":155},[149,146046,146047,146049,146051,146053,146056,146058],{"class":151,"line":352},[149,146048,72252],{"class":309},[149,146050,313],{"class":155},[149,146052,2309],{"class":309},[149,146054,146055],{"class":325},"rem",[149,146057,132084],{"class":155},[149,146059,146060],{"class":295},"\u002F* 100px *\u002F\n",[149,146062,146063],{"class":151,"line":1021},[149,146064,355],{"class":155},[24,146066,146067],{},"common.less",[140,146069,146071],{"className":286,"code":146070,"language":288,"meta":145,"style":145},"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",[48,146072,146073,146079,146094,146098,146104,146118,146122,146126,146130,146136,146150,146154,146160,146174],{"__ignoreMap":145},[149,146074,146075,146077],{"class":151,"line":152},[149,146076,52341],{"class":159},[149,146078,304],{"class":155},[149,146080,146081,146083,146085,146087,146089,146091],{"class":151,"line":193},[149,146082,72310],{"class":309},[149,146084,313],{"class":155},[149,146086,146027],{"class":309},[149,146088,2191],{"class":325},[149,146090,27776],{"class":155},[149,146092,146093],{"class":295},"\u002F* 10px *\u002F\n",[149,146095,146096],{"class":151,"line":235},[149,146097,355],{"class":155},[149,146099,146100,146102],{"class":151,"line":340},[149,146101,301],{"class":159},[149,146103,304],{"class":155},[149,146105,146106,146108,146110,146112,146114,146116],{"class":151,"line":346},[149,146107,72252],{"class":309},[149,146109,313],{"class":155},[149,146111,2309],{"class":309},[149,146113,146055],{"class":325},[149,146115,27776],{"class":155},[149,146117,146060],{"class":295},[149,146119,146120],{"class":151,"line":352},[149,146121,355],{"class":155},[149,146123,146124],{"class":151,"line":1021},[149,146125,1000],{"class":155},[149,146127,146128],{"class":151,"line":1035},[149,146129,146012],{"class":295},[149,146131,146132,146134],{"class":151,"line":1054},[149,146133,52341],{"class":159},[149,146135,304],{"class":155},[149,146137,146138,146140,146142,146144,146146,146148],{"class":151,"line":1072},[149,146139,72310],{"class":309},[149,146141,313],{"class":155},[149,146143,146027],{"class":309},[149,146145,2191],{"class":325},[149,146147,132084],{"class":155},[149,146149,146034],{"class":295},[149,146151,146152],{"class":151,"line":1090},[149,146153,355],{"class":155},[149,146155,146156,146158],{"class":151,"line":1633},[149,146157,1554],{"class":162},[149,146159,304],{"class":155},[149,146161,146162,146164,146166,146168,146170,146172],{"class":151,"line":1644},[149,146163,72252],{"class":309},[149,146165,313],{"class":155},[149,146167,2309],{"class":309},[149,146169,146055],{"class":325},[149,146171,132084],{"class":155},[149,146173,146060],{"class":295},[149,146175,146176],{"class":151,"line":3348},[149,146177,355],{"class":155},[24,146179,146180,146181,146184],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25262,146182,146183],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[140,146186,146189],{"className":146187,"code":146188,"language":1655},[1653],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[48,146190,146188],{"__ignoreMap":145},[24,146192,146193],{},"less保存时会自动变成.css文件",[24,146195,146196],{},"好好搞懂上述代码写法",[19,146198,146200],{"id":146199},"_2132-样式导入样式","21.3.2 样式导入样式",[83,146202],{"style":85,"src":146203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[19,146205,146207],{"id":146206},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[125,146209,146210],{},[45,146211,146212],{},"准备工作",[83,146214],{"style":85,"src":146215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[24,146217,146218,146219],{},"github地址：",[2102,146220,146221],{"href":146221,"rel":146222},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25573],[24,146224,146225],{},"下载之后，将index.js文件拖到项目中就可以了",[24,146227,146228,146229],{},"js文件引入到index.html中使用的是",[48,146230,146231],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[125,146233,146234],{"start":193},[45,146235,146236],{},"vscode插件",[83,146238],{"style":85,"src":146239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[24,146241,146242],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[24,146244,146245],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[83,146247],{"style":85,"src":146248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[24,146250,146251],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[83,146253],{"style":85,"src":146254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[24,146256,146257],{},"修改成75就可以，alt+z为快捷键",[24,146259,146260],{},"index.css：",[140,146262,146263],{"className":286,"code":146005,"language":288,"meta":145,"style":145},[48,146264,146265,146269,146275,146289,146293,146299,146313],{"__ignoreMap":145},[149,146266,146267],{"class":151,"line":152},[149,146268,146012],{"class":295},[149,146270,146271,146273],{"class":151,"line":193},[149,146272,52341],{"class":159},[149,146274,304],{"class":155},[149,146276,146277,146279,146281,146283,146285,146287],{"class":151,"line":235},[149,146278,72310],{"class":309},[149,146280,313],{"class":155},[149,146282,146027],{"class":309},[149,146284,2191],{"class":325},[149,146286,132084],{"class":155},[149,146288,146034],{"class":295},[149,146290,146291],{"class":151,"line":340},[149,146292,355],{"class":155},[149,146294,146295,146297],{"class":151,"line":346},[149,146296,1554],{"class":162},[149,146298,304],{"class":155},[149,146300,146301,146303,146305,146307,146309,146311],{"class":151,"line":352},[149,146302,72252],{"class":309},[149,146304,313],{"class":155},[149,146306,2309],{"class":309},[149,146308,146055],{"class":325},[149,146310,132084],{"class":155},[149,146312,146060],{"class":295},[149,146314,146315],{"class":151,"line":1021},[149,146316,355],{"class":155},[24,146318,146002],{},[140,146320,146321],{"className":286,"code":128631,"language":288,"meta":145,"style":145},[48,146322,146323,146329,146341],{"__ignoreMap":145},[149,146324,146325,146327],{"class":151,"line":152},[149,146326,53499],{"class":159},[149,146328,304],{"class":155},[149,146330,146331,146333,146335,146337,146339],{"class":151,"line":193},[149,146332,72310],{"class":309},[149,146334,313],{"class":155},[149,146336,2464],{"class":309},[149,146338,326],{"class":325},[149,146340,841],{"class":155},[149,146342,146343],{"class":151,"line":235},[149,146344,355],{"class":155},[14,146346,146348],{"id":146347},"_214-响应式开发","21.4 响应式开发",[24,146350,146351],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[83,146353],{"style":85,"src":146354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[24,146356,146357],{},"做法：",[42,146359,146360,146363],{},[45,146361,146362],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[45,146364,146365],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[83,146367],{"style":85,"src":146368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[24,146370,146371],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[19,146373,146375],{"id":146374},"_2141-简单代码示范","21.4.1 简单代码示范",[140,146377,146378],{"className":286,"code":146005,"language":288,"meta":145,"style":145},[48,146379,146380,146384,146390,146404,146408,146414,146428],{"__ignoreMap":145},[149,146381,146382],{"class":151,"line":152},[149,146383,146012],{"class":295},[149,146385,146386,146388],{"class":151,"line":193},[149,146387,52341],{"class":159},[149,146389,304],{"class":155},[149,146391,146392,146394,146396,146398,146400,146402],{"class":151,"line":235},[149,146393,72310],{"class":309},[149,146395,313],{"class":155},[149,146397,146027],{"class":309},[149,146399,2191],{"class":325},[149,146401,132084],{"class":155},[149,146403,146034],{"class":295},[149,146405,146406],{"class":151,"line":340},[149,146407,355],{"class":155},[149,146409,146410,146412],{"class":151,"line":346},[149,146411,1554],{"class":162},[149,146413,304],{"class":155},[149,146415,146416,146418,146420,146422,146424,146426],{"class":151,"line":352},[149,146417,72252],{"class":309},[149,146419,313],{"class":155},[149,146421,2309],{"class":309},[149,146423,146055],{"class":325},[149,146425,132084],{"class":155},[149,146427,146060],{"class":295},[149,146429,146430],{"class":151,"line":1021},[149,146431,355],{"class":155},[24,146433,146434],{},"父盒子一般命名为container",[19,146436,146438],{"id":146437},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[24,146440,146441,146442],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[31,146443,146444],{},"使得 Web 开发更加快捷",[42,146446,146447],{},[45,146448,146449,146450],{},"官网：",[31,146451,146452],{},[2102,146453,146454],{"href":146454,"rel":146455},"http:\u002F\u002Fgetbootstrap.com\u002F",[25573],[24,146457,146458],{},"可以直接去官网拿现成的东西",[125,146460,146461],{},[45,146462,146463],{},"Bootstrap的使用",[24,146465,146466],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[24,146468,146469],{},"Bootstrap 使用四步曲：",[24,146471,146472,146475],{},[31,146473,146474],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[83,146477],{"style":85,"src":146478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[24,146480,146481],{},"打开Bootstrap官网，然后下载",[83,146483],{"style":85,"src":146484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[83,146486],{"style":85,"src":146487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[24,146489,146490],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[24,146492,146493],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[24,146495,146496],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[83,146498],{"style":85,"src":146499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[140,146501,146503],{"className":286,"code":146502,"language":288,"meta":145,"style":145},".center {\n  color: red;\n}\n",[48,146504,146505,146511,146521],{"__ignoreMap":145},[149,146506,146507,146509],{"class":151,"line":152},[149,146508,977],{"class":162},[149,146510,304],{"class":155},[149,146512,146513,146515,146517,146519],{"class":151,"line":193},[149,146514,984],{"class":309},[149,146516,313],{"class":155},[149,146518,989],{"class":309},[149,146520,841],{"class":155},[149,146522,146523],{"class":151,"line":235},[149,146524,355],{"class":155},[24,146526,146527,146530],{},[48,146528,146529],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[83,146532],{"style":85,"src":146533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[83,146535],{"style":85,"src":146536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[83,146538],{"style":85,"src":146539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[24,146541,146542],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[83,146544],{"style":85,"src":146545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[24,146547,146548],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[125,146550,146551],{"start":193},[45,146552,146553],{},"布局容器",[83,146555],{"style":85,"src":146556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[24,146558,146559],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[24,146561,146562],{},"container-fluid用于移动式布局比较方便",[125,146564,146565],{"start":235},[45,146566,146567,146568],{},"bootstrap ",[31,146569,146570],{},"栅格系统原理",[83,146572],{"style":85,"src":146573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[125,146575,146576],{"start":340},[45,146577,146578],{},[31,146579,146580],{},"栅格选项参数",[83,146582],{"style":85,"src":146583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[24,146585,146586],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[24,146588,16346],{},[140,146590,146591],{"className":286,"code":146502,"language":288,"meta":145,"style":145},[48,146592,146593,146599,146609],{"__ignoreMap":145},[149,146594,146595,146597],{"class":151,"line":152},[149,146596,977],{"class":162},[149,146598,304],{"class":155},[149,146600,146601,146603,146605,146607],{"class":151,"line":193},[149,146602,984],{"class":309},[149,146604,313],{"class":155},[149,146606,989],{"class":309},[149,146608,841],{"class":155},[149,146610,146611],{"class":151,"line":235},[149,146612,355],{"class":155},[24,146614,137258],{},[83,146616],{"style":85,"src":146617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[24,146619,146620],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[24,146622,146623],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[24,146625,146626],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[24,146628,146629],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[24,146631,146632],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[24,146634,146635],{},"汇总展示说明：",[140,146637,146638],{"className":142,"code":132325,"language":144,"meta":145,"style":145},[48,146639,146640,146644,146658,146662],{"__ignoreMap":145},[149,146641,146642],{"class":151,"line":152},[149,146643,132332],{"class":295},[149,146645,146646,146648,146650,146652,146654,146656],{"class":151,"line":193},[149,146647,156],{"class":155},[149,146649,301],{"class":159},[149,146651,55184],{"class":162},[149,146653,166],{"class":155},[149,146655,132345],{"class":169},[149,146657,190],{"class":155},[149,146659,146660],{"class":151,"line":235},[149,146661,132352],{"class":155},[149,146663,146664,146666,146668],{"class":151,"line":340},[149,146665,665],{"class":155},[149,146667,301],{"class":159},[149,146669,190],{"class":155},[83,146671],{"style":85,"src":146672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[24,146674,146675],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[140,146677,146678],{"className":142,"code":132325,"language":144,"meta":145,"style":145},[48,146679,146680,146684,146698,146702],{"__ignoreMap":145},[149,146681,146682],{"class":151,"line":152},[149,146683,132332],{"class":295},[149,146685,146686,146688,146690,146692,146694,146696],{"class":151,"line":193},[149,146687,156],{"class":155},[149,146689,301],{"class":159},[149,146691,55184],{"class":162},[149,146693,166],{"class":155},[149,146695,132345],{"class":169},[149,146697,190],{"class":155},[149,146699,146700],{"class":151,"line":235},[149,146701,132352],{"class":155},[149,146703,146704,146706,146708],{"class":151,"line":340},[149,146705,665],{"class":155},[149,146707,301],{"class":159},[149,146709,190],{"class":155},[125,146711,146712],{"start":346},[45,146713,146714],{},[31,146715,146716],{},"列嵌套",[83,146718],{"style":85,"src":146719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[24,146721,146722],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[24,146724,146725],{},"没加row内部这样：",[83,146727],{"style":85,"src":146728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[24,146730,146731],{},"加上row之后内部为：",[83,146733],{"style":85,"src":146734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[125,146736,146737],{"start":352},[45,146738,146739],{},[31,146740,146741],{},"列偏移",[83,146743],{"style":85,"src":146744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[24,146746,146747],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[24,146749,146750],{},"要加偏移量，即偏移份数",[24,146752,146753],{},"偏移的份数=12-两个盒子的份数",[125,146755,146756],{"start":1021},[45,146757,146758],{},[31,146759,146760],{},"列排序",[83,146762],{"style":85,"src":146763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[24,146765,146766],{},"pull拉左；push推右",[125,146768,146769],{"start":1035},[45,146770,146771],{},[31,146772,146773],{},"响应式工具",[83,146775],{"style":85,"src":146776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[24,146778,146779],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[19,146781,146783],{"id":146782},"_2143-响应式小项目","21.4.3 响应式小项目",[24,146785,146786],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[24,146788,146789],{},"ul {",[24,146791,146792],{},"list-style: none;",[24,146794,146795],{},"margin:0;",[24,146797,146798],{},"padding:0; }",[83,146800],{"style":85,"src":146801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[83,146803],{"style":85,"src":146804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[24,146806,146807],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[24,146809,70573],{},[140,146811,146812],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,146813,146814,146820,146830],{"__ignoreMap":145},[149,146815,146816,146818],{"class":151,"line":152},[149,146817,1554],{"class":162},[149,146819,304],{"class":155},[149,146821,146822,146824,146826,146828],{"class":151,"line":193},[149,146823,1561],{"class":309},[149,146825,313],{"class":155},[149,146827,1566],{"class":309},[149,146829,841],{"class":155},[149,146831,146832],{"class":151,"line":235},[149,146833,355],{"class":155},[24,146835,72137],{},[140,146837,146838],{"className":286,"code":140658,"language":288,"meta":145,"style":145},[48,146839,146840,146846,146856],{"__ignoreMap":145},[149,146841,146842,146844],{"class":151,"line":152},[149,146843,1554],{"class":162},[149,146845,304],{"class":155},[149,146847,146848,146850,146852,146854],{"class":151,"line":193},[149,146849,1561],{"class":309},[149,146851,313],{"class":155},[149,146853,1566],{"class":309},[149,146855,841],{"class":155},[149,146857,146858],{"class":151,"line":235},[149,146859,355],{"class":155},[14,146861,146863],{"id":146862},"_215-swiper-插件使用","21.5 swiper 插件使用",[42,146865,146866,146869,146872],{},[45,146867,146868],{},"下载需要的css和js文件html页面中 引入相关文件",[45,146870,146871],{},"官网找到类似案例，复制html结构，css样式 js 语法",[45,146873,146874],{},"根据需求定制修改模块",[83,146876],{"style":85,"src":146877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[24,146879,146880],{},"解压后将这两部分放到项目中",[83,146882],{"style":85,"src":146883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[24,146885,146886],{},"这个插件可以帮助我们实现轮播图效果",[24,146888,146889],{},"用法：",[83,146891],{"style":85,"src":146892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[24,146894,146895],{},"找到自己喜欢的",[83,146897],{"style":85,"src":146898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[24,146900,146901],{},"右键，查看网页源代码",[83,146903],{"style":85,"src":146904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[24,146906,146907],{},"复制人家的结构内容",[24,146909,146910],{},"然后去看API文档：",[83,146912],{"style":85,"src":146913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[24,146915,146916],{},"可以看看如何修改样式",[24,146918,146919],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1783,146921,146922],{},"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":145,"searchDepth":193,"depth":193,"links":146924},[146925,146930,146934,146939,146944],{"id":145725,"depth":193,"text":145726,"children":146926},[146927,146928,146929],{"id":145729,"depth":235,"text":145730},{"id":145739,"depth":235,"text":145740},{"id":145834,"depth":235,"text":145835},{"id":145849,"depth":193,"text":145850,"children":146931},[146932,146933],{"id":145871,"depth":235,"text":145872},{"id":145887,"depth":235,"text":145888},{"id":145962,"depth":193,"text":145963,"children":146935},[146936,146937,146938],{"id":145975,"depth":235,"text":145976},{"id":146199,"depth":235,"text":146200},{"id":146206,"depth":235,"text":146207},{"id":146347,"depth":193,"text":146348,"children":146940},[146941,146942,146943],{"id":146374,"depth":235,"text":146375},{"id":146437,"depth":235,"text":146438},{"id":146782,"depth":235,"text":146783},{"id":146862,"depth":193,"text":146863},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145717,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146951,"title":146952,"body":146953,"description":1797,"extension":1798,"meta":147173,"navigation":1800,"path":147174,"seo":147175,"stem":147176,"__hash__":147177},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146954,"toc":147169},[146955,146958,146962,146965,146980,146985,146988,146993,147028,147033,147045,147050,147063,147068,147085,147090,147110,147115,147133,147136,147139,147142,147145,147149,147152,147155,147158,147161,147164,147167],[10,146956,146952],{"id":146957},"_22-代码提交与新型相对单位",[14,146959,146961],{"id":146960},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[24,146963,146964],{},"法1：",[125,146966,146967,146974,146977],{},[45,146968,146969,146970],{},"登录网站注册：",[2102,146971,146972],{"href":146972,"rel":146973},"https:\u002F\u002Fgitee.com\u002F",[25573],[45,146975,146976],{},"码云创建新的仓库",[45,146978,146979],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[42,146981,146982],{},[45,146983,146984],{},"在网站根目录右键-- Git Bash Here",[83,146986],{"style":85,"src":146987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[42,146989,146990],{},[45,146991,146992],{},"如果是第一次利用git提交，请配置好全局选项",[140,146994,146996],{"className":118975,"code":146995,"language":118977,"meta":145,"style":145},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[48,146997,146998,147014],{"__ignoreMap":145},[149,146999,147000,147003,147005,147008,147011],{"class":151,"line":152},[149,147001,147002],{"class":162},"git",[149,147004,121398],{"class":169},[149,147006,147007],{"class":309}," --global",[149,147009,147010],{"class":169}," user.name",[149,147012,147013],{"class":169}," \"你的名字\"\n",[149,147015,147016,147018,147020,147022,147025],{"class":151,"line":193},[149,147017,147002],{"class":162},[149,147019,121398],{"class":169},[149,147021,147007],{"class":309},[149,147023,147024],{"class":169}," user.email",[149,147026,147027],{"class":169}," \"你的邮箱\"\n",[42,147029,147030],{},[45,147031,147032],{},"初始化仓库",[140,147034,147036],{"className":118975,"code":147035,"language":118977,"meta":145,"style":145},"git init\n",[48,147037,147038],{"__ignoreMap":145},[149,147039,147040,147042],{"class":151,"line":152},[149,147041,147002],{"class":162},[149,147043,147044],{"class":169}," init\n",[42,147046,147047],{},[45,147048,147049],{},"把本地文件放到暂存区",[140,147051,147053],{"className":118975,"code":147052,"language":118977,"meta":145,"style":145},"git add .\n",[48,147054,147055],{"__ignoreMap":145},[149,147056,147057,147059,147061],{"class":151,"line":152},[149,147058,147002],{"class":162},[149,147060,6925],{"class":169},[149,147062,30447],{"class":169},[42,147064,147065],{},[45,147066,147067],{},"把本地文件放到本地仓库里面",[140,147069,147071],{"className":118975,"code":147070,"language":118977,"meta":145,"style":145},"git commit -m \"first commit\"\n",[48,147072,147073],{"__ignoreMap":145},[149,147074,147075,147077,147080,147082],{"class":151,"line":152},[149,147076,147002],{"class":162},[149,147078,147079],{"class":169}," commit",[149,147081,102562],{"class":309},[149,147083,147084],{"class":169}," \"first commit\"\n",[42,147086,147087],{},[45,147088,147089],{},"链接远程仓库",[140,147091,147093],{"className":118975,"code":147092,"language":118977,"meta":145,"style":145},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[48,147094,147095],{"__ignoreMap":145},[149,147096,147097,147099,147102,147104,147107],{"class":151,"line":152},[149,147098,147002],{"class":162},[149,147100,147101],{"class":169}," remote",[149,147103,6925],{"class":169},[149,147105,147106],{"class":169}," origin",[149,147108,147109],{"class":169}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[42,147111,147112],{},[45,147113,147114],{},"把本地仓库的文件推送到远程仓库 push",[140,147116,147118],{"className":118975,"code":147117,"language":118977,"meta":145,"style":145},"git push -u origin master\n",[48,147119,147120],{"__ignoreMap":145},[149,147121,147122,147124,147126,147128,147130],{"class":151,"line":152},[149,147123,147002],{"class":162},[149,147125,30722],{"class":169},[149,147127,29996],{"class":309},[149,147129,147106],{"class":169},[149,147131,147132],{"class":169}," master\n",[83,147134],{"style":85,"src":147135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[24,147137,147138],{},"上方方法暂未实现，后边学完git后在整",[24,147140,147141],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[83,147143],{"style":85,"src":147144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147146,147148],{"id":147147},"_222-新型相对单位","22.2 新型相对单位",[83,147150],{"style":85,"src":147151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[83,147153],{"style":85,"src":147154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[24,147156,147157],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[24,147159,147160],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[83,147162],{"style":85,"src":147163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[24,147165,147166],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1783,147168,25666],{},{"title":145,"searchDepth":193,"depth":193,"links":147170},[147171,147172],{"id":146960,"depth":193,"text":146961},{"id":147147,"depth":193,"text":147148},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146952,"description":1797},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147179,"title":147180,"body":147181,"description":147185,"extension":1798,"meta":147186,"navigation":1800,"path":147187,"seo":147188,"stem":147189,"__hash__":147190},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147182,"toc":147183},[],{"title":145,"searchDepth":193,"depth":193,"links":147184},[],"自己正经开始学编程的第一门语言！",{"category":94519},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147180,"description":147185},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147192,"title":147193,"body":147194,"description":1797,"extension":1798,"meta":148341,"navigation":1800,"path":148342,"seo":148343,"stem":148344,"__hash__":148345},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147195,"toc":148317},[147196,147199,147203,147206,147209,147234,147237,147243,147247,147250,147277,147280,147320,147323,147335,147338,147344,147348,147352,147379,147396,147403,147407,147410,147436,147439,147443,147446,147486,147489,147506,147512,147516,147521,147565,147568,147586,147589,147657,147661,147668,147671,147686,147689,147698,147701,147712,147715,147724,147727,147744,147747,147762,147766,147770,147773,147775,147795,147799,147802,147805,147816,147819,147825,147829,147835,147862,147865,147877,147880,147891,147894,147900,147904,147910,147960,147963,148005,148008,148041,148044,148078,148082,148085,148105,148108,148144,148147,148160,148164,148168,148174,148177,148190,148194,148197,148203,148206,148210,148213,148216,148265,148269,148285,148291,148298,148304,148314],[10,147197,147193],{"id":147198},"_1-python环境与第一个程序",[14,147200,147202],{"id":147201},"_11-什么是python","1.1 什么是Python",[24,147204,147205],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[24,147207,147208],{},"理解 Python 时抓住三个关键词：",[125,147210,147211,147214,147217],{},[45,147212,147213],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[45,147215,147216],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[45,147218,147219,147220,2077,147223,2077,147226,2077,147229,2077,147231,30091],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[48,147221,147222],{},"os",[48,147224,147225],{},"sys",[48,147227,147228],{},"json",[48,147230,59551],{},[48,147232,147233],{},"datetime",[24,147235,147236],{},"Python 程序的运行链路：",[140,147238,147241],{"className":147239,"code":147240,"language":1655,"meta":145},[1653],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[48,147242,147240],{"__ignoreMap":145},[14,147244,147246],{"id":147245},"_12-python解释器","1.2 Python解释器",[24,147248,147249],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[140,147251,147253],{"className":25530,"code":147252,"language":25532,"meta":145,"style":145},"python --version\npython3 --version\npython\npython3\n",[48,147254,147255,147261,147267,147272],{"__ignoreMap":145},[149,147256,147257,147259],{"class":151,"line":152},[149,147258,32086],{"class":162},[149,147260,28002],{"class":309},[149,147262,147263,147265],{"class":151,"line":193},[149,147264,102559],{"class":162},[149,147266,28002],{"class":309},[149,147268,147269],{"class":151,"line":235},[149,147270,147271],{"class":162},"python\n",[149,147273,147274],{"class":151,"line":340},[149,147275,147276],{"class":162},"python3\n",[24,147278,147279],{},"进入交互模式后，可以直接输入表达式：",[140,147281,147283],{"className":32084,"code":147282,"language":32086,"meta":145,"style":145},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[48,147284,147285,147296,147301,147315],{"__ignoreMap":145},[149,147286,147287,147290,147292,147294],{"class":151,"line":152},[149,147288,147289],{"class":325},">>>",[149,147291,26827],{"class":309},[149,147293,47272],{"class":325},[149,147295,49429],{"class":309},[149,147297,147298],{"class":151,"line":193},[149,147299,147300],{"class":309},"3\n",[149,147302,147303,147305,147308,147310,147313],{"class":151,"line":235},[149,147304,147289],{"class":325},[149,147306,147307],{"class":309}," print",[149,147309,319],{"class":155},[149,147311,147312],{"class":169},"\"hello python\"",[149,147314,1878],{"class":155},[149,147316,147317],{"class":151,"line":340},[149,147318,147319],{"class":155},"hello python\n",[24,147321,147322],{},"退出交互模式：",[140,147324,147326],{"className":32084,"code":147325,"language":32086,"meta":145,"style":145},"exit()\n",[48,147327,147328],{"__ignoreMap":145},[149,147329,147330,147333],{"class":151,"line":152},[149,147331,147332],{"class":309},"exit",[149,147334,3695],{"class":155},[24,147336,147337],{},"或使用快捷键：",[140,147339,147342],{"className":147340,"code":147341,"language":1655,"meta":145},[1653],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[48,147343,147341],{"__ignoreMap":145},[14,147345,147347],{"id":147346},"_13-安装python","1.3 安装Python",[19,147349,147351],{"id":147350},"_131-windows安装","1.3.1 Windows安装",[125,147353,147354,147361,147364,147370,147376],{},[45,147355,147356,147357],{},"打开 Python 官网：",[2102,147358,147359],{"href":147359,"rel":147360},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25573],[45,147362,147363],{},"下载 Windows Installer。",[45,147365,147366,147367,30091],{},"安装时勾选 ",[48,147368,147369],{},"Add Python to PATH",[45,147371,147372,147373,30091],{},"点击 ",[48,147374,147375],{},"Install Now",[45,147377,147378],{},"安装完成后打开命令提示符验证：",[140,147380,147382],{"className":25530,"code":147381,"language":25532,"meta":145,"style":145},"python --version\npip --version\n",[48,147383,147384,147390],{"__ignoreMap":145},[149,147385,147386,147388],{"class":151,"line":152},[149,147387,32086],{"class":162},[149,147389,28002],{"class":309},[149,147391,147392,147394],{"class":151,"line":193},[149,147393,25539],{"class":162},[149,147395,28002],{"class":309},[24,147397,147398,147399,147402],{},"如果提示 ",[48,147400,147401],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[19,147404,147406],{"id":147405},"_132-macos安装","1.3.2 macOS安装",[24,147408,147409],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[140,147411,147413],{"className":25530,"code":147412,"language":25532,"meta":145,"style":145},"brew install python\npython3 --version\npip3 --version\n",[48,147414,147415,147424,147430],{"__ignoreMap":145},[149,147416,147417,147420,147422],{"class":151,"line":152},[149,147418,147419],{"class":162},"brew",[149,147421,25542],{"class":169},[149,147423,125997],{"class":169},[149,147425,147426,147428],{"class":151,"line":193},[149,147427,102559],{"class":162},[149,147429,28002],{"class":309},[149,147431,147432,147434],{"class":151,"line":235},[149,147433,121379],{"class":162},[149,147435,28002],{"class":309},[24,147437,147438],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[19,147440,147442],{"id":147441},"_133-linux安装","1.3.3 Linux安装",[24,147444,147445],{},"Ubuntu\u002FDebian：",[140,147447,147449],{"className":25530,"code":147448,"language":25532,"meta":145,"style":145},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[48,147450,147451,147459,147474,147480],{"__ignoreMap":145},[149,147452,147453,147455,147457],{"class":151,"line":152},[149,147454,26285],{"class":162},[149,147456,118996],{"class":169},[149,147458,27951],{"class":169},[149,147460,147461,147463,147465,147467,147469,147471],{"class":151,"line":193},[149,147462,26285],{"class":162},[149,147464,118996],{"class":169},[149,147466,25542],{"class":169},[149,147468,106082],{"class":169},[149,147470,102478],{"class":169},[149,147472,147473],{"class":169}," python3-venv\n",[149,147475,147476,147478],{"class":151,"line":235},[149,147477,102559],{"class":162},[149,147479,28002],{"class":309},[149,147481,147482,147484],{"class":151,"line":340},[149,147483,121379],{"class":162},[149,147485,28002],{"class":309},[24,147487,147488],{},"Fedora：",[140,147490,147492],{"className":25530,"code":147491,"language":25532,"meta":145,"style":145},"sudo dnf install python3 python3-pip\n",[48,147493,147494],{"__ignoreMap":145},[149,147495,147496,147498,147500,147502,147504],{"class":151,"line":152},[149,147497,26285],{"class":162},[149,147499,28024],{"class":169},[149,147501,25542],{"class":169},[149,147503,106082],{"class":169},[149,147505,121444],{"class":169},[24,147507,147508,147509,147511],{},"Linux 上通常使用 ",[48,147510,102559],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147513,147515],{"id":147514},"_14-pip包管理器","1.4 pip包管理器",[24,147517,147518,147520],{},[48,147519,25539],{}," 用来安装第三方库。",[140,147522,147524],{"className":25530,"code":147523,"language":25532,"meta":145,"style":145},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[48,147525,147526,147535,147544,147552,147558],{"__ignoreMap":145},[149,147527,147528,147530,147532],{"class":151,"line":152},[149,147529,25539],{"class":162},[149,147531,25542],{"class":169},[149,147533,147534],{"class":169}," requests\n",[149,147536,147537,147539,147542],{"class":151,"line":193},[149,147538,25539],{"class":162},[149,147540,147541],{"class":169}," uninstall",[149,147543,147534],{"class":169},[149,147545,147546,147548,147550],{"class":151,"line":235},[149,147547,25539],{"class":162},[149,147549,119253],{"class":169},[149,147551,147534],{"class":169},[149,147553,147554,147556],{"class":151,"line":340},[149,147555,25539],{"class":162},[149,147557,120634],{"class":169},[149,147559,147560,147562],{"class":151,"line":346},[149,147561,25539],{"class":162},[149,147563,147564],{"class":169}," freeze\n",[24,147566,147567],{},"国内网络较慢时可以临时使用镜像：",[140,147569,147571],{"className":25530,"code":147570,"language":25532,"meta":145,"style":145},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[48,147572,147573],{"__ignoreMap":145},[149,147574,147575,147577,147579,147582,147584],{"class":151,"line":152},[149,147576,25539],{"class":162},[149,147578,25542],{"class":169},[149,147580,147581],{"class":169}," requests",[149,147583,28139],{"class":309},[149,147585,121407],{"class":169},[24,147587,147588],{},"常见第三方库：",[2003,147590,147591,147600],{},[2006,147592,147593],{},[2009,147594,147595,147598],{},[2012,147596,147597],{},"库",[2012,147599,104376],{},[2049,147601,147602,147610,147617,147625,147633,147641,147649],{},[2009,147603,147604,147607],{},[2054,147605,147606],{},"requests",[2054,147608,147609],{},"网络请求",[2009,147611,147612,147614],{},[2054,147613,102306],{},[2054,147615,147616],{},"数值计算",[2009,147618,147619,147622],{},[2054,147620,147621],{},"pandas",[2054,147623,147624],{},"表格数据处理",[2009,147626,147627,147630],{},[2054,147628,147629],{},"matplotlib",[2054,147631,147632],{},"绘图",[2009,147634,147635,147638],{},[2054,147636,147637],{},"pyecharts",[2054,147639,147640],{},"ECharts 图表",[2009,147642,147643,147646],{},[2054,147644,147645],{},"flask",[2054,147647,147648],{},"Web 后端",[2009,147650,147651,147654],{},[2054,147652,147653],{},"pytest",[2054,147655,147656],{},"自动化测试",[14,147658,147660],{"id":147659},"_15-虚拟环境","1.5 虚拟环境",[24,147662,147663,147664,147667],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[48,147665,147666],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[24,147669,147670],{},"创建虚拟环境：",[140,147672,147674],{"className":25530,"code":147673,"language":25532,"meta":145,"style":145},"python -m venv .venv\n",[48,147675,147676],{"__ignoreMap":145},[149,147677,147678,147680,147682,147684],{"class":151,"line":152},[149,147679,32086],{"class":162},[149,147681,102562],{"class":309},[149,147683,102565],{"class":169},[149,147685,102568],{"class":169},[24,147687,147688],{},"Windows 激活：",[140,147690,147692],{"className":25530,"code":147691,"language":25532,"meta":145,"style":145},".venv\\Scripts\\activate\n",[48,147693,147694],{"__ignoreMap":145},[149,147695,147696],{"class":151,"line":152},[149,147697,147691],{"class":162},[24,147699,147700],{},"macOS\u002FLinux 激活：",[140,147702,147704],{"className":25530,"code":147703,"language":25532,"meta":145,"style":145},"source .venv\u002Fbin\u002Factivate\n",[48,147705,147706],{"__ignoreMap":145},[149,147707,147708,147710],{"class":151,"line":152},[149,147709,102573],{"class":309},[149,147711,102576],{"class":169},[24,147713,147714],{},"退出虚拟环境：",[140,147716,147718],{"className":25530,"code":147717,"language":25532,"meta":145,"style":145},"deactivate\n",[48,147719,147720],{"__ignoreMap":145},[149,147721,147722],{"class":151,"line":152},[149,147723,147717],{"class":162},[24,147725,147726],{},"保存依赖：",[140,147728,147730],{"className":25530,"code":147729,"language":25532,"meta":145,"style":145},"pip freeze > requirements.txt\n",[48,147731,147732],{"__ignoreMap":145},[149,147733,147734,147736,147739,147741],{"class":151,"line":152},[149,147735,25539],{"class":162},[149,147737,147738],{"class":169}," freeze",[149,147740,27931],{"class":325},[149,147742,147743],{"class":169}," requirements.txt\n",[24,147745,147746],{},"安装依赖：",[140,147748,147750],{"className":25530,"code":147749,"language":25532,"meta":145,"style":145},"pip install -r requirements.txt\n",[48,147751,147752],{"__ignoreMap":145},[149,147753,147754,147756,147758,147760],{"class":151,"line":152},[149,147755,25539],{"class":162},[149,147757,25542],{"class":169},[149,147759,121318],{"class":309},[149,147761,147743],{"class":169},[14,147763,147765],{"id":147764},"_16-开发工具","1.6 开发工具",[19,147767,147769],{"id":147768},"_161-pycharm","1.6.1 PyCharm",[24,147771,147772],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[24,147774,123741],{},[125,147776,147777,147780,147783,147789,147792],{},[45,147778,147779],{},"New Project：创建项目。",[45,147781,147782],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[45,147784,147785,147786,127662],{},"New Python File：创建 ",[48,147787,147788],{},".py",[45,147790,147791],{},"Run：运行当前文件。",[45,147793,147794],{},"Debug：断点调试。",[19,147796,147798],{"id":147797},"_162-vs-code","1.6.2 VS Code",[24,147800,147801],{},"VS Code 轻量，适合后续多语言开发。",[24,147803,147804],{},"建议安装插件：",[125,147806,147807,147810,147813],{},[45,147808,147809],{},"Python。",[45,147811,147812],{},"Pylance。",[45,147814,147815],{},"Jupyter。",[24,147817,147818],{},"选择解释器：",[140,147820,147823],{"className":147821,"code":147822,"language":1655,"meta":145},[1653],"Ctrl + Shift + P -> Python: Select Interpreter\n",[48,147824,147822],{"__ignoreMap":145},[14,147826,147828],{"id":147827},"_17-第一个python程序","1.7 第一个Python程序",[24,147830,147831,147832,26327],{},"创建文件 ",[48,147833,147834],{},"hello.py",[140,147836,147838],{"className":32084,"code":147837,"language":32086,"meta":145,"style":145},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[48,147839,147840,147851],{"__ignoreMap":145},[149,147841,147842,147844,147846,147849],{"class":151,"line":152},[149,147843,32121],{"class":309},[149,147845,319],{"class":155},[149,147847,147848],{"class":169},"\"Hello World\"",[149,147850,1878],{"class":155},[149,147852,147853,147855,147857,147860],{"class":151,"line":193},[149,147854,32121],{"class":309},[149,147856,319],{"class":155},[149,147858,147859],{"class":169},"\"你好，Python\"",[149,147861,1878],{"class":155},[24,147863,147864],{},"在终端运行：",[140,147866,147868],{"className":25530,"code":147867,"language":25532,"meta":145,"style":145},"python hello.py\n",[48,147869,147870],{"__ignoreMap":145},[149,147871,147872,147874],{"class":151,"line":152},[149,147873,32086],{"class":162},[149,147875,147876],{"class":169}," hello.py\n",[24,147878,147879],{},"或：",[140,147881,147883],{"className":25530,"code":147882,"language":25532,"meta":145,"style":145},"python3 hello.py\n",[48,147884,147885],{"__ignoreMap":145},[149,147886,147887,147889],{"class":151,"line":152},[149,147888,102559],{"class":162},[149,147890,147876],{"class":169},[24,147892,147893],{},"输出：",[140,147895,147898],{"className":147896,"code":147897,"language":1655,"meta":145},[1653],"Hello World\n你好，Python\n",[48,147899,147897],{"__ignoreMap":145},[14,147901,147903],{"id":147902},"_18-print函数","1.8 print函数",[24,147905,147906,147909],{},[48,147907,147908],{},"print()"," 用来输出内容。",[140,147911,147913],{"className":32084,"code":147912,"language":32086,"meta":145,"style":145},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[48,147914,147915,147925,147935,147945],{"__ignoreMap":145},[149,147916,147917,147919,147921,147923],{"class":151,"line":152},[149,147918,32121],{"class":309},[149,147920,319],{"class":155},[149,147922,7560],{"class":169},[149,147924,1878],{"class":155},[149,147926,147927,147929,147931,147933],{"class":151,"line":193},[149,147928,32121],{"class":309},[149,147930,319],{"class":155},[149,147932,322],{"class":309},[149,147934,1878],{"class":155},[149,147936,147937,147939,147941,147943],{"class":151,"line":235},[149,147938,32121],{"class":309},[149,147940,319],{"class":155},[149,147942,1918],{"class":309},[149,147944,1878],{"class":155},[149,147946,147947,147949,147951,147954,147956,147958],{"class":151,"line":340},[149,147948,32121],{"class":309},[149,147950,319],{"class":155},[149,147952,147953],{"class":169},"\"年龄:\"",[149,147955,329],{"class":155},[149,147957,2513],{"class":309},[149,147959,1878],{"class":155},[24,147961,147962],{},"多个内容用逗号隔开，默认中间加空格：",[140,147964,147966],{"className":32084,"code":147965,"language":32086,"meta":145,"style":145},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[48,147967,147968,147978,147988],{"__ignoreMap":145},[149,147969,147970,147973,147975],{"class":151,"line":152},[149,147971,147972],{"class":155},"name ",[149,147974,166],{"class":325},[149,147976,147977],{"class":169}," \"张三\"\n",[149,147979,147980,147983,147985],{"class":151,"line":193},[149,147981,147982],{"class":155},"age ",[149,147984,166],{"class":325},[149,147986,147987],{"class":309}," 18\n",[149,147989,147990,147992,147994,147997,148000,148002],{"class":151,"line":235},[149,147991,32121],{"class":309},[149,147993,319],{"class":155},[149,147995,147996],{"class":169},"\"姓名:\"",[149,147998,147999],{"class":155},", name, ",[149,148001,147953],{"class":169},[149,148003,148004],{"class":155},", age)\n",[24,148006,148007],{},"修改分隔符：",[140,148009,148011],{"className":32084,"code":148010,"language":32086,"meta":145,"style":145},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[48,148012,148013],{"__ignoreMap":145},[149,148014,148015,148017,148019,148022,148024,148026,148028,148030,148032,148035,148037,148039],{"class":151,"line":152},[149,148016,32121],{"class":309},[149,148018,319],{"class":155},[149,148020,148021],{"class":169},"\"2024\"",[149,148023,329],{"class":155},[149,148025,56011],{"class":169},[149,148027,329],{"class":155},[149,148029,56011],{"class":169},[149,148031,329],{"class":155},[149,148033,148034],{"class":6932},"sep",[149,148036,166],{"class":325},[149,148038,34189],{"class":169},[149,148040,1878],{"class":155},[24,148042,148043],{},"修改结尾符：",[140,148045,148047],{"className":32084,"code":148046,"language":32086,"meta":145,"style":145},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[48,148048,148049,148067],{"__ignoreMap":145},[149,148050,148051,148053,148055,148057,148059,148061,148063,148065],{"class":151,"line":152},[149,148052,32121],{"class":309},[149,148054,319],{"class":155},[149,148056,7560],{"class":169},[149,148058,329],{"class":155},[149,148060,47507],{"class":6932},[149,148062,166],{"class":325},[149,148064,6077],{"class":169},[149,148066,1878],{"class":155},[149,148068,148069,148071,148073,148076],{"class":151,"line":193},[149,148070,32121],{"class":309},[149,148072,319],{"class":155},[149,148074,148075],{"class":169},"\"python\"",[149,148077,1878],{"class":155},[14,148079,148081],{"id":148080},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[24,148083,148084],{},"交互运行适合临时验证：",[140,148086,148088],{"className":32084,"code":148087,"language":32086,"meta":145,"style":145},">>> 10 * 3\n30\n",[48,148089,148090,148100],{"__ignoreMap":145},[149,148091,148092,148094,148096,148098],{"class":151,"line":152},[149,148093,147289],{"class":325},[149,148095,3757],{"class":309},[149,148097,8234],{"class":325},[149,148099,121715],{"class":309},[149,148101,148102],{"class":151,"line":193},[149,148103,148104],{"class":309},"30\n",[24,148106,148107],{},"脚本运行适合保存程序：",[140,148109,148111],{"className":32084,"code":148110,"language":32086,"meta":145,"style":145},"price = 8\ncount = 5\nprint(price * count)\n",[48,148112,148113,148123,148132],{"__ignoreMap":145},[149,148114,148115,148118,148120],{"class":151,"line":152},[149,148116,148117],{"class":155},"price ",[149,148119,166],{"class":325},[149,148121,148122],{"class":309}," 8\n",[149,148124,148125,148128,148130],{"class":151,"line":193},[149,148126,148127],{"class":155},"count ",[149,148129,166],{"class":325},[149,148131,56122],{"class":309},[149,148133,148134,148136,148139,148141],{"class":151,"line":235},[149,148135,32121],{"class":309},[149,148137,148138],{"class":155},"(price ",[149,148140,2318],{"class":325},[149,148142,148143],{"class":155}," count)\n",[24,148145,148146],{},"实际学习中推荐：",[125,148148,148149,148152,148157],{},[45,148150,148151],{},"临时试一个语法，用交互模式。",[45,148153,148154,148155,127662],{},"写完整练习，用 ",[48,148156,147788],{},[45,148158,148159],{},"写项目，用独立目录和虚拟环境。",[14,148161,148163],{"id":148162},"_110-常见错误","1.10 常见错误",[19,148165,148167],{"id":148166},"_1101-命令找不到","1.10.1 命令找不到",[140,148169,148172],{"className":148170,"code":148171,"language":1655,"meta":145},[1653],"python: command not found\n",[48,148173,148171],{"__ignoreMap":145},[24,148175,148176],{},"原因：",[125,148178,148179,148182,148185],{},[45,148180,148181],{},"没安装 Python。",[45,148183,148184],{},"PATH 没配置。",[45,148186,148187,148188,30091],{},"Linux\u002FmacOS 应该使用 ",[48,148189,102559],{},[19,148191,148193],{"id":148192},"_1102-文件名冲突","1.10.2 文件名冲突",[24,148195,148196],{},"不要把文件命名为：",[140,148198,148201],{"className":148199,"code":148200,"language":1655,"meta":145},[1653],"random.py\njson.py\ntime.py\nrequests.py\n",[48,148202,148200],{"__ignoreMap":145},[24,148204,148205],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[19,148207,148209],{"id":148208},"_1103-中文乱码","1.10.3 中文乱码",[24,148211,148212],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[24,148214,148215],{},"如果读写文件出现乱码，要明确指定编码：",[140,148217,148219],{"className":32084,"code":148218,"language":32086,"meta":145,"style":145},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[48,148220,148221,148255],{"__ignoreMap":145},[149,148222,148223,148225,148228,148230,148233,148235,148238,148240,148243,148245,148248,148250,148252],{"class":151,"line":152},[149,148224,109512],{"class":325},[149,148226,148227],{"class":309}," open",[149,148229,319],{"class":155},[149,148231,148232],{"class":169},"\"data.txt\"",[149,148234,329],{"class":155},[149,148236,148237],{"class":169},"\"r\"",[149,148239,329],{"class":155},[149,148241,148242],{"class":6932},"encoding",[149,148244,166],{"class":325},[149,148246,148247],{"class":169},"\"utf-8\"",[149,148249,15427],{"class":155},[149,148251,33089],{"class":325},[149,148253,148254],{"class":155}," f:\n",[149,148256,148257,148260,148262],{"class":151,"line":193},[149,148258,148259],{"class":155},"    content ",[149,148261,166],{"class":325},[149,148263,148264],{"class":155}," f.read()\n",[14,148266,148268],{"id":148267},"_111-本章练习","1.11 本章练习",[125,148270,148271,148274,148280],{},[45,148272,148273],{},"安装 Python，并在终端输出版本号。",[45,148275,148276,148277,148279],{},"新建 ",[48,148278,147834],{},"，输出自己的姓名、年龄、学习目标。",[45,148281,106045,148282,148284],{},[48,148283,147908],{}," 输出下面格式：",[140,148286,148289],{"className":148287,"code":148288,"language":1655,"meta":145},[1653],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[48,148290,148288],{"__ignoreMap":145},[125,148292,148293],{"start":340},[45,148294,106045,148295,148297],{},[48,148296,148034],{}," 输出日期：",[140,148299,148302],{"className":148300,"code":148301,"language":1655,"meta":145},[1653],"2024-10-10\n",[48,148303,148301],{"__ignoreMap":145},[125,148305,148306],{"start":346},[45,148307,106045,148308,148310,148311,148313],{},[48,148309,47507],{}," 让两次 ",[48,148312,147908],{}," 输出在同一行。",[1783,148315,148316],{},"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":145,"searchDepth":193,"depth":193,"links":148318},[148319,148320,148321,148326,148327,148328,148332,148333,148334,148335,148340],{"id":147201,"depth":193,"text":147202},{"id":147245,"depth":193,"text":147246},{"id":147346,"depth":193,"text":147347,"children":148322},[148323,148324,148325],{"id":147350,"depth":235,"text":147351},{"id":147405,"depth":235,"text":147406},{"id":147441,"depth":235,"text":147442},{"id":147514,"depth":193,"text":147515},{"id":147659,"depth":193,"text":147660},{"id":147764,"depth":193,"text":147765,"children":148329},[148330,148331],{"id":147768,"depth":235,"text":147769},{"id":147797,"depth":235,"text":147798},{"id":147827,"depth":193,"text":147828},{"id":147902,"depth":193,"text":147903},{"id":148080,"depth":193,"text":148081},{"id":148162,"depth":193,"text":148163,"children":148336},[148337,148338,148339],{"id":148166,"depth":235,"text":148167},{"id":148192,"depth":235,"text":148193},{"id":148208,"depth":235,"text":148209},{"id":148267,"depth":193,"text":148268},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147193,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148347,"title":148348,"body":148349,"description":1797,"extension":1798,"meta":150753,"navigation":1800,"path":150754,"seo":150755,"stem":150756,"__hash__":150757},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148350,"toc":150738},[148351,148354,148358,148361,148364,148381,148384,148426,148429,148433,148436,148439,148476,148479,148513,148516,148608,148612,148626,148629,148656,148659,148663,148766,148773,148776,148793,148797,148804,148993,148996,149069,149073,149076,149160,149163,149195,149199,149403,149406,149410,149416,149518,149521,149777,149781,149784,149787,149801,149803,149989,149993,150355,150361,150365,150368,150492,150495,150674,150677,150681,150714,150718,150735],[10,148352,148348],{"id":148353},"_10-json与pyecharts折线图",[14,148355,148357],{"id":148356},"_101-数据可视化","10.1 数据可视化",[24,148359,148360],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[24,148362,148363],{},"常见图表：",[125,148365,148366,148369,148372,148375,148378],{},[45,148367,148368],{},"折线图：看趋势。",[45,148370,148371],{},"柱状图：看分类对比。",[45,148373,148374],{},"饼图：看占比。",[45,148376,148377],{},"地图：看地域分布。",[45,148379,148380],{},"散点图：看两个变量之间的关系。",[24,148382,148383],{},"Python 可视化常用库：",[2003,148385,148386,148394],{},[2006,148387,148388],{},[2009,148389,148390,148392],{},[2012,148391,147597],{},[2012,148393,25448],{},[2049,148395,148396,148403,148411,148418],{},[2009,148397,148398,148400],{},[2054,148399,147629],{},[2054,148401,148402],{},"基础、经典、可定制",[2009,148404,148405,148408],{},[2054,148406,148407],{},"seaborn",[2054,148409,148410],{},"统计图表更美观",[2009,148412,148413,148415],{},[2054,148414,147637],{},[2054,148416,148417],{},"生成交互式网页图表",[2009,148419,148420,148423],{},[2054,148421,148422],{},"plotly",[2054,148424,148425],{},"交互图表能力强",[24,148427,148428],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148430,148432],{"id":148431},"_102-json回顾","10.2 JSON回顾",[24,148434,148435],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[24,148437,148438],{},"Python 字典：",[140,148440,148442],{"className":32084,"code":148441,"language":32086,"meta":145,"style":145},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[48,148443,148444,148452,148463,148472],{"__ignoreMap":145},[149,148445,148446,148448,148450],{"class":151,"line":152},[149,148447,103338],{"class":155},[149,148449,166],{"class":325},[149,148451,304],{"class":155},[149,148453,148454,148457,148459,148461],{"class":151,"line":193},[149,148455,148456],{"class":169},"    \"name\"",[149,148458,313],{"class":155},[149,148460,70953],{"class":169},[149,148462,33172],{"class":155},[149,148464,148465,148468,148470],{"class":151,"line":235},[149,148466,148467],{"class":169},"    \"value\"",[149,148469,313],{"class":155},[149,148471,99138],{"class":309},[149,148473,148474],{"class":151,"line":340},[149,148475,355],{"class":155},[24,148477,148478],{},"JSON 字符串：",[140,148480,148483],{"className":148481,"code":148482,"language":147228,"meta":145,"style":145},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[48,148484,148485,148489,148500,148509],{"__ignoreMap":145},[149,148486,148487],{"class":151,"line":152},[149,148488,3270],{"class":155},[149,148490,148491,148494,148496,148498],{"class":151,"line":193},[149,148492,148493],{"class":309},"  \"name\"",[149,148495,313],{"class":155},[149,148497,70953],{"class":169},[149,148499,33172],{"class":155},[149,148501,148502,148505,148507],{"class":151,"line":235},[149,148503,148504],{"class":309},"  \"value\"",[149,148506,313],{"class":155},[149,148508,99138],{"class":309},[149,148510,148511],{"class":151,"line":340},[149,148512,355],{"class":155},[24,148514,148515],{},"Python 与 JSON 的转换：",[140,148517,148519],{"className":32084,"code":148518,"language":32086,"meta":145,"style":145},"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",[48,148520,148521,148528,148532,148557,148561,148580,148587,148591,148601],{"__ignoreMap":145},[149,148522,148523,148525],{"class":151,"line":152},[149,148524,32098],{"class":325},[149,148526,148527],{"class":155}," json\n",[149,148529,148530],{"class":151,"line":193},[149,148531,4119],{"emptyLinePlaceholder":1800},[149,148533,148534,148536,148538,148540,148542,148544,148546,148548,148551,148553,148555],{"class":151,"line":235},[149,148535,103338],{"class":155},[149,148537,166],{"class":325},[149,148539,6166],{"class":155},[149,148541,64367],{"class":169},[149,148543,313],{"class":155},[149,148545,70953],{"class":169},[149,148547,329],{"class":155},[149,148549,148550],{"class":169},"\"value\"",[149,148552,313],{"class":155},[149,148554,322],{"class":309},[149,148556,355],{"class":155},[149,148558,148559],{"class":151,"line":340},[149,148560,4119],{"emptyLinePlaceholder":1800},[149,148562,148563,148566,148568,148571,148574,148576,148578],{"class":151,"line":346},[149,148564,148565],{"class":155},"json_text ",[149,148567,166],{"class":325},[149,148569,148570],{"class":155}," json.dumps(data, ",[149,148572,148573],{"class":6932},"ensure_ascii",[149,148575,166],{"class":325},[149,148577,35693],{"class":309},[149,148579,1878],{"class":155},[149,148581,148582,148584],{"class":151,"line":352},[149,148583,32121],{"class":309},[149,148585,148586],{"class":155},"(json_text)\n",[149,148588,148589],{"class":151,"line":1021},[149,148590,4119],{"emptyLinePlaceholder":1800},[149,148592,148593,148596,148598],{"class":151,"line":1035},[149,148594,148595],{"class":155},"new_data ",[149,148597,166],{"class":325},[149,148599,148600],{"class":155}," json.loads(json_text)\n",[149,148602,148603,148605],{"class":151,"line":1054},[149,148604,32121],{"class":309},[149,148606,148607],{"class":155},"(new_data)\n",[14,148609,148611],{"id":148610},"_103-安装pyecharts","10.3 安装pyecharts",[140,148613,148615],{"className":25530,"code":148614,"language":25532,"meta":145,"style":145},"pip install pyecharts\n",[48,148616,148617],{"__ignoreMap":145},[149,148618,148619,148621,148623],{"class":151,"line":152},[149,148620,25539],{"class":162},[149,148622,25542],{"class":169},[149,148624,148625],{"class":169}," pyecharts\n",[24,148627,148628],{},"验证：",[140,148630,148632],{"className":32084,"code":148631,"language":32086,"meta":145,"style":145},"import pyecharts\n\nprint(pyecharts.__version__)\n",[48,148633,148634,148640,148644],{"__ignoreMap":145},[149,148635,148636,148638],{"class":151,"line":152},[149,148637,32098],{"class":325},[149,148639,148625],{"class":155},[149,148641,148642],{"class":151,"line":193},[149,148643,4119],{"emptyLinePlaceholder":1800},[149,148645,148646,148648,148651,148654],{"class":151,"line":235},[149,148647,32121],{"class":309},[149,148649,148650],{"class":155},"(pyecharts.",[149,148652,148653],{"class":309},"__version__",[149,148655,1878],{"class":155},[24,148657,148658],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148660,148662],{"id":148661},"_104-第一个折线图","10.4 第一个折线图",[140,148664,148666],{"className":32084,"code":148665,"language":32086,"meta":145,"style":145},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[48,148667,148668,148680,148684,148694,148724,148756],{"__ignoreMap":145},[149,148669,148670,148672,148675,148677],{"class":151,"line":152},[149,148671,32443],{"class":325},[149,148673,148674],{"class":155}," pyecharts.charts ",[149,148676,32098],{"class":325},[149,148678,148679],{"class":155}," Line\n",[149,148681,148682],{"class":151,"line":193},[149,148683,4119],{"emptyLinePlaceholder":1800},[149,148685,148686,148689,148691],{"class":151,"line":235},[149,148687,148688],{"class":155},"line ",[149,148690,166],{"class":325},[149,148692,148693],{"class":155}," Line()\n",[149,148695,148696,148699,148702,148704,148707,148709,148712,148714,148717,148719,148722],{"class":151,"line":340},[149,148697,148698],{"class":155},"line.add_xaxis([",[149,148700,148701],{"class":169},"\"周一\"",[149,148703,329],{"class":155},[149,148705,148706],{"class":169},"\"周二\"",[149,148708,329],{"class":155},[149,148710,148711],{"class":169},"\"周三\"",[149,148713,329],{"class":155},[149,148715,148716],{"class":169},"\"周四\"",[149,148718,329],{"class":155},[149,148720,148721],{"class":169},"\"周五\"",[149,148723,6375],{"class":155},[149,148725,148726,148729,148732,148734,148736,148738,148740,148742,148744,148746,148749,148751,148754],{"class":151,"line":346},[149,148727,148728],{"class":155},"line.add_yaxis(",[149,148730,148731],{"class":169},"\"销售额\"",[149,148733,79200],{"class":155},[149,148735,322],{"class":309},[149,148737,329],{"class":155},[149,148739,2678],{"class":309},[149,148741,329],{"class":155},[149,148743,2723],{"class":309},[149,148745,329],{"class":155},[149,148747,148748],{"class":309},"150",[149,148750,329],{"class":155},[149,148752,148753],{"class":309},"180",[149,148755,6375],{"class":155},[149,148757,148758,148761,148764],{"class":151,"line":352},[149,148759,148760],{"class":155},"line.render(",[149,148762,148763],{"class":169},"\"line.html\"",[149,148765,1878],{"class":155},[24,148767,148768,148769,148772],{},"运行后会生成 ",[48,148770,148771],{},"line.html","，用浏览器打开即可看到图表。",[24,148774,148775],{},"核心步骤：",[125,148777,148778,148781,148784,148787,148790],{},[45,148779,148780],{},"导入图表类。",[45,148782,148783],{},"创建图表对象。",[45,148785,148786],{},"添加 x 轴数据。",[45,148788,148789],{},"添加 y 轴数据。",[45,148791,148792],{},"渲染为 HTML。",[14,148794,148796],{"id":148795},"_105-全局配置","10.5 全局配置",[24,148798,148799,148800,148803],{},"常用配置在 ",[48,148801,148802],{},"pyecharts.options"," 中。",[140,148805,148807],{"className":32084,"code":148806,"language":32086,"meta":145,"style":145},"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",[48,148808,148809,148826,148836,148840,148848,148872,148900,148905,148924,148943,148961,148981,148985],{"__ignoreMap":145},[149,148810,148811,148813,148816,148818,148821,148823],{"class":151,"line":152},[149,148812,32443],{"class":325},[149,148814,148815],{"class":155}," pyecharts ",[149,148817,32098],{"class":325},[149,148819,148820],{"class":155}," options ",[149,148822,33089],{"class":325},[149,148824,148825],{"class":155}," opts\n",[149,148827,148828,148830,148832,148834],{"class":151,"line":193},[149,148829,32443],{"class":325},[149,148831,148674],{"class":155},[149,148833,32098],{"class":325},[149,148835,148679],{"class":155},[149,148837,148838],{"class":151,"line":235},[149,148839,4119],{"emptyLinePlaceholder":1800},[149,148841,148842,148844,148846],{"class":151,"line":340},[149,148843,148688],{"class":155},[149,148845,166],{"class":325},[149,148847,148693],{"class":155},[149,148849,148850,148852,148854,148856,148858,148860,148862,148864,148866,148868,148870],{"class":151,"line":346},[149,148851,148698],{"class":155},[149,148853,148701],{"class":169},[149,148855,329],{"class":155},[149,148857,148706],{"class":169},[149,148859,329],{"class":155},[149,148861,148711],{"class":169},[149,148863,329],{"class":155},[149,148865,148716],{"class":169},[149,148867,329],{"class":155},[149,148869,148721],{"class":169},[149,148871,6375],{"class":155},[149,148873,148874,148876,148878,148880,148882,148884,148886,148888,148890,148892,148894,148896,148898],{"class":151,"line":352},[149,148875,148728],{"class":155},[149,148877,148731],{"class":169},[149,148879,79200],{"class":155},[149,148881,322],{"class":309},[149,148883,329],{"class":155},[149,148885,2678],{"class":309},[149,148887,329],{"class":155},[149,148889,2723],{"class":309},[149,148891,329],{"class":155},[149,148893,148748],{"class":309},[149,148895,329],{"class":155},[149,148897,148753],{"class":309},[149,148899,6375],{"class":155},[149,148901,148902],{"class":151,"line":1021},[149,148903,148904],{"class":155},"line.set_global_opts(\n",[149,148906,148907,148910,148912,148915,148917,148919,148922],{"class":151,"line":1035},[149,148908,148909],{"class":6932},"    title_opts",[149,148911,166],{"class":325},[149,148913,148914],{"class":155},"opts.TitleOpts(",[149,148916,53111],{"class":6932},[149,148918,166],{"class":325},[149,148920,148921],{"class":169},"\"一周销售额\"",[149,148923,39753],{"class":155},[149,148925,148926,148929,148931,148934,148936,148938,148941],{"class":151,"line":1054},[149,148927,148928],{"class":6932},"    xaxis_opts",[149,148930,166],{"class":325},[149,148932,148933],{"class":155},"opts.AxisOpts(",[149,148935,81491],{"class":6932},[149,148937,166],{"class":325},[149,148939,148940],{"class":169},"\"日期\"",[149,148942,39753],{"class":155},[149,148944,148945,148948,148950,148952,148954,148956,148959],{"class":151,"line":1072},[149,148946,148947],{"class":6932},"    yaxis_opts",[149,148949,166],{"class":325},[149,148951,148933],{"class":155},[149,148953,81491],{"class":6932},[149,148955,166],{"class":325},[149,148957,148958],{"class":169},"\"金额\"",[149,148960,39753],{"class":155},[149,148962,148963,148966,148968,148971,148974,148976,148979],{"class":151,"line":1090},[149,148964,148965],{"class":6932},"    tooltip_opts",[149,148967,166],{"class":325},[149,148969,148970],{"class":155},"opts.TooltipOpts(",[149,148972,148973],{"class":6932},"trigger",[149,148975,166],{"class":325},[149,148977,148978],{"class":169},"\"axis\"",[149,148980,39753],{"class":155},[149,148982,148983],{"class":151,"line":1633},[149,148984,1878],{"class":155},[149,148986,148987,148989,148991],{"class":151,"line":1644},[149,148988,148760],{"class":155},[149,148990,148763],{"class":169},[149,148992,1878],{"class":155},[24,148994,148995],{},"常见全局配置：",[2003,148997,148998,149007],{},[2006,148999,149000],{},[2009,149001,149002,149005],{},[2012,149003,149004],{},"配置",[2012,149006,104376],{},[2049,149008,149009,149019,149029,149039,149049,149059],{},[2009,149010,149011,149016],{},[2054,149012,149013],{},[48,149014,149015],{},"TitleOpts",[2054,149017,149018],{},"标题",[2009,149020,149021,149026],{},[2054,149022,149023],{},[48,149024,149025],{},"LegendOpts",[2054,149027,149028],{},"图例",[2009,149030,149031,149036],{},[2054,149032,149033],{},[48,149034,149035],{},"TooltipOpts",[2054,149037,149038],{},"提示框",[2009,149040,149041,149046],{},[2054,149042,149043],{},[48,149044,149045],{},"AxisOpts",[2054,149047,149048],{},"坐标轴",[2009,149050,149051,149056],{},[2054,149052,149053],{},[48,149054,149055],{},"VisualMapOpts",[2054,149057,149058],{},"视觉映射",[2009,149060,149061,149066],{},[2054,149062,149063],{},[48,149064,149065],{},"DataZoomOpts",[2054,149067,149068],{},"区域缩放",[14,149070,149072],{"id":149071},"_106-系列配置","10.6 系列配置",[24,149074,149075],{},"系列配置作用于某一组数据。",[140,149077,149079],{"className":32084,"code":149078,"language":32086,"meta":145,"style":145},"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",[48,149080,149081,149086,149097,149126,149137,149156],{"__ignoreMap":145},[149,149082,149083],{"class":151,"line":152},[149,149084,149085],{"class":155},"line.add_yaxis(\n",[149,149087,149088,149091,149093,149095],{"class":151,"line":193},[149,149089,149090],{"class":6932},"    series_name",[149,149092,166],{"class":325},[149,149094,148731],{"class":169},[149,149096,33172],{"class":155},[149,149098,149099,149102,149104,149106,149108,149110,149112,149114,149116,149118,149120,149122,149124],{"class":151,"line":235},[149,149100,149101],{"class":6932},"    y_axis",[149,149103,166],{"class":325},[149,149105,810],{"class":155},[149,149107,322],{"class":309},[149,149109,329],{"class":155},[149,149111,2678],{"class":309},[149,149113,329],{"class":155},[149,149115,2723],{"class":309},[149,149117,329],{"class":155},[149,149119,148748],{"class":309},[149,149121,329],{"class":155},[149,149123,148753],{"class":309},[149,149125,89517],{"class":155},[149,149127,149128,149131,149133,149135],{"class":151,"line":340},[149,149129,149130],{"class":6932},"    is_smooth",[149,149132,166],{"class":325},[149,149134,33182],{"class":309},[149,149136,33172],{"class":155},[149,149138,149139,149142,149144,149147,149150,149152,149154],{"class":151,"line":346},[149,149140,149141],{"class":6932},"    label_opts",[149,149143,166],{"class":325},[149,149145,149146],{"class":155},"opts.LabelOpts(",[149,149148,149149],{"class":6932},"is_show",[149,149151,166],{"class":325},[149,149153,33182],{"class":309},[149,149155,39753],{"class":155},[149,149157,149158],{"class":151,"line":352},[149,149159,1878],{"class":155},[24,149161,149162],{},"常用参数：",[125,149164,149165,149171,149177,149183,149189],{},[45,149166,149167,149170],{},[48,149168,149169],{},"series_name","：系列名称。",[45,149172,149173,149176],{},[48,149174,149175],{},"y_axis","：y 轴数据。",[45,149178,149179,149182],{},[48,149180,149181],{},"is_smooth","：是否平滑曲线。",[45,149184,149185,149188],{},[48,149186,149187],{},"label_opts","：标签配置。",[45,149190,149191,149194],{},[48,149192,149193],{},"symbol_size","：标记点大小。",[14,149196,149198],{"id":149197},"_107-多条折线","10.7 多条折线",[140,149200,149202],{"className":32084,"code":149201,"language":32086,"meta":145,"style":145},"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",[48,149203,149204,149218,149228,149232,149261,149265,149273,149278,149316,149353,149357,149374,149390,149394],{"__ignoreMap":145},[149,149205,149206,149208,149210,149212,149214,149216],{"class":151,"line":152},[149,149207,32443],{"class":325},[149,149209,148815],{"class":155},[149,149211,32098],{"class":325},[149,149213,148820],{"class":155},[149,149215,33089],{"class":325},[149,149217,148825],{"class":155},[149,149219,149220,149222,149224,149226],{"class":151,"line":193},[149,149221,32443],{"class":325},[149,149223,148674],{"class":155},[149,149225,32098],{"class":325},[149,149227,148679],{"class":155},[149,149229,149230],{"class":151,"line":235},[149,149231,4119],{"emptyLinePlaceholder":1800},[149,149233,149234,149237,149239,149241,149243,149245,149247,149249,149251,149253,149255,149257,149259],{"class":151,"line":340},[149,149235,149236],{"class":155},"dates ",[149,149238,166],{"class":325},[149,149240,53924],{"class":155},[149,149242,148701],{"class":169},[149,149244,329],{"class":155},[149,149246,148706],{"class":169},[149,149248,329],{"class":155},[149,149250,148711],{"class":169},[149,149252,329],{"class":155},[149,149254,148716],{"class":169},[149,149256,329],{"class":155},[149,149258,148721],{"class":169},[149,149260,34952],{"class":155},[149,149262,149263],{"class":151,"line":346},[149,149264,4119],{"emptyLinePlaceholder":1800},[149,149266,149267,149269,149271],{"class":151,"line":352},[149,149268,148688],{"class":155},[149,149270,166],{"class":325},[149,149272,148693],{"class":155},[149,149274,149275],{"class":151,"line":1021},[149,149276,149277],{"class":155},"line.add_xaxis(dates)\n",[149,149279,149280,149282,149285,149287,149289,149291,149294,149296,149298,149300,149302,149304,149306,149308,149310,149312,149314],{"class":151,"line":1035},[149,149281,148728],{"class":155},[149,149283,149284],{"class":169},"\"线上销售\"",[149,149286,79200],{"class":155},[149,149288,322],{"class":309},[149,149290,329],{"class":155},[149,149292,149293],{"class":309},"130",[149,149295,329],{"class":155},[149,149297,2678],{"class":309},[149,149299,329],{"class":155},[149,149301,22758],{"class":309},[149,149303,329],{"class":155},[149,149305,3442],{"class":309},[149,149307,113881],{"class":155},[149,149309,149181],{"class":6932},[149,149311,166],{"class":325},[149,149313,33182],{"class":309},[149,149315,1878],{"class":155},[149,149317,149318,149320,149323,149325,149327,149329,149331,149333,149335,149337,149339,149341,149343,149345,149347,149349,149351],{"class":151,"line":1054},[149,149319,148728],{"class":155},[149,149321,149322],{"class":169},"\"线下销售\"",[149,149324,79200],{"class":155},[149,149326,2475],{"class":309},[149,149328,329],{"class":155},[149,149330,2723],{"class":309},[149,149332,329],{"class":155},[149,149334,322],{"class":309},[149,149336,329],{"class":155},[149,149338,2678],{"class":309},[149,149340,329],{"class":155},[149,149342,148748],{"class":309},[149,149344,113881],{"class":155},[149,149346,149181],{"class":6932},[149,149348,166],{"class":325},[149,149350,33182],{"class":309},[149,149352,1878],{"class":155},[149,149354,149355],{"class":151,"line":1072},[149,149356,148904],{"class":155},[149,149358,149359,149361,149363,149365,149367,149369,149372],{"class":151,"line":1090},[149,149360,148909],{"class":6932},[149,149362,166],{"class":325},[149,149364,148914],{"class":155},[149,149366,53111],{"class":6932},[149,149368,166],{"class":325},[149,149370,149371],{"class":169},"\"线上线下销售趋势\"",[149,149373,39753],{"class":155},[149,149375,149376,149378,149380,149382,149384,149386,149388],{"class":151,"line":1633},[149,149377,148965],{"class":6932},[149,149379,166],{"class":325},[149,149381,148970],{"class":155},[149,149383,148973],{"class":6932},[149,149385,166],{"class":325},[149,149387,148978],{"class":169},[149,149389,39753],{"class":155},[149,149391,149392],{"class":151,"line":1644},[149,149393,1878],{"class":155},[149,149395,149396,149398,149401],{"class":151,"line":3348},[149,149397,148760],{"class":155},[149,149399,149400],{"class":169},"\"sales.html\"",[149,149402,1878],{"class":155},[24,149404,149405],{},"多条折线适合比较不同指标或不同地区。",[14,149407,149409],{"id":149408},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[24,149411,149412,149413,26327],{},"假设 ",[48,149414,149415],{},"sales.json",[140,149417,149419],{"className":148481,"code":149418,"language":147228,"meta":145,"style":145},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[48,149420,149421,149426,149458,149486,149514],{"__ignoreMap":145},[149,149422,149423],{"class":151,"line":152},[149,149424,149425],{"class":155},"[\n",[149,149427,149428,149431,149434,149436,149438,149440,149443,149445,149447,149449,149452,149454,149456],{"class":151,"line":193},[149,149429,149430],{"class":155},"  {",[149,149432,149433],{"class":309},"\"date\"",[149,149435,313],{"class":155},[149,149437,148701],{"class":169},[149,149439,329],{"class":155},[149,149441,149442],{"class":309},"\"online\"",[149,149444,313],{"class":155},[149,149446,322],{"class":309},[149,149448,329],{"class":155},[149,149450,149451],{"class":309},"\"offline\"",[149,149453,313],{"class":155},[149,149455,2475],{"class":309},[149,149457,6648],{"class":155},[149,149459,149460,149462,149464,149466,149468,149470,149472,149474,149476,149478,149480,149482,149484],{"class":151,"line":235},[149,149461,149430],{"class":155},[149,149463,149433],{"class":309},[149,149465,313],{"class":155},[149,149467,148706],{"class":169},[149,149469,329],{"class":155},[149,149471,149442],{"class":309},[149,149473,313],{"class":155},[149,149475,149293],{"class":309},[149,149477,329],{"class":155},[149,149479,149451],{"class":309},[149,149481,313],{"class":155},[149,149483,2723],{"class":309},[149,149485,6648],{"class":155},[149,149487,149488,149490,149492,149494,149496,149498,149500,149502,149504,149506,149508,149510,149512],{"class":151,"line":340},[149,149489,149430],{"class":155},[149,149491,149433],{"class":309},[149,149493,313],{"class":155},[149,149495,148711],{"class":169},[149,149497,329],{"class":155},[149,149499,149442],{"class":309},[149,149501,313],{"class":155},[149,149503,2678],{"class":309},[149,149505,329],{"class":155},[149,149507,149451],{"class":309},[149,149509,313],{"class":155},[149,149511,322],{"class":309},[149,149513,355],{"class":155},[149,149515,149516],{"class":151,"line":346},[149,149517,34952],{"class":155},[24,149519,149520],{},"读取并绘图：",[140,149522,149524],{"className":32084,"code":149523,"language":32086,"meta":145,"style":145},"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",[48,149525,149526,149532,149546,149556,149560,149592,149605,149609,149617,149626,149635,149639,149651,149660,149669,149678,149682,149690,149694,149711,149728,149732,149749,149765,149769],{"__ignoreMap":145},[149,149527,149528,149530],{"class":151,"line":152},[149,149529,32098],{"class":325},[149,149531,148527],{"class":155},[149,149533,149534,149536,149538,149540,149542,149544],{"class":151,"line":193},[149,149535,32443],{"class":325},[149,149537,148815],{"class":155},[149,149539,32098],{"class":325},[149,149541,148820],{"class":155},[149,149543,33089],{"class":325},[149,149545,148825],{"class":155},[149,149547,149548,149550,149552,149554],{"class":151,"line":235},[149,149549,32443],{"class":325},[149,149551,148674],{"class":155},[149,149553,32098],{"class":325},[149,149555,148679],{"class":155},[149,149557,149558],{"class":151,"line":340},[149,149559,4119],{"emptyLinePlaceholder":1800},[149,149561,149562,149564,149566,149568,149571,149573,149575,149577,149579,149581,149583,149585,149587,149590],{"class":151,"line":346},[149,149563,109512],{"class":325},[149,149565,148227],{"class":309},[149,149567,319],{"class":155},[149,149569,149570],{"class":169},"\"sales.json\"",[149,149572,329],{"class":155},[149,149574,148237],{"class":169},[149,149576,329],{"class":155},[149,149578,148242],{"class":6932},[149,149580,166],{"class":325},[149,149582,148247],{"class":169},[149,149584,15427],{"class":155},[149,149586,33089],{"class":325},[149,149588,149589],{"class":6932}," file",[149,149591,5457],{"class":155},[149,149593,149594,149596,149598,149601,149603],{"class":151,"line":352},[149,149595,103101],{"class":155},[149,149597,166],{"class":325},[149,149599,149600],{"class":155}," json.load(",[149,149602,47060],{"class":6932},[149,149604,1878],{"class":155},[149,149606,149607],{"class":151,"line":1021},[149,149608,4119],{"emptyLinePlaceholder":1800},[149,149610,149611,149613,149615],{"class":151,"line":1035},[149,149612,149236],{"class":155},[149,149614,166],{"class":325},[149,149616,53537],{"class":155},[149,149618,149619,149622,149624],{"class":151,"line":1054},[149,149620,149621],{"class":155},"online_sales ",[149,149623,166],{"class":325},[149,149625,53537],{"class":155},[149,149627,149628,149631,149633],{"class":151,"line":1072},[149,149629,149630],{"class":155},"offline_sales ",[149,149632,166],{"class":325},[149,149634,53537],{"class":155},[149,149636,149637],{"class":151,"line":1090},[149,149638,4119],{"emptyLinePlaceholder":1800},[149,149640,149641,149643,149646,149648],{"class":151,"line":1633},[149,149642,4743],{"class":325},[149,149644,149645],{"class":155}," item ",[149,149647,27752],{"class":325},[149,149649,149650],{"class":155}," data:\n",[149,149652,149653,149656,149658],{"class":151,"line":1644},[149,149654,149655],{"class":155},"    dates.append(item[",[149,149657,149433],{"class":169},[149,149659,6375],{"class":155},[149,149661,149662,149665,149667],{"class":151,"line":3348},[149,149663,149664],{"class":155},"    online_sales.append(item[",[149,149666,149442],{"class":169},[149,149668,6375],{"class":155},[149,149670,149671,149674,149676],{"class":151,"line":3362},[149,149672,149673],{"class":155},"    offline_sales.append(item[",[149,149675,149451],{"class":169},[149,149677,6375],{"class":155},[149,149679,149680],{"class":151,"line":3367},[149,149681,4119],{"emptyLinePlaceholder":1800},[149,149683,149684,149686,149688],{"class":151,"line":3373},[149,149685,148688],{"class":155},[149,149687,166],{"class":325},[149,149689,148693],{"class":155},[149,149691,149692],{"class":151,"line":3394},[149,149693,149277],{"class":155},[149,149695,149696,149698,149700,149703,149705,149707,149709],{"class":151,"line":3399},[149,149697,148728],{"class":155},[149,149699,149284],{"class":169},[149,149701,149702],{"class":155},", online_sales, ",[149,149704,149181],{"class":6932},[149,149706,166],{"class":325},[149,149708,33182],{"class":309},[149,149710,1878],{"class":155},[149,149712,149713,149715,149717,149720,149722,149724,149726],{"class":151,"line":3413},[149,149714,148728],{"class":155},[149,149716,149322],{"class":169},[149,149718,149719],{"class":155},", offline_sales, ",[149,149721,149181],{"class":6932},[149,149723,166],{"class":325},[149,149725,33182],{"class":309},[149,149727,1878],{"class":155},[149,149729,149730],{"class":151,"line":3418},[149,149731,148904],{"class":155},[149,149733,149734,149736,149738,149740,149742,149744,149747],{"class":151,"line":3447},[149,149735,148909],{"class":6932},[149,149737,166],{"class":325},[149,149739,148914],{"class":155},[149,149741,53111],{"class":6932},[149,149743,166],{"class":325},[149,149745,149746],{"class":169},"\"销售趋势\"",[149,149748,39753],{"class":155},[149,149750,149751,149753,149755,149757,149759,149761,149763],{"class":151,"line":3452},[149,149752,148965],{"class":6932},[149,149754,166],{"class":325},[149,149756,148970],{"class":155},[149,149758,148973],{"class":6932},[149,149760,166],{"class":325},[149,149762,148978],{"class":169},[149,149764,39753],{"class":155},[149,149766,149767],{"class":151,"line":3469},[149,149768,1878],{"class":155},[149,149770,149771,149773,149775],{"class":151,"line":3474},[149,149772,148760],{"class":155},[149,149774,149400],{"class":169},[149,149776,1878],{"class":155},[14,149778,149780],{"id":149779},"_109-数据清洗","10.9 数据清洗",[24,149782,149783],{},"真实数据经常不整齐，需要清洗。",[24,149785,149786],{},"常见问题：",[125,149788,149789,149792,149795,149798],{},[45,149790,149791],{},"数字是字符串。",[45,149793,149794],{},"字段缺失。",[45,149796,149797],{},"空值。",[45,149799,149800],{},"日期格式不统一。",[24,149802,16846],{},[140,149804,149806],{"className":32084,"code":149805,"language":32086,"meta":145,"style":145},"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",[48,149807,149808,149817,149840,149860,149881,149885,149889,149897,149906,149910,149921,149935,149944,149949,149953,149961,149971,149975,149982],{"__ignoreMap":145},[149,149809,149810,149813,149815],{"class":151,"line":152},[149,149811,149812],{"class":155},"raw_data ",[149,149814,166],{"class":325},[149,149816,57139],{"class":155},[149,149818,149819,149822,149824,149826,149828,149830,149833,149835,149838],{"class":151,"line":193},[149,149820,149821],{"class":155},"    {",[149,149823,149433],{"class":169},[149,149825,313],{"class":155},[149,149827,148701],{"class":169},[149,149829,329],{"class":155},[149,149831,149832],{"class":169},"\"sales\"",[149,149834,313],{"class":155},[149,149836,149837],{"class":169},"\"100\"",[149,149839,6648],{"class":155},[149,149841,149842,149844,149846,149848,149850,149852,149854,149856,149858],{"class":151,"line":235},[149,149843,149821],{"class":155},[149,149845,149433],{"class":169},[149,149847,313],{"class":155},[149,149849,148706],{"class":169},[149,149851,329],{"class":155},[149,149853,149832],{"class":169},[149,149855,313],{"class":155},[149,149857,1382],{"class":169},[149,149859,6648],{"class":155},[149,149861,149862,149864,149866,149868,149870,149872,149874,149876,149879],{"class":151,"line":340},[149,149863,149821],{"class":155},[149,149865,149433],{"class":169},[149,149867,313],{"class":155},[149,149869,148711],{"class":169},[149,149871,329],{"class":155},[149,149873,149832],{"class":169},[149,149875,313],{"class":155},[149,149877,149878],{"class":169},"\"120\"",[149,149880,6648],{"class":155},[149,149882,149883],{"class":151,"line":346},[149,149884,34952],{"class":155},[149,149886,149887],{"class":151,"line":352},[149,149888,4119],{"emptyLinePlaceholder":1800},[149,149890,149891,149893,149895],{"class":151,"line":1021},[149,149892,149236],{"class":155},[149,149894,166],{"class":325},[149,149896,53537],{"class":155},[149,149898,149899,149902,149904],{"class":151,"line":1035},[149,149900,149901],{"class":155},"sales ",[149,149903,166],{"class":325},[149,149905,53537],{"class":155},[149,149907,149908],{"class":151,"line":1054},[149,149909,4119],{"emptyLinePlaceholder":1800},[149,149911,149912,149914,149916,149918],{"class":151,"line":1072},[149,149913,4743],{"class":325},[149,149915,149645],{"class":155},[149,149917,27752],{"class":325},[149,149919,149920],{"class":155}," raw_data:\n",[149,149922,149923,149926,149928,149931,149933],{"class":151,"line":1090},[149,149924,149925],{"class":155},"    value ",[149,149927,166],{"class":325},[149,149929,149930],{"class":155}," item.get(",[149,149932,149832],{"class":169},[149,149934,1878],{"class":155},[149,149936,149937,149939,149941],{"class":151,"line":1633},[149,149938,4819],{"class":325},[149,149940,40636],{"class":325},[149,149942,149943],{"class":155}," value:\n",[149,149945,149946],{"class":151,"line":1644},[149,149947,149948],{"class":325},"        continue\n",[149,149950,149951],{"class":151,"line":3348},[149,149952,4119],{"emptyLinePlaceholder":1800},[149,149954,149955,149957,149959],{"class":151,"line":3362},[149,149956,149655],{"class":155},[149,149958,149433],{"class":169},[149,149960,6375],{"class":155},[149,149962,149963,149966,149968],{"class":151,"line":3367},[149,149964,149965],{"class":155},"    sales.append(",[149,149967,1875],{"class":309},[149,149969,149970],{"class":155},"(value))\n",[149,149972,149973],{"class":151,"line":3373},[149,149974,4119],{"emptyLinePlaceholder":1800},[149,149976,149977,149979],{"class":151,"line":3394},[149,149978,32121],{"class":309},[149,149980,149981],{"class":155},"(dates)\n",[149,149983,149984,149986],{"class":151,"line":3399},[149,149985,32121],{"class":309},[149,149987,149988],{"class":155},"(sales)\n",[14,149990,149992],{"id":149991},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[140,149994,149996],{"className":32084,"code":149995,"language":32086,"meta":145,"style":145},"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",[48,149997,149998,150012,150022,150026,150034,150055,150077,150099,150121,150143,150147,150151,150173,150194,150198,150206,150210,150214,150224,150233,150243,150259,150263,150267,150284,150300,150316,150332,150342,150346],{"__ignoreMap":145},[149,149999,150000,150002,150004,150006,150008,150010],{"class":151,"line":152},[149,150001,32443],{"class":325},[149,150003,148815],{"class":155},[149,150005,32098],{"class":325},[149,150007,148820],{"class":155},[149,150009,33089],{"class":325},[149,150011,148825],{"class":155},[149,150013,150014,150016,150018,150020],{"class":151,"line":193},[149,150015,32443],{"class":325},[149,150017,148674],{"class":155},[149,150019,32098],{"class":325},[149,150021,148679],{"class":155},[149,150023,150024],{"class":151,"line":235},[149,150025,4119],{"emptyLinePlaceholder":1800},[149,150027,150028,150030,150032],{"class":151,"line":340},[149,150029,149901],{"class":155},[149,150031,166],{"class":325},[149,150033,57139],{"class":155},[149,150035,150036,150038,150040,150042,150045,150047,150049,150051,150053],{"class":151,"line":346},[149,150037,149821],{"class":155},[149,150039,149433],{"class":169},[149,150041,313],{"class":155},[149,150043,150044],{"class":169},"\"2024-10-01\"",[149,150046,329],{"class":155},[149,150048,85765],{"class":169},[149,150050,313],{"class":155},[149,150052,93704],{"class":309},[149,150054,6648],{"class":155},[149,150056,150057,150059,150061,150063,150066,150068,150070,150072,150075],{"class":151,"line":352},[149,150058,149821],{"class":155},[149,150060,149433],{"class":169},[149,150062,313],{"class":155},[149,150064,150065],{"class":169},"\"2024-10-02\"",[149,150067,329],{"class":155},[149,150069,85765],{"class":169},[149,150071,313],{"class":155},[149,150073,150074],{"class":309},"1800",[149,150076,6648],{"class":155},[149,150078,150079,150081,150083,150085,150088,150090,150092,150094,150097],{"class":151,"line":1021},[149,150080,149821],{"class":155},[149,150082,149433],{"class":169},[149,150084,313],{"class":155},[149,150086,150087],{"class":169},"\"2024-10-03\"",[149,150089,329],{"class":155},[149,150091,85765],{"class":169},[149,150093,313],{"class":155},[149,150095,150096],{"class":309},"1500",[149,150098,6648],{"class":155},[149,150100,150101,150103,150105,150107,150110,150112,150114,150116,150119],{"class":151,"line":1035},[149,150102,149821],{"class":155},[149,150104,149433],{"class":169},[149,150106,313],{"class":155},[149,150108,150109],{"class":169},"\"2024-10-04\"",[149,150111,329],{"class":155},[149,150113,85765],{"class":169},[149,150115,313],{"class":155},[149,150117,150118],{"class":309},"2100",[149,150120,6648],{"class":155},[149,150122,150123,150125,150127,150129,150132,150134,150136,150138,150141],{"class":151,"line":1054},[149,150124,149821],{"class":155},[149,150126,149433],{"class":169},[149,150128,313],{"class":155},[149,150130,150131],{"class":169},"\"2024-10-05\"",[149,150133,329],{"class":155},[149,150135,85765],{"class":169},[149,150137,313],{"class":155},[149,150139,150140],{"class":309},"2600",[149,150142,6648],{"class":155},[149,150144,150145],{"class":151,"line":1072},[149,150146,34952],{"class":155},[149,150148,150149],{"class":151,"line":1090},[149,150150,4119],{"emptyLinePlaceholder":1800},[149,150152,150153,150155,150157,150160,150162,150164,150166,150168,150170],{"class":151,"line":1633},[149,150154,149236],{"class":155},[149,150156,166],{"class":325},[149,150158,150159],{"class":155}," [item[",[149,150161,149433],{"class":169},[149,150163,6161],{"class":155},[149,150165,4743],{"class":325},[149,150167,149645],{"class":155},[149,150169,27752],{"class":325},[149,150171,150172],{"class":155}," sales]\n",[149,150174,150175,150178,150180,150182,150184,150186,150188,150190,150192],{"class":151,"line":1644},[149,150176,150177],{"class":155},"amounts ",[149,150179,166],{"class":325},[149,150181,150159],{"class":155},[149,150183,85765],{"class":169},[149,150185,6161],{"class":155},[149,150187,4743],{"class":325},[149,150189,149645],{"class":155},[149,150191,27752],{"class":325},[149,150193,150172],{"class":155},[149,150195,150196],{"class":151,"line":3348},[149,150197,4119],{"emptyLinePlaceholder":1800},[149,150199,150200,150202,150204],{"class":151,"line":3362},[149,150201,148688],{"class":155},[149,150203,166],{"class":325},[149,150205,148693],{"class":155},[149,150207,150208],{"class":151,"line":3367},[149,150209,149277],{"class":155},[149,150211,150212],{"class":151,"line":3373},[149,150213,149085],{"class":155},[149,150215,150216,150218,150220,150222],{"class":151,"line":3394},[149,150217,149090],{"class":6932},[149,150219,166],{"class":325},[149,150221,148731],{"class":169},[149,150223,33172],{"class":155},[149,150225,150226,150228,150230],{"class":151,"line":3399},[149,150227,149101],{"class":6932},[149,150229,166],{"class":325},[149,150231,150232],{"class":155},"amounts,\n",[149,150234,150235,150237,150239,150241],{"class":151,"line":3413},[149,150236,149130],{"class":6932},[149,150238,166],{"class":325},[149,150240,33182],{"class":309},[149,150242,33172],{"class":155},[149,150244,150245,150247,150249,150251,150253,150255,150257],{"class":151,"line":3418},[149,150246,149141],{"class":6932},[149,150248,166],{"class":325},[149,150250,149146],{"class":155},[149,150252,149149],{"class":6932},[149,150254,166],{"class":325},[149,150256,33182],{"class":309},[149,150258,39753],{"class":155},[149,150260,150261],{"class":151,"line":3447},[149,150262,1878],{"class":155},[149,150264,150265],{"class":151,"line":3452},[149,150266,148904],{"class":155},[149,150268,150269,150271,150273,150275,150277,150279,150282],{"class":151,"line":3469},[149,150270,148909],{"class":6932},[149,150272,166],{"class":325},[149,150274,148914],{"class":155},[149,150276,53111],{"class":6932},[149,150278,166],{"class":325},[149,150280,150281],{"class":169},"\"每日销售额\"",[149,150283,39753],{"class":155},[149,150285,150286,150288,150290,150292,150294,150296,150298],{"class":151,"line":3474},[149,150287,148928],{"class":6932},[149,150289,166],{"class":325},[149,150291,148933],{"class":155},[149,150293,81491],{"class":6932},[149,150295,166],{"class":325},[149,150297,148940],{"class":169},[149,150299,39753],{"class":155},[149,150301,150302,150304,150306,150308,150310,150312,150314],{"class":151,"line":3479},[149,150303,148947],{"class":6932},[149,150305,166],{"class":325},[149,150307,148933],{"class":155},[149,150309,81491],{"class":6932},[149,150311,166],{"class":325},[149,150313,148958],{"class":169},[149,150315,39753],{"class":155},[149,150317,150318,150320,150322,150324,150326,150328,150330],{"class":151,"line":3484},[149,150319,148965],{"class":6932},[149,150321,166],{"class":325},[149,150323,148970],{"class":155},[149,150325,148973],{"class":6932},[149,150327,166],{"class":325},[149,150329,148978],{"class":169},[149,150331,39753],{"class":155},[149,150333,150334,150337,150339],{"class":151,"line":3498},[149,150335,150336],{"class":6932},"    datazoom_opts",[149,150338,166],{"class":325},[149,150340,150341],{"class":155},"[opts.DataZoomOpts()],\n",[149,150343,150344],{"class":151,"line":3503},[149,150345,1878],{"class":155},[149,150347,150348,150350,150353],{"class":151,"line":4296},[149,150349,148760],{"class":155},[149,150351,150352],{"class":169},"\"daily_sales.html\"",[149,150354,1878],{"class":155},[24,150356,150357,150360],{},[48,150358,150359],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150362,150364],{"id":150363},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[24,150366,150367],{},"如果数据结构如下：",[140,150369,150371],{"className":32084,"code":150370,"language":32086,"meta":145,"style":145},"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",[48,150372,150373,150381,150389,150411,150432,150437,150444,150464,150484,150488],{"__ignoreMap":145},[149,150374,150375,150377,150379],{"class":151,"line":152},[149,150376,103338],{"class":155},[149,150378,166],{"class":325},[149,150380,304],{"class":155},[149,150382,150383,150386],{"class":151,"line":193},[149,150384,150385],{"class":169},"    \"北京\"",[149,150387,150388],{"class":155},": [\n",[149,150390,150391,150393,150395,150397,150400,150402,150405,150407,150409],{"class":151,"line":235},[149,150392,6635],{"class":155},[149,150394,149433],{"class":169},[149,150396,313],{"class":155},[149,150398,150399],{"class":169},"\"2024-01-01\"",[149,150401,329],{"class":155},[149,150403,150404],{"class":169},"\"confirm\"",[149,150406,313],{"class":155},[149,150408,2309],{"class":309},[149,150410,6648],{"class":155},[149,150412,150413,150415,150417,150419,150422,150424,150426,150428,150430],{"class":151,"line":340},[149,150414,6635],{"class":155},[149,150416,149433],{"class":169},[149,150418,313],{"class":155},[149,150420,150421],{"class":169},"\"2024-01-02\"",[149,150423,329],{"class":155},[149,150425,150404],{"class":169},[149,150427,313],{"class":155},[149,150429,2361],{"class":309},[149,150431,6648],{"class":155},[149,150433,150434],{"class":151,"line":346},[149,150435,150436],{"class":155},"    ],\n",[149,150438,150439,150442],{"class":151,"line":352},[149,150440,150441],{"class":169},"    \"上海\"",[149,150443,150388],{"class":155},[149,150445,150446,150448,150450,150452,150454,150456,150458,150460,150462],{"class":151,"line":1021},[149,150447,6635],{"class":155},[149,150449,149433],{"class":169},[149,150451,313],{"class":155},[149,150453,150399],{"class":169},[149,150455,329],{"class":155},[149,150457,150404],{"class":169},[149,150459,313],{"class":155},[149,150461,2258],{"class":309},[149,150463,6648],{"class":155},[149,150465,150466,150468,150470,150472,150474,150476,150478,150480,150482],{"class":151,"line":1035},[149,150467,6635],{"class":155},[149,150469,149433],{"class":169},[149,150471,313],{"class":155},[149,150473,150421],{"class":169},[149,150475,329],{"class":155},[149,150477,150404],{"class":169},[149,150479,313],{"class":155},[149,150481,2386],{"class":309},[149,150483,6648],{"class":155},[149,150485,150486],{"class":151,"line":1054},[149,150487,150436],{"class":155},[149,150489,150490],{"class":151,"line":1072},[149,150491,355],{"class":155},[24,150493,150494],{},"绘制多地区趋势：",[140,150496,150498],{"className":32084,"code":150497,"language":32086,"meta":145,"style":145},"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",[48,150499,150500,150514,150524,150528,150553,150557,150565,150569,150573,150585,150607,150620,150624,150628,150645,150661,150665],{"__ignoreMap":145},[149,150501,150502,150504,150506,150508,150510,150512],{"class":151,"line":152},[149,150503,32443],{"class":325},[149,150505,148815],{"class":155},[149,150507,32098],{"class":325},[149,150509,148820],{"class":155},[149,150511,33089],{"class":325},[149,150513,148825],{"class":155},[149,150515,150516,150518,150520,150522],{"class":151,"line":193},[149,150517,32443],{"class":325},[149,150519,148674],{"class":155},[149,150521,32098],{"class":325},[149,150523,148679],{"class":155},[149,150525,150526],{"class":151,"line":235},[149,150527,4119],{"emptyLinePlaceholder":1800},[149,150529,150530,150532,150534,150536,150538,150540,150542,150544,150546,150549,150551],{"class":151,"line":340},[149,150531,149236],{"class":155},[149,150533,166],{"class":325},[149,150535,150159],{"class":155},[149,150537,149433],{"class":169},[149,150539,6161],{"class":155},[149,150541,4743],{"class":325},[149,150543,149645],{"class":155},[149,150545,27752],{"class":325},[149,150547,150548],{"class":155}," data[",[149,150550,70953],{"class":169},[149,150552,79209],{"class":155},[149,150554,150555],{"class":151,"line":346},[149,150556,4119],{"emptyLinePlaceholder":1800},[149,150558,150559,150561,150563],{"class":151,"line":352},[149,150560,148688],{"class":155},[149,150562,166],{"class":325},[149,150564,148693],{"class":155},[149,150566,150567],{"class":151,"line":1021},[149,150568,149277],{"class":155},[149,150570,150571],{"class":151,"line":1035},[149,150572,4119],{"emptyLinePlaceholder":1800},[149,150574,150575,150577,150580,150582],{"class":151,"line":1054},[149,150576,4743],{"class":325},[149,150578,150579],{"class":155}," city, records ",[149,150581,27752],{"class":325},[149,150583,150584],{"class":155}," data.items():\n",[149,150586,150587,150590,150592,150594,150596,150598,150600,150602,150604],{"class":151,"line":1072},[149,150588,150589],{"class":155},"    values ",[149,150591,166],{"class":325},[149,150593,150159],{"class":155},[149,150595,150404],{"class":169},[149,150597,6161],{"class":155},[149,150599,4743],{"class":325},[149,150601,149645],{"class":155},[149,150603,27752],{"class":325},[149,150605,150606],{"class":155}," records]\n",[149,150608,150609,150612,150614,150616,150618],{"class":151,"line":1090},[149,150610,150611],{"class":155},"    line.add_yaxis(city, values, ",[149,150613,149181],{"class":6932},[149,150615,166],{"class":325},[149,150617,33182],{"class":309},[149,150619,1878],{"class":155},[149,150621,150622],{"class":151,"line":1633},[149,150623,4119],{"emptyLinePlaceholder":1800},[149,150625,150626],{"class":151,"line":1644},[149,150627,148904],{"class":155},[149,150629,150630,150632,150634,150636,150638,150640,150643],{"class":151,"line":3348},[149,150631,148909],{"class":6932},[149,150633,166],{"class":325},[149,150635,148914],{"class":155},[149,150637,53111],{"class":6932},[149,150639,166],{"class":325},[149,150641,150642],{"class":169},"\"多地区趋势图\"",[149,150644,39753],{"class":155},[149,150646,150647,150649,150651,150653,150655,150657,150659],{"class":151,"line":3362},[149,150648,148965],{"class":6932},[149,150650,166],{"class":325},[149,150652,148970],{"class":155},[149,150654,148973],{"class":6932},[149,150656,166],{"class":325},[149,150658,148978],{"class":169},[149,150660,39753],{"class":155},[149,150662,150663],{"class":151,"line":3367},[149,150664,1878],{"class":155},[149,150666,150667,150669,150672],{"class":151,"line":3373},[149,150668,148760],{"class":155},[149,150670,150671],{"class":169},"\"trend.html\"",[149,150673,1878],{"class":155},[24,150675,150676],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150678,150680],{"id":150679},"_1012-易错点","10.12 易错点",[125,150682,150683,150689,150695,150705,150711],{},[45,150684,150685,150688],{},[48,150686,150687],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[45,150690,150691,150694],{},[48,150692,150693],{},"render()"," 生成的是 HTML，不是图片。",[45,150696,150697,150698,150701,150702,30091],{},"JSON 字符串用 ",[48,150699,150700],{},"json.loads()","，JSON 文件用 ",[48,150703,150704],{},"json.load()",[45,150706,150707,150708,30091],{},"中文 JSON 保存时加 ",[48,150709,150710],{},"ensure_ascii=False",[45,150712,150713],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150715,150717],{"id":150716},"_1013-本章练习","10.13 本章练习",[125,150719,150720,150723,150726,150729,150732],{},[45,150721,150722],{},"安装 pyecharts 并生成第一个折线图。",[45,150724,150725],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[45,150727,150728],{},"绘制两条折线，对比线上和线下销售额。",[45,150730,150731],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[45,150733,150734],{},"对含有空值的销售数据进行清洗后再绘图。",[1783,150736,150737],{},"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":145,"searchDepth":193,"depth":193,"links":150739},[150740,150741,150742,150743,150744,150745,150746,150747,150748,150749,150750,150751,150752],{"id":148356,"depth":193,"text":148357},{"id":148431,"depth":193,"text":148432},{"id":148610,"depth":193,"text":148611},{"id":148661,"depth":193,"text":148662},{"id":148795,"depth":193,"text":148796},{"id":149071,"depth":193,"text":149072},{"id":149197,"depth":193,"text":149198},{"id":149408,"depth":193,"text":149409},{"id":149779,"depth":193,"text":149780},{"id":149991,"depth":193,"text":149992},{"id":150363,"depth":193,"text":150364},{"id":150679,"depth":193,"text":150680},{"id":150716,"depth":193,"text":150717},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148348,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150759,"title":150760,"body":150761,"description":1797,"extension":1798,"meta":153121,"navigation":1800,"path":153122,"seo":153123,"stem":153124,"__hash__":153125},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150762,"toc":153098},[150763,150766,150770,150773,150776,150852,150855,150946,150949,150953,150956,151000,151013,151017,151020,151087,151090,151094,151097,151181,151189,151193,151198,151339,151342,151353,151359,151365,151479,151483,151486,151489,151742,151745,151749,151752,151856,151859,151863,152014,152018,152025,152138,152142,152145,152251,152254,152258,152261,152292,152295,152400,152403,152407,152411,152421,152489,152493,152500,152564,152567,152571,152577,152673,152682,152686,153010,153019,153023,153051,153055,153095],[10,150764,150760],{"id":150765},"_11-面向对象基础",[14,150767,150769],{"id":150768},"_111-什么是面向对象","11.1 什么是面向对象",[24,150771,150772],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[24,150774,150775],{},"面向过程：",[140,150777,150779],{"className":32084,"code":150778,"language":32086,"meta":145,"style":145},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[48,150780,150781,150790,150798,150802,150812,150843,150847],{"__ignoreMap":145},[149,150782,150783,150785,150787],{"class":151,"line":152},[149,150784,147972],{"class":155},[149,150786,166],{"class":325},[149,150788,150789],{"class":169}," \"小明\"\n",[149,150791,150792,150794,150796],{"class":151,"line":193},[149,150793,147982],{"class":155},[149,150795,166],{"class":325},[149,150797,147987],{"class":309},[149,150799,150800],{"class":151,"line":235},[149,150801,4119],{"emptyLinePlaceholder":1800},[149,150803,150804,150806,150809],{"class":151,"line":340},[149,150805,33653],{"class":325},[149,150807,150808],{"class":162}," introduce",[149,150810,150811],{"class":155},"(name, age):\n",[149,150813,150814,150816,150818,150820,150823,150825,150827,150829,150832,150834,150836,150838,150841],{"class":151,"line":346},[149,150815,33005],{"class":309},[149,150817,319],{"class":155},[149,150819,1921],{"class":325},[149,150821,150822],{"class":169},"\"我叫",[149,150824,2756],{"class":309},[149,150826,81491],{"class":155},[149,150828,2805],{"class":309},[149,150830,150831],{"class":169},"，今年",[149,150833,2756],{"class":309},[149,150835,71905],{"class":155},[149,150837,2805],{"class":309},[149,150839,150840],{"class":169},"岁\"",[149,150842,1878],{"class":155},[149,150844,150845],{"class":151,"line":352},[149,150846,4119],{"emptyLinePlaceholder":1800},[149,150848,150849],{"class":151,"line":1021},[149,150850,150851],{"class":155},"introduce(name, age)\n",[24,150853,150854],{},"面向对象：",[140,150856,150858],{"className":32084,"code":150857,"language":32086,"meta":145,"style":145},"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",[48,150859,150860,150868,150876,150905,150909,150913,150923,150932,150941],{"__ignoreMap":145},[149,150861,150862,150864,150866],{"class":151,"line":152},[149,150863,913],{"class":325},[149,150865,9613],{"class":162},[149,150867,5457],{"class":155},[149,150869,150870,150872,150874],{"class":151,"line":193},[149,150871,32507],{"class":325},[149,150873,150808],{"class":162},[149,150875,32513],{"class":155},[149,150877,150878,150880,150882,150884,150886,150889,150891,150893,150895,150897,150899,150901,150903],{"class":151,"line":235},[149,150879,34157],{"class":309},[149,150881,319],{"class":155},[149,150883,1921],{"class":325},[149,150885,150822],{"class":169},[149,150887,150888],{"class":309},"{self",[149,150890,81982],{"class":155},[149,150892,2805],{"class":309},[149,150894,150831],{"class":169},[149,150896,150888],{"class":309},[149,150898,81994],{"class":155},[149,150900,2805],{"class":309},[149,150902,150840],{"class":169},[149,150904,1878],{"class":155},[149,150906,150907],{"class":151,"line":340},[149,150908,4119],{"emptyLinePlaceholder":1800},[149,150910,150911],{"class":151,"line":346},[149,150912,4119],{"emptyLinePlaceholder":1800},[149,150914,150915,150918,150920],{"class":151,"line":352},[149,150916,150917],{"class":155},"student ",[149,150919,166],{"class":325},[149,150921,150922],{"class":155}," Student()\n",[149,150924,150925,150928,150930],{"class":151,"line":1021},[149,150926,150927],{"class":155},"student.name ",[149,150929,166],{"class":325},[149,150931,150789],{"class":169},[149,150933,150934,150937,150939],{"class":151,"line":1035},[149,150935,150936],{"class":155},"student.age ",[149,150938,166],{"class":325},[149,150940,147987],{"class":309},[149,150942,150943],{"class":151,"line":1054},[149,150944,150945],{"class":155},"student.introduce()\n",[24,150947,150948],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150950,150952],{"id":150951},"_112-类和对象","11.2 类和对象",[24,150954,150955],{},"类是模板，对象是根据模板创建出来的具体实例。",[140,150957,150959],{"className":32084,"code":150958,"language":32086,"meta":145,"style":145},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[48,150960,150961,150969,150974,150978,150982,150991],{"__ignoreMap":145},[149,150962,150963,150965,150967],{"class":151,"line":152},[149,150964,913],{"class":325},[149,150966,9613],{"class":162},[149,150968,5457],{"class":155},[149,150970,150971],{"class":151,"line":193},[149,150972,150973],{"class":325},"    pass\n",[149,150975,150976],{"class":151,"line":235},[149,150977,4119],{"emptyLinePlaceholder":1800},[149,150979,150980],{"class":151,"line":340},[149,150981,4119],{"emptyLinePlaceholder":1800},[149,150983,150984,150987,150989],{"class":151,"line":346},[149,150985,150986],{"class":155},"student1 ",[149,150988,166],{"class":325},[149,150990,150922],{"class":155},[149,150992,150993,150996,150998],{"class":151,"line":352},[149,150994,150995],{"class":155},"student2 ",[149,150997,166],{"class":325},[149,150999,150922],{"class":155},[24,151001,151002,151005,151006,102698,151009,151012],{},[48,151003,151004],{},"Student"," 是类，",[48,151007,151008],{},"student1",[48,151010,151011],{},"student2"," 是对象。",[14,151014,151016],{"id":151015},"_113-属性","11.3 属性",[24,151018,151019],{},"属性是对象保存的数据。",[140,151021,151023],{"className":32084,"code":151022,"language":32086,"meta":145,"style":145},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[48,151024,151025,151033,151037,151041,151045,151053,151061,151069,151073,151080],{"__ignoreMap":145},[149,151026,151027,151029,151031],{"class":151,"line":152},[149,151028,913],{"class":325},[149,151030,9613],{"class":162},[149,151032,5457],{"class":155},[149,151034,151035],{"class":151,"line":193},[149,151036,150973],{"class":325},[149,151038,151039],{"class":151,"line":235},[149,151040,4119],{"emptyLinePlaceholder":1800},[149,151042,151043],{"class":151,"line":340},[149,151044,4119],{"emptyLinePlaceholder":1800},[149,151046,151047,151049,151051],{"class":151,"line":346},[149,151048,150917],{"class":155},[149,151050,166],{"class":325},[149,151052,150922],{"class":155},[149,151054,151055,151057,151059],{"class":151,"line":352},[149,151056,150927],{"class":155},[149,151058,166],{"class":325},[149,151060,150789],{"class":169},[149,151062,151063,151065,151067],{"class":151,"line":1021},[149,151064,150936],{"class":155},[149,151066,166],{"class":325},[149,151068,147987],{"class":309},[149,151070,151071],{"class":151,"line":1035},[149,151072,4119],{"emptyLinePlaceholder":1800},[149,151074,151075,151077],{"class":151,"line":1054},[149,151076,32121],{"class":309},[149,151078,151079],{"class":155},"(student.name)\n",[149,151081,151082,151084],{"class":151,"line":1072},[149,151083,32121],{"class":309},[149,151085,151086],{"class":155},"(student.age)\n",[24,151088,151089],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151091,151093],{"id":151092},"_114-方法","11.4 方法",[24,151095,151096],{},"类中的函数叫方法。",[140,151098,151099],{"className":32084,"code":150857,"language":32086,"meta":145,"style":145},[48,151100,151101,151109,151117,151145,151149,151153,151161,151169,151177],{"__ignoreMap":145},[149,151102,151103,151105,151107],{"class":151,"line":152},[149,151104,913],{"class":325},[149,151106,9613],{"class":162},[149,151108,5457],{"class":155},[149,151110,151111,151113,151115],{"class":151,"line":193},[149,151112,32507],{"class":325},[149,151114,150808],{"class":162},[149,151116,32513],{"class":155},[149,151118,151119,151121,151123,151125,151127,151129,151131,151133,151135,151137,151139,151141,151143],{"class":151,"line":235},[149,151120,34157],{"class":309},[149,151122,319],{"class":155},[149,151124,1921],{"class":325},[149,151126,150822],{"class":169},[149,151128,150888],{"class":309},[149,151130,81982],{"class":155},[149,151132,2805],{"class":309},[149,151134,150831],{"class":169},[149,151136,150888],{"class":309},[149,151138,81994],{"class":155},[149,151140,2805],{"class":309},[149,151142,150840],{"class":169},[149,151144,1878],{"class":155},[149,151146,151147],{"class":151,"line":340},[149,151148,4119],{"emptyLinePlaceholder":1800},[149,151150,151151],{"class":151,"line":346},[149,151152,4119],{"emptyLinePlaceholder":1800},[149,151154,151155,151157,151159],{"class":151,"line":352},[149,151156,150917],{"class":155},[149,151158,166],{"class":325},[149,151160,150922],{"class":155},[149,151162,151163,151165,151167],{"class":151,"line":1021},[149,151164,150927],{"class":155},[149,151166,166],{"class":325},[149,151168,150789],{"class":169},[149,151170,151171,151173,151175],{"class":151,"line":1035},[149,151172,150936],{"class":155},[149,151174,166],{"class":325},[149,151176,147987],{"class":309},[149,151178,151179],{"class":151,"line":1054},[149,151180,150945],{"class":155},[24,151182,151183,151185,151186,151188],{},[48,151184,32529],{}," 表示当前对象。调用方法时不需要手动传入 ",[48,151187,32529],{},"，Python 会自动传。",[14,151190,151192],{"id":151191},"_115-构造方法__init__","11.5 构造方法__init__",[24,151194,151195,151197],{},[48,151196,32535],{}," 在对象创建时自动执行，用于初始化属性。",[140,151199,151201],{"className":32084,"code":151200,"language":32086,"meta":145,"style":145},"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",[48,151202,151203,151211,151220,151232,151244,151255,151259,151267,151305,151309,151313,151335],{"__ignoreMap":145},[149,151204,151205,151207,151209],{"class":151,"line":152},[149,151206,913],{"class":325},[149,151208,9613],{"class":162},[149,151210,5457],{"class":155},[149,151212,151213,151215,151217],{"class":151,"line":193},[149,151214,32507],{"class":325},[149,151216,32510],{"class":309},[149,151218,151219],{"class":155},"(self, name, age, score):\n",[149,151221,151222,151224,151227,151229],{"class":151,"line":235},[149,151223,32551],{"class":309},[149,151225,151226],{"class":155},".name ",[149,151228,166],{"class":325},[149,151230,151231],{"class":155}," name\n",[149,151233,151234,151236,151239,151241],{"class":151,"line":340},[149,151235,32551],{"class":309},[149,151237,151238],{"class":155},".age ",[149,151240,166],{"class":325},[149,151242,151243],{"class":155}," age\n",[149,151245,151246,151248,151251,151253],{"class":151,"line":346},[149,151247,32551],{"class":309},[149,151249,151250],{"class":155},".score ",[149,151252,166],{"class":325},[149,151254,3302],{"class":155},[149,151256,151257],{"class":151,"line":352},[149,151258,4119],{"emptyLinePlaceholder":1800},[149,151260,151261,151263,151265],{"class":151,"line":1021},[149,151262,32507],{"class":325},[149,151264,150808],{"class":162},[149,151266,32513],{"class":155},[149,151268,151269,151271,151273,151275,151277,151279,151281,151283,151285,151287,151289,151291,151294,151296,151299,151301,151303],{"class":151,"line":1035},[149,151270,34157],{"class":309},[149,151272,319],{"class":155},[149,151274,1921],{"class":325},[149,151276,150822],{"class":169},[149,151278,150888],{"class":309},[149,151280,81982],{"class":155},[149,151282,2805],{"class":309},[149,151284,150831],{"class":169},[149,151286,150888],{"class":309},[149,151288,81994],{"class":155},[149,151290,2805],{"class":309},[149,151292,151293],{"class":169},"岁，成绩",[149,151295,150888],{"class":309},[149,151297,151298],{"class":155},".score",[149,151300,2805],{"class":309},[149,151302,2115],{"class":169},[149,151304,1878],{"class":155},[149,151306,151307],{"class":151,"line":1054},[149,151308,4119],{"emptyLinePlaceholder":1800},[149,151310,151311],{"class":151,"line":1072},[149,151312,4119],{"emptyLinePlaceholder":1800},[149,151314,151315,151317,151319,151322,151325,151327,151329,151331,151333],{"class":151,"line":1090},[149,151316,150917],{"class":155},[149,151318,166],{"class":325},[149,151320,151321],{"class":155}," Student(",[149,151323,151324],{"class":169},"\"小明\"",[149,151326,329],{"class":155},[149,151328,2513],{"class":309},[149,151330,329],{"class":155},[149,151332,2848],{"class":309},[149,151334,1878],{"class":155},[149,151336,151337],{"class":151,"line":1633},[149,151338,150945],{"class":155},[24,151340,151341],{},"构造方法的好处：",[125,151343,151344,151347,151350],{},[45,151345,151346],{},"创建对象时必须提供必要数据。",[45,151348,151349],{},"属性初始化集中，不容易漏。",[45,151351,151352],{},"对象状态更完整。",[14,151354,151356,151357],{"id":151355},"_116-str","11.6 ",[31,151358,3027],{},[24,151360,151361,151362,30091],{},"直接打印对象时，默认输出不直观。可以定义 ",[48,151363,151364],{},"__str__",[140,151366,151368],{"className":32084,"code":151367,"language":32086,"meta":145,"style":145},"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",[48,151369,151370,151378,151387,151397,151407,151411,151420,151448,151452,151456,151472],{"__ignoreMap":145},[149,151371,151372,151374,151376],{"class":151,"line":152},[149,151373,913],{"class":325},[149,151375,9613],{"class":162},[149,151377,5457],{"class":155},[149,151379,151380,151382,151384],{"class":151,"line":193},[149,151381,32507],{"class":325},[149,151383,32510],{"class":309},[149,151385,151386],{"class":155},"(self, name, age):\n",[149,151388,151389,151391,151393,151395],{"class":151,"line":235},[149,151390,32551],{"class":309},[149,151392,151226],{"class":155},[149,151394,166],{"class":325},[149,151396,151231],{"class":155},[149,151398,151399,151401,151403,151405],{"class":151,"line":340},[149,151400,32551],{"class":309},[149,151402,151238],{"class":155},[149,151404,166],{"class":325},[149,151406,151243],{"class":155},[149,151408,151409],{"class":151,"line":346},[149,151410,4119],{"emptyLinePlaceholder":1800},[149,151412,151413,151415,151418],{"class":151,"line":352},[149,151414,32507],{"class":325},[149,151416,151417],{"class":309}," __str__",[149,151419,32513],{"class":155},[149,151421,151422,151424,151427,151430,151432,151434,151436,151439,151441,151443,151445],{"class":151,"line":1021},[149,151423,16464],{"class":325},[149,151425,151426],{"class":325}," f",[149,151428,151429],{"class":169},"\"Student(name=",[149,151431,150888],{"class":309},[149,151433,81982],{"class":155},[149,151435,2805],{"class":309},[149,151437,151438],{"class":169},", age=",[149,151440,150888],{"class":309},[149,151442,81994],{"class":155},[149,151444,2805],{"class":309},[149,151446,151447],{"class":169},")\"\n",[149,151449,151450],{"class":151,"line":1035},[149,151451,4119],{"emptyLinePlaceholder":1800},[149,151453,151454],{"class":151,"line":1054},[149,151455,4119],{"emptyLinePlaceholder":1800},[149,151457,151458,151460,151462,151464,151466,151468,151470],{"class":151,"line":1072},[149,151459,150917],{"class":155},[149,151461,166],{"class":325},[149,151463,151321],{"class":155},[149,151465,151324],{"class":169},[149,151467,329],{"class":155},[149,151469,2513],{"class":309},[149,151471,1878],{"class":155},[149,151473,151474,151476],{"class":151,"line":1090},[149,151475,32121],{"class":309},[149,151477,151478],{"class":155},"(student)\n",[14,151480,151482],{"id":151481},"_117-封装","11.7 封装",[24,151484,151485],{},"封装就是把数据和方法放到类中，并控制访问方式。",[24,151487,151488],{},"Python 中以双下划线开头的属性通常视为私有属性。",[140,151490,151492],{"className":32084,"code":151491,"language":32086,"meta":145,"style":145},"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",[48,151493,151494,151503,151512,151524,151536,151540,151549,151558,151562,151572,151585,151596,151601,151612,151616,151625,151637,151648,151652,151665,151676,151680,151691,151695,151699,151717,151726,151735],{"__ignoreMap":145},[149,151495,151496,151498,151501],{"class":151,"line":152},[149,151497,913],{"class":325},[149,151499,151500],{"class":162}," Account",[149,151502,5457],{"class":155},[149,151504,151505,151507,151509],{"class":151,"line":193},[149,151506,32507],{"class":325},[149,151508,32510],{"class":309},[149,151510,151511],{"class":155},"(self, owner, balance):\n",[149,151513,151514,151516,151519,151521],{"class":151,"line":235},[149,151515,32551],{"class":309},[149,151517,151518],{"class":155},".owner ",[149,151520,166],{"class":325},[149,151522,151523],{"class":155}," owner\n",[149,151525,151526,151528,151531,151533],{"class":151,"line":340},[149,151527,32551],{"class":309},[149,151529,151530],{"class":155},".__balance ",[149,151532,166],{"class":325},[149,151534,151535],{"class":155}," balance\n",[149,151537,151538],{"class":151,"line":346},[149,151539,4119],{"emptyLinePlaceholder":1800},[149,151541,151542,151544,151547],{"class":151,"line":352},[149,151543,32507],{"class":325},[149,151545,151546],{"class":162}," get_balance",[149,151548,32513],{"class":155},[149,151550,151551,151553,151555],{"class":151,"line":1021},[149,151552,16464],{"class":325},[149,151554,40579],{"class":309},[149,151556,151557],{"class":155},".__balance\n",[149,151559,151560],{"class":151,"line":1035},[149,151561,4119],{"emptyLinePlaceholder":1800},[149,151563,151564,151566,151569],{"class":151,"line":1054},[149,151565,32507],{"class":325},[149,151567,151568],{"class":162}," deposit",[149,151570,151571],{"class":155},"(self, money):\n",[149,151573,151574,151576,151579,151581,151583],{"class":151,"line":1072},[149,151575,4216],{"class":325},[149,151577,151578],{"class":155}," money ",[149,151580,3311],{"class":325},[149,151582,5811],{"class":309},[149,151584,5457],{"class":155},[149,151586,151587,151589,151591,151594],{"class":151,"line":1090},[149,151588,36356],{"class":309},[149,151590,319],{"class":155},[149,151592,151593],{"class":169},"\"存款金额必须大于0\"",[149,151595,1878],{"class":155},[149,151597,151598],{"class":151,"line":1633},[149,151599,151600],{"class":325},"            return\n",[149,151602,151603,151605,151607,151609],{"class":151,"line":1644},[149,151604,32551],{"class":309},[149,151606,151530],{"class":155},[149,151608,11191],{"class":325},[149,151610,151611],{"class":155}," money\n",[149,151613,151614],{"class":151,"line":3348},[149,151615,4119],{"emptyLinePlaceholder":1800},[149,151617,151618,151620,151623],{"class":151,"line":3362},[149,151619,32507],{"class":325},[149,151621,151622],{"class":162}," withdraw",[149,151624,151571],{"class":155},[149,151626,151627,151629,151631,151633,151635],{"class":151,"line":3367},[149,151628,4216],{"class":325},[149,151630,151578],{"class":155},[149,151632,3311],{"class":325},[149,151634,5811],{"class":309},[149,151636,5457],{"class":155},[149,151638,151639,151641,151643,151646],{"class":151,"line":3373},[149,151640,36356],{"class":309},[149,151642,319],{"class":155},[149,151644,151645],{"class":169},"\"取款金额必须大于0\"",[149,151647,1878],{"class":155},[149,151649,151650],{"class":151,"line":3394},[149,151651,151600],{"class":325},[149,151653,151654,151656,151658,151660,151662],{"class":151,"line":3399},[149,151655,4216],{"class":325},[149,151657,151578],{"class":155},[149,151659,2819],{"class":325},[149,151661,40579],{"class":309},[149,151663,151664],{"class":155},".__balance:\n",[149,151666,151667,151669,151671,151674],{"class":151,"line":3413},[149,151668,36356],{"class":309},[149,151670,319],{"class":155},[149,151672,151673],{"class":169},"\"余额不足\"",[149,151675,1878],{"class":155},[149,151677,151678],{"class":151,"line":3418},[149,151679,151600],{"class":325},[149,151681,151682,151684,151686,151689],{"class":151,"line":3447},[149,151683,32551],{"class":309},[149,151685,151530],{"class":155},[149,151687,151688],{"class":325},"-=",[149,151690,151611],{"class":155},[149,151692,151693],{"class":151,"line":3452},[149,151694,4119],{"emptyLinePlaceholder":1800},[149,151696,151697],{"class":151,"line":3469},[149,151698,4119],{"emptyLinePlaceholder":1800},[149,151700,151701,151704,151706,151709,151711,151713,151715],{"class":151,"line":3474},[149,151702,151703],{"class":155},"account ",[149,151705,166],{"class":325},[149,151707,151708],{"class":155}," Account(",[149,151710,151324],{"class":169},[149,151712,329],{"class":155},[149,151714,8126],{"class":309},[149,151716,1878],{"class":155},[149,151718,151719,151722,151724],{"class":151,"line":3479},[149,151720,151721],{"class":155},"account.deposit(",[149,151723,3442],{"class":309},[149,151725,1878],{"class":155},[149,151727,151728,151731,151733],{"class":151,"line":3484},[149,151729,151730],{"class":155},"account.withdraw(",[149,151732,322],{"class":309},[149,151734,1878],{"class":155},[149,151736,151737,151739],{"class":151,"line":3498},[149,151738,32121],{"class":309},[149,151740,151741],{"class":155},"(account.get_balance())\n",[24,151743,151744],{},"封装的意义是避免外部随意修改内部状态。",[14,151746,151748],{"id":151747},"_118-继承","11.8 继承",[24,151750,151751],{},"继承可以让子类复用父类的属性和方法。",[140,151753,151755],{"className":32084,"code":151754,"language":32086,"meta":145,"style":145},"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",[48,151756,151757,151766,151775,151786,151790,151794,151808,151817,151828,151832,151836,151846,151851],{"__ignoreMap":145},[149,151758,151759,151761,151764],{"class":151,"line":152},[149,151760,913],{"class":325},[149,151762,151763],{"class":162}," Animal",[149,151765,5457],{"class":155},[149,151767,151768,151770,151773],{"class":151,"line":193},[149,151769,32507],{"class":325},[149,151771,151772],{"class":162}," eat",[149,151774,32513],{"class":155},[149,151776,151777,151779,151781,151784],{"class":151,"line":235},[149,151778,34157],{"class":309},[149,151780,319],{"class":155},[149,151782,151783],{"class":169},"\"吃东西\"",[149,151785,1878],{"class":155},[149,151787,151788],{"class":151,"line":340},[149,151789,4119],{"emptyLinePlaceholder":1800},[149,151791,151792],{"class":151,"line":346},[149,151793,4119],{"emptyLinePlaceholder":1800},[149,151795,151796,151798,151801,151803,151806],{"class":151,"line":352},[149,151797,913],{"class":325},[149,151799,151800],{"class":162}," Dog",[149,151802,319],{"class":155},[149,151804,151805],{"class":162},"Animal",[149,151807,32492],{"class":155},[149,151809,151810,151812,151815],{"class":151,"line":1021},[149,151811,32507],{"class":325},[149,151813,151814],{"class":162}," bark",[149,151816,32513],{"class":155},[149,151818,151819,151821,151823,151826],{"class":151,"line":1035},[149,151820,34157],{"class":309},[149,151822,319],{"class":155},[149,151824,151825],{"class":169},"\"汪汪\"",[149,151827,1878],{"class":155},[149,151829,151830],{"class":151,"line":1054},[149,151831,4119],{"emptyLinePlaceholder":1800},[149,151833,151834],{"class":151,"line":1072},[149,151835,4119],{"emptyLinePlaceholder":1800},[149,151837,151838,151841,151843],{"class":151,"line":1090},[149,151839,151840],{"class":155},"dog ",[149,151842,166],{"class":325},[149,151844,151845],{"class":155}," Dog()\n",[149,151847,151848],{"class":151,"line":1633},[149,151849,151850],{"class":155},"dog.eat()\n",[149,151852,151853],{"class":151,"line":1644},[149,151854,151855],{"class":155},"dog.bark()\n",[24,151857,151858],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151860,151862],{"id":151861},"_119-方法重写","11.9 方法重写",[140,151864,151866],{"className":32084,"code":151865,"language":32086,"meta":145,"style":145},"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",[48,151867,151868,151876,151885,151896,151900,151904,151916,151924,151934,151938,151942,151955,151963,151974,151978,151982,151990,152000,152004,152009],{"__ignoreMap":145},[149,151869,151870,151872,151874],{"class":151,"line":152},[149,151871,913],{"class":325},[149,151873,151763],{"class":162},[149,151875,5457],{"class":155},[149,151877,151878,151880,151883],{"class":151,"line":193},[149,151879,32507],{"class":325},[149,151881,151882],{"class":162}," speak",[149,151884,32513],{"class":155},[149,151886,151887,151889,151891,151894],{"class":151,"line":235},[149,151888,34157],{"class":309},[149,151890,319],{"class":155},[149,151892,151893],{"class":169},"\"动物叫\"",[149,151895,1878],{"class":155},[149,151897,151898],{"class":151,"line":340},[149,151899,4119],{"emptyLinePlaceholder":1800},[149,151901,151902],{"class":151,"line":346},[149,151903,4119],{"emptyLinePlaceholder":1800},[149,151905,151906,151908,151910,151912,151914],{"class":151,"line":352},[149,151907,913],{"class":325},[149,151909,151800],{"class":162},[149,151911,319],{"class":155},[149,151913,151805],{"class":162},[149,151915,32492],{"class":155},[149,151917,151918,151920,151922],{"class":151,"line":1021},[149,151919,32507],{"class":325},[149,151921,151882],{"class":162},[149,151923,32513],{"class":155},[149,151925,151926,151928,151930,151932],{"class":151,"line":1035},[149,151927,34157],{"class":309},[149,151929,319],{"class":155},[149,151931,151825],{"class":169},[149,151933,1878],{"class":155},[149,151935,151936],{"class":151,"line":1054},[149,151937,4119],{"emptyLinePlaceholder":1800},[149,151939,151940],{"class":151,"line":1072},[149,151941,4119],{"emptyLinePlaceholder":1800},[149,151943,151944,151946,151949,151951,151953],{"class":151,"line":1090},[149,151945,913],{"class":325},[149,151947,151948],{"class":162}," Cat",[149,151950,319],{"class":155},[149,151952,151805],{"class":162},[149,151954,32492],{"class":155},[149,151956,151957,151959,151961],{"class":151,"line":1633},[149,151958,32507],{"class":325},[149,151960,151882],{"class":162},[149,151962,32513],{"class":155},[149,151964,151965,151967,151969,151972],{"class":151,"line":1644},[149,151966,34157],{"class":309},[149,151968,319],{"class":155},[149,151970,151971],{"class":169},"\"喵喵\"",[149,151973,1878],{"class":155},[149,151975,151976],{"class":151,"line":3348},[149,151977,4119],{"emptyLinePlaceholder":1800},[149,151979,151980],{"class":151,"line":3362},[149,151981,4119],{"emptyLinePlaceholder":1800},[149,151983,151984,151986,151988],{"class":151,"line":3367},[149,151985,151840],{"class":155},[149,151987,166],{"class":325},[149,151989,151845],{"class":155},[149,151991,151992,151995,151997],{"class":151,"line":3373},[149,151993,151994],{"class":155},"cat ",[149,151996,166],{"class":325},[149,151998,151999],{"class":155}," Cat()\n",[149,152001,152002],{"class":151,"line":3394},[149,152003,4119],{"emptyLinePlaceholder":1800},[149,152005,152006],{"class":151,"line":3399},[149,152007,152008],{"class":155},"dog.speak()\n",[149,152010,152011],{"class":151,"line":3413},[149,152012,152013],{"class":155},"cat.speak()\n",[14,152015,152017],{"id":152016},"_1110-super","11.10 super",[24,152019,152020,152021,152024],{},"子类可以通过 ",[48,152022,152023],{},"super()"," 调用父类方法。",[140,152026,152028],{"className":32084,"code":152027,"language":32086,"meta":145,"style":145},"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",[48,152029,152030,152038,152047,152057,152061,152065,152077,152086,152097,152107,152111,152115,152131],{"__ignoreMap":145},[149,152031,152032,152034,152036],{"class":151,"line":152},[149,152033,913],{"class":325},[149,152035,17280],{"class":162},[149,152037,5457],{"class":155},[149,152039,152040,152042,152044],{"class":151,"line":193},[149,152041,32507],{"class":325},[149,152043,32510],{"class":309},[149,152045,152046],{"class":155},"(self, name):\n",[149,152048,152049,152051,152053,152055],{"class":151,"line":235},[149,152050,32551],{"class":309},[149,152052,151226],{"class":155},[149,152054,166],{"class":325},[149,152056,151231],{"class":155},[149,152058,152059],{"class":151,"line":340},[149,152060,4119],{"emptyLinePlaceholder":1800},[149,152062,152063],{"class":151,"line":346},[149,152064,4119],{"emptyLinePlaceholder":1800},[149,152066,152067,152069,152071,152073,152075],{"class":151,"line":352},[149,152068,913],{"class":325},[149,152070,9613],{"class":162},[149,152072,319],{"class":155},[149,152074,20756],{"class":162},[149,152076,32492],{"class":155},[149,152078,152079,152081,152083],{"class":151,"line":1021},[149,152080,32507],{"class":325},[149,152082,32510],{"class":309},[149,152084,152085],{"class":155},"(self, name, score):\n",[149,152087,152088,152090,152092,152094],{"class":151,"line":1035},[149,152089,32523],{"class":309},[149,152091,18971],{"class":155},[149,152093,32535],{"class":309},[149,152095,152096],{"class":155},"(name)\n",[149,152098,152099,152101,152103,152105],{"class":151,"line":1054},[149,152100,32551],{"class":309},[149,152102,151250],{"class":155},[149,152104,166],{"class":325},[149,152106,3302],{"class":155},[149,152108,152109],{"class":151,"line":1072},[149,152110,4119],{"emptyLinePlaceholder":1800},[149,152112,152113],{"class":151,"line":1090},[149,152114,4119],{"emptyLinePlaceholder":1800},[149,152116,152117,152119,152121,152123,152125,152127,152129],{"class":151,"line":1633},[149,152118,150917],{"class":155},[149,152120,166],{"class":325},[149,152122,151321],{"class":155},[149,152124,151324],{"class":169},[149,152126,329],{"class":155},[149,152128,2848],{"class":309},[149,152130,1878],{"class":155},[149,152132,152133,152135],{"class":151,"line":1644},[149,152134,32121],{"class":309},[149,152136,152137],{"class":155},"(student.name, student.score)\n",[14,152139,152141],{"id":152140},"_1111-多态","11.11 多态",[24,152143,152144],{},"多态指不同对象响应同一个方法，表现出不同结果。",[140,152146,152148],{"className":32084,"code":152147,"language":32086,"meta":145,"style":145},"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",[48,152149,152150,152158,152166,152176,152180,152184,152192,152200,152210,152214,152218,152228,152233,152237,152241,152246],{"__ignoreMap":145},[149,152151,152152,152154,152156],{"class":151,"line":152},[149,152153,913],{"class":325},[149,152155,151800],{"class":162},[149,152157,5457],{"class":155},[149,152159,152160,152162,152164],{"class":151,"line":193},[149,152161,32507],{"class":325},[149,152163,151882],{"class":162},[149,152165,32513],{"class":155},[149,152167,152168,152170,152172,152174],{"class":151,"line":235},[149,152169,34157],{"class":309},[149,152171,319],{"class":155},[149,152173,151825],{"class":169},[149,152175,1878],{"class":155},[149,152177,152178],{"class":151,"line":340},[149,152179,4119],{"emptyLinePlaceholder":1800},[149,152181,152182],{"class":151,"line":346},[149,152183,4119],{"emptyLinePlaceholder":1800},[149,152185,152186,152188,152190],{"class":151,"line":352},[149,152187,913],{"class":325},[149,152189,151948],{"class":162},[149,152191,5457],{"class":155},[149,152193,152194,152196,152198],{"class":151,"line":1021},[149,152195,32507],{"class":325},[149,152197,151882],{"class":162},[149,152199,32513],{"class":155},[149,152201,152202,152204,152206,152208],{"class":151,"line":1035},[149,152203,34157],{"class":309},[149,152205,319],{"class":155},[149,152207,151971],{"class":169},[149,152209,1878],{"class":155},[149,152211,152212],{"class":151,"line":1054},[149,152213,4119],{"emptyLinePlaceholder":1800},[149,152215,152216],{"class":151,"line":1072},[149,152217,4119],{"emptyLinePlaceholder":1800},[149,152219,152220,152222,152225],{"class":151,"line":1090},[149,152221,33653],{"class":325},[149,152223,152224],{"class":162}," make_sound",[149,152226,152227],{"class":155},"(animal):\n",[149,152229,152230],{"class":151,"line":1633},[149,152231,152232],{"class":155},"    animal.speak()\n",[149,152234,152235],{"class":151,"line":1644},[149,152236,4119],{"emptyLinePlaceholder":1800},[149,152238,152239],{"class":151,"line":3348},[149,152240,4119],{"emptyLinePlaceholder":1800},[149,152242,152243],{"class":151,"line":3362},[149,152244,152245],{"class":155},"make_sound(Dog())\n",[149,152247,152248],{"class":151,"line":3367},[149,152249,152250],{"class":155},"make_sound(Cat())\n",[24,152252,152253],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152255,152257],{"id":152256},"_1112-类属性和实例属性","11.12 类属性和实例属性",[24,152259,152260],{},"实例属性属于对象：",[140,152262,152264],{"className":32084,"code":152263,"language":32086,"meta":145,"style":145},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[48,152265,152266,152274,152282],{"__ignoreMap":145},[149,152267,152268,152270,152272],{"class":151,"line":152},[149,152269,913],{"class":325},[149,152271,9613],{"class":162},[149,152273,5457],{"class":155},[149,152275,152276,152278,152280],{"class":151,"line":193},[149,152277,32507],{"class":325},[149,152279,32510],{"class":309},[149,152281,152046],{"class":155},[149,152283,152284,152286,152288,152290],{"class":151,"line":235},[149,152285,32551],{"class":309},[149,152287,151226],{"class":155},[149,152289,166],{"class":325},[149,152291,151231],{"class":155},[24,152293,152294],{},"类属性属于类，所有对象共享：",[140,152296,152298],{"className":32084,"code":152297,"language":32086,"meta":145,"style":145},"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",[48,152299,152300,152308,152318,152322,152330,152340,152344,152348,152361,152375,152379,152386,152393],{"__ignoreMap":145},[149,152301,152302,152304,152306],{"class":151,"line":152},[149,152303,913],{"class":325},[149,152305,9613],{"class":162},[149,152307,5457],{"class":155},[149,152309,152310,152313,152315],{"class":151,"line":193},[149,152311,152312],{"class":155},"    school ",[149,152314,166],{"class":325},[149,152316,152317],{"class":169}," \"黑马学校\"\n",[149,152319,152320],{"class":151,"line":235},[149,152321,4119],{"emptyLinePlaceholder":1800},[149,152323,152324,152326,152328],{"class":151,"line":340},[149,152325,32507],{"class":325},[149,152327,32510],{"class":309},[149,152329,152046],{"class":155},[149,152331,152332,152334,152336,152338],{"class":151,"line":346},[149,152333,32551],{"class":309},[149,152335,151226],{"class":155},[149,152337,166],{"class":325},[149,152339,151231],{"class":155},[149,152341,152342],{"class":151,"line":352},[149,152343,4119],{"emptyLinePlaceholder":1800},[149,152345,152346],{"class":151,"line":1021},[149,152347,4119],{"emptyLinePlaceholder":1800},[149,152349,152350,152353,152355,152357,152359],{"class":151,"line":1035},[149,152351,152352],{"class":155},"s1 ",[149,152354,166],{"class":325},[149,152356,151321],{"class":155},[149,152358,151324],{"class":169},[149,152360,1878],{"class":155},[149,152362,152363,152366,152368,152370,152373],{"class":151,"line":1054},[149,152364,152365],{"class":155},"s2 ",[149,152367,166],{"class":325},[149,152369,151321],{"class":155},[149,152371,152372],{"class":169},"\"小红\"",[149,152374,1878],{"class":155},[149,152376,152377],{"class":151,"line":1072},[149,152378,4119],{"emptyLinePlaceholder":1800},[149,152380,152381,152383],{"class":151,"line":1090},[149,152382,32121],{"class":309},[149,152384,152385],{"class":155},"(s1.school)\n",[149,152387,152388,152390],{"class":151,"line":1633},[149,152389,32121],{"class":309},[149,152391,152392],{"class":155},"(s2.school)\n",[149,152394,152395,152397],{"class":151,"line":1644},[149,152396,32121],{"class":309},[149,152398,152399],{"class":155},"(Student.school)\n",[24,152401,152402],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152404,152406],{"id":152405},"_1113-类方法和静态方法","11.13 类方法和静态方法",[19,152408,152410],{"id":152409},"_11131-类方法","11.13.1 类方法",[24,152412,152413,152414,152417,152418,30091],{},"类方法使用 ",[48,152415,152416],{},"@classmethod","，第一个参数通常是 ",[48,152419,152420],{},"cls",[140,152422,152424],{"className":32084,"code":152423,"language":32086,"meta":145,"style":145},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[48,152425,152426,152434,152442,152446,152454,152464,152474,152478,152482],{"__ignoreMap":145},[149,152427,152428,152430,152432],{"class":151,"line":152},[149,152429,913],{"class":325},[149,152431,9613],{"class":162},[149,152433,5457],{"class":155},[149,152435,152436,152438,152440],{"class":151,"line":193},[149,152437,152312],{"class":155},[149,152439,166],{"class":325},[149,152441,152317],{"class":169},[149,152443,152444],{"class":151,"line":235},[149,152445,4119],{"emptyLinePlaceholder":1800},[149,152447,152448,152451],{"class":151,"line":340},[149,152449,152450],{"class":162},"    @",[149,152452,152453],{"class":309},"classmethod\n",[149,152455,152456,152458,152461],{"class":151,"line":346},[149,152457,32507],{"class":325},[149,152459,152460],{"class":162}," get_school",[149,152462,152463],{"class":155},"(cls):\n",[149,152465,152466,152468,152471],{"class":151,"line":352},[149,152467,16464],{"class":325},[149,152469,152470],{"class":309}," cls",[149,152472,152473],{"class":155},".school\n",[149,152475,152476],{"class":151,"line":1021},[149,152477,4119],{"emptyLinePlaceholder":1800},[149,152479,152480],{"class":151,"line":1035},[149,152481,4119],{"emptyLinePlaceholder":1800},[149,152483,152484,152486],{"class":151,"line":1054},[149,152485,32121],{"class":309},[149,152487,152488],{"class":155},"(Student.get_school())\n",[19,152490,152492],{"id":152491},"_11132-静态方法","11.13.2 静态方法",[24,152494,152495,152496,152499],{},"静态方法使用 ",[48,152497,152498],{},"@staticmethod","，不需要访问实例和类。",[140,152501,152503],{"className":32084,"code":152502,"language":32086,"meta":145,"style":145},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[48,152504,152505,152514,152521,152530,152541,152545,152549],{"__ignoreMap":145},[149,152506,152507,152509,152512],{"class":151,"line":152},[149,152508,913],{"class":325},[149,152510,152511],{"class":162}," MathUtils",[149,152513,5457],{"class":155},[149,152515,152516,152518],{"class":151,"line":193},[149,152517,152450],{"class":162},[149,152519,152520],{"class":309},"staticmethod\n",[149,152522,152523,152525,152527],{"class":151,"line":235},[149,152524,32507],{"class":325},[149,152526,6925],{"class":162},[149,152528,152529],{"class":155},"(a, b):\n",[149,152531,152532,152534,152536,152538],{"class":151,"line":340},[149,152533,16464],{"class":325},[149,152535,12583],{"class":155},[149,152537,2344],{"class":325},[149,152539,152540],{"class":155}," b\n",[149,152542,152543],{"class":151,"line":346},[149,152544,4119],{"emptyLinePlaceholder":1800},[149,152546,152547],{"class":151,"line":352},[149,152548,4119],{"emptyLinePlaceholder":1800},[149,152550,152551,152553,152556,152558,152560,152562],{"class":151,"line":1021},[149,152552,32121],{"class":309},[149,152554,152555],{"class":155},"(MathUtils.add(",[149,152557,830],{"class":309},[149,152559,329],{"class":155},[149,152561,1045],{"class":309},[149,152563,32203],{"class":155},[24,152565,152566],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152568,152570],{"id":152569},"_1114-dataclass","11.14 dataclass",[24,152572,152573,152576],{},[48,152574,152575],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[140,152578,152580],{"className":32084,"code":152579,"language":32086,"meta":145,"style":145},"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",[48,152581,152582,152594,152598,152602,152607,152615,152623,152631,152639,152643,152647,152667],{"__ignoreMap":145},[149,152583,152584,152586,152589,152591],{"class":151,"line":152},[149,152585,32443],{"class":325},[149,152587,152588],{"class":155}," dataclasses ",[149,152590,32098],{"class":325},[149,152592,152593],{"class":155}," dataclass\n",[149,152595,152596],{"class":151,"line":193},[149,152597,4119],{"emptyLinePlaceholder":1800},[149,152599,152600],{"class":151,"line":235},[149,152601,4119],{"emptyLinePlaceholder":1800},[149,152603,152604],{"class":151,"line":340},[149,152605,152606],{"class":162},"@dataclass\n",[149,152608,152609,152611,152613],{"class":151,"line":346},[149,152610,913],{"class":325},[149,152612,9613],{"class":162},[149,152614,5457],{"class":155},[149,152616,152617,152620],{"class":151,"line":352},[149,152618,152619],{"class":155},"    name: ",[149,152621,152622],{"class":309},"str\n",[149,152624,152625,152628],{"class":151,"line":1021},[149,152626,152627],{"class":155},"    age: ",[149,152629,152630],{"class":309},"int\n",[149,152632,152633,152636],{"class":151,"line":1035},[149,152634,152635],{"class":155},"    score: ",[149,152637,152638],{"class":309},"float\n",[149,152640,152641],{"class":151,"line":1054},[149,152642,4119],{"emptyLinePlaceholder":1800},[149,152644,152645],{"class":151,"line":1072},[149,152646,4119],{"emptyLinePlaceholder":1800},[149,152648,152649,152651,152653,152655,152657,152659,152661,152663,152665],{"class":151,"line":1090},[149,152650,150917],{"class":155},[149,152652,166],{"class":325},[149,152654,151321],{"class":155},[149,152656,151324],{"class":169},[149,152658,329],{"class":155},[149,152660,2513],{"class":309},[149,152662,329],{"class":155},[149,152664,2848],{"class":309},[149,152666,1878],{"class":155},[149,152668,152669,152671],{"class":151,"line":1633},[149,152670,32121],{"class":309},[149,152672,151478],{"class":155},[24,152674,152675,152676,2077,152678,152681],{},"它会自动生成 ",[48,152677,32535],{},[48,152679,152680],{},"__repr__"," 等方法。适合数据模型类。",[14,152683,152685],{"id":152684},"_1115-小案例学生类","11.15 小案例：学生类",[140,152687,152689],{"className":32084,"code":152688,"language":32086,"meta":145,"style":145},"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",[48,152690,152691,152699,152708,152720,152730,152740,152750,152754,152763,152776,152780,152789,152795,152807,152819,152831,152843,152847,152851,152857,152867,152876,152886,152894,152902,152911,152915,152919,152927,152963,152967,152971,152996,153003],{"__ignoreMap":145},[149,152692,152693,152695,152697],{"class":151,"line":152},[149,152694,913],{"class":325},[149,152696,9613],{"class":162},[149,152698,5457],{"class":155},[149,152700,152701,152703,152705],{"class":151,"line":193},[149,152702,32507],{"class":325},[149,152704,32510],{"class":309},[149,152706,152707],{"class":155},"(self, student_id, name, age, score):\n",[149,152709,152710,152712,152715,152717],{"class":151,"line":235},[149,152711,32551],{"class":309},[149,152713,152714],{"class":155},".student_id ",[149,152716,166],{"class":325},[149,152718,152719],{"class":155}," student_id\n",[149,152721,152722,152724,152726,152728],{"class":151,"line":340},[149,152723,32551],{"class":309},[149,152725,151226],{"class":155},[149,152727,166],{"class":325},[149,152729,151231],{"class":155},[149,152731,152732,152734,152736,152738],{"class":151,"line":346},[149,152733,32551],{"class":309},[149,152735,151238],{"class":155},[149,152737,166],{"class":325},[149,152739,151243],{"class":155},[149,152741,152742,152744,152746,152748],{"class":151,"line":352},[149,152743,32551],{"class":309},[149,152745,151250],{"class":155},[149,152747,166],{"class":325},[149,152749,3302],{"class":155},[149,152751,152752],{"class":151,"line":1021},[149,152753,4119],{"emptyLinePlaceholder":1800},[149,152755,152756,152758,152761],{"class":151,"line":1035},[149,152757,32507],{"class":325},[149,152759,152760],{"class":162}," is_passed",[149,152762,32513],{"class":155},[149,152764,152765,152767,152769,152771,152773],{"class":151,"line":1054},[149,152766,16464],{"class":325},[149,152768,40579],{"class":309},[149,152770,151250],{"class":155},[149,152772,3430],{"class":325},[149,152774,152775],{"class":309}," 60\n",[149,152777,152778],{"class":151,"line":1072},[149,152779,4119],{"emptyLinePlaceholder":1800},[149,152781,152782,152784,152787],{"class":151,"line":1090},[149,152783,32507],{"class":325},[149,152785,152786],{"class":162}," to_dict",[149,152788,32513],{"class":155},[149,152790,152791,152793],{"class":151,"line":1633},[149,152792,16464],{"class":325},[149,152794,304],{"class":155},[149,152796,152797,152800,152802,152804],{"class":151,"line":1644},[149,152798,152799],{"class":169},"            \"student_id\"",[149,152801,313],{"class":155},[149,152803,32529],{"class":309},[149,152805,152806],{"class":155},".student_id,\n",[149,152808,152809,152812,152814,152816],{"class":151,"line":3348},[149,152810,152811],{"class":169},"            \"name\"",[149,152813,313],{"class":155},[149,152815,32529],{"class":309},[149,152817,152818],{"class":155},".name,\n",[149,152820,152821,152824,152826,152828],{"class":151,"line":3362},[149,152822,152823],{"class":169},"            \"age\"",[149,152825,313],{"class":155},[149,152827,32529],{"class":309},[149,152829,152830],{"class":155},".age,\n",[149,152832,152833,152836,152838,152840],{"class":151,"line":3367},[149,152834,152835],{"class":169},"            \"score\"",[149,152837,313],{"class":155},[149,152839,32529],{"class":309},[149,152841,152842],{"class":155},".score,\n",[149,152844,152845],{"class":151,"line":3373},[149,152846,4248],{"class":155},[149,152848,152849],{"class":151,"line":3394},[149,152850,4119],{"emptyLinePlaceholder":1800},[149,152852,152853,152855],{"class":151,"line":3399},[149,152854,152450],{"class":162},[149,152856,152453],{"class":309},[149,152858,152859,152861,152864],{"class":151,"line":3413},[149,152860,32507],{"class":325},[149,152862,152863],{"class":162}," from_dict",[149,152865,152866],{"class":155},"(cls, data):\n",[149,152868,152869,152871,152873],{"class":151,"line":3418},[149,152870,16464],{"class":325},[149,152872,152470],{"class":309},[149,152874,152875],{"class":155},"(\n",[149,152877,152878,152881,152884],{"class":151,"line":3447},[149,152879,152880],{"class":155},"            data[",[149,152882,152883],{"class":169},"\"student_id\"",[149,152885,89517],{"class":155},[149,152887,152888,152890,152892],{"class":151,"line":3452},[149,152889,152880],{"class":155},[149,152891,64367],{"class":169},[149,152893,89517],{"class":155},[149,152895,152896,152898,152900],{"class":151,"line":3469},[149,152897,152880],{"class":155},[149,152899,70808],{"class":169},[149,152901,89517],{"class":155},[149,152903,152904,152906,152909],{"class":151,"line":3474},[149,152905,152880],{"class":155},[149,152907,152908],{"class":169},"\"score\"",[149,152910,89517],{"class":155},[149,152912,152913],{"class":151,"line":3479},[149,152914,39832],{"class":155},[149,152916,152917],{"class":151,"line":3484},[149,152918,4119],{"emptyLinePlaceholder":1800},[149,152920,152921,152923,152925],{"class":151,"line":3498},[149,152922,32507],{"class":325},[149,152924,151417],{"class":309},[149,152926,32513],{"class":155},[149,152928,152929,152931,152933,152935,152937,152940,152942,152945,152947,152949,152951,152953,152955,152957,152959,152961],{"class":151,"line":3503},[149,152930,16464],{"class":325},[149,152932,151426],{"class":325},[149,152934,2115],{"class":169},[149,152936,150888],{"class":309},[149,152938,152939],{"class":155},".student_id",[149,152941,2805],{"class":309},[149,152943,152944],{"class":309}," {self",[149,152946,81982],{"class":155},[149,152948,2805],{"class":309},[149,152950,152944],{"class":309},[149,152952,81994],{"class":155},[149,152954,2805],{"class":309},[149,152956,152944],{"class":309},[149,152958,151298],{"class":155},[149,152960,2805],{"class":309},[149,152962,26842],{"class":169},[149,152964,152965],{"class":151,"line":4296},[149,152966,4119],{"emptyLinePlaceholder":1800},[149,152968,152969],{"class":151,"line":4310},[149,152970,4119],{"emptyLinePlaceholder":1800},[149,152972,152973,152975,152977,152979,152982,152984,152986,152988,152990,152992,152994],{"class":151,"line":4318},[149,152974,150917],{"class":155},[149,152976,166],{"class":325},[149,152978,151321],{"class":155},[149,152980,152981],{"class":169},"\"001\"",[149,152983,329],{"class":155},[149,152985,151324],{"class":169},[149,152987,329],{"class":155},[149,152989,2513],{"class":309},[149,152991,329],{"class":155},[149,152993,2848],{"class":309},[149,152995,1878],{"class":155},[149,152997,152998,153000],{"class":151,"line":4323},[149,152999,32121],{"class":309},[149,153001,153002],{"class":155},"(student.is_passed())\n",[149,153004,153005,153007],{"class":151,"line":4329},[149,153006,32121],{"class":309},[149,153008,153009],{"class":155},"(student.to_dict())\n",[24,153011,153012,102698,153015,153018],{},[48,153013,153014],{},"to_dict()",[48,153016,153017],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153020,153022],{"id":153021},"_1116-易错点","11.16 易错点",[125,153024,153025,153031,153037,153042,153045,153048],{},[45,153026,153027,153028,30091],{},"类名推荐使用大驼峰，如 ",[48,153029,153030],{},"StudentManager",[45,153032,153033,153034,153036],{},"方法第一个参数必须写 ",[48,153035,32529],{},"，调用时不用传。",[45,153038,153039,153041],{},[48,153040,32535],{}," 不是普通方法，它在创建对象时自动执行。",[45,153043,153044],{},"私有属性不是绝对安全，只是约定和名称改写。",[45,153046,153047],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[45,153049,153050],{},"类中方法太多时，说明职责可能过重。",[14,153052,153054],{"id":153053},"_1117-本章练习","11.17 本章练习",[125,153056,153057,153063,153069,153074,153087],{},[45,153058,153059,153060,153062],{},"定义 ",[48,153061,151004],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[45,153064,153059,153065,153068],{},[48,153066,153067],{},"Account"," 类，实现存款、取款、查询余额。",[45,153070,153059,153071,153073],{},[48,153072,18936],{}," 类，计算圆的周长和面积。",[45,153075,153059,153076,2077,153079,153082,153083,153086],{},[48,153077,153078],{},"Dog",[48,153080,153081],{},"Cat"," 类，并用同一个函数调用它们的 ",[48,153084,153085],{},"speak()"," 方法。",[45,153088,106045,153089,153091,153092,30091],{},[48,153090,152575],{}," 定义一个商品类 ",[48,153093,153094],{},"Product",[1783,153096,153097],{},"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":145,"searchDepth":193,"depth":193,"links":153099},[153100,153101,153102,153103,153104,153105,153107,153108,153109,153110,153111,153112,153113,153117,153118,153119,153120],{"id":150768,"depth":193,"text":150769},{"id":150951,"depth":193,"text":150952},{"id":151015,"depth":193,"text":151016},{"id":151092,"depth":193,"text":151093},{"id":151191,"depth":193,"text":151192},{"id":151355,"depth":193,"text":153106},"11.6 str",{"id":151481,"depth":193,"text":151482},{"id":151747,"depth":193,"text":151748},{"id":151861,"depth":193,"text":151862},{"id":152016,"depth":193,"text":152017},{"id":152140,"depth":193,"text":152141},{"id":152256,"depth":193,"text":152257},{"id":152405,"depth":193,"text":152406,"children":153114},[153115,153116],{"id":152409,"depth":235,"text":152410},{"id":152491,"depth":235,"text":152492},{"id":152569,"depth":193,"text":152570},{"id":152684,"depth":193,"text":152685},{"id":153021,"depth":193,"text":153022},{"id":153053,"depth":193,"text":153054},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150760,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153127,"title":153128,"body":153129,"description":1797,"extension":1798,"meta":156442,"navigation":1800,"path":156443,"seo":156444,"stem":156445,"__hash__":156446},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153130,"toc":156418},[153131,153134,153138,153141,153144,153173,153176,153184,153188,153192,153195,153218,153221,153227,153231,154677,154680,154701,154705,154708,154720,154723,154907,154910,155036,155039,155043,155047,155183,155187,155273,155277,155359,155363,155400,155404,155593,155597,155600,155830,155834,155837,156018,156021,156025,156028,156034,156037,156063,156067,156070,156084,156087,156112,156115,156129,156132,156149,156152,156169,156172,156189,156193,156219,156223,156246,156250,156253,156255,156261,156263,156284,156287,156293,156299,156303,156306,156382,156385,156389,156415],[10,153132,153128],{"id":153133},"_12-综合案例与复习路线",[14,153135,153137],{"id":153136},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[24,153139,153140],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[24,153142,153143],{},"一个合格的入门综合项目最好覆盖：",[125,153145,153146,153149,153152,153155,153158,153161,153164,153167,153170],{},[45,153147,153148],{},"输入输出。",[45,153150,153151],{},"判断和循环。",[45,153153,153154],{},"函数拆分。",[45,153156,153157],{},"列表、字典等容器。",[45,153159,153160],{},"文件持久化。",[45,153162,153163],{},"异常处理。",[45,153165,153166],{},"模块拆分。",[45,153168,153169],{},"可选：面向对象。",[45,153171,153172],{},"可选：数据可视化。",[24,153174,153175],{},"本章整理两个方向：",[125,153177,153178,153181],{},[45,153179,153180],{},"学生管理系统。",[45,153182,153183],{},"销售数据统计和可视化。",[14,153185,153187],{"id":153186},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[19,153189,153191],{"id":153190},"_1221-需求","12.2.1 需求",[24,153193,153194],{},"实现一个命令行学生管理系统：",[125,153196,153197,153200,153203,153206,153209,153212,153215],{},[45,153198,153199],{},"添加学生。",[45,153201,153202],{},"删除学生。",[45,153204,153205],{},"修改学生。",[45,153207,153208],{},"查询学生。",[45,153210,153211],{},"显示所有学生。",[45,153213,153214],{},"保存到 JSON 文件。",[45,153216,153217],{},"程序启动时自动读取 JSON 文件。",[24,153219,153220],{},"学生字段：",[140,153222,153225],{"className":153223,"code":153224,"language":1655,"meta":145},[1653],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[48,153226,153224],{"__ignoreMap":145},[14,153228,153230],{"id":153229},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[140,153232,153234],{"className":32084,"code":153233,"language":32086,"meta":145,"style":145},"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",[48,153235,153236,153242,153252,153256,153270,153274,153278,153287,153299,153305,153309,153315,153346,153356,153363,153374,153380,153384,153388,153398,153429,153455,153459,153463,153472,153483,153494,153505,153516,153527,153538,153549,153553,153557,153567,153579,153595,153602,153609,153613,153617,153627,153635,153642,153655,153665,153676,153680,153684,153693,153701,153707,153719,153727,153738,153742,153746,153755,153771,153775,153782,153793,153798,153802,153818,153833,153848,153852,153857,153865,153873,153881,153889,153893,153898,153909,153913,153917,153926,153941,153951,153955,153967,153978,153982,153986,153991,153995,154006,154010,154014,154023,154038,154046,154050,154062,154072,154076,154080,154095,154108,154121,154125,154138,154150,154162,154166,154170,154181,154185,154189,154198,154213,154221,154225,154237,154247,154251,154255,154260,154264,154268,154278,154284,154306,154325,154344,154363,154368,154372,154376,154385,154393,154404,154408,154412,154438,154448,154453,154457,154461,154469,154479,154483,154491,154496,154512,154516,154530,154535,154549,154554,154567,154572,154585,154590,154603,154608,154621,154632,154636,154642,154653,154657,154661,154673],{"__ignoreMap":145},[149,153237,153238,153240],{"class":151,"line":152},[149,153239,32098],{"class":325},[149,153241,148527],{"class":155},[149,153243,153244,153246,153248,153250],{"class":151,"line":193},[149,153245,32443],{"class":325},[149,153247,109990],{"class":155},[149,153249,32098],{"class":325},[149,153251,109995],{"class":155},[149,153253,153254],{"class":151,"line":235},[149,153255,4119],{"emptyLinePlaceholder":1800},[149,153257,153258,153261,153263,153265,153268],{"class":151,"line":340},[149,153259,153260],{"class":309},"DATA_FILE",[149,153262,15277],{"class":325},[149,153264,110224],{"class":155},[149,153266,153267],{"class":169},"\"students.json\"",[149,153269,1878],{"class":155},[149,153271,153272],{"class":151,"line":346},[149,153273,4119],{"emptyLinePlaceholder":1800},[149,153275,153276],{"class":151,"line":352},[149,153277,4119],{"emptyLinePlaceholder":1800},[149,153279,153280,153282,153285],{"class":151,"line":1021},[149,153281,33653],{"class":325},[149,153283,153284],{"class":162}," load_students",[149,153286,33659],{"class":155},[149,153288,153289,153291,153293,153296],{"class":151,"line":1035},[149,153290,4819],{"class":325},[149,153292,40636],{"class":325},[149,153294,153295],{"class":309}," DATA_FILE",[149,153297,153298],{"class":155},".exists():\n",[149,153300,153301,153303],{"class":151,"line":1054},[149,153302,16464],{"class":325},[149,153304,53537],{"class":155},[149,153306,153307],{"class":151,"line":1072},[149,153308,4119],{"emptyLinePlaceholder":1800},[149,153310,153311,153313],{"class":151,"line":1090},[149,153312,127463],{"class":325},[149,153314,5457],{"class":155},[149,153316,153317,153320,153322,153324,153326,153328,153330,153332,153334,153336,153338,153340,153342,153344],{"class":151,"line":1633},[149,153318,153319],{"class":325},"        with",[149,153321,148227],{"class":309},[149,153323,319],{"class":155},[149,153325,153260],{"class":309},[149,153327,329],{"class":155},[149,153329,148237],{"class":169},[149,153331,329],{"class":155},[149,153333,148242],{"class":6932},[149,153335,166],{"class":325},[149,153337,148247],{"class":169},[149,153339,15427],{"class":155},[149,153341,33089],{"class":325},[149,153343,149589],{"class":6932},[149,153345,5457],{"class":155},[149,153347,153348,153350,153352,153354],{"class":151,"line":1644},[149,153349,17442],{"class":325},[149,153351,149600],{"class":155},[149,153353,47060],{"class":6932},[149,153355,1878],{"class":155},[149,153357,153358,153360],{"class":151,"line":3348},[149,153359,127491],{"class":325},[149,153361,153362],{"class":155}," json.JSONDecodeError:\n",[149,153364,153365,153367,153369,153372],{"class":151,"line":3362},[149,153366,34157],{"class":309},[149,153368,319],{"class":155},[149,153370,153371],{"class":169},"\"数据文件格式错误，已使用空数据启动\"",[149,153373,1878],{"class":155},[149,153375,153376,153378],{"class":151,"line":3367},[149,153377,16464],{"class":325},[149,153379,53537],{"class":155},[149,153381,153382],{"class":151,"line":3373},[149,153383,4119],{"emptyLinePlaceholder":1800},[149,153385,153386],{"class":151,"line":3394},[149,153387,4119],{"emptyLinePlaceholder":1800},[149,153389,153390,153392,153395],{"class":151,"line":3399},[149,153391,33653],{"class":325},[149,153393,153394],{"class":162}," save_students",[149,153396,153397],{"class":155},"(students):\n",[149,153399,153400,153402,153404,153406,153408,153410,153413,153415,153417,153419,153421,153423,153425,153427],{"class":151,"line":3413},[149,153401,35884],{"class":325},[149,153403,148227],{"class":309},[149,153405,319],{"class":155},[149,153407,153260],{"class":309},[149,153409,329],{"class":155},[149,153411,153412],{"class":169},"\"w\"",[149,153414,329],{"class":155},[149,153416,148242],{"class":6932},[149,153418,166],{"class":325},[149,153420,148247],{"class":169},[149,153422,15427],{"class":155},[149,153424,33089],{"class":325},[149,153426,149589],{"class":6932},[149,153428,5457],{"class":155},[149,153430,153431,153434,153436,153438,153440,153442,153444,153446,153449,153451,153453],{"class":151,"line":3418},[149,153432,153433],{"class":155},"        json.dump(students, ",[149,153435,47060],{"class":6932},[149,153437,329],{"class":155},[149,153439,148573],{"class":6932},[149,153441,166],{"class":325},[149,153443,35693],{"class":309},[149,153445,329],{"class":155},[149,153447,153448],{"class":6932},"indent",[149,153450,166],{"class":325},[149,153452,1045],{"class":309},[149,153454,1878],{"class":155},[149,153456,153457],{"class":151,"line":3447},[149,153458,4119],{"emptyLinePlaceholder":1800},[149,153460,153461],{"class":151,"line":3452},[149,153462,4119],{"emptyLinePlaceholder":1800},[149,153464,153465,153467,153470],{"class":151,"line":3469},[149,153466,33653],{"class":325},[149,153468,153469],{"class":162}," show_menu",[149,153471,33659],{"class":155},[149,153473,153474,153476,153478,153481],{"class":151,"line":3474},[149,153475,33005],{"class":309},[149,153477,319],{"class":155},[149,153479,153480],{"class":169},"\"====== 学生管理系统 ======\"",[149,153482,1878],{"class":155},[149,153484,153485,153487,153489,153492],{"class":151,"line":3479},[149,153486,33005],{"class":309},[149,153488,319],{"class":155},[149,153490,153491],{"class":169},"\"1. 添加学生\"",[149,153493,1878],{"class":155},[149,153495,153496,153498,153500,153503],{"class":151,"line":3484},[149,153497,33005],{"class":309},[149,153499,319],{"class":155},[149,153501,153502],{"class":169},"\"2. 删除学生\"",[149,153504,1878],{"class":155},[149,153506,153507,153509,153511,153514],{"class":151,"line":3498},[149,153508,33005],{"class":309},[149,153510,319],{"class":155},[149,153512,153513],{"class":169},"\"3. 修改学生\"",[149,153515,1878],{"class":155},[149,153517,153518,153520,153522,153525],{"class":151,"line":3503},[149,153519,33005],{"class":309},[149,153521,319],{"class":155},[149,153523,153524],{"class":169},"\"4. 查询学生\"",[149,153526,1878],{"class":155},[149,153528,153529,153531,153533,153536],{"class":151,"line":4296},[149,153530,33005],{"class":309},[149,153532,319],{"class":155},[149,153534,153535],{"class":169},"\"5. 显示所有学生\"",[149,153537,1878],{"class":155},[149,153539,153540,153542,153544,153547],{"class":151,"line":4310},[149,153541,33005],{"class":309},[149,153543,319],{"class":155},[149,153545,153546],{"class":169},"\"0. 退出系统\"",[149,153548,1878],{"class":155},[149,153550,153551],{"class":151,"line":4318},[149,153552,4119],{"emptyLinePlaceholder":1800},[149,153554,153555],{"class":151,"line":4323},[149,153556,4119],{"emptyLinePlaceholder":1800},[149,153558,153559,153561,153564],{"class":151,"line":4329},[149,153560,33653],{"class":325},[149,153562,153563],{"class":162}," find_student",[149,153565,153566],{"class":155},"(students, student_id):\n",[149,153568,153569,153571,153574,153576],{"class":151,"line":4335},[149,153570,4919],{"class":325},[149,153572,153573],{"class":155}," student ",[149,153575,27752],{"class":325},[149,153577,153578],{"class":155}," students:\n",[149,153580,153581,153583,153586,153588,153590,153592],{"class":151,"line":4340},[149,153582,4216],{"class":325},[149,153584,153585],{"class":155}," student[",[149,153587,152883],{"class":169},[149,153589,6161],{"class":155},[149,153591,4667],{"class":325},[149,153593,153594],{"class":155}," student_id:\n",[149,153596,153597,153599],{"class":151,"line":9663},[149,153598,17442],{"class":325},[149,153600,153601],{"class":155}," student\n",[149,153603,153604,153606],{"class":151,"line":9687},[149,153605,5808],{"class":325},[149,153607,153608],{"class":309}," None\n",[149,153610,153611],{"class":151,"line":9692},[149,153612,4119],{"emptyLinePlaceholder":1800},[149,153614,153615],{"class":151,"line":9698},[149,153616,4119],{"emptyLinePlaceholder":1800},[149,153618,153619,153621,153624],{"class":151,"line":9725},[149,153620,33653],{"class":325},[149,153622,153623],{"class":162}," input_int",[149,153625,153626],{"class":155},"(prompt):\n",[149,153628,153629,153631,153633],{"class":151,"line":9730},[149,153630,3970],{"class":325},[149,153632,96972],{"class":309},[149,153634,5457],{"class":155},[149,153636,153637,153640],{"class":151,"line":9736},[149,153638,153639],{"class":325},"        try",[149,153641,5457],{"class":155},[149,153643,153644,153646,153648,153650,153652],{"class":151,"line":9748},[149,153645,17442],{"class":325},[149,153647,4101],{"class":309},[149,153649,319],{"class":155},[149,153651,504],{"class":309},[149,153653,153654],{"class":155},"(prompt))\n",[149,153656,153657,153660,153663],{"class":151,"line":9760},[149,153658,153659],{"class":325},"        except",[149,153661,153662],{"class":309}," ValueError",[149,153664,5457],{"class":155},[149,153666,153667,153669,153671,153674],{"class":151,"line":9772},[149,153668,36356],{"class":309},[149,153670,319],{"class":155},[149,153672,153673],{"class":169},"\"请输入整数\"",[149,153675,1878],{"class":155},[149,153677,153678],{"class":151,"line":11430},[149,153679,4119],{"emptyLinePlaceholder":1800},[149,153681,153682],{"class":151,"line":11455},[149,153683,4119],{"emptyLinePlaceholder":1800},[149,153685,153686,153688,153691],{"class":151,"line":11478},[149,153687,33653],{"class":325},[149,153689,153690],{"class":162}," input_float",[149,153692,153626],{"class":155},[149,153694,153695,153697,153699],{"class":151,"line":11502},[149,153696,3970],{"class":325},[149,153698,96972],{"class":309},[149,153700,5457],{"class":155},[149,153702,153703,153705],{"class":151,"line":11507},[149,153704,153639],{"class":325},[149,153706,5457],{"class":155},[149,153708,153709,153711,153713,153715,153717],{"class":151,"line":11512},[149,153710,17442],{"class":325},[149,153712,111476],{"class":309},[149,153714,319],{"class":155},[149,153716,504],{"class":309},[149,153718,153654],{"class":155},[149,153720,153721,153723,153725],{"class":151,"line":11517},[149,153722,153659],{"class":325},[149,153724,153662],{"class":309},[149,153726,5457],{"class":155},[149,153728,153729,153731,153733,153736],{"class":151,"line":11526},[149,153730,36356],{"class":309},[149,153732,319],{"class":155},[149,153734,153735],{"class":169},"\"请输入数字\"",[149,153737,1878],{"class":155},[149,153739,153740],{"class":151,"line":11531},[149,153741,4119],{"emptyLinePlaceholder":1800},[149,153743,153744],{"class":151,"line":11537},[149,153745,4119],{"emptyLinePlaceholder":1800},[149,153747,153748,153750,153753],{"class":151,"line":11558},[149,153749,33653],{"class":325},[149,153751,153752],{"class":162}," add_student",[149,153754,153397],{"class":155},[149,153756,153757,153760,153762,153764,153766,153769],{"class":151,"line":11564},[149,153758,153759],{"class":155},"    student_id ",[149,153761,166],{"class":325},[149,153763,62296],{"class":309},[149,153765,319],{"class":155},[149,153767,153768],{"class":169},"\"请输入学号:\"",[149,153770,1878],{"class":155},[149,153772,153773],{"class":151,"line":11578},[149,153774,4119],{"emptyLinePlaceholder":1800},[149,153776,153777,153779],{"class":151,"line":11584},[149,153778,4819],{"class":325},[149,153780,153781],{"class":155}," find_student(students, student_id):\n",[149,153783,153784,153786,153788,153791],{"class":151,"line":11611},[149,153785,34157],{"class":309},[149,153787,319],{"class":155},[149,153789,153790],{"class":169},"\"学号已存在\"",[149,153792,1878],{"class":155},[149,153794,153795],{"class":151,"line":11620},[149,153796,153797],{"class":325},"        return\n",[149,153799,153800],{"class":151,"line":11626},[149,153801,4119],{"emptyLinePlaceholder":1800},[149,153803,153804,153807,153809,153811,153813,153816],{"class":151,"line":11634},[149,153805,153806],{"class":155},"    name ",[149,153808,166],{"class":325},[149,153810,62296],{"class":309},[149,153812,319],{"class":155},[149,153814,153815],{"class":169},"\"请输入姓名:\"",[149,153817,1878],{"class":155},[149,153819,153820,153823,153825,153828,153831],{"class":151,"line":11639},[149,153821,153822],{"class":155},"    age ",[149,153824,166],{"class":325},[149,153826,153827],{"class":155}," input_int(",[149,153829,153830],{"class":169},"\"请输入年龄:\"",[149,153832,1878],{"class":155},[149,153834,153835,153838,153840,153843,153846],{"class":151,"line":18314},[149,153836,153837],{"class":155},"    score ",[149,153839,166],{"class":325},[149,153841,153842],{"class":155}," input_float(",[149,153844,153845],{"class":169},"\"请输入成绩:\"",[149,153847,1878],{"class":155},[149,153849,153850],{"class":151,"line":18320},[149,153851,4119],{"emptyLinePlaceholder":1800},[149,153853,153854],{"class":151,"line":18343},[149,153855,153856],{"class":155},"    students.append({\n",[149,153858,153859,153862],{"class":151,"line":18349},[149,153860,153861],{"class":169},"        \"student_id\"",[149,153863,153864],{"class":155},": student_id,\n",[149,153866,153867,153870],{"class":151,"line":18372},[149,153868,153869],{"class":169},"        \"name\"",[149,153871,153872],{"class":155},": name,\n",[149,153874,153875,153878],{"class":151,"line":18386},[149,153876,153877],{"class":169},"        \"age\"",[149,153879,153880],{"class":155},": age,\n",[149,153882,153883,153886],{"class":151,"line":18406},[149,153884,153885],{"class":169},"        \"score\"",[149,153887,153888],{"class":155},": score,\n",[149,153890,153891],{"class":151,"line":18412},[149,153892,35167],{"class":155},[149,153894,153895],{"class":151,"line":18423},[149,153896,153897],{"class":155},"    save_students(students)\n",[149,153899,153900,153902,153904,153907],{"class":151,"line":18446},[149,153901,33005],{"class":309},[149,153903,319],{"class":155},[149,153905,153906],{"class":169},"\"添加成功\"",[149,153908,1878],{"class":155},[149,153910,153911],{"class":151,"line":18468},[149,153912,4119],{"emptyLinePlaceholder":1800},[149,153914,153915],{"class":151,"line":18473},[149,153916,4119],{"emptyLinePlaceholder":1800},[149,153918,153919,153921,153924],{"class":151,"line":18479},[149,153920,33653],{"class":325},[149,153922,153923],{"class":162}," delete_student",[149,153925,153397],{"class":155},[149,153927,153928,153930,153932,153934,153936,153939],{"class":151,"line":18493},[149,153929,153759],{"class":155},[149,153931,166],{"class":325},[149,153933,62296],{"class":309},[149,153935,319],{"class":155},[149,153937,153938],{"class":169},"\"请输入要删除的学号:\"",[149,153940,1878],{"class":155},[149,153942,153943,153946,153948],{"class":151,"line":18506},[149,153944,153945],{"class":155},"    student ",[149,153947,166],{"class":325},[149,153949,153950],{"class":155}," find_student(students, student_id)\n",[149,153952,153953],{"class":151,"line":18511},[149,153954,4119],{"emptyLinePlaceholder":1800},[149,153956,153957,153959,153961,153963,153965],{"class":151,"line":18525},[149,153958,4819],{"class":325},[149,153960,153573],{"class":155},[149,153962,40633],{"class":325},[149,153964,40639],{"class":309},[149,153966,5457],{"class":155},[149,153968,153969,153971,153973,153976],{"class":151,"line":18530},[149,153970,34157],{"class":309},[149,153972,319],{"class":155},[149,153974,153975],{"class":169},"\"学生不存在\"",[149,153977,1878],{"class":155},[149,153979,153980],{"class":151,"line":18536},[149,153981,153797],{"class":325},[149,153983,153984],{"class":151,"line":18541},[149,153985,4119],{"emptyLinePlaceholder":1800},[149,153987,153988],{"class":151,"line":18555},[149,153989,153990],{"class":155},"    students.remove(student)\n",[149,153992,153993],{"class":151,"line":18560},[149,153994,153897],{"class":155},[149,153996,153997,153999,154001,154004],{"class":151,"line":18565},[149,153998,33005],{"class":309},[149,154000,319],{"class":155},[149,154002,154003],{"class":169},"\"删除成功\"",[149,154005,1878],{"class":155},[149,154007,154008],{"class":151,"line":18579},[149,154009,4119],{"emptyLinePlaceholder":1800},[149,154011,154012],{"class":151,"line":18591},[149,154013,4119],{"emptyLinePlaceholder":1800},[149,154015,154016,154018,154021],{"class":151,"line":18596},[149,154017,33653],{"class":325},[149,154019,154020],{"class":162}," update_student",[149,154022,153397],{"class":155},[149,154024,154025,154027,154029,154031,154033,154036],{"class":151,"line":18609},[149,154026,153759],{"class":155},[149,154028,166],{"class":325},[149,154030,62296],{"class":309},[149,154032,319],{"class":155},[149,154034,154035],{"class":169},"\"请输入要修改的学号:\"",[149,154037,1878],{"class":155},[149,154039,154040,154042,154044],{"class":151,"line":18614},[149,154041,153945],{"class":155},[149,154043,166],{"class":325},[149,154045,153950],{"class":155},[149,154047,154048],{"class":151,"line":18619},[149,154049,4119],{"emptyLinePlaceholder":1800},[149,154051,154052,154054,154056,154058,154060],{"class":151,"line":18624},[149,154053,4819],{"class":325},[149,154055,153573],{"class":155},[149,154057,40633],{"class":325},[149,154059,40639],{"class":309},[149,154061,5457],{"class":155},[149,154063,154064,154066,154068,154070],{"class":151,"line":18637},[149,154065,34157],{"class":309},[149,154067,319],{"class":155},[149,154069,153975],{"class":169},[149,154071,1878],{"class":155},[149,154073,154074],{"class":151,"line":18642},[149,154075,153797],{"class":325},[149,154077,154078],{"class":151,"line":34339},[149,154079,4119],{"emptyLinePlaceholder":1800},[149,154081,154082,154084,154086,154088,154090,154093],{"class":151,"line":34345},[149,154083,153806],{"class":155},[149,154085,166],{"class":325},[149,154087,62296],{"class":309},[149,154089,319],{"class":155},[149,154091,154092],{"class":169},"\"请输入新姓名:\"",[149,154094,1878],{"class":155},[149,154096,154097,154099,154101,154103,154106],{"class":151,"line":34351},[149,154098,153822],{"class":155},[149,154100,166],{"class":325},[149,154102,153827],{"class":155},[149,154104,154105],{"class":169},"\"请输入新年龄:\"",[149,154107,1878],{"class":155},[149,154109,154110,154112,154114,154116,154119],{"class":151,"line":34357},[149,154111,153837],{"class":155},[149,154113,166],{"class":325},[149,154115,153842],{"class":155},[149,154117,154118],{"class":169},"\"请输入新成绩:\"",[149,154120,1878],{"class":155},[149,154122,154123],{"class":151,"line":34363},[149,154124,4119],{"emptyLinePlaceholder":1800},[149,154126,154127,154130,154132,154134,154136],{"class":151,"line":34374},[149,154128,154129],{"class":155},"    student[",[149,154131,64367],{"class":169},[149,154133,6161],{"class":155},[149,154135,166],{"class":325},[149,154137,151231],{"class":155},[149,154139,154140,154142,154144,154146,154148],{"class":151,"line":34380},[149,154141,154129],{"class":155},[149,154143,70808],{"class":169},[149,154145,6161],{"class":155},[149,154147,166],{"class":325},[149,154149,151243],{"class":155},[149,154151,154152,154154,154156,154158,154160],{"class":151,"line":34400},[149,154153,154129],{"class":155},[149,154155,152908],{"class":169},[149,154157,6161],{"class":155},[149,154159,166],{"class":325},[149,154161,3302],{"class":155},[149,154163,154164],{"class":151,"line":34406},[149,154165,4119],{"emptyLinePlaceholder":1800},[149,154167,154168],{"class":151,"line":34417},[149,154169,153897],{"class":155},[149,154171,154172,154174,154176,154179],{"class":151,"line":34423},[149,154173,33005],{"class":309},[149,154175,319],{"class":155},[149,154177,154178],{"class":169},"\"修改成功\"",[149,154180,1878],{"class":155},[149,154182,154183],{"class":151,"line":34429},[149,154184,4119],{"emptyLinePlaceholder":1800},[149,154186,154187],{"class":151,"line":34435},[149,154188,4119],{"emptyLinePlaceholder":1800},[149,154190,154191,154193,154196],{"class":151,"line":34441},[149,154192,33653],{"class":325},[149,154194,154195],{"class":162}," query_student",[149,154197,153397],{"class":155},[149,154199,154200,154202,154204,154206,154208,154211],{"class":151,"line":34447},[149,154201,153759],{"class":155},[149,154203,166],{"class":325},[149,154205,62296],{"class":309},[149,154207,319],{"class":155},[149,154209,154210],{"class":169},"\"请输入要查询的学号:\"",[149,154212,1878],{"class":155},[149,154214,154215,154217,154219],{"class":151,"line":34453},[149,154216,153945],{"class":155},[149,154218,166],{"class":325},[149,154220,153950],{"class":155},[149,154222,154223],{"class":151,"line":34459},[149,154224,4119],{"emptyLinePlaceholder":1800},[149,154226,154227,154229,154231,154233,154235],{"class":151,"line":34479},[149,154228,4819],{"class":325},[149,154230,153573],{"class":155},[149,154232,40633],{"class":325},[149,154234,40639],{"class":309},[149,154236,5457],{"class":155},[149,154238,154239,154241,154243,154245],{"class":151,"line":34485},[149,154240,34157],{"class":309},[149,154242,319],{"class":155},[149,154244,153975],{"class":169},[149,154246,1878],{"class":155},[149,154248,154249],{"class":151,"line":34501},[149,154250,153797],{"class":325},[149,154252,154253],{"class":151,"line":34507},[149,154254,4119],{"emptyLinePlaceholder":1800},[149,154256,154257],{"class":151,"line":34521},[149,154258,154259],{"class":155},"    print_student(student)\n",[149,154261,154262],{"class":151,"line":34527},[149,154263,4119],{"emptyLinePlaceholder":1800},[149,154265,154266],{"class":151,"line":34542},[149,154267,4119],{"emptyLinePlaceholder":1800},[149,154269,154270,154272,154275],{"class":151,"line":34548},[149,154271,33653],{"class":325},[149,154273,154274],{"class":162}," print_student",[149,154276,154277],{"class":155},"(student):\n",[149,154279,154280,154282],{"class":151,"line":34557},[149,154281,33005],{"class":309},[149,154283,152875],{"class":155},[149,154285,154286,154289,154291,154293,154296,154299,154301,154304],{"class":151,"line":34563},[149,154287,154288],{"class":325},"        f",[149,154290,2115],{"class":169},[149,154292,2756],{"class":309},[149,154294,154295],{"class":155},"student[",[149,154297,154298],{"class":169},"'student_id'",[149,154300,2799],{"class":155},[149,154302,154303],{"class":309},"}\\t",[149,154305,26842],{"class":169},[149,154307,154308,154310,154312,154314,154316,154319,154321,154323],{"class":151,"line":34572},[149,154309,154288],{"class":325},[149,154311,2115],{"class":169},[149,154313,2756],{"class":309},[149,154315,154295],{"class":155},[149,154317,154318],{"class":169},"'name'",[149,154320,2799],{"class":155},[149,154322,154303],{"class":309},[149,154324,26842],{"class":169},[149,154326,154327,154329,154331,154333,154335,154338,154340,154342],{"class":151,"line":34578},[149,154328,154288],{"class":325},[149,154330,2115],{"class":169},[149,154332,2756],{"class":309},[149,154334,154295],{"class":155},[149,154336,154337],{"class":169},"'age'",[149,154339,2799],{"class":155},[149,154341,154303],{"class":309},[149,154343,26842],{"class":169},[149,154345,154346,154348,154350,154352,154354,154357,154359,154361],{"class":151,"line":34584},[149,154347,154288],{"class":325},[149,154349,2115],{"class":169},[149,154351,2756],{"class":309},[149,154353,154295],{"class":155},[149,154355,154356],{"class":169},"'score'",[149,154358,2799],{"class":155},[149,154360,2805],{"class":309},[149,154362,26842],{"class":169},[149,154364,154365],{"class":151,"line":34593},[149,154366,154367],{"class":155},"    )\n",[149,154369,154370],{"class":151,"line":34599},[149,154371,4119],{"emptyLinePlaceholder":1800},[149,154373,154374],{"class":151,"line":34610},[149,154375,4119],{"emptyLinePlaceholder":1800},[149,154377,154378,154380,154383],{"class":151,"line":34616},[149,154379,33653],{"class":325},[149,154381,154382],{"class":162}," show_all_students",[149,154384,153397],{"class":155},[149,154386,154387,154389,154391],{"class":151,"line":34635},[149,154388,4819],{"class":325},[149,154390,40636],{"class":325},[149,154392,153578],{"class":155},[149,154394,154395,154397,154399,154402],{"class":151,"line":34641},[149,154396,34157],{"class":309},[149,154398,319],{"class":155},[149,154400,154401],{"class":169},"\"暂无学生\"",[149,154403,1878],{"class":155},[149,154405,154406],{"class":151,"line":34652},[149,154407,153797],{"class":325},[149,154409,154410],{"class":151,"line":34658},[149,154411,4119],{"emptyLinePlaceholder":1800},[149,154413,154414,154416,154418,154421,154423,154426,154428,154431,154433,154436],{"class":151,"line":34678},[149,154415,33005],{"class":309},[149,154417,319],{"class":155},[149,154419,154420],{"class":169},"\"学号",[149,154422,2959],{"class":309},[149,154424,154425],{"class":169},"姓名",[149,154427,2959],{"class":309},[149,154429,154430],{"class":169},"年龄",[149,154432,2959],{"class":309},[149,154434,154435],{"class":169},"成绩\"",[149,154437,1878],{"class":155},[149,154439,154440,154442,154444,154446],{"class":151,"line":34694},[149,154441,4919],{"class":325},[149,154443,153573],{"class":155},[149,154445,27752],{"class":325},[149,154447,153578],{"class":155},[149,154449,154450],{"class":151,"line":34700},[149,154451,154452],{"class":155},"        print_student(student)\n",[149,154454,154455],{"class":151,"line":34714},[149,154456,4119],{"emptyLinePlaceholder":1800},[149,154458,154459],{"class":151,"line":34720},[149,154460,4119],{"emptyLinePlaceholder":1800},[149,154462,154463,154465,154467],{"class":151,"line":34726},[149,154464,33653],{"class":325},[149,154466,3692],{"class":162},[149,154468,33659],{"class":155},[149,154470,154471,154474,154476],{"class":151,"line":34737},[149,154472,154473],{"class":155},"    students ",[149,154475,166],{"class":325},[149,154477,154478],{"class":155}," load_students()\n",[149,154480,154481],{"class":151,"line":34743},[149,154482,4119],{"emptyLinePlaceholder":1800},[149,154484,154485,154487,154489],{"class":151,"line":34749},[149,154486,3970],{"class":325},[149,154488,96972],{"class":309},[149,154490,5457],{"class":155},[149,154492,154493],{"class":151,"line":34759},[149,154494,154495],{"class":155},"        show_menu()\n",[149,154497,154498,154501,154503,154505,154507,154510],{"class":151,"line":34765},[149,154499,154500],{"class":155},"        choice ",[149,154502,166],{"class":325},[149,154504,62296],{"class":309},[149,154506,319],{"class":155},[149,154508,154509],{"class":169},"\"请输入操作:\"",[149,154511,1878],{"class":155},[149,154513,154514],{"class":151,"line":34776},[149,154515,4119],{"emptyLinePlaceholder":1800},[149,154517,154518,154520,154523,154525,154528],{"class":151,"line":34782},[149,154519,4216],{"class":325},[149,154521,154522],{"class":155}," choice ",[149,154524,4667],{"class":325},[149,154526,154527],{"class":169}," \"1\"",[149,154529,5457],{"class":155},[149,154531,154532],{"class":151,"line":34792},[149,154533,154534],{"class":155},"            add_student(students)\n",[149,154536,154537,154540,154542,154544,154547],{"class":151,"line":34797},[149,154538,154539],{"class":325},"        elif",[149,154541,154522],{"class":155},[149,154543,4667],{"class":325},[149,154545,154546],{"class":169}," \"2\"",[149,154548,5457],{"class":155},[149,154550,154551],{"class":151,"line":34803},[149,154552,154553],{"class":155},"            delete_student(students)\n",[149,154555,154556,154558,154560,154562,154565],{"class":151,"line":34852},[149,154557,154539],{"class":325},[149,154559,154522],{"class":155},[149,154561,4667],{"class":325},[149,154563,154564],{"class":169}," \"3\"",[149,154566,5457],{"class":155},[149,154568,154569],{"class":151,"line":34899},[149,154570,154571],{"class":155},"            update_student(students)\n",[149,154573,154574,154576,154578,154580,154583],{"class":151,"line":34904},[149,154575,154539],{"class":325},[149,154577,154522],{"class":155},[149,154579,4667],{"class":325},[149,154581,154582],{"class":169}," \"4\"",[149,154584,5457],{"class":155},[149,154586,154587],{"class":151,"line":34910},[149,154588,154589],{"class":155},"            query_student(students)\n",[149,154591,154592,154594,154596,154598,154601],{"class":151,"line":34929},[149,154593,154539],{"class":325},[149,154595,154522],{"class":155},[149,154597,4667],{"class":325},[149,154599,154600],{"class":169}," \"5\"",[149,154602,5457],{"class":155},[149,154604,154605],{"class":151,"line":34935},[149,154606,154607],{"class":155},"            show_all_students(students)\n",[149,154609,154610,154612,154614,154616,154619],{"class":151,"line":34955},[149,154611,154539],{"class":325},[149,154613,154522],{"class":155},[149,154615,4667],{"class":325},[149,154617,154618],{"class":169}," \"0\"",[149,154620,5457],{"class":155},[149,154622,154623,154625,154627,154630],{"class":151,"line":34961},[149,154624,36356],{"class":309},[149,154626,319],{"class":155},[149,154628,154629],{"class":169},"\"退出系统\"",[149,154631,1878],{"class":155},[149,154633,154634],{"class":151,"line":34967},[149,154635,116777],{"class":325},[149,154637,154638,154640],{"class":151,"line":34977},[149,154639,4253],{"class":325},[149,154641,5457],{"class":155},[149,154643,154644,154646,154648,154651],{"class":151,"line":34982},[149,154645,36356],{"class":309},[149,154647,319],{"class":155},[149,154649,154650],{"class":169},"\"输入错误\"",[149,154652,1878],{"class":155},[149,154654,154655],{"class":151,"line":34988},[149,154656,4119],{"emptyLinePlaceholder":1800},[149,154658,154659],{"class":151,"line":35004},[149,154660,4119],{"emptyLinePlaceholder":1800},[149,154662,154663,154665,154667,154669,154671],{"class":151,"line":35049},[149,154664,3255],{"class":325},[149,154666,32926],{"class":309},[149,154668,103239],{"class":325},[149,154670,103242],{"class":169},[149,154672,5457],{"class":155},[149,154674,154675],{"class":151,"line":35055},[149,154676,103249],{"class":155},[24,154678,154679],{},"这个项目串联了：",[125,154681,154682,154685,154688,154691,154694,154696],{},[45,154683,154684],{},"菜单循环。",[45,154686,154687],{},"函数封装。",[45,154689,154690],{},"列表字典。",[45,154692,154693],{},"JSON 读写。",[45,154695,153163],{},[45,154697,154698,30091],{},[48,154699,154700],{},"if __name__ == \"__main__\"",[14,154702,154704],{"id":154703},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[24,154706,154707],{},"可以进一步拆成两个类：",[125,154709,154710,154715],{},[45,154711,154712,154714],{},[48,154713,151004],{},"：表示单个学生。",[45,154716,154717,154719],{},[48,154718,153030],{},"：负责学生增删改查和文件保存。",[24,154721,154722],{},"示意代码：",[140,154724,154726],{"className":32084,"code":154725,"language":32086,"meta":145,"style":145},"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",[48,154727,154728,154738,154742,154746,154750,154758,154765,154771,154777,154783,154787,154795,154801,154811,154821,154831,154841,154845,154849,154855,154863,154871,154879,154887,154895,154903],{"__ignoreMap":145},[149,154729,154730,154732,154734,154736],{"class":151,"line":152},[149,154731,32443],{"class":325},[149,154733,152588],{"class":155},[149,154735,32098],{"class":325},[149,154737,152593],{"class":155},[149,154739,154740],{"class":151,"line":193},[149,154741,4119],{"emptyLinePlaceholder":1800},[149,154743,154744],{"class":151,"line":235},[149,154745,4119],{"emptyLinePlaceholder":1800},[149,154747,154748],{"class":151,"line":340},[149,154749,152606],{"class":162},[149,154751,154752,154754,154756],{"class":151,"line":346},[149,154753,913],{"class":325},[149,154755,9613],{"class":162},[149,154757,5457],{"class":155},[149,154759,154760,154763],{"class":151,"line":352},[149,154761,154762],{"class":155},"    student_id: ",[149,154764,152622],{"class":309},[149,154766,154767,154769],{"class":151,"line":1021},[149,154768,152619],{"class":155},[149,154770,152622],{"class":309},[149,154772,154773,154775],{"class":151,"line":1035},[149,154774,152627],{"class":155},[149,154776,152630],{"class":309},[149,154778,154779,154781],{"class":151,"line":1054},[149,154780,152635],{"class":155},[149,154782,152638],{"class":309},[149,154784,154785],{"class":151,"line":1072},[149,154786,4119],{"emptyLinePlaceholder":1800},[149,154788,154789,154791,154793],{"class":151,"line":1090},[149,154790,32507],{"class":325},[149,154792,152786],{"class":162},[149,154794,32513],{"class":155},[149,154796,154797,154799],{"class":151,"line":1633},[149,154798,16464],{"class":325},[149,154800,304],{"class":155},[149,154802,154803,154805,154807,154809],{"class":151,"line":1644},[149,154804,152799],{"class":169},[149,154806,313],{"class":155},[149,154808,32529],{"class":309},[149,154810,152806],{"class":155},[149,154812,154813,154815,154817,154819],{"class":151,"line":3348},[149,154814,152811],{"class":169},[149,154816,313],{"class":155},[149,154818,32529],{"class":309},[149,154820,152818],{"class":155},[149,154822,154823,154825,154827,154829],{"class":151,"line":3362},[149,154824,152823],{"class":169},[149,154826,313],{"class":155},[149,154828,32529],{"class":309},[149,154830,152830],{"class":155},[149,154832,154833,154835,154837,154839],{"class":151,"line":3367},[149,154834,152835],{"class":169},[149,154836,313],{"class":155},[149,154838,32529],{"class":309},[149,154840,152842],{"class":155},[149,154842,154843],{"class":151,"line":3373},[149,154844,4248],{"class":155},[149,154846,154847],{"class":151,"line":3394},[149,154848,4119],{"emptyLinePlaceholder":1800},[149,154850,154851,154853],{"class":151,"line":3399},[149,154852,152450],{"class":162},[149,154854,152453],{"class":309},[149,154856,154857,154859,154861],{"class":151,"line":3413},[149,154858,32507],{"class":325},[149,154860,152863],{"class":162},[149,154862,152866],{"class":155},[149,154864,154865,154867,154869],{"class":151,"line":3418},[149,154866,16464],{"class":325},[149,154868,152470],{"class":309},[149,154870,152875],{"class":155},[149,154872,154873,154875,154877],{"class":151,"line":3447},[149,154874,152880],{"class":155},[149,154876,152883],{"class":169},[149,154878,89517],{"class":155},[149,154880,154881,154883,154885],{"class":151,"line":3452},[149,154882,152880],{"class":155},[149,154884,64367],{"class":169},[149,154886,89517],{"class":155},[149,154888,154889,154891,154893],{"class":151,"line":3469},[149,154890,152880],{"class":155},[149,154892,70808],{"class":169},[149,154894,89517],{"class":155},[149,154896,154897,154899,154901],{"class":151,"line":3474},[149,154898,152880],{"class":155},[149,154900,152908],{"class":169},[149,154902,89517],{"class":155},[149,154904,154905],{"class":151,"line":3479},[149,154906,39832],{"class":155},[24,154908,154909],{},"管理器示意：",[140,154911,154913],{"className":32084,"code":154912,"language":32086,"meta":145,"style":145},"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",[48,154914,154915,154924,154932,154943,154947,154957,154970,154981,154988,154994,154998,155007,155016,155022,155029],{"__ignoreMap":145},[149,154916,154917,154919,154922],{"class":151,"line":152},[149,154918,913],{"class":325},[149,154920,154921],{"class":162}," StudentManager",[149,154923,5457],{"class":155},[149,154925,154926,154928,154930],{"class":151,"line":193},[149,154927,32507],{"class":325},[149,154929,32510],{"class":309},[149,154931,32513],{"class":155},[149,154933,154934,154936,154939,154941],{"class":151,"line":235},[149,154935,32551],{"class":309},[149,154937,154938],{"class":155},".students ",[149,154940,166],{"class":325},[149,154942,53537],{"class":155},[149,154944,154945],{"class":151,"line":340},[149,154946,4119],{"emptyLinePlaceholder":1800},[149,154948,154949,154951,154954],{"class":151,"line":346},[149,154950,32507],{"class":325},[149,154952,154953],{"class":162}," find_by_id",[149,154955,154956],{"class":155},"(self, student_id):\n",[149,154958,154959,154961,154963,154965,154967],{"class":151,"line":352},[149,154960,5121],{"class":325},[149,154962,153573],{"class":155},[149,154964,27752],{"class":325},[149,154966,40579],{"class":309},[149,154968,154969],{"class":155},".students:\n",[149,154971,154972,154974,154977,154979],{"class":151,"line":1021},[149,154973,6360],{"class":325},[149,154975,154976],{"class":155}," student.student_id ",[149,154978,4667],{"class":325},[149,154980,153594],{"class":155},[149,154982,154983,154986],{"class":151,"line":1035},[149,154984,154985],{"class":325},"                return",[149,154987,153601],{"class":155},[149,154989,154990,154992],{"class":151,"line":1054},[149,154991,16464],{"class":325},[149,154993,153608],{"class":309},[149,154995,154996],{"class":151,"line":1072},[149,154997,4119],{"emptyLinePlaceholder":1800},[149,154999,155000,155002,155004],{"class":151,"line":1090},[149,155001,32507],{"class":325},[149,155003,6925],{"class":162},[149,155005,155006],{"class":155},"(self, student):\n",[149,155008,155009,155011,155013],{"class":151,"line":1633},[149,155010,4216],{"class":325},[149,155012,40579],{"class":309},[149,155014,155015],{"class":155},".find_by_id(student.student_id):\n",[149,155017,155018,155020],{"class":151,"line":1644},[149,155019,17442],{"class":325},[149,155021,127486],{"class":309},[149,155023,155024,155026],{"class":151,"line":3348},[149,155025,32551],{"class":309},[149,155027,155028],{"class":155},".students.append(student)\n",[149,155030,155031,155033],{"class":151,"line":3362},[149,155032,16464],{"class":325},[149,155034,155035],{"class":309}," True\n",[24,155037,155038],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155040,155042],{"id":155041},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[19,155044,155046],{"id":155045},"_1251-数据结构","12.5.1 数据结构",[140,155048,155050],{"className":32084,"code":155049,"language":32086,"meta":145,"style":145},"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",[48,155051,155052,155060,155091,155121,155150,155179],{"__ignoreMap":145},[149,155053,155054,155056,155058],{"class":151,"line":152},[149,155055,149901],{"class":155},[149,155057,166],{"class":325},[149,155059,57139],{"class":155},[149,155061,155062,155064,155066,155068,155070,155072,155075,155077,155080,155082,155084,155086,155089],{"class":151,"line":193},[149,155063,149821],{"class":155},[149,155065,149433],{"class":169},[149,155067,313],{"class":155},[149,155069,150044],{"class":169},[149,155071,329],{"class":155},[149,155073,155074],{"class":169},"\"category\"",[149,155076,313],{"class":155},[149,155078,155079],{"class":169},"\"手机\"",[149,155081,329],{"class":155},[149,155083,85765],{"class":169},[149,155085,313],{"class":155},[149,155087,155088],{"class":309},"12000",[149,155090,6648],{"class":155},[149,155092,155093,155095,155097,155099,155101,155103,155105,155107,155110,155112,155114,155116,155119],{"class":151,"line":235},[149,155094,149821],{"class":155},[149,155096,149433],{"class":169},[149,155098,313],{"class":155},[149,155100,150044],{"class":169},[149,155102,329],{"class":155},[149,155104,155074],{"class":169},[149,155106,313],{"class":155},[149,155108,155109],{"class":169},"\"电脑\"",[149,155111,329],{"class":155},[149,155113,85765],{"class":169},[149,155115,313],{"class":155},[149,155117,155118],{"class":309},"18000",[149,155120,6648],{"class":155},[149,155122,155123,155125,155127,155129,155131,155133,155135,155137,155139,155141,155143,155145,155148],{"class":151,"line":340},[149,155124,149821],{"class":155},[149,155126,149433],{"class":169},[149,155128,313],{"class":155},[149,155130,150065],{"class":169},[149,155132,329],{"class":155},[149,155134,155074],{"class":169},[149,155136,313],{"class":155},[149,155138,155079],{"class":169},[149,155140,329],{"class":155},[149,155142,85765],{"class":169},[149,155144,313],{"class":155},[149,155146,155147],{"class":309},"15000",[149,155149,6648],{"class":155},[149,155151,155152,155154,155156,155158,155160,155162,155164,155166,155168,155170,155172,155174,155177],{"class":151,"line":346},[149,155153,149821],{"class":155},[149,155155,149433],{"class":169},[149,155157,313],{"class":155},[149,155159,150065],{"class":169},[149,155161,329],{"class":155},[149,155163,155074],{"class":169},[149,155165,313],{"class":155},[149,155167,155109],{"class":169},[149,155169,329],{"class":155},[149,155171,85765],{"class":169},[149,155173,313],{"class":155},[149,155175,155176],{"class":309},"16000",[149,155178,6648],{"class":155},[149,155180,155181],{"class":151,"line":352},[149,155182,34952],{"class":155},[19,155184,155186],{"id":155185},"_1252-按日期统计","12.5.2 按日期统计",[140,155188,155190],{"className":32084,"code":155189,"language":32086,"meta":145,"style":145},"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",[48,155191,155192,155201,155205,155216,155230,155243,155262,155266],{"__ignoreMap":145},[149,155193,155194,155197,155199],{"class":151,"line":152},[149,155195,155196],{"class":155},"daily_total ",[149,155198,166],{"class":325},[149,155200,89549],{"class":155},[149,155202,155203],{"class":151,"line":193},[149,155204,4119],{"emptyLinePlaceholder":1800},[149,155206,155207,155209,155211,155213],{"class":151,"line":235},[149,155208,4743],{"class":325},[149,155210,149645],{"class":155},[149,155212,27752],{"class":325},[149,155214,155215],{"class":155}," sales:\n",[149,155217,155218,155221,155223,155226,155228],{"class":151,"line":340},[149,155219,155220],{"class":155},"    date ",[149,155222,166],{"class":325},[149,155224,155225],{"class":155}," item[",[149,155227,149433],{"class":169},[149,155229,34952],{"class":155},[149,155231,155232,155235,155237,155239,155241],{"class":151,"line":346},[149,155233,155234],{"class":155},"    amount ",[149,155236,166],{"class":325},[149,155238,155225],{"class":155},[149,155240,85765],{"class":169},[149,155242,34952],{"class":155},[149,155244,155245,155248,155250,155253,155255,155257,155259],{"class":151,"line":352},[149,155246,155247],{"class":155},"    daily_total[date] ",[149,155249,166],{"class":325},[149,155251,155252],{"class":155}," daily_total.get(date, ",[149,155254,2056],{"class":309},[149,155256,15427],{"class":155},[149,155258,2344],{"class":325},[149,155260,155261],{"class":155}," amount\n",[149,155263,155264],{"class":151,"line":1021},[149,155265,4119],{"emptyLinePlaceholder":1800},[149,155267,155268,155270],{"class":151,"line":1035},[149,155269,32121],{"class":309},[149,155271,155272],{"class":155},"(daily_total)\n",[19,155274,155276],{"id":155275},"_1253-按类别统计","12.5.3 按类别统计",[140,155278,155280],{"className":32084,"code":155279,"language":32086,"meta":145,"style":145},"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",[48,155281,155282,155291,155295,155305,155318,155330,155348,155352],{"__ignoreMap":145},[149,155283,155284,155287,155289],{"class":151,"line":152},[149,155285,155286],{"class":155},"category_total ",[149,155288,166],{"class":325},[149,155290,89549],{"class":155},[149,155292,155293],{"class":151,"line":193},[149,155294,4119],{"emptyLinePlaceholder":1800},[149,155296,155297,155299,155301,155303],{"class":151,"line":235},[149,155298,4743],{"class":325},[149,155300,149645],{"class":155},[149,155302,27752],{"class":325},[149,155304,155215],{"class":155},[149,155306,155307,155310,155312,155314,155316],{"class":151,"line":340},[149,155308,155309],{"class":155},"    category ",[149,155311,166],{"class":325},[149,155313,155225],{"class":155},[149,155315,155074],{"class":169},[149,155317,34952],{"class":155},[149,155319,155320,155322,155324,155326,155328],{"class":151,"line":346},[149,155321,155234],{"class":155},[149,155323,166],{"class":325},[149,155325,155225],{"class":155},[149,155327,85765],{"class":169},[149,155329,34952],{"class":155},[149,155331,155332,155335,155337,155340,155342,155344,155346],{"class":151,"line":352},[149,155333,155334],{"class":155},"    category_total[category] ",[149,155336,166],{"class":325},[149,155338,155339],{"class":155}," category_total.get(category, ",[149,155341,2056],{"class":309},[149,155343,15427],{"class":155},[149,155345,2344],{"class":325},[149,155347,155261],{"class":155},[149,155349,155350],{"class":151,"line":1021},[149,155351,4119],{"emptyLinePlaceholder":1800},[149,155353,155354,155356],{"class":151,"line":1035},[149,155355,32121],{"class":309},[149,155357,155358],{"class":155},"(category_total)\n",[19,155360,155362],{"id":155361},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[140,155364,155366],{"className":32084,"code":155365,"language":32086,"meta":145,"style":145},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[48,155367,155368,155393],{"__ignoreMap":145},[149,155369,155370,155373,155375,155377,155380,155383,155386,155389,155391],{"class":151,"line":152},[149,155371,155372],{"class":155},"top_date, top_amount ",[149,155374,166],{"class":325},[149,155376,7667],{"class":309},[149,155378,155379],{"class":155},"(daily_total.items(), ",[149,155381,155382],{"class":6932},"key",[149,155384,155385],{"class":325},"=lambda",[149,155387,155388],{"class":155}," item: item[",[149,155390,830],{"class":309},[149,155392,6375],{"class":155},[149,155394,155395,155397],{"class":151,"line":193},[149,155396,32121],{"class":309},[149,155398,155399],{"class":155},"(top_date, top_amount)\n",[14,155401,155403],{"id":155402},"_126-绘制柱状图","12.6 绘制柱状图",[140,155405,155407],{"className":32084,"code":155406,"language":32086,"meta":145,"style":145},"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",[48,155408,155409,155423,155434,155438,155446,155458,155470,155481,155485,155489,155499,155510,155524,155529,155546,155563,155579,155583],{"__ignoreMap":145},[149,155410,155411,155413,155415,155417,155419,155421],{"class":151,"line":152},[149,155412,32443],{"class":325},[149,155414,148815],{"class":155},[149,155416,32098],{"class":325},[149,155418,148820],{"class":155},[149,155420,33089],{"class":325},[149,155422,148825],{"class":155},[149,155424,155425,155427,155429,155431],{"class":151,"line":193},[149,155426,32443],{"class":325},[149,155428,148674],{"class":155},[149,155430,32098],{"class":325},[149,155432,155433],{"class":155}," Bar\n",[149,155435,155436],{"class":151,"line":235},[149,155437,4119],{"emptyLinePlaceholder":1800},[149,155439,155440,155442,155444],{"class":151,"line":340},[149,155441,155286],{"class":155},[149,155443,166],{"class":325},[149,155445,304],{"class":155},[149,155447,155448,155451,155453,155456],{"class":151,"line":346},[149,155449,155450],{"class":169},"    \"手机\"",[149,155452,313],{"class":155},[149,155454,155455],{"class":309},"27000",[149,155457,33172],{"class":155},[149,155459,155460,155463,155465,155468],{"class":151,"line":352},[149,155461,155462],{"class":169},"    \"电脑\"",[149,155464,313],{"class":155},[149,155466,155467],{"class":309},"34000",[149,155469,33172],{"class":155},[149,155471,155472,155475,155477,155479],{"class":151,"line":1021},[149,155473,155474],{"class":169},"    \"耳机\"",[149,155476,313],{"class":155},[149,155478,126078],{"class":309},[149,155480,33172],{"class":155},[149,155482,155483],{"class":151,"line":1035},[149,155484,355],{"class":155},[149,155486,155487],{"class":151,"line":1054},[149,155488,4119],{"emptyLinePlaceholder":1800},[149,155490,155491,155494,155496],{"class":151,"line":1072},[149,155492,155493],{"class":155},"bar ",[149,155495,166],{"class":325},[149,155497,155498],{"class":155}," Bar()\n",[149,155500,155501,155504,155507],{"class":151,"line":1090},[149,155502,155503],{"class":155},"bar.add_xaxis(",[149,155505,155506],{"class":309},"list",[149,155508,155509],{"class":155},"(category_total.keys()))\n",[149,155511,155512,155515,155517,155519,155521],{"class":151,"line":1633},[149,155513,155514],{"class":155},"bar.add_yaxis(",[149,155516,148731],{"class":169},[149,155518,329],{"class":155},[149,155520,155506],{"class":309},[149,155522,155523],{"class":155},"(category_total.values()))\n",[149,155525,155526],{"class":151,"line":1644},[149,155527,155528],{"class":155},"bar.set_global_opts(\n",[149,155530,155531,155533,155535,155537,155539,155541,155544],{"class":151,"line":3348},[149,155532,148909],{"class":6932},[149,155534,166],{"class":325},[149,155536,148914],{"class":155},[149,155538,53111],{"class":6932},[149,155540,166],{"class":325},[149,155542,155543],{"class":169},"\"品类销售额\"",[149,155545,39753],{"class":155},[149,155547,155548,155550,155552,155554,155556,155558,155561],{"class":151,"line":3362},[149,155549,148928],{"class":6932},[149,155551,166],{"class":325},[149,155553,148933],{"class":155},[149,155555,81491],{"class":6932},[149,155557,166],{"class":325},[149,155559,155560],{"class":169},"\"品类\"",[149,155562,39753],{"class":155},[149,155564,155565,155567,155569,155571,155573,155575,155577],{"class":151,"line":3367},[149,155566,148947],{"class":6932},[149,155568,166],{"class":325},[149,155570,148933],{"class":155},[149,155572,81491],{"class":6932},[149,155574,166],{"class":325},[149,155576,148731],{"class":169},[149,155578,39753],{"class":155},[149,155580,155581],{"class":151,"line":3373},[149,155582,1878],{"class":155},[149,155584,155585,155588,155591],{"class":151,"line":3394},[149,155586,155587],{"class":155},"bar.render(",[149,155589,155590],{"class":169},"\"category_sales.html\"",[149,155592,1878],{"class":155},[14,155594,155596],{"id":155595},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[24,155598,155599],{},"时间线适合展示不同日期、月份、年份的数据变化。",[140,155601,155603],{"className":32084,"code":155602,"language":32086,"meta":145,"style":145},"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",[48,155604,155605,155619,155630,155634,155642,155666,155689,155714,155718,155722,155732,155736,155747,155756,155766,155780,155811,155816,155820],{"__ignoreMap":145},[149,155606,155607,155609,155611,155613,155615,155617],{"class":151,"line":152},[149,155608,32443],{"class":325},[149,155610,148815],{"class":155},[149,155612,32098],{"class":325},[149,155614,148820],{"class":155},[149,155616,33089],{"class":325},[149,155618,148825],{"class":155},[149,155620,155621,155623,155625,155627],{"class":151,"line":193},[149,155622,32443],{"class":325},[149,155624,148674],{"class":155},[149,155626,32098],{"class":325},[149,155628,155629],{"class":155}," Bar, Timeline\n",[149,155631,155632],{"class":151,"line":235},[149,155633,4119],{"emptyLinePlaceholder":1800},[149,155635,155636,155638,155640],{"class":151,"line":340},[149,155637,103338],{"class":155},[149,155639,166],{"class":325},[149,155641,304],{"class":155},[149,155643,155644,155647,155650,155652,155654,155656,155658,155660,155662,155664],{"class":151,"line":346},[149,155645,155646],{"class":169},"    \"2024-10-01\"",[149,155648,155649],{"class":155},": {",[149,155651,155079],{"class":169},[149,155653,313],{"class":155},[149,155655,155088],{"class":309},[149,155657,329],{"class":155},[149,155659,155109],{"class":169},[149,155661,313],{"class":155},[149,155663,155118],{"class":309},[149,155665,6648],{"class":155},[149,155667,155668,155671,155673,155675,155677,155679,155681,155683,155685,155687],{"class":151,"line":352},[149,155669,155670],{"class":169},"    \"2024-10-02\"",[149,155672,155649],{"class":155},[149,155674,155079],{"class":169},[149,155676,313],{"class":155},[149,155678,155147],{"class":309},[149,155680,329],{"class":155},[149,155682,155109],{"class":169},[149,155684,313],{"class":155},[149,155686,155176],{"class":309},[149,155688,6648],{"class":155},[149,155690,155691,155694,155696,155698,155700,155703,155705,155707,155709,155712],{"class":151,"line":1021},[149,155692,155693],{"class":169},"    \"2024-10-03\"",[149,155695,155649],{"class":155},[149,155697,155079],{"class":169},[149,155699,313],{"class":155},[149,155701,155702],{"class":309},"17000",[149,155704,329],{"class":155},[149,155706,155109],{"class":169},[149,155708,313],{"class":155},[149,155710,155711],{"class":309},"19000",[149,155713,6648],{"class":155},[149,155715,155716],{"class":151,"line":1035},[149,155717,355],{"class":155},[149,155719,155720],{"class":151,"line":1054},[149,155721,4119],{"emptyLinePlaceholder":1800},[149,155723,155724,155727,155729],{"class":151,"line":1072},[149,155725,155726],{"class":155},"timeline ",[149,155728,166],{"class":325},[149,155730,155731],{"class":155}," Timeline()\n",[149,155733,155734],{"class":151,"line":1090},[149,155735,4119],{"emptyLinePlaceholder":1800},[149,155737,155738,155740,155743,155745],{"class":151,"line":1633},[149,155739,4743],{"class":325},[149,155741,155742],{"class":155}," date, category_data ",[149,155744,27752],{"class":325},[149,155746,150584],{"class":155},[149,155748,155749,155752,155754],{"class":151,"line":1644},[149,155750,155751],{"class":155},"    bar ",[149,155753,166],{"class":325},[149,155755,155498],{"class":155},[149,155757,155758,155761,155763],{"class":151,"line":3348},[149,155759,155760],{"class":155},"    bar.add_xaxis(",[149,155762,155506],{"class":309},[149,155764,155765],{"class":155},"(category_data.keys()))\n",[149,155767,155768,155771,155773,155775,155777],{"class":151,"line":3362},[149,155769,155770],{"class":155},"    bar.add_yaxis(",[149,155772,148731],{"class":169},[149,155774,329],{"class":155},[149,155776,155506],{"class":309},[149,155778,155779],{"class":155},"(category_data.values()))\n",[149,155781,155782,155785,155788,155790,155792,155794,155796,155798,155800,155802,155804,155806,155809],{"class":151,"line":3367},[149,155783,155784],{"class":155},"    bar.set_global_opts(",[149,155786,155787],{"class":6932},"title_opts",[149,155789,166],{"class":325},[149,155791,148914],{"class":155},[149,155793,53111],{"class":6932},[149,155795,166],{"class":325},[149,155797,1921],{"class":325},[149,155799,2115],{"class":169},[149,155801,2756],{"class":309},[149,155803,75608],{"class":155},[149,155805,2805],{"class":309},[149,155807,155808],{"class":169},"销售额\"",[149,155810,32203],{"class":155},[149,155812,155813],{"class":151,"line":3373},[149,155814,155815],{"class":155},"    timeline.add(bar, date)\n",[149,155817,155818],{"class":151,"line":3394},[149,155819,4119],{"emptyLinePlaceholder":1800},[149,155821,155822,155825,155828],{"class":151,"line":3399},[149,155823,155824],{"class":155},"timeline.render(",[149,155826,155827],{"class":169},"\"timeline_sales.html\"",[149,155829,1878],{"class":155},[14,155831,155833],{"id":155832},"_128-绘制地图","12.8 绘制地图",[24,155835,155836],{},"地图适合展示地区数据。",[140,155838,155840],{"className":32084,"code":155839,"language":32086,"meta":145,"style":145},"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",[48,155841,155842,155856,155867,155871,155879,155892,155904,155917,155930,155934,155938,155948,155963,155968,155985,156004,156008],{"__ignoreMap":145},[149,155843,155844,155846,155848,155850,155852,155854],{"class":151,"line":152},[149,155845,32443],{"class":325},[149,155847,148815],{"class":155},[149,155849,32098],{"class":325},[149,155851,148820],{"class":155},[149,155853,33089],{"class":325},[149,155855,148825],{"class":155},[149,155857,155858,155860,155862,155864],{"class":151,"line":193},[149,155859,32443],{"class":325},[149,155861,148674],{"class":155},[149,155863,32098],{"class":325},[149,155865,155866],{"class":155}," Map\n",[149,155868,155869],{"class":151,"line":235},[149,155870,4119],{"emptyLinePlaceholder":1800},[149,155872,155873,155875,155877],{"class":151,"line":340},[149,155874,103338],{"class":155},[149,155876,166],{"class":325},[149,155878,57139],{"class":155},[149,155880,155881,155884,155886,155888,155890],{"class":151,"line":346},[149,155882,155883],{"class":155},"    (",[149,155885,70953],{"class":169},[149,155887,329],{"class":155},[149,155889,2678],{"class":309},[149,155891,39753],{"class":155},[149,155893,155894,155896,155898,155900,155902],{"class":151,"line":352},[149,155895,155883],{"class":155},[149,155897,70973],{"class":169},[149,155899,329],{"class":155},[149,155901,148748],{"class":309},[149,155903,39753],{"class":155},[149,155905,155906,155908,155911,155913,155915],{"class":151,"line":1021},[149,155907,155883],{"class":155},[149,155909,155910],{"class":169},"\"广东\"",[149,155912,329],{"class":155},[149,155914,3442],{"class":309},[149,155916,39753],{"class":155},[149,155918,155919,155921,155924,155926,155928],{"class":151,"line":1035},[149,155920,155883],{"class":155},[149,155922,155923],{"class":169},"\"浙江\"",[149,155925,329],{"class":155},[149,155927,148753],{"class":309},[149,155929,39753],{"class":155},[149,155931,155932],{"class":151,"line":1054},[149,155933,34952],{"class":155},[149,155935,155936],{"class":151,"line":1072},[149,155937,4119],{"emptyLinePlaceholder":1800},[149,155939,155940,155943,155945],{"class":151,"line":1090},[149,155941,155942],{"class":155},"map_chart ",[149,155944,166],{"class":325},[149,155946,155947],{"class":155}," Map()\n",[149,155949,155950,155953,155955,155958,155961],{"class":151,"line":1633},[149,155951,155952],{"class":155},"map_chart.add(",[149,155954,148731],{"class":169},[149,155956,155957],{"class":155},", data, ",[149,155959,155960],{"class":169},"\"china\"",[149,155962,1878],{"class":155},[149,155964,155965],{"class":151,"line":1644},[149,155966,155967],{"class":155},"map_chart.set_global_opts(\n",[149,155969,155970,155972,155974,155976,155978,155980,155983],{"class":151,"line":3348},[149,155971,148909],{"class":6932},[149,155973,166],{"class":325},[149,155975,148914],{"class":155},[149,155977,53111],{"class":6932},[149,155979,166],{"class":325},[149,155981,155982],{"class":169},"\"地区销售额\"",[149,155984,39753],{"class":155},[149,155986,155987,155990,155992,155995,155998,156000,156002],{"class":151,"line":3362},[149,155988,155989],{"class":6932},"    visualmap_opts",[149,155991,166],{"class":325},[149,155993,155994],{"class":155},"opts.VisualMapOpts(",[149,155996,155997],{"class":6932},"max_",[149,155999,166],{"class":325},[149,156001,3442],{"class":309},[149,156003,39753],{"class":155},[149,156005,156006],{"class":151,"line":3367},[149,156007,1878],{"class":155},[149,156009,156010,156013,156016],{"class":151,"line":3373},[149,156011,156012],{"class":155},"map_chart.render(",[149,156014,156015],{"class":169},"\"map_sales.html\"",[149,156017,1878],{"class":155},[24,156019,156020],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156022,156024],{"id":156023},"_129-项目拆分建议","12.9 项目拆分建议",[24,156026,156027],{},"当代码超过一个文件时，可以这样组织：",[140,156029,156032],{"className":156030,"code":156031,"language":1655,"meta":145},[1653],"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",[48,156033,156031],{"__ignoreMap":145},[24,156035,156036],{},"职责：",[125,156038,156039,156045,156051,156057],{},[45,156040,156041,156044],{},[48,156042,156043],{},"main.py","：程序入口。",[45,156046,156047,156050],{},[48,156048,156049],{},"file_utils.py","：读写 JSON。",[45,156052,156053,156056],{},[48,156054,156055],{},"sales_service.py","：统计销售数据。",[45,156058,156059,156062],{},[48,156060,156061],{},"chart_builder.py","：生成图表。",[14,156064,156066],{"id":156065},"_1210-python基础复习清单","12.10 Python基础复习清单",[24,156068,156069],{},"语法基础：",[125,156071,156072,156075,156078,156081],{},[45,156073,156074],{},"会写变量、注释、输入输出。",[45,156076,156077],{},"会使用 int、float、str、bool。",[45,156079,156080],{},"会做类型转换。",[45,156082,156083],{},"会使用 f-string 格式化输出。",[24,156085,156086],{},"流程控制：",[125,156088,156089,156095,156101,156109],{},[45,156090,156091,156092,30091],{},"会写 ",[48,156093,156094],{},"if elif else",[45,156096,156091,156097,102698,156099,30091],{},[48,156098,110342],{},[48,156100,4743],{},[45,156102,156103,156104,102698,156106,30091],{},"理解 ",[48,156105,3772],{},[48,156107,156108],{},"continue",[45,156110,156111],{},"能写嵌套循环。",[24,156113,156114],{},"函数：",[125,156116,156117,156120,156123,156126],{},[45,156118,156119],{},"会定义和调用函数。",[45,156121,156122],{},"理解参数和返回值。",[45,156124,156125],{},"知道局部变量和全局变量。",[45,156127,156128],{},"会使用默认参数、关键字参数、不定长参数。",[24,156130,156131],{},"容器：",[125,156133,156134,156137,156140,156143,156146],{},[45,156135,156136],{},"会使用列表增删改查。",[45,156138,156139],{},"会遍历列表、字典。",[45,156141,156142],{},"会使用切片。",[45,156144,156145],{},"会用集合去重。",[45,156147,156148],{},"会处理列表嵌套字典。",[24,156150,156151],{},"文件和模块：",[125,156153,156154,156157,156160,156163,156166],{},[45,156155,156156],{},"会读写文本文件。",[45,156158,156159],{},"会读写 JSON。",[45,156161,156162],{},"会捕获常见异常。",[45,156164,156165],{},"会导入模块和第三方包。",[45,156167,156168],{},"会创建简单包结构。",[24,156170,156171],{},"项目能力：",[125,156173,156174,156177,156180,156183,156186],{},[45,156175,156176],{},"能把代码拆成函数。",[45,156178,156179],{},"能把数据保存到文件。",[45,156181,156182],{},"能处理用户输入错误。",[45,156184,156185],{},"能写一个完整菜单程序。",[45,156187,156188],{},"能用 pyecharts 生成图表。",[14,156190,156192],{"id":156191},"_1211-推荐练习顺序","12.11 推荐练习顺序",[125,156194,156195,156198,156201,156204,156207,156210,156213,156216],{},[45,156196,156197],{},"猜数字游戏。",[45,156199,156200],{},"ATM 菜单程序。",[45,156202,156203],{},"学生成绩统计。",[45,156205,156206],{},"学生管理系统函数版。",[45,156208,156209],{},"学生管理系统文件持久化版。",[45,156211,156212],{},"学生管理系统面向对象版。",[45,156214,156215],{},"销售数据统计。",[45,156217,156218],{},"销售数据可视化。",[14,156220,156222],{"id":156221},"_1212-常见学习误区","12.12 常见学习误区",[125,156224,156225,156228,156231,156234,156237,156240,156243],{},[45,156226,156227],{},"只看视频不敲代码。",[45,156229,156230],{},"一报错就复制错误去搜，不先读报错位置。",[45,156232,156233],{},"变量名随便写，后续自己看不懂。",[45,156235,156236],{},"所有代码都写在一个文件一个函数里。",[45,156238,156239],{},"不保存练习代码，复习时没有材料。",[45,156241,156242],{},"还没掌握列表字典就急着学框架。",[45,156244,156245],{},"不会读官方文档，只依赖教程。",[14,156247,156249],{"id":156248},"_1213-如何读报错","12.13 如何读报错",[24,156251,156252],{},"报错通常从下往上看最后几行。",[24,156254,16846],{},[140,156256,156259],{"className":156257,"code":156258,"language":1655,"meta":145},[1653],"ValueError: invalid literal for int() with base 10: 'abc'\n",[48,156260,156258],{"__ignoreMap":145},[24,156262,26308],{},[125,156264,156265,156271,156281],{},[45,156266,156267,156268,30091],{},"异常类型是 ",[48,156269,156270],{},"ValueError",[45,156272,109024,156273,156276,156277,156280],{},[48,156274,156275],{},"int()"," 无法把 ",[48,156278,156279],{},"'abc'"," 转成整数。",[45,156282,156283],{},"应该检查输入内容或增加异常处理。",[24,156285,156286],{},"再看文件名和行号：",[140,156288,156291],{"className":156289,"code":156290,"language":1655,"meta":145},[1653],"File \"main.py\", line 10, in \u003Cmodule>\n",[48,156292,156290],{"__ignoreMap":145},[24,156294,156295,156296,156298],{},"表示错误发生在 ",[48,156297,156043],{}," 第 10 行。",[14,156300,156302],{"id":156301},"_1214-后续学习方向","12.14 后续学习方向",[24,156304,156305],{},"Python 基础完成后，可以按兴趣选择方向：",[125,156307,156308,156320,156329,156341,156352,156361,156371],{},[45,156309,156310,156311,2077,156314,2077,156317,30091],{},"自动化办公：",[48,156312,156313],{},"openpyxl",[48,156315,156316],{},"python-docx",[48,156318,156319],{},"pdfplumber",[45,156321,156322,156323,2077,156325,2077,156327,30091],{},"数据分析：",[48,156324,102306],{},[48,156326,147621],{},[48,156328,147629],{},[45,156330,156331,156332,2077,156335,2077,156338,30091],{},"Web 后端：",[48,156333,156334],{},"Flask",[48,156336,156337],{},"FastAPI",[48,156339,156340],{},"Django",[45,156342,156343,156344,2077,156346,2077,156349,30091],{},"爬虫：",[48,156345,147606],{},[48,156347,156348],{},"BeautifulSoup",[48,156350,156351],{},"Scrapy",[45,156353,156354,156355,2077,156357,156360],{},"测试开发：",[48,156356,147653],{},[48,156358,156359],{},"selenium","、接口测试。",[45,156362,156363,156364,2077,156366,2077,156368,30091],{},"人工智能：",[48,156365,102306],{},[48,156367,147621],{},[48,156369,156370],{},"pytorch",[45,156372,156373,156374,2077,156376,2077,156379,30091],{},"运维脚本：",[48,156375,147222],{},[48,156377,156378],{},"subprocess",[48,156380,156381],{},"paramiko",[24,156383,156384],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156386,156388],{"id":156387},"_1215-结课练习","12.15 结课练习",[125,156390,156391,156394,156397,156400,156403,156406,156409,156412],{},[45,156392,156393],{},"完成函数版学生管理系统。",[45,156395,156396],{},"给学生管理系统增加 JSON 持久化。",[45,156398,156399],{},"给学生管理系统增加异常处理。",[45,156401,156402],{},"把学生管理系统改成面向对象版。",[45,156404,156405],{},"使用 pyecharts 绘制学生成绩柱状图。",[45,156407,156408],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[45,156410,156411],{},"按品类统计销售额并绘制柱状图。",[45,156413,156414],{},"写一份自己的 Python 学习路线图。",[1783,156416,156417],{},"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":145,"searchDepth":193,"depth":193,"links":156419},[156420,156421,156424,156425,156426,156432,156433,156434,156435,156436,156437,156438,156439,156440,156441],{"id":153136,"depth":193,"text":153137},{"id":153186,"depth":193,"text":153187,"children":156422},[156423],{"id":153190,"depth":235,"text":153191},{"id":153229,"depth":193,"text":153230},{"id":154703,"depth":193,"text":154704},{"id":155041,"depth":193,"text":155042,"children":156427},[156428,156429,156430,156431],{"id":155045,"depth":235,"text":155046},{"id":155185,"depth":235,"text":155186},{"id":155275,"depth":235,"text":155276},{"id":155361,"depth":235,"text":155362},{"id":155402,"depth":193,"text":155403},{"id":155595,"depth":193,"text":155596},{"id":155832,"depth":193,"text":155833},{"id":156023,"depth":193,"text":156024},{"id":156065,"depth":193,"text":156066},{"id":156191,"depth":193,"text":156192},{"id":156221,"depth":193,"text":156222},{"id":156248,"depth":193,"text":156249},{"id":156301,"depth":193,"text":156302},{"id":156387,"depth":193,"text":156388},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153128,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156448,"title":156449,"body":156450,"description":1797,"extension":1798,"meta":158919,"navigation":1800,"path":158920,"seo":158921,"stem":158922,"__hash__":158923},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156451,"toc":158894},[156452,156455,156459,156462,156465,156485,156488,156511,156514,156517,156539,156542,156564,156568,156571,156611,156614,156735,156739,156742,156782,156785,156809,156812,156816,156819,156833,156866,156869,156904,156907,156930,156933,156966,156969,156971,156977,157052,157055,157061,157078,157118,157122,157125,157171,157173,157211,157214,157249,157252,157287,157290,157322,157325,157344,157348,157352,157465,157467,157542,157546,157592,157595,157621,157630,157634,157637,157700,157708,157736,157740,157780,157845,157849,157852,157891,157894,157939,157942,158003,158007,158034,158037,158065,158068,158072,158076,158141,158144,158182,158185,158217,158221,158320,158324,158327,158400,158403,158451,158455,158461,158501,158504,158551,158554,158603,158607,158609,158623,158625,158806,158810,158837,158857,158864,158868,158885,158891],[10,156453,156449],{"id":156454},"_2-基础语法变量与字符串",[14,156456,156458],{"id":156457},"_21-注释","2.1 注释",[24,156460,156461],{},"注释是给人看的说明文字，不会被 Python 执行。",[24,156463,156464],{},"单行注释：",[140,156466,156468],{"className":32084,"code":156467,"language":32086,"meta":145,"style":145},"# 这是单行注释\nprint(\"hello\")\n",[48,156469,156470,156475],{"__ignoreMap":145},[149,156471,156472],{"class":151,"line":152},[149,156473,156474],{"class":295},"# 这是单行注释\n",[149,156476,156477,156479,156481,156483],{"class":151,"line":193},[149,156478,32121],{"class":309},[149,156480,319],{"class":155},[149,156482,7560],{"class":169},[149,156484,1878],{"class":155},[24,156486,156487],{},"多行说明常用三引号：",[140,156489,156491],{"className":32084,"code":156490,"language":32086,"meta":145,"style":145},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[48,156492,156493,156497,156502,156507],{"__ignoreMap":145},[149,156494,156495],{"class":151,"line":152},[149,156496,97378],{"class":169},[149,156498,156499],{"class":151,"line":193},[149,156500,156501],{"class":169},"这是多行说明。\n",[149,156503,156504],{"class":151,"line":235},[149,156505,156506],{"class":169},"常用于文件顶部说明、函数说明等。\n",[149,156508,156509],{"class":151,"line":340},[149,156510,97378],{"class":169},[24,156512,156513],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[24,156515,156516],{},"不好：",[140,156518,156520],{"className":32084,"code":156519,"language":32086,"meta":145,"style":145},"# age 加 1\nage = age + 1\n",[48,156521,156522,156527],{"__ignoreMap":145},[149,156523,156524],{"class":151,"line":152},[149,156525,156526],{"class":295},"# age 加 1\n",[149,156528,156529,156531,156533,156535,156537],{"class":151,"line":193},[149,156530,147982],{"class":155},[149,156532,166],{"class":325},[149,156534,17417],{"class":155},[149,156536,2344],{"class":325},[149,156538,57391],{"class":309},[24,156540,156541],{},"较好：",[140,156543,156545],{"className":32084,"code":156544,"language":32086,"meta":145,"style":145},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[48,156546,156547,156552],{"__ignoreMap":145},[149,156548,156549],{"class":151,"line":152},[149,156550,156551],{"class":295},"# 用户过完生日后，年龄增加一岁\n",[149,156553,156554,156556,156558,156560,156562],{"class":151,"line":193},[149,156555,147982],{"class":155},[149,156557,166],{"class":325},[149,156559,17417],{"class":155},[149,156561,2344],{"class":325},[149,156563,57391],{"class":309},[14,156565,156567],{"id":156566},"_22-字面量","2.2 字面量",[24,156569,156570],{},"字面量就是代码中直接写出来的数据。",[140,156572,156574],{"className":32084,"code":156573,"language":32086,"meta":145,"style":145},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[48,156575,156576,156583,156590,156597,156604],{"__ignoreMap":145},[149,156577,156578,156580],{"class":151,"line":152},[149,156579,322],{"class":309},[149,156581,156582],{"class":295},"          # 整数\n",[149,156584,156585,156587],{"class":151,"line":193},[149,156586,1918],{"class":309},[149,156588,156589],{"class":295},"         # 小数\n",[149,156591,156592,156594],{"class":151,"line":235},[149,156593,7560],{"class":169},[149,156595,156596],{"class":295},"      # 字符串\n",[149,156598,156599,156601],{"class":151,"line":340},[149,156600,33182],{"class":309},[149,156602,156603],{"class":295},"         # 布尔值\n",[149,156605,156606,156608],{"class":151,"line":346},[149,156607,97366],{"class":309},[149,156609,156610],{"class":295},"         # 空值\n",[24,156612,156613],{},"常见字面量类型：",[2003,156615,156616,156626],{},[2006,156617,156618],{},[2009,156619,156620,156622,156624],{},[2012,156621,25445],{},[2012,156623,29201],{},[2012,156625,27578],{},[2049,156627,156628,156639,156650,156661,156673,156685,156697,156710,156722],{},[2009,156629,156630,156632,156636],{},[2054,156631,1875],{},[2054,156633,156634],{},[48,156635,322],{},[2054,156637,156638],{},"整数",[2009,156640,156641,156643,156647],{},[2054,156642,1910],{},[2054,156644,156645],{},[48,156646,1918],{},[2054,156648,156649],{},"浮点数",[2009,156651,156652,156654,156658],{},[2054,156653,3027],{},[2054,156655,156656],{},[48,156657,7560],{},[2054,156659,156660],{},"字符串",[2009,156662,156663,156665,156671],{},[2054,156664,3079],{},[2054,156666,156667,2077,156669],{},[48,156668,33182],{},[48,156670,35693],{},[2054,156672,67702],{},[2009,156674,156675,156678,156682],{},[2054,156676,156677],{},"NoneType",[2054,156679,156680],{},[48,156681,97366],{},[2054,156683,156684],{},"空值",[2009,156686,156687,156689,156694],{},[2054,156688,155506],{},[2054,156690,156691],{},[48,156692,156693],{},"[1, 2, 3]",[2054,156695,156696],{},"列表",[2009,156698,156699,156702,156707],{},[2054,156700,156701],{},"tuple",[2054,156703,156704],{},[48,156705,156706],{},"(1, 2, 3)",[2054,156708,156709],{},"元组",[2009,156711,156712,156714,156719],{},[2054,156713,116225],{},[2054,156715,156716],{},[48,156717,156718],{},"{\"name\": \"张三\"}",[2054,156720,156721],{},"字典",[2009,156723,156724,156727,156732],{},[2054,156725,156726],{},"set",[2054,156728,156729],{},[48,156730,156731],{},"{1, 2, 3}",[2054,156733,156734],{},"集合",[14,156736,156738],{"id":156737},"_23-变量","2.3 变量",[24,156740,156741],{},"变量是保存数据的名字。",[140,156743,156745],{"className":32084,"code":156744,"language":32086,"meta":145,"style":145},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[48,156746,156747,156755,156763,156773],{"__ignoreMap":145},[149,156748,156749,156751,156753],{"class":151,"line":152},[149,156750,147972],{"class":155},[149,156752,166],{"class":325},[149,156754,150789],{"class":169},[149,156756,156757,156759,156761],{"class":151,"line":193},[149,156758,147982],{"class":155},[149,156760,166],{"class":325},[149,156762,147987],{"class":309},[149,156764,156765,156768,156770],{"class":151,"line":235},[149,156766,156767],{"class":155},"height ",[149,156769,166],{"class":325},[149,156771,156772],{"class":309}," 1.75\n",[149,156774,156775,156778,156780],{"class":151,"line":340},[149,156776,156777],{"class":155},"is_student ",[149,156779,166],{"class":325},[149,156781,155035],{"class":309},[24,156783,156784],{},"Python 的变量不需要提前声明类型：",[140,156786,156788],{"className":32084,"code":156787,"language":32086,"meta":145,"style":145},"score = 100\nscore = \"满分\"\n",[48,156789,156790,156800],{"__ignoreMap":145},[149,156791,156792,156795,156797],{"class":151,"line":152},[149,156793,156794],{"class":155},"score ",[149,156796,166],{"class":325},[149,156798,156799],{"class":309}," 100\n",[149,156801,156802,156804,156806],{"class":151,"line":193},[149,156803,156794],{"class":155},[149,156805,166],{"class":325},[149,156807,156808],{"class":169}," \"满分\"\n",[24,156810,156811],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156813,156815],{"id":156814},"_24-变量命名规则","2.4 变量命名规则",[24,156817,156818],{},"硬性规则：",[125,156820,156821,156824,156827,156830],{},[45,156822,156823],{},"只能由字母、数字、下划线组成。",[45,156825,156826],{},"不能以数字开头。",[45,156828,156829],{},"不能使用 Python 关键字。",[45,156831,156832],{},"区分大小写。",[140,156834,156836],{"className":32084,"code":156835,"language":32086,"meta":145,"style":145},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[48,156837,156838,156847,156856],{"__ignoreMap":145},[149,156839,156840,156843,156845],{"class":151,"line":152},[149,156841,156842],{"class":155},"user_name ",[149,156844,166],{"class":325},[149,156846,147977],{"class":169},[149,156848,156849,156852,156854],{"class":151,"line":193},[149,156850,156851],{"class":155},"age2 ",[149,156853,166],{"class":325},[149,156855,147987],{"class":309},[149,156857,156858,156861,156863],{"class":151,"line":235},[149,156859,156860],{"class":155},"_token ",[149,156862,166],{"class":325},[149,156864,156865],{"class":169}," \"abc\"\n",[24,156867,156868],{},"错误写法：",[140,156870,156872],{"className":32084,"code":156871,"language":32086,"meta":145,"style":145},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[48,156873,156874,156883,156895],{"__ignoreMap":145},[149,156875,156876,156879,156881],{"class":151,"line":152},[149,156877,156878],{"class":79085},"2age",[149,156880,15277],{"class":325},[149,156882,147987],{"class":309},[149,156884,156885,156887,156889,156891,156893],{"class":151,"line":193},[149,156886,133252],{"class":155},[149,156888,2395],{"class":325},[149,156890,147972],{"class":155},[149,156892,166],{"class":325},[149,156894,147977],{"class":169},[149,156896,156897,156899,156901],{"class":151,"line":235},[149,156898,913],{"class":325},[149,156900,15277],{"class":325},[149,156902,156903],{"class":169}," \"一班\"\n",[24,156905,156906],{},"查看关键字：",[140,156908,156910],{"className":32084,"code":156909,"language":32086,"meta":145,"style":145},"import keyword\n\nprint(keyword.kwlist)\n",[48,156911,156912,156919,156923],{"__ignoreMap":145},[149,156913,156914,156916],{"class":151,"line":152},[149,156915,32098],{"class":325},[149,156917,156918],{"class":155}," keyword\n",[149,156920,156921],{"class":151,"line":193},[149,156922,4119],{"emptyLinePlaceholder":1800},[149,156924,156925,156927],{"class":151,"line":235},[149,156926,32121],{"class":309},[149,156928,156929],{"class":155},"(keyword.kwlist)\n",[24,156931,156932],{},"推荐命名风格：",[140,156934,156936],{"className":32084,"code":156935,"language":32086,"meta":145,"style":145},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[48,156937,156938,156947,156957],{"__ignoreMap":145},[149,156939,156940,156943,156945],{"class":151,"line":152},[149,156941,156942],{"class":155},"student_name ",[149,156944,166],{"class":325},[149,156946,150789],{"class":169},[149,156948,156949,156952,156954],{"class":151,"line":193},[149,156950,156951],{"class":155},"total_price ",[149,156953,166],{"class":325},[149,156955,156956],{"class":309}," 99.8\n",[149,156958,156959,156962,156964],{"class":151,"line":235},[149,156960,156961],{"class":155},"is_finished ",[149,156963,166],{"class":325},[149,156965,127486],{"class":309},[24,156967,156968],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156970,52438],{"id":52437},[24,156972,106045,156973,156976],{},[48,156974,156975],{},"type()"," 查看数据类型：",[140,156978,156980],{"className":32084,"code":156979,"language":32086,"meta":145,"style":145},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[48,156981,156982,156996,157010,157024,157038],{"__ignoreMap":145},[149,156983,156984,156986,156988,156990,156992,156994],{"class":151,"line":152},[149,156985,32121],{"class":309},[149,156987,319],{"class":155},[149,156989,813],{"class":309},[149,156991,319],{"class":155},[149,156993,322],{"class":309},[149,156995,32203],{"class":155},[149,156997,156998,157000,157002,157004,157006,157008],{"class":151,"line":193},[149,156999,32121],{"class":309},[149,157001,319],{"class":155},[149,157003,813],{"class":309},[149,157005,319],{"class":155},[149,157007,1918],{"class":309},[149,157009,32203],{"class":155},[149,157011,157012,157014,157016,157018,157020,157022],{"class":151,"line":235},[149,157013,32121],{"class":309},[149,157015,319],{"class":155},[149,157017,813],{"class":309},[149,157019,319],{"class":155},[149,157021,7560],{"class":169},[149,157023,32203],{"class":155},[149,157025,157026,157028,157030,157032,157034,157036],{"class":151,"line":340},[149,157027,32121],{"class":309},[149,157029,319],{"class":155},[149,157031,813],{"class":309},[149,157033,319],{"class":155},[149,157035,33182],{"class":309},[149,157037,32203],{"class":155},[149,157039,157040,157042,157044,157046,157048,157050],{"class":151,"line":346},[149,157041,32121],{"class":309},[149,157043,319],{"class":155},[149,157045,813],{"class":309},[149,157047,319],{"class":155},[149,157049,97366],{"class":309},[149,157051,32203],{"class":155},[24,157053,157054],{},"输出类似：",[140,157056,157059],{"className":157057,"code":157058,"language":1655,"meta":145},[1653],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[48,157060,157058],{"__ignoreMap":145},[24,157062,866,157063,108962,157065,157067,157068,157070,157071,23210,157073,157070,157075,157077],{},[48,157064,3079],{},[48,157066,1875],{}," 的子类，",[48,157069,33182],{}," 可以当作 ",[48,157072,830],{},[48,157074,35693],{},[48,157076,2056],{},"，但业务代码中不要滥用。",[140,157079,157081],{"className":32084,"code":157080,"language":32086,"meta":145,"style":145},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[48,157082,157083,157101],{"__ignoreMap":145},[149,157084,157085,157087,157089,157091,157093,157095,157098],{"class":151,"line":152},[149,157086,32121],{"class":309},[149,157088,319],{"class":155},[149,157090,33182],{"class":309},[149,157092,47272],{"class":325},[149,157094,26827],{"class":309},[149,157096,157097],{"class":155},")   ",[149,157099,157100],{"class":295},"# 2\n",[149,157102,157103,157105,157107,157109,157111,157113,157115],{"class":151,"line":193},[149,157104,32121],{"class":309},[149,157106,319],{"class":155},[149,157108,35693],{"class":309},[149,157110,47272],{"class":325},[149,157112,26827],{"class":309},[149,157114,47514],{"class":155},[149,157116,157117],{"class":295},"# 1\n",[14,157119,157121],{"id":157120},"_26-类型转换","2.6 类型转换",[24,157123,157124],{},"常用转换函数：",[140,157126,157128],{"className":32084,"code":157127,"language":32086,"meta":145,"style":145},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[48,157129,157130,157140,157151,157161],{"__ignoreMap":145},[149,157131,157132,157134,157136,157138],{"class":151,"line":152},[149,157133,1875],{"class":309},[149,157135,319],{"class":155},[149,157137,56011],{"class":169},[149,157139,1878],{"class":155},[149,157141,157142,157144,157146,157149],{"class":151,"line":193},[149,157143,1910],{"class":309},[149,157145,319],{"class":155},[149,157147,157148],{"class":169},"\"3.14\"",[149,157150,1878],{"class":155},[149,157152,157153,157155,157157,157159],{"class":151,"line":235},[149,157154,3027],{"class":309},[149,157156,319],{"class":155},[149,157158,322],{"class":309},[149,157160,1878],{"class":155},[149,157162,157163,157165,157167,157169],{"class":151,"line":340},[149,157164,3079],{"class":309},[149,157166,319],{"class":155},[149,157168,830],{"class":309},[149,157170,1878],{"class":155},[24,157172,16846],{},[140,157174,157176],{"className":32084,"code":157175,"language":32086,"meta":145,"style":145},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[48,157177,157178,157187,157198],{"__ignoreMap":145},[149,157179,157180,157182,157184],{"class":151,"line":152},[149,157181,147982],{"class":155},[149,157183,166],{"class":325},[149,157185,157186],{"class":169}," \"18\"\n",[149,157188,157189,157191,157193,157195],{"class":151,"line":193},[149,157190,147982],{"class":155},[149,157192,166],{"class":325},[149,157194,4101],{"class":309},[149,157196,157197],{"class":155},"(age)\n",[149,157199,157200,157202,157205,157207,157209],{"class":151,"line":235},[149,157201,32121],{"class":309},[149,157203,157204],{"class":155},"(age ",[149,157206,2344],{"class":325},[149,157208,26827],{"class":309},[149,157210,1878],{"class":155},[24,157212,157213],{},"输入得到的内容永远是字符串：",[140,157215,157217],{"className":32084,"code":157216,"language":32086,"meta":145,"style":145},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[48,157218,157219,157235],{"__ignoreMap":145},[149,157220,157221,157224,157226,157228,157230,157233],{"class":151,"line":152},[149,157222,157223],{"class":155},"num ",[149,157225,166],{"class":325},[149,157227,62296],{"class":309},[149,157229,319],{"class":155},[149,157231,157232],{"class":169},"\"请输入数字:\"",[149,157234,1878],{"class":155},[149,157236,157237,157239,157241,157243,157246],{"class":151,"line":193},[149,157238,32121],{"class":309},[149,157240,319],{"class":155},[149,157242,813],{"class":309},[149,157244,157245],{"class":155},"(num))  ",[149,157247,157248],{"class":295},"# str\n",[24,157250,157251],{},"如果要做数学运算，必须转换：",[140,157253,157255],{"className":32084,"code":157254,"language":32086,"meta":145,"style":145},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[48,157256,157257,157275],{"__ignoreMap":145},[149,157258,157259,157261,157263,157265,157267,157269,157271,157273],{"class":151,"line":152},[149,157260,157223],{"class":155},[149,157262,166],{"class":325},[149,157264,4101],{"class":309},[149,157266,319],{"class":155},[149,157268,504],{"class":309},[149,157270,319],{"class":155},[149,157272,157232],{"class":169},[149,157274,32203],{"class":155},[149,157276,157277,157279,157281,157283,157285],{"class":151,"line":193},[149,157278,32121],{"class":309},[149,157280,47325],{"class":155},[149,157282,2344],{"class":325},[149,157284,3757],{"class":309},[149,157286,1878],{"class":155},[24,157288,157289],{},"常见错误：",[140,157291,157293],{"className":32084,"code":157292,"language":32086,"meta":145,"style":145},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[48,157294,157295,157308],{"__ignoreMap":145},[149,157296,157297,157299,157301,157303,157305],{"class":151,"line":152},[149,157298,1875],{"class":309},[149,157300,319],{"class":155},[149,157302,157148],{"class":169},[149,157304,157097],{"class":155},[149,157306,157307],{"class":295},"# 错误\n",[149,157309,157310,157312,157314,157317,157320],{"class":151,"line":193},[149,157311,1875],{"class":309},[149,157313,319],{"class":155},[149,157315,157316],{"class":169},"\"abc\"",[149,157318,157319],{"class":155},")    ",[149,157321,157307],{"class":295},[24,157323,157324],{},"正确写法：",[140,157326,157328],{"className":32084,"code":157327,"language":32086,"meta":145,"style":145},"num = float(\"3.14\")\n",[48,157329,157330],{"__ignoreMap":145},[149,157331,157332,157334,157336,157338,157340,157342],{"class":151,"line":152},[149,157333,157223],{"class":155},[149,157335,166],{"class":325},[149,157337,111476],{"class":309},[149,157339,319],{"class":155},[149,157341,157148],{"class":169},[149,157343,1878],{"class":155},[14,157345,157347],{"id":157346},"_27-运算符","2.7 运算符",[19,157349,157351],{"id":157350},"_271-算术运算符","2.7.1 算术运算符",[2003,157353,157354,157365],{},[2006,157355,157356],{},[2009,157357,157358,157361,157363],{},[2012,157359,157360],{},"运算符",[2012,157362,27578],{},[2012,157364,29201],{},[2049,157366,157367,157381,157395,157409,157423,157437,157451],{},[2009,157368,157369,157373,157376],{},[2054,157370,157371],{},[48,157372,2344],{},[2054,157374,157375],{},"加法",[2054,157377,157378],{},[48,157379,157380],{},"1 + 2",[2009,157382,157383,157387,157390],{},[2054,157384,157385],{},[48,157386,2395],{},[2054,157388,157389],{},"减法",[2054,157391,157392],{},[48,157393,157394],{},"5 - 3",[2009,157396,157397,157401,157404],{},[2054,157398,157399],{},[48,157400,2318],{},[2054,157402,157403],{},"乘法",[2054,157405,157406],{},[48,157407,157408],{},"2 * 3",[2009,157410,157411,157415,157418],{},[2054,157412,157413],{},[48,157414,2447],{},[2054,157416,157417],{},"除法，结果是浮点数",[2054,157419,157420],{},[48,157421,157422],{},"5 \u002F 2",[2009,157424,157425,157429,157432],{},[2054,157426,157427],{},[48,157428,35035],{},[2054,157430,157431],{},"整除",[2054,157433,157434],{},[48,157435,157436],{},"5 \u002F\u002F 2",[2009,157438,157439,157443,157446],{},[2054,157440,157441],{},[48,157442,2191],{},[2054,157444,157445],{},"取余",[2054,157447,157448],{},[48,157449,157450],{},"5 % 2",[2009,157452,157453,157457,157460],{},[2054,157454,157455],{},[48,157456,12375],{},[2054,157458,157459],{},"幂运算",[2054,157461,157462],{},[48,157463,157464],{},"2 ** 3",[24,157466,16846],{},[140,157468,157470],{"className":32084,"code":157469,"language":32086,"meta":145,"style":145},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[48,157471,157472,157490,157507,157524],{"__ignoreMap":145},[149,157473,157474,157476,157478,157480,157483,157485,157487],{"class":151,"line":152},[149,157475,32121],{"class":309},[149,157477,319],{"class":155},[149,157479,2182],{"class":309},[149,157481,157482],{"class":325}," \u002F",[149,157484,16467],{"class":309},[149,157486,157097],{"class":155},[149,157488,157489],{"class":295},"# 2.5\n",[149,157491,157492,157494,157496,157498,157501,157503,157505],{"class":151,"line":193},[149,157493,32121],{"class":309},[149,157495,319],{"class":155},[149,157497,2182],{"class":309},[149,157499,157500],{"class":325}," \u002F\u002F",[149,157502,16467],{"class":309},[149,157504,47514],{"class":155},[149,157506,157100],{"class":295},[149,157508,157509,157511,157513,157515,157518,157520,157522],{"class":151,"line":235},[149,157510,32121],{"class":309},[149,157512,319],{"class":155},[149,157514,2182],{"class":309},[149,157516,157517],{"class":325}," %",[149,157519,16467],{"class":309},[149,157521,157097],{"class":155},[149,157523,157117],{"class":295},[149,157525,157526,157528,157530,157532,157535,157537,157539],{"class":151,"line":340},[149,157527,32121],{"class":309},[149,157529,319],{"class":155},[149,157531,1045],{"class":309},[149,157533,157534],{"class":325}," **",[149,157536,79752],{"class":309},[149,157538,47514],{"class":155},[149,157540,157541],{"class":295},"# 8\n",[19,157543,157545],{"id":157544},"_272-赋值运算符","2.7.2 赋值运算符",[140,157547,157549],{"className":32084,"code":157548,"language":32086,"meta":145,"style":145},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[48,157550,157551,157559,157567,157575,157583],{"__ignoreMap":145},[149,157552,157553,157555,157557],{"class":151,"line":152},[149,157554,157223],{"class":155},[149,157556,166],{"class":325},[149,157558,60119],{"class":309},[149,157560,157561,157563,157565],{"class":151,"line":193},[149,157562,157223],{"class":155},[149,157564,11191],{"class":325},[149,157566,56122],{"class":309},[149,157568,157569,157571,157573],{"class":151,"line":235},[149,157570,157223],{"class":155},[149,157572,151688],{"class":325},[149,157574,49429],{"class":309},[149,157576,157577,157579,157581],{"class":151,"line":340},[149,157578,157223],{"class":155},[149,157580,954],{"class":325},[149,157582,121715],{"class":309},[149,157584,157585,157587,157590],{"class":151,"line":346},[149,157586,157223],{"class":155},[149,157588,157589],{"class":325},"\u002F=",[149,157591,49429],{"class":309},[24,157593,157594],{},"等价关系：",[140,157596,157598],{"className":32084,"code":157597,"language":32086,"meta":145,"style":145},"num += 1\nnum = num + 1\n",[48,157599,157600,157608],{"__ignoreMap":145},[149,157601,157602,157604,157606],{"class":151,"line":152},[149,157603,157223],{"class":155},[149,157605,11191],{"class":325},[149,157607,57391],{"class":309},[149,157609,157610,157612,157614,157617,157619],{"class":151,"line":193},[149,157611,157223],{"class":155},[149,157613,166],{"class":325},[149,157615,157616],{"class":155}," num ",[149,157618,2344],{"class":325},[149,157620,57391],{"class":309},[24,157622,157623,157624,102698,157627,30091],{},"Python 没有 ",[48,157625,157626],{},"num++",[48,157628,157629],{},"num--",[19,157631,157633],{"id":157632},"_273-比较运算符","2.7.3 比较运算符",[24,157635,157636],{},"比较运算结果是布尔值。",[140,157638,157640],{"className":32084,"code":157639,"language":32086,"meta":145,"style":145},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[48,157641,157642,157656,157671,157685],{"__ignoreMap":145},[149,157643,157644,157646,157648,157650,157652,157654],{"class":151,"line":152},[149,157645,32121],{"class":309},[149,157647,319],{"class":155},[149,157649,2309],{"class":309},[149,157651,27931],{"class":325},[149,157653,3867],{"class":309},[149,157655,1878],{"class":155},[149,157657,157658,157660,157662,157664,157667,157669],{"class":151,"line":193},[149,157659,32121],{"class":309},[149,157661,319],{"class":155},[149,157663,2309],{"class":309},[149,157665,157666],{"class":325}," >=",[149,157668,3757],{"class":309},[149,157670,1878],{"class":155},[149,157672,157673,157675,157677,157679,157681,157683],{"class":151,"line":235},[149,157674,32121],{"class":309},[149,157676,319],{"class":155},[149,157678,2309],{"class":309},[149,157680,103239],{"class":325},[149,157682,3802],{"class":309},[149,157684,1878],{"class":155},[149,157686,157687,157689,157691,157693,157696,157698],{"class":151,"line":340},[149,157688,32121],{"class":309},[149,157690,319],{"class":155},[149,157692,2309],{"class":309},[149,157694,157695],{"class":325}," !=",[149,157697,3802],{"class":309},[149,157699,1878],{"class":155},[24,157701,157702,157703,157705,157706,30091],{},"注意：判断相等用 ",[48,157704,4667],{},"，赋值用 ",[48,157707,166],{},[140,157709,157711],{"className":32084,"code":157710,"language":32086,"meta":145,"style":145},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[48,157712,157713,157725],{"__ignoreMap":145},[149,157714,157715,157717,157719,157722],{"class":151,"line":152},[149,157716,147982],{"class":155},[149,157718,166],{"class":325},[149,157720,157721],{"class":309}," 18",[149,157723,157724],{"class":295},"       # 赋值\n",[149,157726,157727,157729,157731,157733],{"class":151,"line":193},[149,157728,147982],{"class":155},[149,157730,4667],{"class":325},[149,157732,157721],{"class":309},[149,157734,157735],{"class":295},"      # 判断是否相等\n",[19,157737,157739],{"id":157738},"_274-逻辑运算符","2.7.4 逻辑运算符",[2003,157741,157742,157750],{},[2006,157743,157744],{},[2009,157745,157746,157748],{},[2012,157747,157360],{},[2012,157749,27578],{},[2049,157751,157752,157761,157770],{},[2009,157753,157754,157758],{},[2054,157755,157756],{},[48,157757,32168],{},[2054,157759,157760],{},"并且",[2009,157762,157763,157767],{},[2054,157764,157765],{},[48,157766,116769],{},[2054,157768,157769],{},"或者",[2009,157771,157772,157777],{},[2054,157773,157774],{},[48,157775,157776],{},"not",[2054,157778,157779],{},"取反",[140,157781,157783],{"className":32084,"code":157782,"language":32086,"meta":145,"style":145},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[48,157784,157785,157793,157802,157806,157821,157835],{"__ignoreMap":145},[149,157786,157787,157789,157791],{"class":151,"line":152},[149,157788,147982],{"class":155},[149,157790,166],{"class":325},[149,157792,89746],{"class":309},[149,157794,157795,157798,157800],{"class":151,"line":193},[149,157796,157797],{"class":155},"has_ticket ",[149,157799,166],{"class":325},[149,157801,155035],{"class":309},[149,157803,157804],{"class":151,"line":235},[149,157805,4119],{"emptyLinePlaceholder":1800},[149,157807,157808,157810,157812,157814,157816,157818],{"class":151,"line":340},[149,157809,32121],{"class":309},[149,157811,157204],{"class":155},[149,157813,3430],{"class":325},[149,157815,157721],{"class":309},[149,157817,122108],{"class":325},[149,157819,157820],{"class":155}," has_ticket)\n",[149,157822,157823,157825,157827,157829,157831,157833],{"class":151,"line":346},[149,157824,32121],{"class":309},[149,157826,157204],{"class":155},[149,157828,156],{"class":325},[149,157830,157721],{"class":309},[149,157832,115880],{"class":325},[149,157834,157820],{"class":155},[149,157836,157837,157839,157841,157843],{"class":151,"line":352},[149,157838,32121],{"class":309},[149,157840,319],{"class":155},[149,157842,157776],{"class":325},[149,157844,157820],{"class":155},[14,157846,157848],{"id":157847},"_28-字符串定义","2.8 字符串定义",[24,157850,157851],{},"三种常见写法：",[140,157853,157855],{"className":32084,"code":157854,"language":32086,"meta":145,"style":145},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[48,157856,157857,157867,157876,157886],{"__ignoreMap":145},[149,157858,157859,157862,157864],{"class":151,"line":152},[149,157860,157861],{"class":155},"name1 ",[149,157863,166],{"class":325},[149,157865,157866],{"class":169}," '小明'\n",[149,157868,157869,157872,157874],{"class":151,"line":193},[149,157870,157871],{"class":155},"name2 ",[149,157873,166],{"class":325},[149,157875,150789],{"class":169},[149,157877,157878,157881,157883],{"class":151,"line":235},[149,157879,157880],{"class":155},"text ",[149,157882,166],{"class":325},[149,157884,157885],{"class":169}," \"\"\"这是多行字符串\n",[149,157887,157888],{"class":151,"line":340},[149,157889,157890],{"class":169},"可以换行\"\"\"\n",[24,157892,157893],{},"字符串中包含引号：",[140,157895,157897],{"className":32084,"code":157896,"language":32086,"meta":145,"style":145},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[48,157898,157899,157909,157919],{"__ignoreMap":145},[149,157900,157901,157904,157906],{"class":151,"line":152},[149,157902,157903],{"class":155},"msg ",[149,157905,166],{"class":325},[149,157907,157908],{"class":169}," \"他说:'你好'\"\n",[149,157910,157911,157914,157916],{"class":151,"line":193},[149,157912,157913],{"class":155},"msg2 ",[149,157915,166],{"class":325},[149,157917,157918],{"class":169}," '他说:\"你好\"'\n",[149,157920,157921,157924,157926,157929,157932,157935,157937],{"class":151,"line":235},[149,157922,157923],{"class":155},"msg3 ",[149,157925,166],{"class":325},[149,157927,157928],{"class":169}," \"他说:",[149,157930,157931],{"class":309},"\\\"",[149,157933,157934],{"class":169},"你好",[149,157936,157931],{"class":309},[149,157938,26842],{"class":169},[24,157940,157941],{},"常见转义字符：",[2003,157943,157944,157953],{},[2006,157945,157946],{},[2009,157947,157948,157951],{},[2012,157949,157950],{},"写法",[2012,157952,102380],{},[2049,157954,157955,157965,157974,157984,157993],{},[2009,157956,157957,157962],{},[2054,157958,157959],{},[48,157960,157961],{},"\\n",[2054,157963,157964],{},"换行",[2009,157966,157967,157971],{},[2054,157968,157969],{},[48,157970,2959],{},[2054,157972,157973],{},"制表符",[2009,157975,157976,157981],{},[2054,157977,157978],{},[48,157979,157980],{},"\\\\",[2054,157982,157983],{},"反斜杠",[2009,157985,157986,157990],{},[2054,157987,157988],{},[48,157989,157931],{},[2054,157991,157992],{},"双引号",[2009,157994,157995,158000],{},[2054,157996,157997],{},[48,157998,157999],{},"\\'",[2054,158001,158002],{},"单引号",[14,158004,158006],{"id":158005},"_29-字符串拼接","2.9 字符串拼接",[140,158008,158010],{"className":32084,"code":158009,"language":32086,"meta":145,"style":145},"name = \"小明\"\nprint(\"你好，\" + name)\n",[48,158011,158012,158020],{"__ignoreMap":145},[149,158013,158014,158016,158018],{"class":151,"line":152},[149,158015,147972],{"class":155},[149,158017,166],{"class":325},[149,158019,150789],{"class":169},[149,158021,158022,158024,158026,158029,158031],{"class":151,"line":193},[149,158023,32121],{"class":309},[149,158025,319],{"class":155},[149,158027,158028],{"class":169},"\"你好，\"",[149,158030,47272],{"class":325},[149,158032,158033],{"class":155}," name)\n",[24,158035,158036],{},"字符串只能和字符串拼接：",[140,158038,158040],{"className":32084,"code":158039,"language":32086,"meta":145,"style":145},"age = 18\nprint(\"年龄:\" + str(age))\n",[48,158041,158042,158050],{"__ignoreMap":145},[149,158043,158044,158046,158048],{"class":151,"line":152},[149,158045,147982],{"class":155},[149,158047,166],{"class":325},[149,158049,147987],{"class":309},[149,158051,158052,158054,158056,158058,158060,158062],{"class":151,"line":193},[149,158053,32121],{"class":309},[149,158055,319],{"class":155},[149,158057,147953],{"class":169},[149,158059,47272],{"class":325},[149,158061,75601],{"class":309},[149,158063,158064],{"class":155},"(age))\n",[24,158066,158067],{},"更推荐使用格式化字符串。",[14,158069,158071],{"id":158070},"_210-字符串格式化","2.10 字符串格式化",[19,158073,158075],{"id":158074},"_2101-百分号格式化","2.10.1 百分号格式化",[140,158077,158079],{"className":32084,"code":158078,"language":32086,"meta":145,"style":145},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[48,158080,158081,158089,158097,158106,158110],{"__ignoreMap":145},[149,158082,158083,158085,158087],{"class":151,"line":152},[149,158084,147972],{"class":155},[149,158086,166],{"class":325},[149,158088,150789],{"class":169},[149,158090,158091,158093,158095],{"class":151,"line":193},[149,158092,147982],{"class":155},[149,158094,166],{"class":325},[149,158096,147987],{"class":309},[149,158098,158099,158101,158103],{"class":151,"line":235},[149,158100,156794],{"class":155},[149,158102,166],{"class":325},[149,158104,158105],{"class":309}," 95.5\n",[149,158107,158108],{"class":151,"line":340},[149,158109,4119],{"emptyLinePlaceholder":1800},[149,158111,158112,158114,158116,158119,158122,158125,158128,158131,158134,158136,158138],{"class":151,"line":346},[149,158113,32121],{"class":309},[149,158115,319],{"class":155},[149,158117,158118],{"class":169},"\"姓名:",[149,158120,158121],{"class":309},"%s",[149,158123,158124],{"class":169}," 年龄:",[149,158126,158127],{"class":309},"%d",[149,158129,158130],{"class":169}," 分数:",[149,158132,158133],{"class":309},"%.1f",[149,158135,2115],{"class":169},[149,158137,157517],{"class":325},[149,158139,158140],{"class":155}," (name, age, score))\n",[24,158142,158143],{},"常用占位符：",[2003,158145,158146,158155],{},[2006,158147,158148],{},[2009,158149,158150,158153],{},[2012,158151,158152],{},"占位符",[2012,158154,27578],{},[2049,158156,158157,158165,158173],{},[2009,158158,158159,158163],{},[2054,158160,158161],{},[48,158162,158121],{},[2054,158164,156660],{},[2009,158166,158167,158171],{},[2054,158168,158169],{},[48,158170,158127],{},[2054,158172,156638],{},[2009,158174,158175,158180],{},[2054,158176,158177],{},[48,158178,158179],{},"%f",[2054,158181,156649],{},[24,158183,158184],{},"精度控制：",[140,158186,158188],{"className":32084,"code":158187,"language":32086,"meta":145,"style":145},"price = 12.3456\nprint(\"%.2f\" % price)\n",[48,158189,158190,158199],{"__ignoreMap":145},[149,158191,158192,158194,158196],{"class":151,"line":152},[149,158193,148117],{"class":155},[149,158195,166],{"class":325},[149,158197,158198],{"class":309}," 12.3456\n",[149,158200,158201,158203,158205,158207,158210,158212,158214],{"class":151,"line":193},[149,158202,32121],{"class":309},[149,158204,319],{"class":155},[149,158206,2115],{"class":169},[149,158208,158209],{"class":309},"%.2f",[149,158211,2115],{"class":169},[149,158213,157517],{"class":325},[149,158215,158216],{"class":155}," price)\n",[19,158218,158220],{"id":158219},"_2102-format方法","2.10.2 format方法",[140,158222,158224],{"className":32084,"code":158223,"language":32086,"meta":145,"style":145},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[48,158225,158226,158234,158242,158246,158265,158285],{"__ignoreMap":145},[149,158227,158228,158230,158232],{"class":151,"line":152},[149,158229,147972],{"class":155},[149,158231,166],{"class":325},[149,158233,150789],{"class":169},[149,158235,158236,158238,158240],{"class":151,"line":193},[149,158237,147982],{"class":155},[149,158239,166],{"class":325},[149,158241,147987],{"class":309},[149,158243,158244],{"class":151,"line":235},[149,158245,4119],{"emptyLinePlaceholder":1800},[149,158247,158248,158250,158252,158254,158256,158258,158260,158262],{"class":151,"line":340},[149,158249,32121],{"class":309},[149,158251,319],{"class":155},[149,158253,158118],{"class":169},[149,158255,34165],{"class":309},[149,158257,158124],{"class":169},[149,158259,34165],{"class":309},[149,158261,2115],{"class":169},[149,158263,158264],{"class":155},".format(name, age))\n",[149,158266,158267,158269,158271,158273,158276,158278,158281,158283],{"class":151,"line":346},[149,158268,32121],{"class":309},[149,158270,319],{"class":155},[149,158272,158118],{"class":169},[149,158274,158275],{"class":309},"{0}",[149,158277,158124],{"class":169},[149,158279,158280],{"class":309},"{1}",[149,158282,2115],{"class":169},[149,158284,158264],{"class":155},[149,158286,158287,158289,158291,158293,158296,158298,158301,158303,158306,158308,158310,158313,158315,158317],{"class":151,"line":352},[149,158288,32121],{"class":309},[149,158290,319],{"class":155},[149,158292,158118],{"class":169},[149,158294,158295],{"class":309},"{name}",[149,158297,158124],{"class":169},[149,158299,158300],{"class":309},"{age}",[149,158302,2115],{"class":169},[149,158304,158305],{"class":155},".format(",[149,158307,81491],{"class":6932},[149,158309,166],{"class":325},[149,158311,158312],{"class":155},"name, ",[149,158314,71905],{"class":6932},[149,158316,166],{"class":325},[149,158318,158319],{"class":155},"age))\n",[19,158321,158323],{"id":158322},"_2103-f-string","2.10.3 f-string",[24,158325,158326],{},"推荐写法：",[140,158328,158330],{"className":32084,"code":158329,"language":32086,"meta":145,"style":145},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[48,158331,158332,158340,158348,158356,158360],{"__ignoreMap":145},[149,158333,158334,158336,158338],{"class":151,"line":152},[149,158335,147972],{"class":155},[149,158337,166],{"class":325},[149,158339,150789],{"class":169},[149,158341,158342,158344,158346],{"class":151,"line":193},[149,158343,147982],{"class":155},[149,158345,166],{"class":325},[149,158347,147987],{"class":309},[149,158349,158350,158352,158354],{"class":151,"line":235},[149,158351,156794],{"class":155},[149,158353,166],{"class":325},[149,158355,158105],{"class":309},[149,158357,158358],{"class":151,"line":340},[149,158359,4119],{"emptyLinePlaceholder":1800},[149,158361,158362,158364,158366,158368,158370,158372,158374,158376,158378,158380,158382,158384,158386,158388,158391,158394,158396,158398],{"class":151,"line":346},[149,158363,32121],{"class":309},[149,158365,319],{"class":155},[149,158367,1921],{"class":325},[149,158369,158118],{"class":169},[149,158371,2756],{"class":309},[149,158373,81491],{"class":155},[149,158375,2805],{"class":309},[149,158377,158124],{"class":169},[149,158379,2756],{"class":309},[149,158381,71905],{"class":155},[149,158383,2805],{"class":309},[149,158385,158130],{"class":169},[149,158387,2756],{"class":309},[149,158389,158390],{"class":155},"score",[149,158392,158393],{"class":325},":.1f",[149,158395,2805],{"class":309},[149,158397,2115],{"class":169},[149,158399,1878],{"class":155},[24,158401,158402],{},"表达式也可以放进去：",[140,158404,158406],{"className":32084,"code":158405,"language":32086,"meta":145,"style":145},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[48,158407,158408,158416,158424],{"__ignoreMap":145},[149,158409,158410,158412,158414],{"class":151,"line":152},[149,158411,148117],{"class":155},[149,158413,166],{"class":325},[149,158415,148122],{"class":309},[149,158417,158418,158420,158422],{"class":151,"line":193},[149,158419,148127],{"class":155},[149,158421,166],{"class":325},[149,158423,56122],{"class":309},[149,158425,158426,158428,158430,158432,158435,158437,158439,158441,158444,158446,158449],{"class":151,"line":235},[149,158427,32121],{"class":309},[149,158429,319],{"class":155},[149,158431,1921],{"class":325},[149,158433,158434],{"class":169},"\"总价:",[149,158436,2756],{"class":309},[149,158438,148117],{"class":155},[149,158440,2318],{"class":325},[149,158442,158443],{"class":155}," count",[149,158445,2805],{"class":309},[149,158447,158448],{"class":169},"元\"",[149,158450,1878],{"class":155},[14,158452,158454],{"id":158453},"_211-input输入","2.11 input输入",[24,158456,158457,158460],{},[48,158458,158459],{},"input()"," 会暂停程序，等待用户输入。",[140,158462,158464],{"className":32084,"code":158463,"language":32086,"meta":145,"style":145},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[48,158465,158466,158480],{"__ignoreMap":145},[149,158467,158468,158470,158472,158474,158476,158478],{"class":151,"line":152},[149,158469,147972],{"class":155},[149,158471,166],{"class":325},[149,158473,62296],{"class":309},[149,158475,319],{"class":155},[149,158477,153815],{"class":169},[149,158479,1878],{"class":155},[149,158481,158482,158484,158486,158488,158491,158493,158495,158497,158499],{"class":151,"line":193},[149,158483,32121],{"class":309},[149,158485,319],{"class":155},[149,158487,1921],{"class":325},[149,158489,158490],{"class":169},"\"你好，",[149,158492,2756],{"class":309},[149,158494,81491],{"class":155},[149,158496,2805],{"class":309},[149,158498,2115],{"class":169},[149,158500,1878],{"class":155},[24,158502,158503],{},"输入整数：",[140,158505,158507],{"className":32084,"code":158506,"language":32086,"meta":145,"style":145},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[48,158508,158509,158527],{"__ignoreMap":145},[149,158510,158511,158513,158515,158517,158519,158521,158523,158525],{"class":151,"line":152},[149,158512,147982],{"class":155},[149,158514,166],{"class":325},[149,158516,4101],{"class":309},[149,158518,319],{"class":155},[149,158520,504],{"class":309},[149,158522,319],{"class":155},[149,158524,153830],{"class":169},[149,158526,32203],{"class":155},[149,158528,158529,158531,158533,158535,158538,158540,158542,158544,158547,158549],{"class":151,"line":193},[149,158530,32121],{"class":309},[149,158532,319],{"class":155},[149,158534,1921],{"class":325},[149,158536,158537],{"class":169},"\"明年你",[149,158539,2756],{"class":309},[149,158541,147982],{"class":155},[149,158543,2344],{"class":325},[149,158545,158546],{"class":309}," 1}",[149,158548,150840],{"class":169},[149,158550,1878],{"class":155},[24,158552,158553],{},"输入小数：",[140,158555,158557],{"className":32084,"code":158556,"language":32086,"meta":145,"style":145},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[48,158558,158559,158578],{"__ignoreMap":145},[149,158560,158561,158563,158565,158567,158569,158571,158573,158576],{"class":151,"line":152},[149,158562,156767],{"class":155},[149,158564,166],{"class":325},[149,158566,111476],{"class":309},[149,158568,319],{"class":155},[149,158570,504],{"class":309},[149,158572,319],{"class":155},[149,158574,158575],{"class":169},"\"请输入身高:\"",[149,158577,32203],{"class":155},[149,158579,158580,158582,158584,158586,158589,158591,158593,158596,158598,158601],{"class":151,"line":193},[149,158581,32121],{"class":309},[149,158583,319],{"class":155},[149,158585,1921],{"class":325},[149,158587,158588],{"class":169},"\"身高:",[149,158590,2756],{"class":309},[149,158592,26690],{"class":155},[149,158594,158595],{"class":325},":.2f",[149,158597,2805],{"class":309},[149,158599,158600],{"class":169},"米\"",[149,158602,1878],{"class":155},[14,158604,158606],{"id":158605},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[24,158608,124971],{},[125,158610,158611,158614,158617,158620],{},[45,158612,158613],{},"输入商品单价。",[45,158615,158616],{},"输入购买数量。",[45,158618,158619],{},"输入折扣，例如 0.8 表示八折。",[45,158621,158622],{},"输出最终金额，保留两位小数。",[24,158624,11749],{},[140,158626,158628],{"className":32084,"code":158627,"language":32086,"meta":145,"style":145},"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",[48,158629,158630,158649,158668,158688,158692,158712,158716,158739,158760,158782],{"__ignoreMap":145},[149,158631,158632,158634,158636,158638,158640,158642,158644,158647],{"class":151,"line":152},[149,158633,148117],{"class":155},[149,158635,166],{"class":325},[149,158637,111476],{"class":309},[149,158639,319],{"class":155},[149,158641,504],{"class":309},[149,158643,319],{"class":155},[149,158645,158646],{"class":169},"\"请输入商品单价:\"",[149,158648,32203],{"class":155},[149,158650,158651,158653,158655,158657,158659,158661,158663,158666],{"class":151,"line":193},[149,158652,148127],{"class":155},[149,158654,166],{"class":325},[149,158656,4101],{"class":309},[149,158658,319],{"class":155},[149,158660,504],{"class":309},[149,158662,319],{"class":155},[149,158664,158665],{"class":169},"\"请输入购买数量:\"",[149,158667,32203],{"class":155},[149,158669,158670,158673,158675,158677,158679,158681,158683,158686],{"class":151,"line":235},[149,158671,158672],{"class":155},"discount ",[149,158674,166],{"class":325},[149,158676,111476],{"class":309},[149,158678,319],{"class":155},[149,158680,504],{"class":309},[149,158682,319],{"class":155},[149,158684,158685],{"class":169},"\"请输入折扣:\"",[149,158687,32203],{"class":155},[149,158689,158690],{"class":151,"line":340},[149,158691,4119],{"emptyLinePlaceholder":1800},[149,158693,158694,158697,158699,158702,158704,158707,158709],{"class":151,"line":346},[149,158695,158696],{"class":155},"total ",[149,158698,166],{"class":325},[149,158700,158701],{"class":155}," price ",[149,158703,2318],{"class":325},[149,158705,158706],{"class":155}," count ",[149,158708,2318],{"class":325},[149,158710,158711],{"class":155}," discount\n",[149,158713,158714],{"class":151,"line":352},[149,158715,4119],{"emptyLinePlaceholder":1800},[149,158717,158718,158720,158722,158724,158727,158729,158731,158733,158735,158737],{"class":151,"line":1021},[149,158719,32121],{"class":309},[149,158721,319],{"class":155},[149,158723,1921],{"class":325},[149,158725,158726],{"class":169},"\"商品单价:",[149,158728,2756],{"class":309},[149,158730,81496],{"class":155},[149,158732,158595],{"class":325},[149,158734,2805],{"class":309},[149,158736,2115],{"class":169},[149,158738,1878],{"class":155},[149,158740,158741,158743,158745,158747,158750,158752,158754,158756,158758],{"class":151,"line":1035},[149,158742,32121],{"class":309},[149,158744,319],{"class":155},[149,158746,1921],{"class":325},[149,158748,158749],{"class":169},"\"购买数量:",[149,158751,2756],{"class":309},[149,158753,86115],{"class":155},[149,158755,2805],{"class":309},[149,158757,2115],{"class":169},[149,158759,1878],{"class":155},[149,158761,158762,158764,158766,158768,158771,158773,158776,158778,158780],{"class":151,"line":1054},[149,158763,32121],{"class":309},[149,158765,319],{"class":155},[149,158767,1921],{"class":325},[149,158769,158770],{"class":169},"\"折扣:",[149,158772,2756],{"class":309},[149,158774,158775],{"class":155},"discount",[149,158777,2805],{"class":309},[149,158779,2115],{"class":169},[149,158781,1878],{"class":155},[149,158783,158784,158786,158788,158790,158793,158795,158798,158800,158802,158804],{"class":151,"line":1072},[149,158785,32121],{"class":309},[149,158787,319],{"class":155},[149,158789,1921],{"class":325},[149,158791,158792],{"class":169},"\"应付金额:",[149,158794,2756],{"class":309},[149,158796,158797],{"class":155},"total",[149,158799,158595],{"class":325},[149,158801,2805],{"class":309},[149,158803,158448],{"class":169},[149,158805,1878],{"class":155},[14,158807,158809],{"id":158808},"_213-易错点","2.13 易错点",[125,158811,158812,158817,158823,158831,158834],{},[45,158813,158814,158816],{},[48,158815,158459],{}," 的结果是字符串，做运算前要转换。",[45,158818,158819,158820,30091],{},"字符串拼接时，数字要先 ",[48,158821,158822],{},"str()",[45,158824,158825,158827,158828,158830],{},[48,158826,166],{}," 是赋值，",[48,158829,4667],{}," 是比较。",[45,158832,158833],{},"Python 没有自增自减运算符。",[45,158835,158836],{},"浮点数计算可能有精度误差：",[140,158838,158840],{"className":32084,"code":158839,"language":32086,"meta":145,"style":145},"print(0.1 + 0.2)\n",[48,158841,158842],{"__ignoreMap":145},[149,158843,158844,158846,158848,158850,158852,158855],{"class":151,"line":152},[149,158845,32121],{"class":309},[149,158847,319],{"class":155},[149,158849,87891],{"class":309},[149,158851,47272],{"class":325},[149,158853,158854],{"class":309}," 0.2",[149,158856,1878],{"class":155},[24,158858,158859,158860,158863],{},"金额计算如果要求严格，可以后续学习 ",[48,158861,158862],{},"decimal"," 模块。",[14,158865,158867],{"id":158866},"_214-本章练习","2.14 本章练习",[125,158869,158870,158873,158876,158879,158882],{},[45,158871,158872],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[45,158874,158875],{},"输入圆的半径，计算面积，保留两位小数。",[45,158877,158878],{},"输入工资和奖金，计算总收入。",[45,158880,158881],{},"输入摄氏温度，转换为华氏温度。",[45,158883,158884],{},"写一个 BMI 计算程序：",[140,158886,158889],{"className":158887,"code":158888,"language":1655,"meta":145},[1653],"BMI = 体重kg \u002F 身高m ** 2\n",[48,158890,158888],{"__ignoreMap":145},[1783,158892,158893],{},"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":145,"searchDepth":193,"depth":193,"links":158895},[158896,158897,158898,158899,158900,158901,158902,158908,158909,158910,158915,158916,158917,158918],{"id":156457,"depth":193,"text":156458},{"id":156566,"depth":193,"text":156567},{"id":156737,"depth":193,"text":156738},{"id":156814,"depth":193,"text":156815},{"id":52437,"depth":193,"text":52438},{"id":157120,"depth":193,"text":157121},{"id":157346,"depth":193,"text":157347,"children":158903},[158904,158905,158906,158907],{"id":157350,"depth":235,"text":157351},{"id":157544,"depth":235,"text":157545},{"id":157632,"depth":235,"text":157633},{"id":157738,"depth":235,"text":157739},{"id":157847,"depth":193,"text":157848},{"id":158005,"depth":193,"text":158006},{"id":158070,"depth":193,"text":158071,"children":158911},[158912,158913,158914],{"id":158074,"depth":235,"text":158075},{"id":158219,"depth":235,"text":158220},{"id":158322,"depth":235,"text":158323},{"id":158453,"depth":193,"text":158454},{"id":158605,"depth":193,"text":158606},{"id":158808,"depth":193,"text":158809},{"id":158866,"depth":193,"text":158867},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156449,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158925,"title":158926,"body":158927,"description":1797,"extension":1798,"meta":160563,"navigation":1800,"path":160564,"seo":160565,"stem":160566,"__hash__":160567},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158928,"toc":160544},[158929,158932,158936,158939,158954,158957,158985,158989,159039,159041,159057,159060,159086,159089,159093,159160,159163,159179,159183,159186,159304,159307,159314,159363,159369,159373,159376,159489,159492,159496,159500,159503,159553,159557,159560,159610,159614,159617,159655,159659,159662,159708,159711,159746,159750,159755,159758,159804,159806,159873,159877,159883,159994,160003,160007,160009,160020,160022,160188,160192,160194,160208,160210,160424,160428,160447,160464,160467,160513,160517,160541],[10,158930,158926],{"id":158931},"_3-判断语句",[14,158933,158935],{"id":158934},"_31-布尔值","3.1 布尔值",[24,158937,158938],{},"判断语句依赖布尔值：",[140,158940,158942],{"className":32084,"code":158941,"language":32086,"meta":145,"style":145},"True\nFalse\n",[48,158943,158944,158949],{"__ignoreMap":145},[149,158945,158946],{"class":151,"line":152},[149,158947,158948],{"class":309},"True\n",[149,158950,158951],{"class":151,"line":193},[149,158952,158953],{"class":309},"False\n",[24,158955,158956],{},"比较表达式会产生布尔值：",[140,158958,158960],{"className":32084,"code":158959,"language":32086,"meta":145,"style":145},"age = 18\nprint(age >= 18)  # True\n",[48,158961,158962,158970],{"__ignoreMap":145},[149,158963,158964,158966,158968],{"class":151,"line":152},[149,158965,147982],{"class":155},[149,158967,166],{"class":325},[149,158969,147987],{"class":309},[149,158971,158972,158974,158976,158978,158980,158982],{"class":151,"line":193},[149,158973,32121],{"class":309},[149,158975,157204],{"class":155},[149,158977,3430],{"class":325},[149,158979,157721],{"class":309},[149,158981,47514],{"class":155},[149,158983,158984],{"class":295},"# True\n",[14,158986,158988],{"id":158987},"_32-if基础语法","3.2 if基础语法",[140,158990,158992],{"className":32084,"code":158991,"language":32086,"meta":145,"style":145},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[48,158993,158994,159012,159016,159028],{"__ignoreMap":145},[149,158995,158996,158998,159000,159002,159004,159006,159008,159010],{"class":151,"line":152},[149,158997,147982],{"class":155},[149,158999,166],{"class":325},[149,159001,4101],{"class":309},[149,159003,319],{"class":155},[149,159005,504],{"class":309},[149,159007,319],{"class":155},[149,159009,153830],{"class":169},[149,159011,32203],{"class":155},[149,159013,159014],{"class":151,"line":193},[149,159015,4119],{"emptyLinePlaceholder":1800},[149,159017,159018,159020,159022,159024,159026],{"class":151,"line":235},[149,159019,3255],{"class":325},[149,159021,17417],{"class":155},[149,159023,3430],{"class":325},[149,159025,157721],{"class":309},[149,159027,5457],{"class":155},[149,159029,159030,159032,159034,159037],{"class":151,"line":340},[149,159031,33005],{"class":309},[149,159033,319],{"class":155},[149,159035,159036],{"class":169},"\"可以进入网吧\"",[149,159038,1878],{"class":155},[24,159040,866],{},[125,159042,159043,159048,159051,159054],{},[45,159044,159045,159047],{},[48,159046,3255],{}," 后面是条件表达式。",[45,159049,159050],{},"条件后面必须写冒号。",[45,159052,159053],{},"条件成立时执行缩进代码块。",[45,159055,159056],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[24,159058,159059],{},"错误示例：",[140,159061,159063],{"className":32084,"code":159062,"language":32086,"meta":145,"style":145},"if age >= 18\n    print(\"可以进入\")\n",[48,159064,159065,159075],{"__ignoreMap":145},[149,159066,159067,159069,159071,159073],{"class":151,"line":152},[149,159068,3255],{"class":325},[149,159070,17417],{"class":155},[149,159072,3430],{"class":325},[149,159074,147987],{"class":309},[149,159076,159077,159079,159081,159084],{"class":151,"line":193},[149,159078,33005],{"class":309},[149,159080,319],{"class":155},[149,159082,159083],{"class":169},"\"可以进入\"",[149,159085,1878],{"class":155},[24,159087,159088],{},"缺少冒号。",[14,159090,159092],{"id":159091},"_33-if-else","3.3 if else",[140,159094,159096],{"className":32084,"code":159095,"language":32086,"meta":145,"style":145},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[48,159097,159098,159116,159120,159132,159143,159149],{"__ignoreMap":145},[149,159099,159100,159102,159104,159106,159108,159110,159112,159114],{"class":151,"line":152},[149,159101,147982],{"class":155},[149,159103,166],{"class":325},[149,159105,4101],{"class":309},[149,159107,319],{"class":155},[149,159109,504],{"class":309},[149,159111,319],{"class":155},[149,159113,153830],{"class":169},[149,159115,32203],{"class":155},[149,159117,159118],{"class":151,"line":193},[149,159119,4119],{"emptyLinePlaceholder":1800},[149,159121,159122,159124,159126,159128,159130],{"class":151,"line":235},[149,159123,3255],{"class":325},[149,159125,17417],{"class":155},[149,159127,3430],{"class":325},[149,159129,157721],{"class":309},[149,159131,5457],{"class":155},[149,159133,159134,159136,159138,159141],{"class":151,"line":340},[149,159135,33005],{"class":309},[149,159137,319],{"class":155},[149,159139,159140],{"class":169},"\"成年人\"",[149,159142,1878],{"class":155},[149,159144,159145,159147],{"class":151,"line":346},[149,159146,3421],{"class":325},[149,159148,5457],{"class":155},[149,159150,159151,159153,159155,159158],{"class":151,"line":352},[149,159152,33005],{"class":309},[149,159154,319],{"class":155},[149,159156,159157],{"class":169},"\"未成年人\"",[149,159159,1878],{"class":155},[24,159161,159162],{},"执行逻辑：",[125,159164,159165,159171,159176],{},[45,159166,159167,159168,159170],{},"条件成立，执行 ",[48,159169,3255],{}," 代码块。",[45,159172,159173,159174,159170],{},"条件不成立，执行 ",[48,159175,3421],{},[45,159177,159178],{},"两个代码块只会执行其中一个。",[14,159180,159182],{"id":159181},"_34-if-elif-else","3.4 if elif else",[24,159184,159185],{},"多条件判断：",[140,159187,159189],{"className":32084,"code":159188,"language":32086,"meta":145,"style":145},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[48,159190,159191,159209,159213,159227,159238,159252,159263,159276,159287,159293],{"__ignoreMap":145},[149,159192,159193,159195,159197,159199,159201,159203,159205,159207],{"class":151,"line":152},[149,159194,156794],{"class":155},[149,159196,166],{"class":325},[149,159198,4101],{"class":309},[149,159200,319],{"class":155},[149,159202,504],{"class":309},[149,159204,319],{"class":155},[149,159206,153845],{"class":169},[149,159208,32203],{"class":155},[149,159210,159211],{"class":151,"line":193},[149,159212,4119],{"emptyLinePlaceholder":1800},[149,159214,159215,159217,159220,159222,159225],{"class":151,"line":235},[149,159216,3255],{"class":325},[149,159218,159219],{"class":155}," score ",[149,159221,3430],{"class":325},[149,159223,159224],{"class":309}," 90",[149,159226,5457],{"class":155},[149,159228,159229,159231,159233,159236],{"class":151,"line":340},[149,159230,33005],{"class":309},[149,159232,319],{"class":155},[149,159234,159235],{"class":169},"\"优秀\"",[149,159237,1878],{"class":155},[149,159239,159240,159243,159245,159247,159250],{"class":151,"line":346},[149,159241,159242],{"class":325},"elif",[149,159244,159219],{"class":155},[149,159246,3430],{"class":325},[149,159248,159249],{"class":309}," 80",[149,159251,5457],{"class":155},[149,159253,159254,159256,159258,159261],{"class":151,"line":352},[149,159255,33005],{"class":309},[149,159257,319],{"class":155},[149,159259,159260],{"class":169},"\"良好\"",[149,159262,1878],{"class":155},[149,159264,159265,159267,159269,159271,159274],{"class":151,"line":1021},[149,159266,159242],{"class":325},[149,159268,159219],{"class":155},[149,159270,3430],{"class":325},[149,159272,159273],{"class":309}," 60",[149,159275,5457],{"class":155},[149,159277,159278,159280,159282,159285],{"class":151,"line":1035},[149,159279,33005],{"class":309},[149,159281,319],{"class":155},[149,159283,159284],{"class":169},"\"及格\"",[149,159286,1878],{"class":155},[149,159288,159289,159291],{"class":151,"line":1054},[149,159290,3421],{"class":325},[149,159292,5457],{"class":155},[149,159294,159295,159297,159299,159302],{"class":151,"line":1072},[149,159296,33005],{"class":309},[149,159298,319],{"class":155},[149,159300,159301],{"class":169},"\"不及格\"",[149,159303,1878],{"class":155},[24,159305,159306],{},"注意判断顺序很重要。",[24,159308,159309,159310,159313],{},"如果把 ",[48,159311,159312],{},"score >= 60"," 放在最前面：",[140,159315,159317],{"className":32084,"code":159316,"language":32086,"meta":145,"style":145},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[48,159318,159319,159331,159341,159353],{"__ignoreMap":145},[149,159320,159321,159323,159325,159327,159329],{"class":151,"line":152},[149,159322,3255],{"class":325},[149,159324,159219],{"class":155},[149,159326,3430],{"class":325},[149,159328,159273],{"class":309},[149,159330,5457],{"class":155},[149,159332,159333,159335,159337,159339],{"class":151,"line":193},[149,159334,33005],{"class":309},[149,159336,319],{"class":155},[149,159338,159284],{"class":169},[149,159340,1878],{"class":155},[149,159342,159343,159345,159347,159349,159351],{"class":151,"line":235},[149,159344,159242],{"class":325},[149,159346,159219],{"class":155},[149,159348,3430],{"class":325},[149,159350,159224],{"class":309},[149,159352,5457],{"class":155},[149,159354,159355,159357,159359,159361],{"class":151,"line":340},[149,159356,33005],{"class":309},[149,159358,319],{"class":155},[149,159360,159235],{"class":169},[149,159362,1878],{"class":155},[24,159364,159365,159366,159368],{},"成绩 95 会先满足 ",[48,159367,159312],{},"，后面的优秀分支就不会执行。",[14,159370,159372],{"id":159371},"_35-判断语句嵌套","3.5 判断语句嵌套",[24,159374,159375],{},"嵌套判断就是在一个判断内部再写判断。",[140,159377,159379],{"className":32084,"code":159378,"language":32086,"meta":145,"style":145},"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",[48,159380,159381,159399,159414,159418,159430,159444,159454,159461,159472,159478],{"__ignoreMap":145},[149,159382,159383,159385,159387,159389,159391,159393,159395,159397],{"class":151,"line":152},[149,159384,147982],{"class":155},[149,159386,166],{"class":325},[149,159388,4101],{"class":309},[149,159390,319],{"class":155},[149,159392,504],{"class":309},[149,159394,319],{"class":155},[149,159396,153830],{"class":169},[149,159398,32203],{"class":155},[149,159400,159401,159403,159405,159407,159409,159412],{"class":151,"line":193},[149,159402,157797],{"class":155},[149,159404,166],{"class":325},[149,159406,62296],{"class":309},[149,159408,319],{"class":155},[149,159410,159411],{"class":169},"\"是否有票(y\u002Fn):\"",[149,159413,1878],{"class":155},[149,159415,159416],{"class":151,"line":235},[149,159417,4119],{"emptyLinePlaceholder":1800},[149,159419,159420,159422,159424,159426,159428],{"class":151,"line":340},[149,159421,3255],{"class":325},[149,159423,17417],{"class":155},[149,159425,3430],{"class":325},[149,159427,157721],{"class":309},[149,159429,5457],{"class":155},[149,159431,159432,159434,159437,159439,159442],{"class":151,"line":346},[149,159433,4819],{"class":325},[149,159435,159436],{"class":155}," has_ticket ",[149,159438,4667],{"class":325},[149,159440,159441],{"class":169}," \"y\"",[149,159443,5457],{"class":155},[149,159445,159446,159448,159450,159452],{"class":151,"line":352},[149,159447,34157],{"class":309},[149,159449,319],{"class":155},[149,159451,159083],{"class":169},[149,159453,1878],{"class":155},[149,159455,159456,159459],{"class":151,"line":1021},[149,159457,159458],{"class":325},"    else",[149,159460,5457],{"class":155},[149,159462,159463,159465,159467,159470],{"class":151,"line":1035},[149,159464,34157],{"class":309},[149,159466,319],{"class":155},[149,159468,159469],{"class":169},"\"请先买票\"",[149,159471,1878],{"class":155},[149,159473,159474,159476],{"class":151,"line":1054},[149,159475,3421],{"class":325},[149,159477,5457],{"class":155},[149,159479,159480,159482,159484,159487],{"class":151,"line":1072},[149,159481,33005],{"class":309},[149,159483,319],{"class":155},[149,159485,159486],{"class":169},"\"未成年人禁止进入\"",[149,159488,1878],{"class":155},[24,159490,159491],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159493,159495],{"id":159494},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[19,159497,159499],{"id":159498},"_361-and","3.6.1 and",[24,159501,159502],{},"两个条件都成立才成立。",[140,159504,159506],{"className":32084,"code":159505,"language":32086,"meta":145,"style":145},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[48,159507,159508,159516,159524,159528,159543],{"__ignoreMap":145},[149,159509,159510,159512,159514],{"class":151,"line":152},[149,159511,147982],{"class":155},[149,159513,166],{"class":325},[149,159515,89746],{"class":309},[149,159517,159518,159520,159522],{"class":151,"line":193},[149,159519,157797],{"class":155},[149,159521,166],{"class":325},[149,159523,155035],{"class":309},[149,159525,159526],{"class":151,"line":235},[149,159527,4119],{"emptyLinePlaceholder":1800},[149,159529,159530,159532,159534,159536,159538,159540],{"class":151,"line":340},[149,159531,3255],{"class":325},[149,159533,17417],{"class":155},[149,159535,3430],{"class":325},[149,159537,157721],{"class":309},[149,159539,122108],{"class":325},[149,159541,159542],{"class":155}," has_ticket:\n",[149,159544,159545,159547,159549,159551],{"class":151,"line":346},[149,159546,33005],{"class":309},[149,159548,319],{"class":155},[149,159550,159083],{"class":169},[149,159552,1878],{"class":155},[19,159554,159556],{"id":159555},"_362-or","3.6.2 or",[24,159558,159559],{},"只要一个条件成立就成立。",[140,159561,159563],{"className":32084,"code":159562,"language":32086,"meta":145,"style":145},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[48,159564,159565,159574,159583,159587,159599],{"__ignoreMap":145},[149,159566,159567,159570,159572],{"class":151,"line":152},[149,159568,159569],{"class":155},"is_vip ",[149,159571,166],{"class":325},[149,159573,127486],{"class":309},[149,159575,159576,159579,159581],{"class":151,"line":193},[149,159577,159578],{"class":155},"coupon ",[149,159580,166],{"class":325},[149,159582,155035],{"class":309},[149,159584,159585],{"class":151,"line":235},[149,159586,4119],{"emptyLinePlaceholder":1800},[149,159588,159589,159591,159594,159596],{"class":151,"line":340},[149,159590,3255],{"class":325},[149,159592,159593],{"class":155}," is_vip ",[149,159595,116769],{"class":325},[149,159597,159598],{"class":155}," coupon:\n",[149,159600,159601,159603,159605,159608],{"class":151,"line":346},[149,159602,33005],{"class":309},[149,159604,319],{"class":155},[149,159606,159607],{"class":169},"\"可以享受优惠\"",[149,159609,1878],{"class":155},[19,159611,159613],{"id":159612},"_363-not","3.6.3 not",[24,159615,159616],{},"取反。",[140,159618,159620],{"className":32084,"code":159619,"language":32086,"meta":145,"style":145},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[48,159621,159622,159631,159635,159644],{"__ignoreMap":145},[149,159623,159624,159627,159629],{"class":151,"line":152},[149,159625,159626],{"class":155},"is_closed ",[149,159628,166],{"class":325},[149,159630,127486],{"class":309},[149,159632,159633],{"class":151,"line":193},[149,159634,4119],{"emptyLinePlaceholder":1800},[149,159636,159637,159639,159641],{"class":151,"line":235},[149,159638,3255],{"class":325},[149,159640,40636],{"class":325},[149,159642,159643],{"class":155}," is_closed:\n",[149,159645,159646,159648,159650,159653],{"class":151,"line":340},[149,159647,33005],{"class":309},[149,159649,319],{"class":155},[149,159651,159652],{"class":169},"\"店铺营业中\"",[149,159654,1878],{"class":155},[14,159656,159658],{"id":159657},"_37-链式比较","3.7 链式比较",[24,159660,159661],{},"Python 支持链式比较：",[140,159663,159665],{"className":32084,"code":159664,"language":32086,"meta":145,"style":145},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[48,159666,159667,159676,159680,159697],{"__ignoreMap":145},[149,159668,159669,159671,159673],{"class":151,"line":152},[149,159670,156794],{"class":155},[149,159672,166],{"class":325},[149,159674,159675],{"class":309}," 85\n",[149,159677,159678],{"class":151,"line":193},[149,159679,4119],{"emptyLinePlaceholder":1800},[149,159681,159682,159684,159686,159689,159691,159693,159695],{"class":151,"line":235},[149,159683,3255],{"class":325},[149,159685,5811],{"class":309},[149,159687,159688],{"class":325}," \u003C=",[149,159690,159219],{"class":155},[149,159692,3311],{"class":325},[149,159694,7470],{"class":309},[149,159696,5457],{"class":155},[149,159698,159699,159701,159703,159706],{"class":151,"line":340},[149,159700,33005],{"class":309},[149,159702,319],{"class":155},[149,159704,159705],{"class":169},"\"成绩合法\"",[149,159707,1878],{"class":155},[24,159709,159710],{},"等价于：",[140,159712,159714],{"className":32084,"code":159713,"language":32086,"meta":145,"style":145},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[48,159715,159716,159736],{"__ignoreMap":145},[149,159717,159718,159720,159722,159724,159726,159728,159730,159732,159734],{"class":151,"line":152},[149,159719,3255],{"class":325},[149,159721,159219],{"class":155},[149,159723,3430],{"class":325},[149,159725,5811],{"class":309},[149,159727,122108],{"class":325},[149,159729,159219],{"class":155},[149,159731,3311],{"class":325},[149,159733,7470],{"class":309},[149,159735,5457],{"class":155},[149,159737,159738,159740,159742,159744],{"class":151,"line":193},[149,159739,33005],{"class":309},[149,159741,319],{"class":155},[149,159743,159705],{"class":169},[149,159745,1878],{"class":155},[14,159747,159749],{"id":159748},"_38-真值和假值","3.8 真值和假值",[24,159751,118146,159752,159754],{},[48,159753,3255],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[24,159756,159757],{},"假值：",[140,159759,159761],{"className":32084,"code":159760,"language":32086,"meta":145,"style":145},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[48,159762,159763,159767,159772,159776,159780,159785,159789,159793,159798],{"__ignoreMap":145},[149,159764,159765],{"class":151,"line":152},[149,159766,158953],{"class":309},[149,159768,159769],{"class":151,"line":193},[149,159770,159771],{"class":309},"None\n",[149,159773,159774],{"class":151,"line":235},[149,159775,4803],{"class":309},[149,159777,159778],{"class":151,"line":340},[149,159779,34048],{"class":309},[149,159781,159782],{"class":151,"line":346},[149,159783,159784],{"class":169},"\"\"\n",[149,159786,159787],{"class":151,"line":352},[149,159788,34063],{"class":155},[149,159790,159791],{"class":151,"line":1021},[149,159792,3695],{"class":155},[149,159794,159795],{"class":151,"line":1035},[149,159796,159797],{"class":155},"{}\n",[149,159799,159800,159802],{"class":151,"line":1054},[149,159801,156726],{"class":309},[149,159803,3695],{"class":155},[24,159805,16846],{},[140,159807,159809],{"className":32084,"code":159808,"language":32086,"meta":145,"style":145},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[48,159810,159811,159825,159829,159836,159856,159862],{"__ignoreMap":145},[149,159812,159813,159815,159817,159819,159821,159823],{"class":151,"line":152},[149,159814,147972],{"class":155},[149,159816,166],{"class":325},[149,159818,62296],{"class":309},[149,159820,319],{"class":155},[149,159822,153815],{"class":169},[149,159824,1878],{"class":155},[149,159826,159827],{"class":151,"line":193},[149,159828,4119],{"emptyLinePlaceholder":1800},[149,159830,159831,159833],{"class":151,"line":235},[149,159832,3255],{"class":325},[149,159834,159835],{"class":155}," name:\n",[149,159837,159838,159840,159842,159844,159846,159848,159850,159852,159854],{"class":151,"line":340},[149,159839,33005],{"class":309},[149,159841,319],{"class":155},[149,159843,1921],{"class":325},[149,159845,158490],{"class":169},[149,159847,2756],{"class":309},[149,159849,81491],{"class":155},[149,159851,2805],{"class":309},[149,159853,2115],{"class":169},[149,159855,1878],{"class":155},[149,159857,159858,159860],{"class":151,"line":346},[149,159859,3421],{"class":325},[149,159861,5457],{"class":155},[149,159863,159864,159866,159868,159871],{"class":151,"line":352},[149,159865,33005],{"class":309},[149,159867,319],{"class":155},[149,159869,159870],{"class":169},"\"姓名不能为空\"",[149,159872,1878],{"class":155},[14,159874,159876],{"id":159875},"_39-match语句","3.9 match语句",[24,159878,159879,159880,159882],{},"Python 3.10 开始支持 ",[48,159881,72947],{},"。它适合处理固定选项。",[140,159884,159886],{"className":32084,"code":159885,"language":32086,"meta":145,"style":145},"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",[48,159887,159888,159904,159908,159915,159925,159936,159945,159956,159965,159976,159983],{"__ignoreMap":145},[149,159889,159890,159893,159895,159897,159899,159902],{"class":151,"line":152},[149,159891,159892],{"class":155},"command ",[149,159894,166],{"class":325},[149,159896,62296],{"class":309},[149,159898,319],{"class":155},[149,159900,159901],{"class":169},"\"请输入命令:\"",[149,159903,1878],{"class":155},[149,159905,159906],{"class":151,"line":193},[149,159907,4119],{"emptyLinePlaceholder":1800},[149,159909,159910,159912],{"class":151,"line":235},[149,159911,72947],{"class":325},[149,159913,159914],{"class":155}," command:\n",[149,159916,159917,159920,159923],{"class":151,"line":340},[149,159918,159919],{"class":325},"    case",[149,159921,159922],{"class":169}," \"start\"",[149,159924,5457],{"class":155},[149,159926,159927,159929,159931,159934],{"class":151,"line":346},[149,159928,34157],{"class":309},[149,159930,319],{"class":155},[149,159932,159933],{"class":169},"\"启动\"",[149,159935,1878],{"class":155},[149,159937,159938,159940,159943],{"class":151,"line":352},[149,159939,159919],{"class":325},[149,159941,159942],{"class":169}," \"stop\"",[149,159944,5457],{"class":155},[149,159946,159947,159949,159951,159954],{"class":151,"line":1021},[149,159948,34157],{"class":309},[149,159950,319],{"class":155},[149,159952,159953],{"class":169},"\"停止\"",[149,159955,1878],{"class":155},[149,159957,159958,159960,159963],{"class":151,"line":1035},[149,159959,159919],{"class":325},[149,159961,159962],{"class":169}," \"restart\"",[149,159964,5457],{"class":155},[149,159966,159967,159969,159971,159974],{"class":151,"line":1054},[149,159968,34157],{"class":309},[149,159970,319],{"class":155},[149,159972,159973],{"class":169},"\"重启\"",[149,159975,1878],{"class":155},[149,159977,159978,159980],{"class":151,"line":1072},[149,159979,159919],{"class":325},[149,159981,159982],{"class":155}," _:\n",[149,159984,159985,159987,159989,159992],{"class":151,"line":1090},[149,159986,34157],{"class":309},[149,159988,319],{"class":155},[149,159990,159991],{"class":169},"\"未知命令\"",[149,159993,1878],{"class":155},[24,159995,159996,159997,159999,160000,160002],{},"入门阶段掌握 ",[48,159998,156094],{}," 更重要，",[48,160001,72947],{}," 可以作为补充。",[14,160004,160006],{"id":160005},"_310-小案例成绩等级","3.10 小案例：成绩等级",[24,160008,124971],{},[125,160010,160011,160014,160017],{},[45,160012,160013],{},"输入成绩。",[45,160015,160016],{},"判断成绩是否合法。",[45,160018,160019],{},"输出等级。",[24,160021,11749],{},[140,160023,160025],{"className":32084,"code":160024,"language":32086,"meta":145,"style":145},"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",[48,160026,160027,160045,160049,160067,160078,160090,160101,160113,160124,160137,160148,160160,160171,160177],{"__ignoreMap":145},[149,160028,160029,160031,160033,160035,160037,160039,160041,160043],{"class":151,"line":152},[149,160030,156794],{"class":155},[149,160032,166],{"class":325},[149,160034,111476],{"class":309},[149,160036,319],{"class":155},[149,160038,504],{"class":309},[149,160040,319],{"class":155},[149,160042,153845],{"class":169},[149,160044,32203],{"class":155},[149,160046,160047],{"class":151,"line":193},[149,160048,4119],{"emptyLinePlaceholder":1800},[149,160050,160051,160053,160055,160057,160059,160061,160063,160065],{"class":151,"line":235},[149,160052,3255],{"class":325},[149,160054,40636],{"class":325},[149,160056,5811],{"class":309},[149,160058,159688],{"class":325},[149,160060,159219],{"class":155},[149,160062,3311],{"class":325},[149,160064,7470],{"class":309},[149,160066,5457],{"class":155},[149,160068,160069,160071,160073,160076],{"class":151,"line":340},[149,160070,33005],{"class":309},[149,160072,319],{"class":155},[149,160074,160075],{"class":169},"\"成绩不合法\"",[149,160077,1878],{"class":155},[149,160079,160080,160082,160084,160086,160088],{"class":151,"line":346},[149,160081,159242],{"class":325},[149,160083,159219],{"class":155},[149,160085,3430],{"class":325},[149,160087,159224],{"class":309},[149,160089,5457],{"class":155},[149,160091,160092,160094,160096,160099],{"class":151,"line":352},[149,160093,33005],{"class":309},[149,160095,319],{"class":155},[149,160097,160098],{"class":169},"\"等级:A\"",[149,160100,1878],{"class":155},[149,160102,160103,160105,160107,160109,160111],{"class":151,"line":1021},[149,160104,159242],{"class":325},[149,160106,159219],{"class":155},[149,160108,3430],{"class":325},[149,160110,159249],{"class":309},[149,160112,5457],{"class":155},[149,160114,160115,160117,160119,160122],{"class":151,"line":1035},[149,160116,33005],{"class":309},[149,160118,319],{"class":155},[149,160120,160121],{"class":169},"\"等级:B\"",[149,160123,1878],{"class":155},[149,160125,160126,160128,160130,160132,160135],{"class":151,"line":1054},[149,160127,159242],{"class":325},[149,160129,159219],{"class":155},[149,160131,3430],{"class":325},[149,160133,160134],{"class":309}," 70",[149,160136,5457],{"class":155},[149,160138,160139,160141,160143,160146],{"class":151,"line":1072},[149,160140,33005],{"class":309},[149,160142,319],{"class":155},[149,160144,160145],{"class":169},"\"等级:C\"",[149,160147,1878],{"class":155},[149,160149,160150,160152,160154,160156,160158],{"class":151,"line":1090},[149,160151,159242],{"class":325},[149,160153,159219],{"class":155},[149,160155,3430],{"class":325},[149,160157,159273],{"class":309},[149,160159,5457],{"class":155},[149,160161,160162,160164,160166,160169],{"class":151,"line":1633},[149,160163,33005],{"class":309},[149,160165,319],{"class":155},[149,160167,160168],{"class":169},"\"等级:D\"",[149,160170,1878],{"class":155},[149,160172,160173,160175],{"class":151,"line":1644},[149,160174,3421],{"class":325},[149,160176,5457],{"class":155},[149,160178,160179,160181,160183,160186],{"class":151,"line":3348},[149,160180,33005],{"class":309},[149,160182,319],{"class":155},[149,160184,160185],{"class":169},"\"等级:E\"",[149,160187,1878],{"class":155},[14,160189,160191],{"id":160190},"_311-小案例会员折扣","3.11 小案例：会员折扣",[24,160193,124971],{},[125,160195,160196,160199,160202,160205],{},[45,160197,160198],{},"输入消费金额。",[45,160200,160201],{},"输入会员等级，普通、银卡、金卡。",[45,160203,160204],{},"普通不打折，银卡 9 折，金卡 8 折。",[45,160206,160207],{},"满 500 再减 50。",[24,160209,11749],{},[140,160211,160213],{"className":32084,"code":160212,"language":32086,"meta":145,"style":145},"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",[48,160214,160215,160235,160251,160255,160263,160267,160281,160291,160304,160313,160326,160334,160340,160351,160355,160369,160373,160387,160397,160401],{"__ignoreMap":145},[149,160216,160217,160220,160222,160224,160226,160228,160230,160233],{"class":151,"line":152},[149,160218,160219],{"class":155},"amount ",[149,160221,166],{"class":325},[149,160223,111476],{"class":309},[149,160225,319],{"class":155},[149,160227,504],{"class":309},[149,160229,319],{"class":155},[149,160231,160232],{"class":169},"\"请输入消费金额:\"",[149,160234,32203],{"class":155},[149,160236,160237,160240,160242,160244,160246,160249],{"class":151,"line":193},[149,160238,160239],{"class":155},"level ",[149,160241,166],{"class":325},[149,160243,62296],{"class":309},[149,160245,319],{"class":155},[149,160247,160248],{"class":169},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[149,160250,1878],{"class":155},[149,160252,160253],{"class":151,"line":235},[149,160254,4119],{"emptyLinePlaceholder":1800},[149,160256,160257,160259,160261],{"class":151,"line":340},[149,160258,158672],{"class":155},[149,160260,166],{"class":325},[149,160262,57391],{"class":309},[149,160264,160265],{"class":151,"line":346},[149,160266,4119],{"emptyLinePlaceholder":1800},[149,160268,160269,160271,160274,160276,160279],{"class":151,"line":352},[149,160270,3255],{"class":325},[149,160272,160273],{"class":155}," level ",[149,160275,4667],{"class":325},[149,160277,160278],{"class":169}," \"银卡\"",[149,160280,5457],{"class":155},[149,160282,160283,160286,160288],{"class":151,"line":1021},[149,160284,160285],{"class":155},"    discount ",[149,160287,166],{"class":325},[149,160289,160290],{"class":309}," 0.9\n",[149,160292,160293,160295,160297,160299,160302],{"class":151,"line":1035},[149,160294,159242],{"class":325},[149,160296,160273],{"class":155},[149,160298,4667],{"class":325},[149,160300,160301],{"class":169}," \"金卡\"",[149,160303,5457],{"class":155},[149,160305,160306,160308,160310],{"class":151,"line":1054},[149,160307,160285],{"class":155},[149,160309,166],{"class":325},[149,160311,160312],{"class":309}," 0.8\n",[149,160314,160315,160317,160319,160321,160324],{"class":151,"line":1072},[149,160316,159242],{"class":325},[149,160318,160273],{"class":155},[149,160320,4667],{"class":325},[149,160322,160323],{"class":169}," \"普通\"",[149,160325,5457],{"class":155},[149,160327,160328,160330,160332],{"class":151,"line":1090},[149,160329,160285],{"class":155},[149,160331,166],{"class":325},[149,160333,57391],{"class":309},[149,160335,160336,160338],{"class":151,"line":1633},[149,160337,3421],{"class":325},[149,160339,5457],{"class":155},[149,160341,160342,160344,160346,160349],{"class":151,"line":1644},[149,160343,33005],{"class":309},[149,160345,319],{"class":155},[149,160347,160348],{"class":169},"\"会员等级输入错误，按普通会员计算\"",[149,160350,1878],{"class":155},[149,160352,160353],{"class":151,"line":3348},[149,160354,4119],{"emptyLinePlaceholder":1800},[149,160356,160357,160360,160362,160365,160367],{"class":151,"line":3362},[149,160358,160359],{"class":155},"pay ",[149,160361,166],{"class":325},[149,160363,160364],{"class":155}," amount ",[149,160366,2318],{"class":325},[149,160368,158711],{"class":155},[149,160370,160371],{"class":151,"line":3367},[149,160372,4119],{"emptyLinePlaceholder":1800},[149,160374,160375,160377,160380,160382,160385],{"class":151,"line":3373},[149,160376,3255],{"class":325},[149,160378,160379],{"class":155}," pay ",[149,160381,3430],{"class":325},[149,160383,160384],{"class":309}," 500",[149,160386,5457],{"class":155},[149,160388,160389,160392,160394],{"class":151,"line":3394},[149,160390,160391],{"class":155},"    pay ",[149,160393,151688],{"class":325},[149,160395,160396],{"class":309}," 50\n",[149,160398,160399],{"class":151,"line":3399},[149,160400,4119],{"emptyLinePlaceholder":1800},[149,160402,160403,160405,160407,160409,160411,160413,160416,160418,160420,160422],{"class":151,"line":3413},[149,160404,32121],{"class":309},[149,160406,319],{"class":155},[149,160408,1921],{"class":325},[149,160410,158792],{"class":169},[149,160412,2756],{"class":309},[149,160414,160415],{"class":155},"pay",[149,160417,158595],{"class":325},[149,160419,2805],{"class":309},[149,160421,158448],{"class":169},[149,160423,1878],{"class":155},[14,160425,160427],{"id":160426},"_312-易错点","3.12 易错点",[125,160429,160430,160433,160436,160439,160444],{},[45,160431,160432],{},"冒号不能漏。",[45,160434,160435],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[45,160437,160438],{},"多分支判断要注意顺序。",[45,160440,160441,160442,30091],{},"判断相等用 ",[48,160443,4667],{},[45,160445,160446],{},"字符串比较区分大小写：",[140,160448,160450],{"className":32084,"code":160449,"language":32086,"meta":145,"style":145},"\"Y\" == \"y\"  # False\n",[48,160451,160452],{"__ignoreMap":145},[149,160453,160454,160457,160459,160461],{"class":151,"line":152},[149,160455,160456],{"class":169},"\"Y\"",[149,160458,103239],{"class":325},[149,160460,159441],{"class":169},[149,160462,160463],{"class":295},"  # False\n",[24,160465,160466],{},"可转换后再判断：",[140,160468,160470],{"className":32084,"code":160469,"language":32086,"meta":145,"style":145},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[48,160471,160472,160489,160502],{"__ignoreMap":145},[149,160473,160474,160477,160479,160481,160483,160486],{"class":151,"line":152},[149,160475,160476],{"class":155},"answer ",[149,160478,166],{"class":325},[149,160480,62296],{"class":309},[149,160482,319],{"class":155},[149,160484,160485],{"class":169},"\"是否继续(y\u002Fn):\"",[149,160487,160488],{"class":155},").lower()\n",[149,160490,160491,160493,160496,160498,160500],{"class":151,"line":193},[149,160492,3255],{"class":325},[149,160494,160495],{"class":155}," answer ",[149,160497,4667],{"class":325},[149,160499,159441],{"class":169},[149,160501,5457],{"class":155},[149,160503,160504,160506,160508,160511],{"class":151,"line":235},[149,160505,33005],{"class":309},[149,160507,319],{"class":155},[149,160509,160510],{"class":169},"\"继续\"",[149,160512,1878],{"class":155},[14,160514,160516],{"id":160515},"_313-本章练习","3.13 本章练习",[125,160518,160519,160522,160525,160528,160538],{},[45,160520,160521],{},"输入年龄，判断是否成年。",[45,160523,160524],{},"输入年份，判断是否为闰年。",[45,160526,160527],{},"输入三个数字，输出最大值。",[45,160529,160530,160531,160534,160535,160537],{},"写登录判断：用户名是 ",[48,160532,160533],{},"admin"," 且密码是 ",[48,160536,16795],{}," 才登录成功。",[45,160539,160540],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1783,160542,160543],{},"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":145,"searchDepth":193,"depth":193,"links":160545},[160546,160547,160548,160549,160550,160551,160556,160557,160558,160559,160560,160561,160562],{"id":158934,"depth":193,"text":158935},{"id":158987,"depth":193,"text":158988},{"id":159091,"depth":193,"text":159092},{"id":159181,"depth":193,"text":159182},{"id":159371,"depth":193,"text":159372},{"id":159494,"depth":193,"text":159495,"children":160552},[160553,160554,160555],{"id":159498,"depth":235,"text":159499},{"id":159555,"depth":235,"text":159556},{"id":159612,"depth":235,"text":159613},{"id":159657,"depth":193,"text":159658},{"id":159748,"depth":193,"text":159749},{"id":159875,"depth":193,"text":159876},{"id":160005,"depth":193,"text":160006},{"id":160190,"depth":193,"text":160191},{"id":160426,"depth":193,"text":160427},{"id":160515,"depth":193,"text":160516},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158926,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160569,"title":160570,"body":160571,"description":1797,"extension":1798,"meta":162340,"navigation":1800,"path":162341,"seo":162342,"stem":162343,"__hash__":162344},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160572,"toc":162320},[160573,160576,160580,160586,160589,160606,160610,160612,160629,160631,160676,160678,160695,160699,160702,160768,160771,160789,160793,160954,160963,160967,160971,160976,161023,161025,161031,161035,161040,161087,161089,161095,161099,161104,161140,161143,161190,161194,161200,161258,161263,161294,161299,161303,161358,161361,161433,161436,161495,161499,161502,161577,161580,161584,161690,161693,161719,161723,161735,161804,161807,161899,161903,161905,161916,161918,162048,162052,162254,162262,162266,162296,162300,162317],[10,160574,160570],{"id":160575},"_4-循环语句",[14,160577,160579],{"id":160578},"_41-为什么需要循环","4.1 为什么需要循环",[24,160581,160582,160583,160585],{},"如果要输出 1 到 100，不应该写 100 行 ",[48,160584,147908],{},"，而应该用循环。",[24,160587,160588],{},"循环适合处理重复任务：",[125,160590,160591,160594,160597,160600,160603],{},[45,160592,160593],{},"重复输出。",[45,160595,160596],{},"重复输入。",[45,160598,160599],{},"遍历数据。",[45,160601,160602],{},"持续执行菜单。",[45,160604,160605],{},"批量处理文件或数据。",[14,160607,160609],{"id":160608},"_42-while循环","4.2 while循环",[24,160611,6899],{},[140,160613,160615],{"className":32084,"code":160614,"language":32086,"meta":145,"style":145},"while 条件:\n    循环体\n",[48,160616,160617,160624],{"__ignoreMap":145},[149,160618,160619,160621],{"class":151,"line":152},[149,160620,110342],{"class":325},[149,160622,160623],{"class":155}," 条件:\n",[149,160625,160626],{"class":151,"line":193},[149,160627,160628],{"class":155},"    循环体\n",[24,160630,16846],{},[140,160632,160634],{"className":32084,"code":160633,"language":32086,"meta":145,"style":145},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[48,160635,160636,160644,160648,160660,160667],{"__ignoreMap":145},[149,160637,160638,160640,160642],{"class":151,"line":152},[149,160639,101828],{"class":155},[149,160641,166],{"class":325},[149,160643,57391],{"class":309},[149,160645,160646],{"class":151,"line":193},[149,160647,4119],{"emptyLinePlaceholder":1800},[149,160649,160650,160652,160654,160656,160658],{"class":151,"line":235},[149,160651,110342],{"class":325},[149,160653,11152],{"class":155},[149,160655,3311],{"class":325},[149,160657,3867],{"class":309},[149,160659,5457],{"class":155},[149,160661,160662,160664],{"class":151,"line":340},[149,160663,33005],{"class":309},[149,160665,160666],{"class":155},"(i)\n",[149,160668,160669,160672,160674],{"class":151,"line":346},[149,160670,160671],{"class":155},"    i ",[149,160673,11191],{"class":325},[149,160675,57391],{"class":309},[24,160677,82610],{},[125,160679,160680,160686,160689,160692],{},[45,160681,160682,160683,30091],{},"判断条件 ",[48,160684,160685],{},"i \u003C= 5",[45,160687,160688],{},"条件成立，执行循环体。",[45,160690,160691],{},"执行完后回到条件判断。",[45,160693,160694],{},"条件不成立，退出循环。",[14,160696,160698],{"id":160697},"_43-while累加","4.3 while累加",[24,160700,160701],{},"计算 1 到 100 的和：",[140,160703,160705],{"className":32084,"code":160704,"language":32086,"meta":145,"style":145},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[48,160706,160707,160715,160723,160727,160739,160749,160757,160761],{"__ignoreMap":145},[149,160708,160709,160711,160713],{"class":151,"line":152},[149,160710,101828],{"class":155},[149,160712,166],{"class":325},[149,160714,57391],{"class":309},[149,160716,160717,160719,160721],{"class":151,"line":193},[149,160718,158696],{"class":155},[149,160720,166],{"class":325},[149,160722,49039],{"class":309},[149,160724,160725],{"class":151,"line":235},[149,160726,4119],{"emptyLinePlaceholder":1800},[149,160728,160729,160731,160733,160735,160737],{"class":151,"line":340},[149,160730,110342],{"class":325},[149,160732,11152],{"class":155},[149,160734,3311],{"class":325},[149,160736,7470],{"class":309},[149,160738,5457],{"class":155},[149,160740,160741,160744,160746],{"class":151,"line":346},[149,160742,160743],{"class":155},"    total ",[149,160745,11191],{"class":325},[149,160747,160748],{"class":155}," i\n",[149,160750,160751,160753,160755],{"class":151,"line":352},[149,160752,160671],{"class":155},[149,160754,11191],{"class":325},[149,160756,57391],{"class":309},[149,160758,160759],{"class":151,"line":1021},[149,160760,4119],{"emptyLinePlaceholder":1800},[149,160762,160763,160765],{"class":151,"line":1035},[149,160764,32121],{"class":309},[149,160766,160767],{"class":155},"(total)\n",[24,160769,160770],{},"核心思想：",[125,160772,160773,160778,160783],{},[45,160774,160775,160777],{},[48,160776,2304],{}," 控制循环次数。",[45,160779,160780,160782],{},[48,160781,158797],{}," 保存累加结果。",[45,160784,160785,160786,160788],{},"每轮循环都要更新 ",[48,160787,2304],{},"，否则可能死循环。",[14,160790,160792],{"id":160791},"_44-while猜数字","4.4 while猜数字",[140,160794,160796],{"className":32084,"code":160795,"language":32086,"meta":145,"style":145},"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",[48,160797,160798,160804,160808,160825,160833,160837,160845,160865,160874,160878,160890,160901,160911,160922,160928,160950],{"__ignoreMap":145},[149,160799,160800,160802],{"class":151,"line":152},[149,160801,32098],{"class":325},[149,160803,47034],{"class":155},[149,160805,160806],{"class":151,"line":193},[149,160807,4119],{"emptyLinePlaceholder":1800},[149,160809,160810,160812,160814,160817,160819,160821,160823],{"class":151,"line":235},[149,160811,160476],{"class":155},[149,160813,166],{"class":325},[149,160815,160816],{"class":155}," random.randint(",[149,160818,830],{"class":309},[149,160820,329],{"class":155},[149,160822,322],{"class":309},[149,160824,1878],{"class":155},[149,160826,160827,160829,160831],{"class":151,"line":340},[149,160828,148127],{"class":155},[149,160830,166],{"class":325},[149,160832,49039],{"class":309},[149,160834,160835],{"class":151,"line":346},[149,160836,4119],{"emptyLinePlaceholder":1800},[149,160838,160839,160841,160843],{"class":151,"line":352},[149,160840,110342],{"class":325},[149,160842,96972],{"class":309},[149,160844,5457],{"class":155},[149,160846,160847,160850,160852,160854,160856,160858,160860,160863],{"class":151,"line":1021},[149,160848,160849],{"class":155},"    guess ",[149,160851,166],{"class":325},[149,160853,4101],{"class":309},[149,160855,319],{"class":155},[149,160857,504],{"class":309},[149,160859,319],{"class":155},[149,160861,160862],{"class":169},"\"请输入1到100之间的数字:\"",[149,160864,32203],{"class":155},[149,160866,160867,160870,160872],{"class":151,"line":1035},[149,160868,160869],{"class":155},"    count ",[149,160871,11191],{"class":325},[149,160873,57391],{"class":309},[149,160875,160876],{"class":151,"line":1054},[149,160877,4119],{"emptyLinePlaceholder":1800},[149,160879,160880,160882,160885,160887],{"class":151,"line":1072},[149,160881,4819],{"class":325},[149,160883,160884],{"class":155}," guess ",[149,160886,2819],{"class":325},[149,160888,160889],{"class":155}," answer:\n",[149,160891,160892,160894,160896,160899],{"class":151,"line":1090},[149,160893,34157],{"class":309},[149,160895,319],{"class":155},[149,160897,160898],{"class":169},"\"猜大了\"",[149,160900,1878],{"class":155},[149,160902,160903,160905,160907,160909],{"class":151,"line":1633},[149,160904,40999],{"class":325},[149,160906,160884],{"class":155},[149,160908,156],{"class":325},[149,160910,160889],{"class":155},[149,160912,160913,160915,160917,160920],{"class":151,"line":1644},[149,160914,34157],{"class":309},[149,160916,319],{"class":155},[149,160918,160919],{"class":169},"\"猜小了\"",[149,160921,1878],{"class":155},[149,160923,160924,160926],{"class":151,"line":3348},[149,160925,159458],{"class":325},[149,160927,5457],{"class":155},[149,160929,160930,160932,160934,160936,160939,160941,160943,160945,160948],{"class":151,"line":3362},[149,160931,34157],{"class":309},[149,160933,319],{"class":155},[149,160935,1921],{"class":325},[149,160937,160938],{"class":169},"\"猜对了，一共猜了",[149,160940,2756],{"class":309},[149,160942,86115],{"class":155},[149,160944,2805],{"class":309},[149,160946,160947],{"class":169},"次\"",[149,160949,1878],{"class":155},[149,160951,160952],{"class":151,"line":3367},[149,160953,33333],{"class":325},[24,160955,160956,160959,160960,160962],{},[48,160957,160958],{},"while True"," 表示无限循环，通常配合 ",[48,160961,3772],{}," 使用。",[14,160964,160966],{"id":160965},"_45-break和continue","4.5 break和continue",[19,160968,160970],{"id":160969},"_451-break","4.5.1 break",[24,160972,160973,160975],{},[48,160974,3772],{}," 直接结束整个循环。",[140,160977,160979],{"className":32084,"code":160978,"language":32086,"meta":145,"style":145},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[48,160980,160981,161001,161013,161017],{"__ignoreMap":145},[149,160982,160983,160985,160987,160989,160991,160993,160995,160997,160999],{"class":151,"line":152},[149,160984,4743],{"class":325},[149,160986,11152],{"class":155},[149,160988,27752],{"class":325},[149,160990,34149],{"class":309},[149,160992,319],{"class":155},[149,160994,830],{"class":309},[149,160996,329],{"class":155},[149,160998,2207],{"class":309},[149,161000,32492],{"class":155},[149,161002,161003,161005,161007,161009,161011],{"class":151,"line":193},[149,161004,4819],{"class":325},[149,161006,11152],{"class":155},[149,161008,4667],{"class":325},[149,161010,79752],{"class":309},[149,161012,5457],{"class":155},[149,161014,161015],{"class":151,"line":235},[149,161016,33333],{"class":325},[149,161018,161019,161021],{"class":151,"line":340},[149,161020,33005],{"class":309},[149,161022,160666],{"class":155},[24,161024,147893],{},[140,161026,161029],{"className":161027,"code":161028,"language":1655,"meta":145},[1653],"1\n2\n",[48,161030,161028],{"__ignoreMap":145},[19,161032,161034],{"id":161033},"_452-continue","4.5.2 continue",[24,161036,161037,161039],{},[48,161038,156108],{}," 跳过本轮剩余代码，进入下一轮循环。",[140,161041,161043],{"className":32084,"code":161042,"language":32086,"meta":145,"style":145},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[48,161044,161045,161065,161077,161081],{"__ignoreMap":145},[149,161046,161047,161049,161051,161053,161055,161057,161059,161061,161063],{"class":151,"line":152},[149,161048,4743],{"class":325},[149,161050,11152],{"class":155},[149,161052,27752],{"class":325},[149,161054,34149],{"class":309},[149,161056,319],{"class":155},[149,161058,830],{"class":309},[149,161060,329],{"class":155},[149,161062,2207],{"class":309},[149,161064,32492],{"class":155},[149,161066,161067,161069,161071,161073,161075],{"class":151,"line":193},[149,161068,4819],{"class":325},[149,161070,11152],{"class":155},[149,161072,4667],{"class":325},[149,161074,79752],{"class":309},[149,161076,5457],{"class":155},[149,161078,161079],{"class":151,"line":235},[149,161080,149948],{"class":325},[149,161082,161083,161085],{"class":151,"line":340},[149,161084,33005],{"class":309},[149,161086,160666],{"class":155},[24,161088,147893],{},[140,161090,161093],{"className":161091,"code":161092,"language":1655,"meta":145},[1653],"1\n2\n4\n5\n",[48,161094,161092],{"__ignoreMap":145},[14,161096,161098],{"id":161097},"_46-for循环","4.6 for循环",[24,161100,161101,161103],{},[48,161102,4743],{}," 常用于遍历序列。",[140,161105,161107],{"className":32084,"code":161106,"language":32086,"meta":145,"style":145},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[48,161108,161109,161118,161122,161133],{"__ignoreMap":145},[149,161110,161111,161113,161115],{"class":151,"line":152},[149,161112,147972],{"class":155},[149,161114,166],{"class":325},[149,161116,161117],{"class":169}," \"python\"\n",[149,161119,161120],{"class":151,"line":193},[149,161121,4119],{"emptyLinePlaceholder":1800},[149,161123,161124,161126,161129,161131],{"class":151,"line":235},[149,161125,4743],{"class":325},[149,161127,161128],{"class":155}," ch ",[149,161130,27752],{"class":325},[149,161132,159835],{"class":155},[149,161134,161135,161137],{"class":151,"line":340},[149,161136,33005],{"class":309},[149,161138,161139],{"class":155},"(ch)\n",[24,161141,161142],{},"遍历列表：",[140,161144,161146],{"className":32084,"code":161145,"language":32086,"meta":145,"style":145},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[48,161147,161148,161170,161174,161184],{"__ignoreMap":145},[149,161149,161150,161153,161155,161157,161159,161161,161163,161165,161168],{"class":151,"line":152},[149,161151,161152],{"class":155},"students ",[149,161154,166],{"class":325},[149,161156,53924],{"class":155},[149,161158,151324],{"class":169},[149,161160,329],{"class":155},[149,161162,152372],{"class":169},[149,161164,329],{"class":155},[149,161166,161167],{"class":169},"\"小刚\"",[149,161169,34952],{"class":155},[149,161171,161172],{"class":151,"line":193},[149,161173,4119],{"emptyLinePlaceholder":1800},[149,161175,161176,161178,161180,161182],{"class":151,"line":235},[149,161177,4743],{"class":325},[149,161179,153573],{"class":155},[149,161181,27752],{"class":325},[149,161183,153578],{"class":155},[149,161185,161186,161188],{"class":151,"line":340},[149,161187,33005],{"class":309},[149,161189,151478],{"class":155},[14,161191,161193],{"id":161192},"_47-range函数","4.7 range函数",[24,161195,161196,161199],{},[48,161197,161198],{},"range()"," 用于生成整数序列。",[140,161201,161203],{"className":32084,"code":161202,"language":32086,"meta":145,"style":145},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[48,161204,161205,161219,161237],{"__ignoreMap":145},[149,161206,161207,161209,161211,161213,161216],{"class":151,"line":152},[149,161208,35122],{"class":309},[149,161210,319],{"class":155},[149,161212,2182],{"class":309},[149,161214,161215],{"class":155},")          ",[149,161217,161218],{"class":295},"# 0,1,2,3,4\n",[149,161220,161221,161223,161225,161227,161229,161231,161234],{"class":151,"line":193},[149,161222,35122],{"class":309},[149,161224,319],{"class":155},[149,161226,830],{"class":309},[149,161228,329],{"class":155},[149,161230,2182],{"class":309},[149,161232,161233],{"class":155},")       ",[149,161235,161236],{"class":295},"# 1,2,3,4\n",[149,161238,161239,161241,161243,161245,161247,161249,161251,161253,161255],{"class":151,"line":235},[149,161240,35122],{"class":309},[149,161242,319],{"class":155},[149,161244,830],{"class":309},[149,161246,329],{"class":155},[149,161248,2309],{"class":309},[149,161250,329],{"class":155},[149,161252,1045],{"class":309},[149,161254,157097],{"class":155},[149,161256,161257],{"class":295},"# 1,3,5,7,9\n",[24,161259,161260,161261,26327],{},"配合 ",[48,161262,4743],{},[140,161264,161266],{"className":32084,"code":161265,"language":32086,"meta":145,"style":145},"for i in range(1, 6):\n    print(i)\n",[48,161267,161268,161288],{"__ignoreMap":145},[149,161269,161270,161272,161274,161276,161278,161280,161282,161284,161286],{"class":151,"line":152},[149,161271,4743],{"class":325},[149,161273,11152],{"class":155},[149,161275,27752],{"class":325},[149,161277,34149],{"class":309},[149,161279,319],{"class":155},[149,161281,830],{"class":309},[149,161283,329],{"class":155},[149,161285,2207],{"class":309},[149,161287,32492],{"class":155},[149,161289,161290,161292],{"class":151,"line":193},[149,161291,33005],{"class":309},[149,161293,160666],{"class":155},[24,161295,866,161296,161298],{},[48,161297,35122],{}," 的结束值不包含在内。",[14,161300,161302],{"id":161301},"_48-for循环求和","4.8 for循环求和",[140,161304,161306],{"className":32084,"code":161305,"language":32086,"meta":145,"style":145},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[48,161307,161308,161316,161320,161340,161348,161352],{"__ignoreMap":145},[149,161309,161310,161312,161314],{"class":151,"line":152},[149,161311,158696],{"class":155},[149,161313,166],{"class":325},[149,161315,49039],{"class":309},[149,161317,161318],{"class":151,"line":193},[149,161319,4119],{"emptyLinePlaceholder":1800},[149,161321,161322,161324,161326,161328,161330,161332,161334,161336,161338],{"class":151,"line":235},[149,161323,4743],{"class":325},[149,161325,11152],{"class":155},[149,161327,27752],{"class":325},[149,161329,34149],{"class":309},[149,161331,319],{"class":155},[149,161333,830],{"class":309},[149,161335,329],{"class":155},[149,161337,2200],{"class":309},[149,161339,32492],{"class":155},[149,161341,161342,161344,161346],{"class":151,"line":340},[149,161343,160743],{"class":155},[149,161345,11191],{"class":325},[149,161347,160748],{"class":155},[149,161349,161350],{"class":151,"line":346},[149,161351,4119],{"emptyLinePlaceholder":1800},[149,161353,161354,161356],{"class":151,"line":352},[149,161355,32121],{"class":309},[149,161357,160767],{"class":155},[24,161359,161360],{},"求偶数和：",[140,161362,161364],{"className":32084,"code":161363,"language":32086,"meta":145,"style":145},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[48,161365,161366,161374,161378,161398,161414,161423,161427],{"__ignoreMap":145},[149,161367,161368,161370,161372],{"class":151,"line":152},[149,161369,158696],{"class":155},[149,161371,166],{"class":325},[149,161373,49039],{"class":309},[149,161375,161376],{"class":151,"line":193},[149,161377,4119],{"emptyLinePlaceholder":1800},[149,161379,161380,161382,161384,161386,161388,161390,161392,161394,161396],{"class":151,"line":235},[149,161381,4743],{"class":325},[149,161383,11152],{"class":155},[149,161385,27752],{"class":325},[149,161387,34149],{"class":309},[149,161389,319],{"class":155},[149,161391,830],{"class":309},[149,161393,329],{"class":155},[149,161395,2200],{"class":309},[149,161397,32492],{"class":155},[149,161399,161400,161402,161404,161406,161408,161410,161412],{"class":151,"line":340},[149,161401,4819],{"class":325},[149,161403,11152],{"class":155},[149,161405,2191],{"class":325},[149,161407,16467],{"class":309},[149,161409,103239],{"class":325},[149,161411,5811],{"class":309},[149,161413,5457],{"class":155},[149,161415,161416,161419,161421],{"class":151,"line":346},[149,161417,161418],{"class":155},"        total ",[149,161420,11191],{"class":325},[149,161422,160748],{"class":155},[149,161424,161425],{"class":151,"line":352},[149,161426,4119],{"emptyLinePlaceholder":1800},[149,161428,161429,161431],{"class":151,"line":1021},[149,161430,32121],{"class":309},[149,161432,160767],{"class":155},[24,161434,161435],{},"也可以：",[140,161437,161439],{"className":32084,"code":161438,"language":32086,"meta":145,"style":145},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[48,161440,161441,161449,161453,161477,161485,161489],{"__ignoreMap":145},[149,161442,161443,161445,161447],{"class":151,"line":152},[149,161444,158696],{"class":155},[149,161446,166],{"class":325},[149,161448,49039],{"class":309},[149,161450,161451],{"class":151,"line":193},[149,161452,4119],{"emptyLinePlaceholder":1800},[149,161454,161455,161457,161459,161461,161463,161465,161467,161469,161471,161473,161475],{"class":151,"line":235},[149,161456,4743],{"class":325},[149,161458,11152],{"class":155},[149,161460,27752],{"class":325},[149,161462,34149],{"class":309},[149,161464,319],{"class":155},[149,161466,1045],{"class":309},[149,161468,329],{"class":155},[149,161470,2200],{"class":309},[149,161472,329],{"class":155},[149,161474,1045],{"class":309},[149,161476,32492],{"class":155},[149,161478,161479,161481,161483],{"class":151,"line":340},[149,161480,160743],{"class":155},[149,161482,11191],{"class":325},[149,161484,160748],{"class":155},[149,161486,161487],{"class":151,"line":346},[149,161488,4119],{"emptyLinePlaceholder":1800},[149,161490,161491,161493],{"class":151,"line":352},[149,161492,32121],{"class":309},[149,161494,160767],{"class":155},[14,161496,161498],{"id":161497},"_49-循环嵌套","4.9 循环嵌套",[24,161500,161501],{},"嵌套循环就是循环里面再写循环。",[140,161503,161505],{"className":32084,"code":161504,"language":32086,"meta":145,"style":145},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[48,161506,161507,161527,161547],{"__ignoreMap":145},[149,161508,161509,161511,161513,161515,161517,161519,161521,161523,161525],{"class":151,"line":152},[149,161510,4743],{"class":325},[149,161512,11152],{"class":155},[149,161514,27752],{"class":325},[149,161516,34149],{"class":309},[149,161518,319],{"class":155},[149,161520,830],{"class":309},[149,161522,329],{"class":155},[149,161524,2157],{"class":309},[149,161526,32492],{"class":155},[149,161528,161529,161531,161533,161535,161537,161539,161541,161543,161545],{"class":151,"line":193},[149,161530,4919],{"class":325},[149,161532,11214],{"class":155},[149,161534,27752],{"class":325},[149,161536,34149],{"class":309},[149,161538,319],{"class":155},[149,161540,830],{"class":309},[149,161542,329],{"class":155},[149,161544,2157],{"class":309},[149,161546,32492],{"class":155},[149,161548,161549,161551,161553,161555,161558,161560,161562,161564,161567,161569,161571,161573,161575],{"class":151,"line":235},[149,161550,34157],{"class":309},[149,161552,319],{"class":155},[149,161554,1921],{"class":325},[149,161556,161557],{"class":169},"\"i=",[149,161559,2756],{"class":309},[149,161561,2304],{"class":155},[149,161563,2805],{"class":309},[149,161565,161566],{"class":169},", j=",[149,161568,2756],{"class":309},[149,161570,2330],{"class":155},[149,161572,2805],{"class":309},[149,161574,2115],{"class":169},[149,161576,1878],{"class":155},[24,161578,161579],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161581,161583],{"id":161582},"_410-九九乘法表","4.10 九九乘法表",[140,161585,161587],{"className":32084,"code":161586,"language":32086,"meta":145,"style":145},"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",[48,161588,161589,161609,161632,161684],{"__ignoreMap":145},[149,161590,161591,161593,161595,161597,161599,161601,161603,161605,161607],{"class":151,"line":152},[149,161592,4743],{"class":325},[149,161594,11152],{"class":155},[149,161596,27752],{"class":325},[149,161598,34149],{"class":309},[149,161600,319],{"class":155},[149,161602,830],{"class":309},[149,161604,329],{"class":155},[149,161606,2309],{"class":309},[149,161608,32492],{"class":155},[149,161610,161611,161613,161615,161617,161619,161621,161623,161626,161628,161630],{"class":151,"line":193},[149,161612,4919],{"class":325},[149,161614,11214],{"class":155},[149,161616,27752],{"class":325},[149,161618,34149],{"class":309},[149,161620,319],{"class":155},[149,161622,830],{"class":309},[149,161624,161625],{"class":155},", i ",[149,161627,2344],{"class":325},[149,161629,26827],{"class":309},[149,161631,32492],{"class":155},[149,161633,161634,161636,161638,161640,161642,161644,161646,161648,161650,161652,161654,161656,161658,161660,161662,161664,161666,161668,161670,161672,161674,161676,161678,161680,161682],{"class":151,"line":235},[149,161635,34157],{"class":309},[149,161637,319],{"class":155},[149,161639,1921],{"class":325},[149,161641,2115],{"class":169},[149,161643,2756],{"class":309},[149,161645,2330],{"class":155},[149,161647,2805],{"class":309},[149,161649,2318],{"class":169},[149,161651,2756],{"class":309},[149,161653,2304],{"class":155},[149,161655,2805],{"class":309},[149,161657,166],{"class":169},[149,161659,2756],{"class":309},[149,161661,101828],{"class":155},[149,161663,2318],{"class":325},[149,161665,5128],{"class":155},[149,161667,2805],{"class":309},[149,161669,2115],{"class":169},[149,161671,329],{"class":155},[149,161673,47507],{"class":6932},[149,161675,166],{"class":325},[149,161677,2115],{"class":169},[149,161679,2959],{"class":309},[149,161681,2115],{"class":169},[149,161683,1878],{"class":155},[149,161685,161686,161688],{"class":151,"line":340},[149,161687,33005],{"class":309},[149,161689,3695],{"class":155},[24,161691,161692],{},"关键点：",[125,161694,161695,161701,161707,161713],{},[45,161696,161697,161698,161700],{},"外层 ",[48,161699,2304],{}," 控制行。",[45,161702,161703,161704,161706],{},"内层 ",[48,161705,2330],{}," 控制列。",[45,161708,161709,161710,161712],{},"每行结束后用 ",[48,161711,147908],{}," 换行。",[45,161714,161715,161718],{},[48,161716,161717],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161720,161722],{"id":161721},"_411-循环else","4.11 循环else",[24,161724,161725,161726,161728,161729,161731,161732,161734],{},"Python 的循环可以带 ",[48,161727,3421],{},"。当循环正常结束时执行 ",[48,161730,3421],{},"，如果被 ",[48,161733,3772],{}," 打断，则不执行。",[140,161736,161738],{"className":32084,"code":161737,"language":32086,"meta":145,"style":145},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[48,161739,161740,161760,161772,161783,161787,161793],{"__ignoreMap":145},[149,161741,161742,161744,161746,161748,161750,161752,161754,161756,161758],{"class":151,"line":152},[149,161743,4743],{"class":325},[149,161745,11152],{"class":155},[149,161747,27752],{"class":325},[149,161749,34149],{"class":309},[149,161751,319],{"class":155},[149,161753,830],{"class":309},[149,161755,329],{"class":155},[149,161757,2207],{"class":309},[149,161759,32492],{"class":155},[149,161761,161762,161764,161766,161768,161770],{"class":151,"line":193},[149,161763,4819],{"class":325},[149,161765,11152],{"class":155},[149,161767,4667],{"class":325},[149,161769,3757],{"class":309},[149,161771,5457],{"class":155},[149,161773,161774,161776,161778,161781],{"class":151,"line":235},[149,161775,34157],{"class":309},[149,161777,319],{"class":155},[149,161779,161780],{"class":169},"\"找到了\"",[149,161782,1878],{"class":155},[149,161784,161785],{"class":151,"line":340},[149,161786,33333],{"class":325},[149,161788,161789,161791],{"class":151,"line":346},[149,161790,3421],{"class":325},[149,161792,5457],{"class":155},[149,161794,161795,161797,161799,161802],{"class":151,"line":352},[149,161796,33005],{"class":309},[149,161798,319],{"class":155},[149,161800,161801],{"class":169},"\"没找到\"",[149,161803,1878],{"class":155},[24,161805,161806],{},"常用于搜索。",[140,161808,161810],{"className":32084,"code":161809,"language":32086,"meta":145,"style":145},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[48,161811,161812,161833,161842,161846,161858,161869,161879,161883,161889],{"__ignoreMap":145},[149,161813,161814,161817,161819,161821,161823,161825,161827,161829,161831],{"class":151,"line":152},[149,161815,161816],{"class":155},"names ",[149,161818,166],{"class":325},[149,161820,53924],{"class":155},[149,161822,151324],{"class":169},[149,161824,329],{"class":155},[149,161826,152372],{"class":169},[149,161828,329],{"class":155},[149,161830,161167],{"class":169},[149,161832,34952],{"class":155},[149,161834,161835,161837,161839],{"class":151,"line":193},[149,161836,113257],{"class":155},[149,161838,166],{"class":325},[149,161840,161841],{"class":169}," \"小李\"\n",[149,161843,161844],{"class":151,"line":235},[149,161845,4119],{"emptyLinePlaceholder":1800},[149,161847,161848,161850,161853,161855],{"class":151,"line":340},[149,161849,4743],{"class":325},[149,161851,161852],{"class":155}," name ",[149,161854,27752],{"class":325},[149,161856,161857],{"class":155}," names:\n",[149,161859,161860,161862,161864,161866],{"class":151,"line":346},[149,161861,4819],{"class":325},[149,161863,161852],{"class":155},[149,161865,4667],{"class":325},[149,161867,161868],{"class":155}," target:\n",[149,161870,161871,161873,161875,161877],{"class":151,"line":352},[149,161872,34157],{"class":309},[149,161874,319],{"class":155},[149,161876,161780],{"class":169},[149,161878,1878],{"class":155},[149,161880,161881],{"class":151,"line":1021},[149,161882,33333],{"class":325},[149,161884,161885,161887],{"class":151,"line":1035},[149,161886,3421],{"class":325},[149,161888,5457],{"class":155},[149,161890,161891,161893,161895,161897],{"class":151,"line":1054},[149,161892,33005],{"class":309},[149,161894,319],{"class":155},[149,161896,161801],{"class":169},[149,161898,1878],{"class":155},[14,161900,161902],{"id":161901},"_412-小案例登录重试","4.12 小案例：登录重试",[24,161904,124971],{},[125,161906,161907,161910,161913],{},[45,161908,161909],{},"用户最多输入 3 次密码。",[45,161911,161912],{},"密码正确则登录成功。",[45,161914,161915],{},"3 次都错误则锁定账号。",[24,161917,11749],{},[140,161919,161921],{"className":32084,"code":161920,"language":32086,"meta":145,"style":145},"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",[48,161922,161923,161933,161937,161953,161969,161973,161985,161996,162000,162006,162031,162037],{"__ignoreMap":145},[149,161924,161925,161928,161930],{"class":151,"line":152},[149,161926,161927],{"class":155},"password ",[149,161929,166],{"class":325},[149,161931,161932],{"class":169}," \"123456\"\n",[149,161934,161935],{"class":151,"line":193},[149,161936,4119],{"emptyLinePlaceholder":1800},[149,161938,161939,161941,161943,161945,161947,161949,161951],{"class":151,"line":235},[149,161940,4743],{"class":325},[149,161942,11152],{"class":155},[149,161944,27752],{"class":325},[149,161946,34149],{"class":309},[149,161948,319],{"class":155},[149,161950,1939],{"class":309},[149,161952,32492],{"class":155},[149,161954,161955,161958,161960,161962,161964,161967],{"class":151,"line":340},[149,161956,161957],{"class":155},"    user_password ",[149,161959,166],{"class":325},[149,161961,62296],{"class":309},[149,161963,319],{"class":155},[149,161965,161966],{"class":169},"\"请输入密码:\"",[149,161968,1878],{"class":155},[149,161970,161971],{"class":151,"line":346},[149,161972,4119],{"emptyLinePlaceholder":1800},[149,161974,161975,161977,161980,161982],{"class":151,"line":352},[149,161976,4819],{"class":325},[149,161978,161979],{"class":155}," user_password ",[149,161981,4667],{"class":325},[149,161983,161984],{"class":155}," password:\n",[149,161986,161987,161989,161991,161994],{"class":151,"line":1021},[149,161988,34157],{"class":309},[149,161990,319],{"class":155},[149,161992,161993],{"class":169},"\"登录成功\"",[149,161995,1878],{"class":155},[149,161997,161998],{"class":151,"line":1035},[149,161999,33333],{"class":325},[149,162001,162002,162004],{"class":151,"line":1054},[149,162003,159458],{"class":325},[149,162005,5457],{"class":155},[149,162007,162008,162010,162012,162014,162017,162020,162022,162024,162026,162029],{"class":151,"line":1072},[149,162009,34157],{"class":309},[149,162011,319],{"class":155},[149,162013,1921],{"class":325},[149,162015,162016],{"class":169},"\"密码错误，还剩",[149,162018,162019],{"class":309},"{2",[149,162021,53969],{"class":325},[149,162023,4750],{"class":155},[149,162025,2805],{"class":309},[149,162027,162028],{"class":169},"次机会\"",[149,162030,1878],{"class":155},[149,162032,162033,162035],{"class":151,"line":1090},[149,162034,3421],{"class":325},[149,162036,5457],{"class":155},[149,162038,162039,162041,162043,162046],{"class":151,"line":1633},[149,162040,33005],{"class":309},[149,162042,319],{"class":155},[149,162044,162045],{"class":169},"\"账号已锁定\"",[149,162047,1878],{"class":155},[14,162049,162051],{"id":162050},"_413-小案例菜单程序","4.13 小案例：菜单程序",[140,162053,162055],{"className":32084,"code":162054,"language":32086,"meta":145,"style":145},"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",[48,162056,162057,162065,162076,162087,162098,162109,162120,162124,162139,162143,162155,162166,162178,162189,162201,162212,162224,162234,162238,162244],{"__ignoreMap":145},[149,162058,162059,162061,162063],{"class":151,"line":152},[149,162060,110342],{"class":325},[149,162062,96972],{"class":309},[149,162064,5457],{"class":155},[149,162066,162067,162069,162071,162074],{"class":151,"line":193},[149,162068,33005],{"class":309},[149,162070,319],{"class":155},[149,162072,162073],{"class":169},"\"====== 菜单 ======\"",[149,162075,1878],{"class":155},[149,162077,162078,162080,162082,162085],{"class":151,"line":235},[149,162079,33005],{"class":309},[149,162081,319],{"class":155},[149,162083,162084],{"class":169},"\"1. 查询余额\"",[149,162086,1878],{"class":155},[149,162088,162089,162091,162093,162096],{"class":151,"line":340},[149,162090,33005],{"class":309},[149,162092,319],{"class":155},[149,162094,162095],{"class":169},"\"2. 存款\"",[149,162097,1878],{"class":155},[149,162099,162100,162102,162104,162107],{"class":151,"line":346},[149,162101,33005],{"class":309},[149,162103,319],{"class":155},[149,162105,162106],{"class":169},"\"3. 取款\"",[149,162108,1878],{"class":155},[149,162110,162111,162113,162115,162118],{"class":151,"line":352},[149,162112,33005],{"class":309},[149,162114,319],{"class":155},[149,162116,162117],{"class":169},"\"0. 退出\"",[149,162119,1878],{"class":155},[149,162121,162122],{"class":151,"line":1021},[149,162123,4119],{"emptyLinePlaceholder":1800},[149,162125,162126,162129,162131,162133,162135,162137],{"class":151,"line":1035},[149,162127,162128],{"class":155},"    choice ",[149,162130,166],{"class":325},[149,162132,62296],{"class":309},[149,162134,319],{"class":155},[149,162136,154509],{"class":169},[149,162138,1878],{"class":155},[149,162140,162141],{"class":151,"line":1054},[149,162142,4119],{"emptyLinePlaceholder":1800},[149,162144,162145,162147,162149,162151,162153],{"class":151,"line":1072},[149,162146,4819],{"class":325},[149,162148,154522],{"class":155},[149,162150,4667],{"class":325},[149,162152,154527],{"class":169},[149,162154,5457],{"class":155},[149,162156,162157,162159,162161,162164],{"class":151,"line":1090},[149,162158,34157],{"class":309},[149,162160,319],{"class":155},[149,162162,162163],{"class":169},"\"余额为1000元\"",[149,162165,1878],{"class":155},[149,162167,162168,162170,162172,162174,162176],{"class":151,"line":1633},[149,162169,40999],{"class":325},[149,162171,154522],{"class":155},[149,162173,4667],{"class":325},[149,162175,154546],{"class":169},[149,162177,5457],{"class":155},[149,162179,162180,162182,162184,162187],{"class":151,"line":1644},[149,162181,34157],{"class":309},[149,162183,319],{"class":155},[149,162185,162186],{"class":169},"\"存款功能\"",[149,162188,1878],{"class":155},[149,162190,162191,162193,162195,162197,162199],{"class":151,"line":3348},[149,162192,40999],{"class":325},[149,162194,154522],{"class":155},[149,162196,4667],{"class":325},[149,162198,154564],{"class":169},[149,162200,5457],{"class":155},[149,162202,162203,162205,162207,162210],{"class":151,"line":3362},[149,162204,34157],{"class":309},[149,162206,319],{"class":155},[149,162208,162209],{"class":169},"\"取款功能\"",[149,162211,1878],{"class":155},[149,162213,162214,162216,162218,162220,162222],{"class":151,"line":3367},[149,162215,40999],{"class":325},[149,162217,154522],{"class":155},[149,162219,4667],{"class":325},[149,162221,154618],{"class":169},[149,162223,5457],{"class":155},[149,162225,162226,162228,162230,162232],{"class":151,"line":3373},[149,162227,34157],{"class":309},[149,162229,319],{"class":155},[149,162231,154629],{"class":169},[149,162233,1878],{"class":155},[149,162235,162236],{"class":151,"line":3394},[149,162237,33333],{"class":325},[149,162239,162240,162242],{"class":151,"line":3399},[149,162241,159458],{"class":325},[149,162243,5457],{"class":155},[149,162245,162246,162248,162250,162252],{"class":151,"line":3413},[149,162247,34157],{"class":309},[149,162249,319],{"class":155},[149,162251,154650],{"class":169},[149,162253,1878],{"class":155},[24,162255,162256,162257,162259,162260,30091],{},"菜单类程序通常使用 ",[48,162258,160958],{},"，用户选择退出时 ",[48,162261,3772],{},[14,162263,162265],{"id":162264},"_414-易错点","4.14 易错点",[125,162267,162268,162273,162279,162287,162293],{},[45,162269,162270,162272],{},[48,162271,110342],{}," 循环必须更新控制变量。",[45,162274,162275,162278],{},[48,162276,162277],{},"range(1, 10)"," 不包含 10。",[45,162280,162281,162283,162284,162286],{},[48,162282,3772],{}," 结束整个循环，",[48,162285,156108],{}," 只跳过本轮。",[45,162288,162289,162290,162292],{},"嵌套循环中，",[48,162291,3772],{}," 只跳出当前所在的一层循环。",[45,162294,162295],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162297,162299],{"id":162298},"_415-本章练习","4.15 本章练习",[125,162301,162302,162305,162308,162311,162314],{},[45,162303,162304],{},"输出 1 到 100。",[45,162306,162307],{},"计算 1 到 100 的偶数和。",[45,162309,162310],{},"输出 100 以内能被 3 和 5 同时整除的数。",[45,162312,162313],{},"编写猜数字游戏，限制最多猜 7 次。",[45,162315,162316],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1783,162318,162319],{},"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":145,"searchDepth":193,"depth":193,"links":162321},[162322,162323,162324,162325,162326,162330,162331,162332,162333,162334,162335,162336,162337,162338,162339],{"id":160578,"depth":193,"text":160579},{"id":160608,"depth":193,"text":160609},{"id":160697,"depth":193,"text":160698},{"id":160791,"depth":193,"text":160792},{"id":160965,"depth":193,"text":160966,"children":162327},[162328,162329],{"id":160969,"depth":235,"text":160970},{"id":161033,"depth":235,"text":161034},{"id":161097,"depth":193,"text":161098},{"id":161192,"depth":193,"text":161193},{"id":161301,"depth":193,"text":161302},{"id":161497,"depth":193,"text":161498},{"id":161582,"depth":193,"text":161583},{"id":161721,"depth":193,"text":161722},{"id":161901,"depth":193,"text":161902},{"id":162050,"depth":193,"text":162051},{"id":162264,"depth":193,"text":162265},{"id":162298,"depth":193,"text":162299},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160570,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162346,"title":162347,"body":162348,"description":1797,"extension":1798,"meta":164353,"navigation":1800,"path":164354,"seo":164355,"stem":164356,"__hash__":164357},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162349,"toc":164333},[162350,162353,162357,162360,162363,162377,162380,162394,162398,162400,162419,162421,162468,162470,162484,162488,162562,162565,162569,162572,162631,162639,162642,162695,162698,162702,162707,162762,162770,162820,162824,162829,162837,162936,162942,162946,162951,162954,162965,163006,163019,163023,163026,163062,163065,163078,163081,163141,163145,163149,163152,163203,163207,163210,163257,163263,163329,163332,163336,163339,163455,163458,163462,163465,163571,163575,163578,163616,163619,163661,163664,163724,163727,163731,164195,164198,164202,164229,164235,164296,164300,164330],[10,162351,162347],{"id":162352},"_5-函数基础",[14,162354,162356],{"id":162355},"_51-为什么需要函数","5.1 为什么需要函数",[24,162358,162359],{},"函数用于封装一段可以重复使用的代码。",[24,162361,162362],{},"不使用函数的问题：",[125,162364,162365,162368,162371,162374],{},[45,162366,162367],{},"重复代码多。",[45,162369,162370],{},"修改逻辑时容易漏改。",[45,162372,162373],{},"主流程不清晰。",[45,162375,162376],{},"程序越写越长，难以维护。",[24,162378,162379],{},"使用函数后的好处：",[125,162381,162382,162385,162388,162391],{},[45,162383,162384],{},"提高复用性。",[45,162386,162387],{},"提高可读性。",[45,162389,162390],{},"便于调试。",[45,162392,162393],{},"便于分工。",[14,162395,162397],{"id":162396},"_52-函数定义","5.2 函数定义",[24,162399,6899],{},[140,162401,162403],{"className":32084,"code":162402,"language":32086,"meta":145,"style":145},"def 函数名():\n    函数体\n",[48,162404,162405,162414],{"__ignoreMap":145},[149,162406,162407,162409,162412],{"class":151,"line":152},[149,162408,33653],{"class":325},[149,162410,162411],{"class":162}," 函数名",[149,162413,33659],{"class":155},[149,162415,162416],{"class":151,"line":193},[149,162417,162418],{"class":155},"    函数体\n",[24,162420,16846],{},[140,162422,162424],{"className":32084,"code":162423,"language":32086,"meta":145,"style":145},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[48,162425,162426,162435,162445,162455,162459,162463],{"__ignoreMap":145},[149,162427,162428,162430,162433],{"class":151,"line":152},[149,162429,33653],{"class":325},[149,162431,162432],{"class":162}," say_hello",[149,162434,33659],{"class":155},[149,162436,162437,162439,162441,162443],{"class":151,"line":193},[149,162438,33005],{"class":309},[149,162440,319],{"class":155},[149,162442,7560],{"class":169},[149,162444,1878],{"class":155},[149,162446,162447,162449,162451,162453],{"class":151,"line":235},[149,162448,33005],{"class":309},[149,162450,319],{"class":155},[149,162452,148075],{"class":169},[149,162454,1878],{"class":155},[149,162456,162457],{"class":151,"line":340},[149,162458,4119],{"emptyLinePlaceholder":1800},[149,162460,162461],{"class":151,"line":346},[149,162462,4119],{"emptyLinePlaceholder":1800},[149,162464,162465],{"class":151,"line":352},[149,162466,162467],{"class":155},"say_hello()\n",[24,162469,866],{},[125,162471,162472,162475,162478,162481],{},[45,162473,162474],{},"函数必须先定义，再调用。",[45,162476,162477],{},"函数名遵循变量命名规则。",[45,162479,162480],{},"函数体需要缩进。",[45,162482,162483],{},"函数不调用就不会执行。",[14,162485,162487],{"id":162486},"_53-函数调用","5.3 函数调用",[140,162489,162491],{"className":32084,"code":162490,"language":32086,"meta":145,"style":145},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[48,162492,162493,162502,162513,162524,162535,162545,162549,162553,162558],{"__ignoreMap":145},[149,162494,162495,162497,162500],{"class":151,"line":152},[149,162496,33653],{"class":325},[149,162498,162499],{"class":162}," print_menu",[149,162501,33659],{"class":155},[149,162503,162504,162506,162508,162511],{"class":151,"line":193},[149,162505,33005],{"class":309},[149,162507,319],{"class":155},[149,162509,162510],{"class":169},"\"1. 查询\"",[149,162512,1878],{"class":155},[149,162514,162515,162517,162519,162522],{"class":151,"line":235},[149,162516,33005],{"class":309},[149,162518,319],{"class":155},[149,162520,162521],{"class":169},"\"2. 添加\"",[149,162523,1878],{"class":155},[149,162525,162526,162528,162530,162533],{"class":151,"line":340},[149,162527,33005],{"class":309},[149,162529,319],{"class":155},[149,162531,162532],{"class":169},"\"3. 删除\"",[149,162534,1878],{"class":155},[149,162536,162537,162539,162541,162543],{"class":151,"line":346},[149,162538,33005],{"class":309},[149,162540,319],{"class":155},[149,162542,162117],{"class":169},[149,162544,1878],{"class":155},[149,162546,162547],{"class":151,"line":352},[149,162548,4119],{"emptyLinePlaceholder":1800},[149,162550,162551],{"class":151,"line":1021},[149,162552,4119],{"emptyLinePlaceholder":1800},[149,162554,162555],{"class":151,"line":1035},[149,162556,162557],{"class":155},"print_menu()\n",[149,162559,162560],{"class":151,"line":1054},[149,162561,162557],{"class":155},[24,162563,162564],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162566,162568],{"id":162567},"_54-参数","5.4 参数",[24,162570,162571],{},"参数用于向函数传递数据。",[140,162573,162575],{"className":32084,"code":162574,"language":32086,"meta":145,"style":145},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[48,162576,162577,162586,162606,162610,162614,162623],{"__ignoreMap":145},[149,162578,162579,162581,162583],{"class":151,"line":152},[149,162580,33653],{"class":325},[149,162582,162432],{"class":162},[149,162584,162585],{"class":155},"(name):\n",[149,162587,162588,162590,162592,162594,162596,162598,162600,162602,162604],{"class":151,"line":193},[149,162589,33005],{"class":309},[149,162591,319],{"class":155},[149,162593,1921],{"class":325},[149,162595,158490],{"class":169},[149,162597,2756],{"class":309},[149,162599,81491],{"class":155},[149,162601,2805],{"class":309},[149,162603,2115],{"class":169},[149,162605,1878],{"class":155},[149,162607,162608],{"class":151,"line":235},[149,162609,4119],{"emptyLinePlaceholder":1800},[149,162611,162612],{"class":151,"line":340},[149,162613,4119],{"emptyLinePlaceholder":1800},[149,162615,162616,162619,162621],{"class":151,"line":346},[149,162617,162618],{"class":155},"say_hello(",[149,162620,151324],{"class":169},[149,162622,1878],{"class":155},[149,162624,162625,162627,162629],{"class":151,"line":352},[149,162626,162618],{"class":155},[149,162628,152372],{"class":169},[149,162630,1878],{"class":155},[24,162632,162633,162635,162636,162638],{},[48,162634,81491],{}," 是形参，",[48,162637,151324],{}," 是实参。",[24,162640,162641],{},"多个参数：",[140,162643,162645],{"className":32084,"code":162644,"language":32086,"meta":145,"style":145},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[48,162646,162647,162655,162668,162674,162678,162682],{"__ignoreMap":145},[149,162648,162649,162651,162653],{"class":151,"line":152},[149,162650,33653],{"class":325},[149,162652,6925],{"class":162},[149,162654,152529],{"class":155},[149,162656,162657,162660,162662,162664,162666],{"class":151,"line":193},[149,162658,162659],{"class":155},"    result ",[149,162661,166],{"class":325},[149,162663,12583],{"class":155},[149,162665,2344],{"class":325},[149,162667,152540],{"class":155},[149,162669,162670,162672],{"class":151,"line":235},[149,162671,33005],{"class":309},[149,162673,78267],{"class":155},[149,162675,162676],{"class":151,"line":340},[149,162677,4119],{"emptyLinePlaceholder":1800},[149,162679,162680],{"class":151,"line":346},[149,162681,4119],{"emptyLinePlaceholder":1800},[149,162683,162684,162687,162689,162691,162693],{"class":151,"line":352},[149,162685,162686],{"class":155},"add(",[149,162688,2309],{"class":309},[149,162690,329],{"class":155},[149,162692,2561],{"class":309},[149,162694,1878],{"class":155},[24,162696,162697],{},"调用时参数数量必须匹配。",[14,162699,162701],{"id":162700},"_55-返回值","5.5 返回值",[24,162703,162704,162706],{},[48,162705,18756],{}," 用于把函数内部的结果返回给调用者。",[140,162708,162710],{"className":32084,"code":162709,"language":32086,"meta":145,"style":145},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[48,162711,162712,162720,162730,162734,162738,162756],{"__ignoreMap":145},[149,162713,162714,162716,162718],{"class":151,"line":152},[149,162715,33653],{"class":325},[149,162717,6925],{"class":162},[149,162719,152529],{"class":155},[149,162721,162722,162724,162726,162728],{"class":151,"line":193},[149,162723,5808],{"class":325},[149,162725,12583],{"class":155},[149,162727,2344],{"class":325},[149,162729,152540],{"class":155},[149,162731,162732],{"class":151,"line":235},[149,162733,4119],{"emptyLinePlaceholder":1800},[149,162735,162736],{"class":151,"line":340},[149,162737,4119],{"emptyLinePlaceholder":1800},[149,162739,162740,162743,162745,162748,162750,162752,162754],{"class":151,"line":346},[149,162741,162742],{"class":155},"result ",[149,162744,166],{"class":325},[149,162746,162747],{"class":155}," add(",[149,162749,2309],{"class":309},[149,162751,329],{"class":155},[149,162753,2561],{"class":309},[149,162755,1878],{"class":155},[149,162757,162758,162760],{"class":151,"line":352},[149,162759,32121],{"class":309},[149,162761,78267],{"class":155},[24,162763,162764,162765,162767,162768,30091],{},"如果函数没有写 ",[48,162766,18756],{},"，默认返回 ",[48,162769,97366],{},[140,162771,162773],{"className":32084,"code":162772,"language":32086,"meta":145,"style":145},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[48,162774,162775,162783,162793,162797,162801,162810],{"__ignoreMap":145},[149,162776,162777,162779,162781],{"class":151,"line":152},[149,162778,33653],{"class":325},[149,162780,162432],{"class":162},[149,162782,33659],{"class":155},[149,162784,162785,162787,162789,162791],{"class":151,"line":193},[149,162786,33005],{"class":309},[149,162788,319],{"class":155},[149,162790,7560],{"class":169},[149,162792,1878],{"class":155},[149,162794,162795],{"class":151,"line":235},[149,162796,4119],{"emptyLinePlaceholder":1800},[149,162798,162799],{"class":151,"line":340},[149,162800,4119],{"emptyLinePlaceholder":1800},[149,162802,162803,162805,162807],{"class":151,"line":346},[149,162804,162742],{"class":155},[149,162806,166],{"class":325},[149,162808,162809],{"class":155}," say_hello()\n",[149,162811,162812,162814,162817],{"class":151,"line":352},[149,162813,32121],{"class":309},[149,162815,162816],{"class":155},"(result)  ",[149,162818,162819],{"class":295},"# None\n",[14,162821,162823],{"id":162822},"_56-return的作用","5.6 return的作用",[24,162825,162826,162828],{},[48,162827,18756],{}," 有两个作用：",[125,162830,162831,162834],{},[45,162832,162833],{},"返回结果。",[45,162835,162836],{},"结束函数。",[140,162838,162840],{"className":32084,"code":162839,"language":32086,"meta":145,"style":145},"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",[48,162841,162842,162852,162864,162871,162875,162887,162894,162898,162905,162909,162913,162924],{"__ignoreMap":145},[149,162843,162844,162846,162849],{"class":151,"line":152},[149,162845,33653],{"class":325},[149,162847,162848],{"class":162}," check_age",[149,162850,162851],{"class":155},"(age):\n",[149,162853,162854,162856,162858,162860,162862],{"class":151,"line":193},[149,162855,4819],{"class":325},[149,162857,17417],{"class":155},[149,162859,156],{"class":325},[149,162861,5811],{"class":309},[149,162863,5457],{"class":155},[149,162865,162866,162868],{"class":151,"line":235},[149,162867,16464],{"class":325},[149,162869,162870],{"class":169}," \"年龄不合法\"\n",[149,162872,162873],{"class":151,"line":340},[149,162874,4119],{"emptyLinePlaceholder":1800},[149,162876,162877,162879,162881,162883,162885],{"class":151,"line":346},[149,162878,4819],{"class":325},[149,162880,17417],{"class":155},[149,162882,3430],{"class":325},[149,162884,157721],{"class":309},[149,162886,5457],{"class":155},[149,162888,162889,162891],{"class":151,"line":352},[149,162890,16464],{"class":325},[149,162892,162893],{"class":169}," \"成年人\"\n",[149,162895,162896],{"class":151,"line":1021},[149,162897,4119],{"emptyLinePlaceholder":1800},[149,162899,162900,162902],{"class":151,"line":1035},[149,162901,5808],{"class":325},[149,162903,162904],{"class":169}," \"未成年人\"\n",[149,162906,162907],{"class":151,"line":1054},[149,162908,4119],{"emptyLinePlaceholder":1800},[149,162910,162911],{"class":151,"line":1072},[149,162912,4119],{"emptyLinePlaceholder":1800},[149,162914,162915,162917,162920,162922],{"class":151,"line":1090},[149,162916,32121],{"class":309},[149,162918,162919],{"class":155},"(check_age(",[149,162921,2561],{"class":309},[149,162923,32203],{"class":155},[149,162925,162926,162928,162930,162932,162934],{"class":151,"line":1633},[149,162927,32121],{"class":309},[149,162929,162919],{"class":155},[149,162931,2395],{"class":325},[149,162933,830],{"class":309},[149,162935,32203],{"class":155},[24,162937,162938,162939,162941],{},"函数执行到 ",[48,162940,18756],{}," 后，后面的代码不会继续执行。",[14,162943,162945],{"id":162944},"_57-none","5.7 None",[24,162947,162948,162950],{},[48,162949,97366],{}," 表示空值或没有结果。",[24,162952,162953],{},"常见使用场景：",[125,162955,162956,162959,162962],{},[45,162957,162958],{},"函数没有返回值。",[45,162960,162961],{},"变量暂时没有具体值。",[45,162963,162964],{},"表示查询不到结果。",[140,162966,162968],{"className":32084,"code":162967,"language":32086,"meta":145,"style":145},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[48,162969,162970,162978,162982,162995],{"__ignoreMap":145},[149,162971,162972,162974,162976],{"class":151,"line":152},[149,162973,162742],{"class":155},[149,162975,166],{"class":325},[149,162977,153608],{"class":309},[149,162979,162980],{"class":151,"line":193},[149,162981,4119],{"emptyLinePlaceholder":1800},[149,162983,162984,162986,162989,162991,162993],{"class":151,"line":235},[149,162985,3255],{"class":325},[149,162987,162988],{"class":155}," result ",[149,162990,40633],{"class":325},[149,162992,40639],{"class":309},[149,162994,5457],{"class":155},[149,162996,162997,162999,163001,163004],{"class":151,"line":340},[149,162998,33005],{"class":309},[149,163000,319],{"class":155},[149,163002,163003],{"class":169},"\"没有数据\"",[149,163005,1878],{"class":155},[24,163007,163008,163009,163011,163012,163015,163016,30091],{},"判断 ",[48,163010,97366],{}," 推荐使用 ",[48,163013,163014],{},"is None","，不要写成 ",[48,163017,163018],{},"== None",[14,163020,163022],{"id":163021},"_58-函数文档字符串","5.8 函数文档字符串",[24,163024,163025],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[140,163027,163029],{"className":32084,"code":163028,"language":32086,"meta":145,"style":145},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[48,163030,163031,163041,163046],{"__ignoreMap":145},[149,163032,163033,163035,163038],{"class":151,"line":152},[149,163034,33653],{"class":325},[149,163036,163037],{"class":162}," calculate_bmi",[149,163039,163040],{"class":155},"(weight, height):\n",[149,163042,163043],{"class":151,"line":193},[149,163044,163045],{"class":169},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[149,163047,163048,163050,163053,163055,163058,163060],{"class":151,"line":235},[149,163049,5808],{"class":325},[149,163051,163052],{"class":155}," weight ",[149,163054,2447],{"class":325},[149,163056,163057],{"class":155}," height ",[149,163059,12375],{"class":325},[149,163061,49429],{"class":309},[24,163063,163064],{},"查看说明：",[140,163066,163068],{"className":32084,"code":163067,"language":32086,"meta":145,"style":145},"help(calculate_bmi)\n",[48,163069,163070],{"__ignoreMap":145},[149,163071,163072,163075],{"class":151,"line":152},[149,163073,163074],{"class":309},"help",[149,163076,163077],{"class":155},"(calculate_bmi)\n",[24,163079,163080],{},"较完整的写法：",[140,163082,163084],{"className":32084,"code":163083,"language":32086,"meta":145,"style":145},"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",[48,163085,163086,163094,163099,163104,163108,163113,163118,163123,163127],{"__ignoreMap":145},[149,163087,163088,163090,163092],{"class":151,"line":152},[149,163089,33653],{"class":325},[149,163091,163037],{"class":162},[149,163093,163040],{"class":155},[149,163095,163096],{"class":151,"line":193},[149,163097,163098],{"class":169},"    \"\"\"\n",[149,163100,163101],{"class":151,"line":235},[149,163102,163103],{"class":169},"    计算BMI。\n",[149,163105,163106],{"class":151,"line":340},[149,163107,4119],{"emptyLinePlaceholder":1800},[149,163109,163110],{"class":151,"line":346},[149,163111,163112],{"class":169},"    :param weight: 体重，单位kg\n",[149,163114,163115],{"class":151,"line":352},[149,163116,163117],{"class":169},"    :param height: 身高，单位m\n",[149,163119,163120],{"class":151,"line":1021},[149,163121,163122],{"class":169},"    :return: BMI数值\n",[149,163124,163125],{"class":151,"line":1035},[149,163126,163098],{"class":169},[149,163128,163129,163131,163133,163135,163137,163139],{"class":151,"line":1054},[149,163130,5808],{"class":325},[149,163132,163052],{"class":155},[149,163134,2447],{"class":325},[149,163136,163057],{"class":155},[149,163138,12375],{"class":325},[149,163140,49429],{"class":309},[14,163142,163144],{"id":163143},"_59-变量作用域","5.9 变量作用域",[19,163146,163148],{"id":163147},"_591-局部变量","5.9.1 局部变量",[24,163150,163151],{},"在函数内部定义的变量，只能在函数内部使用。",[140,163153,163155],{"className":32084,"code":163154,"language":32086,"meta":145,"style":145},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[48,163156,163157,163166,163174,163180,163184,163188,163193],{"__ignoreMap":145},[149,163158,163159,163161,163164],{"class":151,"line":152},[149,163160,33653],{"class":325},[149,163162,163163],{"class":162}," test",[149,163165,33659],{"class":155},[149,163167,163168,163170,163172],{"class":151,"line":193},[149,163169,47299],{"class":155},[149,163171,166],{"class":325},[149,163173,60119],{"class":309},[149,163175,163176,163178],{"class":151,"line":235},[149,163177,33005],{"class":309},[149,163179,1885],{"class":155},[149,163181,163182],{"class":151,"line":340},[149,163183,4119],{"emptyLinePlaceholder":1800},[149,163185,163186],{"class":151,"line":346},[149,163187,4119],{"emptyLinePlaceholder":1800},[149,163189,163190],{"class":151,"line":352},[149,163191,163192],{"class":155},"test()\n",[149,163194,163195,163197,163200],{"class":151,"line":1021},[149,163196,32121],{"class":309},[149,163198,163199],{"class":155},"(num)  ",[149,163201,163202],{"class":295},"# 报错\n",[19,163204,163206],{"id":163205},"_592-全局变量","5.9.2 全局变量",[24,163208,163209],{},"在函数外部定义的变量，可以在函数内部读取。",[140,163211,163213],{"className":32084,"code":163212,"language":32086,"meta":145,"style":145},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[48,163214,163215,163223,163227,163231,163239,163245,163249,163253],{"__ignoreMap":145},[149,163216,163217,163219,163221],{"class":151,"line":152},[149,163218,147972],{"class":155},[149,163220,166],{"class":325},[149,163222,150789],{"class":169},[149,163224,163225],{"class":151,"line":193},[149,163226,4119],{"emptyLinePlaceholder":1800},[149,163228,163229],{"class":151,"line":235},[149,163230,4119],{"emptyLinePlaceholder":1800},[149,163232,163233,163235,163237],{"class":151,"line":340},[149,163234,33653],{"class":325},[149,163236,162432],{"class":162},[149,163238,33659],{"class":155},[149,163240,163241,163243],{"class":151,"line":346},[149,163242,33005],{"class":309},[149,163244,152096],{"class":155},[149,163246,163247],{"class":151,"line":352},[149,163248,4119],{"emptyLinePlaceholder":1800},[149,163250,163251],{"class":151,"line":1021},[149,163252,4119],{"emptyLinePlaceholder":1800},[149,163254,163255],{"class":151,"line":1035},[149,163256,162467],{"class":155},[24,163258,163259,163260,30091],{},"如果要在函数内部修改全局变量，需要 ",[48,163261,163262],{},"global",[140,163264,163266],{"className":32084,"code":163265,"language":32086,"meta":145,"style":145},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[48,163267,163268,163276,163280,163284,163293,163301,163309,163313,163317,163322],{"__ignoreMap":145},[149,163269,163270,163272,163274],{"class":151,"line":152},[149,163271,148127],{"class":155},[149,163273,166],{"class":325},[149,163275,49039],{"class":309},[149,163277,163278],{"class":151,"line":193},[149,163279,4119],{"emptyLinePlaceholder":1800},[149,163281,163282],{"class":151,"line":235},[149,163283,4119],{"emptyLinePlaceholder":1800},[149,163285,163286,163288,163291],{"class":151,"line":340},[149,163287,33653],{"class":325},[149,163289,163290],{"class":162}," add_count",[149,163292,33659],{"class":155},[149,163294,163295,163298],{"class":151,"line":346},[149,163296,163297],{"class":325},"    global",[149,163299,163300],{"class":155}," count\n",[149,163302,163303,163305,163307],{"class":151,"line":352},[149,163304,160869],{"class":155},[149,163306,11191],{"class":325},[149,163308,57391],{"class":309},[149,163310,163311],{"class":151,"line":1021},[149,163312,4119],{"emptyLinePlaceholder":1800},[149,163314,163315],{"class":151,"line":1035},[149,163316,4119],{"emptyLinePlaceholder":1800},[149,163318,163319],{"class":151,"line":1054},[149,163320,163321],{"class":155},"add_count()\n",[149,163323,163324,163326],{"class":151,"line":1072},[149,163325,32121],{"class":309},[149,163327,163328],{"class":155},"(count)\n",[24,163330,163331],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163333,163335],{"id":163334},"_510-函数嵌套调用","5.10 函数嵌套调用",[24,163337,163338],{},"一个函数中可以调用另一个函数。",[140,163340,163342],{"className":32084,"code":163341,"language":32086,"meta":145,"style":145},"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",[48,163343,163344,163353,163367,163371,163375,163384,163389,163409,163430,163434,163438,163442],{"__ignoreMap":145},[149,163345,163346,163348,163351],{"class":151,"line":152},[149,163347,33653],{"class":325},[149,163349,163350],{"class":162}," print_line",[149,163352,33659],{"class":155},[149,163354,163355,163357,163359,163361,163363,163365],{"class":151,"line":193},[149,163356,33005],{"class":309},[149,163358,319],{"class":155},[149,163360,34189],{"class":169},[149,163362,8234],{"class":325},[149,163364,80347],{"class":309},[149,163366,1878],{"class":155},[149,163368,163369],{"class":151,"line":235},[149,163370,4119],{"emptyLinePlaceholder":1800},[149,163372,163373],{"class":151,"line":340},[149,163374,4119],{"emptyLinePlaceholder":1800},[149,163376,163377,163379,163382],{"class":151,"line":346},[149,163378,33653],{"class":325},[149,163380,163381],{"class":162}," print_info",[149,163383,150811],{"class":155},[149,163385,163386],{"class":151,"line":352},[149,163387,163388],{"class":155},"    print_line()\n",[149,163390,163391,163393,163395,163397,163399,163401,163403,163405,163407],{"class":151,"line":1021},[149,163392,33005],{"class":309},[149,163394,319],{"class":155},[149,163396,1921],{"class":325},[149,163398,158118],{"class":169},[149,163400,2756],{"class":309},[149,163402,81491],{"class":155},[149,163404,2805],{"class":309},[149,163406,2115],{"class":169},[149,163408,1878],{"class":155},[149,163410,163411,163413,163415,163417,163420,163422,163424,163426,163428],{"class":151,"line":1035},[149,163412,33005],{"class":309},[149,163414,319],{"class":155},[149,163416,1921],{"class":325},[149,163418,163419],{"class":169},"\"年龄:",[149,163421,2756],{"class":309},[149,163423,71905],{"class":155},[149,163425,2805],{"class":309},[149,163427,2115],{"class":169},[149,163429,1878],{"class":155},[149,163431,163432],{"class":151,"line":1054},[149,163433,163388],{"class":155},[149,163435,163436],{"class":151,"line":1072},[149,163437,4119],{"emptyLinePlaceholder":1800},[149,163439,163440],{"class":151,"line":1090},[149,163441,4119],{"emptyLinePlaceholder":1800},[149,163443,163444,163447,163449,163451,163453],{"class":151,"line":1633},[149,163445,163446],{"class":155},"print_info(",[149,163448,151324],{"class":169},[149,163450,329],{"class":155},[149,163452,2513],{"class":309},[149,163454,1878],{"class":155},[24,163456,163457],{},"这种方式可以把小功能组合成大功能。",[14,163459,163461],{"id":163460},"_511-参数检查","5.11 参数检查",[24,163463,163464],{},"函数内部可以检查参数是否合法。",[140,163466,163468],{"className":32084,"code":163467,"language":32086,"meta":145,"style":145},"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",[48,163469,163470,163479,163491,163497,163507,163511,163515,163532,163536,163548,163559,163565],{"__ignoreMap":145},[149,163471,163472,163474,163477],{"class":151,"line":152},[149,163473,33653],{"class":325},[149,163475,163476],{"class":162}," divide",[149,163478,152529],{"class":155},[149,163480,163481,163483,163485,163487,163489],{"class":151,"line":193},[149,163482,4819],{"class":325},[149,163484,12596],{"class":155},[149,163486,4667],{"class":325},[149,163488,5811],{"class":309},[149,163490,5457],{"class":155},[149,163492,163493,163495],{"class":151,"line":235},[149,163494,16464],{"class":325},[149,163496,153608],{"class":309},[149,163498,163499,163501,163503,163505],{"class":151,"line":340},[149,163500,5808],{"class":325},[149,163502,12583],{"class":155},[149,163504,2447],{"class":325},[149,163506,152540],{"class":155},[149,163508,163509],{"class":151,"line":346},[149,163510,4119],{"emptyLinePlaceholder":1800},[149,163512,163513],{"class":151,"line":352},[149,163514,4119],{"emptyLinePlaceholder":1800},[149,163516,163517,163519,163521,163524,163526,163528,163530],{"class":151,"line":1021},[149,163518,162742],{"class":155},[149,163520,166],{"class":325},[149,163522,163523],{"class":155}," divide(",[149,163525,2309],{"class":309},[149,163527,329],{"class":155},[149,163529,2056],{"class":309},[149,163531,1878],{"class":155},[149,163533,163534],{"class":151,"line":1035},[149,163535,4119],{"emptyLinePlaceholder":1800},[149,163537,163538,163540,163542,163544,163546],{"class":151,"line":1054},[149,163539,3255],{"class":325},[149,163541,162988],{"class":155},[149,163543,40633],{"class":325},[149,163545,40639],{"class":309},[149,163547,5457],{"class":155},[149,163549,163550,163552,163554,163557],{"class":151,"line":1072},[149,163551,33005],{"class":309},[149,163553,319],{"class":155},[149,163555,163556],{"class":169},"\"除数不能为0\"",[149,163558,1878],{"class":155},[149,163560,163561,163563],{"class":151,"line":1090},[149,163562,3421],{"class":325},[149,163564,5457],{"class":155},[149,163566,163567,163569],{"class":151,"line":1633},[149,163568,33005],{"class":309},[149,163570,78267],{"class":155},[14,163572,163574],{"id":163573},"_512-类型提示","5.12 类型提示",[24,163576,163577],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[140,163579,163581],{"className":32084,"code":163580,"language":32086,"meta":145,"style":145},"def add(a: int, b: int) -> int:\n    return a + b\n",[48,163582,163583,163606],{"__ignoreMap":145},[149,163584,163585,163587,163589,163592,163594,163597,163599,163602,163604],{"class":151,"line":152},[149,163586,33653],{"class":325},[149,163588,6925],{"class":162},[149,163590,163591],{"class":155},"(a: ",[149,163593,1875],{"class":309},[149,163595,163596],{"class":155},", b: ",[149,163598,1875],{"class":309},[149,163600,163601],{"class":155},") -> ",[149,163603,1875],{"class":309},[149,163605,5457],{"class":155},[149,163607,163608,163610,163612,163614],{"class":151,"line":193},[149,163609,5808],{"class":325},[149,163611,12583],{"class":155},[149,163613,2344],{"class":325},[149,163615,152540],{"class":155},[24,163617,163618],{},"字符串参数：",[140,163620,163622],{"className":32084,"code":163621,"language":32086,"meta":145,"style":145},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[48,163623,163624,163641],{"__ignoreMap":145},[149,163625,163626,163628,163630,163633,163635,163637,163639],{"class":151,"line":152},[149,163627,33653],{"class":325},[149,163629,162432],{"class":162},[149,163631,163632],{"class":155},"(name: ",[149,163634,3027],{"class":309},[149,163636,163601],{"class":155},[149,163638,97366],{"class":309},[149,163640,5457],{"class":155},[149,163642,163643,163645,163647,163649,163651,163653,163655,163657,163659],{"class":151,"line":193},[149,163644,33005],{"class":309},[149,163646,319],{"class":155},[149,163648,1921],{"class":325},[149,163650,158490],{"class":169},[149,163652,2756],{"class":309},[149,163654,81491],{"class":155},[149,163656,2805],{"class":309},[149,163658,2115],{"class":169},[149,163660,1878],{"class":155},[24,163662,163663],{},"列表参数：",[140,163665,163667],{"className":32084,"code":163666,"language":32086,"meta":145,"style":145},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[48,163668,163669,163688,163696,163708,163717],{"__ignoreMap":145},[149,163670,163671,163673,163676,163679,163681,163684,163686],{"class":151,"line":152},[149,163672,33653],{"class":325},[149,163674,163675],{"class":162}," get_total",[149,163677,163678],{"class":155},"(numbers: list[",[149,163680,1875],{"class":309},[149,163682,163683],{"class":155},"]) -> ",[149,163685,1875],{"class":309},[149,163687,5457],{"class":155},[149,163689,163690,163692,163694],{"class":151,"line":193},[149,163691,160743],{"class":155},[149,163693,166],{"class":325},[149,163695,49039],{"class":309},[149,163697,163698,163700,163703,163705],{"class":151,"line":235},[149,163699,4919],{"class":325},[149,163701,163702],{"class":155}," number ",[149,163704,27752],{"class":325},[149,163706,163707],{"class":155}," numbers:\n",[149,163709,163710,163712,163714],{"class":151,"line":340},[149,163711,161418],{"class":155},[149,163713,11191],{"class":325},[149,163715,163716],{"class":155}," number\n",[149,163718,163719,163721],{"class":151,"line":346},[149,163720,5808],{"class":325},[149,163722,163723],{"class":155}," total\n",[24,163725,163726],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163728,163730],{"id":163729},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[140,163732,163734],{"className":32084,"code":163733,"language":32086,"meta":145,"style":145},"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",[48,163735,163736,163746,163750,163754,163762,163773,163783,163793,163803,163813,163817,163821,163830,163852,163856,163860,163869,163875,163895,163907,163918,163922,163931,163942,163947,163951,163955,163964,163970,163989,164001,164011,164015,164026,164036,164040,164048,164059,164063,164067,164071,164079,164084,164098,164102,164114,164119,164131,164136,164148,164153,164165,164175,164179,164185],{"__ignoreMap":145},[149,163737,163738,163741,163743],{"class":151,"line":152},[149,163739,163740],{"class":155},"balance ",[149,163742,166],{"class":325},[149,163744,163745],{"class":309}," 1000\n",[149,163747,163748],{"class":151,"line":193},[149,163749,4119],{"emptyLinePlaceholder":1800},[149,163751,163752],{"class":151,"line":235},[149,163753,4119],{"emptyLinePlaceholder":1800},[149,163755,163756,163758,163760],{"class":151,"line":340},[149,163757,33653],{"class":325},[149,163759,153469],{"class":162},[149,163761,33659],{"class":155},[149,163763,163764,163766,163768,163771],{"class":151,"line":346},[149,163765,33005],{"class":309},[149,163767,319],{"class":155},[149,163769,163770],{"class":169},"\"====== ATM ======\"",[149,163772,1878],{"class":155},[149,163774,163775,163777,163779,163781],{"class":151,"line":352},[149,163776,33005],{"class":309},[149,163778,319],{"class":155},[149,163780,162084],{"class":169},[149,163782,1878],{"class":155},[149,163784,163785,163787,163789,163791],{"class":151,"line":1021},[149,163786,33005],{"class":309},[149,163788,319],{"class":155},[149,163790,162095],{"class":169},[149,163792,1878],{"class":155},[149,163794,163795,163797,163799,163801],{"class":151,"line":1035},[149,163796,33005],{"class":309},[149,163798,319],{"class":155},[149,163800,162106],{"class":169},[149,163802,1878],{"class":155},[149,163804,163805,163807,163809,163811],{"class":151,"line":1054},[149,163806,33005],{"class":309},[149,163808,319],{"class":155},[149,163810,162117],{"class":169},[149,163812,1878],{"class":155},[149,163814,163815],{"class":151,"line":1072},[149,163816,4119],{"emptyLinePlaceholder":1800},[149,163818,163819],{"class":151,"line":1090},[149,163820,4119],{"emptyLinePlaceholder":1800},[149,163822,163823,163825,163828],{"class":151,"line":1633},[149,163824,33653],{"class":325},[149,163826,163827],{"class":162}," show_balance",[149,163829,33659],{"class":155},[149,163831,163832,163834,163836,163838,163841,163843,163846,163848,163850],{"class":151,"line":1644},[149,163833,33005],{"class":309},[149,163835,319],{"class":155},[149,163837,1921],{"class":325},[149,163839,163840],{"class":169},"\"当前余额:",[149,163842,2756],{"class":309},[149,163844,163845],{"class":155},"balance",[149,163847,2805],{"class":309},[149,163849,158448],{"class":169},[149,163851,1878],{"class":155},[149,163853,163854],{"class":151,"line":3348},[149,163855,4119],{"emptyLinePlaceholder":1800},[149,163857,163858],{"class":151,"line":3362},[149,163859,4119],{"emptyLinePlaceholder":1800},[149,163861,163862,163864,163867],{"class":151,"line":3367},[149,163863,33653],{"class":325},[149,163865,163866],{"class":162}," save_money",[149,163868,33659],{"class":155},[149,163870,163871,163873],{"class":151,"line":3373},[149,163872,163297],{"class":325},[149,163874,151535],{"class":155},[149,163876,163877,163880,163882,163884,163886,163888,163890,163893],{"class":151,"line":3394},[149,163878,163879],{"class":155},"    money ",[149,163881,166],{"class":325},[149,163883,111476],{"class":309},[149,163885,319],{"class":155},[149,163887,504],{"class":309},[149,163889,319],{"class":155},[149,163891,163892],{"class":169},"\"请输入存款金额:\"",[149,163894,32203],{"class":155},[149,163896,163897,163899,163901,163903,163905],{"class":151,"line":3399},[149,163898,4819],{"class":325},[149,163900,151578],{"class":155},[149,163902,3311],{"class":325},[149,163904,5811],{"class":309},[149,163906,5457],{"class":155},[149,163908,163909,163911,163913,163916],{"class":151,"line":3413},[149,163910,34157],{"class":309},[149,163912,319],{"class":155},[149,163914,163915],{"class":169},"\"金额必须大于0\"",[149,163917,1878],{"class":155},[149,163919,163920],{"class":151,"line":3418},[149,163921,153797],{"class":325},[149,163923,163924,163927,163929],{"class":151,"line":3447},[149,163925,163926],{"class":155},"    balance ",[149,163928,11191],{"class":325},[149,163930,151611],{"class":155},[149,163932,163933,163935,163937,163940],{"class":151,"line":3452},[149,163934,33005],{"class":309},[149,163936,319],{"class":155},[149,163938,163939],{"class":169},"\"存款成功\"",[149,163941,1878],{"class":155},[149,163943,163944],{"class":151,"line":3469},[149,163945,163946],{"class":155},"    show_balance()\n",[149,163948,163949],{"class":151,"line":3474},[149,163950,4119],{"emptyLinePlaceholder":1800},[149,163952,163953],{"class":151,"line":3479},[149,163954,4119],{"emptyLinePlaceholder":1800},[149,163956,163957,163959,163962],{"class":151,"line":3484},[149,163958,33653],{"class":325},[149,163960,163961],{"class":162}," withdraw_money",[149,163963,33659],{"class":155},[149,163965,163966,163968],{"class":151,"line":3498},[149,163967,163297],{"class":325},[149,163969,151535],{"class":155},[149,163971,163972,163974,163976,163978,163980,163982,163984,163987],{"class":151,"line":3503},[149,163973,163879],{"class":155},[149,163975,166],{"class":325},[149,163977,111476],{"class":309},[149,163979,319],{"class":155},[149,163981,504],{"class":309},[149,163983,319],{"class":155},[149,163985,163986],{"class":169},"\"请输入取款金额:\"",[149,163988,32203],{"class":155},[149,163990,163991,163993,163995,163997,163999],{"class":151,"line":4296},[149,163992,4819],{"class":325},[149,163994,151578],{"class":155},[149,163996,3311],{"class":325},[149,163998,5811],{"class":309},[149,164000,5457],{"class":155},[149,164002,164003,164005,164007,164009],{"class":151,"line":4310},[149,164004,34157],{"class":309},[149,164006,319],{"class":155},[149,164008,163915],{"class":169},[149,164010,1878],{"class":155},[149,164012,164013],{"class":151,"line":4318},[149,164014,153797],{"class":325},[149,164016,164017,164019,164021,164023],{"class":151,"line":4323},[149,164018,4819],{"class":325},[149,164020,151578],{"class":155},[149,164022,2819],{"class":325},[149,164024,164025],{"class":155}," balance:\n",[149,164027,164028,164030,164032,164034],{"class":151,"line":4329},[149,164029,34157],{"class":309},[149,164031,319],{"class":155},[149,164033,151673],{"class":169},[149,164035,1878],{"class":155},[149,164037,164038],{"class":151,"line":4335},[149,164039,153797],{"class":325},[149,164041,164042,164044,164046],{"class":151,"line":4340},[149,164043,163926],{"class":155},[149,164045,151688],{"class":325},[149,164047,151611],{"class":155},[149,164049,164050,164052,164054,164057],{"class":151,"line":9663},[149,164051,33005],{"class":309},[149,164053,319],{"class":155},[149,164055,164056],{"class":169},"\"取款成功\"",[149,164058,1878],{"class":155},[149,164060,164061],{"class":151,"line":9687},[149,164062,163946],{"class":155},[149,164064,164065],{"class":151,"line":9692},[149,164066,4119],{"emptyLinePlaceholder":1800},[149,164068,164069],{"class":151,"line":9698},[149,164070,4119],{"emptyLinePlaceholder":1800},[149,164072,164073,164075,164077],{"class":151,"line":9725},[149,164074,110342],{"class":325},[149,164076,96972],{"class":309},[149,164078,5457],{"class":155},[149,164080,164081],{"class":151,"line":9730},[149,164082,164083],{"class":155},"    show_menu()\n",[149,164085,164086,164088,164090,164092,164094,164096],{"class":151,"line":9736},[149,164087,162128],{"class":155},[149,164089,166],{"class":325},[149,164091,62296],{"class":309},[149,164093,319],{"class":155},[149,164095,154509],{"class":169},[149,164097,1878],{"class":155},[149,164099,164100],{"class":151,"line":9748},[149,164101,4119],{"emptyLinePlaceholder":1800},[149,164103,164104,164106,164108,164110,164112],{"class":151,"line":9760},[149,164105,4819],{"class":325},[149,164107,154522],{"class":155},[149,164109,4667],{"class":325},[149,164111,154527],{"class":169},[149,164113,5457],{"class":155},[149,164115,164116],{"class":151,"line":9772},[149,164117,164118],{"class":155},"        show_balance()\n",[149,164120,164121,164123,164125,164127,164129],{"class":151,"line":11430},[149,164122,40999],{"class":325},[149,164124,154522],{"class":155},[149,164126,4667],{"class":325},[149,164128,154546],{"class":169},[149,164130,5457],{"class":155},[149,164132,164133],{"class":151,"line":11455},[149,164134,164135],{"class":155},"        save_money()\n",[149,164137,164138,164140,164142,164144,164146],{"class":151,"line":11478},[149,164139,40999],{"class":325},[149,164141,154522],{"class":155},[149,164143,4667],{"class":325},[149,164145,154564],{"class":169},[149,164147,5457],{"class":155},[149,164149,164150],{"class":151,"line":11502},[149,164151,164152],{"class":155},"        withdraw_money()\n",[149,164154,164155,164157,164159,164161,164163],{"class":151,"line":11507},[149,164156,40999],{"class":325},[149,164158,154522],{"class":155},[149,164160,4667],{"class":325},[149,164162,154618],{"class":169},[149,164164,5457],{"class":155},[149,164166,164167,164169,164171,164173],{"class":151,"line":11512},[149,164168,34157],{"class":309},[149,164170,319],{"class":155},[149,164172,154629],{"class":169},[149,164174,1878],{"class":155},[149,164176,164177],{"class":151,"line":11517},[149,164178,33333],{"class":325},[149,164180,164181,164183],{"class":151,"line":11526},[149,164182,159458],{"class":325},[149,164184,5457],{"class":155},[149,164186,164187,164189,164191,164193],{"class":151,"line":11531},[149,164188,34157],{"class":309},[149,164190,319],{"class":155},[149,164192,154650],{"class":169},[149,164194,1878],{"class":155},[24,164196,164197],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164199,164201],{"id":164200},"_514-易错点","5.14 易错点",[125,164203,164204,164207,164210,164215,164220,164223],{},[45,164205,164206],{},"函数定义后必须调用才会执行。",[45,164208,164209],{},"函数名后面有括号才是调用。",[45,164211,164212,164214],{},[48,164213,18756],{}," 后面的代码不会执行。",[45,164216,164217,164218,30091],{},"没有返回值的函数默认返回 ",[48,164219,97366],{},[45,164221,164222],{},"局部变量不能在函数外部访问。",[45,164224,164225,164226,164228],{},"不要滥用 ",[48,164227,163262],{},"，更好的方式是让函数返回新值。",[24,164230,164231,164232,164234],{},"例如不用 ",[48,164233,163262],{}," 改写存款：",[140,164236,164238],{"className":32084,"code":164237,"language":32086,"meta":145,"style":145},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[48,164239,164240,164249,164260,164264,164268,164276,164289],{"__ignoreMap":145},[149,164241,164242,164244,164246],{"class":151,"line":152},[149,164243,33653],{"class":325},[149,164245,163866],{"class":162},[149,164247,164248],{"class":155},"(balance, money):\n",[149,164250,164251,164253,164256,164258],{"class":151,"line":193},[149,164252,5808],{"class":325},[149,164254,164255],{"class":155}," balance ",[149,164257,2344],{"class":325},[149,164259,151611],{"class":155},[149,164261,164262],{"class":151,"line":235},[149,164263,4119],{"emptyLinePlaceholder":1800},[149,164265,164266],{"class":151,"line":340},[149,164267,4119],{"emptyLinePlaceholder":1800},[149,164269,164270,164272,164274],{"class":151,"line":346},[149,164271,163740],{"class":155},[149,164273,166],{"class":325},[149,164275,163745],{"class":309},[149,164277,164278,164280,164282,164285,164287],{"class":151,"line":352},[149,164279,163740],{"class":155},[149,164281,166],{"class":325},[149,164283,164284],{"class":155}," save_money(balance, ",[149,164286,3442],{"class":309},[149,164288,1878],{"class":155},[149,164290,164291,164293],{"class":151,"line":1021},[149,164292,32121],{"class":309},[149,164294,164295],{"class":155},"(balance)\n",[14,164297,164299],{"id":164298},"_515-本章练习","5.15 本章练习",[125,164301,164302,164309,164315,164321,164327],{},[45,164303,164304,164305,164308],{},"定义函数 ",[48,164306,164307],{},"print_student(name, age)","，输出学生信息。",[45,164310,164304,164311,164314],{},[48,164312,164313],{},"get_max(a, b, c)","，返回三个数中的最大值。",[45,164316,164304,164317,164320],{},[48,164318,164319],{},"is_even(num)","，判断一个数是否为偶数。",[45,164322,164304,164323,164326],{},[48,164324,164325],{},"calculate_bmi(weight, height)","，返回 BMI。",[45,164328,164329],{},"把第 4 章的菜单程序拆分成多个函数。",[1783,164331,164332],{},"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":145,"searchDepth":193,"depth":193,"links":164334},[164335,164336,164337,164338,164339,164340,164341,164342,164343,164347,164348,164349,164350,164351,164352],{"id":162355,"depth":193,"text":162356},{"id":162396,"depth":193,"text":162397},{"id":162486,"depth":193,"text":162487},{"id":162567,"depth":193,"text":162568},{"id":162700,"depth":193,"text":162701},{"id":162822,"depth":193,"text":162823},{"id":162944,"depth":193,"text":162945},{"id":163021,"depth":193,"text":163022},{"id":163143,"depth":193,"text":163144,"children":164344},[164345,164346],{"id":163147,"depth":235,"text":163148},{"id":163205,"depth":235,"text":163206},{"id":163334,"depth":193,"text":163335},{"id":163460,"depth":193,"text":163461},{"id":163573,"depth":193,"text":163574},{"id":163729,"depth":193,"text":163730},{"id":164200,"depth":193,"text":164201},{"id":164298,"depth":193,"text":164299},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162347,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164359,"title":164360,"body":164361,"description":1797,"extension":1798,"meta":167405,"navigation":1800,"path":167406,"seo":167407,"stem":167408,"__hash__":167409},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164362,"toc":167386},[164363,164366,164370,164373,164376,164480,164483,164487,164490,164570,164573,164577,164580,164640,164643,164679,164682,164697,164701,164774,164777,164832,164835,164905,164908,164992,165002,165060,165064,165109,165112,165138,165141,165247,165251,165254,165296,165299,165363,165366,165370,165373,165434,165437,165467,165470,165508,165512,165515,165524,165527,165651,165654,165695,165699,165702,165713,165753,165756,165771,165776,165779,165846,165849,165939,165943,165946,165994,165997,166024,166026,166056,166059,166079,166082,166113,166116,166149,166153,166156,166180,166183,166207,166210,166234,166238,166241,166371,166374,166454,166457,166532,166536,166539,166589,166592,166634,166637,166661,166663,166687,166690,166745,166748,166814,166818,166821,166824,166862,166865,166918,166921,166967,166970,167003,167006,167010,167329,167333,167362,167366,167383],[10,164364,164360],{"id":164365},"_6-数据容器",[14,164367,164369],{"id":164368},"_61-什么是数据容器","6.1 什么是数据容器",[24,164371,164372],{},"数据容器用于一次保存多个数据。",[24,164374,164375],{},"常见容器：",[2003,164377,164378,164395],{},[2006,164379,164380],{},[2009,164381,164382,164384,164387,164390,164393],{},[2012,164383,27480],{},[2012,164385,164386],{},"是否有序",[2012,164388,164389],{},"是否可变",[2012,164391,164392],{},"是否允许重复",[2012,164394,29201],{},[2049,164396,164397,164415,164431,164446,164463],{},[2009,164398,164399,164402,164405,164408,164411],{},[2054,164400,164401],{},"list列表",[2054,164403,164404],{},"有序",[2054,164406,164407],{},"可变",[2054,164409,164410],{},"允许",[2054,164412,164413],{},[48,164414,156693],{},[2009,164416,164417,164420,164422,164425,164427],{},[2054,164418,164419],{},"tuple元组",[2054,164421,164404],{},[2054,164423,164424],{},"不可变",[2054,164426,164410],{},[2054,164428,164429],{},[48,164430,156706],{},[2009,164432,164433,164436,164438,164440,164442],{},[2054,164434,164435],{},"str字符串",[2054,164437,164404],{},[2054,164439,164424],{},[2054,164441,164410],{},[2054,164443,164444],{},[48,164445,157316],{},[2009,164447,164448,164451,164454,164456,164459],{},[2054,164449,164450],{},"set集合",[2054,164452,164453],{},"无序",[2054,164455,164407],{},[2054,164457,164458],{},"不允许",[2054,164460,164461],{},[48,164462,156731],{},[2009,164464,164465,164468,164470,164472,164475],{},[2054,164466,164467],{},"dict字典",[2054,164469,164404],{},[2054,164471,164407],{},[2054,164473,164474],{},"key不允许重复",[2054,164476,164477],{},[48,164478,164479],{},"{\"name\": \"小明\"}",[24,164481,164482],{},"Python 3.7 之后，字典保持插入顺序。",[14,164484,164486],{"id":164485},"_62-列表list","6.2 列表list",[24,164488,164489],{},"列表用于保存一组有顺序的数据。",[140,164491,164493],{"className":32084,"code":164492,"language":32086,"meta":145,"style":145},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[48,164494,164495,164515,164540,164561],{"__ignoreMap":145},[149,164496,164497,164499,164501,164503,164505,164507,164509,164511,164513],{"class":151,"line":152},[149,164498,161816],{"class":155},[149,164500,166],{"class":325},[149,164502,53924],{"class":155},[149,164504,151324],{"class":169},[149,164506,329],{"class":155},[149,164508,152372],{"class":169},[149,164510,329],{"class":155},[149,164512,161167],{"class":169},[149,164514,34952],{"class":155},[149,164516,164517,164520,164522,164524,164526,164528,164530,164532,164534,164536,164538],{"class":151,"line":193},[149,164518,164519],{"class":155},"numbers ",[149,164521,166],{"class":325},[149,164523,53924],{"class":155},[149,164525,830],{"class":309},[149,164527,329],{"class":155},[149,164529,1045],{"class":309},[149,164531,329],{"class":155},[149,164533,1939],{"class":309},[149,164535,329],{"class":155},[149,164537,2157],{"class":309},[149,164539,34952],{"class":155},[149,164541,164542,164545,164547,164549,164551,164553,164555,164557,164559],{"class":151,"line":235},[149,164543,164544],{"class":155},"mixed ",[149,164546,166],{"class":325},[149,164548,53924],{"class":155},[149,164550,151324],{"class":169},[149,164552,329],{"class":155},[149,164554,2513],{"class":309},[149,164556,329],{"class":155},[149,164558,33182],{"class":309},[149,164560,34952],{"class":155},[149,164562,164563,164566,164568],{"class":151,"line":340},[149,164564,164565],{"class":155},"empty ",[149,164567,166],{"class":325},[149,164569,53537],{"class":155},[24,164571,164572],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164574,164576],{"id":164575},"_63-列表索引","6.3 列表索引",[24,164578,164579],{},"正向索引从 0 开始：",[140,164581,164583],{"className":32084,"code":164582,"language":32086,"meta":145,"style":145},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[48,164584,164585,164605,164609,164620,164630],{"__ignoreMap":145},[149,164586,164587,164589,164591,164593,164595,164597,164599,164601,164603],{"class":151,"line":152},[149,164588,161816],{"class":155},[149,164590,166],{"class":325},[149,164592,53924],{"class":155},[149,164594,151324],{"class":169},[149,164596,329],{"class":155},[149,164598,152372],{"class":169},[149,164600,329],{"class":155},[149,164602,161167],{"class":169},[149,164604,34952],{"class":155},[149,164606,164607],{"class":151,"line":193},[149,164608,4119],{"emptyLinePlaceholder":1800},[149,164610,164611,164613,164616,164618],{"class":151,"line":235},[149,164612,32121],{"class":309},[149,164614,164615],{"class":155},"(names[",[149,164617,2056],{"class":309},[149,164619,6375],{"class":155},[149,164621,164622,164624,164626,164628],{"class":151,"line":340},[149,164623,32121],{"class":309},[149,164625,164615],{"class":155},[149,164627,830],{"class":309},[149,164629,6375],{"class":155},[149,164631,164632,164634,164636,164638],{"class":151,"line":346},[149,164633,32121],{"class":309},[149,164635,164615],{"class":155},[149,164637,1045],{"class":309},[149,164639,6375],{"class":155},[24,164641,164642],{},"反向索引从 -1 开始：",[140,164644,164646],{"className":32084,"code":164645,"language":32086,"meta":145,"style":145},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[48,164647,164648,164664],{"__ignoreMap":145},[149,164649,164650,164652,164654,164656,164658,164661],{"class":151,"line":152},[149,164651,32121],{"class":309},[149,164653,164615],{"class":155},[149,164655,2395],{"class":325},[149,164657,830],{"class":309},[149,164659,164660],{"class":155},"])  ",[149,164662,164663],{"class":295},"# 小刚\n",[149,164665,164666,164668,164670,164672,164674,164676],{"class":151,"line":193},[149,164667,32121],{"class":309},[149,164669,164615],{"class":155},[149,164671,2395],{"class":325},[149,164673,1045],{"class":309},[149,164675,164660],{"class":155},[149,164677,164678],{"class":295},"# 小红\n",[24,164680,164681],{},"索引越界会报错：",[140,164683,164685],{"className":32084,"code":164684,"language":32086,"meta":145,"style":145},"print(names[3])\n",[48,164686,164687],{"__ignoreMap":145},[149,164688,164689,164691,164693,164695],{"class":151,"line":152},[149,164690,32121],{"class":309},[149,164692,164615],{"class":155},[149,164694,1939],{"class":309},[149,164696,6375],{"class":155},[14,164698,164700],{"id":164699},"_64-列表常用方法","6.4 列表常用方法",[140,164702,164704],{"className":32084,"code":164703,"language":32086,"meta":145,"style":145},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[48,164705,164706,164722,164726,164735,164749,164763,164767],{"__ignoreMap":145},[149,164707,164708,164710,164712,164714,164716,164718,164720],{"class":151,"line":152},[149,164709,161816],{"class":155},[149,164711,166],{"class":325},[149,164713,53924],{"class":155},[149,164715,151324],{"class":169},[149,164717,329],{"class":155},[149,164719,152372],{"class":169},[149,164721,34952],{"class":155},[149,164723,164724],{"class":151,"line":193},[149,164725,4119],{"emptyLinePlaceholder":1800},[149,164727,164728,164731,164733],{"class":151,"line":235},[149,164729,164730],{"class":155},"names.append(",[149,164732,161167],{"class":169},[149,164734,1878],{"class":155},[149,164736,164737,164740,164742,164744,164747],{"class":151,"line":340},[149,164738,164739],{"class":155},"names.insert(",[149,164741,830],{"class":309},[149,164743,329],{"class":155},[149,164745,164746],{"class":169},"\"小李\"",[149,164748,1878],{"class":155},[149,164750,164751,164754,164756,164758,164761],{"class":151,"line":346},[149,164752,164753],{"class":155},"names.extend([",[149,164755,10398],{"class":169},[149,164757,329],{"class":155},[149,164759,164760],{"class":169},"\"小赵\"",[149,164762,6375],{"class":155},[149,164764,164765],{"class":151,"line":352},[149,164766,4119],{"emptyLinePlaceholder":1800},[149,164768,164769,164771],{"class":151,"line":1021},[149,164770,32121],{"class":309},[149,164772,164773],{"class":155},"(names)\n",[24,164775,164776],{},"删除元素：",[140,164778,164780],{"className":32084,"code":164779,"language":32086,"meta":145,"style":145},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[48,164781,164782,164791,164801,164815,164827],{"__ignoreMap":145},[149,164783,164784,164787,164789],{"class":151,"line":152},[149,164785,164786],{"class":155},"names.remove(",[149,164788,152372],{"class":169},[149,164790,1878],{"class":155},[149,164792,164793,164796,164798],{"class":151,"line":193},[149,164794,164795],{"class":155},"last ",[149,164797,166],{"class":325},[149,164799,164800],{"class":155}," names.pop()\n",[149,164802,164803,164806,164808,164811,164813],{"class":151,"line":235},[149,164804,164805],{"class":155},"first ",[149,164807,166],{"class":325},[149,164809,164810],{"class":155}," names.pop(",[149,164812,2056],{"class":309},[149,164814,1878],{"class":155},[149,164816,164817,164820,164823,164825],{"class":151,"line":340},[149,164818,164819],{"class":325},"del",[149,164821,164822],{"class":155}," names[",[149,164824,2056],{"class":309},[149,164826,34952],{"class":155},[149,164828,164829],{"class":151,"line":346},[149,164830,164831],{"class":155},"names.clear()\n",[24,164833,164834],{},"查询和统计：",[140,164836,164838],{"className":32084,"code":164837,"language":32086,"meta":145,"style":145},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[48,164839,164840,164868,164872,164883,164894],{"__ignoreMap":145},[149,164841,164842,164844,164846,164848,164850,164852,164854,164856,164858,164860,164862,164864,164866],{"class":151,"line":152},[149,164843,164519],{"class":155},[149,164845,166],{"class":325},[149,164847,53924],{"class":155},[149,164849,830],{"class":309},[149,164851,329],{"class":155},[149,164853,1045],{"class":309},[149,164855,329],{"class":155},[149,164857,1939],{"class":309},[149,164859,329],{"class":155},[149,164861,1045],{"class":309},[149,164863,329],{"class":155},[149,164865,2157],{"class":309},[149,164867,34952],{"class":155},[149,164869,164870],{"class":151,"line":193},[149,164871,4119],{"emptyLinePlaceholder":1800},[149,164873,164874,164876,164879,164881],{"class":151,"line":235},[149,164875,32121],{"class":309},[149,164877,164878],{"class":155},"(numbers.index(",[149,164880,1939],{"class":309},[149,164882,32203],{"class":155},[149,164884,164885,164887,164890,164892],{"class":151,"line":340},[149,164886,32121],{"class":309},[149,164888,164889],{"class":155},"(numbers.count(",[149,164891,1045],{"class":309},[149,164893,32203],{"class":155},[149,164895,164896,164898,164900,164902],{"class":151,"line":346},[149,164897,32121],{"class":309},[149,164899,319],{"class":155},[149,164901,9074],{"class":309},[149,164903,164904],{"class":155},"(numbers))\n",[24,164906,164907],{},"排序：",[140,164909,164911],{"className":32084,"code":164910,"language":32086,"meta":145,"style":145},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[48,164912,164913,164937,164941,164946,164953,164957,164971,164977,164981,164986],{"__ignoreMap":145},[149,164914,164915,164917,164919,164921,164923,164925,164927,164929,164931,164933,164935],{"class":151,"line":152},[149,164916,164519],{"class":155},[149,164918,166],{"class":325},[149,164920,53924],{"class":155},[149,164922,1939],{"class":309},[149,164924,329],{"class":155},[149,164926,830],{"class":309},[149,164928,329],{"class":155},[149,164930,2182],{"class":309},[149,164932,329],{"class":155},[149,164934,1045],{"class":309},[149,164936,34952],{"class":155},[149,164938,164939],{"class":151,"line":193},[149,164940,4119],{"emptyLinePlaceholder":1800},[149,164942,164943],{"class":151,"line":235},[149,164944,164945],{"class":155},"numbers.sort()\n",[149,164947,164948,164950],{"class":151,"line":340},[149,164949,32121],{"class":309},[149,164951,164952],{"class":155},"(numbers)\n",[149,164954,164955],{"class":151,"line":346},[149,164956,4119],{"emptyLinePlaceholder":1800},[149,164958,164959,164962,164965,164967,164969],{"class":151,"line":352},[149,164960,164961],{"class":155},"numbers.sort(",[149,164963,164964],{"class":6932},"reverse",[149,164966,166],{"class":325},[149,164968,33182],{"class":309},[149,164970,1878],{"class":155},[149,164972,164973,164975],{"class":151,"line":1021},[149,164974,32121],{"class":309},[149,164976,164952],{"class":155},[149,164978,164979],{"class":151,"line":1035},[149,164980,4119],{"emptyLinePlaceholder":1800},[149,164982,164983],{"class":151,"line":1054},[149,164984,164985],{"class":155},"numbers.reverse()\n",[149,164987,164988,164990],{"class":151,"line":1072},[149,164989,32121],{"class":309},[149,164991,164952],{"class":155},[24,164993,164994,164997,164998,165001],{},[48,164995,164996],{},"sort()"," 会修改原列表，",[48,164999,165000],{},"sorted()"," 返回新列表。",[140,165003,165005],{"className":32084,"code":165004,"language":32086,"meta":145,"style":145},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[48,165006,165007,165031,165043,165047,165053],{"__ignoreMap":145},[149,165008,165009,165011,165013,165015,165017,165019,165021,165023,165025,165027,165029],{"class":151,"line":152},[149,165010,164519],{"class":155},[149,165012,166],{"class":325},[149,165014,53924],{"class":155},[149,165016,1939],{"class":309},[149,165018,329],{"class":155},[149,165020,830],{"class":309},[149,165022,329],{"class":155},[149,165024,2182],{"class":309},[149,165026,329],{"class":155},[149,165028,1045],{"class":309},[149,165030,34952],{"class":155},[149,165032,165033,165036,165038,165041],{"class":151,"line":193},[149,165034,165035],{"class":155},"new_numbers ",[149,165037,166],{"class":325},[149,165039,165040],{"class":309}," sorted",[149,165042,164952],{"class":155},[149,165044,165045],{"class":151,"line":235},[149,165046,4119],{"emptyLinePlaceholder":1800},[149,165048,165049,165051],{"class":151,"line":340},[149,165050,32121],{"class":309},[149,165052,164952],{"class":155},[149,165054,165055,165057],{"class":151,"line":346},[149,165056,32121],{"class":309},[149,165058,165059],{"class":155},"(new_numbers)\n",[14,165061,165063],{"id":165062},"_65-列表遍历","6.5 列表遍历",[140,165065,165067],{"className":32084,"code":165066,"language":32086,"meta":145,"style":145},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[48,165068,165069,165089,165093,165103],{"__ignoreMap":145},[149,165070,165071,165073,165075,165077,165079,165081,165083,165085,165087],{"class":151,"line":152},[149,165072,161816],{"class":155},[149,165074,166],{"class":325},[149,165076,53924],{"class":155},[149,165078,151324],{"class":169},[149,165080,329],{"class":155},[149,165082,152372],{"class":169},[149,165084,329],{"class":155},[149,165086,161167],{"class":169},[149,165088,34952],{"class":155},[149,165090,165091],{"class":151,"line":193},[149,165092,4119],{"emptyLinePlaceholder":1800},[149,165094,165095,165097,165099,165101],{"class":151,"line":235},[149,165096,4743],{"class":325},[149,165098,161852],{"class":155},[149,165100,27752],{"class":325},[149,165102,161857],{"class":155},[149,165104,165105,165107],{"class":151,"line":340},[149,165106,33005],{"class":309},[149,165108,152096],{"class":155},[24,165110,165111],{},"需要索引时：",[140,165113,165115],{"className":32084,"code":165114,"language":32086,"meta":145,"style":145},"for index, name in enumerate(names):\n    print(index, name)\n",[48,165116,165117,165131],{"__ignoreMap":145},[149,165118,165119,165121,165124,165126,165128],{"class":151,"line":152},[149,165120,4743],{"class":325},[149,165122,165123],{"class":155}," index, name ",[149,165125,27752],{"class":325},[149,165127,33312],{"class":309},[149,165129,165130],{"class":155},"(names):\n",[149,165132,165133,165135],{"class":151,"line":193},[149,165134,33005],{"class":309},[149,165136,165137],{"class":155},"(index, name)\n",[24,165139,165140],{},"统计总分：",[140,165142,165144],{"className":32084,"code":165143,"language":32086,"meta":145,"style":145},"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",[48,165145,165146,165171,165179,165183,165194,165202,165206,165223],{"__ignoreMap":145},[149,165147,165148,165151,165153,165155,165157,165159,165161,165163,165165,165167,165169],{"class":151,"line":152},[149,165149,165150],{"class":155},"scores ",[149,165152,166],{"class":325},[149,165154,53924],{"class":155},[149,165156,2723],{"class":309},[149,165158,329],{"class":155},[149,165160,2597],{"class":309},[149,165162,329],{"class":155},[149,165164,2118],{"class":309},[149,165166,329],{"class":155},[149,165168,2424],{"class":309},[149,165170,34952],{"class":155},[149,165172,165173,165175,165177],{"class":151,"line":193},[149,165174,158696],{"class":155},[149,165176,166],{"class":325},[149,165178,49039],{"class":309},[149,165180,165181],{"class":151,"line":235},[149,165182,4119],{"emptyLinePlaceholder":1800},[149,165184,165185,165187,165189,165191],{"class":151,"line":340},[149,165186,4743],{"class":325},[149,165188,159219],{"class":155},[149,165190,27752],{"class":325},[149,165192,165193],{"class":155}," scores:\n",[149,165195,165196,165198,165200],{"class":151,"line":346},[149,165197,160743],{"class":155},[149,165199,11191],{"class":325},[149,165201,3302],{"class":155},[149,165203,165204],{"class":151,"line":352},[149,165205,4119],{"emptyLinePlaceholder":1800},[149,165207,165208,165211,165213,165216,165218,165220],{"class":151,"line":1021},[149,165209,165210],{"class":155},"avg ",[149,165212,166],{"class":325},[149,165214,165215],{"class":155}," total ",[149,165217,2447],{"class":325},[149,165219,9047],{"class":309},[149,165221,165222],{"class":155},"(scores)\n",[149,165224,165225,165227,165229,165231,165234,165236,165239,165241,165243,165245],{"class":151,"line":1035},[149,165226,32121],{"class":309},[149,165228,319],{"class":155},[149,165230,1921],{"class":325},[149,165232,165233],{"class":169},"\"平均分:",[149,165235,2756],{"class":309},[149,165237,165238],{"class":155},"avg",[149,165240,158595],{"class":325},[149,165242,2805],{"class":309},[149,165244,2115],{"class":169},[149,165246,1878],{"class":155},[14,165248,165250],{"id":165249},"_66-元组tuple","6.6 元组tuple",[24,165252,165253],{},"元组和列表类似，但不可修改。",[140,165255,165257],{"className":32084,"code":165256,"language":32086,"meta":145,"style":145},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[48,165258,165259,165276],{"__ignoreMap":145},[149,165260,165261,165264,165266,165268,165270,165272,165274],{"class":151,"line":152},[149,165262,165263],{"class":155},"point ",[149,165265,166],{"class":325},[149,165267,3378],{"class":155},[149,165269,2309],{"class":309},[149,165271,329],{"class":155},[149,165273,2561],{"class":309},[149,165275,1878],{"class":155},[149,165277,165278,165280,165282,165284,165286,165288,165290,165292,165294],{"class":151,"line":193},[149,165279,117993],{"class":155},[149,165281,166],{"class":325},[149,165283,3378],{"class":155},[149,165285,151324],{"class":169},[149,165287,329],{"class":155},[149,165289,2513],{"class":309},[149,165291,329],{"class":155},[149,165293,70953],{"class":169},[149,165295,1878],{"class":155},[24,165297,165298],{},"单元素元组必须加逗号：",[140,165300,165302],{"className":32084,"code":165301,"language":32086,"meta":145,"style":145},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[48,165303,165304,165318,165331,165335,165349],{"__ignoreMap":145},[149,165305,165306,165309,165311,165313,165315],{"class":151,"line":152},[149,165307,165308],{"class":155},"t1 ",[149,165310,166],{"class":325},[149,165312,3378],{"class":155},[149,165314,2309],{"class":309},[149,165316,165317],{"class":155},",)\n",[149,165319,165320,165323,165325,165327,165329],{"class":151,"line":193},[149,165321,165322],{"class":155},"t2 ",[149,165324,166],{"class":325},[149,165326,3378],{"class":155},[149,165328,2309],{"class":309},[149,165330,1878],{"class":155},[149,165332,165333],{"class":151,"line":235},[149,165334,4119],{"emptyLinePlaceholder":1800},[149,165336,165337,165339,165341,165343,165346],{"class":151,"line":340},[149,165338,32121],{"class":309},[149,165340,319],{"class":155},[149,165342,813],{"class":309},[149,165344,165345],{"class":155},"(t1))  ",[149,165347,165348],{"class":295},"# tuple\n",[149,165350,165351,165353,165355,165357,165360],{"class":151,"line":346},[149,165352,32121],{"class":309},[149,165354,319],{"class":155},[149,165356,813],{"class":309},[149,165358,165359],{"class":155},"(t2))  ",[149,165361,165362],{"class":295},"# int\n",[24,165364,165365],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165367,165369],{"id":165368},"_67-字符串str","6.7 字符串str",[24,165371,165372],{},"字符串也是序列，可以索引、切片和遍历。",[140,165374,165376],{"className":32084,"code":165375,"language":32086,"meta":145,"style":145},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[48,165377,165378,165386,165390,165401,165413,165417,165428],{"__ignoreMap":145},[149,165379,165380,165382,165384],{"class":151,"line":152},[149,165381,157880],{"class":155},[149,165383,166],{"class":325},[149,165385,161117],{"class":169},[149,165387,165388],{"class":151,"line":193},[149,165389,4119],{"emptyLinePlaceholder":1800},[149,165391,165392,165394,165397,165399],{"class":151,"line":235},[149,165393,32121],{"class":309},[149,165395,165396],{"class":155},"(text[",[149,165398,2056],{"class":309},[149,165400,6375],{"class":155},[149,165402,165403,165405,165407,165409,165411],{"class":151,"line":340},[149,165404,32121],{"class":309},[149,165406,165396],{"class":155},[149,165408,2395],{"class":325},[149,165410,830],{"class":309},[149,165412,6375],{"class":155},[149,165414,165415],{"class":151,"line":346},[149,165416,4119],{"emptyLinePlaceholder":1800},[149,165418,165419,165421,165423,165425],{"class":151,"line":352},[149,165420,4743],{"class":325},[149,165422,161128],{"class":155},[149,165424,27752],{"class":325},[149,165426,165427],{"class":155}," text:\n",[149,165429,165430,165432],{"class":151,"line":1021},[149,165431,33005],{"class":309},[149,165433,161139],{"class":155},[24,165435,165436],{},"字符串不可变：",[140,165438,165440],{"className":32084,"code":165439,"language":32086,"meta":145,"style":145},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[48,165441,165442,165450],{"__ignoreMap":145},[149,165443,165444,165446,165448],{"class":151,"line":152},[149,165445,157880],{"class":155},[149,165447,166],{"class":325},[149,165449,161117],{"class":169},[149,165451,165452,165455,165457,165459,165461,165464],{"class":151,"line":193},[149,165453,165454],{"class":155},"text[",[149,165456,2056],{"class":309},[149,165458,6161],{"class":155},[149,165460,166],{"class":325},[149,165462,165463],{"class":169}," \"P\"",[149,165465,165466],{"class":295},"  # 报错\n",[24,165468,165469],{},"如果要得到新字符串：",[140,165471,165473],{"className":32084,"code":165472,"language":32086,"meta":145,"style":145},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[48,165474,165475,165483,165501],{"__ignoreMap":145},[149,165476,165477,165479,165481],{"class":151,"line":152},[149,165478,157880],{"class":155},[149,165480,166],{"class":325},[149,165482,161117],{"class":169},[149,165484,165485,165487,165489,165491,165493,165496,165498],{"class":151,"line":193},[149,165486,157880],{"class":155},[149,165488,166],{"class":325},[149,165490,165463],{"class":169},[149,165492,47272],{"class":325},[149,165494,165495],{"class":155}," text[",[149,165497,830],{"class":309},[149,165499,165500],{"class":155},":]\n",[149,165502,165503,165505],{"class":151,"line":235},[149,165504,32121],{"class":309},[149,165506,165507],{"class":155},"(text)\n",[14,165509,165511],{"id":165510},"_68-切片","6.8 切片",[24,165513,165514],{},"切片用于从序列中取一部分。",[140,165516,165518],{"className":32084,"code":165517,"language":32086,"meta":145,"style":145},"序列[开始:结束:步长]\n",[48,165519,165520],{"__ignoreMap":145},[149,165521,165522],{"class":151,"line":152},[149,165523,165517],{"class":155},[24,165525,165526],{},"结束位置不包含。",[140,165528,165530],{"className":32084,"code":165529,"language":32086,"meta":145,"style":145},"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",[48,165531,165532,165569,165573,165592,165607,165621,165635],{"__ignoreMap":145},[149,165533,165534,165537,165539,165541,165543,165545,165547,165549,165551,165553,165555,165557,165559,165561,165563,165565,165567],{"class":151,"line":152},[149,165535,165536],{"class":155},"nums ",[149,165538,166],{"class":325},[149,165540,53924],{"class":155},[149,165542,2056],{"class":309},[149,165544,329],{"class":155},[149,165546,830],{"class":309},[149,165548,329],{"class":155},[149,165550,1045],{"class":309},[149,165552,329],{"class":155},[149,165554,1939],{"class":309},[149,165556,329],{"class":155},[149,165558,2157],{"class":309},[149,165560,329],{"class":155},[149,165562,2182],{"class":309},[149,165564,329],{"class":155},[149,165566,2207],{"class":309},[149,165568,34952],{"class":155},[149,165570,165571],{"class":151,"line":193},[149,165572,4119],{"emptyLinePlaceholder":1800},[149,165574,165575,165577,165580,165582,165584,165586,165589],{"class":151,"line":235},[149,165576,32121],{"class":309},[149,165578,165579],{"class":155},"(nums[",[149,165581,830],{"class":309},[149,165583,2720],{"class":155},[149,165585,2157],{"class":309},[149,165587,165588],{"class":155},"])    ",[149,165590,165591],{"class":295},"# [1, 2, 3]\n",[149,165593,165594,165596,165599,165601,165604],{"class":151,"line":340},[149,165595,32121],{"class":309},[149,165597,165598],{"class":155},"(nums[:",[149,165600,1939],{"class":309},[149,165602,165603],{"class":155},"])     ",[149,165605,165606],{"class":295},"# [0, 1, 2]\n",[149,165608,165609,165611,165613,165615,165618],{"class":151,"line":346},[149,165610,32121],{"class":309},[149,165612,165579],{"class":155},[149,165614,1939],{"class":309},[149,165616,165617],{"class":155},":])     ",[149,165619,165620],{"class":295},"# [3, 4, 5, 6]\n",[149,165622,165623,165625,165628,165630,165632],{"class":151,"line":352},[149,165624,32121],{"class":309},[149,165626,165627],{"class":155},"(nums[::",[149,165629,1045],{"class":309},[149,165631,165588],{"class":155},[149,165633,165634],{"class":295},"# [0, 2, 4, 6]\n",[149,165636,165637,165639,165641,165643,165645,165648],{"class":151,"line":1021},[149,165638,32121],{"class":309},[149,165640,165627],{"class":155},[149,165642,2395],{"class":325},[149,165644,830],{"class":309},[149,165646,165647],{"class":155},"])   ",[149,165649,165650],{"class":295},"# 反转\n",[24,165652,165653],{},"字符串切片：",[140,165655,165657],{"className":32084,"code":165656,"language":32086,"meta":145,"style":145},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[48,165658,165659,165668,165682],{"__ignoreMap":145},[149,165660,165661,165663,165665],{"class":151,"line":152},[149,165662,157880],{"class":155},[149,165664,166],{"class":325},[149,165666,165667],{"class":169}," \"abcdef\"\n",[149,165669,165670,165672,165674,165676,165678,165680],{"class":151,"line":193},[149,165671,32121],{"class":309},[149,165673,165396],{"class":155},[149,165675,830],{"class":309},[149,165677,2720],{"class":155},[149,165679,2157],{"class":309},[149,165681,6375],{"class":155},[149,165683,165684,165686,165689,165691,165693],{"class":151,"line":235},[149,165685,32121],{"class":309},[149,165687,165688],{"class":155},"(text[::",[149,165690,2395],{"class":325},[149,165692,830],{"class":309},[149,165694,6375],{"class":155},[14,165696,165698],{"id":165697},"_69-集合set","6.9 集合set",[24,165700,165701],{},"集合特点：",[125,165703,165704,165707,165710],{},[45,165705,165706],{},"无序。",[45,165708,165709],{},"元素不重复。",[45,165711,165712],{},"可以做交集、并集、差集。",[140,165714,165716],{"className":32084,"code":165715,"language":32086,"meta":145,"style":145},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[48,165717,165718,165746],{"__ignoreMap":145},[149,165719,165720,165722,165724,165726,165728,165730,165732,165734,165736,165738,165740,165742,165744],{"class":151,"line":152},[149,165721,165536],{"class":155},[149,165723,166],{"class":325},[149,165725,6166],{"class":155},[149,165727,830],{"class":309},[149,165729,329],{"class":155},[149,165731,1045],{"class":309},[149,165733,329],{"class":155},[149,165735,1939],{"class":309},[149,165737,329],{"class":155},[149,165739,1939],{"class":309},[149,165741,329],{"class":155},[149,165743,2157],{"class":309},[149,165745,355],{"class":155},[149,165747,165748,165750],{"class":151,"line":193},[149,165749,32121],{"class":309},[149,165751,165752],{"class":155},"(nums)\n",[24,165754,165755],{},"创建空集合：",[140,165757,165759],{"className":32084,"code":165758,"language":32086,"meta":145,"style":145},"s = set()\n",[48,165760,165761],{"__ignoreMap":145},[149,165762,165763,165765,165767,165769],{"class":151,"line":152},[149,165764,12293],{"class":155},[149,165766,166],{"class":325},[149,165768,121401],{"class":309},[149,165770,3695],{"class":155},[24,165772,866,165773,165775],{},[48,165774,34165],{}," 是空字典，不是空集合。",[24,165777,165778],{},"集合常用操作：",[140,165780,165782],{"className":32084,"code":165781,"language":32086,"meta":145,"style":145},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[48,165783,165784,165804,165808,165817,165826,165835],{"__ignoreMap":145},[149,165785,165786,165788,165790,165792,165794,165796,165798,165800,165802],{"class":151,"line":152},[149,165787,12293],{"class":155},[149,165789,166],{"class":325},[149,165791,6166],{"class":155},[149,165793,830],{"class":309},[149,165795,329],{"class":155},[149,165797,1045],{"class":309},[149,165799,329],{"class":155},[149,165801,1939],{"class":309},[149,165803,355],{"class":155},[149,165805,165806],{"class":151,"line":193},[149,165807,4119],{"emptyLinePlaceholder":1800},[149,165809,165810,165813,165815],{"class":151,"line":235},[149,165811,165812],{"class":155},"s.add(",[149,165814,2157],{"class":309},[149,165816,1878],{"class":155},[149,165818,165819,165822,165824],{"class":151,"line":340},[149,165820,165821],{"class":155},"s.remove(",[149,165823,1045],{"class":309},[149,165825,1878],{"class":155},[149,165827,165828,165831,165833],{"class":151,"line":346},[149,165829,165830],{"class":155},"s.discard(",[149,165832,2309],{"class":309},[149,165834,1878],{"class":155},[149,165836,165837,165839,165841,165843],{"class":151,"line":352},[149,165838,32121],{"class":309},[149,165840,319],{"class":155},[149,165842,9074],{"class":309},[149,165844,165845],{"class":155},"(s))\n",[24,165847,165848],{},"交并差：",[140,165850,165852],{"className":32084,"code":165851,"language":32086,"meta":145,"style":145},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[48,165853,165854,165874,165894,165898,165913,165926],{"__ignoreMap":145},[149,165855,165856,165858,165860,165862,165864,165866,165868,165870,165872],{"class":151,"line":152},[149,165857,12633],{"class":155},[149,165859,166],{"class":325},[149,165861,6166],{"class":155},[149,165863,830],{"class":309},[149,165865,329],{"class":155},[149,165867,1045],{"class":309},[149,165869,329],{"class":155},[149,165871,1939],{"class":309},[149,165873,355],{"class":155},[149,165875,165876,165878,165880,165882,165884,165886,165888,165890,165892],{"class":151,"line":193},[149,165877,12659],{"class":155},[149,165879,166],{"class":325},[149,165881,6166],{"class":155},[149,165883,1939],{"class":309},[149,165885,329],{"class":155},[149,165887,2157],{"class":309},[149,165889,329],{"class":155},[149,165891,2182],{"class":309},[149,165893,355],{"class":155},[149,165895,165896],{"class":151,"line":235},[149,165897,4119],{"emptyLinePlaceholder":1800},[149,165899,165900,165902,165905,165907,165910],{"class":151,"line":340},[149,165901,32121],{"class":309},[149,165903,165904],{"class":155},"(a ",[149,165906,2216],{"class":325},[149,165908,165909],{"class":155}," b)  ",[149,165911,165912],{"class":295},"# 交集\n",[149,165914,165915,165917,165919,165921,165923],{"class":151,"line":346},[149,165916,32121],{"class":309},[149,165918,165904],{"class":155},[149,165920,2780],{"class":325},[149,165922,165909],{"class":155},[149,165924,165925],{"class":295},"# 并集\n",[149,165927,165928,165930,165932,165934,165936],{"class":151,"line":352},[149,165929,32121],{"class":309},[149,165931,165904],{"class":155},[149,165933,2395],{"class":325},[149,165935,165909],{"class":155},[149,165937,165938],{"class":295},"# 差集\n",[14,165940,165942],{"id":165941},"_610-字典dict","6.10 字典dict",[24,165944,165945],{},"字典通过 key-value 保存数据。",[140,165947,165949],{"className":32084,"code":165948,"language":32086,"meta":145,"style":145},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[48,165950,165951,165959,165969,165980,165990],{"__ignoreMap":145},[149,165952,165953,165955,165957],{"class":151,"line":152},[149,165954,150917],{"class":155},[149,165956,166],{"class":325},[149,165958,304],{"class":155},[149,165960,165961,165963,165965,165967],{"class":151,"line":193},[149,165962,148456],{"class":169},[149,165964,313],{"class":155},[149,165966,151324],{"class":169},[149,165968,33172],{"class":155},[149,165970,165971,165974,165976,165978],{"class":151,"line":235},[149,165972,165973],{"class":169},"    \"age\"",[149,165975,313],{"class":155},[149,165977,2513],{"class":309},[149,165979,33172],{"class":155},[149,165981,165982,165985,165987],{"class":151,"line":340},[149,165983,165984],{"class":169},"    \"score\"",[149,165986,313],{"class":155},[149,165988,165989],{"class":309},"95\n",[149,165991,165992],{"class":151,"line":346},[149,165993,355],{"class":155},[24,165995,165996],{},"获取值：",[140,165998,166000],{"className":32084,"code":165999,"language":32086,"meta":145,"style":145},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[48,166001,166002,166013],{"__ignoreMap":145},[149,166003,166004,166006,166009,166011],{"class":151,"line":152},[149,166005,32121],{"class":309},[149,166007,166008],{"class":155},"(student[",[149,166010,64367],{"class":169},[149,166012,6375],{"class":155},[149,166014,166015,166017,166020,166022],{"class":151,"line":193},[149,166016,32121],{"class":309},[149,166018,166019],{"class":155},"(student.get(",[149,166021,64367],{"class":169},[149,166023,32203],{"class":155},[24,166025,17099],{},[140,166027,166029],{"className":32084,"code":166028,"language":32086,"meta":145,"style":145},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[48,166030,166031,166044],{"__ignoreMap":145},[149,166032,166033,166035,166038,166041],{"class":151,"line":152},[149,166034,154295],{"class":155},[149,166036,166037],{"class":169},"\"address\"",[149,166039,166040],{"class":155},"]     ",[149,166042,166043],{"class":295},"# key不存在会报错\n",[149,166045,166046,166049,166051,166053],{"class":151,"line":193},[149,166047,166048],{"class":155},"student.get(",[149,166050,166037],{"class":169},[149,166052,15427],{"class":155},[149,166054,166055],{"class":295},"# key不存在返回None\n",[24,166057,166058],{},"设置默认值：",[140,166060,166062],{"className":32084,"code":166061,"language":32086,"meta":145,"style":145},"print(student.get(\"address\", \"未知\"))\n",[48,166063,166064],{"__ignoreMap":145},[149,166065,166066,166068,166070,166072,166074,166077],{"class":151,"line":152},[149,166067,32121],{"class":309},[149,166069,166019],{"class":155},[149,166071,166037],{"class":169},[149,166073,329],{"class":155},[149,166075,166076],{"class":169},"\"未知\"",[149,166078,32203],{"class":155},[24,166080,166081],{},"新增和修改：",[140,166083,166085],{"className":32084,"code":166084,"language":32086,"meta":145,"style":145},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[48,166086,166087,166100],{"__ignoreMap":145},[149,166088,166089,166091,166093,166095,166097],{"class":151,"line":152},[149,166090,154295],{"class":155},[149,166092,70808],{"class":169},[149,166094,6161],{"class":155},[149,166096,166],{"class":325},[149,166098,166099],{"class":309}," 19\n",[149,166101,166102,166104,166106,166108,166110],{"class":151,"line":193},[149,166103,154295],{"class":155},[149,166105,166037],{"class":169},[149,166107,6161],{"class":155},[149,166109,166],{"class":325},[149,166111,166112],{"class":169}," \"北京\"\n",[24,166114,166115],{},"删除：",[140,166117,166119],{"className":32084,"code":166118,"language":32086,"meta":145,"style":145},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[48,166120,166121,166134,166144],{"__ignoreMap":145},[149,166122,166123,166125,166127,166130,166132],{"class":151,"line":152},[149,166124,156794],{"class":155},[149,166126,166],{"class":325},[149,166128,166129],{"class":155}," student.pop(",[149,166131,152908],{"class":169},[149,166133,1878],{"class":155},[149,166135,166136,166138,166140,166142],{"class":151,"line":193},[149,166137,164819],{"class":325},[149,166139,153585],{"class":155},[149,166141,70808],{"class":169},[149,166143,34952],{"class":155},[149,166145,166146],{"class":151,"line":235},[149,166147,166148],{"class":155},"student.clear()\n",[14,166150,166152],{"id":166151},"_611-字典遍历","6.11 字典遍历",[24,166154,166155],{},"遍历 key：",[140,166157,166159],{"className":32084,"code":166158,"language":32086,"meta":145,"style":145},"for key in student:\n    print(key, student[key])\n",[48,166160,166161,166173],{"__ignoreMap":145},[149,166162,166163,166165,166168,166170],{"class":151,"line":152},[149,166164,4743],{"class":325},[149,166166,166167],{"class":155}," key ",[149,166169,27752],{"class":325},[149,166171,166172],{"class":155}," student:\n",[149,166174,166175,166177],{"class":151,"line":193},[149,166176,33005],{"class":309},[149,166178,166179],{"class":155},"(key, student[key])\n",[24,166181,166182],{},"遍历 value：",[140,166184,166186],{"className":32084,"code":166185,"language":32086,"meta":145,"style":145},"for value in student.values():\n    print(value)\n",[48,166187,166188,166200],{"__ignoreMap":145},[149,166189,166190,166192,166195,166197],{"class":151,"line":152},[149,166191,4743],{"class":325},[149,166193,166194],{"class":155}," value ",[149,166196,27752],{"class":325},[149,166198,166199],{"class":155}," student.values():\n",[149,166201,166202,166204],{"class":151,"line":193},[149,166203,33005],{"class":309},[149,166205,166206],{"class":155},"(value)\n",[24,166208,166209],{},"遍历 key 和 value：",[140,166211,166213],{"className":32084,"code":166212,"language":32086,"meta":145,"style":145},"for key, value in student.items():\n    print(key, value)\n",[48,166214,166215,166227],{"__ignoreMap":145},[149,166216,166217,166219,166222,166224],{"class":151,"line":152},[149,166218,4743],{"class":325},[149,166220,166221],{"class":155}," key, value ",[149,166223,27752],{"class":325},[149,166225,166226],{"class":155}," student.items():\n",[149,166228,166229,166231],{"class":151,"line":193},[149,166230,33005],{"class":309},[149,166232,166233],{"class":155},"(key, value)\n",[14,166235,166237],{"id":166236},"_612-嵌套容器","6.12 嵌套容器",[24,166239,166240],{},"列表中保存字典，是项目中最常见的结构之一。",[140,166242,166244],{"className":32084,"code":166243,"language":32086,"meta":145,"style":145},"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",[48,166245,166246,166254,166282,166310,166338,166342,166346,166356],{"__ignoreMap":145},[149,166247,166248,166250,166252],{"class":151,"line":152},[149,166249,161152],{"class":155},[149,166251,166],{"class":325},[149,166253,57139],{"class":155},[149,166255,166256,166258,166260,166262,166264,166266,166268,166270,166272,166274,166276,166278,166280],{"class":151,"line":193},[149,166257,149821],{"class":155},[149,166259,64367],{"class":169},[149,166261,313],{"class":155},[149,166263,151324],{"class":169},[149,166265,329],{"class":155},[149,166267,70808],{"class":169},[149,166269,313],{"class":155},[149,166271,2513],{"class":309},[149,166273,329],{"class":155},[149,166275,152908],{"class":169},[149,166277,313],{"class":155},[149,166279,2848],{"class":309},[149,166281,6648],{"class":155},[149,166283,166284,166286,166288,166290,166292,166294,166296,166298,166300,166302,166304,166306,166308],{"class":151,"line":235},[149,166285,149821],{"class":155},[149,166287,64367],{"class":169},[149,166289,313],{"class":155},[149,166291,152372],{"class":169},[149,166293,329],{"class":155},[149,166295,70808],{"class":169},[149,166297,313],{"class":155},[149,166299,2488],{"class":309},[149,166301,329],{"class":155},[149,166303,152908],{"class":169},[149,166305,313],{"class":155},[149,166307,2672],{"class":309},[149,166309,6648],{"class":155},[149,166311,166312,166314,166316,166318,166320,166322,166324,166326,166328,166330,166332,166334,166336],{"class":151,"line":340},[149,166313,149821],{"class":155},[149,166315,64367],{"class":169},[149,166317,313],{"class":155},[149,166319,161167],{"class":169},[149,166321,329],{"class":155},[149,166323,70808],{"class":169},[149,166325,313],{"class":155},[149,166327,2537],{"class":309},[149,166329,329],{"class":155},[149,166331,152908],{"class":169},[149,166333,313],{"class":155},[149,166335,2269],{"class":309},[149,166337,6648],{"class":155},[149,166339,166340],{"class":151,"line":346},[149,166341,34952],{"class":155},[149,166343,166344],{"class":151,"line":352},[149,166345,4119],{"emptyLinePlaceholder":1800},[149,166347,166348,166350,166352,166354],{"class":151,"line":1021},[149,166349,4743],{"class":325},[149,166351,153573],{"class":155},[149,166353,27752],{"class":325},[149,166355,153578],{"class":155},[149,166357,166358,166360,166362,166364,166367,166369],{"class":151,"line":1035},[149,166359,33005],{"class":309},[149,166361,166008],{"class":155},[149,166363,64367],{"class":169},[149,166365,166366],{"class":155},"], student[",[149,166368,152908],{"class":169},[149,166370,6375],{"class":155},[24,166372,166373],{},"统计平均分：",[140,166375,166377],{"className":32084,"code":166376,"language":32086,"meta":145,"style":145},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[48,166378,166379,166387,166391,166401,166413,166417,166432],{"__ignoreMap":145},[149,166380,166381,166383,166385],{"class":151,"line":152},[149,166382,158696],{"class":155},[149,166384,166],{"class":325},[149,166386,49039],{"class":309},[149,166388,166389],{"class":151,"line":193},[149,166390,4119],{"emptyLinePlaceholder":1800},[149,166392,166393,166395,166397,166399],{"class":151,"line":235},[149,166394,4743],{"class":325},[149,166396,153573],{"class":155},[149,166398,27752],{"class":325},[149,166400,153578],{"class":155},[149,166402,166403,166405,166407,166409,166411],{"class":151,"line":340},[149,166404,160743],{"class":155},[149,166406,11191],{"class":325},[149,166408,153585],{"class":155},[149,166410,152908],{"class":169},[149,166412,34952],{"class":155},[149,166414,166415],{"class":151,"line":346},[149,166416,4119],{"emptyLinePlaceholder":1800},[149,166418,166419,166421,166423,166425,166427,166429],{"class":151,"line":352},[149,166420,165210],{"class":155},[149,166422,166],{"class":325},[149,166424,165215],{"class":155},[149,166426,2447],{"class":325},[149,166428,9047],{"class":309},[149,166430,166431],{"class":155},"(students)\n",[149,166433,166434,166436,166438,166440,166442,166444,166446,166448,166450,166452],{"class":151,"line":1021},[149,166435,32121],{"class":309},[149,166437,319],{"class":155},[149,166439,1921],{"class":325},[149,166441,165233],{"class":169},[149,166443,2756],{"class":309},[149,166445,165238],{"class":155},[149,166447,158595],{"class":325},[149,166449,2805],{"class":309},[149,166451,2115],{"class":169},[149,166453,1878],{"class":155},[24,166455,166456],{},"查找学生：",[140,166458,166460],{"className":32084,"code":166459,"language":32086,"meta":145,"style":145},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[48,166461,166462,166477,166481,166491,166505,166511,166515,166521],{"__ignoreMap":145},[149,166463,166464,166466,166468,166470,166472,166475],{"class":151,"line":152},[149,166465,113257],{"class":155},[149,166467,166],{"class":325},[149,166469,62296],{"class":309},[149,166471,319],{"class":155},[149,166473,166474],{"class":169},"\"请输入学生姓名:\"",[149,166476,1878],{"class":155},[149,166478,166479],{"class":151,"line":193},[149,166480,4119],{"emptyLinePlaceholder":1800},[149,166482,166483,166485,166487,166489],{"class":151,"line":235},[149,166484,4743],{"class":325},[149,166486,153573],{"class":155},[149,166488,27752],{"class":325},[149,166490,153578],{"class":155},[149,166492,166493,166495,166497,166499,166501,166503],{"class":151,"line":340},[149,166494,4819],{"class":325},[149,166496,153585],{"class":155},[149,166498,64367],{"class":169},[149,166500,6161],{"class":155},[149,166502,4667],{"class":325},[149,166504,161868],{"class":155},[149,166506,166507,166509],{"class":151,"line":346},[149,166508,34157],{"class":309},[149,166510,151478],{"class":155},[149,166512,166513],{"class":151,"line":352},[149,166514,33333],{"class":325},[149,166516,166517,166519],{"class":151,"line":1021},[149,166518,3421],{"class":325},[149,166520,5457],{"class":155},[149,166522,166523,166525,166527,166530],{"class":151,"line":1035},[149,166524,33005],{"class":309},[149,166526,319],{"class":155},[149,166528,166529],{"class":169},"\"没有找到\"",[149,166531,1878],{"class":155},[14,166533,166535],{"id":166534},"_613-容器通用操作","6.13 容器通用操作",[24,166537,166538],{},"长度：",[140,166540,166542],{"className":32084,"code":166541,"language":32086,"meta":145,"style":145},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[48,166543,166544,166563,166573],{"__ignoreMap":145},[149,166545,166546,166548,166551,166553,166555,166557,166559,166561],{"class":151,"line":152},[149,166547,9074],{"class":309},[149,166549,166550],{"class":155},"([",[149,166552,830],{"class":309},[149,166554,329],{"class":155},[149,166556,1045],{"class":309},[149,166558,329],{"class":155},[149,166560,1939],{"class":309},[149,166562,6375],{"class":155},[149,166564,166565,166567,166569,166571],{"class":151,"line":193},[149,166566,9074],{"class":309},[149,166568,319],{"class":155},[149,166570,157316],{"class":169},[149,166572,1878],{"class":155},[149,166574,166575,166577,166580,166582,166584,166586],{"class":151,"line":235},[149,166576,9074],{"class":309},[149,166578,166579],{"class":155},"({",[149,166581,64367],{"class":169},[149,166583,313],{"class":155},[149,166585,151324],{"class":169},[149,166587,166588],{"class":155},"})\n",[24,166590,166591],{},"最大最小：",[140,166593,166595],{"className":32084,"code":166594,"language":32086,"meta":145,"style":145},"max([1, 2, 3])\nmin([1, 2, 3])\n",[48,166596,166597,166615],{"__ignoreMap":145},[149,166598,166599,166601,166603,166605,166607,166609,166611,166613],{"class":151,"line":152},[149,166600,7731],{"class":309},[149,166602,166550],{"class":155},[149,166604,830],{"class":309},[149,166606,329],{"class":155},[149,166608,1045],{"class":309},[149,166610,329],{"class":155},[149,166612,1939],{"class":309},[149,166614,6375],{"class":155},[149,166616,166617,166620,166622,166624,166626,166628,166630,166632],{"class":151,"line":193},[149,166618,166619],{"class":309},"min",[149,166621,166550],{"class":155},[149,166623,830],{"class":309},[149,166625,329],{"class":155},[149,166627,1045],{"class":309},[149,166629,329],{"class":155},[149,166631,1939],{"class":309},[149,166633,6375],{"class":155},[24,166635,166636],{},"求和：",[140,166638,166640],{"className":32084,"code":166639,"language":32086,"meta":145,"style":145},"sum([1, 2, 3])\n",[48,166641,166642],{"__ignoreMap":145},[149,166643,166644,166647,166649,166651,166653,166655,166657,166659],{"class":151,"line":152},[149,166645,166646],{"class":309},"sum",[149,166648,166550],{"class":155},[149,166650,830],{"class":309},[149,166652,329],{"class":155},[149,166654,1045],{"class":309},[149,166656,329],{"class":155},[149,166658,1939],{"class":309},[149,166660,6375],{"class":155},[24,166662,164907],{},[140,166664,166666],{"className":32084,"code":166665,"language":32086,"meta":145,"style":145},"sorted([3, 1, 2])\n",[48,166667,166668],{"__ignoreMap":145},[149,166669,166670,166673,166675,166677,166679,166681,166683,166685],{"class":151,"line":152},[149,166671,166672],{"class":309},"sorted",[149,166674,166550],{"class":155},[149,166676,1939],{"class":309},[149,166678,329],{"class":155},[149,166680,830],{"class":309},[149,166682,329],{"class":155},[149,166684,1045],{"class":309},[149,166686,6375],{"class":155},[24,166688,166689],{},"类型转换：",[140,166691,166693],{"className":32084,"code":166692,"language":32086,"meta":145,"style":145},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[48,166694,166695,166705,166723],{"__ignoreMap":145},[149,166696,166697,166699,166701,166703],{"class":151,"line":152},[149,166698,155506],{"class":309},[149,166700,319],{"class":155},[149,166702,157316],{"class":169},[149,166704,1878],{"class":155},[149,166706,166707,166709,166711,166713,166715,166717,166719,166721],{"class":151,"line":193},[149,166708,156701],{"class":309},[149,166710,166550],{"class":155},[149,166712,830],{"class":309},[149,166714,329],{"class":155},[149,166716,1045],{"class":309},[149,166718,329],{"class":155},[149,166720,1939],{"class":309},[149,166722,6375],{"class":155},[149,166724,166725,166727,166729,166731,166733,166735,166737,166739,166741,166743],{"class":151,"line":235},[149,166726,156726],{"class":309},[149,166728,166550],{"class":155},[149,166730,830],{"class":309},[149,166732,329],{"class":155},[149,166734,830],{"class":309},[149,166736,329],{"class":155},[149,166738,1045],{"class":309},[149,166740,329],{"class":155},[149,166742,1939],{"class":309},[149,166744,6375],{"class":155},[24,166746,166747],{},"成员判断：",[140,166749,166751],{"className":32084,"code":166750,"language":32086,"meta":145,"style":145},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[48,166752,166753,166770,166794],{"__ignoreMap":145},[149,166754,166755,166757,166759,166762,166765,166768],{"class":151,"line":152},[149,166756,32121],{"class":309},[149,166758,319],{"class":155},[149,166760,166761],{"class":169},"\"a\"",[149,166763,166764],{"class":325}," in",[149,166766,166767],{"class":169}," \"abc\"",[149,166769,1878],{"class":155},[149,166771,166772,166774,166776,166778,166780,166782,166784,166786,166788,166790,166792],{"class":151,"line":193},[149,166773,32121],{"class":309},[149,166775,319],{"class":155},[149,166777,830],{"class":309},[149,166779,166764],{"class":325},[149,166781,53924],{"class":155},[149,166783,830],{"class":309},[149,166785,329],{"class":155},[149,166787,1045],{"class":309},[149,166789,329],{"class":155},[149,166791,1939],{"class":309},[149,166793,6375],{"class":155},[149,166795,166796,166798,166800,166802,166804,166806,166808,166810,166812],{"class":151,"line":235},[149,166797,32121],{"class":309},[149,166799,319],{"class":155},[149,166801,64367],{"class":169},[149,166803,166764],{"class":325},[149,166805,6166],{"class":155},[149,166807,64367],{"class":169},[149,166809,313],{"class":155},[149,166811,151324],{"class":169},[149,166813,166588],{"class":155},[14,166815,166817],{"id":166816},"_614-推导式","6.14 推导式",[24,166819,166820],{},"推导式用于快速生成容器。",[24,166822,166823],{},"列表推导式：",[140,166825,166827],{"className":32084,"code":166826,"language":32086,"meta":145,"style":145},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[48,166828,166829,166856],{"__ignoreMap":145},[149,166830,166831,166833,166835,166838,166840,166842,166844,166846,166848,166850,166852,166854],{"class":151,"line":152},[149,166832,165536],{"class":155},[149,166834,166],{"class":325},[149,166836,166837],{"class":155}," [i ",[149,166839,4743],{"class":325},[149,166841,11152],{"class":155},[149,166843,27752],{"class":325},[149,166845,34149],{"class":309},[149,166847,319],{"class":155},[149,166849,830],{"class":309},[149,166851,329],{"class":155},[149,166853,2207],{"class":309},[149,166855,98980],{"class":155},[149,166857,166858,166860],{"class":151,"line":193},[149,166859,32121],{"class":309},[149,166861,165752],{"class":155},[24,166863,166864],{},"带条件：",[140,166866,166868],{"className":32084,"code":166867,"language":32086,"meta":145,"style":145},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[48,166869,166870,166911],{"__ignoreMap":145},[149,166871,166872,166875,166877,166879,166881,166883,166885,166887,166889,166891,166893,166895,166897,166899,166901,166903,166905,166907,166909],{"class":151,"line":152},[149,166873,166874],{"class":155},"even_nums ",[149,166876,166],{"class":325},[149,166878,166837],{"class":155},[149,166880,4743],{"class":325},[149,166882,11152],{"class":155},[149,166884,27752],{"class":325},[149,166886,34149],{"class":309},[149,166888,319],{"class":155},[149,166890,830],{"class":309},[149,166892,329],{"class":155},[149,166894,2200],{"class":309},[149,166896,15427],{"class":155},[149,166898,3255],{"class":325},[149,166900,11152],{"class":155},[149,166902,2191],{"class":325},[149,166904,16467],{"class":309},[149,166906,103239],{"class":325},[149,166908,5811],{"class":309},[149,166910,34952],{"class":155},[149,166912,166913,166915],{"class":151,"line":193},[149,166914,32121],{"class":309},[149,166916,166917],{"class":155},"(even_nums)\n",[24,166919,166920],{},"字典推导式：",[140,166922,166924],{"className":32084,"code":166923,"language":32086,"meta":145,"style":145},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[48,166925,166926,166960],{"__ignoreMap":145},[149,166927,166928,166931,166933,166936,166938,166940,166943,166945,166947,166949,166951,166953,166955,166957],{"class":151,"line":152},[149,166929,166930],{"class":155},"squares ",[149,166932,166],{"class":325},[149,166934,166935],{"class":155}," {i: i ",[149,166937,12375],{"class":325},[149,166939,16467],{"class":309},[149,166941,166942],{"class":325}," for",[149,166944,11152],{"class":155},[149,166946,27752],{"class":325},[149,166948,34149],{"class":309},[149,166950,319],{"class":155},[149,166952,830],{"class":309},[149,166954,329],{"class":155},[149,166956,2207],{"class":309},[149,166958,166959],{"class":155},")}\n",[149,166961,166962,166964],{"class":151,"line":193},[149,166963,32121],{"class":309},[149,166965,166966],{"class":155},"(squares)\n",[24,166968,166969],{},"集合推导式：",[140,166971,166973],{"className":32084,"code":166972,"language":32086,"meta":145,"style":145},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[48,166974,166975,166996],{"__ignoreMap":145},[149,166976,166977,166980,166982,166985,166987,166989,166991,166994],{"class":151,"line":152},[149,166978,166979],{"class":155},"chars ",[149,166981,166],{"class":325},[149,166983,166984],{"class":155}," {ch ",[149,166986,4743],{"class":325},[149,166988,161128],{"class":155},[149,166990,27752],{"class":325},[149,166992,166993],{"class":169}," \"hello\"",[149,166995,355],{"class":155},[149,166997,166998,167000],{"class":151,"line":193},[149,166999,32121],{"class":309},[149,167001,167002],{"class":155},"(chars)\n",[24,167004,167005],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167007,167009],{"id":167008},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[140,167011,167013],{"className":32084,"code":167012,"language":32086,"meta":145,"style":145},"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",[48,167014,167015,167023,167043,167063,167083,167103,167107,167111,167119,167133,167142,167146,167156,167168,167172,167192,167201,167205,167221,167226,167230,167244,167248,167270,167306],{"__ignoreMap":145},[149,167016,167017,167019,167021],{"class":151,"line":152},[149,167018,161152],{"class":155},[149,167020,166],{"class":325},[149,167022,57139],{"class":155},[149,167024,167025,167027,167029,167031,167033,167035,167037,167039,167041],{"class":151,"line":193},[149,167026,149821],{"class":155},[149,167028,64367],{"class":169},[149,167030,313],{"class":155},[149,167032,151324],{"class":169},[149,167034,329],{"class":155},[149,167036,152908],{"class":169},[149,167038,313],{"class":155},[149,167040,2848],{"class":309},[149,167042,6648],{"class":155},[149,167044,167045,167047,167049,167051,167053,167055,167057,167059,167061],{"class":151,"line":235},[149,167046,149821],{"class":155},[149,167048,64367],{"class":169},[149,167050,313],{"class":155},[149,167052,152372],{"class":169},[149,167054,329],{"class":155},[149,167056,152908],{"class":169},[149,167058,313],{"class":155},[149,167060,2672],{"class":309},[149,167062,6648],{"class":155},[149,167064,167065,167067,167069,167071,167073,167075,167077,167079,167081],{"class":151,"line":340},[149,167066,149821],{"class":155},[149,167068,64367],{"class":169},[149,167070,313],{"class":155},[149,167072,161167],{"class":169},[149,167074,329],{"class":155},[149,167076,152908],{"class":169},[149,167078,313],{"class":155},[149,167080,2269],{"class":309},[149,167082,6648],{"class":155},[149,167084,167085,167087,167089,167091,167093,167095,167097,167099,167101],{"class":151,"line":346},[149,167086,149821],{"class":155},[149,167088,64367],{"class":169},[149,167090,313],{"class":155},[149,167092,164746],{"class":169},[149,167094,329],{"class":155},[149,167096,152908],{"class":169},[149,167098,313],{"class":155},[149,167100,2743],{"class":309},[149,167102,6648],{"class":155},[149,167104,167105],{"class":151,"line":352},[149,167106,34952],{"class":155},[149,167108,167109],{"class":151,"line":1021},[149,167110,4119],{"emptyLinePlaceholder":1800},[149,167112,167113,167115,167117],{"class":151,"line":1035},[149,167114,158696],{"class":155},[149,167116,166],{"class":325},[149,167118,49039],{"class":309},[149,167120,167121,167124,167126,167129,167131],{"class":151,"line":1054},[149,167122,167123],{"class":155},"max_student ",[149,167125,166],{"class":325},[149,167127,167128],{"class":155}," students[",[149,167130,2056],{"class":309},[149,167132,34952],{"class":155},[149,167134,167135,167138,167140],{"class":151,"line":1072},[149,167136,167137],{"class":155},"passed ",[149,167139,166],{"class":325},[149,167141,53537],{"class":155},[149,167143,167144],{"class":151,"line":1090},[149,167145,4119],{"emptyLinePlaceholder":1800},[149,167147,167148,167150,167152,167154],{"class":151,"line":1633},[149,167149,4743],{"class":325},[149,167151,153573],{"class":155},[149,167153,27752],{"class":325},[149,167155,153578],{"class":155},[149,167157,167158,167160,167162,167164,167166],{"class":151,"line":1644},[149,167159,160743],{"class":155},[149,167161,11191],{"class":325},[149,167163,153585],{"class":155},[149,167165,152908],{"class":169},[149,167167,34952],{"class":155},[149,167169,167170],{"class":151,"line":3348},[149,167171,4119],{"emptyLinePlaceholder":1800},[149,167173,167174,167176,167178,167180,167182,167184,167187,167189],{"class":151,"line":3362},[149,167175,4819],{"class":325},[149,167177,153585],{"class":155},[149,167179,152908],{"class":169},[149,167181,6161],{"class":155},[149,167183,2819],{"class":325},[149,167185,167186],{"class":155}," max_student[",[149,167188,152908],{"class":169},[149,167190,167191],{"class":155},"]:\n",[149,167193,167194,167197,167199],{"class":151,"line":3367},[149,167195,167196],{"class":155},"        max_student ",[149,167198,166],{"class":325},[149,167200,153601],{"class":155},[149,167202,167203],{"class":151,"line":3373},[149,167204,4119],{"emptyLinePlaceholder":1800},[149,167206,167207,167209,167211,167213,167215,167217,167219],{"class":151,"line":3394},[149,167208,4819],{"class":325},[149,167210,153585],{"class":155},[149,167212,152908],{"class":169},[149,167214,6161],{"class":155},[149,167216,3430],{"class":325},[149,167218,159273],{"class":309},[149,167220,5457],{"class":155},[149,167222,167223],{"class":151,"line":3399},[149,167224,167225],{"class":155},"        passed.append(student)\n",[149,167227,167228],{"class":151,"line":3413},[149,167229,4119],{"emptyLinePlaceholder":1800},[149,167231,167232,167234,167236,167238,167240,167242],{"class":151,"line":3418},[149,167233,165210],{"class":155},[149,167235,166],{"class":325},[149,167237,165215],{"class":155},[149,167239,2447],{"class":325},[149,167241,9047],{"class":309},[149,167243,166431],{"class":155},[149,167245,167246],{"class":151,"line":3447},[149,167247,4119],{"emptyLinePlaceholder":1800},[149,167249,167250,167252,167254,167256,167258,167260,167262,167264,167266,167268],{"class":151,"line":3452},[149,167251,32121],{"class":309},[149,167253,319],{"class":155},[149,167255,1921],{"class":325},[149,167257,165233],{"class":169},[149,167259,2756],{"class":309},[149,167261,165238],{"class":155},[149,167263,158595],{"class":325},[149,167265,2805],{"class":309},[149,167267,2115],{"class":169},[149,167269,1878],{"class":155},[149,167271,167272,167274,167276,167278,167281,167283,167286,167288,167290,167292,167294,167296,167298,167300,167302,167304],{"class":151,"line":3469},[149,167273,32121],{"class":309},[149,167275,319],{"class":155},[149,167277,1921],{"class":325},[149,167279,167280],{"class":169},"\"最高分学生:",[149,167282,2756],{"class":309},[149,167284,167285],{"class":155},"max_student[",[149,167287,154318],{"class":169},[149,167289,2799],{"class":155},[149,167291,2805],{"class":309},[149,167293,6166],{"class":309},[149,167295,167285],{"class":155},[149,167297,154356],{"class":169},[149,167299,2799],{"class":155},[149,167301,2805],{"class":309},[149,167303,2115],{"class":169},[149,167305,1878],{"class":155},[149,167307,167308,167310,167312,167314,167317,167320,167323,167325,167327],{"class":151,"line":3474},[149,167309,32121],{"class":309},[149,167311,319],{"class":155},[149,167313,1921],{"class":325},[149,167315,167316],{"class":169},"\"及格人数:",[149,167318,167319],{"class":309},"{len",[149,167321,167322],{"class":155},"(passed)",[149,167324,2805],{"class":309},[149,167326,2115],{"class":169},[149,167328,1878],{"class":155},[14,167330,167332],{"id":167331},"_616-易错点","6.16 易错点",[125,167334,167335,167338,167341,167344,167350,167359],{},[45,167336,167337],{},"列表可变，元组和字符串不可变。",[45,167339,167340],{},"切片结束位置不包含。",[45,167342,167343],{},"字典通过 key 取值，不是通过索引。",[45,167345,167346,167347,30091],{},"空集合要用 ",[48,167348,167349],{},"set()",[45,167351,106045,167352,167355,167356,30091],{},[48,167353,167354],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[48,167357,167358],{},"get()",[45,167360,167361],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167363,167365],{"id":167364},"_617-本章练习","6.17 本章练习",[125,167367,167368,167371,167374,167377,167380],{},[45,167369,167370],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[45,167372,167373],{},"输入一句话，统计每个字符出现次数。",[45,167375,167376],{},"使用集合去除列表中的重复元素。",[45,167378,167379],{},"使用字典保存一个学生的信息，并实现修改成绩。",[45,167381,167382],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1783,167384,167385],{},"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":145,"searchDepth":193,"depth":193,"links":167387},[167388,167389,167390,167391,167392,167393,167394,167395,167396,167397,167398,167399,167400,167401,167402,167403,167404],{"id":164368,"depth":193,"text":164369},{"id":164485,"depth":193,"text":164486},{"id":164575,"depth":193,"text":164576},{"id":164699,"depth":193,"text":164700},{"id":165062,"depth":193,"text":165063},{"id":165249,"depth":193,"text":165250},{"id":165368,"depth":193,"text":165369},{"id":165510,"depth":193,"text":165511},{"id":165697,"depth":193,"text":165698},{"id":165941,"depth":193,"text":165942},{"id":166151,"depth":193,"text":166152},{"id":166236,"depth":193,"text":166237},{"id":166534,"depth":193,"text":166535},{"id":166816,"depth":193,"text":166817},{"id":167008,"depth":193,"text":167009},{"id":167331,"depth":193,"text":167332},{"id":167364,"depth":193,"text":167365},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164360,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167411,"title":167412,"body":167413,"description":1797,"extension":1798,"meta":169585,"navigation":1800,"path":169586,"seo":169587,"stem":169588,"__hash__":169589},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167414,"toc":169560},[167415,167418,167422,167425,167505,167508,167529,167532,167536,167539,167601,167604,167621,167625,167628,167673,167675,167683,167687,167690,167772,167775,167778,167803,167806,167829,167833,167836,167838,167900,167903,167905,167956,167960,167964,167970,168075,168079,168085,168156,168160,168163,168231,168234,168314,168318,168324,168360,168363,168366,168476,168482,168486,168489,168561,168564,168568,168572,168577,168639,168643,168648,168716,168720,168725,168841,168845,168848,168928,168931,168935,168938,169042,169044,169059,169062,169066,169204,169212,169216,169218,169229,169231,169489,169493,169525,169529,169557],[10,167416,167412],{"id":167417},"_7-函数进阶",[14,167419,167421],{"id":167420},"_71-多返回值","7.1 多返回值",[24,167423,167424],{},"Python 函数可以返回多个值，本质上返回的是元组。",[140,167426,167428],{"className":32084,"code":167427,"language":32086,"meta":145,"style":145},"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",[48,167429,167430,167439,167447,167455,167464,167471,167475,167479,167488,167494],{"__ignoreMap":145},[149,167431,167432,167434,167437],{"class":151,"line":152},[149,167433,33653],{"class":325},[149,167435,167436],{"class":162}," get_info",[149,167438,33659],{"class":155},[149,167440,167441,167443,167445],{"class":151,"line":193},[149,167442,153806],{"class":155},[149,167444,166],{"class":325},[149,167446,150789],{"class":169},[149,167448,167449,167451,167453],{"class":151,"line":235},[149,167450,153822],{"class":155},[149,167452,166],{"class":325},[149,167454,147987],{"class":309},[149,167456,167457,167459,167461],{"class":151,"line":340},[149,167458,153837],{"class":155},[149,167460,166],{"class":325},[149,167462,167463],{"class":309}," 95\n",[149,167465,167466,167468],{"class":151,"line":346},[149,167467,5808],{"class":325},[149,167469,167470],{"class":155}," name, age, score\n",[149,167472,167473],{"class":151,"line":352},[149,167474,4119],{"emptyLinePlaceholder":1800},[149,167476,167477],{"class":151,"line":1021},[149,167478,4119],{"emptyLinePlaceholder":1800},[149,167480,167481,167483,167485],{"class":151,"line":1035},[149,167482,162742],{"class":155},[149,167484,166],{"class":325},[149,167486,167487],{"class":155}," get_info()\n",[149,167489,167490,167492],{"class":151,"line":1054},[149,167491,32121],{"class":309},[149,167493,78267],{"class":155},[149,167495,167496,167498,167500,167502],{"class":151,"line":1072},[149,167497,32121],{"class":309},[149,167499,319],{"class":155},[149,167501,813],{"class":309},[149,167503,167504],{"class":155},"(result))\n",[24,167506,167507],{},"可以直接解包：",[140,167509,167511],{"className":32084,"code":167510,"language":32086,"meta":145,"style":145},"name, age, score = get_info()\nprint(name, age, score)\n",[48,167512,167513,167522],{"__ignoreMap":145},[149,167514,167515,167518,167520],{"class":151,"line":152},[149,167516,167517],{"class":155},"name, age, score ",[149,167519,166],{"class":325},[149,167521,167487],{"class":155},[149,167523,167524,167526],{"class":151,"line":193},[149,167525,32121],{"class":309},[149,167527,167528],{"class":155},"(name, age, score)\n",[24,167530,167531],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167533,167535],{"id":167534},"_72-位置参数","7.2 位置参数",[24,167537,167538],{},"位置参数按顺序传递。",[140,167540,167542],{"className":32084,"code":167541,"language":32086,"meta":145,"style":145},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[48,167543,167544,167552,167580,167584,167588],{"__ignoreMap":145},[149,167545,167546,167548,167550],{"class":151,"line":152},[149,167547,33653],{"class":325},[149,167549,150808],{"class":162},[149,167551,150811],{"class":155},[149,167553,167554,167556,167558,167560,167562,167564,167566,167568,167570,167572,167574,167576,167578],{"class":151,"line":193},[149,167555,33005],{"class":309},[149,167557,319],{"class":155},[149,167559,1921],{"class":325},[149,167561,150822],{"class":169},[149,167563,2756],{"class":309},[149,167565,81491],{"class":155},[149,167567,2805],{"class":309},[149,167569,150831],{"class":169},[149,167571,2756],{"class":309},[149,167573,71905],{"class":155},[149,167575,2805],{"class":309},[149,167577,150840],{"class":169},[149,167579,1878],{"class":155},[149,167581,167582],{"class":151,"line":235},[149,167583,4119],{"emptyLinePlaceholder":1800},[149,167585,167586],{"class":151,"line":340},[149,167587,4119],{"emptyLinePlaceholder":1800},[149,167589,167590,167593,167595,167597,167599],{"class":151,"line":346},[149,167591,167592],{"class":155},"introduce(",[149,167594,151324],{"class":169},[149,167596,329],{"class":155},[149,167598,2513],{"class":309},[149,167600,1878],{"class":155},[24,167602,167603],{},"顺序错了就会得到错误含义：",[140,167605,167607],{"className":32084,"code":167606,"language":32086,"meta":145,"style":145},"introduce(18, \"小明\")\n",[48,167608,167609],{"__ignoreMap":145},[149,167610,167611,167613,167615,167617,167619],{"class":151,"line":152},[149,167612,167592],{"class":155},[149,167614,2513],{"class":309},[149,167616,329],{"class":155},[149,167618,151324],{"class":169},[149,167620,1878],{"class":155},[14,167622,167624],{"id":167623},"_73-关键字参数","7.3 关键字参数",[24,167626,167627],{},"关键字参数按参数名传递。",[140,167629,167631],{"className":32084,"code":167630,"language":32086,"meta":145,"style":145},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[48,167632,167633,167653],{"__ignoreMap":145},[149,167634,167635,167637,167639,167641,167643,167645,167647,167649,167651],{"class":151,"line":152},[149,167636,167592],{"class":155},[149,167638,81491],{"class":6932},[149,167640,166],{"class":325},[149,167642,151324],{"class":169},[149,167644,329],{"class":155},[149,167646,71905],{"class":6932},[149,167648,166],{"class":325},[149,167650,2513],{"class":309},[149,167652,1878],{"class":155},[149,167654,167655,167657,167659,167661,167663,167665,167667,167669,167671],{"class":151,"line":193},[149,167656,167592],{"class":155},[149,167658,71905],{"class":6932},[149,167660,166],{"class":325},[149,167662,2513],{"class":309},[149,167664,329],{"class":155},[149,167666,81491],{"class":6932},[149,167668,166],{"class":325},[149,167670,151324],{"class":169},[149,167672,1878],{"class":155},[24,167674,119613],{},[125,167676,167677,167680],{},[45,167678,167679],{},"顺序不容易错。",[45,167681,167682],{},"调用时可读性更强。",[14,167684,167686],{"id":167685},"_74-默认参数","7.4 默认参数",[24,167688,167689],{},"默认参数给参数设置默认值。",[140,167691,167693],{"className":32084,"code":167692,"language":32086,"meta":145,"style":145},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[48,167694,167695,167711,167741,167745,167749,167759],{"__ignoreMap":145},[149,167696,167697,167699,167701,167704,167706,167709],{"class":151,"line":152},[149,167698,33653],{"class":325},[149,167700,123772],{"class":162},[149,167702,167703],{"class":155},"(host, port",[149,167705,166],{"class":325},[149,167707,167708],{"class":309},"3306",[149,167710,32492],{"class":155},[149,167712,167713,167715,167717,167719,167722,167724,167726,167728,167730,167732,167735,167737,167739],{"class":151,"line":193},[149,167714,33005],{"class":309},[149,167716,319],{"class":155},[149,167718,1921],{"class":325},[149,167720,167721],{"class":169},"\"连接",[149,167723,2756],{"class":309},[149,167725,29104],{"class":155},[149,167727,2805],{"class":309},[149,167729,2720],{"class":169},[149,167731,2756],{"class":309},[149,167733,167734],{"class":155},"port",[149,167736,2805],{"class":309},[149,167738,2115],{"class":169},[149,167740,1878],{"class":155},[149,167742,167743],{"class":151,"line":235},[149,167744,4119],{"emptyLinePlaceholder":1800},[149,167746,167747],{"class":151,"line":340},[149,167748,4119],{"emptyLinePlaceholder":1800},[149,167750,167751,167754,167757],{"class":151,"line":346},[149,167752,167753],{"class":155},"connect(",[149,167755,167756],{"class":169},"\"localhost\"",[149,167758,1878],{"class":155},[149,167760,167761,167763,167765,167767,167770],{"class":151,"line":352},[149,167762,167753],{"class":155},[149,167764,167756],{"class":169},[149,167766,329],{"class":155},[149,167768,167769],{"class":309},"6379",[149,167771,1878],{"class":155},[24,167773,167774],{},"注意：默认参数必须放在非默认参数后面。",[24,167776,167777],{},"错误：",[140,167779,167781],{"className":32084,"code":167780,"language":32086,"meta":145,"style":145},"def connect(port=3306, host):\n    pass\n",[48,167782,167783,167799],{"__ignoreMap":145},[149,167784,167785,167787,167789,167792,167794,167796],{"class":151,"line":152},[149,167786,33653],{"class":325},[149,167788,123772],{"class":162},[149,167790,167791],{"class":155},"(port",[149,167793,166],{"class":325},[149,167795,167708],{"class":309},[149,167797,167798],{"class":155},", host):\n",[149,167800,167801],{"class":151,"line":193},[149,167802,150973],{"class":325},[24,167804,167805],{},"正确：",[140,167807,167809],{"className":32084,"code":167808,"language":32086,"meta":145,"style":145},"def connect(host, port=3306):\n    pass\n",[48,167810,167811,167825],{"__ignoreMap":145},[149,167812,167813,167815,167817,167819,167821,167823],{"class":151,"line":152},[149,167814,33653],{"class":325},[149,167816,123772],{"class":162},[149,167818,167703],{"class":155},[149,167820,166],{"class":325},[149,167822,167708],{"class":309},[149,167824,32492],{"class":155},[149,167826,167827],{"class":151,"line":193},[149,167828,150973],{"class":325},[14,167830,167832],{"id":167831},"_75-默认参数的坑","7.5 默认参数的坑",[24,167834,167835],{},"不要使用可变对象作为默认参数。",[24,167837,159059],{},[140,167839,167841],{"className":32084,"code":167840,"language":32086,"meta":145,"style":145},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[48,167842,167843,167858,167863,167870,167874,167878,167889],{"__ignoreMap":145},[149,167844,167845,167847,167850,167853,167855],{"class":151,"line":152},[149,167846,33653],{"class":325},[149,167848,167849],{"class":162}," add_item",[149,167851,167852],{"class":155},"(item, items",[149,167854,166],{"class":325},[149,167856,167857],{"class":155},"[]):\n",[149,167859,167860],{"class":151,"line":193},[149,167861,167862],{"class":155},"    items.append(item)\n",[149,167864,167865,167867],{"class":151,"line":235},[149,167866,5808],{"class":325},[149,167868,167869],{"class":155}," items\n",[149,167871,167872],{"class":151,"line":340},[149,167873,4119],{"emptyLinePlaceholder":1800},[149,167875,167876],{"class":151,"line":346},[149,167877,4119],{"emptyLinePlaceholder":1800},[149,167879,167880,167882,167885,167887],{"class":151,"line":352},[149,167881,32121],{"class":309},[149,167883,167884],{"class":155},"(add_item(",[149,167886,166761],{"class":169},[149,167888,32203],{"class":155},[149,167890,167891,167893,167895,167898],{"class":151,"line":1021},[149,167892,32121],{"class":309},[149,167894,167884],{"class":155},[149,167896,167897],{"class":169},"\"b\"",[149,167899,32203],{"class":155},[24,167901,167902],{},"第二次调用会复用第一次的列表。",[24,167904,157324],{},[140,167906,167908],{"className":32084,"code":167907,"language":32086,"meta":145,"style":145},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[48,167909,167910,167924,167937,167946,167950],{"__ignoreMap":145},[149,167911,167912,167914,167916,167918,167920,167922],{"class":151,"line":152},[149,167913,33653],{"class":325},[149,167915,167849],{"class":162},[149,167917,167852],{"class":155},[149,167919,166],{"class":325},[149,167921,97366],{"class":309},[149,167923,32492],{"class":155},[149,167925,167926,167928,167931,167933,167935],{"class":151,"line":193},[149,167927,4819],{"class":325},[149,167929,167930],{"class":155}," items ",[149,167932,40633],{"class":325},[149,167934,40639],{"class":309},[149,167936,5457],{"class":155},[149,167938,167939,167942,167944],{"class":151,"line":235},[149,167940,167941],{"class":155},"        items ",[149,167943,166],{"class":325},[149,167945,53537],{"class":155},[149,167947,167948],{"class":151,"line":340},[149,167949,167862],{"class":155},[149,167951,167952,167954],{"class":151,"line":346},[149,167953,5808],{"class":325},[149,167955,167869],{"class":155},[14,167957,167959],{"id":167958},"_76-不定长参数","7.6 不定长参数",[19,167961,167963],{"id":167962},"_761-args","7.6.1 *args",[24,167965,167966,167969],{},[48,167967,167968],{},"*args"," 接收任意数量的位置参数，得到元组。",[140,167971,167973],{"className":32084,"code":167972,"language":32086,"meta":145,"style":145},"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",[48,167974,167975,167988,167996,168007,168016,168022,168026,168030,168049],{"__ignoreMap":145},[149,167976,167977,167979,167981,167983,167985],{"class":151,"line":152},[149,167978,33653],{"class":325},[149,167980,6925],{"class":162},[149,167982,319],{"class":155},[149,167984,2318],{"class":325},[149,167986,167987],{"class":155},"args):\n",[149,167989,167990,167992,167994],{"class":151,"line":193},[149,167991,160743],{"class":155},[149,167993,166],{"class":325},[149,167995,49039],{"class":309},[149,167997,167998,168000,168002,168004],{"class":151,"line":235},[149,167999,4919],{"class":325},[149,168001,157616],{"class":155},[149,168003,27752],{"class":325},[149,168005,168006],{"class":155}," args:\n",[149,168008,168009,168011,168013],{"class":151,"line":340},[149,168010,161418],{"class":155},[149,168012,11191],{"class":325},[149,168014,168015],{"class":155}," num\n",[149,168017,168018,168020],{"class":151,"line":346},[149,168019,5808],{"class":325},[149,168021,163723],{"class":155},[149,168023,168024],{"class":151,"line":352},[149,168025,4119],{"emptyLinePlaceholder":1800},[149,168027,168028],{"class":151,"line":1021},[149,168029,4119],{"emptyLinePlaceholder":1800},[149,168031,168032,168034,168037,168039,168041,168043,168045,168047],{"class":151,"line":1035},[149,168033,32121],{"class":309},[149,168035,168036],{"class":155},"(add(",[149,168038,830],{"class":309},[149,168040,329],{"class":155},[149,168042,1045],{"class":309},[149,168044,329],{"class":155},[149,168046,1939],{"class":309},[149,168048,32203],{"class":155},[149,168050,168051,168053,168055,168057,168059,168061,168063,168065,168067,168069,168071,168073],{"class":151,"line":1054},[149,168052,32121],{"class":309},[149,168054,168036],{"class":155},[149,168056,830],{"class":309},[149,168058,329],{"class":155},[149,168060,1045],{"class":309},[149,168062,329],{"class":155},[149,168064,1939],{"class":309},[149,168066,329],{"class":155},[149,168068,2157],{"class":309},[149,168070,329],{"class":155},[149,168072,2182],{"class":309},[149,168074,32203],{"class":155},[19,168076,168078],{"id":168077},"_762-kwargs","7.6.2 **kwargs",[24,168080,168081,168084],{},[48,168082,168083],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[140,168086,168088],{"className":32084,"code":168087,"language":32086,"meta":145,"style":145},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[48,168089,168090,168103,168114,168120,168124,168128],{"__ignoreMap":145},[149,168091,168092,168094,168096,168098,168100],{"class":151,"line":152},[149,168093,33653],{"class":325},[149,168095,163381],{"class":162},[149,168097,319],{"class":155},[149,168099,12375],{"class":325},[149,168101,168102],{"class":155},"kwargs):\n",[149,168104,168105,168107,168109,168111],{"class":151,"line":193},[149,168106,4919],{"class":325},[149,168108,166221],{"class":155},[149,168110,27752],{"class":325},[149,168112,168113],{"class":155}," kwargs.items():\n",[149,168115,168116,168118],{"class":151,"line":235},[149,168117,34157],{"class":309},[149,168119,166233],{"class":155},[149,168121,168122],{"class":151,"line":340},[149,168123,4119],{"emptyLinePlaceholder":1800},[149,168125,168126],{"class":151,"line":346},[149,168127,4119],{"emptyLinePlaceholder":1800},[149,168129,168130,168132,168134,168136,168138,168140,168142,168144,168146,168148,168150,168152,168154],{"class":151,"line":352},[149,168131,163446],{"class":155},[149,168133,81491],{"class":6932},[149,168135,166],{"class":325},[149,168137,151324],{"class":169},[149,168139,329],{"class":155},[149,168141,71905],{"class":6932},[149,168143,166],{"class":325},[149,168145,2513],{"class":309},[149,168147,329],{"class":155},[149,168149,71956],{"class":6932},[149,168151,166],{"class":325},[149,168153,70953],{"class":169},[149,168155,1878],{"class":155},[14,168157,168159],{"id":168158},"_77-参数解包","7.7 参数解包",[24,168161,168162],{},"列表或元组解包为位置参数：",[140,168164,168166],{"className":32084,"code":168165,"language":32086,"meta":145,"style":145},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[48,168167,168168,168177,168192,168196,168200,168220],{"__ignoreMap":145},[149,168169,168170,168172,168174],{"class":151,"line":152},[149,168171,33653],{"class":325},[149,168173,6925],{"class":162},[149,168175,168176],{"class":155},"(a, b, c):\n",[149,168178,168179,168181,168183,168185,168187,168189],{"class":151,"line":193},[149,168180,5808],{"class":325},[149,168182,12583],{"class":155},[149,168184,2344],{"class":325},[149,168186,12596],{"class":155},[149,168188,2344],{"class":325},[149,168190,168191],{"class":155}," c\n",[149,168193,168194],{"class":151,"line":235},[149,168195,4119],{"emptyLinePlaceholder":1800},[149,168197,168198],{"class":151,"line":340},[149,168199,4119],{"emptyLinePlaceholder":1800},[149,168201,168202,168204,168206,168208,168210,168212,168214,168216,168218],{"class":151,"line":346},[149,168203,165536],{"class":155},[149,168205,166],{"class":325},[149,168207,53924],{"class":155},[149,168209,830],{"class":309},[149,168211,329],{"class":155},[149,168213,1045],{"class":309},[149,168215,329],{"class":155},[149,168217,1939],{"class":309},[149,168219,34952],{"class":155},[149,168221,168222,168224,168226,168228],{"class":151,"line":352},[149,168223,32121],{"class":309},[149,168225,168036],{"class":155},[149,168227,2318],{"class":325},[149,168229,168230],{"class":155},"nums))\n",[24,168232,168233],{},"字典解包为关键字参数：",[140,168235,168237],{"className":32084,"code":168236,"language":32086,"meta":145,"style":145},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[48,168238,168239,168247,168273,168277,168281,168305],{"__ignoreMap":145},[149,168240,168241,168243,168245],{"class":151,"line":152},[149,168242,33653],{"class":325},[149,168244,150808],{"class":162},[149,168246,150811],{"class":155},[149,168248,168249,168251,168253,168255,168257,168259,168261,168263,168265,168267,168269,168271],{"class":151,"line":193},[149,168250,33005],{"class":309},[149,168252,319],{"class":155},[149,168254,1921],{"class":325},[149,168256,2115],{"class":169},[149,168258,2756],{"class":309},[149,168260,81491],{"class":155},[149,168262,2805],{"class":309},[149,168264,6166],{"class":309},[149,168266,71905],{"class":155},[149,168268,2805],{"class":309},[149,168270,2115],{"class":169},[149,168272,1878],{"class":155},[149,168274,168275],{"class":151,"line":235},[149,168276,4119],{"emptyLinePlaceholder":1800},[149,168278,168279],{"class":151,"line":340},[149,168280,4119],{"emptyLinePlaceholder":1800},[149,168282,168283,168285,168287,168289,168291,168293,168295,168297,168299,168301,168303],{"class":151,"line":346},[149,168284,117993],{"class":155},[149,168286,166],{"class":325},[149,168288,6166],{"class":155},[149,168290,64367],{"class":169},[149,168292,313],{"class":155},[149,168294,151324],{"class":169},[149,168296,329],{"class":155},[149,168298,70808],{"class":169},[149,168300,313],{"class":155},[149,168302,2513],{"class":309},[149,168304,355],{"class":155},[149,168306,168307,168309,168311],{"class":151,"line":352},[149,168308,167592],{"class":155},[149,168310,12375],{"class":325},[149,168312,168313],{"class":155},"info)\n",[14,168315,168317],{"id":168316},"_78-匿名函数lambda","7.8 匿名函数lambda",[24,168319,168320,168323],{},[48,168321,168322],{},"lambda"," 用于定义简单匿名函数。",[140,168325,168327],{"className":32084,"code":168326,"language":32086,"meta":145,"style":145},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[48,168328,168329,168346],{"__ignoreMap":145},[149,168330,168331,168334,168336,168339,168342,168344],{"class":151,"line":152},[149,168332,168333],{"class":155},"add ",[149,168335,166],{"class":325},[149,168337,168338],{"class":325}," lambda",[149,168340,168341],{"class":155}," a, b: a ",[149,168343,2344],{"class":325},[149,168345,152540],{"class":155},[149,168347,168348,168350,168352,168354,168356,168358],{"class":151,"line":193},[149,168349,32121],{"class":309},[149,168351,168036],{"class":155},[149,168353,830],{"class":309},[149,168355,329],{"class":155},[149,168357,1045],{"class":309},[149,168359,32203],{"class":155},[24,168361,168362],{},"常和排序、过滤等函数一起使用。",[24,168364,168365],{},"按分数排序：",[140,168367,168369],{"className":32084,"code":168368,"language":32086,"meta":145,"style":145},"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",[48,168370,168371,168379,168399,168419,168439,168443,168447,168470],{"__ignoreMap":145},[149,168372,168373,168375,168377],{"class":151,"line":152},[149,168374,161152],{"class":155},[149,168376,166],{"class":325},[149,168378,57139],{"class":155},[149,168380,168381,168383,168385,168387,168389,168391,168393,168395,168397],{"class":151,"line":193},[149,168382,149821],{"class":155},[149,168384,64367],{"class":169},[149,168386,313],{"class":155},[149,168388,151324],{"class":169},[149,168390,329],{"class":155},[149,168392,152908],{"class":169},[149,168394,313],{"class":155},[149,168396,2848],{"class":309},[149,168398,6648],{"class":155},[149,168400,168401,168403,168405,168407,168409,168411,168413,168415,168417],{"class":151,"line":235},[149,168402,149821],{"class":155},[149,168404,64367],{"class":169},[149,168406,313],{"class":155},[149,168408,152372],{"class":169},[149,168410,329],{"class":155},[149,168412,152908],{"class":169},[149,168414,313],{"class":155},[149,168416,2672],{"class":309},[149,168418,6648],{"class":155},[149,168420,168421,168423,168425,168427,168429,168431,168433,168435,168437],{"class":151,"line":340},[149,168422,149821],{"class":155},[149,168424,64367],{"class":169},[149,168426,313],{"class":155},[149,168428,161167],{"class":169},[149,168430,329],{"class":155},[149,168432,152908],{"class":169},[149,168434,313],{"class":155},[149,168436,2269],{"class":309},[149,168438,6648],{"class":155},[149,168440,168441],{"class":151,"line":346},[149,168442,34952],{"class":155},[149,168444,168445],{"class":151,"line":352},[149,168446,4119],{"emptyLinePlaceholder":1800},[149,168448,168449,168452,168454,168456,168458,168460,168462,168464,168466,168468],{"class":151,"line":1021},[149,168450,168451],{"class":155},"students.sort(",[149,168453,155382],{"class":6932},[149,168455,155385],{"class":325},[149,168457,155388],{"class":155},[149,168459,152908],{"class":169},[149,168461,113881],{"class":155},[149,168463,164964],{"class":6932},[149,168465,166],{"class":325},[149,168467,33182],{"class":309},[149,168469,1878],{"class":155},[149,168471,168472,168474],{"class":151,"line":1035},[149,168473,32121],{"class":309},[149,168475,166431],{"class":155},[24,168477,168478,168479,168481],{},"如果逻辑复杂，不要硬写 ",[48,168480,168322],{},"，定义普通函数更清晰。",[14,168483,168485],{"id":168484},"_79-函数作为参数","7.9 函数作为参数",[24,168487,168488],{},"函数可以作为参数传给另一个函数。",[140,168490,168492],{"className":32084,"code":168491,"language":32086,"meta":145,"style":145},"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",[48,168493,168494,168502,168512,168516,168520,168530,168537,168541,168545],{"__ignoreMap":145},[149,168495,168496,168498,168500],{"class":151,"line":152},[149,168497,33653],{"class":325},[149,168499,6925],{"class":162},[149,168501,152529],{"class":155},[149,168503,168504,168506,168508,168510],{"class":151,"line":193},[149,168505,5808],{"class":325},[149,168507,12583],{"class":155},[149,168509,2344],{"class":325},[149,168511,152540],{"class":155},[149,168513,168514],{"class":151,"line":235},[149,168515,4119],{"emptyLinePlaceholder":1800},[149,168517,168518],{"class":151,"line":340},[149,168519,4119],{"emptyLinePlaceholder":1800},[149,168521,168522,168524,168527],{"class":151,"line":346},[149,168523,33653],{"class":325},[149,168525,168526],{"class":162}," calculate",[149,168528,168529],{"class":155},"(a, b, func):\n",[149,168531,168532,168534],{"class":151,"line":352},[149,168533,5808],{"class":325},[149,168535,168536],{"class":155}," func(a, b)\n",[149,168538,168539],{"class":151,"line":1021},[149,168540,4119],{"emptyLinePlaceholder":1800},[149,168542,168543],{"class":151,"line":1035},[149,168544,4119],{"emptyLinePlaceholder":1800},[149,168546,168547,168549,168552,168554,168556,168558],{"class":151,"line":1054},[149,168548,32121],{"class":309},[149,168550,168551],{"class":155},"(calculate(",[149,168553,2309],{"class":309},[149,168555,329],{"class":155},[149,168557,2561],{"class":309},[149,168559,168560],{"class":155},", add))\n",[24,168562,168563],{},"这种思想在排序、回调、框架中经常出现。",[14,168565,168567],{"id":168566},"_710-mapfiltersorted","7.10 map、filter、sorted",[19,168569,168571],{"id":168570},"_7101-map","7.10.1 map",[24,168573,168574,168576],{},[48,168575,75726],{}," 对每个元素执行函数。",[140,168578,168580],{"className":32084,"code":168579,"language":32086,"meta":145,"style":145},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[48,168581,168582,168606,168629],{"__ignoreMap":145},[149,168583,168584,168586,168588,168590,168592,168594,168596,168598,168600,168602,168604],{"class":151,"line":152},[149,168585,165536],{"class":155},[149,168587,166],{"class":325},[149,168589,53924],{"class":155},[149,168591,830],{"class":309},[149,168593,329],{"class":155},[149,168595,1045],{"class":309},[149,168597,329],{"class":155},[149,168599,1939],{"class":309},[149,168601,329],{"class":155},[149,168603,2157],{"class":309},[149,168605,34952],{"class":155},[149,168607,168608,168610,168612,168615,168617,168619,168622,168624,168626],{"class":151,"line":193},[149,168609,162742],{"class":155},[149,168611,166],{"class":325},[149,168613,168614],{"class":309}," map",[149,168616,319],{"class":155},[149,168618,168322],{"class":325},[149,168620,168621],{"class":155}," x: x ",[149,168623,2318],{"class":325},[149,168625,16467],{"class":309},[149,168627,168628],{"class":155},", nums)\n",[149,168630,168631,168633,168635,168637],{"class":151,"line":235},[149,168632,32121],{"class":309},[149,168634,319],{"class":155},[149,168636,155506],{"class":309},[149,168638,167504],{"class":155},[19,168640,168642],{"id":168641},"_7102-filter","7.10.2 filter",[24,168644,168645,168647],{},[48,168646,81732],{}," 保留满足条件的元素。",[140,168649,168651],{"className":32084,"code":168650,"language":32086,"meta":145,"style":145},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[48,168652,168653,168681,168706],{"__ignoreMap":145},[149,168654,168655,168657,168659,168661,168663,168665,168667,168669,168671,168673,168675,168677,168679],{"class":151,"line":152},[149,168656,165536],{"class":155},[149,168658,166],{"class":325},[149,168660,53924],{"class":155},[149,168662,830],{"class":309},[149,168664,329],{"class":155},[149,168666,1045],{"class":309},[149,168668,329],{"class":155},[149,168670,1939],{"class":309},[149,168672,329],{"class":155},[149,168674,2157],{"class":309},[149,168676,329],{"class":155},[149,168678,2182],{"class":309},[149,168680,34952],{"class":155},[149,168682,168683,168685,168687,168690,168692,168694,168696,168698,168700,168702,168704],{"class":151,"line":193},[149,168684,162742],{"class":155},[149,168686,166],{"class":325},[149,168688,168689],{"class":309}," filter",[149,168691,319],{"class":155},[149,168693,168322],{"class":325},[149,168695,168621],{"class":155},[149,168697,2191],{"class":325},[149,168699,16467],{"class":309},[149,168701,103239],{"class":325},[149,168703,5811],{"class":309},[149,168705,168628],{"class":155},[149,168707,168708,168710,168712,168714],{"class":151,"line":235},[149,168709,32121],{"class":309},[149,168711,319],{"class":155},[149,168713,155506],{"class":309},[149,168715,167504],{"class":155},[19,168717,168719],{"id":168718},"_7103-sorted","7.10.3 sorted",[24,168721,168722,168724],{},[48,168723,166672],{}," 返回排序后的新列表。",[140,168726,168728],{"className":32084,"code":168727,"language":32086,"meta":145,"style":145},"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",[48,168729,168730,168738,168758,168778,168798,168802,168806,168835],{"__ignoreMap":145},[149,168731,168732,168734,168736],{"class":151,"line":152},[149,168733,161152],{"class":155},[149,168735,166],{"class":325},[149,168737,57139],{"class":155},[149,168739,168740,168742,168744,168746,168748,168750,168752,168754,168756],{"class":151,"line":193},[149,168741,149821],{"class":155},[149,168743,64367],{"class":169},[149,168745,313],{"class":155},[149,168747,151324],{"class":169},[149,168749,329],{"class":155},[149,168751,152908],{"class":169},[149,168753,313],{"class":155},[149,168755,2848],{"class":309},[149,168757,6648],{"class":155},[149,168759,168760,168762,168764,168766,168768,168770,168772,168774,168776],{"class":151,"line":235},[149,168761,149821],{"class":155},[149,168763,64367],{"class":169},[149,168765,313],{"class":155},[149,168767,152372],{"class":169},[149,168769,329],{"class":155},[149,168771,152908],{"class":169},[149,168773,313],{"class":155},[149,168775,2672],{"class":309},[149,168777,6648],{"class":155},[149,168779,168780,168782,168784,168786,168788,168790,168792,168794,168796],{"class":151,"line":340},[149,168781,149821],{"class":155},[149,168783,64367],{"class":169},[149,168785,313],{"class":155},[149,168787,161167],{"class":169},[149,168789,329],{"class":155},[149,168791,152908],{"class":169},[149,168793,313],{"class":155},[149,168795,2269],{"class":309},[149,168797,6648],{"class":155},[149,168799,168800],{"class":151,"line":346},[149,168801,34952],{"class":155},[149,168803,168804],{"class":151,"line":352},[149,168805,4119],{"emptyLinePlaceholder":1800},[149,168807,168808,168810,168812,168814,168817,168819,168821,168823,168825,168827,168829,168831,168833],{"class":151,"line":1021},[149,168809,162742],{"class":155},[149,168811,166],{"class":325},[149,168813,165040],{"class":309},[149,168815,168816],{"class":155},"(students, ",[149,168818,155382],{"class":6932},[149,168820,155385],{"class":325},[149,168822,155388],{"class":155},[149,168824,152908],{"class":169},[149,168826,113881],{"class":155},[149,168828,164964],{"class":6932},[149,168830,166],{"class":325},[149,168832,33182],{"class":309},[149,168834,1878],{"class":155},[149,168836,168837,168839],{"class":151,"line":1035},[149,168838,32121],{"class":309},[149,168840,78267],{"class":155},[14,168842,168844],{"id":168843},"_711-闭包入门","7.11 闭包入门",[24,168846,168847],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[140,168849,168851],{"className":32084,"code":168850,"language":32086,"meta":145,"style":145},"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",[48,168852,168853,168863,168873,168884,168888,168895,168899,168903,168917],{"__ignoreMap":145},[149,168854,168855,168857,168860],{"class":151,"line":152},[149,168856,33653],{"class":325},[149,168858,168859],{"class":162}," outer",[149,168861,168862],{"class":155},"(base):\n",[149,168864,168865,168867,168870],{"class":151,"line":193},[149,168866,32507],{"class":325},[149,168868,168869],{"class":162}," inner",[149,168871,168872],{"class":155},"(num):\n",[149,168874,168875,168877,168880,168882],{"class":151,"line":235},[149,168876,16464],{"class":325},[149,168878,168879],{"class":155}," base ",[149,168881,2344],{"class":325},[149,168883,168015],{"class":155},[149,168885,168886],{"class":151,"line":340},[149,168887,4119],{"emptyLinePlaceholder":1800},[149,168889,168890,168892],{"class":151,"line":346},[149,168891,5808],{"class":325},[149,168893,168894],{"class":155}," inner\n",[149,168896,168897],{"class":151,"line":352},[149,168898,4119],{"emptyLinePlaceholder":1800},[149,168900,168901],{"class":151,"line":1021},[149,168902,4119],{"emptyLinePlaceholder":1800},[149,168904,168905,168908,168910,168913,168915],{"class":151,"line":1035},[149,168906,168907],{"class":155},"add_10 ",[149,168909,166],{"class":325},[149,168911,168912],{"class":155}," outer(",[149,168914,2309],{"class":309},[149,168916,1878],{"class":155},[149,168918,168919,168921,168924,168926],{"class":151,"line":1054},[149,168920,32121],{"class":309},[149,168922,168923],{"class":155},"(add_10(",[149,168925,2182],{"class":309},[149,168927,32203],{"class":155},[24,168929,168930],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168932,168934],{"id":168933},"_712-装饰器入门","7.12 装饰器入门",[24,168936,168937],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[140,168939,168941],{"className":32084,"code":168940,"language":32086,"meta":145,"style":145},"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",[48,168942,168943,168952,168961,168972,168977,168988,168992,168999,169003,169007,169012,169020,169030,169034,169038],{"__ignoreMap":145},[149,168944,168945,168947,168949],{"class":151,"line":152},[149,168946,33653],{"class":325},[149,168948,88872],{"class":162},[149,168950,168951],{"class":155},"(func):\n",[149,168953,168954,168956,168959],{"class":151,"line":193},[149,168955,32507],{"class":325},[149,168957,168958],{"class":162}," wrapper",[149,168960,33659],{"class":155},[149,168962,168963,168965,168967,168970],{"class":151,"line":235},[149,168964,34157],{"class":309},[149,168966,319],{"class":155},[149,168968,168969],{"class":169},"\"函数开始执行\"",[149,168971,1878],{"class":155},[149,168973,168974],{"class":151,"line":340},[149,168975,168976],{"class":155},"        func()\n",[149,168978,168979,168981,168983,168986],{"class":151,"line":346},[149,168980,34157],{"class":309},[149,168982,319],{"class":155},[149,168984,168985],{"class":169},"\"函数执行结束\"",[149,168987,1878],{"class":155},[149,168989,168990],{"class":151,"line":352},[149,168991,4119],{"emptyLinePlaceholder":1800},[149,168993,168994,168996],{"class":151,"line":1021},[149,168995,5808],{"class":325},[149,168997,168998],{"class":155}," wrapper\n",[149,169000,169001],{"class":151,"line":1035},[149,169002,4119],{"emptyLinePlaceholder":1800},[149,169004,169005],{"class":151,"line":1054},[149,169006,4119],{"emptyLinePlaceholder":1800},[149,169008,169009],{"class":151,"line":1072},[149,169010,169011],{"class":162},"@log\n",[149,169013,169014,169016,169018],{"class":151,"line":1090},[149,169015,33653],{"class":325},[149,169017,162432],{"class":162},[149,169019,33659],{"class":155},[149,169021,169022,169024,169026,169028],{"class":151,"line":1633},[149,169023,33005],{"class":309},[149,169025,319],{"class":155},[149,169027,7560],{"class":169},[149,169029,1878],{"class":155},[149,169031,169032],{"class":151,"line":1644},[149,169033,4119],{"emptyLinePlaceholder":1800},[149,169035,169036],{"class":151,"line":3348},[149,169037,4119],{"emptyLinePlaceholder":1800},[149,169039,169040],{"class":151,"line":3362},[149,169041,162467],{"class":155},[24,169043,159710],{},[140,169045,169047],{"className":32084,"code":169046,"language":32086,"meta":145,"style":145},"say_hello = log(say_hello)\n",[48,169048,169049],{"__ignoreMap":145},[149,169050,169051,169054,169056],{"class":151,"line":152},[149,169052,169053],{"class":155},"say_hello ",[149,169055,166],{"class":325},[149,169057,169058],{"class":155}," log(say_hello)\n",[24,169060,169061],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169063,169065],{"id":169064},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[140,169067,169069],{"className":32084,"code":169068,"language":32086,"meta":145,"style":145},"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",[48,169070,169071,169079,169096,169106,169125,169135,169142,169146,169152,169156,169160,169164,169172,169182,169186,169190],{"__ignoreMap":145},[149,169072,169073,169075,169077],{"class":151,"line":152},[149,169074,33653],{"class":325},[149,169076,88872],{"class":162},[149,169078,168951],{"class":155},[149,169080,169081,169083,169085,169087,169089,169092,169094],{"class":151,"line":193},[149,169082,32507],{"class":325},[149,169084,168958],{"class":162},[149,169086,319],{"class":155},[149,169088,2318],{"class":325},[149,169090,169091],{"class":155},"args, ",[149,169093,12375],{"class":325},[149,169095,168102],{"class":155},[149,169097,169098,169100,169102,169104],{"class":151,"line":235},[149,169099,34157],{"class":309},[149,169101,319],{"class":155},[149,169103,168969],{"class":169},[149,169105,1878],{"class":155},[149,169107,169108,169111,169113,169116,169118,169120,169122],{"class":151,"line":340},[149,169109,169110],{"class":155},"        result ",[149,169112,166],{"class":325},[149,169114,169115],{"class":155}," func(",[149,169117,2318],{"class":325},[149,169119,169091],{"class":155},[149,169121,12375],{"class":325},[149,169123,169124],{"class":155},"kwargs)\n",[149,169126,169127,169129,169131,169133],{"class":151,"line":346},[149,169128,34157],{"class":309},[149,169130,319],{"class":155},[149,169132,168985],{"class":169},[149,169134,1878],{"class":155},[149,169136,169137,169139],{"class":151,"line":352},[149,169138,16464],{"class":325},[149,169140,169141],{"class":155}," result\n",[149,169143,169144],{"class":151,"line":1021},[149,169145,4119],{"emptyLinePlaceholder":1800},[149,169147,169148,169150],{"class":151,"line":1035},[149,169149,5808],{"class":325},[149,169151,168998],{"class":155},[149,169153,169154],{"class":151,"line":1054},[149,169155,4119],{"emptyLinePlaceholder":1800},[149,169157,169158],{"class":151,"line":1072},[149,169159,4119],{"emptyLinePlaceholder":1800},[149,169161,169162],{"class":151,"line":1090},[149,169163,169011],{"class":162},[149,169165,169166,169168,169170],{"class":151,"line":1633},[149,169167,33653],{"class":325},[149,169169,6925],{"class":162},[149,169171,152529],{"class":155},[149,169173,169174,169176,169178,169180],{"class":151,"line":1644},[149,169175,5808],{"class":325},[149,169177,12583],{"class":155},[149,169179,2344],{"class":325},[149,169181,152540],{"class":155},[149,169183,169184],{"class":151,"line":3348},[149,169185,4119],{"emptyLinePlaceholder":1800},[149,169187,169188],{"class":151,"line":3362},[149,169189,4119],{"emptyLinePlaceholder":1800},[149,169191,169192,169194,169196,169198,169200,169202],{"class":151,"line":3367},[149,169193,32121],{"class":309},[149,169195,168036],{"class":155},[149,169197,2309],{"class":309},[149,169199,329],{"class":155},[149,169201,2561],{"class":309},[149,169203,32203],{"class":155},[24,169205,169206,169207,102698,169209,169211],{},"这个写法使用 ",[48,169208,167968],{},[48,169210,168083],{}," 接收原函数的所有参数。",[14,169213,169215],{"id":169214},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[24,169217,124971],{},[125,169219,169220,169223,169226],{},[45,169221,169222],{},"给定一组学生数据。",[45,169224,169225],{},"封装函数，根据传入规则筛选学生。",[45,169227,169228],{},"筛选及格、优秀、未成年学生。",[24,169230,11749],{},[140,169232,169234],{"className":32084,"code":169233,"language":32086,"meta":145,"style":145},"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",[48,169235,169236,169244,169272,169300,169328,169332,169336,169340,169350,169358,169368,169375,169380,169386,169390,169394,169418,169441,169464,169468,169475,169482],{"__ignoreMap":145},[149,169237,169238,169240,169242],{"class":151,"line":152},[149,169239,161152],{"class":155},[149,169241,166],{"class":325},[149,169243,57139],{"class":155},[149,169245,169246,169248,169250,169252,169254,169256,169258,169260,169262,169264,169266,169268,169270],{"class":151,"line":193},[149,169247,149821],{"class":155},[149,169249,64367],{"class":169},[149,169251,313],{"class":155},[149,169253,151324],{"class":169},[149,169255,329],{"class":155},[149,169257,70808],{"class":169},[149,169259,313],{"class":155},[149,169261,2513],{"class":309},[149,169263,329],{"class":155},[149,169265,152908],{"class":169},[149,169267,313],{"class":155},[149,169269,2848],{"class":309},[149,169271,6648],{"class":155},[149,169273,169274,169276,169278,169280,169282,169284,169286,169288,169290,169292,169294,169296,169298],{"class":151,"line":235},[149,169275,149821],{"class":155},[149,169277,64367],{"class":169},[149,169279,313],{"class":155},[149,169281,152372],{"class":169},[149,169283,329],{"class":155},[149,169285,70808],{"class":169},[149,169287,313],{"class":155},[149,169289,2488],{"class":309},[149,169291,329],{"class":155},[149,169293,152908],{"class":169},[149,169295,313],{"class":155},[149,169297,2672],{"class":309},[149,169299,6648],{"class":155},[149,169301,169302,169304,169306,169308,169310,169312,169314,169316,169318,169320,169322,169324,169326],{"class":151,"line":340},[149,169303,149821],{"class":155},[149,169305,64367],{"class":169},[149,169307,313],{"class":155},[149,169309,161167],{"class":169},[149,169311,329],{"class":155},[149,169313,70808],{"class":169},[149,169315,313],{"class":155},[149,169317,2537],{"class":309},[149,169319,329],{"class":155},[149,169321,152908],{"class":169},[149,169323,313],{"class":155},[149,169325,2743],{"class":309},[149,169327,6648],{"class":155},[149,169329,169330],{"class":151,"line":346},[149,169331,34952],{"class":155},[149,169333,169334],{"class":151,"line":352},[149,169335,4119],{"emptyLinePlaceholder":1800},[149,169337,169338],{"class":151,"line":1021},[149,169339,4119],{"emptyLinePlaceholder":1800},[149,169341,169342,169344,169347],{"class":151,"line":1035},[149,169343,33653],{"class":325},[149,169345,169346],{"class":162}," filter_students",[149,169348,169349],{"class":155},"(students, condition):\n",[149,169351,169352,169354,169356],{"class":151,"line":1054},[149,169353,162659],{"class":155},[149,169355,166],{"class":325},[149,169357,53537],{"class":155},[149,169359,169360,169362,169364,169366],{"class":151,"line":1072},[149,169361,4919],{"class":325},[149,169363,153573],{"class":155},[149,169365,27752],{"class":325},[149,169367,153578],{"class":155},[149,169369,169370,169372],{"class":151,"line":1090},[149,169371,4216],{"class":325},[149,169373,169374],{"class":155}," condition(student):\n",[149,169376,169377],{"class":151,"line":1633},[149,169378,169379],{"class":155},"            result.append(student)\n",[149,169381,169382,169384],{"class":151,"line":1644},[149,169383,5808],{"class":325},[149,169385,169141],{"class":155},[149,169387,169388],{"class":151,"line":3348},[149,169389,4119],{"emptyLinePlaceholder":1800},[149,169391,169392],{"class":151,"line":3362},[149,169393,4119],{"emptyLinePlaceholder":1800},[149,169395,169396,169398,169400,169403,169405,169408,169410,169412,169414,169416],{"class":151,"line":3367},[149,169397,167137],{"class":155},[149,169399,166],{"class":325},[149,169401,169402],{"class":155}," filter_students(students, ",[149,169404,168322],{"class":325},[149,169406,169407],{"class":155}," s: s[",[149,169409,152908],{"class":169},[149,169411,6161],{"class":155},[149,169413,3430],{"class":325},[149,169415,159273],{"class":309},[149,169417,1878],{"class":155},[149,169419,169420,169423,169425,169427,169429,169431,169433,169435,169437,169439],{"class":151,"line":3373},[149,169421,169422],{"class":155},"excellent ",[149,169424,166],{"class":325},[149,169426,169402],{"class":155},[149,169428,168322],{"class":325},[149,169430,169407],{"class":155},[149,169432,152908],{"class":169},[149,169434,6161],{"class":155},[149,169436,3430],{"class":325},[149,169438,159224],{"class":309},[149,169440,1878],{"class":155},[149,169442,169443,169446,169448,169450,169452,169454,169456,169458,169460,169462],{"class":151,"line":3394},[149,169444,169445],{"class":155},"under_age ",[149,169447,166],{"class":325},[149,169449,169402],{"class":155},[149,169451,168322],{"class":325},[149,169453,169407],{"class":155},[149,169455,70808],{"class":169},[149,169457,6161],{"class":155},[149,169459,156],{"class":325},[149,169461,157721],{"class":309},[149,169463,1878],{"class":155},[149,169465,169466],{"class":151,"line":3399},[149,169467,4119],{"emptyLinePlaceholder":1800},[149,169469,169470,169472],{"class":151,"line":3413},[149,169471,32121],{"class":309},[149,169473,169474],{"class":155},"(passed)\n",[149,169476,169477,169479],{"class":151,"line":3418},[149,169478,32121],{"class":309},[149,169480,169481],{"class":155},"(excellent)\n",[149,169483,169484,169486],{"class":151,"line":3447},[149,169485,32121],{"class":309},[149,169487,169488],{"class":155},"(under_age)\n",[14,169490,169492],{"id":169491},"_715-易错点","7.15 易错点",[125,169494,169495,169498,169506,169511,169522],{},[45,169496,169497],{},"默认参数不要写可变对象。",[45,169499,169500,169502,169503,169505],{},[48,169501,167968],{}," 是元组，",[48,169504,168083],{}," 是字典。",[45,169507,169508,169510],{},[48,169509,168322],{}," 只适合简单表达式。",[45,169512,169513,102698,169515,169517,169518,169521],{},[48,169514,75726],{},[48,169516,81732],{}," 的结果是迭代器，常用 ",[48,169519,169520],{},"list()"," 转换查看。",[45,169523,169524],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169526,169528],{"id":169527},"_716-本章练习","7.16 本章练习",[125,169530,169531,169538,169544,169549,169554],{},[45,169532,169533,169534,169537],{},"写函数 ",[48,169535,169536],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[45,169539,169533,169540,169543],{},[48,169541,169542],{},"print_user(**kwargs)","，输出用户所有字段。",[45,169545,106045,169546,169548],{},[48,169547,168322],{}," 对学生列表按年龄排序。",[45,169550,106045,169551,169553],{},[48,169552,81732],{}," 找出成绩不及格的学生。",[45,169555,169556],{},"写一个装饰器，统计函数执行前后的提示信息。",[1783,169558,169559],{},"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":145,"searchDepth":193,"depth":193,"links":169561},[169562,169563,169564,169565,169566,169567,169571,169572,169573,169574,169579,169580,169581,169582,169583,169584],{"id":167420,"depth":193,"text":167421},{"id":167534,"depth":193,"text":167535},{"id":167623,"depth":193,"text":167624},{"id":167685,"depth":193,"text":167686},{"id":167831,"depth":193,"text":167832},{"id":167958,"depth":193,"text":167959,"children":169568},[169569,169570],{"id":167962,"depth":235,"text":167963},{"id":168077,"depth":235,"text":168078},{"id":168158,"depth":193,"text":168159},{"id":168316,"depth":193,"text":168317},{"id":168484,"depth":193,"text":168485},{"id":168566,"depth":193,"text":168567,"children":169575},[169576,169577,169578],{"id":168570,"depth":235,"text":168571},{"id":168641,"depth":235,"text":168642},{"id":168718,"depth":235,"text":168719},{"id":168843,"depth":193,"text":168844},{"id":168933,"depth":193,"text":168934},{"id":169064,"depth":193,"text":169065},{"id":169214,"depth":193,"text":169215},{"id":169491,"depth":193,"text":169492},{"id":169527,"depth":193,"text":169528},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167412,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169591,"title":169592,"body":169593,"description":1797,"extension":1798,"meta":172112,"navigation":1800,"path":172113,"seo":172114,"stem":172115,"__hash__":172116},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169594,"toc":172087},[169595,169598,169602,169605,169608,169639,169643,169647,169650,169677,169681,169684,169735,169738,169753,169756,169791,169795,169797,169821,169824,169884,169888,169892,169895,169952,169955,169975,169979,169982,170045,170049,170052,170108,170115,170139,170143,170146,170209,170213,170218,170269,170272,170276,170281,170348,170351,170433,170437,170442,170493,170496,170500,170503,170506,170514,170517,170563,170566,170612,170616,170622,170666,170669,170715,170718,170758,170761,170822,170826,170829,170919,170922,171064,171067,171134,171138,171141,171144,171285,171288,171366,171369,171545,171549,171551,171562,171564,171763,171767,172011,172015,172049,172053,172084],[10,169596,169592],{"id":169597},"_8-文件操作",[14,169599,169601],{"id":169600},"_81-文件操作的意义","8.1 文件操作的意义",[24,169603,169604],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[24,169606,169607],{},"常见文件类型：",[125,169609,169610,169616,169622,169628,169634],{},[45,169611,169612,169615],{},[48,169613,169614],{},".txt","：普通文本。",[45,169617,169618,169621],{},[48,169619,169620],{},".csv","：表格文本。",[45,169623,169624,169627],{},[48,169625,169626],{},".json","：结构化数据。",[45,169629,169630,169633],{},[48,169631,169632],{},".log","：日志文件。",[45,169635,169636,169638],{},[48,169637,147788],{},"：Python 源代码。",[14,169640,169642],{"id":169641},"_82-路径","8.2 路径",[19,169644,169646],{"id":169645},"_821-相对路径","8.2.1 相对路径",[24,169648,169649],{},"相对当前运行目录：",[140,169651,169653],{"className":32084,"code":169652,"language":32086,"meta":145,"style":145},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[48,169654,169655],{"__ignoreMap":145},[149,169656,169657,169659,169661,169663,169665,169667,169669,169671,169673,169675],{"class":151,"line":152},[149,169658,88596],{"class":309},[149,169660,319],{"class":155},[149,169662,148232],{"class":169},[149,169664,329],{"class":155},[149,169666,148237],{"class":169},[149,169668,329],{"class":155},[149,169670,148242],{"class":6932},[149,169672,166],{"class":325},[149,169674,148247],{"class":169},[149,169676,1878],{"class":155},[19,169678,169680],{"id":169679},"_822-绝对路径","8.2.2 绝对路径",[24,169682,169683],{},"从根目录或盘符开始：",[140,169685,169687],{"className":32084,"code":169686,"language":32086,"meta":145,"style":145},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[48,169688,169689,169712],{"__ignoreMap":145},[149,169690,169691,169693,169695,169698,169700,169702,169704,169706,169708,169710],{"class":151,"line":152},[149,169692,88596],{"class":309},[149,169694,319],{"class":155},[149,169696,169697],{"class":169},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[149,169699,329],{"class":155},[149,169701,148237],{"class":169},[149,169703,329],{"class":155},[149,169705,148242],{"class":6932},[149,169707,166],{"class":325},[149,169709,148247],{"class":169},[149,169711,1878],{"class":155},[149,169713,169714,169716,169718,169721,169723,169725,169727,169729,169731,169733],{"class":151,"line":193},[149,169715,88596],{"class":309},[149,169717,319],{"class":155},[149,169719,169720],{"class":169},"\"D:\u002Fdata\u002Fdata.txt\"",[149,169722,329],{"class":155},[149,169724,148237],{"class":169},[149,169726,329],{"class":155},[149,169728,148242],{"class":6932},[149,169730,166],{"class":325},[149,169732,148247],{"class":169},[149,169734,1878],{"class":155},[24,169736,169737],{},"Windows 路径建议写成：",[140,169739,169741],{"className":32084,"code":169740,"language":32086,"meta":145,"style":145},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[48,169742,169743],{"__ignoreMap":145},[149,169744,169745,169748,169750],{"class":151,"line":152},[149,169746,169747],{"class":155},"path ",[149,169749,166],{"class":325},[149,169751,169752],{"class":169}," \"D:\u002Fdata\u002Fdata.txt\"\n",[24,169754,169755],{},"或原始字符串：",[140,169757,169759],{"className":32084,"code":169758,"language":32086,"meta":145,"style":145},"path = r\"D:\\data\\data.txt\"\n",[48,169760,169761],{"__ignoreMap":145},[149,169762,169763,169765,169767,169769,169771,169774,169777,169780,169782,169784,169786,169789],{"class":151,"line":152},[149,169764,169747],{"class":155},[149,169766,166],{"class":325},[149,169768,18831],{"class":325},[149,169770,2115],{"class":169},[149,169772,169773],{"class":49683},"D:",[149,169775,169776],{"class":309},"\\d",[149,169778,169779],{"class":49683},"ata",[149,169781,169776],{"class":309},[149,169783,169779],{"class":49683},[149,169785,2421],{"class":309},[149,169787,169788],{"class":49683},"txt",[149,169790,26842],{"class":169},[14,169792,169794],{"id":169793},"_83-open函数","8.3 open函数",[24,169796,6899],{},[140,169798,169800],{"className":32084,"code":169799,"language":32086,"meta":145,"style":145},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[48,169801,169802],{"__ignoreMap":145},[149,169803,169804,169806,169808,169810,169813,169815,169817,169819],{"class":151,"line":152},[149,169805,47060],{"class":6932},[149,169807,15277],{"class":325},[149,169809,148227],{"class":309},[149,169811,169812],{"class":155},"(文件路径, 打开模式, ",[149,169814,148242],{"class":6932},[149,169816,166],{"class":325},[149,169818,148247],{"class":169},[149,169820,1878],{"class":155},[24,169822,169823],{},"常见模式：",[2003,169825,169826,169835],{},[2006,169827,169828],{},[2009,169829,169830,169833],{},[2012,169831,169832],{},"模式",[2012,169834,27578],{},[2049,169836,169837,169846,169855,169864,169874],{},[2009,169838,169839,169843],{},[2054,169840,169841],{},[48,169842,2532],{},[2054,169844,169845],{},"只读，文件不存在会报错",[2009,169847,169848,169852],{},[2054,169849,169850],{},[48,169851,2656],{},[2054,169853,169854],{},"只写，文件不存在会创建，存在会清空",[2009,169856,169857,169861],{},[2054,169858,169859],{},[48,169860,2102],{},[2054,169862,169863],{},"追加，文件不存在会创建",[2009,169865,169866,169871],{},[2054,169867,169868],{},[48,169869,169870],{},"rb",[2054,169872,169873],{},"二进制只读",[2009,169875,169876,169881],{},[2054,169877,169878],{},[48,169879,169880],{},"wb",[2054,169882,169883],{},"二进制只写",[14,169885,169887],{"id":169886},"_84-读取文件","8.4 读取文件",[19,169889,169891],{"id":169890},"_841-read","8.4.1 read",[24,169893,169894],{},"一次读取全部内容：",[140,169896,169898],{"className":32084,"code":169897,"language":32086,"meta":145,"style":145},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[48,169899,169900,169926,169938,169945],{"__ignoreMap":145},[149,169901,169902,169904,169906,169908,169910,169912,169914,169916,169918,169920,169922,169924],{"class":151,"line":152},[149,169903,47060],{"class":6932},[149,169905,15277],{"class":325},[149,169907,148227],{"class":309},[149,169909,319],{"class":155},[149,169911,148232],{"class":169},[149,169913,329],{"class":155},[149,169915,148237],{"class":169},[149,169917,329],{"class":155},[149,169919,148242],{"class":6932},[149,169921,166],{"class":325},[149,169923,148247],{"class":169},[149,169925,1878],{"class":155},[149,169927,169928,169931,169933,169935],{"class":151,"line":193},[149,169929,169930],{"class":155},"content ",[149,169932,166],{"class":325},[149,169934,149589],{"class":6932},[149,169936,169937],{"class":155},".read()\n",[149,169939,169940,169942],{"class":151,"line":235},[149,169941,32121],{"class":309},[149,169943,169944],{"class":155},"(content)\n",[149,169946,169947,169949],{"class":151,"line":340},[149,169948,47060],{"class":6932},[149,169950,169951],{"class":155},".close()\n",[24,169953,169954],{},"可以指定读取字符数：",[140,169956,169958],{"className":32084,"code":169957,"language":32086,"meta":145,"style":145},"content = file.read(10)\n",[48,169959,169960],{"__ignoreMap":145},[149,169961,169962,169964,169966,169968,169971,169973],{"class":151,"line":152},[149,169963,169930],{"class":155},[149,169965,166],{"class":325},[149,169967,149589],{"class":6932},[149,169969,169970],{"class":155},".read(",[149,169972,2309],{"class":309},[149,169974,1878],{"class":155},[19,169976,169978],{"id":169977},"_842-readline","8.4.2 readline",[24,169980,169981],{},"一次读取一行：",[140,169983,169985],{"className":32084,"code":169984,"language":32086,"meta":145,"style":145},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[48,169986,169987,170013,170017,170028,170035,170039],{"__ignoreMap":145},[149,169988,169989,169991,169993,169995,169997,169999,170001,170003,170005,170007,170009,170011],{"class":151,"line":152},[149,169990,47060],{"class":6932},[149,169992,15277],{"class":325},[149,169994,148227],{"class":309},[149,169996,319],{"class":155},[149,169998,148232],{"class":169},[149,170000,329],{"class":155},[149,170002,148237],{"class":169},[149,170004,329],{"class":155},[149,170006,148242],{"class":6932},[149,170008,166],{"class":325},[149,170010,148247],{"class":169},[149,170012,1878],{"class":155},[149,170014,170015],{"class":151,"line":193},[149,170016,4119],{"emptyLinePlaceholder":1800},[149,170018,170019,170021,170023,170025],{"class":151,"line":235},[149,170020,148688],{"class":155},[149,170022,166],{"class":325},[149,170024,149589],{"class":6932},[149,170026,170027],{"class":155},".readline()\n",[149,170029,170030,170032],{"class":151,"line":340},[149,170031,32121],{"class":309},[149,170033,170034],{"class":155},"(line)\n",[149,170036,170037],{"class":151,"line":346},[149,170038,4119],{"emptyLinePlaceholder":1800},[149,170040,170041,170043],{"class":151,"line":352},[149,170042,47060],{"class":6932},[149,170044,169951],{"class":155},[19,170046,170048],{"id":170047},"_843-readlines","8.4.3 readlines",[24,170050,170051],{},"读取所有行，返回列表：",[140,170053,170055],{"className":32084,"code":170054,"language":32086,"meta":145,"style":145},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[48,170056,170057,170083,170095,170102],{"__ignoreMap":145},[149,170058,170059,170061,170063,170065,170067,170069,170071,170073,170075,170077,170079,170081],{"class":151,"line":152},[149,170060,47060],{"class":6932},[149,170062,15277],{"class":325},[149,170064,148227],{"class":309},[149,170066,319],{"class":155},[149,170068,148232],{"class":169},[149,170070,329],{"class":155},[149,170072,148237],{"class":169},[149,170074,329],{"class":155},[149,170076,148242],{"class":6932},[149,170078,166],{"class":325},[149,170080,148247],{"class":169},[149,170082,1878],{"class":155},[149,170084,170085,170088,170090,170092],{"class":151,"line":193},[149,170086,170087],{"class":155},"lines ",[149,170089,166],{"class":325},[149,170091,149589],{"class":6932},[149,170093,170094],{"class":155},".readlines()\n",[149,170096,170097,170099],{"class":151,"line":235},[149,170098,32121],{"class":309},[149,170100,170101],{"class":155},"(lines)\n",[149,170103,170104,170106],{"class":151,"line":340},[149,170105,47060],{"class":6932},[149,170107,169951],{"class":155},[24,170109,170110,170111,170114],{},"每一行通常带有换行符，可以用 ",[48,170112,170113],{},"strip()"," 去掉：",[140,170116,170118],{"className":32084,"code":170117,"language":32086,"meta":145,"style":145},"for line in lines:\n    print(line.strip())\n",[48,170119,170120,170132],{"__ignoreMap":145},[149,170121,170122,170124,170127,170129],{"class":151,"line":152},[149,170123,4743],{"class":325},[149,170125,170126],{"class":155}," line ",[149,170128,27752],{"class":325},[149,170130,170131],{"class":155}," lines:\n",[149,170133,170134,170136],{"class":151,"line":193},[149,170135,33005],{"class":309},[149,170137,170138],{"class":155},"(line.strip())\n",[19,170140,170142],{"id":170141},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[24,170144,170145],{},"推荐读取大文件时使用：",[140,170147,170149],{"className":32084,"code":170148,"language":32086,"meta":145,"style":145},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[48,170150,170151,170177,170181,170193,170199,170203],{"__ignoreMap":145},[149,170152,170153,170155,170157,170159,170161,170163,170165,170167,170169,170171,170173,170175],{"class":151,"line":152},[149,170154,47060],{"class":6932},[149,170156,15277],{"class":325},[149,170158,148227],{"class":309},[149,170160,319],{"class":155},[149,170162,148232],{"class":169},[149,170164,329],{"class":155},[149,170166,148237],{"class":169},[149,170168,329],{"class":155},[149,170170,148242],{"class":6932},[149,170172,166],{"class":325},[149,170174,148247],{"class":169},[149,170176,1878],{"class":155},[149,170178,170179],{"class":151,"line":193},[149,170180,4119],{"emptyLinePlaceholder":1800},[149,170182,170183,170185,170187,170189,170191],{"class":151,"line":235},[149,170184,4743],{"class":325},[149,170186,170126],{"class":155},[149,170188,27752],{"class":325},[149,170190,149589],{"class":6932},[149,170192,5457],{"class":155},[149,170194,170195,170197],{"class":151,"line":340},[149,170196,33005],{"class":309},[149,170198,170138],{"class":155},[149,170200,170201],{"class":151,"line":346},[149,170202,4119],{"emptyLinePlaceholder":1800},[149,170204,170205,170207],{"class":151,"line":352},[149,170206,47060],{"class":6932},[149,170208,169951],{"class":155},[14,170210,170212],{"id":170211},"_85-with语句","8.5 with语句",[24,170214,170215,170217],{},[48,170216,109512],{}," 会自动关闭文件，推荐使用。",[140,170219,170221],{"className":32084,"code":170220,"language":32086,"meta":145,"style":145},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[48,170222,170223,170253,170263],{"__ignoreMap":145},[149,170224,170225,170227,170229,170231,170233,170235,170237,170239,170241,170243,170245,170247,170249,170251],{"class":151,"line":152},[149,170226,109512],{"class":325},[149,170228,148227],{"class":309},[149,170230,319],{"class":155},[149,170232,148232],{"class":169},[149,170234,329],{"class":155},[149,170236,148237],{"class":169},[149,170238,329],{"class":155},[149,170240,148242],{"class":6932},[149,170242,166],{"class":325},[149,170244,148247],{"class":169},[149,170246,15427],{"class":155},[149,170248,33089],{"class":325},[149,170250,149589],{"class":6932},[149,170252,5457],{"class":155},[149,170254,170255,170257,170259,170261],{"class":151,"line":193},[149,170256,148259],{"class":155},[149,170258,166],{"class":325},[149,170260,149589],{"class":6932},[149,170262,169937],{"class":155},[149,170264,170265,170267],{"class":151,"line":235},[149,170266,33005],{"class":309},[149,170268,169944],{"class":155},[24,170270,170271],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170273,170275],{"id":170274},"_86-写入文件","8.6 写入文件",[24,170277,170278,170280],{},[48,170279,2656],{}," 模式会清空原文件。",[140,170282,170284],{"className":32084,"code":170283,"language":32086,"meta":145,"style":145},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[48,170285,170286,170316,170333],{"__ignoreMap":145},[149,170287,170288,170290,170292,170294,170296,170298,170300,170302,170304,170306,170308,170310,170312,170314],{"class":151,"line":152},[149,170289,109512],{"class":325},[149,170291,148227],{"class":309},[149,170293,319],{"class":155},[149,170295,148232],{"class":169},[149,170297,329],{"class":155},[149,170299,153412],{"class":169},[149,170301,329],{"class":155},[149,170303,148242],{"class":6932},[149,170305,166],{"class":325},[149,170307,148247],{"class":169},[149,170309,15427],{"class":155},[149,170311,33089],{"class":325},[149,170313,149589],{"class":6932},[149,170315,5457],{"class":155},[149,170317,170318,170321,170324,170327,170329,170331],{"class":151,"line":193},[149,170319,170320],{"class":6932},"    file",[149,170322,170323],{"class":155},".write(",[149,170325,170326],{"class":169},"\"hello",[149,170328,157961],{"class":309},[149,170330,2115],{"class":169},[149,170332,1878],{"class":155},[149,170334,170335,170337,170339,170342,170344,170346],{"class":151,"line":235},[149,170336,170320],{"class":6932},[149,170338,170323],{"class":155},[149,170340,170341],{"class":169},"\"python",[149,170343,157961],{"class":309},[149,170345,2115],{"class":169},[149,170347,1878],{"class":155},[24,170349,170350],{},"写入多行：",[140,170352,170354],{"className":32084,"code":170353,"language":32086,"meta":145,"style":145},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[48,170355,170356,170391,170395,170426],{"__ignoreMap":145},[149,170357,170358,170360,170362,170364,170367,170369,170371,170373,170376,170378,170380,170382,170385,170387,170389],{"class":151,"line":152},[149,170359,170087],{"class":155},[149,170361,166],{"class":325},[149,170363,53924],{"class":155},[149,170365,170366],{"class":169},"\"小明,18",[149,170368,157961],{"class":309},[149,170370,2115],{"class":169},[149,170372,329],{"class":155},[149,170374,170375],{"class":169},"\"小红,17",[149,170377,157961],{"class":309},[149,170379,2115],{"class":169},[149,170381,329],{"class":155},[149,170383,170384],{"class":169},"\"小刚,19",[149,170386,157961],{"class":309},[149,170388,2115],{"class":169},[149,170390,34952],{"class":155},[149,170392,170393],{"class":151,"line":193},[149,170394,4119],{"emptyLinePlaceholder":1800},[149,170396,170397,170399,170401,170403,170406,170408,170410,170412,170414,170416,170418,170420,170422,170424],{"class":151,"line":235},[149,170398,109512],{"class":325},[149,170400,148227],{"class":309},[149,170402,319],{"class":155},[149,170404,170405],{"class":169},"\"students.txt\"",[149,170407,329],{"class":155},[149,170409,153412],{"class":169},[149,170411,329],{"class":155},[149,170413,148242],{"class":6932},[149,170415,166],{"class":325},[149,170417,148247],{"class":169},[149,170419,15427],{"class":155},[149,170421,33089],{"class":325},[149,170423,149589],{"class":6932},[149,170425,5457],{"class":155},[149,170427,170428,170430],{"class":151,"line":340},[149,170429,170320],{"class":6932},[149,170431,170432],{"class":155},".writelines(lines)\n",[14,170434,170436],{"id":170435},"_87-追加文件","8.7 追加文件",[24,170438,170439,170441],{},[48,170440,2102],{}," 模式不会清空原内容，而是在末尾追加。",[140,170443,170445],{"className":32084,"code":170444,"language":32086,"meta":145,"style":145},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[48,170446,170447,170478],{"__ignoreMap":145},[149,170448,170449,170451,170453,170455,170458,170460,170462,170464,170466,170468,170470,170472,170474,170476],{"class":151,"line":152},[149,170450,109512],{"class":325},[149,170452,148227],{"class":309},[149,170454,319],{"class":155},[149,170456,170457],{"class":169},"\"log.txt\"",[149,170459,329],{"class":155},[149,170461,166761],{"class":169},[149,170463,329],{"class":155},[149,170465,148242],{"class":6932},[149,170467,166],{"class":325},[149,170469,148247],{"class":169},[149,170471,15427],{"class":155},[149,170473,33089],{"class":325},[149,170475,149589],{"class":6932},[149,170477,5457],{"class":155},[149,170479,170480,170482,170484,170487,170489,170491],{"class":151,"line":193},[149,170481,170320],{"class":6932},[149,170483,170323],{"class":155},[149,170485,170486],{"class":169},"\"程序启动",[149,170488,157961],{"class":309},[149,170490,2115],{"class":169},[149,170492,1878],{"class":155},[24,170494,170495],{},"日志类文件常用追加模式。",[14,170497,170499],{"id":170498},"_88-文件编码","8.8 文件编码",[24,170501,170502],{},"编码决定文字如何保存为字节。",[24,170504,170505],{},"常见编码：",[125,170507,170508,170511],{},[45,170509,170510],{},"UTF-8：推荐。",[45,170512,170513],{},"GBK：部分 Windows 中文文件常见。",[24,170515,170516],{},"读取文件乱码时，可以尝试：",[140,170518,170520],{"className":32084,"code":170519,"language":32086,"meta":145,"style":145},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[48,170521,170522,170553],{"__ignoreMap":145},[149,170523,170524,170526,170528,170530,170532,170534,170536,170538,170540,170542,170545,170547,170549,170551],{"class":151,"line":152},[149,170525,109512],{"class":325},[149,170527,148227],{"class":309},[149,170529,319],{"class":155},[149,170531,148232],{"class":169},[149,170533,329],{"class":155},[149,170535,148237],{"class":169},[149,170537,329],{"class":155},[149,170539,148242],{"class":6932},[149,170541,166],{"class":325},[149,170543,170544],{"class":169},"\"gbk\"",[149,170546,15427],{"class":155},[149,170548,33089],{"class":325},[149,170550,149589],{"class":6932},[149,170552,5457],{"class":155},[149,170554,170555,170557,170559,170561],{"class":151,"line":193},[149,170556,148259],{"class":155},[149,170558,166],{"class":325},[149,170560,149589],{"class":6932},[149,170562,169937],{"class":155},[24,170564,170565],{},"写文件时建议统一 UTF-8：",[140,170567,170569],{"className":32084,"code":170568,"language":32086,"meta":145,"style":145},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[48,170570,170571,170601],{"__ignoreMap":145},[149,170572,170573,170575,170577,170579,170581,170583,170585,170587,170589,170591,170593,170595,170597,170599],{"class":151,"line":152},[149,170574,109512],{"class":325},[149,170576,148227],{"class":309},[149,170578,319],{"class":155},[149,170580,148232],{"class":169},[149,170582,329],{"class":155},[149,170584,153412],{"class":169},[149,170586,329],{"class":155},[149,170588,148242],{"class":6932},[149,170590,166],{"class":325},[149,170592,148247],{"class":169},[149,170594,15427],{"class":155},[149,170596,33089],{"class":325},[149,170598,149589],{"class":6932},[149,170600,5457],{"class":155},[149,170602,170603,170605,170607,170610],{"class":151,"line":193},[149,170604,170320],{"class":6932},[149,170606,170323],{"class":155},[149,170608,170609],{"class":169},"\"中文内容\"",[149,170611,1878],{"class":155},[14,170613,170615],{"id":170614},"_89-pathlib","8.9 pathlib",[24,170617,170618,170621],{},[48,170619,170620],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[140,170623,170625],{"className":32084,"code":170624,"language":32086,"meta":145,"style":145},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[48,170626,170627,170637,170641,170659],{"__ignoreMap":145},[149,170628,170629,170631,170633,170635],{"class":151,"line":152},[149,170630,32443],{"class":325},[149,170632,109990],{"class":155},[149,170634,32098],{"class":325},[149,170636,109995],{"class":155},[149,170638,170639],{"class":151,"line":193},[149,170640,4119],{"emptyLinePlaceholder":1800},[149,170642,170643,170645,170647,170649,170652,170654,170656],{"class":151,"line":235},[149,170644,169747],{"class":155},[149,170646,166],{"class":325},[149,170648,110224],{"class":155},[149,170650,170651],{"class":169},"\"data\"",[149,170653,15427],{"class":155},[149,170655,2447],{"class":325},[149,170657,170658],{"class":169}," \"students.txt\"\n",[149,170660,170661,170663],{"class":151,"line":340},[149,170662,32121],{"class":309},[149,170664,170665],{"class":155},"(path)\n",[24,170667,170668],{},"创建目录：",[140,170670,170672],{"className":32084,"code":170671,"language":32086,"meta":145,"style":145},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[48,170673,170674,170684,170688,170701],{"__ignoreMap":145},[149,170675,170676,170678,170680,170682],{"class":151,"line":152},[149,170677,32443],{"class":325},[149,170679,109990],{"class":155},[149,170681,32098],{"class":325},[149,170683,109995],{"class":155},[149,170685,170686],{"class":151,"line":193},[149,170687,4119],{"emptyLinePlaceholder":1800},[149,170689,170690,170693,170695,170697,170699],{"class":151,"line":235},[149,170691,170692],{"class":155},"data_dir ",[149,170694,166],{"class":325},[149,170696,110224],{"class":155},[149,170698,170651],{"class":169},[149,170700,1878],{"class":155},[149,170702,170703,170706,170709,170711,170713],{"class":151,"line":340},[149,170704,170705],{"class":155},"data_dir.mkdir(",[149,170707,170708],{"class":6932},"exist_ok",[149,170710,166],{"class":325},[149,170712,33182],{"class":309},[149,170714,1878],{"class":155},[24,170716,170717],{},"判断文件是否存在：",[140,170719,170721],{"className":32084,"code":170720,"language":32086,"meta":145,"style":145},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[48,170722,170723,170736,170740,170747],{"__ignoreMap":145},[149,170724,170725,170727,170729,170731,170734],{"class":151,"line":152},[149,170726,169747],{"class":155},[149,170728,166],{"class":325},[149,170730,110224],{"class":155},[149,170732,170733],{"class":169},"\"data\u002Fstudents.txt\"",[149,170735,1878],{"class":155},[149,170737,170738],{"class":151,"line":193},[149,170739,4119],{"emptyLinePlaceholder":1800},[149,170741,170742,170744],{"class":151,"line":235},[149,170743,3255],{"class":325},[149,170745,170746],{"class":155}," path.exists():\n",[149,170748,170749,170751,170753,170756],{"class":151,"line":340},[149,170750,33005],{"class":309},[149,170752,319],{"class":155},[149,170754,170755],{"class":169},"\"文件存在\"",[149,170757,1878],{"class":155},[24,170759,170760],{},"读写文本：",[140,170762,170764],{"className":32084,"code":170763,"language":32086,"meta":145,"style":145},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[48,170765,170766,170778,170782,170799,170816],{"__ignoreMap":145},[149,170767,170768,170770,170772,170774,170776],{"class":151,"line":152},[149,170769,169747],{"class":155},[149,170771,166],{"class":325},[149,170773,110224],{"class":155},[149,170775,148232],{"class":169},[149,170777,1878],{"class":155},[149,170779,170780],{"class":151,"line":193},[149,170781,4119],{"emptyLinePlaceholder":1800},[149,170783,170784,170787,170789,170791,170793,170795,170797],{"class":151,"line":235},[149,170785,170786],{"class":155},"path.write_text(",[149,170788,147312],{"class":169},[149,170790,329],{"class":155},[149,170792,148242],{"class":6932},[149,170794,166],{"class":325},[149,170796,148247],{"class":169},[149,170798,1878],{"class":155},[149,170800,170801,170803,170805,170808,170810,170812,170814],{"class":151,"line":340},[149,170802,169930],{"class":155},[149,170804,166],{"class":325},[149,170806,170807],{"class":155}," path.read_text(",[149,170809,148242],{"class":6932},[149,170811,166],{"class":325},[149,170813,148247],{"class":169},[149,170815,1878],{"class":155},[149,170817,170818,170820],{"class":151,"line":346},[149,170819,32121],{"class":309},[149,170821,169944],{"class":155},[14,170823,170825],{"id":170824},"_810-json文件","8.10 JSON文件",[24,170827,170828],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[140,170830,170832],{"className":32084,"code":170831,"language":32086,"meta":145,"style":145},"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",[48,170833,170834,170840,170844,170852,170862,170872,170880,170884,170888,170913],{"__ignoreMap":145},[149,170835,170836,170838],{"class":151,"line":152},[149,170837,32098],{"class":325},[149,170839,148527],{"class":155},[149,170841,170842],{"class":151,"line":193},[149,170843,4119],{"emptyLinePlaceholder":1800},[149,170845,170846,170848,170850],{"class":151,"line":235},[149,170847,150917],{"class":155},[149,170849,166],{"class":325},[149,170851,304],{"class":155},[149,170853,170854,170856,170858,170860],{"class":151,"line":340},[149,170855,148456],{"class":169},[149,170857,313],{"class":155},[149,170859,151324],{"class":169},[149,170861,33172],{"class":155},[149,170863,170864,170866,170868,170870],{"class":151,"line":346},[149,170865,165973],{"class":169},[149,170867,313],{"class":155},[149,170869,2513],{"class":309},[149,170871,33172],{"class":155},[149,170873,170874,170876,170878],{"class":151,"line":352},[149,170875,165984],{"class":169},[149,170877,313],{"class":155},[149,170879,165989],{"class":309},[149,170881,170882],{"class":151,"line":1021},[149,170883,355],{"class":155},[149,170885,170886],{"class":151,"line":1035},[149,170887,4119],{"emptyLinePlaceholder":1800},[149,170889,170890,170892,170894,170897,170899,170901,170903,170905,170907,170909,170911],{"class":151,"line":1054},[149,170891,157880],{"class":155},[149,170893,166],{"class":325},[149,170895,170896],{"class":155}," json.dumps(student, ",[149,170898,148573],{"class":6932},[149,170900,166],{"class":325},[149,170902,35693],{"class":309},[149,170904,329],{"class":155},[149,170906,153448],{"class":6932},[149,170908,166],{"class":325},[149,170910,1045],{"class":309},[149,170912,1878],{"class":155},[149,170914,170915,170917],{"class":151,"line":1072},[149,170916,32121],{"class":309},[149,170918,165507],{"class":155},[24,170920,170921],{},"写入 JSON 文件：",[140,170923,170925],{"className":32084,"code":170924,"language":32086,"meta":145,"style":145},"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",[48,170926,170927,170933,170937,170945,170973,171001,171005,171009,171039],{"__ignoreMap":145},[149,170928,170929,170931],{"class":151,"line":152},[149,170930,32098],{"class":325},[149,170932,148527],{"class":155},[149,170934,170935],{"class":151,"line":193},[149,170936,4119],{"emptyLinePlaceholder":1800},[149,170938,170939,170941,170943],{"class":151,"line":235},[149,170940,161152],{"class":155},[149,170942,166],{"class":325},[149,170944,57139],{"class":155},[149,170946,170947,170949,170951,170953,170955,170957,170959,170961,170963,170965,170967,170969,170971],{"class":151,"line":340},[149,170948,149821],{"class":155},[149,170950,64367],{"class":169},[149,170952,313],{"class":155},[149,170954,151324],{"class":169},[149,170956,329],{"class":155},[149,170958,70808],{"class":169},[149,170960,313],{"class":155},[149,170962,2513],{"class":309},[149,170964,329],{"class":155},[149,170966,152908],{"class":169},[149,170968,313],{"class":155},[149,170970,2848],{"class":309},[149,170972,6648],{"class":155},[149,170974,170975,170977,170979,170981,170983,170985,170987,170989,170991,170993,170995,170997,170999],{"class":151,"line":346},[149,170976,149821],{"class":155},[149,170978,64367],{"class":169},[149,170980,313],{"class":155},[149,170982,152372],{"class":169},[149,170984,329],{"class":155},[149,170986,70808],{"class":169},[149,170988,313],{"class":155},[149,170990,2488],{"class":309},[149,170992,329],{"class":155},[149,170994,152908],{"class":169},[149,170996,313],{"class":155},[149,170998,2672],{"class":309},[149,171000,6648],{"class":155},[149,171002,171003],{"class":151,"line":352},[149,171004,34952],{"class":155},[149,171006,171007],{"class":151,"line":1021},[149,171008,4119],{"emptyLinePlaceholder":1800},[149,171010,171011,171013,171015,171017,171019,171021,171023,171025,171027,171029,171031,171033,171035,171037],{"class":151,"line":1035},[149,171012,109512],{"class":325},[149,171014,148227],{"class":309},[149,171016,319],{"class":155},[149,171018,153267],{"class":169},[149,171020,329],{"class":155},[149,171022,153412],{"class":169},[149,171024,329],{"class":155},[149,171026,148242],{"class":6932},[149,171028,166],{"class":325},[149,171030,148247],{"class":169},[149,171032,15427],{"class":155},[149,171034,33089],{"class":325},[149,171036,149589],{"class":6932},[149,171038,5457],{"class":155},[149,171040,171041,171044,171046,171048,171050,171052,171054,171056,171058,171060,171062],{"class":151,"line":1054},[149,171042,171043],{"class":155},"    json.dump(students, ",[149,171045,47060],{"class":6932},[149,171047,329],{"class":155},[149,171049,148573],{"class":6932},[149,171051,166],{"class":325},[149,171053,35693],{"class":309},[149,171055,329],{"class":155},[149,171057,153448],{"class":6932},[149,171059,166],{"class":325},[149,171061,1045],{"class":309},[149,171063,1878],{"class":155},[24,171065,171066],{},"读取 JSON 文件：",[140,171068,171070],{"className":32084,"code":171069,"language":32086,"meta":145,"style":145},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[48,171071,171072,171078,171082,171112,171124,171128],{"__ignoreMap":145},[149,171073,171074,171076],{"class":151,"line":152},[149,171075,32098],{"class":325},[149,171077,148527],{"class":155},[149,171079,171080],{"class":151,"line":193},[149,171081,4119],{"emptyLinePlaceholder":1800},[149,171083,171084,171086,171088,171090,171092,171094,171096,171098,171100,171102,171104,171106,171108,171110],{"class":151,"line":235},[149,171085,109512],{"class":325},[149,171087,148227],{"class":309},[149,171089,319],{"class":155},[149,171091,153267],{"class":169},[149,171093,329],{"class":155},[149,171095,148237],{"class":169},[149,171097,329],{"class":155},[149,171099,148242],{"class":6932},[149,171101,166],{"class":325},[149,171103,148247],{"class":169},[149,171105,15427],{"class":155},[149,171107,33089],{"class":325},[149,171109,149589],{"class":6932},[149,171111,5457],{"class":155},[149,171113,171114,171116,171118,171120,171122],{"class":151,"line":340},[149,171115,154473],{"class":155},[149,171117,166],{"class":325},[149,171119,149600],{"class":155},[149,171121,47060],{"class":6932},[149,171123,1878],{"class":155},[149,171125,171126],{"class":151,"line":346},[149,171127,4119],{"emptyLinePlaceholder":1800},[149,171129,171130,171132],{"class":151,"line":352},[149,171131,32121],{"class":309},[149,171133,166431],{"class":155},[14,171135,171137],{"id":171136},"_811-csv文件","8.11 CSV文件",[24,171139,171140],{},"CSV 是逗号分隔值，常用于表格数据。",[24,171142,171143],{},"写入 CSV：",[140,171145,171147],{"className":32084,"code":171146,"language":32086,"meta":145,"style":145},"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",[48,171148,171149,171156,171160,171168,171186,171202,171218,171222,171226,171266,171280],{"__ignoreMap":145},[149,171150,171151,171153],{"class":151,"line":152},[149,171152,32098],{"class":325},[149,171154,171155],{"class":155}," csv\n",[149,171157,171158],{"class":151,"line":193},[149,171159,4119],{"emptyLinePlaceholder":1800},[149,171161,171162,171164,171166],{"class":151,"line":235},[149,171163,161152],{"class":155},[149,171165,166],{"class":325},[149,171167,57139],{"class":155},[149,171169,171170,171173,171175,171177,171179,171181,171184],{"class":151,"line":340},[149,171171,171172],{"class":155},"    [",[149,171174,74781],{"class":169},[149,171176,329],{"class":155},[149,171178,74814],{"class":169},[149,171180,329],{"class":155},[149,171182,171183],{"class":169},"\"成绩\"",[149,171185,89517],{"class":155},[149,171187,171188,171190,171192,171194,171196,171198,171200],{"class":151,"line":346},[149,171189,171172],{"class":155},[149,171191,151324],{"class":169},[149,171193,329],{"class":155},[149,171195,2513],{"class":309},[149,171197,329],{"class":155},[149,171199,2848],{"class":309},[149,171201,89517],{"class":155},[149,171203,171204,171206,171208,171210,171212,171214,171216],{"class":151,"line":352},[149,171205,171172],{"class":155},[149,171207,152372],{"class":169},[149,171209,329],{"class":155},[149,171211,2488],{"class":309},[149,171213,329],{"class":155},[149,171215,2672],{"class":309},[149,171217,89517],{"class":155},[149,171219,171220],{"class":151,"line":1021},[149,171221,34952],{"class":155},[149,171223,171224],{"class":151,"line":1035},[149,171225,4119],{"emptyLinePlaceholder":1800},[149,171227,171228,171230,171232,171234,171237,171239,171241,171243,171245,171247,171249,171251,171254,171256,171258,171260,171262,171264],{"class":151,"line":1054},[149,171229,109512],{"class":325},[149,171231,148227],{"class":309},[149,171233,319],{"class":155},[149,171235,171236],{"class":169},"\"students.csv\"",[149,171238,329],{"class":155},[149,171240,153412],{"class":169},[149,171242,329],{"class":155},[149,171244,148242],{"class":6932},[149,171246,166],{"class":325},[149,171248,148247],{"class":169},[149,171250,329],{"class":155},[149,171252,171253],{"class":6932},"newline",[149,171255,166],{"class":325},[149,171257,1382],{"class":169},[149,171259,15427],{"class":155},[149,171261,33089],{"class":325},[149,171263,149589],{"class":6932},[149,171265,5457],{"class":155},[149,171267,171268,171271,171273,171276,171278],{"class":151,"line":1072},[149,171269,171270],{"class":155},"    writer ",[149,171272,166],{"class":325},[149,171274,171275],{"class":155}," csv.writer(",[149,171277,47060],{"class":6932},[149,171279,1878],{"class":155},[149,171281,171282],{"class":151,"line":1090},[149,171283,171284],{"class":155},"    writer.writerows(students)\n",[24,171286,171287],{},"读取 CSV：",[140,171289,171291],{"className":32084,"code":171290,"language":32086,"meta":145,"style":145},"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",[48,171292,171293,171299,171303,171333,171347,171359],{"__ignoreMap":145},[149,171294,171295,171297],{"class":151,"line":152},[149,171296,32098],{"class":325},[149,171298,171155],{"class":155},[149,171300,171301],{"class":151,"line":193},[149,171302,4119],{"emptyLinePlaceholder":1800},[149,171304,171305,171307,171309,171311,171313,171315,171317,171319,171321,171323,171325,171327,171329,171331],{"class":151,"line":235},[149,171306,109512],{"class":325},[149,171308,148227],{"class":309},[149,171310,319],{"class":155},[149,171312,171236],{"class":169},[149,171314,329],{"class":155},[149,171316,148237],{"class":169},[149,171318,329],{"class":155},[149,171320,148242],{"class":6932},[149,171322,166],{"class":325},[149,171324,148247],{"class":169},[149,171326,15427],{"class":155},[149,171328,33089],{"class":325},[149,171330,149589],{"class":6932},[149,171332,5457],{"class":155},[149,171334,171335,171338,171340,171343,171345],{"class":151,"line":340},[149,171336,171337],{"class":155},"    reader ",[149,171339,166],{"class":325},[149,171341,171342],{"class":155}," csv.reader(",[149,171344,47060],{"class":6932},[149,171346,1878],{"class":155},[149,171348,171349,171351,171354,171356],{"class":151,"line":346},[149,171350,4919],{"class":325},[149,171352,171353],{"class":155}," row ",[149,171355,27752],{"class":325},[149,171357,171358],{"class":155}," reader:\n",[149,171360,171361,171363],{"class":151,"line":352},[149,171362,34157],{"class":309},[149,171364,171365],{"class":155},"(row)\n",[24,171367,171368],{},"使用字典写入：",[140,171370,171372],{"className":32084,"code":171371,"language":32086,"meta":145,"style":145},"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",[48,171373,171374,171380,171384,171392,171420,171448,171452,171456,171494,171515,171536,171541],{"__ignoreMap":145},[149,171375,171376,171378],{"class":151,"line":152},[149,171377,32098],{"class":325},[149,171379,171155],{"class":155},[149,171381,171382],{"class":151,"line":193},[149,171383,4119],{"emptyLinePlaceholder":1800},[149,171385,171386,171388,171390],{"class":151,"line":235},[149,171387,161152],{"class":155},[149,171389,166],{"class":325},[149,171391,57139],{"class":155},[149,171393,171394,171396,171398,171400,171402,171404,171406,171408,171410,171412,171414,171416,171418],{"class":151,"line":340},[149,171395,149821],{"class":155},[149,171397,64367],{"class":169},[149,171399,313],{"class":155},[149,171401,151324],{"class":169},[149,171403,329],{"class":155},[149,171405,70808],{"class":169},[149,171407,313],{"class":155},[149,171409,2513],{"class":309},[149,171411,329],{"class":155},[149,171413,152908],{"class":169},[149,171415,313],{"class":155},[149,171417,2848],{"class":309},[149,171419,6648],{"class":155},[149,171421,171422,171424,171426,171428,171430,171432,171434,171436,171438,171440,171442,171444,171446],{"class":151,"line":346},[149,171423,149821],{"class":155},[149,171425,64367],{"class":169},[149,171427,313],{"class":155},[149,171429,152372],{"class":169},[149,171431,329],{"class":155},[149,171433,70808],{"class":169},[149,171435,313],{"class":155},[149,171437,2488],{"class":309},[149,171439,329],{"class":155},[149,171441,152908],{"class":169},[149,171443,313],{"class":155},[149,171445,2672],{"class":309},[149,171447,6648],{"class":155},[149,171449,171450],{"class":151,"line":352},[149,171451,34952],{"class":155},[149,171453,171454],{"class":151,"line":1021},[149,171455,4119],{"emptyLinePlaceholder":1800},[149,171457,171458,171460,171462,171464,171466,171468,171470,171472,171474,171476,171478,171480,171482,171484,171486,171488,171490,171492],{"class":151,"line":1035},[149,171459,109512],{"class":325},[149,171461,148227],{"class":309},[149,171463,319],{"class":155},[149,171465,171236],{"class":169},[149,171467,329],{"class":155},[149,171469,153412],{"class":169},[149,171471,329],{"class":155},[149,171473,148242],{"class":6932},[149,171475,166],{"class":325},[149,171477,148247],{"class":169},[149,171479,329],{"class":155},[149,171481,171253],{"class":6932},[149,171483,166],{"class":325},[149,171485,1382],{"class":169},[149,171487,15427],{"class":155},[149,171489,33089],{"class":325},[149,171491,149589],{"class":6932},[149,171493,5457],{"class":155},[149,171495,171496,171499,171501,171503,171505,171507,171509,171511,171513],{"class":151,"line":1054},[149,171497,171498],{"class":155},"    fieldnames ",[149,171500,166],{"class":325},[149,171502,53924],{"class":155},[149,171504,64367],{"class":169},[149,171506,329],{"class":155},[149,171508,70808],{"class":169},[149,171510,329],{"class":155},[149,171512,152908],{"class":169},[149,171514,34952],{"class":155},[149,171516,171517,171519,171521,171524,171526,171528,171531,171533],{"class":151,"line":1072},[149,171518,171270],{"class":155},[149,171520,166],{"class":325},[149,171522,171523],{"class":155}," csv.DictWriter(",[149,171525,47060],{"class":6932},[149,171527,329],{"class":155},[149,171529,171530],{"class":6932},"fieldnames",[149,171532,166],{"class":325},[149,171534,171535],{"class":155},"fieldnames)\n",[149,171537,171538],{"class":151,"line":1090},[149,171539,171540],{"class":155},"    writer.writeheader()\n",[149,171542,171543],{"class":151,"line":1633},[149,171544,171284],{"class":155},[14,171546,171548],{"id":171547},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[24,171550,124971],{},[125,171552,171553,171556,171559],{},[45,171554,171555],{},"读取文本文件。",[45,171557,171558],{},"统计每个单词出现次数。",[45,171560,171561],{},"输出出现次数最多的前 10 个单词。",[24,171563,11749],{},[140,171565,171567],{"className":32084,"code":171566,"language":32086,"meta":145,"style":145},"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",[48,171568,171569,171579,171583,171596,171612,171616,171626,171635,171639,171651,171671,171680,171684,171702,171706,171736,171740,171756],{"__ignoreMap":145},[149,171570,171571,171573,171575,171577],{"class":151,"line":152},[149,171572,32443],{"class":325},[149,171574,109990],{"class":155},[149,171576,32098],{"class":325},[149,171578,109995],{"class":155},[149,171580,171581],{"class":151,"line":193},[149,171582,4119],{"emptyLinePlaceholder":1800},[149,171584,171585,171587,171589,171591,171594],{"class":151,"line":235},[149,171586,169747],{"class":155},[149,171588,166],{"class":325},[149,171590,110224],{"class":155},[149,171592,171593],{"class":169},"\"article.txt\"",[149,171595,1878],{"class":155},[149,171597,171598,171600,171602,171604,171606,171608,171610],{"class":151,"line":340},[149,171599,169930],{"class":155},[149,171601,166],{"class":325},[149,171603,170807],{"class":155},[149,171605,148242],{"class":6932},[149,171607,166],{"class":325},[149,171609,148247],{"class":169},[149,171611,1878],{"class":155},[149,171613,171614],{"class":151,"line":346},[149,171615,4119],{"emptyLinePlaceholder":1800},[149,171617,171618,171621,171623],{"class":151,"line":352},[149,171619,171620],{"class":155},"words ",[149,171622,166],{"class":325},[149,171624,171625],{"class":155}," content.lower().split()\n",[149,171627,171628,171631,171633],{"class":151,"line":1021},[149,171629,171630],{"class":155},"counter ",[149,171632,166],{"class":325},[149,171634,89549],{"class":155},[149,171636,171637],{"class":151,"line":1035},[149,171638,4119],{"emptyLinePlaceholder":1800},[149,171640,171641,171643,171646,171648],{"class":151,"line":1054},[149,171642,4743],{"class":325},[149,171644,171645],{"class":155}," word ",[149,171647,27752],{"class":325},[149,171649,171650],{"class":155}," words:\n",[149,171652,171653,171656,171658,171661,171664,171666,171669],{"class":151,"line":1072},[149,171654,171655],{"class":155},"    word ",[149,171657,166],{"class":325},[149,171659,171660],{"class":155}," word.strip(",[149,171662,171663],{"class":169},"\".,!?;:",[149,171665,157931],{"class":309},[149,171667,171668],{"class":169},"'()[]\"",[149,171670,1878],{"class":155},[149,171672,171673,171675,171677],{"class":151,"line":1090},[149,171674,4819],{"class":325},[149,171676,40636],{"class":325},[149,171678,171679],{"class":155}," word:\n",[149,171681,171682],{"class":151,"line":1633},[149,171683,149948],{"class":325},[149,171685,171686,171689,171691,171694,171696,171698,171700],{"class":151,"line":1644},[149,171687,171688],{"class":155},"    counter[word] ",[149,171690,166],{"class":325},[149,171692,171693],{"class":155}," counter.get(word, ",[149,171695,2056],{"class":309},[149,171697,15427],{"class":155},[149,171699,2344],{"class":325},[149,171701,57391],{"class":309},[149,171703,171704],{"class":151,"line":3348},[149,171705,4119],{"emptyLinePlaceholder":1800},[149,171707,171708,171711,171713,171715,171718,171720,171722,171724,171726,171728,171730,171732,171734],{"class":151,"line":3362},[149,171709,171710],{"class":155},"items ",[149,171712,166],{"class":325},[149,171714,165040],{"class":309},[149,171716,171717],{"class":155},"(counter.items(), ",[149,171719,155382],{"class":6932},[149,171721,155385],{"class":325},[149,171723,155388],{"class":155},[149,171725,830],{"class":309},[149,171727,113881],{"class":155},[149,171729,164964],{"class":6932},[149,171731,166],{"class":325},[149,171733,33182],{"class":309},[149,171735,1878],{"class":155},[149,171737,171738],{"class":151,"line":3367},[149,171739,4119],{"emptyLinePlaceholder":1800},[149,171741,171742,171744,171747,171749,171752,171754],{"class":151,"line":3373},[149,171743,4743],{"class":325},[149,171745,171746],{"class":155}," word, count ",[149,171748,27752],{"class":325},[149,171750,171751],{"class":155}," items[:",[149,171753,2309],{"class":309},[149,171755,167191],{"class":155},[149,171757,171758,171760],{"class":151,"line":3394},[149,171759,33005],{"class":309},[149,171761,171762],{"class":155},"(word, count)\n",[14,171764,171766],{"id":171765},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[140,171768,171770],{"className":32084,"code":171769,"language":32086,"meta":145,"style":145},"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",[48,171771,171772,171778,171788,171792,171804,171808,171812,171820,171830,171836,171840,171870,171880,171884,171888,171896,171926,171950,171954,171958,171966,171995,172000],{"__ignoreMap":145},[149,171773,171774,171776],{"class":151,"line":152},[149,171775,32098],{"class":325},[149,171777,148527],{"class":155},[149,171779,171780,171782,171784,171786],{"class":151,"line":193},[149,171781,32443],{"class":325},[149,171783,109990],{"class":155},[149,171785,32098],{"class":325},[149,171787,109995],{"class":155},[149,171789,171790],{"class":151,"line":235},[149,171791,4119],{"emptyLinePlaceholder":1800},[149,171793,171794,171796,171798,171800,171802],{"class":151,"line":340},[149,171795,153260],{"class":309},[149,171797,15277],{"class":325},[149,171799,110224],{"class":155},[149,171801,153267],{"class":169},[149,171803,1878],{"class":155},[149,171805,171806],{"class":151,"line":346},[149,171807,4119],{"emptyLinePlaceholder":1800},[149,171809,171810],{"class":151,"line":352},[149,171811,4119],{"emptyLinePlaceholder":1800},[149,171813,171814,171816,171818],{"class":151,"line":1021},[149,171815,33653],{"class":325},[149,171817,153284],{"class":162},[149,171819,33659],{"class":155},[149,171821,171822,171824,171826,171828],{"class":151,"line":1035},[149,171823,4819],{"class":325},[149,171825,40636],{"class":325},[149,171827,153295],{"class":309},[149,171829,153298],{"class":155},[149,171831,171832,171834],{"class":151,"line":1054},[149,171833,16464],{"class":325},[149,171835,53537],{"class":155},[149,171837,171838],{"class":151,"line":1072},[149,171839,4119],{"emptyLinePlaceholder":1800},[149,171841,171842,171844,171846,171848,171850,171852,171854,171856,171858,171860,171862,171864,171866,171868],{"class":151,"line":1090},[149,171843,35884],{"class":325},[149,171845,148227],{"class":309},[149,171847,319],{"class":155},[149,171849,153260],{"class":309},[149,171851,329],{"class":155},[149,171853,148237],{"class":169},[149,171855,329],{"class":155},[149,171857,148242],{"class":6932},[149,171859,166],{"class":325},[149,171861,148247],{"class":169},[149,171863,15427],{"class":155},[149,171865,33089],{"class":325},[149,171867,149589],{"class":6932},[149,171869,5457],{"class":155},[149,171871,171872,171874,171876,171878],{"class":151,"line":1633},[149,171873,16464],{"class":325},[149,171875,149600],{"class":155},[149,171877,47060],{"class":6932},[149,171879,1878],{"class":155},[149,171881,171882],{"class":151,"line":1644},[149,171883,4119],{"emptyLinePlaceholder":1800},[149,171885,171886],{"class":151,"line":3348},[149,171887,4119],{"emptyLinePlaceholder":1800},[149,171889,171890,171892,171894],{"class":151,"line":3362},[149,171891,33653],{"class":325},[149,171893,153394],{"class":162},[149,171895,153397],{"class":155},[149,171897,171898,171900,171902,171904,171906,171908,171910,171912,171914,171916,171918,171920,171922,171924],{"class":151,"line":3367},[149,171899,35884],{"class":325},[149,171901,148227],{"class":309},[149,171903,319],{"class":155},[149,171905,153260],{"class":309},[149,171907,329],{"class":155},[149,171909,153412],{"class":169},[149,171911,329],{"class":155},[149,171913,148242],{"class":6932},[149,171915,166],{"class":325},[149,171917,148247],{"class":169},[149,171919,15427],{"class":155},[149,171921,33089],{"class":325},[149,171923,149589],{"class":6932},[149,171925,5457],{"class":155},[149,171927,171928,171930,171932,171934,171936,171938,171940,171942,171944,171946,171948],{"class":151,"line":3373},[149,171929,153433],{"class":155},[149,171931,47060],{"class":6932},[149,171933,329],{"class":155},[149,171935,148573],{"class":6932},[149,171937,166],{"class":325},[149,171939,35693],{"class":309},[149,171941,329],{"class":155},[149,171943,153448],{"class":6932},[149,171945,166],{"class":325},[149,171947,1045],{"class":309},[149,171949,1878],{"class":155},[149,171951,171952],{"class":151,"line":3394},[149,171953,4119],{"emptyLinePlaceholder":1800},[149,171955,171956],{"class":151,"line":3399},[149,171957,4119],{"emptyLinePlaceholder":1800},[149,171959,171960,171962,171964],{"class":151,"line":3413},[149,171961,161152],{"class":155},[149,171963,166],{"class":325},[149,171965,154478],{"class":155},[149,171967,171968,171971,171973,171975,171977,171979,171981,171983,171985,171987,171989,171991,171993],{"class":151,"line":3418},[149,171969,171970],{"class":155},"students.append({",[149,171972,64367],{"class":169},[149,171974,313],{"class":155},[149,171976,151324],{"class":169},[149,171978,329],{"class":155},[149,171980,70808],{"class":169},[149,171982,313],{"class":155},[149,171984,2513],{"class":309},[149,171986,329],{"class":155},[149,171988,152908],{"class":169},[149,171990,313],{"class":155},[149,171992,2848],{"class":309},[149,171994,166588],{"class":155},[149,171996,171997],{"class":151,"line":3447},[149,171998,171999],{"class":155},"save_students(students)\n",[149,172001,172002,172004,172006,172009],{"class":151,"line":3452},[149,172003,32121],{"class":309},[149,172005,319],{"class":155},[149,172007,172008],{"class":169},"\"保存成功\"",[149,172010,1878],{"class":155},[14,172012,172014],{"id":172013},"_814-易错点","8.14 易错点",[125,172016,172017,172021,172027,172032,172039,172046],{},[45,172018,172019,170280],{},[48,172020,2656],{},[45,172022,172023,172024,30091],{},"读写中文要指定 ",[48,172025,172026],{},"encoding=\"utf-8\"",[45,172028,172029,172030,30091],{},"打开文件后要关闭，推荐使用 ",[48,172031,109512],{},[45,172033,172034,172035,172038],{},"读取大文件不要直接 ",[48,172036,172037],{},"read()"," 全部内容。",[45,172040,172041,172042,172045],{},"Windows 写 CSV 时建议加 ",[48,172043,172044],{},"newline=\"\"","，避免空行。",[45,172047,172048],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172050,172052],{"id":172051},"_815-本章练习","8.15 本章练习",[125,172054,172055,172062,172067,172070,172073],{},[45,172056,172057,172058,172061],{},"写入一个 ",[48,172059,172060],{},"students.txt","，每行保存一个学生姓名。",[45,172063,106034,172064,172066],{},[48,172065,172060],{}," 并输出所有学生。",[45,172068,172069],{},"把学生列表保存为 JSON 文件。",[45,172071,172072],{},"从 JSON 文件读取学生数据，计算平均分。",[45,172074,172075,172076,172079,172080,172083],{},"写一个日志函数 ",[48,172077,172078],{},"write_log(message)","，每次调用向 ",[48,172081,172082],{},"app.log"," 追加一行。",[1783,172085,172086],{},"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":145,"searchDepth":193,"depth":193,"links":172088},[172089,172090,172094,172095,172101,172102,172103,172104,172105,172106,172107,172108,172109,172110,172111],{"id":169600,"depth":193,"text":169601},{"id":169641,"depth":193,"text":169642,"children":172091},[172092,172093],{"id":169645,"depth":235,"text":169646},{"id":169679,"depth":235,"text":169680},{"id":169793,"depth":193,"text":169794},{"id":169886,"depth":193,"text":169887,"children":172096},[172097,172098,172099,172100],{"id":169890,"depth":235,"text":169891},{"id":169977,"depth":235,"text":169978},{"id":170047,"depth":235,"text":170048},{"id":170141,"depth":235,"text":170142},{"id":170211,"depth":193,"text":170212},{"id":170274,"depth":193,"text":170275},{"id":170435,"depth":193,"text":170436},{"id":170498,"depth":193,"text":170499},{"id":170614,"depth":193,"text":170615},{"id":170824,"depth":193,"text":170825},{"id":171136,"depth":193,"text":171137},{"id":171547,"depth":193,"text":171548},{"id":171765,"depth":193,"text":171766},{"id":172013,"depth":193,"text":172014},{"id":172051,"depth":193,"text":172052},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169592,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172118,"title":172119,"body":172120,"description":1797,"extension":1798,"meta":174306,"navigation":1800,"path":174307,"seo":174308,"stem":174309,"__hash__":174310},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172121,"toc":174273},[172122,172125,172129,172132,172135,172227,172229,172248,172253,172257,172260,172263,172292,172299,172302,172306,172309,172338,172340,172392,172398,172451,172455,172553,172556,172623,172627,172684,172686,172692,172696,172701,172707,172798,172803,172807,172810,172888,172891,172929,172933,173051,173054,173058,173061,173106,173109,173113,173118,173124,173174,173177,173208,173212,173216,173246,173250,173285,173289,173324,173364,173368,173384,173387,173391,173395,173474,173478,173519,173523,173578,173582,173616,173620,173650,173659,173666,173672,173729,173732,173740,173743,173747,173754,173757,173763,173766,173783,173788,173792,173798,173811,173814,173851,173854,173865,173868,173882,173885,173899,173903,173910,173943,173946,173948,173954,173957,173961,173963,173969,173974,174147,174151,174214,174218,174242,174246,174270],[10,172123,172119],{"id":172124},"_9-异常模块与包",[14,172126,172128],{"id":172127},"_91-什么是异常","9.1 什么是异常",[24,172130,172131],{},"异常是程序运行过程中出现的错误。",[24,172133,172134],{},"常见异常：",[2003,172136,172137,172146],{},[2006,172138,172139],{},[2009,172140,172141,172144],{},[2012,172142,172143],{},"异常",[2012,172145,27578],{},[2049,172147,172148,172158,172168,172177,172187,172197,172207,172217],{},[2009,172149,172150,172155],{},[2054,172151,172152],{},[48,172153,172154],{},"NameError",[2054,172156,172157],{},"使用了未定义变量",[2009,172159,172160,172165],{},[2054,172161,172162],{},[48,172163,172164],{},"TypeError",[2054,172166,172167],{},"类型不匹配",[2009,172169,172170,172174],{},[2054,172171,172172],{},[48,172173,156270],{},[2054,172175,172176],{},"值不合法",[2009,172178,172179,172184],{},[2054,172180,172181],{},[48,172182,172183],{},"IndexError",[2054,172185,172186],{},"列表索引越界",[2009,172188,172189,172194],{},[2054,172190,172191],{},[48,172192,172193],{},"KeyError",[2054,172195,172196],{},"字典 key 不存在",[2009,172198,172199,172204],{},[2054,172200,172201],{},[48,172202,172203],{},"FileNotFoundError",[2054,172205,172206],{},"文件不存在",[2009,172208,172209,172214],{},[2054,172210,172211],{},[48,172212,172213],{},"ZeroDivisionError",[2054,172215,172216],{},"除数为 0",[2009,172218,172219,172224],{},[2054,172220,172221],{},[48,172222,172223],{},"ImportError",[2054,172225,172226],{},"导入失败",[24,172228,16846],{},[140,172230,172232],{"className":32084,"code":172231,"language":32086,"meta":145,"style":145},"num = int(\"abc\")\n",[48,172233,172234],{"__ignoreMap":145},[149,172235,172236,172238,172240,172242,172244,172246],{"class":151,"line":152},[149,172237,157223],{"class":155},[149,172239,166],{"class":325},[149,172241,4101],{"class":309},[149,172243,319],{"class":155},[149,172245,157316],{"class":169},[149,172247,1878],{"class":155},[24,172249,172250,172251,30091],{},"会触发 ",[48,172252,156270],{},[14,172254,172256],{"id":172255},"_92-为什么要处理异常","9.2 为什么要处理异常",[24,172258,172259],{},"如果不处理异常，程序会直接终止。",[24,172261,172262],{},"例如用户输入年龄：",[140,172264,172266],{"className":32084,"code":172265,"language":32086,"meta":145,"style":145},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[48,172267,172268,172286],{"__ignoreMap":145},[149,172269,172270,172272,172274,172276,172278,172280,172282,172284],{"class":151,"line":152},[149,172271,147982],{"class":155},[149,172273,166],{"class":325},[149,172275,4101],{"class":309},[149,172277,319],{"class":155},[149,172279,504],{"class":309},[149,172281,319],{"class":155},[149,172283,153830],{"class":169},[149,172285,32203],{"class":155},[149,172287,172288,172290],{"class":151,"line":193},[149,172289,32121],{"class":309},[149,172291,157197],{"class":155},[24,172293,172294,172295,172298],{},"用户输入 ",[48,172296,172297],{},"abc","，程序就会报错退出。",[24,172300,172301],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172303,172305],{"id":172304},"_93-try-except","9.3 try except",[24,172307,172308],{},"基础语法：",[140,172310,172312],{"className":32084,"code":172311,"language":32086,"meta":145,"style":145},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[48,172313,172314,172321,172326,172333],{"__ignoreMap":145},[149,172315,172316,172319],{"class":151,"line":152},[149,172317,172318],{"class":325},"try",[149,172320,5457],{"class":155},[149,172322,172323],{"class":151,"line":193},[149,172324,172325],{"class":155},"    可能出错的代码\n",[149,172327,172328,172331],{"class":151,"line":235},[149,172329,172330],{"class":325},"except",[149,172332,5457],{"class":155},[149,172334,172335],{"class":151,"line":340},[149,172336,172337],{"class":155},"    出错后的处理代码\n",[24,172339,16846],{},[140,172341,172343],{"className":32084,"code":172342,"language":32086,"meta":145,"style":145},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[48,172344,172345,172351,172369,172375,172381],{"__ignoreMap":145},[149,172346,172347,172349],{"class":151,"line":152},[149,172348,172318],{"class":325},[149,172350,5457],{"class":155},[149,172352,172353,172355,172357,172359,172361,172363,172365,172367],{"class":151,"line":193},[149,172354,153822],{"class":155},[149,172356,166],{"class":325},[149,172358,4101],{"class":309},[149,172360,319],{"class":155},[149,172362,504],{"class":309},[149,172364,319],{"class":155},[149,172366,153830],{"class":169},[149,172368,32203],{"class":155},[149,172370,172371,172373],{"class":151,"line":235},[149,172372,33005],{"class":309},[149,172374,157197],{"class":155},[149,172376,172377,172379],{"class":151,"line":340},[149,172378,172330],{"class":325},[149,172380,5457],{"class":155},[149,172382,172383,172385,172387,172390],{"class":151,"line":346},[149,172384,33005],{"class":309},[149,172386,319],{"class":155},[149,172388,172389],{"class":169},"\"年龄必须是数字\"",[149,172391,1878],{"class":155},[24,172393,172394,172395,172397],{},"不建议裸写 ",[48,172396,172330],{},"，最好指定异常类型。",[140,172399,172401],{"className":32084,"code":172400,"language":32086,"meta":145,"style":145},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[48,172402,172403,172409,172427,172433,172441],{"__ignoreMap":145},[149,172404,172405,172407],{"class":151,"line":152},[149,172406,172318],{"class":325},[149,172408,5457],{"class":155},[149,172410,172411,172413,172415,172417,172419,172421,172423,172425],{"class":151,"line":193},[149,172412,153822],{"class":155},[149,172414,166],{"class":325},[149,172416,4101],{"class":309},[149,172418,319],{"class":155},[149,172420,504],{"class":309},[149,172422,319],{"class":155},[149,172424,153830],{"class":169},[149,172426,32203],{"class":155},[149,172428,172429,172431],{"class":151,"line":235},[149,172430,33005],{"class":309},[149,172432,157197],{"class":155},[149,172434,172435,172437,172439],{"class":151,"line":340},[149,172436,172330],{"class":325},[149,172438,153662],{"class":309},[149,172440,5457],{"class":155},[149,172442,172443,172445,172447,172449],{"class":151,"line":346},[149,172444,33005],{"class":309},[149,172446,319],{"class":155},[149,172448,172389],{"class":169},[149,172450,1878],{"class":155},[14,172452,172454],{"id":172453},"_94-捕获多个异常","9.4 捕获多个异常",[140,172456,172458],{"className":32084,"code":172457,"language":32086,"meta":145,"style":145},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[48,172459,172460,172466,172487,172507,172514,172522,172533,172542],{"__ignoreMap":145},[149,172461,172462,172464],{"class":151,"line":152},[149,172463,172318],{"class":325},[149,172465,5457],{"class":155},[149,172467,172468,172471,172473,172475,172477,172479,172481,172483,172485],{"class":151,"line":193},[149,172469,172470],{"class":155},"    nums ",[149,172472,166],{"class":325},[149,172474,53924],{"class":155},[149,172476,830],{"class":309},[149,172478,329],{"class":155},[149,172480,1045],{"class":309},[149,172482,329],{"class":155},[149,172484,1939],{"class":309},[149,172486,34952],{"class":155},[149,172488,172489,172492,172494,172496,172498,172500,172502,172505],{"class":151,"line":235},[149,172490,172491],{"class":155},"    index ",[149,172493,166],{"class":325},[149,172495,4101],{"class":309},[149,172497,319],{"class":155},[149,172499,504],{"class":309},[149,172501,319],{"class":155},[149,172503,172504],{"class":169},"\"请输入索引:\"",[149,172506,32203],{"class":155},[149,172508,172509,172511],{"class":151,"line":340},[149,172510,33005],{"class":309},[149,172512,172513],{"class":155},"(nums[index])\n",[149,172515,172516,172518,172520],{"class":151,"line":346},[149,172517,172330],{"class":325},[149,172519,153662],{"class":309},[149,172521,5457],{"class":155},[149,172523,172524,172526,172528,172531],{"class":151,"line":352},[149,172525,33005],{"class":309},[149,172527,319],{"class":155},[149,172529,172530],{"class":169},"\"索引必须是整数\"",[149,172532,1878],{"class":155},[149,172534,172535,172537,172540],{"class":151,"line":1021},[149,172536,172330],{"class":325},[149,172538,172539],{"class":309}," IndexError",[149,172541,5457],{"class":155},[149,172543,172544,172546,172548,172551],{"class":151,"line":1035},[149,172545,33005],{"class":309},[149,172547,319],{"class":155},[149,172549,172550],{"class":169},"\"索引越界\"",[149,172552,1878],{"class":155},[24,172554,172555],{},"多个异常使用相同处理逻辑：",[140,172557,172559],{"className":32084,"code":172558,"language":32086,"meta":145,"style":145},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[48,172560,172561,172567,172585,172598,172612],{"__ignoreMap":145},[149,172562,172563,172565],{"class":151,"line":152},[149,172564,172318],{"class":325},[149,172566,5457],{"class":155},[149,172568,172569,172571,172573,172575,172577,172579,172581,172583],{"class":151,"line":193},[149,172570,47299],{"class":155},[149,172572,166],{"class":325},[149,172574,4101],{"class":309},[149,172576,319],{"class":155},[149,172578,504],{"class":309},[149,172580,319],{"class":155},[149,172582,157232],{"class":169},[149,172584,32203],{"class":155},[149,172586,172587,172589,172591,172593,172595],{"class":151,"line":235},[149,172588,33005],{"class":309},[149,172590,319],{"class":155},[149,172592,2309],{"class":309},[149,172594,157482],{"class":325},[149,172596,172597],{"class":155}," num)\n",[149,172599,172600,172602,172604,172606,172608,172610],{"class":151,"line":340},[149,172601,172330],{"class":325},[149,172603,3378],{"class":155},[149,172605,156270],{"class":309},[149,172607,329],{"class":155},[149,172609,172213],{"class":309},[149,172611,32492],{"class":155},[149,172613,172614,172616,172618,172621],{"class":151,"line":346},[149,172615,33005],{"class":309},[149,172617,319],{"class":155},[149,172619,172620],{"class":169},"\"输入不合法\"",[149,172622,1878],{"class":155},[14,172624,172626],{"id":172625},"_95-获取异常信息","9.5 获取异常信息",[140,172628,172630],{"className":32084,"code":172629,"language":32086,"meta":145,"style":145},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[48,172631,172632,172638,172652,172663],{"__ignoreMap":145},[149,172633,172634,172636],{"class":151,"line":152},[149,172635,172318],{"class":325},[149,172637,5457],{"class":155},[149,172639,172640,172642,172644,172646,172648,172650],{"class":151,"line":193},[149,172641,47299],{"class":155},[149,172643,166],{"class":325},[149,172645,4101],{"class":309},[149,172647,319],{"class":155},[149,172649,157316],{"class":169},[149,172651,1878],{"class":155},[149,172653,172654,172656,172658,172660],{"class":151,"line":235},[149,172655,172330],{"class":325},[149,172657,153662],{"class":309},[149,172659,66291],{"class":325},[149,172661,172662],{"class":155}," e:\n",[149,172664,172665,172667,172669,172671,172674,172676,172678,172680,172682],{"class":151,"line":340},[149,172666,33005],{"class":309},[149,172668,319],{"class":155},[149,172670,1921],{"class":325},[149,172672,172673],{"class":169},"\"出错了:",[149,172675,2756],{"class":309},[149,172677,1942],{"class":155},[149,172679,2805],{"class":309},[149,172681,2115],{"class":169},[149,172683,1878],{"class":155},[24,172685,147893],{},[140,172687,172690],{"className":172688,"code":172689,"language":1655,"meta":145},[1653],"出错了:invalid literal for int() with base 10: 'abc'\n",[48,172691,172689],{"__ignoreMap":145},[14,172693,172695],{"id":172694},"_96-else和finally","9.6 else和finally",[24,172697,172698,172700],{},[48,172699,3421],{},"：没有异常时执行。",[24,172702,172703,172706],{},[48,172704,172705],{},"finally","：无论是否异常都会执行。",[140,172708,172710],{"className":32084,"code":172709,"language":32086,"meta":145,"style":145},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[48,172711,172712,172718,172736,172744,172754,172760,172781,172787],{"__ignoreMap":145},[149,172713,172714,172716],{"class":151,"line":152},[149,172715,172318],{"class":325},[149,172717,5457],{"class":155},[149,172719,172720,172722,172724,172726,172728,172730,172732,172734],{"class":151,"line":193},[149,172721,47299],{"class":155},[149,172723,166],{"class":325},[149,172725,4101],{"class":309},[149,172727,319],{"class":155},[149,172729,504],{"class":309},[149,172731,319],{"class":155},[149,172733,157232],{"class":169},[149,172735,32203],{"class":155},[149,172737,172738,172740,172742],{"class":151,"line":235},[149,172739,172330],{"class":325},[149,172741,153662],{"class":309},[149,172743,5457],{"class":155},[149,172745,172746,172748,172750,172752],{"class":151,"line":340},[149,172747,33005],{"class":309},[149,172749,319],{"class":155},[149,172751,154650],{"class":169},[149,172753,1878],{"class":155},[149,172755,172756,172758],{"class":151,"line":346},[149,172757,3421],{"class":325},[149,172759,5457],{"class":155},[149,172761,172762,172764,172766,172768,172771,172773,172775,172777,172779],{"class":151,"line":352},[149,172763,33005],{"class":309},[149,172765,319],{"class":155},[149,172767,1921],{"class":325},[149,172769,172770],{"class":169},"\"输入正确:",[149,172772,2756],{"class":309},[149,172774,3385],{"class":155},[149,172776,2805],{"class":309},[149,172778,2115],{"class":169},[149,172780,1878],{"class":155},[149,172782,172783,172785],{"class":151,"line":1021},[149,172784,172705],{"class":325},[149,172786,5457],{"class":155},[149,172788,172789,172791,172793,172796],{"class":151,"line":1035},[149,172790,33005],{"class":309},[149,172792,319],{"class":155},[149,172794,172795],{"class":169},"\"程序结束\"",[149,172797,1878],{"class":155},[24,172799,172800,172802],{},[48,172801,172705],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172804,172806],{"id":172805},"_97-抛出异常","9.7 抛出异常",[24,172808,172809],{},"程序可以主动抛出异常。",[140,172811,172813],{"className":32084,"code":172812,"language":32086,"meta":145,"style":145},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[48,172814,172815,172824,172836,172849,172869,172873,172877],{"__ignoreMap":145},[149,172816,172817,172819,172822],{"class":151,"line":152},[149,172818,33653],{"class":325},[149,172820,172821],{"class":162}," set_age",[149,172823,162851],{"class":155},[149,172825,172826,172828,172830,172832,172834],{"class":151,"line":193},[149,172827,4819],{"class":325},[149,172829,17417],{"class":155},[149,172831,156],{"class":325},[149,172833,5811],{"class":309},[149,172835,5457],{"class":155},[149,172837,172838,172840,172842,172844,172847],{"class":151,"line":235},[149,172839,105111],{"class":325},[149,172841,153662],{"class":309},[149,172843,319],{"class":155},[149,172845,172846],{"class":169},"\"年龄不能为负数\"",[149,172848,1878],{"class":155},[149,172850,172851,172853,172855,172857,172859,172861,172863,172865,172867],{"class":151,"line":340},[149,172852,33005],{"class":309},[149,172854,319],{"class":155},[149,172856,1921],{"class":325},[149,172858,163419],{"class":169},[149,172860,2756],{"class":309},[149,172862,71905],{"class":155},[149,172864,2805],{"class":309},[149,172866,2115],{"class":169},[149,172868,1878],{"class":155},[149,172870,172871],{"class":151,"line":346},[149,172872,4119],{"emptyLinePlaceholder":1800},[149,172874,172875],{"class":151,"line":352},[149,172876,4119],{"emptyLinePlaceholder":1800},[149,172878,172879,172882,172884,172886],{"class":151,"line":1021},[149,172880,172881],{"class":155},"set_age(",[149,172883,2395],{"class":325},[149,172885,830],{"class":309},[149,172887,1878],{"class":155},[24,172889,172890],{},"调用者可以捕获：",[140,172892,172894],{"className":32084,"code":172893,"language":32086,"meta":145,"style":145},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[48,172895,172896,172902,172913,172923],{"__ignoreMap":145},[149,172897,172898,172900],{"class":151,"line":152},[149,172899,172318],{"class":325},[149,172901,5457],{"class":155},[149,172903,172904,172907,172909,172911],{"class":151,"line":193},[149,172905,172906],{"class":155},"    set_age(",[149,172908,2395],{"class":325},[149,172910,830],{"class":309},[149,172912,1878],{"class":155},[149,172914,172915,172917,172919,172921],{"class":151,"line":235},[149,172916,172330],{"class":325},[149,172918,153662],{"class":309},[149,172920,66291],{"class":325},[149,172922,172662],{"class":155},[149,172924,172925,172927],{"class":151,"line":340},[149,172926,33005],{"class":309},[149,172928,68683],{"class":155},[14,172930,172932],{"id":172931},"_98-自定义异常","9.8 自定义异常",[140,172934,172936],{"className":32084,"code":172935,"language":32086,"meta":145,"style":145},"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",[48,172937,172938,172952,172956,172960,172964,172972,172982,172993,173003,173007,173011,173017,173034,173045],{"__ignoreMap":145},[149,172939,172940,172942,172945,172947,172950],{"class":151,"line":152},[149,172941,913],{"class":325},[149,172943,172944],{"class":162}," BalanceNotEnoughError",[149,172946,319],{"class":155},[149,172948,172949],{"class":309},"Exception",[149,172951,32492],{"class":155},[149,172953,172954],{"class":151,"line":193},[149,172955,150973],{"class":325},[149,172957,172958],{"class":151,"line":235},[149,172959,4119],{"emptyLinePlaceholder":1800},[149,172961,172962],{"class":151,"line":340},[149,172963,4119],{"emptyLinePlaceholder":1800},[149,172965,172966,172968,172970],{"class":151,"line":346},[149,172967,33653],{"class":325},[149,172969,151622],{"class":162},[149,172971,164248],{"class":155},[149,172973,172974,172976,172978,172980],{"class":151,"line":352},[149,172975,4819],{"class":325},[149,172977,151578],{"class":155},[149,172979,2819],{"class":325},[149,172981,164025],{"class":155},[149,172983,172984,172986,172989,172991],{"class":151,"line":1021},[149,172985,105111],{"class":325},[149,172987,172988],{"class":155}," BalanceNotEnoughError(",[149,172990,151673],{"class":169},[149,172992,1878],{"class":155},[149,172994,172995,172997,172999,173001],{"class":151,"line":1035},[149,172996,5808],{"class":325},[149,172998,164255],{"class":155},[149,173000,2395],{"class":325},[149,173002,151611],{"class":155},[149,173004,173005],{"class":151,"line":1054},[149,173006,4119],{"emptyLinePlaceholder":1800},[149,173008,173009],{"class":151,"line":1072},[149,173010,4119],{"emptyLinePlaceholder":1800},[149,173012,173013,173015],{"class":151,"line":1090},[149,173014,172318],{"class":325},[149,173016,5457],{"class":155},[149,173018,173019,173021,173023,173026,173028,173030,173032],{"class":151,"line":1633},[149,173020,163926],{"class":155},[149,173022,166],{"class":325},[149,173024,173025],{"class":155}," withdraw(",[149,173027,322],{"class":309},[149,173029,329],{"class":155},[149,173031,3442],{"class":309},[149,173033,1878],{"class":155},[149,173035,173036,173038,173041,173043],{"class":151,"line":1644},[149,173037,172330],{"class":325},[149,173039,173040],{"class":155}," BalanceNotEnoughError ",[149,173042,33089],{"class":325},[149,173044,172662],{"class":155},[149,173046,173047,173049],{"class":151,"line":3348},[149,173048,33005],{"class":309},[149,173050,68683],{"class":155},[24,173052,173053],{},"入门阶段大多数情况使用内置异常即可。",[14,173055,173057],{"id":173056},"_99-traceback","9.9 traceback",[24,173059,173060],{},"调试时可以输出完整异常堆栈。",[140,173062,173064],{"className":32084,"code":173063,"language":32086,"meta":145,"style":145},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[48,173065,173066,173073,173077,173083,173093,173101],{"__ignoreMap":145},[149,173067,173068,173070],{"class":151,"line":152},[149,173069,32098],{"class":325},[149,173071,173072],{"class":155}," traceback\n",[149,173074,173075],{"class":151,"line":193},[149,173076,4119],{"emptyLinePlaceholder":1800},[149,173078,173079,173081],{"class":151,"line":235},[149,173080,172318],{"class":325},[149,173082,5457],{"class":155},[149,173084,173085,173087,173089,173091],{"class":151,"line":340},[149,173086,3704],{"class":309},[149,173088,319],{"class":155},[149,173090,157316],{"class":169},[149,173092,1878],{"class":155},[149,173094,173095,173097,173099],{"class":151,"line":346},[149,173096,172330],{"class":325},[149,173098,153662],{"class":309},[149,173100,5457],{"class":155},[149,173102,173103],{"class":151,"line":352},[149,173104,173105],{"class":155},"    traceback.print_exc()\n",[24,173107,173108],{},"日志系统中常把异常堆栈记录到文件。",[14,173110,173112],{"id":173111},"_910-什么是模块","9.10 什么是模块",[24,173114,173115,173116,127662],{},"模块就是一个 ",[48,173117,147788],{},[24,173119,173120,173121,26327],{},"例如创建 ",[48,173122,173123],{},"my_math.py",[140,173125,173127],{"className":32084,"code":173126,"language":32086,"meta":145,"style":145},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[48,173128,173129,173137,173147,173151,173155,173164],{"__ignoreMap":145},[149,173130,173131,173133,173135],{"class":151,"line":152},[149,173132,33653],{"class":325},[149,173134,6925],{"class":162},[149,173136,152529],{"class":155},[149,173138,173139,173141,173143,173145],{"class":151,"line":193},[149,173140,5808],{"class":325},[149,173142,12583],{"class":155},[149,173144,2344],{"class":325},[149,173146,152540],{"class":155},[149,173148,173149],{"class":151,"line":235},[149,173150,4119],{"emptyLinePlaceholder":1800},[149,173152,173153],{"class":151,"line":340},[149,173154,4119],{"emptyLinePlaceholder":1800},[149,173156,173157,173159,173162],{"class":151,"line":346},[149,173158,33653],{"class":325},[149,173160,173161],{"class":162}," sub",[149,173163,152529],{"class":155},[149,173165,173166,173168,173170,173172],{"class":151,"line":352},[149,173167,5808],{"class":325},[149,173169,12583],{"class":155},[149,173171,2395],{"class":325},[149,173173,152540],{"class":155},[24,173175,173176],{},"在另一个文件中导入：",[140,173178,173180],{"className":32084,"code":173179,"language":32086,"meta":145,"style":145},"import my_math\n\nprint(my_math.add(1, 2))\n",[48,173181,173182,173189,173193],{"__ignoreMap":145},[149,173183,173184,173186],{"class":151,"line":152},[149,173185,32098],{"class":325},[149,173187,173188],{"class":155}," my_math\n",[149,173190,173191],{"class":151,"line":193},[149,173192,4119],{"emptyLinePlaceholder":1800},[149,173194,173195,173197,173200,173202,173204,173206],{"class":151,"line":235},[149,173196,32121],{"class":309},[149,173198,173199],{"class":155},"(my_math.add(",[149,173201,830],{"class":309},[149,173203,329],{"class":155},[149,173205,1045],{"class":309},[149,173207,32203],{"class":155},[14,173209,173211],{"id":173210},"_911-import导入","9.11 import导入",[19,173213,173215],{"id":173214},"_9111-导入模块","9.11.1 导入模块",[140,173217,173219],{"className":32084,"code":173218,"language":32086,"meta":145,"style":145},"import random\n\nprint(random.randint(1, 10))\n",[48,173220,173221,173227,173231],{"__ignoreMap":145},[149,173222,173223,173225],{"class":151,"line":152},[149,173224,32098],{"class":325},[149,173226,47034],{"class":155},[149,173228,173229],{"class":151,"line":193},[149,173230,4119],{"emptyLinePlaceholder":1800},[149,173232,173233,173235,173238,173240,173242,173244],{"class":151,"line":235},[149,173234,32121],{"class":309},[149,173236,173237],{"class":155},"(random.randint(",[149,173239,830],{"class":309},[149,173241,329],{"class":155},[149,173243,2309],{"class":309},[149,173245,32203],{"class":155},[19,173247,173249],{"id":173248},"_9112-导入指定内容","9.11.2 导入指定内容",[140,173251,173253],{"className":32084,"code":173252,"language":32086,"meta":145,"style":145},"from random import randint\n\nprint(randint(1, 10))\n",[48,173254,173255,173266,173270],{"__ignoreMap":145},[149,173256,173257,173259,173261,173263],{"class":151,"line":152},[149,173258,32443],{"class":325},[149,173260,59487],{"class":155},[149,173262,32098],{"class":325},[149,173264,173265],{"class":155}," randint\n",[149,173267,173268],{"class":151,"line":193},[149,173269,4119],{"emptyLinePlaceholder":1800},[149,173271,173272,173274,173277,173279,173281,173283],{"class":151,"line":235},[149,173273,32121],{"class":309},[149,173275,173276],{"class":155},"(randint(",[149,173278,830],{"class":309},[149,173280,329],{"class":155},[149,173282,2309],{"class":309},[149,173284,32203],{"class":155},[19,173286,173288],{"id":173287},"_9113-起别名","9.11.3 起别名",[140,173290,173292],{"className":32084,"code":173291,"language":32086,"meta":145,"style":145},"import random as rd\n\nprint(rd.randint(1, 10))\n",[48,173293,173294,173305,173309],{"__ignoreMap":145},[149,173295,173296,173298,173300,173302],{"class":151,"line":152},[149,173297,32098],{"class":325},[149,173299,59487],{"class":155},[149,173301,33089],{"class":325},[149,173303,173304],{"class":155}," rd\n",[149,173306,173307],{"class":151,"line":193},[149,173308,4119],{"emptyLinePlaceholder":1800},[149,173310,173311,173313,173316,173318,173320,173322],{"class":151,"line":235},[149,173312,32121],{"class":309},[149,173314,173315],{"class":155},"(rd.randint(",[149,173317,830],{"class":309},[149,173319,329],{"class":155},[149,173321,2309],{"class":309},[149,173323,32203],{"class":155},[140,173325,173327],{"className":32084,"code":173326,"language":32086,"meta":145,"style":145},"from random import randint as rint\n\nprint(rint(1, 10))\n",[48,173328,173329,173345,173349],{"__ignoreMap":145},[149,173330,173331,173333,173335,173337,173340,173342],{"class":151,"line":152},[149,173332,32443],{"class":325},[149,173334,59487],{"class":155},[149,173336,32098],{"class":325},[149,173338,173339],{"class":155}," randint ",[149,173341,33089],{"class":325},[149,173343,173344],{"class":155}," rint\n",[149,173346,173347],{"class":151,"line":193},[149,173348,4119],{"emptyLinePlaceholder":1800},[149,173350,173351,173353,173356,173358,173360,173362],{"class":151,"line":235},[149,173352,32121],{"class":309},[149,173354,173355],{"class":155},"(rint(",[149,173357,830],{"class":309},[149,173359,329],{"class":155},[149,173361,2309],{"class":309},[149,173363,32203],{"class":155},[19,173365,173367],{"id":173366},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[140,173369,173371],{"className":32084,"code":173370,"language":32086,"meta":145,"style":145},"from random import *\n",[48,173372,173373],{"__ignoreMap":145},[149,173374,173375,173377,173379,173381],{"class":151,"line":152},[149,173376,32443],{"class":325},[149,173378,59487],{"class":155},[149,173380,32098],{"class":325},[149,173382,173383],{"class":325}," *\n",[24,173385,173386],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173388,173390],{"id":173389},"_912-常用内置模块","9.12 常用内置模块",[19,173392,173394],{"id":173393},"_9121-random","9.12.1 random",[140,173396,173398],{"className":32084,"code":173397,"language":32086,"meta":145,"style":145},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[48,173399,173400,173406,173410,173424,173443],{"__ignoreMap":145},[149,173401,173402,173404],{"class":151,"line":152},[149,173403,32098],{"class":325},[149,173405,47034],{"class":155},[149,173407,173408],{"class":151,"line":193},[149,173409,4119],{"emptyLinePlaceholder":1800},[149,173411,173412,173414,173416,173418,173420,173422],{"class":151,"line":235},[149,173413,32121],{"class":309},[149,173415,173237],{"class":155},[149,173417,830],{"class":309},[149,173419,329],{"class":155},[149,173421,2309],{"class":309},[149,173423,32203],{"class":155},[149,173425,173426,173428,173431,173433,173435,173437,173439,173441],{"class":151,"line":340},[149,173427,32121],{"class":309},[149,173429,173430],{"class":155},"(random.choice([",[149,173432,151324],{"class":169},[149,173434,329],{"class":155},[149,173436,152372],{"class":169},[149,173438,329],{"class":155},[149,173440,161167],{"class":169},[149,173442,34849],{"class":155},[149,173444,173445,173447,173450,173452,173454,173456,173458,173460,173462,173464,173466,173468,173470,173472],{"class":151,"line":346},[149,173446,32121],{"class":309},[149,173448,173449],{"class":155},"(random.sample([",[149,173451,830],{"class":309},[149,173453,329],{"class":155},[149,173455,1045],{"class":309},[149,173457,329],{"class":155},[149,173459,1939],{"class":309},[149,173461,329],{"class":155},[149,173463,2157],{"class":309},[149,173465,329],{"class":155},[149,173467,2182],{"class":309},[149,173469,113881],{"class":155},[149,173471,1045],{"class":309},[149,173473,32203],{"class":155},[19,173475,173477],{"id":173476},"_9122-time","9.12.2 time",[140,173479,173481],{"className":32084,"code":173480,"language":32086,"meta":145,"style":145},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[48,173482,173483,173489,173493,173500,173508],{"__ignoreMap":145},[149,173484,173485,173487],{"class":151,"line":152},[149,173486,32098],{"class":325},[149,173488,33535],{"class":155},[149,173490,173491],{"class":151,"line":193},[149,173492,4119],{"emptyLinePlaceholder":1800},[149,173494,173495,173497],{"class":151,"line":235},[149,173496,32121],{"class":309},[149,173498,173499],{"class":155},"(time.time())\n",[149,173501,173502,173504,173506],{"class":151,"line":340},[149,173503,96751],{"class":155},[149,173505,830],{"class":309},[149,173507,1878],{"class":155},[149,173509,173510,173512,173514,173517],{"class":151,"line":346},[149,173511,32121],{"class":309},[149,173513,319],{"class":155},[149,173515,173516],{"class":169},"\"1秒后执行\"",[149,173518,1878],{"class":155},[19,173520,173522],{"id":173521},"_9123-datetime","9.12.3 datetime",[140,173524,173526],{"className":32084,"code":173525,"language":32086,"meta":145,"style":145},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[48,173527,173528,173540,173544,173554,173561],{"__ignoreMap":145},[149,173529,173530,173532,173535,173537],{"class":151,"line":152},[149,173531,32443],{"class":325},[149,173533,173534],{"class":155}," datetime ",[149,173536,32098],{"class":325},[149,173538,173539],{"class":155}," datetime\n",[149,173541,173542],{"class":151,"line":193},[149,173543,4119],{"emptyLinePlaceholder":1800},[149,173545,173546,173549,173551],{"class":151,"line":235},[149,173547,173548],{"class":155},"now ",[149,173550,166],{"class":325},[149,173552,173553],{"class":155}," datetime.now()\n",[149,173555,173556,173558],{"class":151,"line":340},[149,173557,32121],{"class":309},[149,173559,173560],{"class":155},"(now)\n",[149,173562,173563,173565,173568,173571,173573,173576],{"class":151,"line":346},[149,173564,32121],{"class":309},[149,173566,173567],{"class":155},"(now.strftime(",[149,173569,173570],{"class":169},"\"%Y-%m-",[149,173572,158127],{"class":309},[149,173574,173575],{"class":169}," %H:%M:%S\"",[149,173577,32203],{"class":155},[19,173579,173581],{"id":173580},"_9124-os","9.12.4 os",[140,173583,173585],{"className":32084,"code":173584,"language":32086,"meta":145,"style":145},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[48,173586,173587,173593,173597,173604],{"__ignoreMap":145},[149,173588,173589,173591],{"class":151,"line":152},[149,173590,32098],{"class":325},[149,173592,47011],{"class":155},[149,173594,173595],{"class":151,"line":193},[149,173596,4119],{"emptyLinePlaceholder":1800},[149,173598,173599,173601],{"class":151,"line":235},[149,173600,32121],{"class":309},[149,173602,173603],{"class":155},"(os.getcwd())\n",[149,173605,173606,173608,173611,173614],{"class":151,"line":340},[149,173607,32121],{"class":309},[149,173609,173610],{"class":155},"(os.listdir(",[149,173612,173613],{"class":169},"\".\"",[149,173615,32203],{"class":155},[19,173617,173619],{"id":173618},"_9125-sys","9.12.5 sys",[140,173621,173623],{"className":32084,"code":173622,"language":32086,"meta":145,"style":145},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[48,173624,173625,173632,173636,173643],{"__ignoreMap":145},[149,173626,173627,173629],{"class":151,"line":152},[149,173628,32098],{"class":325},[149,173630,173631],{"class":155}," sys\n",[149,173633,173634],{"class":151,"line":193},[149,173635,4119],{"emptyLinePlaceholder":1800},[149,173637,173638,173640],{"class":151,"line":235},[149,173639,32121],{"class":309},[149,173641,173642],{"class":155},"(sys.version)\n",[149,173644,173645,173647],{"class":151,"line":340},[149,173646,32121],{"class":309},[149,173648,173649],{"class":155},"(sys.path)\n",[14,173651,173653,173654,173656,173657,2115],{"id":173652},"_913-if-name-main","9.13 if ",[31,173655,81491],{}," == \"",[31,173658,103738],{},[24,173660,173661,173662,173665],{},"模块被直接运行和被导入时，",[48,173663,173664],{},"__name__"," 的值不同。",[24,173667,173668,173669,26327],{},"创建 ",[48,173670,173671],{},"my_module.py",[140,173673,173675],{"className":32084,"code":173674,"language":32086,"meta":145,"style":145},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[48,173676,173677,173685,173695,173699,173703,173715],{"__ignoreMap":145},[149,173678,173679,173681,173683],{"class":151,"line":152},[149,173680,33653],{"class":325},[149,173682,6925],{"class":162},[149,173684,152529],{"class":155},[149,173686,173687,173689,173691,173693],{"class":151,"line":193},[149,173688,5808],{"class":325},[149,173690,12583],{"class":155},[149,173692,2344],{"class":325},[149,173694,152540],{"class":155},[149,173696,173697],{"class":151,"line":235},[149,173698,4119],{"emptyLinePlaceholder":1800},[149,173700,173701],{"class":151,"line":340},[149,173702,4119],{"emptyLinePlaceholder":1800},[149,173704,173705,173707,173709,173711,173713],{"class":151,"line":346},[149,173706,3255],{"class":325},[149,173708,32926],{"class":309},[149,173710,103239],{"class":325},[149,173712,103242],{"class":169},[149,173714,5457],{"class":155},[149,173716,173717,173719,173721,173723,173725,173727],{"class":151,"line":352},[149,173718,33005],{"class":309},[149,173720,168036],{"class":155},[149,173722,830],{"class":309},[149,173724,329],{"class":155},[149,173726,1045],{"class":309},[149,173728,32203],{"class":155},[24,173730,173731],{},"作用：",[125,173733,173734,173737],{},[45,173735,173736],{},"直接运行该文件时，执行测试代码。",[45,173738,173739],{},"被其他文件导入时，不执行测试代码。",[24,173741,173742],{},"这是写模块时很常用的习惯。",[14,173744,173746],{"id":173745},"_914-包","9.14 包",[24,173748,173749,173750,173753],{},"包是包含 ",[48,173751,173752],{},"__init__.py"," 的目录，用于组织多个模块。",[24,173755,173756],{},"目录结构：",[140,173758,173761],{"className":173759,"code":173760,"language":1655,"meta":145},[1653],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[48,173762,173760],{"__ignoreMap":145},[24,173764,173765],{},"导入：",[140,173767,173769],{"className":32084,"code":173768,"language":32086,"meta":145,"style":145},"from utils.file_utils import read_file\n",[48,173770,173771],{"__ignoreMap":145},[149,173772,173773,173775,173778,173780],{"class":151,"line":152},[149,173774,32443],{"class":325},[149,173776,173777],{"class":155}," utils.file_utils ",[149,173779,32098],{"class":325},[149,173781,173782],{"class":155}," read_file\n",[24,173784,173785,173787],{},[48,173786,173752],{}," 可以为空，也可以写包初始化逻辑。",[14,173789,173791],{"id":173790},"_915-第三方包","9.15 第三方包",[24,173793,173794,173795,173797],{},"第三方包通过 ",[48,173796,25539],{}," 安装。",[140,173799,173801],{"className":25530,"code":173800,"language":25532,"meta":145,"style":145},"pip install requests\n",[48,173802,173803],{"__ignoreMap":145},[149,173804,173805,173807,173809],{"class":151,"line":152},[149,173806,25539],{"class":162},[149,173808,25542],{"class":169},[149,173810,147534],{"class":169},[24,173812,173813],{},"使用：",[140,173815,173817],{"className":32084,"code":173816,"language":32086,"meta":145,"style":145},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[48,173818,173819,173825,173829,173844],{"__ignoreMap":145},[149,173820,173821,173823],{"class":151,"line":152},[149,173822,32098],{"class":325},[149,173824,147534],{"class":155},[149,173826,173827],{"class":151,"line":193},[149,173828,4119],{"emptyLinePlaceholder":1800},[149,173830,173831,173834,173836,173839,173842],{"class":151,"line":235},[149,173832,173833],{"class":155},"response ",[149,173835,166],{"class":325},[149,173837,173838],{"class":155}," requests.get(",[149,173840,173841],{"class":169},"\"https:\u002F\u002Fwww.example.com\"",[149,173843,1878],{"class":155},[149,173845,173846,173848],{"class":151,"line":340},[149,173847,32121],{"class":309},[149,173849,173850],{"class":155},"(response.status_code)\n",[24,173852,173853],{},"查看已安装包：",[140,173855,173857],{"className":25530,"code":173856,"language":25532,"meta":145,"style":145},"pip list\n",[48,173858,173859],{"__ignoreMap":145},[149,173860,173861,173863],{"class":151,"line":152},[149,173862,25539],{"class":162},[149,173864,120634],{"class":169},[24,173866,173867],{},"导出项目依赖：",[140,173869,173870],{"className":25530,"code":147729,"language":25532,"meta":145,"style":145},[48,173871,173872],{"__ignoreMap":145},[149,173873,173874,173876,173878,173880],{"class":151,"line":152},[149,173875,25539],{"class":162},[149,173877,147738],{"class":169},[149,173879,27931],{"class":325},[149,173881,147743],{"class":169},[24,173883,173884],{},"安装项目依赖：",[140,173886,173887],{"className":25530,"code":147749,"language":25532,"meta":145,"style":145},[48,173888,173889],{"__ignoreMap":145},[149,173890,173891,173893,173895,173897],{"class":151,"line":152},[149,173892,25539],{"class":162},[149,173894,25542],{"class":169},[149,173896,121318],{"class":309},[149,173898,147743],{"class":169},[14,173900,173902],{"id":173901},"_916-模块搜索路径","9.16 模块搜索路径",[24,173904,173905,173906,173909],{},"Python 导入模块时会在 ",[48,173907,173908],{},"sys.path"," 中查找。",[140,173911,173913],{"className":32084,"code":173912,"language":32086,"meta":145,"style":145},"import sys\n\nfor path in sys.path:\n    print(path)\n",[48,173914,173915,173921,173925,173937],{"__ignoreMap":145},[149,173916,173917,173919],{"class":151,"line":152},[149,173918,32098],{"class":325},[149,173920,173631],{"class":155},[149,173922,173923],{"class":151,"line":193},[149,173924,4119],{"emptyLinePlaceholder":1800},[149,173926,173927,173929,173932,173934],{"class":151,"line":235},[149,173928,4743],{"class":325},[149,173930,173931],{"class":155}," path ",[149,173933,27752],{"class":325},[149,173935,173936],{"class":155}," sys.path:\n",[149,173938,173939,173941],{"class":151,"line":340},[149,173940,33005],{"class":309},[149,173942,170665],{"class":155},[24,173944,173945],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[24,173947,159059],{},[140,173949,173952],{"className":173950,"code":173951,"language":1655,"meta":145},[1653],"random.py\njson.py\ntime.py\n",[48,173953,173951],{"__ignoreMap":145},[24,173955,173956],{},"这些文件名可能导致导入异常。",[14,173958,173960],{"id":173959},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[24,173962,173756],{},[140,173964,173967],{"className":173965,"code":173966,"language":1655,"meta":145},[1653],"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",[48,173968,173966],{"__ignoreMap":145},[24,173970,173971,26327],{},[48,173972,173973],{},"utils\u002Ffile_utils.py",[140,173975,173977],{"className":32084,"code":173976,"language":32086,"meta":145,"style":145},"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",[48,173978,173979,173985,173995,173999,174003,174013,174023,174031,174037,174041,174068,174078,174082,174086,174096,174122],{"__ignoreMap":145},[149,173980,173981,173983],{"class":151,"line":152},[149,173982,32098],{"class":325},[149,173984,148527],{"class":155},[149,173986,173987,173989,173991,173993],{"class":151,"line":193},[149,173988,32443],{"class":325},[149,173990,109990],{"class":155},[149,173992,32098],{"class":325},[149,173994,109995],{"class":155},[149,173996,173997],{"class":151,"line":235},[149,173998,4119],{"emptyLinePlaceholder":1800},[149,174000,174001],{"class":151,"line":340},[149,174002,4119],{"emptyLinePlaceholder":1800},[149,174004,174005,174007,174010],{"class":151,"line":346},[149,174006,33653],{"class":325},[149,174008,174009],{"class":162}," read_json",[149,174011,174012],{"class":155},"(path):\n",[149,174014,174015,174018,174020],{"class":151,"line":352},[149,174016,174017],{"class":155},"    path ",[149,174019,166],{"class":325},[149,174021,174022],{"class":155}," Path(path)\n",[149,174024,174025,174027,174029],{"class":151,"line":1021},[149,174026,4819],{"class":325},[149,174028,40636],{"class":325},[149,174030,170746],{"class":155},[149,174032,174033,174035],{"class":151,"line":1035},[149,174034,16464],{"class":325},[149,174036,53537],{"class":155},[149,174038,174039],{"class":151,"line":1054},[149,174040,4119],{"emptyLinePlaceholder":1800},[149,174042,174043,174045,174047,174050,174052,174054,174056,174058,174060,174062,174064,174066],{"class":151,"line":1072},[149,174044,35884],{"class":325},[149,174046,148227],{"class":309},[149,174048,174049],{"class":155},"(path, ",[149,174051,148237],{"class":169},[149,174053,329],{"class":155},[149,174055,148242],{"class":6932},[149,174057,166],{"class":325},[149,174059,148247],{"class":169},[149,174061,15427],{"class":155},[149,174063,33089],{"class":325},[149,174065,149589],{"class":6932},[149,174067,5457],{"class":155},[149,174069,174070,174072,174074,174076],{"class":151,"line":1090},[149,174071,16464],{"class":325},[149,174073,149600],{"class":155},[149,174075,47060],{"class":6932},[149,174077,1878],{"class":155},[149,174079,174080],{"class":151,"line":1633},[149,174081,4119],{"emptyLinePlaceholder":1800},[149,174083,174084],{"class":151,"line":1644},[149,174085,4119],{"emptyLinePlaceholder":1800},[149,174087,174088,174090,174093],{"class":151,"line":3348},[149,174089,33653],{"class":325},[149,174091,174092],{"class":162}," write_json",[149,174094,174095],{"class":155},"(path, data):\n",[149,174097,174098,174100,174102,174104,174106,174108,174110,174112,174114,174116,174118,174120],{"class":151,"line":3362},[149,174099,35884],{"class":325},[149,174101,148227],{"class":309},[149,174103,174049],{"class":155},[149,174105,153412],{"class":169},[149,174107,329],{"class":155},[149,174109,148242],{"class":6932},[149,174111,166],{"class":325},[149,174113,148247],{"class":169},[149,174115,15427],{"class":155},[149,174117,33089],{"class":325},[149,174119,149589],{"class":6932},[149,174121,5457],{"class":155},[149,174123,174124,174127,174129,174131,174133,174135,174137,174139,174141,174143,174145],{"class":151,"line":3367},[149,174125,174126],{"class":155},"        json.dump(data, ",[149,174128,47060],{"class":6932},[149,174130,329],{"class":155},[149,174132,148573],{"class":6932},[149,174134,166],{"class":325},[149,174136,35693],{"class":309},[149,174138,329],{"class":155},[149,174140,153448],{"class":6932},[149,174142,166],{"class":325},[149,174144,1045],{"class":309},[149,174146,1878],{"class":155},[24,174148,174149,26327],{},[48,174150,156043],{},[140,174152,174154],{"className":32084,"code":174153,"language":32086,"meta":145,"style":145},"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",[48,174155,174156,174167,174171,174184,174204],{"__ignoreMap":145},[149,174157,174158,174160,174162,174164],{"class":151,"line":152},[149,174159,32443],{"class":325},[149,174161,173777],{"class":155},[149,174163,32098],{"class":325},[149,174165,174166],{"class":155}," read_json, write_json\n",[149,174168,174169],{"class":151,"line":193},[149,174170,4119],{"emptyLinePlaceholder":1800},[149,174172,174173,174175,174177,174180,174182],{"class":151,"line":235},[149,174174,161152],{"class":155},[149,174176,166],{"class":325},[149,174178,174179],{"class":155}," read_json(",[149,174181,153267],{"class":169},[149,174183,1878],{"class":155},[149,174185,174186,174188,174190,174192,174194,174196,174198,174200,174202],{"class":151,"line":340},[149,174187,171970],{"class":155},[149,174189,64367],{"class":169},[149,174191,313],{"class":155},[149,174193,151324],{"class":169},[149,174195,329],{"class":155},[149,174197,152908],{"class":169},[149,174199,313],{"class":155},[149,174201,2848],{"class":309},[149,174203,166588],{"class":155},[149,174205,174206,174209,174211],{"class":151,"line":346},[149,174207,174208],{"class":155},"write_json(",[149,174210,153267],{"class":169},[149,174212,174213],{"class":155},", students)\n",[14,174215,174217],{"id":174216},"_918-易错点","9.18 易错点",[125,174219,174220,174223,174228,174233,174236,174239],{},[45,174221,174222],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[45,174224,174225,174226,30091],{},"能指定异常类型就不要裸写 ",[48,174227,172330],{},[45,174229,174230,174232],{},[48,174231,172705],{}," 无论是否出错都会执行。",[45,174234,174235],{},"模块文件名不要和标准库重名。",[45,174237,174238],{},"导入自己写的模块时，要注意运行目录。",[45,174240,174241],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174243,174245],{"id":174244},"_919-本章练习","9.19 本章练习",[125,174247,174248,174251,174254,174260,174267],{},[45,174249,174250],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[45,174252,174253],{},"写函数读取文件，如果文件不存在则返回空字符串。",[45,174255,173668,174256,174259],{},[48,174257,174258],{},"math_utils.py","，实现加减乘除函数并导入使用。",[45,174261,174262,174263,174266],{},"创建一个 ",[48,174264,174265],{},"utils"," 包，把 JSON 读写函数放进去。",[45,174268,174269],{},"写一个程序，捕获除零异常和输入格式异常。",[1783,174271,174272],{},"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":145,"searchDepth":193,"depth":193,"links":174274},[174275,174276,174277,174278,174279,174280,174281,174282,174283,174284,174285,174291,174298,174300,174301,174302,174303,174304,174305],{"id":172127,"depth":193,"text":172128},{"id":172255,"depth":193,"text":172256},{"id":172304,"depth":193,"text":172305},{"id":172453,"depth":193,"text":172454},{"id":172625,"depth":193,"text":172626},{"id":172694,"depth":193,"text":172695},{"id":172805,"depth":193,"text":172806},{"id":172931,"depth":193,"text":172932},{"id":173056,"depth":193,"text":173057},{"id":173111,"depth":193,"text":173112},{"id":173210,"depth":193,"text":173211,"children":174286},[174287,174288,174289,174290],{"id":173214,"depth":235,"text":173215},{"id":173248,"depth":235,"text":173249},{"id":173287,"depth":235,"text":173288},{"id":173366,"depth":235,"text":173367},{"id":173389,"depth":193,"text":173390,"children":174292},[174293,174294,174295,174296,174297],{"id":173393,"depth":235,"text":173394},{"id":173476,"depth":235,"text":173477},{"id":173521,"depth":235,"text":173522},{"id":173580,"depth":235,"text":173581},{"id":173618,"depth":235,"text":173619},{"id":173652,"depth":193,"text":174299},"9.13 if name == \"main\"",{"id":173745,"depth":193,"text":173746},{"id":173790,"depth":193,"text":173791},{"id":173901,"depth":193,"text":173902},{"id":173959,"depth":193,"text":173960},{"id":174216,"depth":193,"text":174217},{"id":174244,"depth":193,"text":174245},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172119,"description":1797},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174312,"title":174313,"body":174314,"description":174477,"extension":1798,"meta":174478,"navigation":1800,"path":174479,"seo":174480,"stem":174481,"__hash__":174482},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174315,"toc":174472},[174316,174319,174322,174325,174336,174338,174412,174415,174418,174421,174424,174427,174430,174433,174436,174439,174442],[10,174317,174313],{"id":174318},"python教程",[24,174320,174321],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[24,174323,174324],{},"建议学习环境：",[125,174326,174327,174330,174333],{},[45,174328,174329],{},"Python 版本：Python 3.10 及以上。",[45,174331,174332],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[45,174334,174335],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174337,118757],{"id":118757},[125,174339,174340,174346,174352,174358,174364,174370,174376,174382,174388,174394,174400,174406],{},[45,174341,174342],{},[2102,174343,174345],{"href":174344},".\u002Fch1-Python","Python环境与第一个程序",[45,174347,174348],{},[2102,174349,174351],{"href":174350},".\u002Fch2","基础语法、变量与字符串",[45,174353,174354],{},[2102,174355,174357],{"href":174356},".\u002Fch3","判断语句",[45,174359,174360],{},[2102,174361,174363],{"href":174362},".\u002Fch4","循环语句",[45,174365,174366],{},[2102,174367,174369],{"href":174368},".\u002Fch5","函数基础",[45,174371,174372],{},[2102,174373,174375],{"href":174374},".\u002Fch6","数据容器",[45,174377,174378],{},[2102,174379,174381],{"href":174380},".\u002Fch7","函数进阶",[45,174383,174384],{},[2102,174385,174387],{"href":174386},".\u002Fch8","文件操作",[45,174389,174390],{},[2102,174391,174393],{"href":174392},".\u002Fch9","异常、模块与包",[45,174395,174396],{},[2102,174397,174399],{"href":174398},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[45,174401,174402],{},[2102,174403,174405],{"href":174404},".\u002Fch11","面向对象基础",[45,174407,174408],{},[2102,174409,174411],{"href":174410},".\u002Fch12","综合案例与复习路线",[14,174413,174414],{"id":174414},"学习路线",[24,174416,174417],{},"第一阶段：能运行程序。",[24,174419,174420],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[24,174422,174423],{},"第二阶段：能组织数据。",[24,174425,174426],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[24,174428,174429],{},"第三阶段：能封装逻辑。",[24,174431,174432],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[24,174434,174435],{},"第四阶段：能做小项目。",[24,174437,174438],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174440,174441],{"id":174441},"参考资料",[125,174443,174444,174451,174458,174465],{},[45,174445,174446,174447],{},"黑马程序员 Python 入门教程推荐：",[2102,174448,174449],{"href":174449,"rel":174450},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25573],[45,174452,174453,174454],{},"Python 官方中文教程：",[2102,174455,174456],{"href":174456,"rel":174457},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25573],[45,174459,174460,174461],{},"Python 标准库文档：",[2102,174462,174463],{"href":174463,"rel":174464},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25573],[45,174466,174467,174468],{},"pyecharts 文档：",[2102,174469,174470],{"href":174470,"rel":174471},"https:\u002F\u002Fpyecharts.org\u002F",[25573],{"title":145,"searchDepth":193,"depth":193,"links":174473},[174474,174475,174476],{"id":118757,"depth":193,"text":118757},{"id":174414,"depth":193,"text":174414},{"id":174441,"depth":193,"text":174441},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25087},"\u002Fwiki\u002F2024-10-10-python",{"title":174313,"description":174477},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331435536]