[{"data":1,"prerenderedAt":173128},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode-yuan-cheng-kai-fa":3,"wiki-doc-nav":180},{"id":4,"title":5,"body":6,"description":26,"extension":173,"meta":174,"navigation":175,"path":176,"seo":177,"stem":178,"__hash__":179},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":8,"toc":171},"minimark",[9,13,20,28,31,36,42,45,50,55,58,63,66,69,72,75,78,81,113,135,138,141,164,167],[10,11,5],"h1",{"id":12},"_7vscode远程开发",[14,15,16],"ol",{},[17,18,19],"li",{},"插件1：微软Docker工具",[21,22,23],"p",{},[24,25],"img",{"alt":26,"src":27},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[21,29,30],{},"docker扩展插件已经进化为container tools了，请安装container tools",[21,32,33],{},[24,34],{"alt":26,"src":35},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[14,37,39],{"start":38},2,[17,40,41],{},"插件2：微软Docker远程开发工具",[21,43,44],{},"下面这是远程开发的插件。",[21,46,47],{},[24,48],{"alt":26,"src":49},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[21,51,52],{},[24,53],{"alt":26,"src":54},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[21,56,57],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[21,59,60],{},[24,61],{"alt":26,"src":62},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[21,64,65],{},"安装完拓展之后，vscode进行链接：",[21,67,68],{},"1.按ctrl+shift+p",[21,70,71],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[21,73,74],{},"3.选择目前运行的容器",[21,76,77],{},"4.VS Code 会在新窗口中打开并连接到容器",[21,79,80],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[82,83,87],"pre",{"className":84,"code":85,"language":86,"meta":26,"style":26},"language-bash shiki shiki-themes github-light github-dark","docker run -v 主机目录:容器目录 image-name\n","bash",[88,89,90],"code",{"__ignoreMap":26},[91,92,95,99,103,107,110],"span",{"class":93,"line":94},"line",1,[91,96,98],{"class":97},"sScJk","docker",[91,100,102],{"class":101},"sZZnC"," run",[91,104,106],{"class":105},"sj4cs"," -v",[91,108,109],{"class":101}," 主机目录:容器目录",[91,111,112],{"class":101}," image-name\n",[82,114,116],{"className":84,"code":115,"language":86,"meta":26,"style":26},"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",[88,117,118],{"__ignoreMap":26},[91,119,120,122,124,127,129,132],{"class":93,"line":94},[91,121,98],{"class":97},[91,123,102],{"class":101},[91,125,126],{"class":105}," -it",[91,128,106],{"class":105},[91,130,131],{"class":101}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[91,133,134],{"class":101}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[21,136,137],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[21,139,140],{},"查看挂载情况：",[82,142,144],{"className":84,"code":143,"language":86,"meta":26,"style":26},"mount | grep -i project\n",[88,145,146],{"__ignoreMap":26},[91,147,148,151,155,158,161],{"class":93,"line":94},[91,149,150],{"class":97},"mount",[91,152,154],{"class":153},"szBVR"," |",[91,156,157],{"class":97}," grep",[91,159,160],{"class":105}," -i",[91,162,163],{"class":101}," project\n",[21,165,166],{},"也可以通过ls来进行查看",[168,169,170],"style",{},"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":26,"searchDepth":38,"depth":38,"links":172},[],"md",{},true,"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":5,"description":26},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",[181,5285,6393,7813,10802,12153,13642,14731,23494,23507,24104,24130,24254,24495,24560,24578,24591,24638,24762,24931,25130,25309,25514,25650,25745,25782,25795,26105,26844,27551,27572,28592,30223,30336,30349,30361,30662,50474,50489,50506,50539,53411,76759,92904,92925,93038,93159,93929,94592,94953,94991,95097,95197,95240,95266,95327,96981,97082,97107,97598,98098,99178,99461,100203,100705,100717,102733,104397,105900,107598,109515,111434,113456,116926,117358,117821,118570,121514,121862,121884,122240,125547,125559,125962,125985,126132,126299,126504,126805,127362,128019,129950,131548,132197,133691,135122,136357,138051,139803,142213,142329,143264,143475,144360,145595,145823,145836,146991,149403,151771,155092,157569,159213,160990,163003,166055,168235,170762,172956],{"id":182,"title":183,"body":184,"description":26,"extension":173,"meta":5280,"navigation":175,"path":5281,"seo":5282,"stem":5283,"__hash__":5284},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":185,"toc":5252},[186,189,194,197,201,212,216,221,224,227,230,233,236,265,269,272,275,278,281,333,337,355,357,371,374,382,385,1248,1255,1272,1276,1367,1371,1377,1466,1470,1508,1512,1576,1580,1584,1590,1601,1605,1610,1614,1619,1623,1628,1632,1636,1641,1911,1916,2054,2059,2315,2318,2326,2330,2335,2438,2441,2747,2756,2857,2860,2863,2866,2869,3129,3134,3274,3277,3456,3459,3587,3590,3742,3746,3751,3754,3765,3773,3776,3883,3887,3891,3896,3946,3951,3956,3980,3985,4038,4041,4046,4223,4228,4513,4518,4915,4919,4924,4981,4986,4994,4997,5137,5140,5249],[10,187,183],{"id":188},"_1基础入门",[190,191,193],"h2",{"id":192},"_11注释","1.1注释",[21,195,196],{},"\u002F\u002F或者\u002F* *\u002F",[190,198,200],{"id":199},"_12命名","1.2命名",[14,202,203,206,209],{},[17,204,205],{},"字母数字下划线",[17,207,208],{},"开头必须是字母或_",[17,210,211],{},"不能使用关键词",[190,213,215],{"id":214},"_13数据类型","1.3数据类型",[217,218,220],"h3",{"id":219},"_131整形","1.3.1整形",[21,222,223],{},"short 短整形 2",[21,225,226],{},"int 整形 4",[21,228,229],{},"long 长整形 win4 linux32位4 linux64位8",[21,231,232],{},"long long 长长整形 8",[21,234,235],{},"利用sizeof可以求数据类型占用的内存空间大小",[82,237,241],{"className":238,"code":239,"language":240,"meta":26,"style":26},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[88,242,243,258],{"__ignoreMap":26},[91,244,245,248,252,255],{"class":93,"line":94},[91,246,247],{"class":153},"sizeof",[91,249,251],{"class":250},"sVt8B","(",[91,253,254],{"class":153},"int",[91,256,257],{"class":250},")\n",[91,259,260,262],{"class":93,"line":38},[91,261,247],{"class":153},[91,263,264],{"class":250},"(num)\n",[217,266,268],{"id":267},"_132浮点型","1.3.2浮点型",[21,270,271],{},"float 单精度 4节 7位有效数字",[21,273,274],{},"double 双精度 8节 15-16有效数字",[21,276,277],{},"默认情况下，输出一个小数，会显示6位有效数字",[21,279,280],{},"注意点：",[82,282,284],{"className":238,"code":283,"language":240,"meta":26,"style":26},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[88,285,286,310],{"__ignoreMap":26},[91,287,288,291,294,297,300,303,306],{"class":93,"line":94},[91,289,290],{"class":153},"float",[91,292,293],{"class":250}," f1",[91,295,296],{"class":153},"=",[91,298,299],{"class":105},"3.14",[91,301,302],{"class":153},"f",[91,304,305],{"class":250},";",[91,307,309],{"class":308},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[91,311,312,314,317,319,322,325,328,330],{"class":93,"line":38},[91,313,290],{"class":153},[91,315,316],{"class":250}," f2",[91,318,296],{"class":153},[91,320,321],{"class":105},"3",[91,323,324],{"class":153},"e",[91,326,327],{"class":105},"2",[91,329,305],{"class":250},[91,331,332],{"class":308}," \u002F\u002F科学记数法\n",[217,334,336],{"id":335},"_133字符型","1.3.3字符型",[82,338,340],{"className":238,"code":339,"language":240,"meta":26,"style":26},"char ch='a'\n",[88,341,342],{"__ignoreMap":26},[91,343,344,347,350,352],{"class":93,"line":94},[91,345,346],{"class":153},"char",[91,348,349],{"class":250}," ch",[91,351,296],{"class":153},[91,353,354],{"class":101},"'a'\n",[21,356,280],{},[14,358,359,362,365,368],{},[17,360,361],{},"在显示字符型变量时，只能单引号，双引号x",[17,363,364],{},"单引号内只能一个字符，不能字符串",[17,366,367],{},"c和c++字符型变量只占用一个字符",[17,369,370],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[21,372,373],{},"ASCII码大致由以下两部分组成：",[14,375,376,379],{},[17,377,378],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[17,380,381],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[21,383,384],{},"ASCII码表格：",[386,387,388,432],"table",{},[389,390,391],"thead",{},[392,393,394,402,407,411,416,420,424,428],"tr",{},[395,396,397,401],"th",{},[398,399,400],"strong",{},"ASCII","值",[395,403,404],{},[398,405,406],{},"控制字符",[395,408,409,401],{},[398,410,400],{},[395,412,413],{},[398,414,415],{},"字符",[395,417,418,401],{},[398,419,400],{},[395,421,422],{},[398,423,415],{},[395,425,426,401],{},[398,427,400],{},[395,429,430],{},[398,431,415],{},[433,434,435,462,488,513,538,564,589,614,640,665,691,717,743,768,794,820,846,870,895,920,945,970,995,1020,1045,1070,1095,1121,1146,1171,1196,1222],"tbody",{},[392,436,437,441,444,447,450,453,456,459],{},[438,439,440],"td",{},"0",[438,442,443],{},"NUT",[438,445,446],{},"32",[438,448,449],{},"(space)",[438,451,452],{},"64",[438,454,455],{},"@",[438,457,458],{},"96",[438,460,461],{},"、",[392,463,464,467,470,473,476,479,482,485],{},[438,465,466],{},"1",[438,468,469],{},"SOH",[438,471,472],{},"33",[438,474,475],{},"!",[438,477,478],{},"65",[438,480,481],{},"A",[438,483,484],{},"97",[438,486,487],{},"a",[392,489,490,492,495,498,501,504,507,510],{},[438,491,327],{},[438,493,494],{},"STX",[438,496,497],{},"34",[438,499,500],{},"\"",[438,502,503],{},"66",[438,505,506],{},"B",[438,508,509],{},"98",[438,511,512],{},"b",[392,514,515,517,520,523,526,529,532,535],{},[438,516,321],{},[438,518,519],{},"ETX",[438,521,522],{},"35",[438,524,525],{},"#",[438,527,528],{},"67",[438,530,531],{},"C",[438,533,534],{},"99",[438,536,537],{},"c",[392,539,540,543,546,549,552,555,558,561],{},[438,541,542],{},"4",[438,544,545],{},"EOT",[438,547,548],{},"36",[438,550,551],{},"$",[438,553,554],{},"68",[438,556,557],{},"D",[438,559,560],{},"100",[438,562,563],{},"d",[392,565,566,569,572,575,578,581,584,587],{},[438,567,568],{},"5",[438,570,571],{},"ENQ",[438,573,574],{},"37",[438,576,577],{},"%",[438,579,580],{},"69",[438,582,583],{},"E",[438,585,586],{},"101",[438,588,324],{},[392,590,591,594,597,600,603,606,609,612],{},[438,592,593],{},"6",[438,595,596],{},"ACK",[438,598,599],{},"38",[438,601,602],{},"&",[438,604,605],{},"70",[438,607,608],{},"F",[438,610,611],{},"102",[438,613,302],{},[392,615,616,619,622,625,628,631,634,637],{},[438,617,618],{},"7",[438,620,621],{},"BEL",[438,623,624],{},"39",[438,626,627],{},",",[438,629,630],{},"71",[438,632,633],{},"G",[438,635,636],{},"103",[438,638,639],{},"g",[392,641,642,645,648,651,653,656,659,662],{},[438,643,644],{},"8",[438,646,647],{},"BS",[438,649,650],{},"40",[438,652,251],{},[438,654,655],{},"72",[438,657,658],{},"H",[438,660,661],{},"104",[438,663,664],{},"h",[392,666,667,670,673,676,679,682,685,688],{},[438,668,669],{},"9",[438,671,672],{},"HT",[438,674,675],{},"41",[438,677,678],{},")",[438,680,681],{},"73",[438,683,684],{},"I",[438,686,687],{},"105",[438,689,690],{},"i",[392,692,693,696,699,702,705,708,711,714],{},[438,694,695],{},"10",[438,697,698],{},"LF",[438,700,701],{},"42",[438,703,704],{},"*",[438,706,707],{},"74",[438,709,710],{},"J",[438,712,713],{},"106",[438,715,716],{},"j",[392,718,719,722,725,728,731,734,737,740],{},[438,720,721],{},"11",[438,723,724],{},"VT",[438,726,727],{},"43",[438,729,730],{},"+",[438,732,733],{},"75",[438,735,736],{},"K",[438,738,739],{},"107",[438,741,742],{},"k",[392,744,745,748,751,754,756,759,762,765],{},[438,746,747],{},"12",[438,749,750],{},"FF",[438,752,753],{},"44",[438,755,627],{},[438,757,758],{},"76",[438,760,761],{},"L",[438,763,764],{},"108",[438,766,767],{},"l",[392,769,770,773,776,779,782,785,788,791],{},[438,771,772],{},"13",[438,774,775],{},"CR",[438,777,778],{},"45",[438,780,781],{},"-",[438,783,784],{},"77",[438,786,787],{},"M",[438,789,790],{},"109",[438,792,793],{},"m",[392,795,796,799,802,805,808,811,814,817],{},[438,797,798],{},"14",[438,800,801],{},"SO",[438,803,804],{},"46",[438,806,807],{},".",[438,809,810],{},"78",[438,812,813],{},"N",[438,815,816],{},"110",[438,818,819],{},"n",[392,821,822,825,828,831,834,837,840,843],{},[438,823,824],{},"15",[438,826,827],{},"SI",[438,829,830],{},"47",[438,832,833],{},"\u002F",[438,835,836],{},"79",[438,838,839],{},"O",[438,841,842],{},"111",[438,844,845],{},"o",[392,847,848,851,854,857,859,862,865,868],{},[438,849,850],{},"16",[438,852,853],{},"DLE",[438,855,856],{},"48",[438,858,440],{},[438,860,861],{},"80",[438,863,864],{},"P",[438,866,867],{},"112",[438,869,21],{},[392,871,872,875,878,881,883,886,889,892],{},[438,873,874],{},"17",[438,876,877],{},"DCI",[438,879,880],{},"49",[438,882,466],{},[438,884,885],{},"81",[438,887,888],{},"Q",[438,890,891],{},"113",[438,893,894],{},"q",[392,896,897,900,903,906,908,911,914,917],{},[438,898,899],{},"18",[438,901,902],{},"DC2",[438,904,905],{},"50",[438,907,327],{},[438,909,910],{},"82",[438,912,913],{},"R",[438,915,916],{},"114",[438,918,919],{},"r",[392,921,922,925,928,931,933,936,939,942],{},[438,923,924],{},"19",[438,926,927],{},"DC3",[438,929,930],{},"51",[438,932,321],{},[438,934,935],{},"83",[438,937,938],{},"S",[438,940,941],{},"115",[438,943,944],{},"s",[392,946,947,950,953,956,958,961,964,967],{},[438,948,949],{},"20",[438,951,952],{},"DC4",[438,954,955],{},"52",[438,957,542],{},[438,959,960],{},"84",[438,962,963],{},"T",[438,965,966],{},"116",[438,968,969],{},"t",[392,971,972,975,978,981,983,986,989,992],{},[438,973,974],{},"21",[438,976,977],{},"NAK",[438,979,980],{},"53",[438,982,568],{},[438,984,985],{},"85",[438,987,988],{},"U",[438,990,991],{},"117",[438,993,994],{},"u",[392,996,997,1000,1003,1006,1008,1011,1014,1017],{},[438,998,999],{},"22",[438,1001,1002],{},"SYN",[438,1004,1005],{},"54",[438,1007,593],{},[438,1009,1010],{},"86",[438,1012,1013],{},"V",[438,1015,1016],{},"118",[438,1018,1019],{},"v",[392,1021,1022,1025,1028,1031,1033,1036,1039,1042],{},[438,1023,1024],{},"23",[438,1026,1027],{},"TB",[438,1029,1030],{},"55",[438,1032,618],{},[438,1034,1035],{},"87",[438,1037,1038],{},"W",[438,1040,1041],{},"119",[438,1043,1044],{},"w",[392,1046,1047,1050,1053,1056,1058,1061,1064,1067],{},[438,1048,1049],{},"24",[438,1051,1052],{},"CAN",[438,1054,1055],{},"56",[438,1057,644],{},[438,1059,1060],{},"88",[438,1062,1063],{},"X",[438,1065,1066],{},"120",[438,1068,1069],{},"x",[392,1071,1072,1075,1078,1081,1083,1086,1089,1092],{},[438,1073,1074],{},"25",[438,1076,1077],{},"EM",[438,1079,1080],{},"57",[438,1082,669],{},[438,1084,1085],{},"89",[438,1087,1088],{},"Y",[438,1090,1091],{},"121",[438,1093,1094],{},"y",[392,1096,1097,1100,1103,1106,1109,1112,1115,1118],{},[438,1098,1099],{},"26",[438,1101,1102],{},"SUB",[438,1104,1105],{},"58",[438,1107,1108],{},":",[438,1110,1111],{},"90",[438,1113,1114],{},"Z",[438,1116,1117],{},"122",[438,1119,1120],{},"z",[392,1122,1123,1126,1129,1132,1134,1137,1140,1143],{},[438,1124,1125],{},"27",[438,1127,1128],{},"ESC",[438,1130,1131],{},"59",[438,1133,305],{},[438,1135,1136],{},"91",[438,1138,1139],{},"[",[438,1141,1142],{},"123",[438,1144,1145],{},"{",[392,1147,1148,1151,1154,1157,1160,1163,1165,1168],{},[438,1149,1150],{},"28",[438,1152,1153],{},"FS",[438,1155,1156],{},"60",[438,1158,1159],{},"\u003C",[438,1161,1162],{},"92",[438,1164,833],{},[438,1166,1167],{},"124",[438,1169,1170],{},"|",[392,1172,1173,1176,1179,1182,1184,1187,1190,1193],{},[438,1174,1175],{},"29",[438,1177,1178],{},"GS",[438,1180,1181],{},"61",[438,1183,296],{},[438,1185,1186],{},"93",[438,1188,1189],{},"]",[438,1191,1192],{},"125",[438,1194,1195],{},"}",[392,1197,1198,1201,1204,1207,1210,1213,1216,1219],{},[438,1199,1200],{},"30",[438,1202,1203],{},"RS",[438,1205,1206],{},"62",[438,1208,1209],{},">",[438,1211,1212],{},"94",[438,1214,1215],{},"^",[438,1217,1218],{},"126",[438,1220,1221],{},"`",[392,1223,1224,1227,1230,1233,1236,1239,1242,1245],{},[438,1225,1226],{},"31",[438,1228,1229],{},"US",[438,1231,1232],{},"63",[438,1234,1235],{},"?",[438,1237,1238],{},"95",[438,1240,1241],{},"_",[438,1243,1244],{},"127",[438,1246,1247],{},"DEL",[21,1249,1250,1251,1254],{},"ASCII 码大致由以下",[398,1252,1253],{},"两部分组","成：",[1256,1257,1258,1265],"ul",{},[17,1259,1260,1261,1264],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[398,1262,1263],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[17,1266,1267,1268,1271],{},"ASCII 打印字符：数字 ",[398,1269,1270],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[217,1273,1275],{"id":1274},"_134转义字符","1.3.4转义字符",[82,1277,1279],{"className":238,"code":1278,"language":240,"meta":26,"style":26},"\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",[88,1280,1281,1286,1302,1317,1323,1337,1343],{"__ignoreMap":26},[91,1282,1283],{"class":93,"line":94},[91,1284,1285],{"class":308},"\u002F\u002F换行符\n",[91,1287,1288,1291,1294,1297,1299],{"class":93,"line":38},[91,1289,1290],{"class":250},"cout ",[91,1292,1293],{"class":153},"\u003C\u003C",[91,1295,1296],{"class":101},"\"hello world\u002Fn\"",[91,1298,305],{"class":250},[91,1300,1301],{"class":308}," \u002F\u002F就等同于如下：\n",[91,1303,1305,1307,1309,1312,1314],{"class":93,"line":1304},3,[91,1306,1290],{"class":250},[91,1308,1293],{"class":153},[91,1310,1311],{"class":101},"\"hello world\"",[91,1313,1293],{"class":153},[91,1315,1316],{"class":250},"endl;\n",[91,1318,1320],{"class":93,"line":1319},4,[91,1321,1322],{"class":308},"\u002F\u002F反斜杠\n",[91,1324,1326,1328,1330,1333,1335],{"class":93,"line":1325},5,[91,1327,1290],{"class":250},[91,1329,1293],{"class":153},[91,1331,1332],{"class":101},"\"\u002F\u002F\"",[91,1334,1293],{"class":153},[91,1336,1316],{"class":250},[91,1338,1340],{"class":93,"line":1339},6,[91,1341,1342],{"class":308},"\u002F\u002F水平制表符\n",[91,1344,1346,1348,1350,1353,1356,1359,1361,1364],{"class":93,"line":1345},7,[91,1347,1290],{"class":250},[91,1349,1293],{"class":153},[91,1351,1352],{"class":101},"\"aaaa",[91,1354,1355],{"class":105},"\\t",[91,1357,1358],{"class":101},"helloworld\"",[91,1360,1293],{"class":153},[91,1362,1363],{"class":250},"endl;",[91,1365,1366],{"class":308}," \u002F\u002F输出窗口时有对齐效果\n",[217,1368,1370],{"id":1369},"_135字符串型","1.3.5字符串型",[21,1372,1373,1374,1376],{},"char 变量名",[91,1375],{},"=\"字符串值\"",[82,1378,1380],{"className":238,"code":1379,"language":240,"meta":26,"style":26},"\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",[88,1381,1382,1387,1392,1397,1402,1416,1429,1434,1440,1452],{"__ignoreMap":26},[91,1383,1384],{"class":93,"line":94},[91,1385,1386],{"class":308},"\u002F\u002Fc风格字符串\n",[91,1388,1389],{"class":93,"line":38},[91,1390,1391],{"class":308},"\u002F\u002F注意事项：\n",[91,1393,1394],{"class":93,"line":1304},[91,1395,1396],{"class":308},"\u002F\u002F1.char字符串名[]\n",[91,1398,1399],{"class":93,"line":1319},[91,1400,1401],{"class":308},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[91,1403,1404,1406,1409,1411,1413],{"class":93,"line":1325},[91,1405,346],{"class":153},[91,1407,1408],{"class":250}," str[]",[91,1410,296],{"class":153},[91,1412,1311],{"class":101},[91,1414,1415],{"class":250},";\n",[91,1417,1418,1420,1422,1425,1427],{"class":93,"line":1339},[91,1419,1290],{"class":250},[91,1421,1293],{"class":153},[91,1423,1424],{"class":250},"str",[91,1426,1293],{"class":153},[91,1428,1316],{"class":250},[91,1430,1431],{"class":93,"line":1345},[91,1432,1433],{"class":308},"\u002F\u002Fc++风格字符串\n",[91,1435,1437],{"class":93,"line":1436},8,[91,1438,1439],{"class":308},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[91,1441,1443,1446,1448,1450],{"class":93,"line":1442},9,[91,1444,1445],{"class":250},"string str2",[91,1447,296],{"class":153},[91,1449,1311],{"class":101},[91,1451,1415],{"class":250},[91,1453,1455,1457,1459,1462,1464],{"class":93,"line":1454},10,[91,1456,1290],{"class":250},[91,1458,1293],{"class":153},[91,1460,1461],{"class":250},"str2",[91,1463,1293],{"class":153},[91,1465,1316],{"class":250},[217,1467,1469],{"id":1468},"_136布尔类型bool","1.3.6布尔类型bool",[82,1471,1473],{"className":238,"code":1472,"language":240,"meta":26,"style":26},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[88,1474,1475,1490],{"__ignoreMap":26},[91,1476,1477,1480,1483,1485,1488],{"class":93,"line":94},[91,1478,1479],{"class":153},"bool",[91,1481,1482],{"class":250}," flag",[91,1484,296],{"class":153},[91,1486,1487],{"class":105},"true",[91,1489,1415],{"class":250},[91,1491,1492,1495,1498,1501,1503,1505],{"class":93,"line":38},[91,1493,1494],{"class":250},"cout",[91,1496,1497],{"class":153},"\u003C\u003Csizeof",[91,1499,1500],{"class":250},"(flag)",[91,1502,1293],{"class":153},[91,1504,1363],{"class":250},[91,1506,1507],{"class":308}," \u002F\u002F查看布尔占内存空间\n",[190,1509,1511],{"id":1510},"_14键盘输入cin","1.4键盘输入cin",[82,1513,1515],{"className":238,"code":1514,"language":240,"meta":26,"style":26},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[88,1516,1517,1530,1547,1558],{"__ignoreMap":26},[91,1518,1519,1521,1524,1526,1528],{"class":93,"line":94},[91,1520,254],{"class":153},[91,1522,1523],{"class":250}," a",[91,1525,296],{"class":153},[91,1527,440],{"class":105},[91,1529,1415],{"class":250},[91,1531,1532,1534,1536,1539,1541,1543,1545],{"class":93,"line":38},[91,1533,1494],{"class":250},[91,1535,1293],{"class":153},[91,1537,1538],{"class":101},"\"请给整型变量a赋值\"",[91,1540,1293],{"class":153},[91,1542,487],{"class":250},[91,1544,1293],{"class":153},[91,1546,1316],{"class":250},[91,1548,1549,1552,1555],{"class":93,"line":1304},[91,1550,1551],{"class":250},"cin ",[91,1553,1554],{"class":153},">>",[91,1556,1557],{"class":250}," a;\n",[91,1559,1560,1562,1564,1567,1570,1572,1574],{"class":93,"line":1319},[91,1561,1290],{"class":250},[91,1563,1293],{"class":153},[91,1565,1566],{"class":101}," \"整型变量a=\"",[91,1568,1569],{"class":153}," \u003C\u003C",[91,1571,487],{"class":250},[91,1573,1293],{"class":153},[91,1575,1316],{"class":250},[190,1577,1579],{"id":1578},"_15运算符","1.5运算符",[217,1581,1583],{"id":1582},"_151算术运算符","1.5.1算术运算符",[21,1585,1586,1589],{},[24,1587],{"alt":26,"src":1588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[14,1591,1592,1595,1598],{},[17,1593,1594],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[17,1596,1597],{},"两个小数不可以做取模运算",[17,1599,1600],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[217,1602,1604],{"id":1603},"_152赋值运算符","1.5.2赋值运算符",[21,1606,1607],{},[24,1608],{"alt":26,"src":1609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[217,1611,1613],{"id":1612},"_153比较运算符","1.5.3比较运算符",[21,1615,1616],{},[24,1617],{"alt":26,"src":1618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[217,1620,1622],{"id":1621},"_154逻辑运算符","1.5.4逻辑运算符",[21,1624,1625],{},[24,1626],{"alt":26,"src":1627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[190,1629,1631],{"id":1630},"_16程序流程结构","1.6程序流程结构",[217,1633,1635],{"id":1634},"_161选择结构","1.6.1选择结构",[14,1637,1638],{},[17,1639,1640],{},"if语句\n单行、多行、多条件if语句",[82,1642,1644],{"className":238,"code":1643,"language":240,"meta":26,"style":26},"\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",[88,1645,1646,1651,1666,1671,1685,1690,1695,1704,1717,1721,1734,1739,1745,1750,1764,1769,1775,1796,1801,1815,1820,1849,1854,1871,1876,1881,1886,1900,1905],{"__ignoreMap":26},[91,1647,1648],{"class":93,"line":94},[91,1649,1650],{"class":308},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[91,1652,1653,1656,1659,1661,1664],{"class":93,"line":38},[91,1654,1655],{"class":153},"if",[91,1657,1658],{"class":250},"(score",[91,1660,1209],{"class":153},[91,1662,1663],{"class":105},"600",[91,1665,257],{"class":250},[91,1667,1668],{"class":93,"line":1304},[91,1669,1670],{"class":250},"{\n",[91,1672,1673,1676,1678,1681,1683],{"class":93,"line":1319},[91,1674,1675],{"class":250},"    cout",[91,1677,1293],{"class":153},[91,1679,1680],{"class":101},"'这是单行if语句'",[91,1682,1293],{"class":153},[91,1684,1316],{"class":250},[91,1686,1687],{"class":93,"line":1325},[91,1688,1689],{"class":250},"}\n",[91,1691,1692],{"class":93,"line":1339},[91,1693,1694],{"class":308},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[91,1696,1697,1699,1701],{"class":93,"line":1345},[91,1698,1551],{"class":250},[91,1700,1554],{"class":153},[91,1702,1703],{"class":250}," score\n",[91,1705,1706,1708,1710,1713,1715],{"class":93,"line":1436},[91,1707,1655],{"class":153},[91,1709,1658],{"class":250},[91,1711,1712],{"class":153},"\u003C=",[91,1714,1663],{"class":105},[91,1716,257],{"class":250},[91,1718,1719],{"class":93,"line":1442},[91,1720,1670],{"class":250},[91,1722,1723,1725,1727,1730,1732],{"class":93,"line":1454},[91,1724,1675],{"class":250},[91,1726,1554],{"class":153},[91,1728,1729],{"class":101},"\"小于等于600\"",[91,1731,1293],{"class":153},[91,1733,1316],{"class":250},[91,1735,1737],{"class":93,"line":1736},11,[91,1738,1689],{"class":250},[91,1740,1742],{"class":93,"line":1741},12,[91,1743,1744],{"class":153},"else\n",[91,1746,1748],{"class":93,"line":1747},13,[91,1749,1670],{"class":250},[91,1751,1753,1755,1757,1760,1762],{"class":93,"line":1752},14,[91,1754,1675],{"class":250},[91,1756,1554],{"class":153},[91,1758,1759],{"class":101},"\"大于600\"",[91,1761,1554],{"class":153},[91,1763,1316],{"class":250},[91,1765,1767],{"class":93,"line":1766},15,[91,1768,1689],{"class":250},[91,1770,1772],{"class":93,"line":1771},16,[91,1773,1774],{"class":308},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[91,1776,1778,1780,1783,1785,1787,1790,1792,1794],{"class":93,"line":1777},17,[91,1779,1655],{"class":153},[91,1781,1782],{"class":250}," (",[91,1784,440],{"class":105},[91,1786,1159],{"class":153},[91,1788,1789],{"class":250},"num",[91,1791,1159],{"class":153},[91,1793,560],{"class":105},[91,1795,257],{"class":250},[91,1797,1799],{"class":93,"line":1798},18,[91,1800,1670],{"class":250},[91,1802,1804,1806,1808,1811,1813],{"class":93,"line":1803},19,[91,1805,1675],{"class":250},[91,1807,1293],{"class":153},[91,1809,1810],{"class":101},"\"小于100\"",[91,1812,1293],{"class":153},[91,1814,1316],{"class":250},[91,1816,1818],{"class":93,"line":1817},20,[91,1819,1689],{"class":250},[91,1821,1823,1826,1829,1832,1835,1837,1840,1842,1844,1847],{"class":93,"line":1822},21,[91,1824,1825],{"class":153},"else",[91,1827,1828],{"class":153}," if",[91,1830,1831],{"class":250}," (nmu",[91,1833,1834],{"class":153},">=",[91,1836,560],{"class":105},[91,1838,1839],{"class":153},"&&",[91,1841,1789],{"class":250},[91,1843,1159],{"class":153},[91,1845,1846],{"class":105},"200",[91,1848,257],{"class":250},[91,1850,1852],{"class":93,"line":1851},22,[91,1853,1670],{"class":250},[91,1855,1857,1859,1861,1864,1866,1868],{"class":93,"line":1856},23,[91,1858,1675],{"class":250},[91,1860,1293],{"class":153},[91,1862,1863],{"class":101},"\"不小于100且小于200\"",[91,1865,1293],{"class":153},[91,1867,1363],{"class":250},[91,1869,1870],{"class":308}," \u002F\u002F可以无限else if,python中是elif：\n",[91,1872,1874],{"class":93,"line":1873},24,[91,1875,1689],{"class":250},[91,1877,1879],{"class":93,"line":1878},25,[91,1880,1744],{"class":153},[91,1882,1884],{"class":93,"line":1883},26,[91,1885,1670],{"class":250},[91,1887,1889,1891,1893,1896,1898],{"class":93,"line":1888},27,[91,1890,1675],{"class":250},[91,1892,1293],{"class":153},[91,1894,1895],{"class":101},"\"不小于200\"",[91,1897,1293],{"class":153},[91,1899,1316],{"class":250},[91,1901,1903],{"class":93,"line":1902},28,[91,1904,1689],{"class":250},[91,1906,1908],{"class":93,"line":1907},29,[91,1909,1910],{"class":308},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[14,1912,1913],{"start":38},[17,1914,1915],{},"三目运算符",[82,1917,1919],{"className":238,"code":1918,"language":240,"meta":26,"style":26},"\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",[88,1920,1921,1926,1931,1957,1979,1996,2001,2024,2039],{"__ignoreMap":26},[91,1922,1923],{"class":93,"line":94},[91,1924,1925],{"class":308},"\u002F\u002F创建三个变量a,b,c\n",[91,1927,1928],{"class":93,"line":38},[91,1929,1930],{"class":308},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[91,1932,1933,1935,1937,1939,1941,1944,1946,1948,1951,1953,1955],{"class":93,"line":1304},[91,1934,254],{"class":153},[91,1936,1523],{"class":250},[91,1938,296],{"class":153},[91,1940,949],{"class":105},[91,1942,1943],{"class":250},",b",[91,1945,296],{"class":153},[91,1947,695],{"class":105},[91,1949,1950],{"class":250},",c",[91,1952,296],{"class":153},[91,1954,440],{"class":105},[91,1956,1415],{"class":250},[91,1958,1959,1961,1963,1966,1968,1970,1972,1974,1976],{"class":93,"line":1319},[91,1960,537],{"class":250},[91,1962,296],{"class":153},[91,1964,1965],{"class":250},"(a",[91,1967,1209],{"class":153},[91,1969,512],{"class":250},[91,1971,1235],{"class":153},[91,1973,487],{"class":250},[91,1975,1108],{"class":153},[91,1977,1978],{"class":250},"b)\n",[91,1980,1981,1983,1985,1988,1990,1992,1994],{"class":93,"line":1325},[91,1982,1494],{"class":250},[91,1984,1293],{"class":153},[91,1986,1987],{"class":101},"\"c=\"",[91,1989,1293],{"class":153},[91,1991,537],{"class":250},[91,1993,1293],{"class":153},[91,1995,1316],{"class":250},[91,1997,1998],{"class":93,"line":1339},[91,1999,2000],{"class":308},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[91,2002,2003,2005,2007,2009,2011,2013,2015,2018,2020,2022],{"class":93,"line":1345},[91,2004,1965],{"class":250},[91,2006,1209],{"class":153},[91,2008,512],{"class":250},[91,2010,1235],{"class":153},[91,2012,487],{"class":250},[91,2014,1108],{"class":153},[91,2016,2017],{"class":250},"b)",[91,2019,296],{"class":153},[91,2021,560],{"class":105},[91,2023,1415],{"class":250},[91,2025,2026,2028,2030,2032,2034,2036],{"class":93,"line":1436},[91,2027,1494],{"class":250},[91,2029,1293],{"class":153},[91,2031,487],{"class":250},[91,2033,1293],{"class":153},[91,2035,1363],{"class":250},[91,2037,2038],{"class":308}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[91,2040,2041,2043,2045,2047,2049,2051],{"class":93,"line":1442},[91,2042,1494],{"class":250},[91,2044,1293],{"class":153},[91,2046,512],{"class":250},[91,2048,1293],{"class":153},[91,2050,1363],{"class":250},[91,2052,2053],{"class":308}," \u002F\u002F10   a>b,b还是原值\n",[14,2055,2056],{"start":1304},[17,2057,2058],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[82,2060,2062],{"className":238,"code":2061,"language":240,"meta":26,"style":26},"\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",[88,2063,2064,2069,2077,2090,2100,2104,2118,2131,2141,2149,2154,2179,2200,2222,2243,2265,2286,2306,2311],{"__ignoreMap":26},[91,2065,2066],{"class":93,"line":94},[91,2067,2068],{"class":308},"\u002F\u002F案例-电影打分\n",[91,2070,2071,2074],{"class":93,"line":38},[91,2072,2073],{"class":153},"#include",[91,2075,2076],{"class":101},"\u003Ciostream>\n",[91,2078,2079,2082,2085,2088],{"class":93,"line":1304},[91,2080,2081],{"class":153},"using",[91,2083,2084],{"class":153}," namespace",[91,2086,2087],{"class":97}," std",[91,2089,1415],{"class":250},[91,2091,2092,2094,2097],{"class":93,"line":1319},[91,2093,254],{"class":153},[91,2095,2096],{"class":97}," main",[91,2098,2099],{"class":250},"()\n",[91,2101,2102],{"class":93,"line":1325},[91,2103,1670],{"class":250},[91,2105,2106,2109,2112,2114,2116],{"class":93,"line":1339},[91,2107,2108],{"class":153},"    int",[91,2110,2111],{"class":250}," score",[91,2113,296],{"class":153},[91,2115,440],{"class":105},[91,2117,1415],{"class":250},[91,2119,2120,2122,2124,2127,2129],{"class":93,"line":1345},[91,2121,1675],{"class":250},[91,2123,1293],{"class":153},[91,2125,2126],{"class":101},"\"电影打分：\"",[91,2128,1293],{"class":153},[91,2130,1316],{"class":250},[91,2132,2133,2136,2138],{"class":93,"line":1436},[91,2134,2135],{"class":250},"    cin",[91,2137,1554],{"class":153},[91,2139,2140],{"class":250},"score;\n",[91,2142,2143,2146],{"class":93,"line":1442},[91,2144,2145],{"class":153},"    switch",[91,2147,2148],{"class":250},"(score)\n",[91,2150,2151],{"class":93,"line":1454},[91,2152,2153],{"class":250},"    {\n",[91,2155,2156,2159,2162,2165,2167,2170,2172,2174,2177],{"class":93,"line":1736},[91,2157,2158],{"class":153},"        case",[91,2160,2161],{"class":105}," 10",[91,2163,2164],{"class":250},":cout",[91,2166,1293],{"class":153},[91,2168,2169],{"class":101},"\"经典\"",[91,2171,1293],{"class":153},[91,2173,1363],{"class":250},[91,2175,2176],{"class":153},"break",[91,2178,1415],{"class":250},[91,2180,2181,2183,2186,2188,2190,2192,2194,2196,2198],{"class":93,"line":1741},[91,2182,2158],{"class":153},[91,2184,2185],{"class":105}," 9",[91,2187,2164],{"class":250},[91,2189,1293],{"class":153},[91,2191,2169],{"class":101},[91,2193,1293],{"class":153},[91,2195,1363],{"class":250},[91,2197,2176],{"class":153},[91,2199,1415],{"class":250},[91,2201,2202,2204,2207,2209,2211,2214,2216,2218,2220],{"class":93,"line":1747},[91,2203,2158],{"class":153},[91,2205,2206],{"class":105}," 8",[91,2208,2164],{"class":250},[91,2210,1293],{"class":153},[91,2212,2213],{"class":101},"\"非常好\"",[91,2215,1293],{"class":153},[91,2217,1363],{"class":250},[91,2219,2176],{"class":153},[91,2221,1415],{"class":250},[91,2223,2224,2226,2229,2231,2233,2235,2237,2239,2241],{"class":93,"line":1752},[91,2225,2158],{"class":153},[91,2227,2228],{"class":105}," 7",[91,2230,2164],{"class":250},[91,2232,1293],{"class":153},[91,2234,2213],{"class":101},[91,2236,1293],{"class":153},[91,2238,1363],{"class":250},[91,2240,2176],{"class":153},[91,2242,1415],{"class":250},[91,2244,2245,2247,2250,2252,2254,2257,2259,2261,2263],{"class":93,"line":1766},[91,2246,2158],{"class":153},[91,2248,2249],{"class":105}," 6",[91,2251,2164],{"class":250},[91,2253,1293],{"class":153},[91,2255,2256],{"class":101},"\"一般\"",[91,2258,1293],{"class":153},[91,2260,1363],{"class":250},[91,2262,2176],{"class":153},[91,2264,1415],{"class":250},[91,2266,2267,2269,2272,2274,2276,2278,2280,2282,2284],{"class":93,"line":1771},[91,2268,2158],{"class":153},[91,2270,2271],{"class":105}," 5",[91,2273,2164],{"class":250},[91,2275,1293],{"class":153},[91,2277,2256],{"class":101},[91,2279,1293],{"class":153},[91,2281,1363],{"class":250},[91,2283,2176],{"class":153},[91,2285,1415],{"class":250},[91,2287,2288,2291,2293,2295,2298,2300,2302,2304],{"class":93,"line":1777},[91,2289,2290],{"class":153},"        default",[91,2292,2164],{"class":250},[91,2294,1293],{"class":153},[91,2296,2297],{"class":101},"\"烂片\"",[91,2299,1293],{"class":153},[91,2301,1363],{"class":250},[91,2303,2176],{"class":153},[91,2305,1415],{"class":250},[91,2307,2308],{"class":93,"line":1798},[91,2309,2310],{"class":250},"    }\n",[91,2312,2313],{"class":93,"line":1803},[91,2314,1689],{"class":250},[21,2316,2317],{},"if和switch区别：",[1256,2319,2320,2323],{},[17,2321,2322],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[17,2324,2325],{},"switch优点：结构清晰，执行效率高",[217,2327,2329],{"id":2328},"_162循环结构","1.6.2循环结构",[14,2331,2332],{},[17,2333,2334],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[82,2336,2338],{"className":238,"code":2337,"language":240,"meta":26,"style":26},"\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",[88,2339,2340,2345,2353,2357,2370,2384,2388,2408,2418,2422,2434],{"__ignoreMap":26},[91,2341,2342],{"class":93,"line":94},[91,2343,2344],{"class":308},"\u002F\u002F打印0-9数字\n",[91,2346,2347,2349,2351],{"class":93,"line":38},[91,2348,254],{"class":153},[91,2350,2096],{"class":97},[91,2352,2099],{"class":250},[91,2354,2355],{"class":93,"line":1304},[91,2356,1670],{"class":250},[91,2358,2359,2361,2364,2366,2368],{"class":93,"line":1319},[91,2360,2108],{"class":153},[91,2362,2363],{"class":250}," num",[91,2365,296],{"class":153},[91,2367,440],{"class":105},[91,2369,1415],{"class":250},[91,2371,2372,2375,2378,2380,2382],{"class":93,"line":1325},[91,2373,2374],{"class":153},"    while",[91,2376,2377],{"class":250},"(num",[91,2379,1159],{"class":153},[91,2381,695],{"class":105},[91,2383,257],{"class":250},[91,2385,2386],{"class":93,"line":1339},[91,2387,2153],{"class":250},[91,2389,2390,2393,2396,2398,2400,2402,2405],{"class":93,"line":1345},[91,2391,2392],{"class":97},"       std",[91,2394,2395],{"class":250},"::cout",[91,2397,1293],{"class":153},[91,2399,1789],{"class":250},[91,2401,1293],{"class":153},[91,2403,2404],{"class":97},"std",[91,2406,2407],{"class":250},"::endl;\n",[91,2409,2410,2413,2416],{"class":93,"line":1436},[91,2411,2412],{"class":250},"        num",[91,2414,2415],{"class":153},"++",[91,2417,1415],{"class":250},[91,2419,2420],{"class":93,"line":1442},[91,2421,2310],{"class":250},[91,2423,2424,2427,2429,2432],{"class":93,"line":1454},[91,2425,2426],{"class":97},"    system",[91,2428,251],{"class":250},[91,2430,2431],{"class":101},"\"pause\"",[91,2433,257],{"class":250},[91,2435,2436],{"class":93,"line":1736},[91,2437,1689],{"class":250},[21,2439,2440],{},"注意：写好循环条件，避免死循环情况",[82,2442,2444],{"className":238,"code":2443,"language":240,"meta":26,"style":26},"\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",[88,2445,2446,2451,2458,2465,2475,2483,2487,2492,2519,2524,2529,2537,2564,2569,2574,2587,2597,2601,2611,2616,2629,2634,2648,2653,2668,2672,2685,2689,2694,2698,2712,2720,2725,2731,2737,2742],{"__ignoreMap":26},[91,2447,2448],{"class":93,"line":94},[91,2449,2450],{"class":308},"\u002F\u002F循环结构-猜数字\n",[91,2452,2453,2455],{"class":93,"line":38},[91,2454,2073],{"class":153},[91,2456,2457],{"class":101}," \u003Ciostream>\n",[91,2459,2460,2462],{"class":93,"line":1304},[91,2461,2073],{"class":153},[91,2463,2464],{"class":101}," \u003Cctime>\n",[91,2466,2467,2469,2471,2473],{"class":93,"line":1319},[91,2468,2081],{"class":153},[91,2470,2084],{"class":153},[91,2472,2087],{"class":97},[91,2474,1415],{"class":250},[91,2476,2477,2479,2481],{"class":93,"line":1325},[91,2478,254],{"class":153},[91,2480,2096],{"class":97},[91,2482,2099],{"class":250},[91,2484,2485],{"class":93,"line":1339},[91,2486,1670],{"class":250},[91,2488,2489],{"class":93,"line":1345},[91,2490,2491],{"class":308},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[91,2493,2494,2497,2500,2503,2506,2508,2511,2513,2516],{"class":93,"line":1436},[91,2495,2496],{"class":97},"    srand",[91,2498,2499],{"class":250},"((",[91,2501,2502],{"class":153},"unsigned",[91,2504,2505],{"class":153}," int",[91,2507,678],{"class":250},[91,2509,2510],{"class":97},"time",[91,2512,251],{"class":250},[91,2514,2515],{"class":105},"NULL",[91,2517,2518],{"class":250},"));\n",[91,2520,2521],{"class":93,"line":1442},[91,2522,2523],{"emptyLinePlaceholder":175},"\n",[91,2525,2526],{"class":93,"line":1454},[91,2527,2528],{"class":308},"    \u002F\u002F1.系统生成随机数\n",[91,2530,2531,2534],{"class":93,"line":1736},[91,2532,2533],{"class":308},"    \u002F\u002Frand()%100",[91,2535,2536],{"class":308}," \u002F\u002F生成0-99的随机数\n",[91,2538,2539,2541,2543,2545,2548,2551,2553,2555,2557,2559,2561],{"class":93,"line":1741},[91,2540,2108],{"class":153},[91,2542,2363],{"class":250},[91,2544,296],{"class":153},[91,2546,2547],{"class":97},"rand",[91,2549,2550],{"class":250},"()",[91,2552,577],{"class":153},[91,2554,560],{"class":105},[91,2556,730],{"class":153},[91,2558,466],{"class":105},[91,2560,305],{"class":250},[91,2562,2563],{"class":308}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[91,2565,2566],{"class":93,"line":1747},[91,2567,2568],{"class":308},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[91,2570,2571],{"class":93,"line":1752},[91,2572,2573],{"class":308},"    \u002F\u002F2.玩家猜测\n",[91,2575,2576,2578,2581,2583,2585],{"class":93,"line":1766},[91,2577,2108],{"class":153},[91,2579,2580],{"class":250}," val",[91,2582,296],{"class":153},[91,2584,440],{"class":105},[91,2586,1415],{"class":250},[91,2588,2589,2591,2593,2595],{"class":93,"line":1771},[91,2590,2374],{"class":153},[91,2592,1782],{"class":250},[91,2594,466],{"class":105},[91,2596,257],{"class":250},[91,2598,2599],{"class":93,"line":1777},[91,2600,2153],{"class":250},[91,2602,2603,2606,2608],{"class":93,"line":1798},[91,2604,2605],{"class":250},"        cin",[91,2607,1554],{"class":153},[91,2609,2610],{"class":250},"val;\n",[91,2612,2613],{"class":93,"line":1803},[91,2614,2615],{"class":308},"        \u002F\u002F3.判断玩家猜测\n",[91,2617,2618,2621,2624,2626],{"class":93,"line":1817},[91,2619,2620],{"class":153},"        if",[91,2622,2623],{"class":250},"(val",[91,2625,1159],{"class":153},[91,2627,2628],{"class":250},"num) \n",[91,2630,2631],{"class":93,"line":1822},[91,2632,2633],{"class":250},"        {\n",[91,2635,2636,2639,2641,2644,2646],{"class":93,"line":1851},[91,2637,2638],{"class":250},"            cout",[91,2640,1293],{"class":153},[91,2642,2643],{"class":101},"\"猜小了！\"",[91,2645,1293],{"class":153},[91,2647,1316],{"class":250},[91,2649,2650],{"class":93,"line":1856},[91,2651,2652],{"class":250},"        }\n",[91,2654,2655,2658,2660,2663,2665],{"class":93,"line":1873},[91,2656,2657],{"class":153},"        else",[91,2659,1828],{"class":153},[91,2661,2662],{"class":250}," (val",[91,2664,1209],{"class":153},[91,2666,2667],{"class":250},"num)\n",[91,2669,2670],{"class":93,"line":1878},[91,2671,2633],{"class":250},[91,2673,2674,2676,2678,2681,2683],{"class":93,"line":1883},[91,2675,2638],{"class":250},[91,2677,1293],{"class":153},[91,2679,2680],{"class":101},"\"猜大了！\"",[91,2682,1293],{"class":153},[91,2684,1316],{"class":250},[91,2686,2687],{"class":93,"line":1888},[91,2688,2652],{"class":250},[91,2690,2691],{"class":93,"line":1902},[91,2692,2693],{"class":153},"        else\n",[91,2695,2696],{"class":93,"line":1907},[91,2697,2633],{"class":250},[91,2699,2701,2703,2705,2708,2710],{"class":93,"line":2700},30,[91,2702,2638],{"class":250},[91,2704,1293],{"class":153},[91,2706,2707],{"class":101},"\"猜对了！\"",[91,2709,1293],{"class":153},[91,2711,1316],{"class":250},[91,2713,2715,2718],{"class":93,"line":2714},31,[91,2716,2717],{"class":153},"            break",[91,2719,1415],{"class":250},[91,2721,2723],{"class":93,"line":2722},32,[91,2724,2652],{"class":250},[91,2726,2728],{"class":93,"line":2727},33,[91,2729,2730],{"class":308},"        \u002F\u002F猜对 退出游戏\n",[91,2732,2734],{"class":93,"line":2733},34,[91,2735,2736],{"class":308},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[91,2738,2740],{"class":93,"line":2739},35,[91,2741,2310],{"class":250},[91,2743,2745],{"class":93,"line":2744},36,[91,2746,1689],{"class":250},[14,2748,2749],{"start":38},[17,2750,2751,2752,2755],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[398,2753,2754],{},"do...while会先执行一次循环语句","，在判断循环语句",[82,2757,2759],{"className":238,"code":2758,"language":240,"meta":26,"style":26},"\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",[88,2760,2761,2766,2774,2778,2790,2798,2802,2819,2826,2830,2843,2853],{"__ignoreMap":26},[91,2762,2763],{"class":93,"line":94},[91,2764,2765],{"class":308},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[91,2767,2768,2770,2772],{"class":93,"line":38},[91,2769,254],{"class":153},[91,2771,2096],{"class":97},[91,2773,2099],{"class":250},[91,2775,2776],{"class":93,"line":1304},[91,2777,1670],{"class":250},[91,2779,2780,2782,2784,2786,2788],{"class":93,"line":1319},[91,2781,2108],{"class":153},[91,2783,2363],{"class":250},[91,2785,296],{"class":153},[91,2787,440],{"class":105},[91,2789,1415],{"class":250},[91,2791,2792,2795],{"class":93,"line":1325},[91,2793,2794],{"class":153},"    do",[91,2796,2797],{"class":250}," \n",[91,2799,2800],{"class":93,"line":1339},[91,2801,2153],{"class":250},[91,2803,2804,2807,2809,2811,2813,2815,2817],{"class":93,"line":1345},[91,2805,2806],{"class":97},"        std",[91,2808,2395],{"class":250},[91,2810,1293],{"class":153},[91,2812,1789],{"class":250},[91,2814,1293],{"class":153},[91,2816,2404],{"class":97},[91,2818,2407],{"class":250},[91,2820,2821,2823],{"class":93,"line":1436},[91,2822,2412],{"class":250},[91,2824,2825],{"class":153},"++\n",[91,2827,2828],{"class":93,"line":1442},[91,2829,2310],{"class":250},[91,2831,2832,2834,2836,2838,2840],{"class":93,"line":1454},[91,2833,2374],{"class":153},[91,2835,2377],{"class":250},[91,2837,1159],{"class":153},[91,2839,695],{"class":105},[91,2841,2842],{"class":250},");\n",[91,2844,2845,2847,2849,2851],{"class":93,"line":1736},[91,2846,2426],{"class":97},[91,2848,251],{"class":250},[91,2850,2431],{"class":101},[91,2852,2842],{"class":250},[91,2854,2855],{"class":93,"line":1741},[91,2856,1689],{"class":250},[21,2858,2859],{},"案例-水仙花数",[21,2861,2862],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[21,2864,2865],{},"例如：1^3+5^3+3^3=153",[21,2867,2868],{},"请用do...while语句，求出所有3位数的水仙花数",[82,2870,2872],{"className":238,"code":2871,"language":240,"meta":26,"style":26},"#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",[88,2873,2874,2880,2890,2898,2902,2907,2919,2925,2929,2934,2950,2966,2982,2997,3016,3031,3079,3083,3095,3099,3107,3111,3125],{"__ignoreMap":26},[91,2875,2876,2878],{"class":93,"line":94},[91,2877,2073],{"class":153},[91,2879,2457],{"class":101},[91,2881,2882,2884,2886,2888],{"class":93,"line":38},[91,2883,2081],{"class":153},[91,2885,2084],{"class":153},[91,2887,2087],{"class":97},[91,2889,1415],{"class":250},[91,2891,2892,2894,2896],{"class":93,"line":1304},[91,2893,254],{"class":153},[91,2895,2096],{"class":97},[91,2897,2099],{"class":250},[91,2899,2900],{"class":93,"line":1319},[91,2901,1670],{"class":250},[91,2903,2904],{"class":93,"line":1325},[91,2905,2906],{"class":308},"    \u002F\u002F1.先打印所有三位数字\n",[91,2908,2909,2911,2913,2915,2917],{"class":93,"line":1339},[91,2910,2108],{"class":153},[91,2912,2363],{"class":250},[91,2914,296],{"class":153},[91,2916,560],{"class":105},[91,2918,1415],{"class":250},[91,2920,2921,2923],{"class":93,"line":1345},[91,2922,2794],{"class":153},[91,2924,2797],{"class":250},[91,2926,2927],{"class":93,"line":1436},[91,2928,2153],{"class":250},[91,2930,2931],{"class":93,"line":1442},[91,2932,2933],{"class":308},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[91,2935,2936,2939,2941,2943,2945,2947],{"class":93,"line":1454},[91,2937,2938],{"class":153},"        int",[91,2940,1523],{"class":250},[91,2942,296],{"class":153},[91,2944,440],{"class":105},[91,2946,305],{"class":250},[91,2948,2949],{"class":308}," \u002F\u002F个位\n",[91,2951,2952,2954,2957,2959,2961,2963],{"class":93,"line":1736},[91,2953,2938],{"class":153},[91,2955,2956],{"class":250}," b",[91,2958,296],{"class":153},[91,2960,440],{"class":105},[91,2962,305],{"class":250},[91,2964,2965],{"class":308}," \u002F\u002F十位\n",[91,2967,2968,2970,2973,2975,2977,2979],{"class":93,"line":1741},[91,2969,2938],{"class":153},[91,2971,2972],{"class":250}," c",[91,2974,296],{"class":153},[91,2976,440],{"class":105},[91,2978,305],{"class":250},[91,2980,2981],{"class":308}," \u002F\u002F百位\n",[91,2983,2984,2987,2989,2991,2993,2995],{"class":93,"line":1747},[91,2985,2986],{"class":250},"        a",[91,2988,296],{"class":153},[91,2990,1789],{"class":250},[91,2992,577],{"class":153},[91,2994,695],{"class":105},[91,2996,1415],{"class":250},[91,2998,2999,3002,3004,3006,3008,3010,3012,3014],{"class":93,"line":1752},[91,3000,3001],{"class":250},"        b",[91,3003,296],{"class":153},[91,3005,1789],{"class":250},[91,3007,833],{"class":153},[91,3009,695],{"class":105},[91,3011,577],{"class":153},[91,3013,695],{"class":105},[91,3015,1415],{"class":250},[91,3017,3018,3021,3023,3025,3027,3029],{"class":93,"line":1766},[91,3019,3020],{"class":250},"        c",[91,3022,296],{"class":153},[91,3024,1789],{"class":250},[91,3026,833],{"class":153},[91,3028,560],{"class":105},[91,3030,1415],{"class":250},[91,3032,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3065,3067,3070,3073,3076],{"class":93,"line":1771},[91,3034,2620],{"class":153},[91,3036,1965],{"class":250},[91,3038,704],{"class":153},[91,3040,487],{"class":250},[91,3042,704],{"class":153},[91,3044,487],{"class":250},[91,3046,730],{"class":153},[91,3048,512],{"class":250},[91,3050,704],{"class":153},[91,3052,512],{"class":250},[91,3054,704],{"class":153},[91,3056,512],{"class":250},[91,3058,730],{"class":153},[91,3060,537],{"class":250},[91,3062,704],{"class":153},[91,3064,537],{"class":250},[91,3066,704],{"class":153},[91,3068,3069],{"class":250},"c ",[91,3071,3072],{"class":153},"==",[91,3074,3075],{"class":250}," num)",[91,3077,3078],{"class":308}," \u002F\u002F如果是水仙花数，才打印\n",[91,3080,3081],{"class":93,"line":1777},[91,3082,2633],{"class":250},[91,3084,3085,3087,3089,3091,3093],{"class":93,"line":1798},[91,3086,2638],{"class":250},[91,3088,1293],{"class":153},[91,3090,1789],{"class":250},[91,3092,1293],{"class":153},[91,3094,1316],{"class":250},[91,3096,3097],{"class":93,"line":1803},[91,3098,2652],{"class":250},[91,3100,3101,3103,3105],{"class":93,"line":1817},[91,3102,2412],{"class":250},[91,3104,2415],{"class":153},[91,3106,1415],{"class":250},[91,3108,3109],{"class":93,"line":1822},[91,3110,2310],{"class":250},[91,3112,3113,3115,3118,3120,3123],{"class":93,"line":1851},[91,3114,2374],{"class":153},[91,3116,3117],{"class":250}," (num ",[91,3119,1159],{"class":153},[91,3121,3122],{"class":105}," 1000",[91,3124,2842],{"class":250},[91,3126,3127],{"class":93,"line":1856},[91,3128,1689],{"class":250},[14,3130,3131],{"start":1304},[17,3132,3133],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[82,3135,3137],{"className":238,"code":3136,"language":240,"meta":26,"style":26},"\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",[88,3138,3139,3144,3173,3177,3189,3193,3198,3209,3216,3220,3234,3238,3245,3249,3261,3270],{"__ignoreMap":26},[91,3140,3141],{"class":93,"line":94},[91,3142,3143],{"class":308},"\u002F\u002F从数字0-9打印\n",[91,3145,3146,3149,3151,3153,3156,3158,3160,3163,3165,3167,3169,3171],{"class":93,"line":38},[91,3147,3148],{"class":153},"for",[91,3150,251],{"class":250},[91,3152,254],{"class":153},[91,3154,3155],{"class":250}," i",[91,3157,296],{"class":153},[91,3159,440],{"class":105},[91,3161,3162],{"class":250},";i",[91,3164,1159],{"class":153},[91,3166,695],{"class":105},[91,3168,3162],{"class":250},[91,3170,2415],{"class":153},[91,3172,257],{"class":250},[91,3174,3175],{"class":93,"line":1304},[91,3176,1670],{"class":250},[91,3178,3179,3181,3183,3185,3187],{"class":93,"line":1319},[91,3180,1675],{"class":250},[91,3182,1293],{"class":153},[91,3184,690],{"class":250},[91,3186,1293],{"class":153},[91,3188,1316],{"class":250},[91,3190,3191],{"class":93,"line":1325},[91,3192,1689],{"class":250},[91,3194,3195],{"class":93,"line":1339},[91,3196,3197],{"class":308},"\u002F\u002F上式可以进行拆分\n",[91,3199,3200,3202,3204,3206],{"class":93,"line":1345},[91,3201,254],{"class":153},[91,3203,3155],{"class":250},[91,3205,296],{"class":153},[91,3207,3208],{"class":105},"0\n",[91,3210,3211,3213],{"class":93,"line":1436},[91,3212,3148],{"class":153},[91,3214,3215],{"class":250},"(;;;)\n",[91,3217,3218],{"class":93,"line":1442},[91,3219,1670],{"class":250},[91,3221,3222,3225,3228,3230,3232],{"class":93,"line":1454},[91,3223,3224],{"class":153},"    if",[91,3226,3227],{"class":250},"(i",[91,3229,1834],{"class":153},[91,3231,695],{"class":105},[91,3233,257],{"class":250},[91,3235,3236],{"class":93,"line":1736},[91,3237,2153],{"class":250},[91,3239,3240,3243],{"class":93,"line":1741},[91,3241,3242],{"class":153},"        break",[91,3244,1415],{"class":250},[91,3246,3247],{"class":93,"line":1747},[91,3248,2310],{"class":250},[91,3250,3251,3253,3255,3257,3259],{"class":93,"line":1752},[91,3252,1675],{"class":250},[91,3254,1293],{"class":153},[91,3256,690],{"class":250},[91,3258,1293],{"class":153},[91,3260,1316],{"class":250},[91,3262,3263,3266,3268],{"class":93,"line":1766},[91,3264,3265],{"class":250},"    i",[91,3267,2415],{"class":153},[91,3269,1415],{"class":250},[91,3271,3272],{"class":93,"line":1771},[91,3273,1689],{"class":250},[21,3275,3276],{},"小练习",[82,3278,3280],{"className":238,"code":3279,"language":240,"meta":26,"style":26},"#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",[88,3281,3282,3288,3298,3306,3310,3315,3320,3348,3352,3357,3362,3403,3407,3420,3424,3428,3432,3444,3448,3452],{"__ignoreMap":26},[91,3283,3284,3286],{"class":93,"line":94},[91,3285,2073],{"class":153},[91,3287,2076],{"class":101},[91,3289,3290,3292,3294,3296],{"class":93,"line":38},[91,3291,2081],{"class":153},[91,3293,2084],{"class":153},[91,3295,2087],{"class":97},[91,3297,1415],{"class":250},[91,3299,3300,3302,3304],{"class":93,"line":1304},[91,3301,254],{"class":153},[91,3303,2096],{"class":97},[91,3305,2099],{"class":250},[91,3307,3308],{"class":93,"line":1319},[91,3309,1670],{"class":250},[91,3311,3312],{"class":93,"line":1325},[91,3313,3314],{"class":308},"    \u002F\u002F敲桌子案例\n",[91,3316,3317],{"class":93,"line":1339},[91,3318,3319],{"class":308},"    \u002F\u002F1.先输出1-100的数字\n",[91,3321,3322,3325,3327,3329,3331,3333,3335,3338,3340,3342,3344,3346],{"class":93,"line":1345},[91,3323,3324],{"class":153},"    for",[91,3326,251],{"class":250},[91,3328,254],{"class":153},[91,3330,3155],{"class":250},[91,3332,296],{"class":153},[91,3334,466],{"class":105},[91,3336,3337],{"class":250},"; i",[91,3339,1712],{"class":153},[91,3341,560],{"class":105},[91,3343,3337],{"class":250},[91,3345,2415],{"class":153},[91,3347,257],{"class":250},[91,3349,3350],{"class":93,"line":1436},[91,3351,2153],{"class":250},[91,3353,3354],{"class":93,"line":1442},[91,3355,3356],{"class":308},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[91,3358,3359],{"class":93,"line":1454},[91,3360,3361],{"class":308},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[91,3363,3364,3366,3368,3370,3372,3374,3376,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401],{"class":93,"line":1736},[91,3365,2620],{"class":153},[91,3367,3227],{"class":250},[91,3369,577],{"class":153},[91,3371,618],{"class":105},[91,3373,3072],{"class":153},[91,3375,440],{"class":105},[91,3377,3378],{"class":153}," ||",[91,3380,3155],{"class":250},[91,3382,577],{"class":153},[91,3384,695],{"class":105},[91,3386,3072],{"class":153},[91,3388,618],{"class":105},[91,3390,3378],{"class":153},[91,3392,3155],{"class":250},[91,3394,833],{"class":153},[91,3396,695],{"class":105},[91,3398,3072],{"class":153},[91,3400,618],{"class":105},[91,3402,257],{"class":250},[91,3404,3405],{"class":93,"line":1741},[91,3406,2633],{"class":250},[91,3408,3409,3411,3413,3416,3418],{"class":93,"line":1747},[91,3410,2638],{"class":250},[91,3412,1293],{"class":153},[91,3414,3415],{"class":101},"\"敲桌子\"",[91,3417,1293],{"class":153},[91,3419,1316],{"class":250},[91,3421,3422],{"class":93,"line":1752},[91,3423,2652],{"class":250},[91,3425,3426],{"class":93,"line":1766},[91,3427,2693],{"class":153},[91,3429,3430],{"class":93,"line":1771},[91,3431,2633],{"class":250},[91,3433,3434,3436,3438,3440,3442],{"class":93,"line":1777},[91,3435,2638],{"class":250},[91,3437,1293],{"class":153},[91,3439,690],{"class":250},[91,3441,1293],{"class":153},[91,3443,1316],{"class":250},[91,3445,3446],{"class":93,"line":1798},[91,3447,2652],{"class":250},[91,3449,3450],{"class":93,"line":1803},[91,3451,2310],{"class":250},[91,3453,3454],{"class":93,"line":1817},[91,3455,1689],{"class":250},[21,3457,3458],{},"嵌套实现星图",[82,3460,3462],{"className":238,"code":3461,"language":240,"meta":26,"style":26},"#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",[88,3463,3464,3470,3480,3488,3492,3518,3522,3551,3555,3566,3570,3579,3583],{"__ignoreMap":26},[91,3465,3466,3468],{"class":93,"line":94},[91,3467,2073],{"class":153},[91,3469,2076],{"class":101},[91,3471,3472,3474,3476,3478],{"class":93,"line":38},[91,3473,2081],{"class":153},[91,3475,2084],{"class":153},[91,3477,2087],{"class":97},[91,3479,1415],{"class":250},[91,3481,3482,3484,3486],{"class":93,"line":1304},[91,3483,254],{"class":153},[91,3485,2096],{"class":97},[91,3487,2099],{"class":250},[91,3489,3490],{"class":93,"line":1319},[91,3491,1670],{"class":250},[91,3493,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516],{"class":93,"line":1325},[91,3495,3324],{"class":153},[91,3497,1782],{"class":250},[91,3499,254],{"class":153},[91,3501,3155],{"class":250},[91,3503,296],{"class":153},[91,3505,440],{"class":105},[91,3507,3162],{"class":250},[91,3509,1159],{"class":153},[91,3511,695],{"class":105},[91,3513,3162],{"class":250},[91,3515,2415],{"class":153},[91,3517,257],{"class":250},[91,3519,3520],{"class":93,"line":1339},[91,3521,2153],{"class":250},[91,3523,3524,3527,3529,3531,3534,3536,3538,3541,3543,3545,3547,3549],{"class":93,"line":1345},[91,3525,3526],{"class":153},"        for",[91,3528,1782],{"class":250},[91,3530,254],{"class":153},[91,3532,3533],{"class":250}," j",[91,3535,296],{"class":153},[91,3537,440],{"class":105},[91,3539,3540],{"class":250},";j",[91,3542,1159],{"class":153},[91,3544,695],{"class":105},[91,3546,3540],{"class":250},[91,3548,2415],{"class":153},[91,3550,257],{"class":250},[91,3552,3553],{"class":93,"line":1436},[91,3554,2633],{"class":250},[91,3556,3557,3559,3561,3564],{"class":93,"line":1442},[91,3558,2638],{"class":250},[91,3560,1293],{"class":153},[91,3562,3563],{"class":101},"\"*\"",[91,3565,1415],{"class":250},[91,3567,3568],{"class":93,"line":1454},[91,3569,2652],{"class":250},[91,3571,3572,3575,3577],{"class":93,"line":1736},[91,3573,3574],{"class":250},"        cout",[91,3576,1293],{"class":153},[91,3578,1316],{"class":250},[91,3580,3581],{"class":93,"line":1741},[91,3582,2310],{"class":250},[91,3584,3585],{"class":93,"line":1747},[91,3586,1689],{"class":250},[21,3588,3589],{},"乘法口诀表",[82,3591,3593],{"className":238,"code":3592,"language":240,"meta":26,"style":26},"#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",[88,3594,3595,3601,3611,3619,3623,3649,3653,3678,3682,3722,3726,3734,3738],{"__ignoreMap":26},[91,3596,3597,3599],{"class":93,"line":94},[91,3598,2073],{"class":153},[91,3600,2457],{"class":101},[91,3602,3603,3605,3607,3609],{"class":93,"line":38},[91,3604,2081],{"class":153},[91,3606,2084],{"class":153},[91,3608,2087],{"class":97},[91,3610,1415],{"class":250},[91,3612,3613,3615,3617],{"class":93,"line":1304},[91,3614,254],{"class":153},[91,3616,2096],{"class":97},[91,3618,2099],{"class":250},[91,3620,3621],{"class":93,"line":1319},[91,3622,1670],{"class":250},[91,3624,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647],{"class":93,"line":1325},[91,3626,3324],{"class":153},[91,3628,251],{"class":250},[91,3630,254],{"class":153},[91,3632,3155],{"class":250},[91,3634,296],{"class":153},[91,3636,466],{"class":105},[91,3638,3162],{"class":250},[91,3640,1159],{"class":153},[91,3642,695],{"class":105},[91,3644,3162],{"class":250},[91,3646,2415],{"class":153},[91,3648,257],{"class":250},[91,3650,3651],{"class":93,"line":1339},[91,3652,2153],{"class":250},[91,3654,3655,3657,3659,3661,3663,3665,3667,3669,3671,3674,3676],{"class":93,"line":1345},[91,3656,3526],{"class":153},[91,3658,251],{"class":250},[91,3660,254],{"class":153},[91,3662,3533],{"class":250},[91,3664,296],{"class":153},[91,3666,466],{"class":105},[91,3668,3540],{"class":250},[91,3670,1712],{"class":153},[91,3672,3673],{"class":250},"i;j",[91,3675,2415],{"class":153},[91,3677,257],{"class":250},[91,3679,3680],{"class":93,"line":1436},[91,3681,2633],{"class":250},[91,3683,3684,3686,3688,3690,3692,3694,3696,3698,3700,3703,3705,3707,3709,3711,3713,3716,3718,3720],{"class":93,"line":1442},[91,3685,2638],{"class":250},[91,3687,1293],{"class":153},[91,3689,716],{"class":250},[91,3691,1293],{"class":153},[91,3693,3563],{"class":101},[91,3695,1293],{"class":153},[91,3697,690],{"class":250},[91,3699,1293],{"class":153},[91,3701,3702],{"class":101},"\"=\"",[91,3704,1293],{"class":153},[91,3706,690],{"class":250},[91,3708,704],{"class":153},[91,3710,716],{"class":250},[91,3712,1293],{"class":153},[91,3714,3715],{"class":101},"'",[91,3717,1355],{"class":105},[91,3719,3715],{"class":101},[91,3721,1415],{"class":250},[91,3723,3724],{"class":93,"line":1454},[91,3725,2652],{"class":250},[91,3727,3728,3730,3732],{"class":93,"line":1736},[91,3729,3574],{"class":250},[91,3731,1293],{"class":153},[91,3733,1316],{"class":250},[91,3735,3736],{"class":93,"line":1741},[91,3737,2310],{"class":250},[91,3739,3740],{"class":93,"line":1747},[91,3741,1689],{"class":250},[217,3743,3745],{"id":3744},"_163跳出语句","1.6.3跳出语句",[14,3747,3748],{},[17,3749,3750],{},"break语句\n作用：用于跳出选择结构或者循环结构",[21,3752,3753],{},"break使用时机：",[1256,3755,3756,3759,3762],{},[17,3757,3758],{},"出现在switch条件语句中，作用是终止case并跳出switch",[17,3760,3761],{},"出现在循环结构中，作用是跳出当前的循环结构",[17,3763,3764],{},"出现在嵌套循环中，跳出最近的内层循环语句",[14,3766,3767,3770],{"start":38},[17,3768,3769],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[17,3771,3772],{},"goto语句\n语法：goto 标记;",[21,3774,3775],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[82,3777,3779],{"className":238,"code":3778,"language":240,"meta":26,"style":26},"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",[88,3780,3781,3789,3793,3806,3816,3829,3842,3855,3863,3879],{"__ignoreMap":26},[91,3782,3783,3785,3787],{"class":93,"line":94},[91,3784,254],{"class":153},[91,3786,2096],{"class":97},[91,3788,2099],{"class":250},[91,3790,3791],{"class":93,"line":38},[91,3792,1670],{"class":250},[91,3794,3795,3797,3799,3802,3804],{"class":93,"line":1304},[91,3796,1675],{"class":250},[91,3798,1293],{"class":153},[91,3800,3801],{"class":101},"\"1\"",[91,3803,1293],{"class":153},[91,3805,1316],{"class":250},[91,3807,3808,3811,3814],{"class":93,"line":1319},[91,3809,3810],{"class":153},"    goto",[91,3812,3813],{"class":97}," FLAG",[91,3815,1415],{"class":250},[91,3817,3818,3820,3822,3825,3827],{"class":93,"line":1325},[91,3819,1675],{"class":250},[91,3821,1293],{"class":153},[91,3823,3824],{"class":101},"\"2\"",[91,3826,1293],{"class":153},[91,3828,1316],{"class":250},[91,3830,3831,3833,3835,3838,3840],{"class":93,"line":1339},[91,3832,1675],{"class":250},[91,3834,1293],{"class":153},[91,3836,3837],{"class":101},"\"3\"",[91,3839,1293],{"class":153},[91,3841,1316],{"class":250},[91,3843,3844,3846,3848,3851,3853],{"class":93,"line":1345},[91,3845,1675],{"class":250},[91,3847,1293],{"class":153},[91,3849,3850],{"class":101},"\"4\"",[91,3852,1293],{"class":153},[91,3854,1316],{"class":250},[91,3856,3857,3860],{"class":93,"line":1436},[91,3858,3859],{"class":97},"    FLAG",[91,3861,3862],{"class":250},":\n",[91,3864,3865,3867,3869,3872,3874,3876],{"class":93,"line":1442},[91,3866,1675],{"class":250},[91,3868,1293],{"class":153},[91,3870,3871],{"class":101},"\"5\"",[91,3873,1293],{"class":153},[91,3875,1363],{"class":250},[91,3877,3878],{"class":308},"\u002F\u002F跳过了2,3,4,直接到5\n",[91,3880,3881],{"class":93,"line":1454},[91,3882,1689],{"class":250},[190,3884,3886],{"id":3885},"_17数组","1.7数组",[217,3888,3890],{"id":3889},"_171一维数组","1.7.1一维数组",[14,3892,3893],{},[17,3894,3895],{},"一维数组定义方式",[386,3897,3898,3908],{},[389,3899,3900],{},[392,3901,3902,3905],{},[395,3903,3904],{},"方式",[395,3906,3907],{},"注意事项",[433,3909,3910,3924,3934],{},[392,3911,3912,3918],{},[438,3913,3914,3915,305],{},"数据类型 数组名",[91,3916,3917],{},"数组长度",[438,3919,3920,3921,3923],{},"这种方式是先定义再arr",[91,3922,690],{},"赋值",[392,3925,3926,3931],{},[438,3927,3914,3928,3930],{},[91,3929,3917],{},"={值1,值2....};",[438,3932,3933],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[392,3935,3936,3940],{},[438,3937,3914,3938,3930],{},[91,3939],{},[438,3941,3942,3943,3945],{},"int arr",[91,3944],{},";这是不正确的，按照这样的方式定义必须有初始长度",[14,3947,3948],{"start":38},[17,3949,3950],{},"一维数组数组名\n用途：",[1256,3952,3953],{},[17,3954,3955],{},"1.可以统计整个数组在内存中的长度：",[82,3957,3959],{"className":238,"code":3958,"language":240,"meta":26,"style":26},"sizeof(arr);\nsizeof(arr[0]);\n",[88,3960,3961,3968],{"__ignoreMap":26},[91,3962,3963,3965],{"class":93,"line":94},[91,3964,247],{"class":153},[91,3966,3967],{"class":250},"(arr);\n",[91,3969,3970,3972,3975,3977],{"class":93,"line":38},[91,3971,247],{"class":153},[91,3973,3974],{"class":250},"(arr[",[91,3976,440],{"class":105},[91,3978,3979],{"class":250},"]);\n",[1256,3981,3982],{},[17,3983,3984],{},"2.可以获取数组在内存中的首地址:",[82,3986,3988],{"className":238,"code":3987,"language":240,"meta":26,"style":26},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[88,3989,3990,3995,4008,4013],{"__ignoreMap":26},[91,3991,3992],{"class":93,"line":94},[91,3993,3994],{"class":308},"\u002F\u002F查看16进制的首地址\n",[91,3996,3997,3999,4001,4004,4006],{"class":93,"line":38},[91,3998,1494],{"class":250},[91,4000,1293],{"class":153},[91,4002,4003],{"class":250},"arr",[91,4005,1293],{"class":153},[91,4007,1316],{"class":250},[91,4009,4010],{"class":93,"line":1304},[91,4011,4012],{"class":308},"\u002F\u002F看10进制数\n",[91,4014,4015,4017,4019,4021,4023,4025,4027,4030,4032,4034,4036],{"class":93,"line":1319},[91,4016,1494],{"class":250},[91,4018,1293],{"class":153},[91,4020,251],{"class":250},[91,4022,254],{"class":153},[91,4024,678],{"class":250},[91,4026,602],{"class":153},[91,4028,4029],{"class":250},"arr[",[91,4031,440],{"class":105},[91,4033,1189],{"class":250},[91,4035,1293],{"class":153},[91,4037,1316],{"class":250},[21,4039,4040],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1256,4042,4043],{},[17,4044,4045],{},"1️⃣五只小猪称体重",[82,4047,4049],{"className":238,"code":4048,"language":240,"meta":26,"style":26},"#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",[88,4050,4051,4057,4067,4075,4079,4119,4132,4158,4162,4174,4178,4188,4192,4196,4209,4219],{"__ignoreMap":26},[91,4052,4053,4055],{"class":93,"line":94},[91,4054,2073],{"class":153},[91,4056,2076],{"class":101},[91,4058,4059,4061,4063,4065],{"class":93,"line":38},[91,4060,2081],{"class":153},[91,4062,2084],{"class":153},[91,4064,2087],{"class":97},[91,4066,1415],{"class":250},[91,4068,4069,4071,4073],{"class":93,"line":1304},[91,4070,254],{"class":153},[91,4072,2096],{"class":97},[91,4074,2099],{"class":250},[91,4076,4077],{"class":93,"line":1319},[91,4078,1670],{"class":250},[91,4080,4081,4083,4086,4088,4090,4092,4094,4097,4099,4102,4104,4106,4108,4111,4113,4116],{"class":93,"line":1325},[91,4082,2108],{"class":153},[91,4084,4085],{"class":250}," arr[",[91,4087,568],{"class":105},[91,4089,1189],{"class":250},[91,4091,296],{"class":153},[91,4093,1145],{"class":250},[91,4095,4096],{"class":105},"300",[91,4098,627],{"class":250},[91,4100,4101],{"class":105},"350",[91,4103,627],{"class":250},[91,4105,1846],{"class":105},[91,4107,627],{"class":250},[91,4109,4110],{"class":105},"400",[91,4112,627],{"class":250},[91,4114,4115],{"class":105},"250",[91,4117,4118],{"class":250},"};\n",[91,4120,4121,4123,4126,4128,4130],{"class":93,"line":1339},[91,4122,2108],{"class":153},[91,4124,4125],{"class":250}," tmp",[91,4127,296],{"class":153},[91,4129,440],{"class":105},[91,4131,1415],{"class":250},[91,4133,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154,4156],{"class":93,"line":1345},[91,4135,3324],{"class":153},[91,4137,1782],{"class":250},[91,4139,254],{"class":153},[91,4141,3155],{"class":250},[91,4143,296],{"class":153},[91,4145,440],{"class":105},[91,4147,3162],{"class":250},[91,4149,1159],{"class":153},[91,4151,568],{"class":105},[91,4153,3162],{"class":250},[91,4155,2415],{"class":153},[91,4157,257],{"class":250},[91,4159,4160],{"class":93,"line":1436},[91,4161,2153],{"class":250},[91,4163,4164,4166,4169,4171],{"class":93,"line":1442},[91,4165,2620],{"class":153},[91,4167,4168],{"class":250},"(tmp",[91,4170,1159],{"class":153},[91,4172,4173],{"class":250},"arr[i])\n",[91,4175,4176],{"class":93,"line":1454},[91,4177,2633],{"class":250},[91,4179,4180,4183,4185],{"class":93,"line":1736},[91,4181,4182],{"class":250},"            tmp",[91,4184,296],{"class":153},[91,4186,4187],{"class":250},"arr[i];\n",[91,4189,4190],{"class":93,"line":1741},[91,4191,2652],{"class":250},[91,4193,4194],{"class":93,"line":1747},[91,4195,2310],{"class":250},[91,4197,4198,4200,4202,4205,4207],{"class":93,"line":1752},[91,4199,1675],{"class":250},[91,4201,1293],{"class":153},[91,4203,4204],{"class":250},"tmp",[91,4206,1293],{"class":153},[91,4208,1316],{"class":250},[91,4210,4211,4214,4217],{"class":93,"line":1766},[91,4212,4213],{"class":153},"    return",[91,4215,4216],{"class":105}," 0",[91,4218,1415],{"class":250},[91,4220,4221],{"class":93,"line":1771},[91,4222,1689],{"class":250},[1256,4224,4225],{},[17,4226,4227],{},"2️⃣数组元素逆置",[82,4229,4231],{"className":238,"code":4230,"language":240,"meta":26,"style":26},"\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",[88,4232,4233,4238,4244,4254,4262,4266,4301,4317,4349,4362,4367,4372,4384,4394,4404,4409,4418,4428,4433,4438,4465,4469,4485,4489,4500,4509],{"__ignoreMap":26},[91,4234,4235],{"class":93,"line":94},[91,4236,4237],{"class":308},"\u002F\u002F元素逆置\n",[91,4239,4240,4242],{"class":93,"line":38},[91,4241,2073],{"class":153},[91,4243,2076],{"class":101},[91,4245,4246,4248,4250,4252],{"class":93,"line":1304},[91,4247,2081],{"class":153},[91,4249,2084],{"class":153},[91,4251,2087],{"class":97},[91,4253,1415],{"class":250},[91,4255,4256,4258,4260],{"class":93,"line":1319},[91,4257,254],{"class":153},[91,4259,2096],{"class":97},[91,4261,2099],{"class":250},[91,4263,4264],{"class":93,"line":1325},[91,4265,1670],{"class":250},[91,4267,4268,4271,4273,4275,4277,4279,4281,4283,4285,4287,4289,4291,4293,4295,4297,4299],{"class":93,"line":1339},[91,4269,4270],{"class":153},"   int",[91,4272,4085],{"class":250},[91,4274,568],{"class":105},[91,4276,1189],{"class":250},[91,4278,296],{"class":153},[91,4280,1145],{"class":250},[91,4282,466],{"class":105},[91,4284,627],{"class":250},[91,4286,327],{"class":105},[91,4288,627],{"class":250},[91,4290,321],{"class":105},[91,4292,627],{"class":250},[91,4294,542],{"class":105},[91,4296,627],{"class":250},[91,4298,568],{"class":105},[91,4300,4118],{"class":250},[91,4302,4303,4305,4308,4310,4312,4314],{"class":93,"line":1345},[91,4304,4270],{"class":153},[91,4306,4307],{"class":250}," start",[91,4309,296],{"class":153},[91,4311,440],{"class":105},[91,4313,305],{"class":250},[91,4315,4316],{"class":308},"\u002F\u002F起始下标\n",[91,4318,4319,4321,4324,4327,4330,4333,4335,4337,4340,4342,4344,4346],{"class":93,"line":1436},[91,4320,4270],{"class":153},[91,4322,4323],{"class":250}," end",[91,4325,4326],{"class":153},"=sizeof",[91,4328,4329],{"class":250},"(arr)",[91,4331,4332],{"class":153},"\u002Fsizeof",[91,4334,3974],{"class":250},[91,4336,440],{"class":105},[91,4338,4339],{"class":250},"])",[91,4341,781],{"class":153},[91,4343,466],{"class":105},[91,4345,305],{"class":250},[91,4347,4348],{"class":308},"\u002F\u002F结束下标\n",[91,4350,4351,4354,4357,4359],{"class":93,"line":1442},[91,4352,4353],{"class":153},"   while",[91,4355,4356],{"class":250}," (start",[91,4358,1159],{"class":153},[91,4360,4361],{"class":250},"end)\n",[91,4363,4364],{"class":93,"line":1454},[91,4365,4366],{"class":250},"   {\n",[91,4368,4369],{"class":93,"line":1736},[91,4370,4371],{"class":308},"    \u002F\u002F实现元素互换代码\n",[91,4373,4374,4376,4379,4381],{"class":93,"line":1741},[91,4375,2108],{"class":153},[91,4377,4378],{"class":250}," temp",[91,4380,296],{"class":153},[91,4382,4383],{"class":250},"arr[start];\n",[91,4385,4386,4389,4391],{"class":93,"line":1747},[91,4387,4388],{"class":250},"    arr[start]",[91,4390,296],{"class":153},[91,4392,4393],{"class":250},"arr[end];\n",[91,4395,4396,4399,4401],{"class":93,"line":1752},[91,4397,4398],{"class":250},"    arr[end]",[91,4400,296],{"class":153},[91,4402,4403],{"class":250},"temp;\n",[91,4405,4406],{"class":93,"line":1766},[91,4407,4408],{"class":308},"    \u002F\u002F下标更新\n",[91,4410,4411,4414,4416],{"class":93,"line":1771},[91,4412,4413],{"class":250},"    start",[91,4415,2415],{"class":153},[91,4417,1415],{"class":250},[91,4419,4420,4423,4426],{"class":93,"line":1777},[91,4421,4422],{"class":250},"    end",[91,4424,4425],{"class":153},"--",[91,4427,1415],{"class":250},[91,4429,4430],{"class":93,"line":1798},[91,4431,4432],{"class":250},"   }\n",[91,4434,4435],{"class":93,"line":1803},[91,4436,4437],{"class":308},"   \u002F\u002F输出逆置后的数组\n",[91,4439,4440,4443,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463],{"class":93,"line":1817},[91,4441,4442],{"class":153},"   for",[91,4444,1782],{"class":250},[91,4446,254],{"class":153},[91,4448,3155],{"class":250},[91,4450,296],{"class":153},[91,4452,440],{"class":105},[91,4454,3162],{"class":250},[91,4456,1159],{"class":153},[91,4458,568],{"class":105},[91,4460,3162],{"class":250},[91,4462,2415],{"class":153},[91,4464,257],{"class":250},[91,4466,4467],{"class":93,"line":1822},[91,4468,4366],{"class":250},[91,4470,4471,4473,4475,4478,4480,4483],{"class":93,"line":1851},[91,4472,1675],{"class":250},[91,4474,1293],{"class":153},[91,4476,4477],{"class":250},"arr[i]",[91,4479,1293],{"class":153},[91,4481,4482],{"class":101},"\" \"",[91,4484,1415],{"class":250},[91,4486,4487],{"class":93,"line":1856},[91,4488,4432],{"class":250},[91,4490,4491,4494,4496,4498],{"class":93,"line":1873},[91,4492,4493],{"class":97},"   system",[91,4495,251],{"class":250},[91,4497,2431],{"class":101},[91,4499,2842],{"class":250},[91,4501,4502,4505,4507],{"class":93,"line":1878},[91,4503,4504],{"class":153},"   return",[91,4506,4216],{"class":105},[91,4508,1415],{"class":250},[91,4510,4511],{"class":93,"line":1883},[91,4512,1689],{"class":250},[1256,4514,4515],{},[17,4516,4517],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[82,4519,4521],{"className":238,"code":4520,"language":240,"meta":26,"style":26},"\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",[88,4522,4523,4528,4534,4544,4552,4556,4608,4621,4647,4651,4665,4669,4674,4679,4709,4713,4718,4752,4756,4761,4781,4786,4798,4814,4829,4834,4838,4842,4855,4881,4885,4899,4903,4911],{"__ignoreMap":26},[91,4524,4525],{"class":93,"line":94},[91,4526,4527],{"class":308},"\u002F\u002F冒泡排序,升序\n",[91,4529,4530,4532],{"class":93,"line":38},[91,4531,2073],{"class":153},[91,4533,2076],{"class":101},[91,4535,4536,4538,4540,4542],{"class":93,"line":1304},[91,4537,2081],{"class":153},[91,4539,2084],{"class":153},[91,4541,2087],{"class":97},[91,4543,1415],{"class":250},[91,4545,4546,4548,4550],{"class":93,"line":1319},[91,4547,254],{"class":153},[91,4549,2096],{"class":97},[91,4551,2099],{"class":250},[91,4553,4554],{"class":93,"line":1325},[91,4555,1670],{"class":250},[91,4557,4558,4560,4562,4564,4567,4569,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606],{"class":93,"line":1339},[91,4559,2108],{"class":153},[91,4561,4085],{"class":250},[91,4563,669],{"class":105},[91,4565,4566],{"class":250},"] ",[91,4568,296],{"class":153},[91,4570,4571],{"class":250}," {",[91,4573,542],{"class":105},[91,4575,627],{"class":250},[91,4577,327],{"class":105},[91,4579,627],{"class":250},[91,4581,644],{"class":105},[91,4583,627],{"class":250},[91,4585,440],{"class":105},[91,4587,627],{"class":250},[91,4589,568],{"class":105},[91,4591,627],{"class":250},[91,4593,618],{"class":105},[91,4595,627],{"class":250},[91,4597,466],{"class":105},[91,4599,627],{"class":250},[91,4601,321],{"class":105},[91,4603,627],{"class":250},[91,4605,669],{"class":105},[91,4607,4118],{"class":250},[91,4609,4610,4612,4614,4617,4619],{"class":93,"line":1345},[91,4611,1675],{"class":250},[91,4613,1293],{"class":153},[91,4615,4616],{"class":101},"\"排序前：\"",[91,4618,1293],{"class":153},[91,4620,1316],{"class":250},[91,4622,4623,4625,4627,4629,4631,4633,4635,4637,4639,4641,4643,4645],{"class":93,"line":1436},[91,4624,3324],{"class":153},[91,4626,1782],{"class":250},[91,4628,254],{"class":153},[91,4630,3155],{"class":250},[91,4632,296],{"class":153},[91,4634,440],{"class":105},[91,4636,3162],{"class":250},[91,4638,1159],{"class":153},[91,4640,669],{"class":105},[91,4642,3162],{"class":250},[91,4644,2415],{"class":153},[91,4646,257],{"class":250},[91,4648,4649],{"class":93,"line":1442},[91,4650,2153],{"class":250},[91,4652,4653,4655,4657,4659,4661,4663],{"class":93,"line":1454},[91,4654,3574],{"class":250},[91,4656,1293],{"class":153},[91,4658,4477],{"class":250},[91,4660,1293],{"class":153},[91,4662,4482],{"class":101},[91,4664,1415],{"class":250},[91,4666,4667],{"class":93,"line":1736},[91,4668,2310],{"class":250},[91,4670,4671],{"class":93,"line":1741},[91,4672,4673],{"class":308},"    \u002F\u002F开始冒泡排序\n",[91,4675,4676],{"class":93,"line":1747},[91,4677,4678],{"class":308},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[91,4680,4681,4683,4685,4687,4689,4691,4693,4695,4697,4699,4701,4703,4705,4707],{"class":93,"line":1752},[91,4682,3324],{"class":153},[91,4684,1782],{"class":250},[91,4686,254],{"class":153},[91,4688,3155],{"class":250},[91,4690,296],{"class":153},[91,4692,440],{"class":105},[91,4694,3162],{"class":250},[91,4696,1159],{"class":153},[91,4698,669],{"class":105},[91,4700,781],{"class":153},[91,4702,466],{"class":105},[91,4704,3162],{"class":250},[91,4706,2415],{"class":153},[91,4708,257],{"class":250},[91,4710,4711],{"class":93,"line":1766},[91,4712,2153],{"class":250},[91,4714,4715],{"class":93,"line":1771},[91,4716,4717],{"class":308},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[91,4719,4720,4722,4724,4726,4728,4730,4732,4734,4736,4738,4740,4742,4744,4746,4748,4750],{"class":93,"line":1777},[91,4721,3526],{"class":153},[91,4723,1782],{"class":250},[91,4725,254],{"class":153},[91,4727,3533],{"class":250},[91,4729,296],{"class":153},[91,4731,440],{"class":105},[91,4733,3540],{"class":250},[91,4735,1159],{"class":153},[91,4737,669],{"class":105},[91,4739,781],{"class":153},[91,4741,690],{"class":250},[91,4743,781],{"class":153},[91,4745,466],{"class":105},[91,4747,3540],{"class":250},[91,4749,2415],{"class":153},[91,4751,257],{"class":250},[91,4753,4754],{"class":93,"line":1798},[91,4755,2633],{"class":250},[91,4757,4758],{"class":93,"line":1803},[91,4759,4760],{"class":308},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[91,4762,4763,4766,4769,4771,4774,4776,4778],{"class":93,"line":1817},[91,4764,4765],{"class":153},"            if",[91,4767,4768],{"class":250},"(arr[j]",[91,4770,1209],{"class":153},[91,4772,4773],{"class":250},"arr[j",[91,4775,730],{"class":153},[91,4777,466],{"class":105},[91,4779,4780],{"class":250},"])\n",[91,4782,4783],{"class":93,"line":1822},[91,4784,4785],{"class":250},"            {\n",[91,4787,4788,4791,4793,4795],{"class":93,"line":1851},[91,4789,4790],{"class":153},"                int",[91,4792,4378],{"class":250},[91,4794,296],{"class":153},[91,4796,4797],{"class":250},"arr[j];\n",[91,4799,4800,4803,4805,4807,4809,4811],{"class":93,"line":1856},[91,4801,4802],{"class":250},"                arr[j]",[91,4804,296],{"class":153},[91,4806,4773],{"class":250},[91,4808,730],{"class":153},[91,4810,466],{"class":105},[91,4812,4813],{"class":250},"];\n",[91,4815,4816,4819,4821,4823,4825,4827],{"class":93,"line":1873},[91,4817,4818],{"class":250},"                arr[j",[91,4820,730],{"class":153},[91,4822,466],{"class":105},[91,4824,1189],{"class":250},[91,4826,296],{"class":153},[91,4828,4403],{"class":250},[91,4830,4831],{"class":93,"line":1878},[91,4832,4833],{"class":250},"            }\n",[91,4835,4836],{"class":93,"line":1883},[91,4837,2652],{"class":250},[91,4839,4840],{"class":93,"line":1888},[91,4841,2310],{"class":250},[91,4843,4844,4846,4848,4851,4853],{"class":93,"line":1902},[91,4845,1675],{"class":250},[91,4847,1293],{"class":153},[91,4849,4850],{"class":101},"\"排序后：\"",[91,4852,1293],{"class":153},[91,4854,1316],{"class":250},[91,4856,4857,4859,4861,4863,4865,4867,4869,4871,4873,4875,4877,4879],{"class":93,"line":1907},[91,4858,3324],{"class":153},[91,4860,1782],{"class":250},[91,4862,254],{"class":153},[91,4864,3155],{"class":250},[91,4866,296],{"class":153},[91,4868,440],{"class":105},[91,4870,3162],{"class":250},[91,4872,1159],{"class":153},[91,4874,669],{"class":105},[91,4876,3162],{"class":250},[91,4878,2415],{"class":153},[91,4880,257],{"class":250},[91,4882,4883],{"class":93,"line":2700},[91,4884,2153],{"class":250},[91,4886,4887,4889,4891,4893,4895,4897],{"class":93,"line":2714},[91,4888,3574],{"class":250},[91,4890,1293],{"class":153},[91,4892,4477],{"class":250},[91,4894,1293],{"class":153},[91,4896,4482],{"class":101},[91,4898,1415],{"class":250},[91,4900,4901],{"class":93,"line":2722},[91,4902,2310],{"class":250},[91,4904,4905,4907,4909],{"class":93,"line":2727},[91,4906,4213],{"class":153},[91,4908,4216],{"class":105},[91,4910,1415],{"class":250},[91,4912,4913],{"class":93,"line":2733},[91,4914,1689],{"class":250},[217,4916,4918],{"id":4917},"_172二维数组","1.7.2二维数组",[14,4920,4921],{},[17,4922,4923],{},"二维数组的四种定义方式",[386,4925,4926,4935],{},[389,4927,4928],{},[392,4929,4930,4933],{},[395,4931,4932],{},"序号",[395,4934,3904],{},[433,4936,4937,4947,4956,4965,4974],{},[392,4938,4939,4941],{},[438,4940,466],{},[438,4942,4943,4944,305],{},"数据类型 数组名[行数]",[91,4945,4946],{},"列数",[392,4948,4949,4951],{},[438,4950,327],{},[438,4952,4943,4953,4955],{},[91,4954,4946],{},"={ {数据1,数据2}，{数据3，数据4}... }",[392,4957,4958,4960],{},[438,4959,321],{},[438,4961,4943,4962,4964],{},[91,4963,4946],{},"={数据1,数据2,数据3...}",[392,4966,4967,4969],{},[438,4968,542],{},[438,4970,4971,4972,4964],{},"数据类型 数组名[]",[91,4973,4946],{},[392,4975,4976,4979],{},[438,4977,4978],{},"注意：不能只省略列数",[438,4980],{},[14,4982,4983],{"start":38},[17,4984,4985],{},"二维数组数组名",[1256,4987,4988,4991],{},[17,4989,4990],{},"1.查看二维数组所占内存空间",[17,4992,4993],{},"2.获取二维数组首地址",[21,4995,4996],{},"已知二维数组，求二维数组的行数与列数",[82,4998,5000],{"className":238,"code":4999,"language":240,"meta":26,"style":26},"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",[88,5001,5002,5010,5014,5032,5036,5054,5070,5075,5100,5133],{"__ignoreMap":26},[91,5003,5004,5006,5008],{"class":93,"line":94},[91,5005,254],{"class":153},[91,5007,2096],{"class":97},[91,5009,2099],{"class":250},[91,5011,5012],{"class":93,"line":38},[91,5013,1670],{"class":250},[91,5015,5016,5018,5020,5022,5025,5027,5029],{"class":93,"line":1304},[91,5017,2108],{"class":153},[91,5019,4085],{"class":250},[91,5021,327],{"class":105},[91,5023,5024],{"class":250},"][",[91,5026,321],{"class":105},[91,5028,1189],{"class":250},[91,5030,5031],{"class":153},"=\n",[91,5033,5034],{"class":93,"line":1319},[91,5035,2153],{"class":250},[91,5037,5038,5041,5043,5045,5047,5049,5051],{"class":93,"line":1325},[91,5039,5040],{"class":250},"        {",[91,5042,466],{"class":105},[91,5044,627],{"class":250},[91,5046,327],{"class":105},[91,5048,627],{"class":250},[91,5050,321],{"class":105},[91,5052,5053],{"class":250},"},\n",[91,5055,5056,5058,5060,5062,5064,5066,5068],{"class":93,"line":1339},[91,5057,5040],{"class":250},[91,5059,542],{"class":105},[91,5061,627],{"class":250},[91,5063,568],{"class":105},[91,5065,627],{"class":250},[91,5067,593],{"class":105},[91,5069,1689],{"class":250},[91,5071,5072],{"class":93,"line":1345},[91,5073,5074],{"class":250},"    };\n",[91,5076,5077,5079,5081,5084,5086,5088,5090,5092,5094,5096,5098],{"class":93,"line":1436},[91,5078,1675],{"class":250},[91,5080,1293],{"class":153},[91,5082,5083],{"class":101},"\"二维数组的行数\"",[91,5085,1497],{"class":153},[91,5087,4329],{"class":250},[91,5089,4332],{"class":153},[91,5091,3974],{"class":250},[91,5093,440],{"class":105},[91,5095,4339],{"class":250},[91,5097,1293],{"class":153},[91,5099,1316],{"class":250},[91,5101,5102,5104,5106,5109,5111,5113,5115,5117,5119,5121,5123,5125,5127,5129,5131],{"class":93,"line":1442},[91,5103,1675],{"class":250},[91,5105,1293],{"class":153},[91,5107,5108],{"class":101},"\"二维数组的列数\"",[91,5110,1497],{"class":153},[91,5112,3974],{"class":250},[91,5114,440],{"class":105},[91,5116,4339],{"class":250},[91,5118,4332],{"class":153},[91,5120,3974],{"class":250},[91,5122,440],{"class":105},[91,5124,5024],{"class":250},[91,5126,440],{"class":105},[91,5128,4339],{"class":250},[91,5130,1293],{"class":153},[91,5132,1316],{"class":250},[91,5134,5135],{"class":93,"line":1454},[91,5136,1689],{"class":250},[21,5138,5139],{},"查看二维数组首地址",[82,5141,5143],{"className":238,"code":5142,"language":240,"meta":26,"style":26},"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",[88,5144,5145,5162,5188,5213],{"__ignoreMap":26},[91,5146,5147,5149,5151,5154,5156,5158,5160],{"class":93,"line":94},[91,5148,1494],{"class":250},[91,5150,1293],{"class":153},[91,5152,5153],{"class":101},"\"二维数组首地址：\"",[91,5155,1293],{"class":153},[91,5157,4003],{"class":250},[91,5159,1293],{"class":153},[91,5161,1316],{"class":250},[91,5163,5164,5166,5168,5171,5173,5175,5177,5180,5182,5184,5186],{"class":93,"line":38},[91,5165,1494],{"class":250},[91,5167,1293],{"class":153},[91,5169,5170],{"class":101},"\"二维数组第一行的首地址：\"",[91,5172,1293],{"class":153},[91,5174,251],{"class":250},[91,5176,254],{"class":153},[91,5178,5179],{"class":250},")arr[",[91,5181,440],{"class":105},[91,5183,1189],{"class":250},[91,5185,1293],{"class":153},[91,5187,1316],{"class":250},[91,5189,5190,5192,5194,5197,5199,5201,5203,5205,5207,5209,5211],{"class":93,"line":1304},[91,5191,1494],{"class":250},[91,5193,1293],{"class":153},[91,5195,5196],{"class":101},"\"二维数组第二行的首地址：\"",[91,5198,1293],{"class":153},[91,5200,251],{"class":250},[91,5202,254],{"class":153},[91,5204,5179],{"class":250},[91,5206,466],{"class":105},[91,5208,1189],{"class":250},[91,5210,1293],{"class":153},[91,5212,1316],{"class":250},[91,5214,5215,5217,5219,5222,5224,5226,5228,5230,5232,5234,5236,5238,5240,5242,5244,5246],{"class":93,"line":1319},[91,5216,1494],{"class":250},[91,5218,1293],{"class":153},[91,5220,5221],{"class":101},"\"二维数组第一个元素的首地址:\"",[91,5223,1293],{"class":153},[91,5225,251],{"class":250},[91,5227,254],{"class":153},[91,5229,678],{"class":250},[91,5231,602],{"class":153},[91,5233,4029],{"class":250},[91,5235,440],{"class":105},[91,5237,5024],{"class":250},[91,5239,440],{"class":105},[91,5241,1189],{"class":250},[91,5243,1293],{"class":153},[91,5245,1363],{"class":250},[91,5247,5248],{"class":308},"\u002F\u002F对于数，要加取址符\n",[168,5250,5251],{},"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":26,"searchDepth":38,"depth":38,"links":5253},[5254,5255,5256,5264,5265,5271,5276],{"id":192,"depth":38,"text":193},{"id":199,"depth":38,"text":200},{"id":214,"depth":38,"text":215,"children":5257},[5258,5259,5260,5261,5262,5263],{"id":219,"depth":1304,"text":220},{"id":267,"depth":1304,"text":268},{"id":335,"depth":1304,"text":336},{"id":1274,"depth":1304,"text":1275},{"id":1369,"depth":1304,"text":1370},{"id":1468,"depth":1304,"text":1469},{"id":1510,"depth":38,"text":1511},{"id":1578,"depth":38,"text":1579,"children":5266},[5267,5268,5269,5270],{"id":1582,"depth":1304,"text":1583},{"id":1603,"depth":1304,"text":1604},{"id":1612,"depth":1304,"text":1613},{"id":1621,"depth":1304,"text":1622},{"id":1630,"depth":38,"text":1631,"children":5272},[5273,5274,5275],{"id":1634,"depth":1304,"text":1635},{"id":2328,"depth":1304,"text":2329},{"id":3744,"depth":1304,"text":3745},{"id":3885,"depth":38,"text":3886,"children":5277},[5278,5279],{"id":3889,"depth":1304,"text":3890},{"id":4917,"depth":1304,"text":4918},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":183,"description":26},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5286,"title":5287,"body":5288,"description":26,"extension":173,"meta":6388,"navigation":175,"path":6389,"seo":6390,"stem":6391,"__hash__":6392},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5289,"toc":6380},[5290,5293,5297,5305,5313,5316,5382,5386,5389,5465,5469,5472,5475,5478,5691,5695,5700,5764,5769,5836,5841,5932,5935,6040,6044,6047,6053,6197,6201,6204,6218,6221,6266,6269,6377],[10,5291,5287],{"id":5292},"_2函数",[190,5294,5296],{"id":5295},"_21函数概述","2.1函数概述",[14,5298,5299,5302],{},[17,5300,5301],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[17,5303,5304],{},"语法：",[82,5306,5311],{"className":5307,"code":5309,"language":5310,"meta":26},[5308],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[88,5312,5309],{"__ignoreMap":26},[21,5314,5315],{},"小案例",[82,5317,5319],{"className":238,"code":5318,"language":240,"meta":26,"style":26},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[88,5320,5321,5326,5350,5354,5371,5378],{"__ignoreMap":26},[91,5322,5323],{"class":93,"line":94},[91,5324,5325],{"class":308},"\u002F\u002Fnum1,num2形参\n",[91,5327,5328,5330,5333,5335,5337,5341,5343,5345,5348],{"class":93,"line":38},[91,5329,254],{"class":153},[91,5331,5332],{"class":97}," add",[91,5334,251],{"class":250},[91,5336,254],{"class":153},[91,5338,5340],{"class":5339},"s4XuR"," num1",[91,5342,627],{"class":250},[91,5344,254],{"class":153},[91,5346,5347],{"class":5339}," num2",[91,5349,257],{"class":250},[91,5351,5352],{"class":93,"line":1304},[91,5353,1670],{"class":250},[91,5355,5356,5358,5361,5363,5366,5368],{"class":93,"line":1319},[91,5357,2108],{"class":153},[91,5359,5360],{"class":250}," sum",[91,5362,296],{"class":153},[91,5364,5365],{"class":250},"num1",[91,5367,730],{"class":153},[91,5369,5370],{"class":250},"num2;\n",[91,5372,5373,5375],{"class":93,"line":1325},[91,5374,4213],{"class":153},[91,5376,5377],{"class":250}," sum;\n",[91,5379,5380],{"class":93,"line":1339},[91,5381,1689],{"class":250},[190,5383,5385],{"id":5384},"_22函数调用","2.2函数调用",[21,5387,5388],{},"调用刚刚写的求和函数",[82,5390,5392],{"className":238,"code":5391,"language":240,"meta":26,"style":26},"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",[88,5393,5394,5402,5406,5411,5423,5435,5444,5449,5461],{"__ignoreMap":26},[91,5395,5396,5398,5400],{"class":93,"line":94},[91,5397,254],{"class":153},[91,5399,2096],{"class":97},[91,5401,2099],{"class":250},[91,5403,5404],{"class":93,"line":38},[91,5405,1670],{"class":250},[91,5407,5408],{"class":93,"line":1304},[91,5409,5410],{"class":308},"    \u002F\u002Fa,b实参\n",[91,5412,5413,5415,5417,5419,5421],{"class":93,"line":1319},[91,5414,2108],{"class":153},[91,5416,1523],{"class":250},[91,5418,296],{"class":153},[91,5420,440],{"class":105},[91,5422,1415],{"class":250},[91,5424,5425,5427,5429,5431,5433],{"class":93,"line":1325},[91,5426,2108],{"class":153},[91,5428,2956],{"class":250},[91,5430,296],{"class":153},[91,5432,440],{"class":105},[91,5434,1415],{"class":250},[91,5436,5437,5439,5441],{"class":93,"line":1339},[91,5438,2135],{"class":250},[91,5440,1554],{"class":153},[91,5442,5443],{"class":250},"a,b;\n",[91,5445,5446],{"class":93,"line":1345},[91,5447,5448],{"class":308},"    \u002F\u002F调用函数时，实参值传给了形参\n",[91,5450,5451,5453,5455,5458],{"class":93,"line":1436},[91,5452,1675],{"class":250},[91,5454,1293],{"class":153},[91,5456,5457],{"class":97},"add",[91,5459,5460],{"class":250},"(a,b);\n",[91,5462,5463],{"class":93,"line":1442},[91,5464,1689],{"class":250},[190,5466,5468],{"id":5467},"_23值传递","2.3值传递",[21,5470,5471],{},"值传递就是函数调用时实参将数值传给形参",[21,5473,5474],{},"值传递时，如果形参发生任何改变，不会影响实参",[21,5476,5477],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[82,5479,5481],{"className":238,"code":5480,"language":240,"meta":26,"style":26},"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",[88,5482,5483,5505,5509,5522,5539,5557,5568,5577,5586,5599,5615,5631,5640,5644,5652,5656,5668,5680,5687],{"__ignoreMap":26},[91,5484,5485,5488,5491,5493,5495,5497,5499,5501,5503],{"class":93,"line":94},[91,5486,5487],{"class":153},"void",[91,5489,5490],{"class":97}," swap",[91,5492,251],{"class":250},[91,5494,254],{"class":153},[91,5496,5340],{"class":5339},[91,5498,627],{"class":250},[91,5500,254],{"class":153},[91,5502,5347],{"class":5339},[91,5504,257],{"class":250},[91,5506,5507],{"class":93,"line":38},[91,5508,1670],{"class":250},[91,5510,5511,5513,5515,5518,5520],{"class":93,"line":1304},[91,5512,1675],{"class":250},[91,5514,1293],{"class":153},[91,5516,5517],{"class":101},"\"交换前：\"",[91,5519,1293],{"class":153},[91,5521,1316],{"class":250},[91,5523,5524,5526,5528,5531,5533,5535,5537],{"class":93,"line":1319},[91,5525,1675],{"class":250},[91,5527,1293],{"class":153},[91,5529,5530],{"class":101},"\"num1=\"",[91,5532,1293],{"class":153},[91,5534,5365],{"class":250},[91,5536,1293],{"class":153},[91,5538,1316],{"class":250},[91,5540,5541,5543,5545,5548,5550,5553,5555],{"class":93,"line":1325},[91,5542,1675],{"class":250},[91,5544,1293],{"class":153},[91,5546,5547],{"class":101},"\"num2=\"",[91,5549,1293],{"class":153},[91,5551,5552],{"class":250},"num2",[91,5554,1293],{"class":153},[91,5556,1316],{"class":250},[91,5558,5559,5561,5563,5565],{"class":93,"line":1339},[91,5560,2108],{"class":153},[91,5562,4378],{"class":250},[91,5564,296],{"class":153},[91,5566,5567],{"class":250},"num1;\n",[91,5569,5570,5573,5575],{"class":93,"line":1345},[91,5571,5572],{"class":250},"    num1",[91,5574,296],{"class":153},[91,5576,5370],{"class":250},[91,5578,5579,5582,5584],{"class":93,"line":1436},[91,5580,5581],{"class":250},"    num2",[91,5583,296],{"class":153},[91,5585,4403],{"class":250},[91,5587,5588,5590,5592,5595,5597],{"class":93,"line":1442},[91,5589,1675],{"class":250},[91,5591,1293],{"class":153},[91,5593,5594],{"class":101},"\"交换后：\"",[91,5596,1293],{"class":153},[91,5598,1316],{"class":250},[91,5600,5601,5603,5605,5607,5609,5611,5613],{"class":93,"line":1454},[91,5602,1675],{"class":250},[91,5604,1293],{"class":153},[91,5606,5530],{"class":101},[91,5608,1293],{"class":153},[91,5610,5365],{"class":250},[91,5612,1293],{"class":153},[91,5614,1316],{"class":250},[91,5616,5617,5619,5621,5623,5625,5627,5629],{"class":93,"line":1736},[91,5618,1675],{"class":250},[91,5620,1293],{"class":153},[91,5622,5547],{"class":101},[91,5624,1293],{"class":153},[91,5626,5552],{"class":250},[91,5628,1293],{"class":153},[91,5630,1316],{"class":250},[91,5632,5633,5635,5637],{"class":93,"line":1741},[91,5634,4213],{"class":153},[91,5636,305],{"class":250},[91,5638,5639],{"class":308},"\u002F\u002F或者不写\n",[91,5641,5642],{"class":93,"line":1747},[91,5643,1689],{"class":250},[91,5645,5646,5648,5650],{"class":93,"line":1752},[91,5647,254],{"class":153},[91,5649,2096],{"class":97},[91,5651,2099],{"class":250},[91,5653,5654],{"class":93,"line":1766},[91,5655,1670],{"class":250},[91,5657,5658,5660,5662,5664,5666],{"class":93,"line":1771},[91,5659,2108],{"class":153},[91,5661,1523],{"class":250},[91,5663,296],{"class":153},[91,5665,695],{"class":105},[91,5667,1415],{"class":250},[91,5669,5670,5672,5674,5676,5678],{"class":93,"line":1777},[91,5671,2108],{"class":153},[91,5673,2956],{"class":250},[91,5675,296],{"class":153},[91,5677,949],{"class":105},[91,5679,1415],{"class":250},[91,5681,5682,5685],{"class":93,"line":1798},[91,5683,5684],{"class":97},"    swap",[91,5686,5460],{"class":250},[91,5688,5689],{"class":93,"line":1803},[91,5690,1689],{"class":250},[190,5692,5694],{"id":5693},"_24函数的常见形式","2.4函数的常见形式",[14,5696,5697],{},[17,5698,5699],{},"无参无返",[82,5701,5703],{"className":238,"code":5702,"language":240,"meta":26,"style":26},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[88,5704,5705,5714,5718,5731,5735,5743,5747,5752,5760],{"__ignoreMap":26},[91,5706,5707,5709,5712],{"class":93,"line":94},[91,5708,5487],{"class":153},[91,5710,5711],{"class":97}," test01",[91,5713,2099],{"class":250},[91,5715,5716],{"class":93,"line":38},[91,5717,1670],{"class":250},[91,5719,5720,5722,5724,5727,5729],{"class":93,"line":1304},[91,5721,1675],{"class":250},[91,5723,1293],{"class":153},[91,5725,5726],{"class":101},"\"你好\"",[91,5728,1293],{"class":153},[91,5730,1316],{"class":250},[91,5732,5733],{"class":93,"line":1319},[91,5734,1689],{"class":250},[91,5736,5737,5739,5741],{"class":93,"line":1325},[91,5738,254],{"class":153},[91,5740,2096],{"class":97},[91,5742,2099],{"class":250},[91,5744,5745],{"class":93,"line":1339},[91,5746,1670],{"class":250},[91,5748,5749],{"class":93,"line":1345},[91,5750,5751],{"class":308},"    \u002F\u002F函数调用\n",[91,5753,5754,5757],{"class":93,"line":1436},[91,5755,5756],{"class":97},"    test01",[91,5758,5759],{"class":250},"();\n",[91,5761,5762],{"class":93,"line":1442},[91,5763,1689],{"class":250},[14,5765,5766],{"start":38},[17,5767,5768],{},"有参无返",[82,5770,5772],{"className":238,"code":5771,"language":240,"meta":26,"style":26},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[88,5773,5774,5789,5793,5805,5809,5817,5821,5832],{"__ignoreMap":26},[91,5775,5776,5778,5781,5783,5785,5787],{"class":93,"line":94},[91,5777,5487],{"class":153},[91,5779,5780],{"class":97}," test02",[91,5782,251],{"class":250},[91,5784,254],{"class":153},[91,5786,1523],{"class":5339},[91,5788,257],{"class":250},[91,5790,5791],{"class":93,"line":38},[91,5792,1670],{"class":250},[91,5794,5795,5797,5799,5801,5803],{"class":93,"line":1304},[91,5796,1675],{"class":250},[91,5798,1293],{"class":153},[91,5800,5726],{"class":101},[91,5802,1293],{"class":153},[91,5804,1316],{"class":250},[91,5806,5807],{"class":93,"line":1319},[91,5808,1689],{"class":250},[91,5810,5811,5813,5815],{"class":93,"line":1325},[91,5812,254],{"class":153},[91,5814,2096],{"class":97},[91,5816,2099],{"class":250},[91,5818,5819],{"class":93,"line":1339},[91,5820,1670],{"class":250},[91,5822,5823,5826,5828,5830],{"class":93,"line":1345},[91,5824,5825],{"class":97},"    test02",[91,5827,251],{"class":250},[91,5829,560],{"class":105},[91,5831,2842],{"class":250},[91,5833,5834],{"class":93,"line":1436},[91,5835,1689],{"class":250},[14,5837,5838],{"start":1304},[17,5839,5840],{},"无参有返",[82,5842,5844],{"className":238,"code":5843,"language":240,"meta":26,"style":26},"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",[88,5845,5846,5855,5859,5871,5880,5884,5892,5896,5909,5928],{"__ignoreMap":26},[91,5847,5848,5850,5853],{"class":93,"line":94},[91,5849,254],{"class":153},[91,5851,5852],{"class":97}," test03",[91,5854,2099],{"class":250},[91,5856,5857],{"class":93,"line":38},[91,5858,1670],{"class":250},[91,5860,5861,5863,5865,5867,5869],{"class":93,"line":1304},[91,5862,1675],{"class":250},[91,5864,1293],{"class":153},[91,5866,5726],{"class":101},[91,5868,1293],{"class":153},[91,5870,1316],{"class":250},[91,5872,5873,5875,5878],{"class":93,"line":1319},[91,5874,4213],{"class":153},[91,5876,5877],{"class":105}," 100",[91,5879,1415],{"class":250},[91,5881,5882],{"class":93,"line":1325},[91,5883,1689],{"class":250},[91,5885,5886,5888,5890],{"class":93,"line":1339},[91,5887,254],{"class":153},[91,5889,2096],{"class":97},[91,5891,2099],{"class":250},[91,5893,5894],{"class":93,"line":1345},[91,5895,1670],{"class":250},[91,5897,5898,5900,5902,5904,5907],{"class":93,"line":1436},[91,5899,2108],{"class":153},[91,5901,5340],{"class":250},[91,5903,296],{"class":153},[91,5905,5906],{"class":97},"test03",[91,5908,5759],{"class":250},[91,5910,5911,5913,5915,5917,5919,5921,5923,5925],{"class":93,"line":1442},[91,5912,1675],{"class":250},[91,5914,1293],{"class":153},[91,5916,5530],{"class":101},[91,5918,1293],{"class":153},[91,5920,5365],{"class":250},[91,5922,1293],{"class":153},[91,5924,1363],{"class":250},[91,5926,5927],{"class":308}," \u002F\u002F100\n",[91,5929,5930],{"class":93,"line":1454},[91,5931,1689],{"class":250},[21,5933,5934],{},"4.有参有返",[82,5936,5938],{"className":238,"code":5937,"language":240,"meta":26,"style":26},"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",[88,5939,5940,5955,5959,5972,5978,5982,5991,5995,6007,6021,6036],{"__ignoreMap":26},[91,5941,5942,5944,5947,5949,5951,5953],{"class":93,"line":94},[91,5943,254],{"class":153},[91,5945,5946],{"class":97}," test04",[91,5948,251],{"class":250},[91,5950,254],{"class":153},[91,5952,1523],{"class":5339},[91,5954,257],{"class":250},[91,5956,5957],{"class":93,"line":38},[91,5958,1670],{"class":250},[91,5960,5961,5963,5965,5968,5970],{"class":93,"line":1304},[91,5962,1675],{"class":250},[91,5964,1293],{"class":153},[91,5966,5967],{"class":101},"\"hello\"",[91,5969,1293],{"class":153},[91,5971,1316],{"class":250},[91,5973,5974,5976],{"class":93,"line":1319},[91,5975,4213],{"class":153},[91,5977,1557],{"class":250},[91,5979,5980],{"class":93,"line":1325},[91,5981,1689],{"class":250},[91,5983,5984,5986,5989],{"class":93,"line":1339},[91,5985,254],{"class":153},[91,5987,5988],{"class":97}," mian",[91,5990,2099],{"class":250},[91,5992,5993],{"class":93,"line":1345},[91,5994,1670],{"class":250},[91,5996,5997,5999,6001,6003,6005],{"class":93,"line":1436},[91,5998,2108],{"class":153},[91,6000,2956],{"class":250},[91,6002,296],{"class":153},[91,6004,466],{"class":105},[91,6006,1415],{"class":250},[91,6008,6009,6011,6013,6015,6018],{"class":93,"line":1442},[91,6010,2108],{"class":153},[91,6012,2972],{"class":250},[91,6014,296],{"class":153},[91,6016,6017],{"class":97},"test04",[91,6019,6020],{"class":250},"(b);\n",[91,6022,6023,6025,6027,6029,6031,6033],{"class":93,"line":1454},[91,6024,1675],{"class":250},[91,6026,1293],{"class":153},[91,6028,537],{"class":250},[91,6030,1293],{"class":153},[91,6032,1363],{"class":250},[91,6034,6035],{"class":308}," \u002F\u002F1\n",[91,6037,6038],{"class":93,"line":1736},[91,6039,1689],{"class":250},[190,6041,6043],{"id":6042},"_25函数的声明","2.5函数的声明",[21,6045,6046],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[21,6048,6049,6050],{},"函数的",[398,6051,6052],{},"声明可以多次，但是函数的定义只能有一次",[82,6054,6056],{"className":238,"code":6055,"language":240,"meta":26,"style":26},"\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",[88,6057,6058,6063,6068,6093,6102,6106,6118,6130,6146,6150,6170,6174,6193],{"__ignoreMap":26},[91,6059,6060],{"class":93,"line":94},[91,6061,6062],{"class":308},"\u002F\u002F函数声明\n",[91,6064,6065],{"class":93,"line":38},[91,6066,6067],{"class":308},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[91,6069,6070,6072,6075,6077,6079,6081,6083,6085,6087,6090],{"class":93,"line":1304},[91,6071,254],{"class":153},[91,6073,6074],{"class":97}," max",[91,6076,251],{"class":250},[91,6078,254],{"class":153},[91,6080,1523],{"class":5339},[91,6082,627],{"class":250},[91,6084,254],{"class":153},[91,6086,2956],{"class":5339},[91,6088,6089],{"class":250},");",[91,6091,6092],{"class":308},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[91,6094,6095,6097,6099],{"class":93,"line":1319},[91,6096,254],{"class":153},[91,6098,2096],{"class":97},[91,6100,6101],{"class":250},"() \n",[91,6103,6104],{"class":93,"line":1325},[91,6105,1670],{"class":250},[91,6107,6108,6110,6112,6114,6116],{"class":93,"line":1339},[91,6109,2108],{"class":153},[91,6111,1523],{"class":250},[91,6113,296],{"class":153},[91,6115,695],{"class":105},[91,6117,1415],{"class":250},[91,6119,6120,6122,6124,6126,6128],{"class":93,"line":1345},[91,6121,2108],{"class":153},[91,6123,2956],{"class":250},[91,6125,296],{"class":153},[91,6127,949],{"class":105},[91,6129,1415],{"class":250},[91,6131,6132,6134,6136,6139,6142,6144],{"class":93,"line":1436},[91,6133,1675],{"class":250},[91,6135,1293],{"class":153},[91,6137,6138],{"class":97},"max",[91,6140,6141],{"class":250},"(a,b)",[91,6143,1293],{"class":153},[91,6145,1316],{"class":250},[91,6147,6148],{"class":93,"line":1442},[91,6149,1689],{"class":250},[91,6151,6152,6154,6156,6158,6160,6162,6164,6166,6168],{"class":93,"line":1454},[91,6153,254],{"class":153},[91,6155,6074],{"class":97},[91,6157,251],{"class":250},[91,6159,254],{"class":153},[91,6161,1523],{"class":5339},[91,6163,627],{"class":250},[91,6165,254],{"class":153},[91,6167,2956],{"class":5339},[91,6169,257],{"class":250},[91,6171,6172],{"class":93,"line":1736},[91,6173,1670],{"class":250},[91,6175,6176,6178,6180,6182,6184,6186,6188,6190],{"class":93,"line":1741},[91,6177,4213],{"class":153},[91,6179,1523],{"class":250},[91,6181,1209],{"class":153},[91,6183,512],{"class":250},[91,6185,1235],{"class":153},[91,6187,487],{"class":250},[91,6189,1108],{"class":153},[91,6191,6192],{"class":250},"b;\n",[91,6194,6195],{"class":93,"line":1747},[91,6196,1689],{"class":250},[190,6198,6200],{"id":6199},"_26函数的分文件编写","2.6函数的分文件编写",[21,6202,6203],{},"4个步骤：",[1256,6205,6206,6209,6212,6215],{},[17,6207,6208],{},"1.创建后缀名为.h的头文件",[17,6210,6211],{},"2.创建后缀名为.cpp的源文件",[17,6213,6214],{},"3.在头文件中写函数的定义",[17,6216,6217],{},"4.在源文件中写函数的定义\n示例：",[21,6219,6220],{},"头文件：swap.h",[82,6222,6224],{"className":238,"code":6223,"language":240,"meta":26,"style":26},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[88,6225,6226,6232,6242,6246],{"__ignoreMap":26},[91,6227,6228,6230],{"class":93,"line":94},[91,6229,2073],{"class":153},[91,6231,2076],{"class":101},[91,6233,6234,6236,6238,6240],{"class":93,"line":38},[91,6235,2081],{"class":153},[91,6237,2084],{"class":153},[91,6239,2087],{"class":97},[91,6241,1415],{"class":250},[91,6243,6244],{"class":93,"line":1304},[91,6245,6062],{"class":308},[91,6247,6248,6250,6252,6254,6256,6258,6260,6262,6264],{"class":93,"line":1319},[91,6249,5487],{"class":153},[91,6251,5490],{"class":97},[91,6253,251],{"class":250},[91,6255,254],{"class":153},[91,6257,1523],{"class":5339},[91,6259,627],{"class":250},[91,6261,254],{"class":153},[91,6263,2956],{"class":5339},[91,6265,2842],{"class":250},[21,6267,6268],{},"源文件：swap.cpp",[82,6270,6272],{"className":238,"code":6271,"language":240,"meta":26,"style":26},"#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",[88,6273,6274,6281,6286,6306,6310,6321,6330,6339,6356,6373],{"__ignoreMap":26},[91,6275,6276,6278],{"class":93,"line":94},[91,6277,2073],{"class":153},[91,6279,6280],{"class":101}," \"swap.h\"\n",[91,6282,6283],{"class":93,"line":38},[91,6284,6285],{"class":308},"\u002F\u002F函数的定义\n",[91,6287,6288,6290,6292,6294,6296,6298,6300,6302,6304],{"class":93,"line":1304},[91,6289,5487],{"class":153},[91,6291,5490],{"class":97},[91,6293,251],{"class":250},[91,6295,254],{"class":153},[91,6297,1523],{"class":5339},[91,6299,627],{"class":250},[91,6301,254],{"class":153},[91,6303,2956],{"class":5339},[91,6305,257],{"class":250},[91,6307,6308],{"class":93,"line":1319},[91,6309,1670],{"class":250},[91,6311,6312,6314,6316,6318],{"class":93,"line":1325},[91,6313,2108],{"class":153},[91,6315,4378],{"class":250},[91,6317,296],{"class":153},[91,6319,6320],{"class":250},"a;\n",[91,6322,6323,6326,6328],{"class":93,"line":1339},[91,6324,6325],{"class":250},"    a",[91,6327,296],{"class":153},[91,6329,6192],{"class":250},[91,6331,6332,6335,6337],{"class":93,"line":1345},[91,6333,6334],{"class":250},"    b",[91,6336,296],{"class":153},[91,6338,4403],{"class":250},[91,6340,6341,6343,6345,6348,6350,6352,6354],{"class":93,"line":1436},[91,6342,1675],{"class":250},[91,6344,1293],{"class":153},[91,6346,6347],{"class":101},"\"a=\"",[91,6349,1293],{"class":153},[91,6351,487],{"class":250},[91,6353,1293],{"class":153},[91,6355,1316],{"class":250},[91,6357,6358,6360,6362,6365,6367,6369,6371],{"class":93,"line":1442},[91,6359,1675],{"class":250},[91,6361,1293],{"class":153},[91,6363,6364],{"class":101},"\"b=\"",[91,6366,1293],{"class":153},[91,6368,512],{"class":250},[91,6370,1293],{"class":153},[91,6372,1316],{"class":250},[91,6374,6375],{"class":93,"line":1454},[91,6376,1689],{"class":250},[168,6378,6379],{},"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":26,"searchDepth":38,"depth":38,"links":6381},[6382,6383,6384,6385,6386,6387],{"id":5295,"depth":38,"text":5296},{"id":5384,"depth":38,"text":5385},{"id":5467,"depth":38,"text":5468},{"id":5693,"depth":38,"text":5694},{"id":6042,"depth":38,"text":6043},{"id":6199,"depth":38,"text":6200},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5287,"description":26},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6394,"title":6395,"body":6396,"description":6403,"extension":173,"meta":7808,"navigation":175,"path":7809,"seo":7810,"stem":7811,"__hash__":7812},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6397,"toc":7798},[6398,6401,6404,6408,6570,6574,6577,6580,6583,6586,6726,6730,6733,6736,6739,6804,6808,6813,6880,6883,6887,6890,6901,6906,6926,6929,6934,6953,6956,6960,6979,6982,6986,7221,7225,7228,7231,7234,7396,7399,7403,7406,7412,7795],[10,6399,6395],{"id":6400},"_3指针",[21,6402,6403],{},"通过指针保存一个地址，指针就是个地址",[190,6405,6407],{"id":6406},"_31定义指针","3.1定义指针",[82,6409,6411],{"className":238,"code":6410,"language":240,"meta":26,"style":26},"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",[88,6412,6413,6421,6425,6430,6442,6447,6455,6465,6483,6503,6507,6512,6517,6522,6536,6552,6566],{"__ignoreMap":26},[91,6414,6415,6417,6419],{"class":93,"line":94},[91,6416,254],{"class":153},[91,6418,2096],{"class":97},[91,6420,2099],{"class":250},[91,6422,6423],{"class":93,"line":38},[91,6424,1670],{"class":250},[91,6426,6427],{"class":93,"line":1304},[91,6428,6429],{"class":308},"    \u002F\u002F1.定义指针\n",[91,6431,6432,6434,6436,6438,6440],{"class":93,"line":1319},[91,6433,2108],{"class":153},[91,6435,1523],{"class":250},[91,6437,296],{"class":153},[91,6439,695],{"class":105},[91,6441,1415],{"class":250},[91,6443,6444],{"class":93,"line":1325},[91,6445,6446],{"class":308},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[91,6448,6449,6452],{"class":93,"line":1339},[91,6450,6451],{"class":153},"    int*",[91,6453,6454],{"class":250},"p;\n",[91,6456,6457,6460,6463],{"class":93,"line":1345},[91,6458,6459],{"class":250},"    p",[91,6461,6462],{"class":153},"=&",[91,6464,6320],{"class":250},[91,6466,6467,6469,6471,6474,6477,6479,6481],{"class":93,"line":1436},[91,6468,1675],{"class":250},[91,6470,1293],{"class":153},[91,6472,6473],{"class":101},"\"a的地址为：\"",[91,6475,6476],{"class":153},"\u003C\u003C&",[91,6478,487],{"class":250},[91,6480,1293],{"class":153},[91,6482,1316],{"class":250},[91,6484,6485,6487,6489,6492,6494,6496,6498,6500],{"class":93,"line":1442},[91,6486,1675],{"class":250},[91,6488,1293],{"class":153},[91,6490,6491],{"class":101},"\"指针p为：\"",[91,6493,1293],{"class":153},[91,6495,21],{"class":250},[91,6497,1293],{"class":153},[91,6499,1363],{"class":250},[91,6501,6502],{"class":308},"\u002F\u002F指针p表示的就是a的地址\n",[91,6504,6505],{"class":93,"line":1454},[91,6506,2523],{"emptyLinePlaceholder":175},[91,6508,6509],{"class":93,"line":1736},[91,6510,6511],{"class":308},"    \u002F\u002F2.使用指针\n",[91,6513,6514],{"class":93,"line":1741},[91,6515,6516],{"class":308},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[91,6518,6519],{"class":93,"line":1747},[91,6520,6521],{"class":308},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[91,6523,6524,6527,6529,6531,6534],{"class":93,"line":1752},[91,6525,6526],{"class":153},"    *",[91,6528,21],{"class":250},[91,6530,296],{"class":153},[91,6532,6533],{"class":105},"1000",[91,6535,1415],{"class":250},[91,6537,6538,6540,6543,6545,6547,6549],{"class":93,"line":1766},[91,6539,1675],{"class":250},[91,6541,6542],{"class":153},"\u003C\u003C*",[91,6544,21],{"class":250},[91,6546,1293],{"class":153},[91,6548,1363],{"class":250},[91,6550,6551],{"class":308},"\u002F\u002F1000\n",[91,6553,6554,6556,6558,6560,6562,6564],{"class":93,"line":1771},[91,6555,1675],{"class":250},[91,6557,1293],{"class":153},[91,6559,487],{"class":250},[91,6561,1293],{"class":153},[91,6563,1363],{"class":250},[91,6565,6551],{"class":308},[91,6567,6568],{"class":93,"line":1777},[91,6569,1689],{"class":250},[190,6571,6573],{"id":6572},"_32指针所占的内存空间","3.2指针所占的内存空间",[21,6575,6576],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[21,6578,6579],{},"在32位操作系统下：占用4个字节空间",[21,6581,6582],{},"在64位操作系统下：占用8个字节空间",[21,6584,6585],{},"上方是不管啥数据类型的",[82,6587,6589],{"className":238,"code":6588,"language":240,"meta":26,"style":26},"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",[88,6590,6591,6599,6603,6608,6620,6625,6630,6635,6648,6670,6696,6722],{"__ignoreMap":26},[91,6592,6593,6595,6597],{"class":93,"line":94},[91,6594,254],{"class":153},[91,6596,2096],{"class":97},[91,6598,2099],{"class":250},[91,6600,6601],{"class":93,"line":38},[91,6602,1670],{"class":250},[91,6604,6605],{"class":93,"line":1304},[91,6606,6607],{"class":308},"    \u002F\u002F指针所占内存空间\n",[91,6609,6610,6612,6614,6616,6618],{"class":93,"line":1319},[91,6611,2108],{"class":153},[91,6613,1523],{"class":250},[91,6615,296],{"class":153},[91,6617,695],{"class":105},[91,6619,1415],{"class":250},[91,6621,6622],{"class":93,"line":1325},[91,6623,6624],{"class":308},"    \u002F\u002Fint *p;\n",[91,6626,6627],{"class":93,"line":1339},[91,6628,6629],{"class":308},"    \u002F\u002Fp=&a;\n",[91,6631,6632],{"class":93,"line":1345},[91,6633,6634],{"class":308},"    \u002F\u002F上述可以写为以下：\n",[91,6636,6637,6639,6642,6644,6646],{"class":93,"line":1436},[91,6638,2108],{"class":153},[91,6640,6641],{"class":153}," *",[91,6643,21],{"class":250},[91,6645,6462],{"class":153},[91,6647,6320],{"class":250},[91,6649,6650,6653,6655,6658,6660,6663,6665,6667],{"class":93,"line":1442},[91,6651,6652],{"class":250},"    cout ",[91,6654,1293],{"class":153},[91,6656,6657],{"class":101},"\"sizeof(int *)\"",[91,6659,1497],{"class":153},[91,6661,6662],{"class":250},"(p)",[91,6664,1293],{"class":153},[91,6666,1363],{"class":250},[91,6668,6669],{"class":308},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[91,6671,6672,6674,6676,6678,6680,6682,6684,6686,6688,6690,6693],{"class":93,"line":1454},[91,6673,6652],{"class":250},[91,6675,1293],{"class":153},[91,6677,6657],{"class":101},[91,6679,1497],{"class":153},[91,6681,251],{"class":250},[91,6683,254],{"class":153},[91,6685,6641],{"class":153},[91,6687,678],{"class":250},[91,6689,1293],{"class":153},[91,6691,6692],{"class":250},"endl",[91,6694,6695],{"class":308},"  \u002F\u002F4字节(32位的话)\n",[91,6697,6698,6700,6702,6705,6707,6709,6711,6713,6715,6717,6719],{"class":93,"line":1736},[91,6699,6652],{"class":250},[91,6701,1293],{"class":153},[91,6703,6704],{"class":101},"\"sizeof(char *)\"",[91,6706,1497],{"class":153},[91,6708,251],{"class":250},[91,6710,346],{"class":153},[91,6712,6641],{"class":153},[91,6714,678],{"class":250},[91,6716,1293],{"class":153},[91,6718,1363],{"class":250},[91,6720,6721],{"class":308}," \u002F\u002F4字节(32位的话)\n",[91,6723,6724],{"class":93,"line":1741},[91,6725,1689],{"class":250},[190,6727,6729],{"id":6728},"_33空指针","3.3空指针",[21,6731,6732],{},"空指针：指针变量指向内存中编号为0的空间",[21,6734,6735],{},"用途：初始化指针变量",[21,6737,6738],{},"注意：空指针指向的内存是不可以访问的",[82,6740,6742],{"className":238,"code":6741,"language":240,"meta":26,"style":26},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[88,6743,6744,6752,6756,6761,6775,6780,6795,6800],{"__ignoreMap":26},[91,6745,6746,6748,6750],{"class":93,"line":94},[91,6747,254],{"class":153},[91,6749,2096],{"class":97},[91,6751,2099],{"class":250},[91,6753,6754],{"class":93,"line":38},[91,6755,1670],{"class":250},[91,6757,6758],{"class":93,"line":1304},[91,6759,6760],{"class":308},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[91,6762,6763,6765,6767,6769,6771,6773],{"class":93,"line":1319},[91,6764,2108],{"class":153},[91,6766,6641],{"class":153},[91,6768,21],{"class":250},[91,6770,296],{"class":153},[91,6772,2515],{"class":105},[91,6774,1415],{"class":250},[91,6776,6777],{"class":93,"line":1325},[91,6778,6779],{"class":308},"    \u002F\u002F2.空指针不能进行访问\n",[91,6781,6782,6784,6786,6788,6790,6792],{"class":93,"line":1339},[91,6783,6526],{"class":153},[91,6785,21],{"class":250},[91,6787,296],{"class":153},[91,6789,560],{"class":105},[91,6791,305],{"class":250},[91,6793,6794],{"class":308},"\u002F\u002F直接报错，压根不能访问\n",[91,6796,6797],{"class":93,"line":1345},[91,6798,6799],{"class":308},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[91,6801,6802],{"class":93,"line":1436},[91,6803,1689],{"class":250},[190,6805,6807],{"id":6806},"_34野指针","3.4野指针",[21,6809,6810],{},[398,6811,6812],{},"指针变量指向非法的内存空间",[82,6814,6816],{"className":238,"code":6815,"language":240,"meta":26,"style":26},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[88,6817,6818,6826,6830,6859,6864,6876],{"__ignoreMap":26},[91,6819,6820,6822,6824],{"class":93,"line":94},[91,6821,254],{"class":153},[91,6823,2096],{"class":97},[91,6825,2099],{"class":250},[91,6827,6828],{"class":93,"line":38},[91,6829,1670],{"class":250},[91,6831,6832,6834,6836,6838,6840,6842,6844,6846,6848,6851,6854,6856],{"class":93,"line":1304},[91,6833,2108],{"class":153},[91,6835,6641],{"class":153},[91,6837,21],{"class":250},[91,6839,296],{"class":153},[91,6841,251],{"class":250},[91,6843,254],{"class":153},[91,6845,6641],{"class":153},[91,6847,678],{"class":250},[91,6849,6850],{"class":153},"0x",[91,6852,6853],{"class":105},"1100",[91,6855,305],{"class":250},[91,6857,6858],{"class":308}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[91,6860,6861],{"class":93,"line":1319},[91,6862,6863],{"class":308},"    \u002F\u002F访问野指针报错\n",[91,6865,6866,6868,6870,6872,6874],{"class":93,"line":1325},[91,6867,1675],{"class":250},[91,6869,6542],{"class":153},[91,6871,21],{"class":250},[91,6873,1293],{"class":153},[91,6875,1316],{"class":250},[91,6877,6878],{"class":93,"line":1339},[91,6879,1689],{"class":250},[21,6881,6882],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[190,6884,6886],{"id":6885},"_35const修饰指针","3.5const修饰指针",[21,6888,6889],{},"三种情况：",[1256,6891,6892,6895,6898],{},[17,6893,6894],{},"const修饰指针 常量指针",[17,6896,6897],{},"const修饰常量 指针常量",[17,6899,6900],{},"const即修饰指针，又修饰常量",[14,6902,6903],{},[17,6904,6905],{},"常量指针",[82,6907,6909],{"className":238,"code":6908,"language":240,"meta":26,"style":26},"const int *p=&a;\n",[88,6910,6911],{"__ignoreMap":26},[91,6912,6913,6916,6918,6920,6922,6924],{"class":93,"line":94},[91,6914,6915],{"class":153},"const",[91,6917,2505],{"class":153},[91,6919,6641],{"class":153},[91,6921,21],{"class":250},[91,6923,6462],{"class":153},[91,6925,6320],{"class":250},[21,6927,6928],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[14,6930,6931],{"start":38},[17,6932,6933],{},"指针常量",[82,6935,6937],{"className":238,"code":6936,"language":240,"meta":26,"style":26},"int *const p=&a;\n",[88,6938,6939],{"__ignoreMap":26},[91,6940,6941,6943,6946,6949,6951],{"class":93,"line":94},[91,6942,254],{"class":153},[91,6944,6945],{"class":153}," *const",[91,6947,6948],{"class":250}," p",[91,6950,6462],{"class":153},[91,6952,6320],{"class":250},[21,6954,6955],{},"指针的指向不可以改，指针指向的值可以改",[14,6957,6958],{"start":1304},[17,6959,6900],{},[82,6961,6963],{"className":238,"code":6962,"language":240,"meta":26,"style":26},"const int *const p=&a;\n",[88,6964,6965],{"__ignoreMap":26},[91,6966,6967,6969,6971,6973,6975,6977],{"class":93,"line":94},[91,6968,6915],{"class":153},[91,6970,2505],{"class":153},[91,6972,6945],{"class":153},[91,6974,6948],{"class":250},[91,6976,6462],{"class":153},[91,6978,6320],{"class":250},[21,6980,6981],{},"指针的指向和指针指向的值都不可以改变",[190,6983,6985],{"id":6984},"_36指针和数组","3.6指针和数组",[82,6987,6989],{"className":238,"code":6988,"language":240,"meta":26,"style":26},"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",[88,6990,6991,6999,7003,7008,7062,7083,7099,7115,7126,7143,7148,7162,7188,7192,7204,7213,7217],{"__ignoreMap":26},[91,6992,6993,6995,6997],{"class":93,"line":94},[91,6994,254],{"class":153},[91,6996,2096],{"class":97},[91,6998,2099],{"class":250},[91,7000,7001],{"class":93,"line":38},[91,7002,1670],{"class":250},[91,7004,7005],{"class":93,"line":1304},[91,7006,7007],{"class":308},"    \u002F\u002F利用指针访问数组中的元素\n",[91,7009,7010,7012,7014,7016,7018,7020,7022,7024,7026,7028,7030,7032,7034,7036,7038,7040,7042,7044,7046,7048,7050,7052,7054,7056,7058,7060],{"class":93,"line":1319},[91,7011,2108],{"class":153},[91,7013,4085],{"class":250},[91,7015,695],{"class":105},[91,7017,1189],{"class":250},[91,7019,296],{"class":153},[91,7021,1145],{"class":250},[91,7023,466],{"class":105},[91,7025,627],{"class":250},[91,7027,327],{"class":105},[91,7029,627],{"class":250},[91,7031,321],{"class":105},[91,7033,627],{"class":250},[91,7035,542],{"class":105},[91,7037,627],{"class":250},[91,7039,568],{"class":105},[91,7041,627],{"class":250},[91,7043,593],{"class":105},[91,7045,627],{"class":250},[91,7047,618],{"class":105},[91,7049,627],{"class":250},[91,7051,644],{"class":105},[91,7053,627],{"class":250},[91,7055,669],{"class":105},[91,7057,627],{"class":250},[91,7059,695],{"class":105},[91,7061,4118],{"class":250},[91,7063,7064,7066,7068,7071,7073,7075,7077,7079,7081],{"class":93,"line":1325},[91,7065,1675],{"class":250},[91,7067,1293],{"class":153},[91,7069,7070],{"class":101},"\"数组的第一个元素为：\"",[91,7072,1293],{"class":153},[91,7074,4029],{"class":250},[91,7076,440],{"class":105},[91,7078,1189],{"class":250},[91,7080,1293],{"class":153},[91,7082,1316],{"class":250},[91,7084,7085,7087,7089,7091,7093,7096],{"class":93,"line":1339},[91,7086,2108],{"class":153},[91,7088,6641],{"class":153},[91,7090,21],{"class":250},[91,7092,296],{"class":153},[91,7094,7095],{"class":250},"arr;",[91,7097,7098],{"class":308},"\u002F\u002F注意数才要加取地址符号&\n",[91,7100,7101,7103,7105,7107,7109,7111,7113],{"class":93,"line":1345},[91,7102,1675],{"class":250},[91,7104,1293],{"class":153},[91,7106,7070],{"class":101},[91,7108,6542],{"class":153},[91,7110,21],{"class":250},[91,7112,1293],{"class":153},[91,7114,1316],{"class":250},[91,7116,7117,7119,7121,7123],{"class":93,"line":1436},[91,7118,6459],{"class":250},[91,7120,2415],{"class":153},[91,7122,305],{"class":250},[91,7124,7125],{"class":308}," \u002F\u002F让指针向后偏移4个字节\n",[91,7127,7128,7130,7132,7135,7137,7139,7141],{"class":93,"line":1442},[91,7129,1675],{"class":250},[91,7131,1293],{"class":153},[91,7133,7134],{"class":101},"\"数组的第二个元素为：\"",[91,7136,6542],{"class":153},[91,7138,21],{"class":250},[91,7140,1293],{"class":153},[91,7142,1316],{"class":250},[91,7144,7145],{"class":93,"line":1454},[91,7146,7147],{"class":308},"    \u002F\u002F利用指针遍历数组\n",[91,7149,7150,7152,7154,7157,7159],{"class":93,"line":1736},[91,7151,2108],{"class":153},[91,7153,6641],{"class":153},[91,7155,7156],{"class":250},"p2",[91,7158,296],{"class":153},[91,7160,7161],{"class":250},"arr;\n",[91,7163,7164,7166,7168,7170,7172,7174,7176,7178,7180,7182,7184,7186],{"class":93,"line":1741},[91,7165,3324],{"class":153},[91,7167,1782],{"class":250},[91,7169,254],{"class":153},[91,7171,3155],{"class":250},[91,7173,296],{"class":153},[91,7175,440],{"class":105},[91,7177,3162],{"class":250},[91,7179,1159],{"class":153},[91,7181,695],{"class":105},[91,7183,3162],{"class":250},[91,7185,2415],{"class":153},[91,7187,257],{"class":250},[91,7189,7190],{"class":93,"line":1747},[91,7191,2153],{"class":250},[91,7193,7194,7196,7198,7200,7202],{"class":93,"line":1752},[91,7195,3574],{"class":250},[91,7197,6542],{"class":153},[91,7199,7156],{"class":250},[91,7201,1293],{"class":153},[91,7203,1316],{"class":250},[91,7205,7206,7209,7211],{"class":93,"line":1766},[91,7207,7208],{"class":250},"        p2",[91,7210,2415],{"class":153},[91,7212,1415],{"class":250},[91,7214,7215],{"class":93,"line":1771},[91,7216,2310],{"class":250},[91,7218,7219],{"class":93,"line":1777},[91,7220,1689],{"class":250},[190,7222,7224],{"id":7223},"_37指针和函数","3.7指针和函数",[21,7226,7227],{},"利用指针做函数参数，可以修改实参的值",[21,7229,7230],{},"值传递：只改变形参，不改变实参",[21,7232,7233],{},"地址传递：",[82,7235,7237],{"className":238,"code":7236,"language":240,"meta":26,"style":26},"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",[88,7238,7239,7264,7268,7280,7291,7301,7305,7313,7317,7329,7341,7346,7362,7377,7392],{"__ignoreMap":26},[91,7240,7241,7243,7245,7247,7249,7251,7254,7256,7258,7260,7262],{"class":93,"line":94},[91,7242,5487],{"class":153},[91,7244,5490],{"class":97},[91,7246,251],{"class":250},[91,7248,254],{"class":153},[91,7250,6641],{"class":153},[91,7252,7253],{"class":5339},"p1",[91,7255,627],{"class":250},[91,7257,254],{"class":153},[91,7259,6641],{"class":153},[91,7261,7156],{"class":5339},[91,7263,257],{"class":250},[91,7265,7266],{"class":93,"line":38},[91,7267,1670],{"class":250},[91,7269,7270,7272,7274,7277],{"class":93,"line":1304},[91,7271,2108],{"class":153},[91,7273,4378],{"class":250},[91,7275,7276],{"class":153},"=*",[91,7278,7279],{"class":250},"p1;\n",[91,7281,7282,7284,7286,7288],{"class":93,"line":1319},[91,7283,6526],{"class":153},[91,7285,7253],{"class":250},[91,7287,7276],{"class":153},[91,7289,7290],{"class":250},"p2;\n",[91,7292,7293,7295,7297,7299],{"class":93,"line":1325},[91,7294,6526],{"class":153},[91,7296,7156],{"class":250},[91,7298,296],{"class":153},[91,7300,4403],{"class":250},[91,7302,7303],{"class":93,"line":1339},[91,7304,1689],{"class":250},[91,7306,7307,7309,7311],{"class":93,"line":1345},[91,7308,254],{"class":153},[91,7310,2096],{"class":97},[91,7312,2099],{"class":250},[91,7314,7315],{"class":93,"line":1436},[91,7316,1670],{"class":250},[91,7318,7319,7321,7323,7325,7327],{"class":93,"line":1442},[91,7320,2108],{"class":153},[91,7322,1523],{"class":250},[91,7324,296],{"class":153},[91,7326,695],{"class":105},[91,7328,1415],{"class":250},[91,7330,7331,7333,7335,7337,7339],{"class":93,"line":1454},[91,7332,2108],{"class":153},[91,7334,2956],{"class":250},[91,7336,296],{"class":153},[91,7338,949],{"class":105},[91,7340,1415],{"class":250},[91,7342,7343],{"class":93,"line":1736},[91,7344,7345],{"class":308},"    \u002F\u002F地址传递\n",[91,7347,7348,7350,7352,7354,7357,7359],{"class":93,"line":1741},[91,7349,5684],{"class":97},[91,7351,251],{"class":250},[91,7353,602],{"class":153},[91,7355,7356],{"class":250},"a,",[91,7358,602],{"class":153},[91,7360,7361],{"class":250},"b);\n",[91,7363,7364,7366,7368,7370,7372,7374],{"class":93,"line":1747},[91,7365,1675],{"class":250},[91,7367,1293],{"class":153},[91,7369,487],{"class":250},[91,7371,1293],{"class":153},[91,7373,1363],{"class":250},[91,7375,7376],{"class":308},"\u002F\u002F20\n",[91,7378,7379,7381,7383,7385,7387,7389],{"class":93,"line":1752},[91,7380,1675],{"class":250},[91,7382,1293],{"class":153},[91,7384,512],{"class":250},[91,7386,1293],{"class":153},[91,7388,1363],{"class":250},[91,7390,7391],{"class":308},"\u002F\u002F10\n",[91,7393,7394],{"class":93,"line":1766},[91,7395,1689],{"class":250},[21,7397,7398],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[190,7400,7402],{"id":7401},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[21,7404,7405],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[21,7407,7408,7409,7411],{},"例如数组：int arr",[91,7410,695],{},"={4,3,6,9,1,2,10,8,7,5}",[82,7413,7415],{"className":238,"code":7414,"language":240,"meta":26,"style":26},"#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",[88,7416,7417,7423,7433,7457,7461,7492,7496,7530,7534,7552,7556,7567,7582,7597,7601,7605,7609,7613,7617,7625,7629,7634,7688,7700,7712,7717,7725,7729,7734,7759,7763,7778,7787,7791],{"__ignoreMap":26},[91,7418,7419,7421],{"class":93,"line":94},[91,7420,2073],{"class":153},[91,7422,2076],{"class":101},[91,7424,7425,7427,7429,7431],{"class":93,"line":38},[91,7426,2081],{"class":153},[91,7428,2084],{"class":153},[91,7430,2087],{"class":97},[91,7432,1415],{"class":250},[91,7434,7435,7437,7440,7442,7444,7446,7448,7450,7452,7455],{"class":93,"line":1304},[91,7436,5487],{"class":153},[91,7438,7439],{"class":97}," bubbleSort",[91,7441,251],{"class":250},[91,7443,254],{"class":153},[91,7445,6641],{"class":153},[91,7447,21],{"class":5339},[91,7449,627],{"class":250},[91,7451,254],{"class":153},[91,7453,7454],{"class":5339}," len",[91,7456,257],{"class":250},[91,7458,7459],{"class":93,"line":1319},[91,7460,1670],{"class":250},[91,7462,7463,7465,7467,7469,7471,7473,7475,7477,7479,7482,7484,7486,7488,7490],{"class":93,"line":1325},[91,7464,3324],{"class":153},[91,7466,251],{"class":250},[91,7468,254],{"class":153},[91,7470,3155],{"class":250},[91,7472,296],{"class":153},[91,7474,440],{"class":105},[91,7476,3162],{"class":250},[91,7478,1159],{"class":153},[91,7480,7481],{"class":250},"len",[91,7483,781],{"class":153},[91,7485,466],{"class":105},[91,7487,3162],{"class":250},[91,7489,2415],{"class":153},[91,7491,257],{"class":250},[91,7493,7494],{"class":93,"line":1339},[91,7495,2153],{"class":250},[91,7497,7498,7500,7502,7504,7506,7508,7510,7512,7514,7516,7518,7520,7522,7524,7526,7528],{"class":93,"line":1345},[91,7499,3526],{"class":153},[91,7501,251],{"class":250},[91,7503,254],{"class":153},[91,7505,3533],{"class":250},[91,7507,296],{"class":153},[91,7509,440],{"class":105},[91,7511,3540],{"class":250},[91,7513,1159],{"class":153},[91,7515,7481],{"class":250},[91,7517,781],{"class":153},[91,7519,690],{"class":250},[91,7521,781],{"class":153},[91,7523,466],{"class":105},[91,7525,3540],{"class":250},[91,7527,2415],{"class":153},[91,7529,257],{"class":250},[91,7531,7532],{"class":93,"line":1436},[91,7533,2633],{"class":250},[91,7535,7536,7538,7541,7543,7546,7548,7550],{"class":93,"line":1442},[91,7537,4765],{"class":153},[91,7539,7540],{"class":250},"(p[j]",[91,7542,1209],{"class":153},[91,7544,7545],{"class":250},"p[j",[91,7547,730],{"class":153},[91,7549,466],{"class":105},[91,7551,4780],{"class":250},[91,7553,7554],{"class":93,"line":1454},[91,7555,4785],{"class":250},[91,7557,7558,7560,7562,7564],{"class":93,"line":1736},[91,7559,4790],{"class":153},[91,7561,4378],{"class":250},[91,7563,296],{"class":153},[91,7565,7566],{"class":250},"p[j];\n",[91,7568,7569,7572,7574,7576,7578,7580],{"class":93,"line":1741},[91,7570,7571],{"class":250},"                p[j]",[91,7573,296],{"class":153},[91,7575,7545],{"class":250},[91,7577,730],{"class":153},[91,7579,466],{"class":105},[91,7581,4813],{"class":250},[91,7583,7584,7587,7589,7591,7593,7595],{"class":93,"line":1747},[91,7585,7586],{"class":250},"                p[j",[91,7588,730],{"class":153},[91,7590,466],{"class":105},[91,7592,1189],{"class":250},[91,7594,296],{"class":153},[91,7596,4403],{"class":250},[91,7598,7599],{"class":93,"line":1752},[91,7600,4833],{"class":250},[91,7602,7603],{"class":93,"line":1766},[91,7604,2652],{"class":250},[91,7606,7607],{"class":93,"line":1771},[91,7608,2310],{"class":250},[91,7610,7611],{"class":93,"line":1777},[91,7612,1689],{"class":250},[91,7614,7615],{"class":93,"line":1798},[91,7616,2523],{"emptyLinePlaceholder":175},[91,7618,7619,7621,7623],{"class":93,"line":1803},[91,7620,254],{"class":153},[91,7622,2096],{"class":97},[91,7624,2099],{"class":250},[91,7626,7627],{"class":93,"line":1817},[91,7628,1670],{"class":250},[91,7630,7631],{"class":93,"line":1822},[91,7632,7633],{"class":308},"    \u002F\u002F 1.创建数组\n",[91,7635,7636,7638,7640,7642,7644,7646,7648,7650,7652,7654,7656,7658,7660,7662,7664,7666,7668,7670,7672,7674,7676,7678,7680,7682,7684,7686],{"class":93,"line":1851},[91,7637,2108],{"class":153},[91,7639,4085],{"class":250},[91,7641,695],{"class":105},[91,7643,1189],{"class":250},[91,7645,296],{"class":153},[91,7647,1145],{"class":250},[91,7649,542],{"class":105},[91,7651,627],{"class":250},[91,7653,321],{"class":105},[91,7655,627],{"class":250},[91,7657,593],{"class":105},[91,7659,627],{"class":250},[91,7661,669],{"class":105},[91,7663,627],{"class":250},[91,7665,466],{"class":105},[91,7667,627],{"class":250},[91,7669,327],{"class":105},[91,7671,627],{"class":250},[91,7673,695],{"class":105},[91,7675,627],{"class":250},[91,7677,644],{"class":105},[91,7679,627],{"class":250},[91,7681,618],{"class":105},[91,7683,627],{"class":250},[91,7685,568],{"class":105},[91,7687,4118],{"class":250},[91,7689,7690,7692,7694,7696,7698],{"class":93,"line":1856},[91,7691,2108],{"class":153},[91,7693,7454],{"class":250},[91,7695,296],{"class":153},[91,7697,695],{"class":105},[91,7699,1415],{"class":250},[91,7701,7702,7704,7706,7708,7710],{"class":93,"line":1873},[91,7703,2108],{"class":153},[91,7705,6641],{"class":153},[91,7707,21],{"class":250},[91,7709,296],{"class":153},[91,7711,7161],{"class":250},[91,7713,7714],{"class":93,"line":1878},[91,7715,7716],{"class":308},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[91,7718,7719,7722],{"class":93,"line":1883},[91,7720,7721],{"class":97},"    bubbleSort",[91,7723,7724],{"class":250},"(p,len);\n",[91,7726,7727],{"class":93,"line":1888},[91,7728,2523],{"emptyLinePlaceholder":175},[91,7730,7731],{"class":93,"line":1902},[91,7732,7733],{"class":308},"    \u002F\u002F 3.打印排序后的数组\n",[91,7735,7736,7738,7740,7742,7744,7746,7748,7750,7752,7755,7757],{"class":93,"line":1907},[91,7737,3324],{"class":153},[91,7739,1782],{"class":250},[91,7741,254],{"class":153},[91,7743,3155],{"class":250},[91,7745,296],{"class":153},[91,7747,440],{"class":105},[91,7749,3337],{"class":250},[91,7751,1159],{"class":153},[91,7753,7754],{"class":250},"len; i",[91,7756,2415],{"class":153},[91,7758,257],{"class":250},[91,7760,7761],{"class":93,"line":2700},[91,7762,2153],{"class":250},[91,7764,7765,7767,7769,7771,7773,7776],{"class":93,"line":2714},[91,7766,3574],{"class":250},[91,7768,6542],{"class":153},[91,7770,21],{"class":250},[91,7772,1293],{"class":153},[91,7774,7775],{"class":101},"\"\"",[91,7777,1415],{"class":250},[91,7779,7780,7783,7785],{"class":93,"line":2722},[91,7781,7782],{"class":250},"        p",[91,7784,2415],{"class":153},[91,7786,1415],{"class":250},[91,7788,7789],{"class":93,"line":2727},[91,7790,2310],{"class":250},[91,7792,7793],{"class":93,"line":2733},[91,7794,1689],{"class":250},[168,7796,7797],{},"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":26,"searchDepth":38,"depth":38,"links":7799},[7800,7801,7802,7803,7804,7805,7806,7807],{"id":6406,"depth":38,"text":6407},{"id":6572,"depth":38,"text":6573},{"id":6728,"depth":38,"text":6729},{"id":6806,"depth":38,"text":6807},{"id":6885,"depth":38,"text":6886},{"id":6984,"depth":38,"text":6985},{"id":7223,"depth":38,"text":7224},{"id":7401,"depth":38,"text":7402},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6395,"description":6403},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7814,"title":7815,"body":7816,"description":7823,"extension":173,"meta":10797,"navigation":175,"path":10798,"seo":10799,"stem":10800,"__hash__":10801},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7817,"toc":10788},[7818,7821,7824,7828,7831,7834,7845,8183,8186,8190,8193,8200,8455,8459,8462,8465,8620,8624,8627,8630,8836,8840,8843,9146,9149,9157,9161,9164,9315,9317,9328,9385,9389,9394,10051,10059,10062,10156,10159,10779,10785],[10,7819,7815],{"id":7820},"_4结构体",[21,7822,7823],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[190,7825,7827],{"id":7826},"_41结构体定义与使用","4.1结构体定义与使用",[21,7829,7830],{},"语法：struct 结构体名 {结构体成员列表}；",[21,7832,7833],{},"通过结构体创建变量的方式：",[1256,7835,7836,7839,7842],{},[17,7837,7838],{},"struct 结构体名 变量名",[17,7840,7841],{},"struct 结构体名 变量名={成员1值，成员2值...}",[17,7843,7844],{},"定义结构体时顺便创建变量",[82,7846,7848],{"className":238,"code":7847,"language":240,"meta":26,"style":26},"#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",[88,7849,7850,7856,7866,7873,7878,7886,7890,7895,7899,7904,7909,7914,7921,7926,7933,7937,7944,7948,7952,7956,7960,7964,7968,7974,7978,7984,7992,8000,8004,8009,8014,8025,8030,8042,8053,8064,8069,8093,8098,8104,8131,8136,8142,8154,8166,8178],{"__ignoreMap":26},[91,7851,7852,7854],{"class":93,"line":94},[91,7853,2073],{"class":153},[91,7855,2076],{"class":101},[91,7857,7858,7860,7862,7864],{"class":93,"line":38},[91,7859,2081],{"class":153},[91,7861,2084],{"class":153},[91,7863,2087],{"class":97},[91,7865,1415],{"class":250},[91,7867,7868,7870],{"class":93,"line":1304},[91,7869,2073],{"class":153},[91,7871,7872],{"class":101},"\u003Cstring>\n",[91,7874,7875],{"class":93,"line":1319},[91,7876,7877],{"class":308},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[91,7879,7880,7883],{"class":93,"line":1325},[91,7881,7882],{"class":153},"struct",[91,7884,7885],{"class":97}," Student\n",[91,7887,7888],{"class":93,"line":1339},[91,7889,1670],{"class":250},[91,7891,7892],{"class":93,"line":1345},[91,7893,7894],{"class":308},"    \u002F\u002F成员列表\n",[91,7896,7897],{"class":93,"line":1436},[91,7898,2523],{"emptyLinePlaceholder":175},[91,7900,7901],{"class":93,"line":1442},[91,7902,7903],{"class":308},"    \u002F\u002F姓名\n",[91,7905,7906],{"class":93,"line":1454},[91,7907,7908],{"class":250},"    string name;\n",[91,7910,7911],{"class":93,"line":1736},[91,7912,7913],{"class":308},"    \u002F\u002F年龄\n",[91,7915,7916,7918],{"class":93,"line":1741},[91,7917,2108],{"class":153},[91,7919,7920],{"class":250}," age;\n",[91,7922,7923],{"class":93,"line":1747},[91,7924,7925],{"class":308},"    \u002F\u002F分数\n",[91,7927,7928,7930],{"class":93,"line":1752},[91,7929,2108],{"class":153},[91,7931,7932],{"class":250}," score;\n",[91,7934,7935],{"class":93,"line":1766},[91,7936,4118],{"class":250},[91,7938,7939,7941],{"class":93,"line":1771},[91,7940,7882],{"class":153},[91,7942,7943],{"class":97}," School\n",[91,7945,7946],{"class":93,"line":1777},[91,7947,1670],{"class":250},[91,7949,7950],{"class":93,"line":1798},[91,7951,7894],{"class":308},[91,7953,7954],{"class":93,"line":1803},[91,7955,2523],{"emptyLinePlaceholder":175},[91,7957,7958],{"class":93,"line":1817},[91,7959,7903],{"class":308},[91,7961,7962],{"class":93,"line":1822},[91,7963,7908],{"class":250},[91,7965,7966],{"class":93,"line":1851},[91,7967,7913],{"class":308},[91,7969,7970,7972],{"class":93,"line":1856},[91,7971,2108],{"class":153},[91,7973,7920],{"class":250},[91,7975,7976],{"class":93,"line":1873},[91,7977,7925],{"class":308},[91,7979,7980,7982],{"class":93,"line":1878},[91,7981,2108],{"class":153},[91,7983,7932],{"class":250},[91,7985,7986,7989],{"class":93,"line":1883},[91,7987,7988],{"class":250},"} s3;",[91,7990,7991],{"class":308}," \u002F\u002F创建结构体时就创建了变量\n",[91,7993,7994,7996,7998],{"class":93,"line":1888},[91,7995,254],{"class":153},[91,7997,2096],{"class":97},[91,7999,2099],{"class":250},[91,8001,8002],{"class":93,"line":1902},[91,8003,1670],{"class":250},[91,8005,8006],{"class":93,"line":1907},[91,8007,8008],{"class":308},"    \u002F\u002F2.通过学生类型创建具体学生\n",[91,8010,8011],{"class":93,"line":2700},[91,8012,8013],{"class":308},"    \u002F\u002F2.1 struct Student s1;\n",[91,8015,8016,8019,8022],{"class":93,"line":2714},[91,8017,8018],{"class":153},"    struct",[91,8020,8021],{"class":97}," Student",[91,8023,8024],{"class":250}," s1;\n",[91,8026,8027],{"class":93,"line":2722},[91,8028,8029],{"class":308},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[91,8031,8032,8035,8037,8040],{"class":93,"line":2727},[91,8033,8034],{"class":250},"    s1.name",[91,8036,296],{"class":153},[91,8038,8039],{"class":101},"\"张三\"",[91,8041,1415],{"class":250},[91,8043,8044,8047,8049,8051],{"class":93,"line":2733},[91,8045,8046],{"class":250},"    s1.age",[91,8048,296],{"class":153},[91,8050,899],{"class":105},[91,8052,1415],{"class":250},[91,8054,8055,8058,8060,8062],{"class":93,"line":2739},[91,8056,8057],{"class":250},"    s1.score",[91,8059,296],{"class":153},[91,8061,503],{"class":105},[91,8063,1415],{"class":250},[91,8065,8066],{"class":93,"line":2744},[91,8067,8068],{"class":308},"    \u002F\u002F输出结果\n",[91,8070,8072,8074,8076,8079,8081,8084,8086,8089,8091],{"class":93,"line":8071},37,[91,8073,1675],{"class":250},[91,8075,1293],{"class":153},[91,8077,8078],{"class":250},"s1.name",[91,8080,1293],{"class":153},[91,8082,8083],{"class":250},"s1.age",[91,8085,1293],{"class":153},[91,8087,8088],{"class":250},"s1.score",[91,8090,1293],{"class":153},[91,8092,1316],{"class":250},[91,8094,8096],{"class":93,"line":8095},38,[91,8097,2523],{"emptyLinePlaceholder":175},[91,8099,8101],{"class":93,"line":8100},39,[91,8102,8103],{"class":308},"    \u002F\u002F2.2 struct Student s2={...}\n",[91,8105,8107,8109,8111,8114,8116,8118,8121,8123,8125,8127,8129],{"class":93,"line":8106},40,[91,8108,8018],{"class":153},[91,8110,8021],{"class":97},[91,8112,8113],{"class":250}," s2",[91,8115,296],{"class":153},[91,8117,1145],{"class":250},[91,8119,8120],{"class":101},"\"王五\"",[91,8122,627],{"class":250},[91,8124,899],{"class":105},[91,8126,627],{"class":250},[91,8128,503],{"class":105},[91,8130,4118],{"class":250},[91,8132,8134],{"class":93,"line":8133},41,[91,8135,2523],{"emptyLinePlaceholder":175},[91,8137,8139],{"class":93,"line":8138},42,[91,8140,8141],{"class":308},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[91,8143,8145,8148,8150,8152],{"class":93,"line":8144},43,[91,8146,8147],{"class":250},"    s3.name",[91,8149,296],{"class":153},[91,8151,3801],{"class":101},[91,8153,1415],{"class":250},[91,8155,8157,8160,8162,8164],{"class":93,"line":8156},44,[91,8158,8159],{"class":250},"    s3.age",[91,8161,296],{"class":153},[91,8163,899],{"class":105},[91,8165,1415],{"class":250},[91,8167,8169,8172,8174,8176],{"class":93,"line":8168},45,[91,8170,8171],{"class":250},"    s3.score",[91,8173,296],{"class":153},[91,8175,949],{"class":105},[91,8177,1415],{"class":250},[91,8179,8181],{"class":93,"line":8180},46,[91,8182,1689],{"class":250},[21,8184,8185],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[190,8187,8189],{"id":8188},"_42结构体数组","4.2结构体数组",[21,8191,8192],{},"将自定义的结构体放入到数组中方便维护",[21,8194,8195,8196,8199],{},"语法：struct 结构体名 数组名",[91,8197,8198],{},"元素个数","={ {}，{},...{} };",[82,8201,8203],{"className":238,"code":8202,"language":240,"meta":26,"style":26},"#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",[88,8204,8205,8211,8221,8227,8232,8238,8242,8246,8252,8258,8262,8266,8274,8278,8283,8298,8302,8318,8334,8338,8343,8359,8374,8389,8394,8420,8424,8447,8451],{"__ignoreMap":26},[91,8206,8207,8209],{"class":93,"line":94},[91,8208,2073],{"class":153},[91,8210,2076],{"class":101},[91,8212,8213,8215,8217,8219],{"class":93,"line":38},[91,8214,2081],{"class":153},[91,8216,2084],{"class":153},[91,8218,2087],{"class":97},[91,8220,1415],{"class":250},[91,8222,8223,8225],{"class":93,"line":1304},[91,8224,2073],{"class":153},[91,8226,7872],{"class":101},[91,8228,8229],{"class":93,"line":1319},[91,8230,8231],{"class":308},"\u002F\u002F1.定义结构体\n",[91,8233,8234,8236],{"class":93,"line":1325},[91,8235,7882],{"class":153},[91,8237,7885],{"class":97},[91,8239,8240],{"class":93,"line":1339},[91,8241,1670],{"class":250},[91,8243,8244],{"class":93,"line":1345},[91,8245,7908],{"class":250},[91,8247,8248,8250],{"class":93,"line":1436},[91,8249,2108],{"class":153},[91,8251,7920],{"class":250},[91,8253,8254,8256],{"class":93,"line":1442},[91,8255,2108],{"class":153},[91,8257,7932],{"class":250},[91,8259,8260],{"class":93,"line":1454},[91,8261,2523],{"emptyLinePlaceholder":175},[91,8263,8264],{"class":93,"line":1736},[91,8265,4118],{"class":250},[91,8267,8268,8270,8272],{"class":93,"line":1741},[91,8269,254],{"class":153},[91,8271,2096],{"class":97},[91,8273,2099],{"class":250},[91,8275,8276],{"class":93,"line":1747},[91,8277,1670],{"class":250},[91,8279,8280],{"class":93,"line":1752},[91,8281,8282],{"class":308},"    \u002F\u002F2.创建结构体数组\n",[91,8284,8285,8287,8289,8292,8294,8296],{"class":93,"line":1766},[91,8286,8018],{"class":153},[91,8288,8021],{"class":97},[91,8290,8291],{"class":250}," stuArray[",[91,8293,327],{"class":105},[91,8295,1189],{"class":250},[91,8297,5031],{"class":153},[91,8299,8300],{"class":93,"line":1771},[91,8301,2153],{"class":250},[91,8303,8304,8306,8308,8310,8312,8314,8316],{"class":93,"line":1777},[91,8305,5040],{"class":250},[91,8307,8039],{"class":101},[91,8309,627],{"class":250},[91,8311,899],{"class":105},[91,8313,627],{"class":250},[91,8315,560],{"class":105},[91,8317,5053],{"class":250},[91,8319,8320,8322,8324,8326,8328,8330,8332],{"class":93,"line":1798},[91,8321,5040],{"class":250},[91,8323,3801],{"class":101},[91,8325,627],{"class":250},[91,8327,824],{"class":105},[91,8329,627],{"class":250},[91,8331,824],{"class":105},[91,8333,1689],{"class":250},[91,8335,8336],{"class":93,"line":1803},[91,8337,2310],{"class":250},[91,8339,8340],{"class":93,"line":1817},[91,8341,8342],{"class":308},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[91,8344,8345,8348,8350,8353,8355,8357],{"class":93,"line":1822},[91,8346,8347],{"class":250},"    stuArray[",[91,8349,466],{"class":105},[91,8351,8352],{"class":250},"].name",[91,8354,296],{"class":153},[91,8356,3824],{"class":101},[91,8358,1415],{"class":250},[91,8360,8361,8363,8365,8368,8370,8372],{"class":93,"line":1851},[91,8362,8347],{"class":250},[91,8364,466],{"class":105},[91,8366,8367],{"class":250},"].age",[91,8369,296],{"class":153},[91,8371,327],{"class":105},[91,8373,1415],{"class":250},[91,8375,8376,8378,8380,8383,8385,8387],{"class":93,"line":1856},[91,8377,8347],{"class":250},[91,8379,466],{"class":105},[91,8381,8382],{"class":250},"].score",[91,8384,296],{"class":153},[91,8386,327],{"class":105},[91,8388,1415],{"class":250},[91,8390,8391],{"class":93,"line":1873},[91,8392,8393],{"class":308},"    \u002F\u002F4.遍历结构体数组\n",[91,8395,8396,8398,8400,8402,8404,8406,8408,8410,8412,8414,8416,8418],{"class":93,"line":1878},[91,8397,3324],{"class":153},[91,8399,1782],{"class":250},[91,8401,254],{"class":153},[91,8403,3155],{"class":250},[91,8405,296],{"class":153},[91,8407,440],{"class":105},[91,8409,3162],{"class":250},[91,8411,1159],{"class":153},[91,8413,327],{"class":105},[91,8415,3162],{"class":250},[91,8417,2415],{"class":153},[91,8419,257],{"class":250},[91,8421,8422],{"class":93,"line":1883},[91,8423,2153],{"class":250},[91,8425,8426,8428,8430,8433,8435,8438,8440,8443,8445],{"class":93,"line":1888},[91,8427,3574],{"class":250},[91,8429,1293],{"class":153},[91,8431,8432],{"class":250},"stuArray[i].name",[91,8434,1293],{"class":153},[91,8436,8437],{"class":250},"stuArray[i].age",[91,8439,1293],{"class":153},[91,8441,8442],{"class":250},"stuArray[i].score",[91,8444,1293],{"class":153},[91,8446,1316],{"class":250},[91,8448,8449],{"class":93,"line":1902},[91,8450,2310],{"class":250},[91,8452,8453],{"class":93,"line":1907},[91,8454,1689],{"class":250},[190,8456,8458],{"id":8457},"_43结构体指针","4.3结构体指针",[21,8460,8461],{},"作用：通过指针访问结构体中的成员",[21,8463,8464],{},"利用操作符->可以通过结构体指针访问结构体属性",[82,8466,8468],{"className":238,"code":8467,"language":240,"meta":26,"style":26},"#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",[88,8469,8470,8476,8486,8492,8496,8502,8506,8510,8516,8522,8526,8534,8538,8543,8568,8573,8588,8593,8616],{"__ignoreMap":26},[91,8471,8472,8474],{"class":93,"line":94},[91,8473,2073],{"class":153},[91,8475,2076],{"class":101},[91,8477,8478,8480,8482,8484],{"class":93,"line":38},[91,8479,2081],{"class":153},[91,8481,2084],{"class":153},[91,8483,2087],{"class":97},[91,8485,1415],{"class":250},[91,8487,8488,8490],{"class":93,"line":1304},[91,8489,2073],{"class":153},[91,8491,7872],{"class":101},[91,8493,8494],{"class":93,"line":1319},[91,8495,8231],{"class":308},[91,8497,8498,8500],{"class":93,"line":1325},[91,8499,7882],{"class":153},[91,8501,7885],{"class":97},[91,8503,8504],{"class":93,"line":1339},[91,8505,1670],{"class":250},[91,8507,8508],{"class":93,"line":1345},[91,8509,7908],{"class":250},[91,8511,8512,8514],{"class":93,"line":1436},[91,8513,2108],{"class":153},[91,8515,7920],{"class":250},[91,8517,8518,8520],{"class":93,"line":1442},[91,8519,2108],{"class":153},[91,8521,7932],{"class":250},[91,8523,8524],{"class":93,"line":1454},[91,8525,4118],{"class":250},[91,8527,8528,8530,8532],{"class":93,"line":1736},[91,8529,254],{"class":153},[91,8531,2096],{"class":97},[91,8533,2099],{"class":250},[91,8535,8536],{"class":93,"line":1741},[91,8537,1670],{"class":250},[91,8539,8540],{"class":93,"line":1747},[91,8541,8542],{"class":308},"    \u002F\u002F创建学生结构体变量\n",[91,8544,8545,8547,8549,8552,8554,8556,8558,8560,8562,8564,8566],{"class":93,"line":1752},[91,8546,8018],{"class":153},[91,8548,8021],{"class":97},[91,8550,8551],{"class":250}," s",[91,8553,296],{"class":153},[91,8555,1145],{"class":250},[91,8557,8039],{"class":101},[91,8559,627],{"class":250},[91,8561,899],{"class":105},[91,8563,627],{"class":250},[91,8565,1846],{"class":105},[91,8567,4118],{"class":250},[91,8569,8570],{"class":93,"line":1766},[91,8571,8572],{"class":308},"    \u002F\u002F通过指针指向结构体变量\n",[91,8574,8575,8577,8579,8581,8583,8585],{"class":93,"line":1771},[91,8576,8018],{"class":153},[91,8578,8021],{"class":97},[91,8580,6641],{"class":153},[91,8582,21],{"class":250},[91,8584,6462],{"class":153},[91,8586,8587],{"class":250},"s\n",[91,8589,8590],{"class":93,"line":1777},[91,8591,8592],{"class":308},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[91,8594,8595,8597,8599,8602,8604,8607,8609,8612,8614],{"class":93,"line":1798},[91,8596,1675],{"class":250},[91,8598,1293],{"class":153},[91,8600,8601],{"class":250},"p->name",[91,8603,1293],{"class":153},[91,8605,8606],{"class":250},"p->age",[91,8608,1293],{"class":153},[91,8610,8611],{"class":250},"p->score",[91,8613,1293],{"class":153},[91,8615,1316],{"class":250},[91,8617,8618],{"class":93,"line":1803},[91,8619,1689],{"class":250},[190,8621,8623],{"id":8622},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[21,8625,8626],{},"作用：结构体中的成员可以是另一个结构体",[21,8628,8629],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[82,8631,8633],{"className":238,"code":8632,"language":240,"meta":26,"style":26},"#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",[88,8634,8635,8641,8651,8657,8662,8670,8674,8678,8684,8690,8694,8699,8706,8710,8717,8721,8727,8732,8736,8744,8748,8753,8758,8763,8774,8786,8797,8810,8821,8832],{"__ignoreMap":26},[91,8636,8637,8639],{"class":93,"line":94},[91,8638,2073],{"class":153},[91,8640,2076],{"class":101},[91,8642,8643,8645,8647,8649],{"class":93,"line":38},[91,8644,2081],{"class":153},[91,8646,2084],{"class":153},[91,8648,2087],{"class":97},[91,8650,1415],{"class":250},[91,8652,8653,8655],{"class":93,"line":1304},[91,8654,2073],{"class":153},[91,8656,7872],{"class":101},[91,8658,8659],{"class":93,"line":1319},[91,8660,8661],{"class":308},"\u002F\u002F定义学生结构体\n",[91,8663,8664,8666,8668],{"class":93,"line":1325},[91,8665,7882],{"class":153},[91,8667,8021],{"class":97},[91,8669,2797],{"class":250},[91,8671,8672],{"class":93,"line":1339},[91,8673,1670],{"class":250},[91,8675,8676],{"class":93,"line":1345},[91,8677,7908],{"class":250},[91,8679,8680,8682],{"class":93,"line":1436},[91,8681,2108],{"class":153},[91,8683,7920],{"class":250},[91,8685,8686,8688],{"class":93,"line":1442},[91,8687,2108],{"class":153},[91,8689,7932],{"class":250},[91,8691,8692],{"class":93,"line":1454},[91,8693,1689],{"class":250},[91,8695,8696],{"class":93,"line":1736},[91,8697,8698],{"class":308},"\u002F\u002F定义老师结构体\n",[91,8700,8701,8703],{"class":93,"line":1741},[91,8702,7882],{"class":153},[91,8704,8705],{"class":97}," Teacher\n",[91,8707,8708],{"class":93,"line":1747},[91,8709,1670],{"class":250},[91,8711,8712,8714],{"class":93,"line":1752},[91,8713,2108],{"class":153},[91,8715,8716],{"class":250}," id;\n",[91,8718,8719],{"class":93,"line":1766},[91,8720,7908],{"class":250},[91,8722,8723,8725],{"class":93,"line":1771},[91,8724,2108],{"class":153},[91,8726,7920],{"class":250},[91,8728,8729],{"class":93,"line":1777},[91,8730,8731],{"class":250},"    Student stu;\n",[91,8733,8734],{"class":93,"line":1798},[91,8735,1689],{"class":250},[91,8737,8738,8740,8742],{"class":93,"line":1803},[91,8739,254],{"class":153},[91,8741,2096],{"class":97},[91,8743,6101],{"class":250},[91,8745,8746],{"class":93,"line":1817},[91,8747,1670],{"class":250},[91,8749,8750],{"class":93,"line":1822},[91,8751,8752],{"class":308},"    \u002F\u002F结构体嵌套结构体\n",[91,8754,8755],{"class":93,"line":1851},[91,8756,8757],{"class":308},"    \u002F\u002F创建老师\n",[91,8759,8760],{"class":93,"line":1856},[91,8761,8762],{"class":250},"    Teacher t;\n",[91,8764,8765,8768,8770,8772],{"class":93,"line":1873},[91,8766,8767],{"class":250},"    t.id",[91,8769,296],{"class":153},[91,8771,560],{"class":105},[91,8773,1415],{"class":250},[91,8775,8776,8779,8781,8784],{"class":93,"line":1878},[91,8777,8778],{"class":250},"    t.name",[91,8780,296],{"class":153},[91,8782,8783],{"class":101},"\"老王\"",[91,8785,1415],{"class":250},[91,8787,8788,8791,8793,8795],{"class":93,"line":1883},[91,8789,8790],{"class":250},"    t.age",[91,8792,296],{"class":153},[91,8794,899],{"class":105},[91,8796,1415],{"class":250},[91,8798,8799,8802,8804,8807],{"class":93,"line":1888},[91,8800,8801],{"class":250},"    t.stu.name",[91,8803,296],{"class":153},[91,8805,8806],{"class":101},"\"小王\"",[91,8808,8809],{"class":250},"；\n",[91,8811,8812,8815,8817,8819],{"class":93,"line":1902},[91,8813,8814],{"class":250},"    t.stu.age",[91,8816,296],{"class":153},[91,8818,949],{"class":105},[91,8820,1415],{"class":250},[91,8822,8823,8826,8828,8830],{"class":93,"line":1907},[91,8824,8825],{"class":250},"    t.stu.score",[91,8827,296],{"class":153},[91,8829,593],{"class":105},[91,8831,1415],{"class":250},[91,8833,8834],{"class":93,"line":2700},[91,8835,1689],{"class":250},[190,8837,8839],{"id":8838},"_45结构体做函数参数","4.5结构体做函数参数",[21,8841,8842],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[82,8844,8846],{"className":238,"code":8845,"language":240,"meta":26,"style":26},"#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",[88,8847,8848,8854,8864,8870,8876,8880,8884,8890,8896,8900,8905,8910,8927,8931,8964,8968,8973,8992,8996,9027,9031,9039,9043,9052,9064,9076,9088,9101,9109,9122,9134,9142],{"__ignoreMap":26},[91,8849,8850,8852],{"class":93,"line":94},[91,8851,2073],{"class":153},[91,8853,2076],{"class":101},[91,8855,8856,8858,8860,8862],{"class":93,"line":38},[91,8857,2081],{"class":153},[91,8859,2084],{"class":153},[91,8861,2087],{"class":97},[91,8863,1415],{"class":250},[91,8865,8866,8868],{"class":93,"line":1304},[91,8867,2073],{"class":153},[91,8869,7872],{"class":101},[91,8871,8872,8874],{"class":93,"line":1319},[91,8873,7882],{"class":153},[91,8875,7885],{"class":97},[91,8877,8878],{"class":93,"line":1325},[91,8879,1670],{"class":250},[91,8881,8882],{"class":93,"line":1339},[91,8883,7908],{"class":250},[91,8885,8886,8888],{"class":93,"line":1345},[91,8887,2108],{"class":153},[91,8889,7920],{"class":250},[91,8891,8892,8894],{"class":93,"line":1436},[91,8893,2108],{"class":153},[91,8895,7932],{"class":250},[91,8897,8898],{"class":93,"line":1442},[91,8899,4118],{"class":250},[91,8901,8902],{"class":93,"line":1454},[91,8903,8904],{"class":308},"\u002F\u002F打印学生信息的函数\n",[91,8906,8907],{"class":93,"line":1736},[91,8908,8909],{"class":308},"\u002F\u002F值传递\n",[91,8911,8912,8914,8917,8919,8921,8923,8925],{"class":93,"line":1741},[91,8913,5487],{"class":153},[91,8915,8916],{"class":97}," printStudent1",[91,8918,251],{"class":250},[91,8920,7882],{"class":153},[91,8922,8021],{"class":97},[91,8924,8551],{"class":5339},[91,8926,257],{"class":250},[91,8928,8929],{"class":93,"line":1747},[91,8930,1670],{"class":250},[91,8932,8933,8935,8937,8940,8942,8945,8947,8950,8952,8954,8956,8959,8961],{"class":93,"line":1752},[91,8934,6652],{"class":250},[91,8936,1293],{"class":153},[91,8938,8939],{"class":250}," s.name ",[91,8941,1293],{"class":153},[91,8943,8944],{"class":101}," \" \"",[91,8946,1569],{"class":153},[91,8948,8949],{"class":250}," s.age ",[91,8951,1293],{"class":153},[91,8953,8944],{"class":101},[91,8955,1569],{"class":153},[91,8957,8958],{"class":250}," s.score ",[91,8960,1293],{"class":153},[91,8962,8963],{"class":250}," endl;\n",[91,8965,8966],{"class":93,"line":1766},[91,8967,1689],{"class":250},[91,8969,8970],{"class":93,"line":1771},[91,8971,8972],{"class":308},"\u002F\u002F地址传递\n",[91,8974,8975,8977,8980,8982,8984,8986,8988,8990],{"class":93,"line":1777},[91,8976,5487],{"class":153},[91,8978,8979],{"class":97}," printStudent2",[91,8981,251],{"class":250},[91,8983,7882],{"class":153},[91,8985,8021],{"class":97},[91,8987,6641],{"class":153},[91,8989,944],{"class":5339},[91,8991,257],{"class":250},[91,8993,8994],{"class":93,"line":1798},[91,8995,1670],{"class":250},[91,8997,8998,9000,9002,9005,9007,9009,9011,9014,9016,9018,9020,9023,9025],{"class":93,"line":1803},[91,8999,6652],{"class":250},[91,9001,1293],{"class":153},[91,9003,9004],{"class":250}," s->name ",[91,9006,1293],{"class":153},[91,9008,8944],{"class":101},[91,9010,1569],{"class":153},[91,9012,9013],{"class":250}," s->age ",[91,9015,1293],{"class":153},[91,9017,8944],{"class":101},[91,9019,1569],{"class":153},[91,9021,9022],{"class":250}," s->score ",[91,9024,1293],{"class":153},[91,9026,8963],{"class":250},[91,9028,9029],{"class":93,"line":1817},[91,9030,1689],{"class":250},[91,9032,9033,9035,9037],{"class":93,"line":1822},[91,9034,254],{"class":153},[91,9036,2096],{"class":97},[91,9038,2099],{"class":250},[91,9040,9041],{"class":93,"line":1851},[91,9042,1670],{"class":250},[91,9044,9045,9047,9049],{"class":93,"line":1856},[91,9046,8018],{"class":153},[91,9048,8021],{"class":97},[91,9050,9051],{"class":250}," s;\n",[91,9053,9054,9057,9059,9062],{"class":93,"line":1873},[91,9055,9056],{"class":250},"    s.name ",[91,9058,296],{"class":153},[91,9060,9061],{"class":101}," \"张三\"",[91,9063,1415],{"class":250},[91,9065,9066,9069,9071,9074],{"class":93,"line":1878},[91,9067,9068],{"class":250},"    s.age ",[91,9070,296],{"class":153},[91,9072,9073],{"class":105}," 20",[91,9075,1415],{"class":250},[91,9077,9078,9081,9083,9086],{"class":93,"line":1883},[91,9079,9080],{"class":250},"    s.score ",[91,9082,296],{"class":153},[91,9084,9085],{"class":105}," 85",[91,9087,1415],{"class":250},[91,9089,9090,9092,9094,9097,9099],{"class":93,"line":1888},[91,9091,1675],{"class":250},[91,9093,1293],{"class":153},[91,9095,9096],{"class":101},"\"值传递:\"",[91,9098,1293],{"class":153},[91,9100,1316],{"class":250},[91,9102,9103,9106],{"class":93,"line":1902},[91,9104,9105],{"class":97},"    printStudent1",[91,9107,9108],{"class":250},"(s);\n",[91,9110,9111,9113,9115,9118,9120],{"class":93,"line":1907},[91,9112,1675],{"class":250},[91,9114,1293],{"class":153},[91,9116,9117],{"class":101},"\"地址传递:\"",[91,9119,1293],{"class":153},[91,9121,1316],{"class":250},[91,9123,9124,9127,9129,9131],{"class":93,"line":2700},[91,9125,9126],{"class":97},"    printStudent2",[91,9128,251],{"class":250},[91,9130,602],{"class":153},[91,9132,9133],{"class":250},"s); \n",[91,9135,9136,9138,9140],{"class":93,"line":2714},[91,9137,4213],{"class":153},[91,9139,4216],{"class":105},[91,9141,1415],{"class":250},[91,9143,9144],{"class":93,"line":2722},[91,9145,1689],{"class":250},[21,9147,9148],{},"注意：",[1256,9150,9151,9154],{},[17,9152,9153],{},"1.先定义结构体，不要在函数中写结构体的定义",[17,9155,9156],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[190,9158,9160],{"id":9159},"_46结构体中const使用场景","4.6结构体中const使用场景",[21,9162,9163],{},"用const防止误操作",[82,9165,9167],{"className":238,"code":9166,"language":240,"meta":26,"style":26},"#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",[88,9168,9169,9175,9185,9191,9196,9200,9204,9210,9216,9220,9236,9240,9263,9267,9275,9279,9300,9307,9311],{"__ignoreMap":26},[91,9170,9171,9173],{"class":93,"line":94},[91,9172,2073],{"class":153},[91,9174,2076],{"class":101},[91,9176,9177,9179,9181,9183],{"class":93,"line":38},[91,9178,2081],{"class":153},[91,9180,2084],{"class":153},[91,9182,2087],{"class":97},[91,9184,1415],{"class":250},[91,9186,9187,9189],{"class":93,"line":1304},[91,9188,2073],{"class":153},[91,9190,7872],{"class":101},[91,9192,9193],{"class":93,"line":1319},[91,9194,9195],{"class":250},"sctuct Student\n",[91,9197,9198],{"class":93,"line":1325},[91,9199,1670],{"class":250},[91,9201,9202],{"class":93,"line":1339},[91,9203,7908],{"class":250},[91,9205,9206,9208],{"class":93,"line":1345},[91,9207,2108],{"class":153},[91,9209,7920],{"class":250},[91,9211,9212,9214],{"class":93,"line":1436},[91,9213,2108],{"class":153},[91,9215,7932],{"class":250},[91,9217,9218],{"class":93,"line":1442},[91,9219,4118],{"class":250},[91,9221,9222,9224,9227,9229,9232,9234],{"class":93,"line":1454},[91,9223,5487],{"class":153},[91,9225,9226],{"class":97}," printStudents",[91,9228,251],{"class":250},[91,9230,9231],{"class":97},"student",[91,9233,8551],{"class":5339},[91,9235,257],{"class":250},[91,9237,9238],{"class":93,"line":1736},[91,9239,1670],{"class":250},[91,9241,9242,9244,9246,9249,9251,9254,9256,9259,9261],{"class":93,"line":1741},[91,9243,1675],{"class":250},[91,9245,1293],{"class":153},[91,9247,9248],{"class":250},"s.name",[91,9250,1293],{"class":153},[91,9252,9253],{"class":250},"s.age",[91,9255,1293],{"class":153},[91,9257,9258],{"class":250},"s.score",[91,9260,1293],{"class":153},[91,9262,1316],{"class":250},[91,9264,9265],{"class":93,"line":1747},[91,9266,1689],{"class":250},[91,9268,9269,9271,9273],{"class":93,"line":1752},[91,9270,254],{"class":153},[91,9272,2096],{"class":97},[91,9274,6101],{"class":250},[91,9276,9277],{"class":93,"line":1766},[91,9278,1670],{"class":250},[91,9280,9281,9284,9286,9288,9290,9292,9294,9296,9298],{"class":93,"line":1771},[91,9282,9283],{"class":250},"    Student s",[91,9285,296],{"class":153},[91,9287,1145],{"class":250},[91,9289,8039],{"class":101},[91,9291,627],{"class":250},[91,9293,899],{"class":105},[91,9295,627],{"class":250},[91,9297,899],{"class":105},[91,9299,4118],{"class":250},[91,9301,9302,9305],{"class":93,"line":1777},[91,9303,9304],{"class":97},"    printStudent",[91,9306,9108],{"class":250},[91,9308,9309],{"class":93,"line":1798},[91,9310,2523],{"emptyLinePlaceholder":175},[91,9312,9313],{"class":93,"line":1803},[91,9314,1689],{"class":250},[21,9316,9148],{},[1256,9318,9319,9322,9325],{},[17,9320,9321],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[17,9323,9324],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[17,9326,9327],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[82,9329,9331],{"className":238,"code":9330,"language":240,"meta":26,"style":26},"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",[88,9332,9333,9352,9356,9361,9381],{"__ignoreMap":26},[91,9334,9335,9337,9339,9341,9343,9346,9348,9350],{"class":93,"line":94},[91,9336,5487],{"class":153},[91,9338,9226],{"class":97},[91,9340,251],{"class":250},[91,9342,6915],{"class":153},[91,9344,9345],{"class":97}," student",[91,9347,6641],{"class":153},[91,9349,944],{"class":5339},[91,9351,257],{"class":250},[91,9353,9354],{"class":93,"line":38},[91,9355,1670],{"class":250},[91,9357,9358],{"class":93,"line":1304},[91,9359,9360],{"class":308},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[91,9362,9363,9365,9367,9369,9371,9373,9375,9377,9379],{"class":93,"line":1319},[91,9364,1675],{"class":250},[91,9366,1293],{"class":153},[91,9368,9248],{"class":250},[91,9370,1293],{"class":153},[91,9372,9253],{"class":250},[91,9374,1293],{"class":153},[91,9376,9258],{"class":250},[91,9378,1293],{"class":153},[91,9380,1316],{"class":250},[91,9382,9383],{"class":93,"line":1325},[91,9384,1689],{"class":250},[190,9386,9388],{"id":9387},"_47案例","4.7案例",[14,9390,9391],{},[17,9392,9393],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[82,9395,9397],{"className":238,"code":9396,"language":240,"meta":26,"style":26},"#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",[88,9398,9399,9405,9415,9421,9428,9432,9438,9442,9447,9453,9459,9463,9467,9473,9477,9482,9487,9500,9504,9509,9535,9539,9551,9578,9582,9594,9604,9608,9613,9642,9646,9658,9667,9694,9705,9715,9719,9723,9727,9732,9756,9760,9784,9788,9807,9833,9837,9862,9885,9909,9914,9919,9924,9933,9938,9944,9965,9971,9985,9991,10018,10027,10033,10041,10046],{"__ignoreMap":26},[91,9400,9401,9403],{"class":93,"line":94},[91,9402,2073],{"class":153},[91,9404,2076],{"class":101},[91,9406,9407,9409,9411,9413],{"class":93,"line":38},[91,9408,2081],{"class":153},[91,9410,2084],{"class":153},[91,9412,2087],{"class":97},[91,9414,1415],{"class":250},[91,9416,9417,9419],{"class":93,"line":1304},[91,9418,2073],{"class":153},[91,9420,7872],{"class":101},[91,9422,9423,9425],{"class":93,"line":1319},[91,9424,2073],{"class":153},[91,9426,9427],{"class":101},"\u003Cctime>\n",[91,9429,9430],{"class":93,"line":1325},[91,9431,8661],{"class":308},[91,9433,9434,9436],{"class":93,"line":1339},[91,9435,7882],{"class":153},[91,9437,7885],{"class":97},[91,9439,9440],{"class":93,"line":1345},[91,9441,1670],{"class":250},[91,9443,9444],{"class":93,"line":1436},[91,9445,9446],{"class":250},"    string sName;\n",[91,9448,9449,9451],{"class":93,"line":1442},[91,9450,2108],{"class":153},[91,9452,7920],{"class":250},[91,9454,9455,9457],{"class":93,"line":1454},[91,9456,2108],{"class":153},[91,9458,7932],{"class":250},[91,9460,9461],{"class":93,"line":1736},[91,9462,4118],{"class":250},[91,9464,9465],{"class":93,"line":1741},[91,9466,8698],{"class":308},[91,9468,9469,9471],{"class":93,"line":1747},[91,9470,7882],{"class":153},[91,9472,8705],{"class":97},[91,9474,9475],{"class":93,"line":1752},[91,9476,1670],{"class":250},[91,9478,9479],{"class":93,"line":1766},[91,9480,9481],{"class":250},"    string tName;\n",[91,9483,9484],{"class":93,"line":1771},[91,9485,9486],{"class":308},"    \u002F\u002F学生数组\n",[91,9488,9489,9491,9493,9496,9498],{"class":93,"line":1777},[91,9490,8018],{"class":153},[91,9492,8021],{"class":97},[91,9494,9495],{"class":250}," sArray[",[91,9497,568],{"class":105},[91,9499,4813],{"class":250},[91,9501,9502],{"class":93,"line":1798},[91,9503,4118],{"class":250},[91,9505,9506],{"class":93,"line":1803},[91,9507,9508],{"class":308},"\u002F\u002F给老师和学生赋值的函数\n",[91,9510,9511,9513,9516,9518,9520,9523,9526,9529,9531,9533],{"class":93,"line":1817},[91,9512,5487],{"class":153},[91,9514,9515],{"class":97}," allocateSpace",[91,9517,251],{"class":250},[91,9519,7882],{"class":153},[91,9521,9522],{"class":97}," Teacher",[91,9524,9525],{"class":5339}," tArray",[91,9527,9528],{"class":250},"[],",[91,9530,254],{"class":153},[91,9532,7454],{"class":5339},[91,9534,257],{"class":250},[91,9536,9537],{"class":93,"line":1822},[91,9538,1670],{"class":250},[91,9540,9541,9544,9546,9549],{"class":93,"line":1851},[91,9542,9543],{"class":250},"    string nameSeed",[91,9545,296],{"class":153},[91,9547,9548],{"class":101},"\"ABCDE\"",[91,9550,1415],{"class":250},[91,9552,9553,9555,9557,9559,9562,9564,9566,9569,9571,9574,9576],{"class":93,"line":1856},[91,9554,3324],{"class":153},[91,9556,1782],{"class":250},[91,9558,254],{"class":153},[91,9560,9561],{"class":250}," i ",[91,9563,296],{"class":153},[91,9565,4216],{"class":105},[91,9567,9568],{"class":250},"; i ",[91,9570,1159],{"class":153},[91,9572,9573],{"class":250}," len; i",[91,9575,2415],{"class":153},[91,9577,257],{"class":250},[91,9579,9580],{"class":93,"line":1873},[91,9581,2153],{"class":250},[91,9583,9584,9587,9589,9592],{"class":93,"line":1878},[91,9585,9586],{"class":250},"        tArray[i].tName ",[91,9588,296],{"class":153},[91,9590,9591],{"class":101}," \"Teacher_\"",[91,9593,1415],{"class":250},[91,9595,9596,9598,9601],{"class":93,"line":1883},[91,9597,9586],{"class":250},[91,9599,9600],{"class":153},"+=",[91,9602,9603],{"class":250},"nameSeed[i];\n",[91,9605,9606],{"class":93,"line":1888},[91,9607,2523],{"emptyLinePlaceholder":175},[91,9609,9610],{"class":93,"line":1902},[91,9611,9612],{"class":308},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[91,9614,9615,9617,9619,9621,9624,9626,9628,9631,9633,9635,9638,9640],{"class":93,"line":1907},[91,9616,3526],{"class":153},[91,9618,1782],{"class":250},[91,9620,254],{"class":153},[91,9622,9623],{"class":250}," j ",[91,9625,296],{"class":153},[91,9627,4216],{"class":105},[91,9629,9630],{"class":250},"; j ",[91,9632,1159],{"class":153},[91,9634,2271],{"class":105},[91,9636,9637],{"class":250},"; j",[91,9639,2415],{"class":153},[91,9641,257],{"class":250},[91,9643,9644],{"class":93,"line":2700},[91,9645,2633],{"class":250},[91,9647,9648,9651,9653,9656],{"class":93,"line":2714},[91,9649,9650],{"class":250},"            tArray[i].sArray[j].sName ",[91,9652,296],{"class":153},[91,9654,9655],{"class":101}," \"Student_\"",[91,9657,1415],{"class":250},[91,9659,9660,9662,9664],{"class":93,"line":2722},[91,9661,9650],{"class":250},[91,9663,9600],{"class":153},[91,9665,9666],{"class":250}," nameSeed[j];\n",[91,9668,9669,9672,9675,9677,9679,9681,9683,9685,9687,9689,9691],{"class":93,"line":2727},[91,9670,9671],{"class":153},"            int",[91,9673,9674],{"class":250}," random",[91,9676,296],{"class":153},[91,9678,2547],{"class":97},[91,9680,2550],{"class":250},[91,9682,577],{"class":153},[91,9684,1156],{"class":105},[91,9686,730],{"class":153},[91,9688,650],{"class":105},[91,9690,305],{"class":250},[91,9692,9693],{"class":308},"\u002F\u002F40~99\n",[91,9695,9696,9699,9701,9703],{"class":93,"line":2733},[91,9697,9698],{"class":250},"            tArray[i].sArray[j].age ",[91,9700,296],{"class":153},[91,9702,9073],{"class":105},[91,9704,1415],{"class":250},[91,9706,9707,9710,9712],{"class":93,"line":2739},[91,9708,9709],{"class":250},"            tArray[i].sArray[j].score ",[91,9711,296],{"class":153},[91,9713,9714],{"class":250}," random;\n",[91,9716,9717],{"class":93,"line":2744},[91,9718,2652],{"class":250},[91,9720,9721],{"class":93,"line":8071},[91,9722,2310],{"class":250},[91,9724,9725],{"class":93,"line":8095},[91,9726,1689],{"class":250},[91,9728,9729],{"class":93,"line":8100},[91,9730,9731],{"class":308},"\u002F\u002F打印所有信息的函数\n",[91,9733,9734,9736,9739,9741,9743,9745,9747,9750,9752,9754],{"class":93,"line":8106},[91,9735,5487],{"class":153},[91,9737,9738],{"class":97}," printInfo",[91,9740,251],{"class":250},[91,9742,7882],{"class":153},[91,9744,9522],{"class":97},[91,9746,9525],{"class":5339},[91,9748,9749],{"class":250},"[], ",[91,9751,254],{"class":153},[91,9753,7454],{"class":5339},[91,9755,257],{"class":250},[91,9757,9758],{"class":93,"line":8133},[91,9759,1670],{"class":250},[91,9761,9762,9764,9766,9768,9770,9772,9774,9776,9778,9780,9782],{"class":93,"line":8138},[91,9763,3324],{"class":153},[91,9765,1782],{"class":250},[91,9767,254],{"class":153},[91,9769,9561],{"class":250},[91,9771,296],{"class":153},[91,9773,4216],{"class":105},[91,9775,9568],{"class":250},[91,9777,1159],{"class":153},[91,9779,9573],{"class":250},[91,9781,2415],{"class":153},[91,9783,257],{"class":250},[91,9785,9786],{"class":93,"line":8144},[91,9787,2153],{"class":250},[91,9789,9790,9793,9795,9798,9800,9803,9805],{"class":93,"line":8156},[91,9791,9792],{"class":250},"        cout ",[91,9794,1293],{"class":153},[91,9796,9797],{"class":101}," \"Teacher: \"",[91,9799,1569],{"class":153},[91,9801,9802],{"class":250}," tArray[i].tName ",[91,9804,1293],{"class":153},[91,9806,8963],{"class":250},[91,9808,9809,9811,9813,9815,9817,9819,9821,9823,9825,9827,9829,9831],{"class":93,"line":8168},[91,9810,3526],{"class":153},[91,9812,1782],{"class":250},[91,9814,254],{"class":153},[91,9816,9623],{"class":250},[91,9818,296],{"class":153},[91,9820,4216],{"class":105},[91,9822,9630],{"class":250},[91,9824,1159],{"class":153},[91,9826,2271],{"class":105},[91,9828,9637],{"class":250},[91,9830,2415],{"class":153},[91,9832,257],{"class":250},[91,9834,9835],{"class":93,"line":8180},[91,9836,2633],{"class":250},[91,9838,9840,9843,9845,9848,9850,9853,9855,9858,9860],{"class":93,"line":9839},47,[91,9841,9842],{"class":250},"            cout ",[91,9844,1293],{"class":153},[91,9846,9847],{"class":101}," \"",[91,9849,1355],{"class":105},[91,9851,9852],{"class":101},"Student: \"",[91,9854,1569],{"class":153},[91,9856,9857],{"class":250}," tArray[i].sArray[j].sName",[91,9859,1293],{"class":153},[91,9861,1316],{"class":250},[91,9863,9865,9867,9869,9871,9873,9876,9878,9881,9883],{"class":93,"line":9864},48,[91,9866,9842],{"class":250},[91,9868,1293],{"class":153},[91,9870,9847],{"class":101},[91,9872,1355],{"class":105},[91,9874,9875],{"class":101},"Age: \"",[91,9877,1569],{"class":153},[91,9879,9880],{"class":250}," tArray[i].sArray[j].age ",[91,9882,1293],{"class":153},[91,9884,8963],{"class":250},[91,9886,9888,9890,9892,9894,9896,9899,9901,9904,9906],{"class":93,"line":9887},49,[91,9889,9842],{"class":250},[91,9891,1293],{"class":153},[91,9893,9847],{"class":101},[91,9895,1355],{"class":105},[91,9897,9898],{"class":101},"Score: \"",[91,9900,1569],{"class":153},[91,9902,9903],{"class":250}," tArray[i].sArray[j].score ",[91,9905,1293],{"class":153},[91,9907,9908],{"class":250}," endl;   \n",[91,9910,9912],{"class":93,"line":9911},50,[91,9913,2652],{"class":250},[91,9915,9917],{"class":93,"line":9916},51,[91,9918,2310],{"class":250},[91,9920,9922],{"class":93,"line":9921},52,[91,9923,1689],{"class":250},[91,9925,9927,9929,9931],{"class":93,"line":9926},53,[91,9928,254],{"class":153},[91,9930,2096],{"class":97},[91,9932,2099],{"class":250},[91,9934,9936],{"class":93,"line":9935},54,[91,9937,1670],{"class":250},[91,9939,9941],{"class":93,"line":9940},55,[91,9942,9943],{"class":308},"    \u002F\u002F随机数种子\n",[91,9945,9947,9949,9951,9953,9955,9957,9959,9961,9963],{"class":93,"line":9946},56,[91,9948,2496],{"class":97},[91,9950,2499],{"class":250},[91,9952,2502],{"class":153},[91,9954,2505],{"class":153},[91,9956,678],{"class":250},[91,9958,2510],{"class":97},[91,9960,251],{"class":250},[91,9962,2515],{"class":105},[91,9964,2518],{"class":250},[91,9966,9968],{"class":93,"line":9967},57,[91,9969,9970],{"class":308},"    \u002F\u002F1.创建3名老师的数组\n",[91,9972,9974,9976,9978,9981,9983],{"class":93,"line":9973},58,[91,9975,8018],{"class":153},[91,9977,9522],{"class":97},[91,9979,9980],{"class":250}," tArray[",[91,9982,321],{"class":105},[91,9984,4813],{"class":250},[91,9986,9988],{"class":93,"line":9987},59,[91,9989,9990],{"class":308},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[91,9992,9994,9996,9999,10001,10004,10007,10009,10011,10014,10016],{"class":93,"line":9993},60,[91,9995,2108],{"class":153},[91,9997,9998],{"class":250}," len ",[91,10000,296],{"class":153},[91,10002,10003],{"class":153}," sizeof",[91,10005,10006],{"class":250},"(tArray) ",[91,10008,833],{"class":153},[91,10010,10003],{"class":153},[91,10012,10013],{"class":250},"(tArray[",[91,10015,440],{"class":105},[91,10017,3979],{"class":250},[91,10019,10021,10024],{"class":93,"line":10020},61,[91,10022,10023],{"class":97},"    allocateSpace",[91,10025,10026],{"class":250},"(tArray, len);\n",[91,10028,10030],{"class":93,"line":10029},62,[91,10031,10032],{"class":308},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[91,10034,10036,10039],{"class":93,"line":10035},63,[91,10037,10038],{"class":97},"    printInfo",[91,10040,10026],{"class":250},[91,10042,10044],{"class":93,"line":10043},64,[91,10045,2523],{"emptyLinePlaceholder":175},[91,10047,10049],{"class":93,"line":10048},65,[91,10050,1689],{"class":250},[14,10052,10053],{"start":38},[17,10054,10055,10058],{},[398,10056,10057],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[21,10060,10061],{},"五名英雄信息如下：",[82,10063,10067],{"className":10064,"code":10065,"language":10066,"meta":26,"style":26},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[88,10068,10069,10087,10104,10121,10138],{"__ignoreMap":26},[91,10070,10071,10073,10076,10078,10080,10082,10085],{"class":93,"line":94},[91,10072,5040],{"class":250},[91,10074,10075],{"class":101},"\"刘备\"",[91,10077,627],{"class":250},[91,10079,1024],{"class":105},[91,10081,627],{"class":250},[91,10083,10084],{"class":101},"\"男\"",[91,10086,5053],{"class":250},[91,10088,10089,10091,10094,10096,10098,10100,10102],{"class":93,"line":38},[91,10090,5040],{"class":250},[91,10092,10093],{"class":101},"\"关羽\"",[91,10095,627],{"class":250},[91,10097,999],{"class":105},[91,10099,627],{"class":250},[91,10101,10084],{"class":101},[91,10103,5053],{"class":250},[91,10105,10106,10108,10111,10113,10115,10117,10119],{"class":93,"line":1304},[91,10107,5040],{"class":250},[91,10109,10110],{"class":101},"\"张飞\"",[91,10112,627],{"class":250},[91,10114,949],{"class":105},[91,10116,627],{"class":250},[91,10118,10084],{"class":101},[91,10120,5053],{"class":250},[91,10122,10123,10125,10128,10130,10132,10134,10136],{"class":93,"line":1319},[91,10124,5040],{"class":250},[91,10126,10127],{"class":101},"\"赵云\"",[91,10129,627],{"class":250},[91,10131,974],{"class":105},[91,10133,627],{"class":250},[91,10135,10084],{"class":101},[91,10137,5053],{"class":250},[91,10139,10140,10142,10145,10147,10149,10151,10154],{"class":93,"line":1325},[91,10141,5040],{"class":250},[91,10143,10144],{"class":101},"\"貂蝉\"",[91,10146,627],{"class":250},[91,10148,924],{"class":105},[91,10150,627],{"class":250},[91,10152,10153],{"class":101},"\"女\"",[91,10155,5053],{"class":250},[21,10157,10158],{},"代码：",[82,10160,10162],{"className":238,"code":10161,"language":240,"meta":26,"style":26},"#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",[88,10163,10164,10170,10180,10186,10193,10197,10201,10207,10212,10216,10221,10244,10248,10273,10277,10310,10315,10344,10349,10364,10390,10410,10415,10420,10424,10428,10433,10455,10459,10483,10487,10549,10553,10557,10565,10569,10574,10585,10589,10605,10621,10637,10653,10669,10673,10693,10715,10720,10733,10740,10745,10751,10756,10769,10775],{"__ignoreMap":26},[91,10165,10166,10168],{"class":93,"line":94},[91,10167,2073],{"class":153},[91,10169,2076],{"class":101},[91,10171,10172,10174,10176,10178],{"class":93,"line":38},[91,10173,2081],{"class":153},[91,10175,2084],{"class":153},[91,10177,2087],{"class":97},[91,10179,1415],{"class":250},[91,10181,10182,10184],{"class":93,"line":1304},[91,10183,2073],{"class":153},[91,10185,7872],{"class":101},[91,10187,10188,10190],{"class":93,"line":1319},[91,10189,7882],{"class":153},[91,10191,10192],{"class":97}," Sanguo\n",[91,10194,10195],{"class":93,"line":1325},[91,10196,1670],{"class":250},[91,10198,10199],{"class":93,"line":1339},[91,10200,7908],{"class":250},[91,10202,10203,10205],{"class":93,"line":1345},[91,10204,2108],{"class":153},[91,10206,7920],{"class":250},[91,10208,10209],{"class":93,"line":1436},[91,10210,10211],{"class":250},"    string gender;\n",[91,10213,10214],{"class":93,"line":1442},[91,10215,4118],{"class":250},[91,10217,10218],{"class":93,"line":1454},[91,10219,10220],{"class":308},"\u002F\u002F定义排序函数\n",[91,10222,10223,10225,10227,10229,10232,10234,10236,10238,10240,10242],{"class":93,"line":1736},[91,10224,5487],{"class":153},[91,10226,7439],{"class":97},[91,10228,251],{"class":250},[91,10230,10231],{"class":97},"Sanguo",[91,10233,6641],{"class":153},[91,10235,944],{"class":5339},[91,10237,627],{"class":250},[91,10239,254],{"class":153},[91,10241,7454],{"class":5339},[91,10243,257],{"class":250},[91,10245,10246],{"class":93,"line":1741},[91,10247,1670],{"class":250},[91,10249,10250,10252,10254,10256,10258,10260,10262,10264,10266,10269,10271],{"class":93,"line":1747},[91,10251,3324],{"class":153},[91,10253,251],{"class":250},[91,10255,254],{"class":153},[91,10257,3155],{"class":250},[91,10259,296],{"class":153},[91,10261,440],{"class":105},[91,10263,3162],{"class":250},[91,10265,1159],{"class":153},[91,10267,10268],{"class":250},"len;i",[91,10270,2415],{"class":153},[91,10272,257],{"class":250},[91,10274,10275],{"class":93,"line":1752},[91,10276,2153],{"class":250},[91,10278,10279,10282,10284,10286,10288,10290,10292,10294,10296,10298,10300,10302,10304,10306,10308],{"class":93,"line":1766},[91,10280,10281],{"class":153},"     for",[91,10283,1782],{"class":250},[91,10285,254],{"class":153},[91,10287,3533],{"class":250},[91,10289,296],{"class":153},[91,10291,440],{"class":105},[91,10293,3540],{"class":250},[91,10295,1159],{"class":153},[91,10297,7481],{"class":250},[91,10299,781],{"class":153},[91,10301,466],{"class":105},[91,10303,781],{"class":153},[91,10305,3673],{"class":250},[91,10307,2415],{"class":153},[91,10309,257],{"class":250},[91,10311,10312],{"class":93,"line":1771},[91,10313,10314],{"class":250},"     {\n",[91,10316,10317,10320,10323,10325,10328,10330,10333,10335,10337,10339,10341],{"class":93,"line":1777},[91,10318,10319],{"class":153},"         if",[91,10321,10322],{"class":250}," ((s",[91,10324,730],{"class":153},[91,10326,10327],{"class":250},"j)->age ",[91,10329,1209],{"class":153},[91,10331,10332],{"class":250}," (s",[91,10334,730],{"class":153},[91,10336,716],{"class":250},[91,10338,730],{"class":153},[91,10340,466],{"class":105},[91,10342,10343],{"class":250},")->age)\n",[91,10345,10346],{"class":93,"line":1798},[91,10347,10348],{"class":250},"         {\n",[91,10350,10351,10354,10356,10359,10361],{"class":93,"line":1803},[91,10352,10353],{"class":250},"             Sanguo temp",[91,10355,7276],{"class":153},[91,10357,10358],{"class":250},"(s",[91,10360,730],{"class":153},[91,10362,10363],{"class":250},"j);\n",[91,10365,10366,10369,10371,10373,10376,10378,10380,10382,10384,10386,10388],{"class":93,"line":1817},[91,10367,10368],{"class":153},"             *",[91,10370,10358],{"class":250},[91,10372,730],{"class":153},[91,10374,10375],{"class":250},"j)",[91,10377,7276],{"class":153},[91,10379,10358],{"class":250},[91,10381,730],{"class":153},[91,10383,716],{"class":250},[91,10385,730],{"class":153},[91,10387,466],{"class":105},[91,10389,2842],{"class":250},[91,10391,10392,10394,10396,10398,10400,10402,10404,10406,10408],{"class":93,"line":1822},[91,10393,10368],{"class":153},[91,10395,10358],{"class":250},[91,10397,730],{"class":153},[91,10399,716],{"class":250},[91,10401,730],{"class":153},[91,10403,466],{"class":105},[91,10405,678],{"class":250},[91,10407,296],{"class":153},[91,10409,4403],{"class":250},[91,10411,10412],{"class":93,"line":1851},[91,10413,10414],{"class":250},"         }\n",[91,10416,10417],{"class":93,"line":1856},[91,10418,10419],{"class":250},"     }\n",[91,10421,10422],{"class":93,"line":1873},[91,10423,2310],{"class":250},[91,10425,10426],{"class":93,"line":1878},[91,10427,1689],{"class":250},[91,10429,10430],{"class":93,"line":1883},[91,10431,10432],{"class":308},"\u002F\u002F定义打印函数\n",[91,10434,10435,10437,10439,10441,10443,10445,10447,10449,10451,10453],{"class":93,"line":1888},[91,10436,5487],{"class":153},[91,10438,9738],{"class":97},[91,10440,251],{"class":250},[91,10442,10231],{"class":97},[91,10444,6641],{"class":153},[91,10446,944],{"class":5339},[91,10448,627],{"class":250},[91,10450,254],{"class":153},[91,10452,7454],{"class":5339},[91,10454,257],{"class":250},[91,10456,10457],{"class":93,"line":1902},[91,10458,1670],{"class":250},[91,10460,10461,10463,10465,10467,10469,10471,10473,10475,10477,10479,10481],{"class":93,"line":1907},[91,10462,3324],{"class":153},[91,10464,1782],{"class":250},[91,10466,254],{"class":153},[91,10468,3155],{"class":250},[91,10470,296],{"class":153},[91,10472,440],{"class":105},[91,10474,3162],{"class":250},[91,10476,1159],{"class":153},[91,10478,10268],{"class":250},[91,10480,2415],{"class":153},[91,10482,257],{"class":250},[91,10484,10485],{"class":93,"line":2700},[91,10486,2153],{"class":250},[91,10488,10489,10491,10493,10495,10497,10500,10502,10504,10506,10509,10511,10513,10515,10518,10520,10522,10524,10527,10529,10531,10533,10536,10538,10540,10542,10545,10547],{"class":93,"line":2714},[91,10490,3574],{"class":250},[91,10492,1293],{"class":153},[91,10494,500],{"class":101},[91,10496,1355],{"class":105},[91,10498,10499],{"class":101},"姓名：\"",[91,10501,1293],{"class":153},[91,10503,10358],{"class":250},[91,10505,730],{"class":153},[91,10507,10508],{"class":250},"i)->name",[91,10510,1293],{"class":153},[91,10512,500],{"class":101},[91,10514,1355],{"class":105},[91,10516,10517],{"class":101},"年龄：\"",[91,10519,1293],{"class":153},[91,10521,10358],{"class":250},[91,10523,730],{"class":153},[91,10525,10526],{"class":250},"i)->age",[91,10528,1293],{"class":153},[91,10530,500],{"class":101},[91,10532,1355],{"class":105},[91,10534,10535],{"class":101},"性别：\"",[91,10537,1293],{"class":153},[91,10539,10358],{"class":250},[91,10541,730],{"class":153},[91,10543,10544],{"class":250},"i)->gender",[91,10546,1293],{"class":153},[91,10548,1316],{"class":250},[91,10550,10551],{"class":93,"line":2722},[91,10552,2310],{"class":250},[91,10554,10555],{"class":93,"line":2727},[91,10556,1689],{"class":250},[91,10558,10559,10561,10563],{"class":93,"line":2733},[91,10560,254],{"class":153},[91,10562,2096],{"class":97},[91,10564,2099],{"class":250},[91,10566,10567],{"class":93,"line":2739},[91,10568,1670],{"class":250},[91,10570,10571],{"class":93,"line":2744},[91,10572,10573],{"class":308},"    \u002F\u002F定义结构体变量\n",[91,10575,10576,10579,10581,10583],{"class":93,"line":8071},[91,10577,10578],{"class":250},"    Sanguo s1[",[91,10580,568],{"class":105},[91,10582,1189],{"class":250},[91,10584,5031],{"class":153},[91,10586,10587],{"class":93,"line":8095},[91,10588,2153],{"class":250},[91,10590,10591,10593,10595,10597,10599,10601,10603],{"class":93,"line":8100},[91,10592,5040],{"class":250},[91,10594,10075],{"class":101},[91,10596,627],{"class":250},[91,10598,1024],{"class":105},[91,10600,627],{"class":250},[91,10602,10084],{"class":101},[91,10604,5053],{"class":250},[91,10606,10607,10609,10611,10613,10615,10617,10619],{"class":93,"line":8106},[91,10608,5040],{"class":250},[91,10610,10093],{"class":101},[91,10612,627],{"class":250},[91,10614,999],{"class":105},[91,10616,627],{"class":250},[91,10618,10084],{"class":101},[91,10620,5053],{"class":250},[91,10622,10623,10625,10627,10629,10631,10633,10635],{"class":93,"line":8133},[91,10624,5040],{"class":250},[91,10626,10110],{"class":101},[91,10628,627],{"class":250},[91,10630,949],{"class":105},[91,10632,627],{"class":250},[91,10634,10084],{"class":101},[91,10636,5053],{"class":250},[91,10638,10639,10641,10643,10645,10647,10649,10651],{"class":93,"line":8138},[91,10640,5040],{"class":250},[91,10642,10127],{"class":101},[91,10644,627],{"class":250},[91,10646,974],{"class":105},[91,10648,627],{"class":250},[91,10650,10084],{"class":101},[91,10652,5053],{"class":250},[91,10654,10655,10657,10659,10661,10663,10665,10667],{"class":93,"line":8144},[91,10656,5040],{"class":250},[91,10658,10144],{"class":101},[91,10660,627],{"class":250},[91,10662,924],{"class":105},[91,10664,627],{"class":250},[91,10666,10153],{"class":101},[91,10668,5053],{"class":250},[91,10670,10671],{"class":93,"line":8156},[91,10672,5074],{"class":250},[91,10674,10675,10677,10679,10681,10684,10686,10689,10691],{"class":93,"line":8168},[91,10676,2108],{"class":153},[91,10678,7454],{"class":250},[91,10680,4326],{"class":153},[91,10682,10683],{"class":250},"(s1)",[91,10685,4332],{"class":153},[91,10687,10688],{"class":250},"(s1[",[91,10690,440],{"class":105},[91,10692,3979],{"class":250},[91,10694,10695,10698,10700,10703,10705,10708,10711,10713],{"class":93,"line":8180},[91,10696,10697],{"class":250},"    Sanguo ",[91,10699,704],{"class":153},[91,10701,10702],{"class":250},"s ",[91,10704,296],{"class":153},[91,10706,10707],{"class":153}," &",[91,10709,10710],{"class":250},"s1[",[91,10712,440],{"class":105},[91,10714,4813],{"class":250},[91,10716,10717],{"class":93,"line":9839},[91,10718,10719],{"class":308},"    \u002F\u002F排序前：\n",[91,10721,10722,10724,10726,10729,10731],{"class":93,"line":9864},[91,10723,6652],{"class":250},[91,10725,1293],{"class":153},[91,10727,10728],{"class":101}," \"排序前：\"",[91,10730,1569],{"class":153},[91,10732,8963],{"class":250},[91,10734,10735,10737],{"class":93,"line":9887},[91,10736,10038],{"class":97},[91,10738,10739],{"class":250},"(s,len);\n",[91,10741,10742],{"class":93,"line":9911},[91,10743,10744],{"class":308},"    \u002F\u002F调用排序函数\n",[91,10746,10747,10749],{"class":93,"line":9916},[91,10748,7721],{"class":97},[91,10750,10739],{"class":250},[91,10752,10753],{"class":93,"line":9921},[91,10754,10755],{"class":308},"    \u002F\u002F排序后\n",[91,10757,10758,10760,10762,10765,10767],{"class":93,"line":9926},[91,10759,6652],{"class":250},[91,10761,1293],{"class":153},[91,10763,10764],{"class":101}," \"排序后：\"",[91,10766,1569],{"class":153},[91,10768,8963],{"class":250},[91,10770,10771,10773],{"class":93,"line":9935},[91,10772,10038],{"class":97},[91,10774,10739],{"class":250},[91,10776,10777],{"class":93,"line":9940},[91,10778,1689],{"class":250},[21,10780,10781,10782,10784],{},"注意：使用指针时直接用传首地址**&s",[91,10783,440],{},"**",[168,10786,10787],{},"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":26,"searchDepth":38,"depth":38,"links":10789},[10790,10791,10792,10793,10794,10795,10796],{"id":7826,"depth":38,"text":7827},{"id":8188,"depth":38,"text":8189},{"id":8457,"depth":38,"text":8458},{"id":8622,"depth":38,"text":8623},{"id":8838,"depth":38,"text":8839},{"id":9159,"depth":38,"text":9160},{"id":9387,"depth":38,"text":9388},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7815,"description":7823},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10803,"title":10804,"body":10805,"description":26,"extension":173,"meta":12148,"navigation":175,"path":12149,"seo":12150,"stem":12151,"__hash__":12152},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10806,"toc":12142},[10807,10810,10814,10820,10834,10839,10842,10846,10853,10859,10862,10869,10875,10880,10883,10886,10889,11453,11456,11470,11474,11479,11495,11635,11638,11644,11647,11652,11660,11768,11771,11776,11779,11784,11787,11793,11796,12139],[10,10808,10804],{"id":10809},"_5程序内存模型",[190,10811,10813],{"id":10812},"_51内存分区模型","5.1内存分区模型",[21,10815,10816,10817],{},"C++程序在执行时，将内存大方向划分为",[398,10818,10819],{},"4个区域",[1256,10821,10822,10825,10828,10831],{},[17,10823,10824],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[17,10826,10827],{},"全局区：存放全局变量和静态变量以及常量",[17,10829,10830],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[17,10832,10833],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[21,10835,10836],{},[398,10837,10838],{},"内存四区意义：",[21,10840,10841],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[217,10843,10845],{"id":10844},"_511程序运行前","5.1.1程序运行前",[21,10847,10848,10849,10852],{},"​\t在程序编译后，生成了exe可执行程序，",[398,10850,10851],{},"未执行该程序前","分为两个区域",[21,10854,10855,10856],{},"​\t",[398,10857,10858],{},"代码区：",[21,10860,10861],{},"​\t\t存放 CPU 执行的机器指令",[21,10863,10864,10865,10868],{},"​\t\t代码区是",[398,10866,10867],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[21,10870,10864,10871,10874],{},[398,10872,10873],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[21,10876,10855,10877],{},[398,10878,10879],{},"全局区：",[21,10881,10882],{},"​\t\t全局变量和静态变量存放在此.",[21,10884,10885],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[21,10887,10888],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[82,10890,10892],{"className":238,"code":10891,"language":240,"meta":26,"style":26},"\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",[88,10893,10894,10899,10912,10925,10929,10934,10949,10964,10968,10977,10981,10986,10999,11012,11016,11021,11047,11073,11077,11104,11130,11134,11139,11155,11170,11174,11200,11226,11230,11255,11280,11284,11310,11336,11340,11356,11371,11397,11423,11427,11437,11441,11449],{"__ignoreMap":26},[91,10895,10896],{"class":93,"line":94},[91,10897,10898],{"class":308},"\u002F\u002F全局变量\n",[91,10900,10901,10903,10906,10908,10910],{"class":93,"line":38},[91,10902,254],{"class":153},[91,10904,10905],{"class":250}," g_a ",[91,10907,296],{"class":153},[91,10909,2161],{"class":105},[91,10911,1415],{"class":250},[91,10913,10914,10916,10919,10921,10923],{"class":93,"line":1304},[91,10915,254],{"class":153},[91,10917,10918],{"class":250}," g_b ",[91,10920,296],{"class":153},[91,10922,2161],{"class":105},[91,10924,1415],{"class":250},[91,10926,10927],{"class":93,"line":1319},[91,10928,2523],{"emptyLinePlaceholder":175},[91,10930,10931],{"class":93,"line":1325},[91,10932,10933],{"class":308},"\u002F\u002F全局常量\n",[91,10935,10936,10938,10940,10943,10945,10947],{"class":93,"line":1339},[91,10937,6915],{"class":153},[91,10939,2505],{"class":153},[91,10941,10942],{"class":250}," c_g_a ",[91,10944,296],{"class":153},[91,10946,2161],{"class":105},[91,10948,1415],{"class":250},[91,10950,10951,10953,10955,10958,10960,10962],{"class":93,"line":1345},[91,10952,6915],{"class":153},[91,10954,2505],{"class":153},[91,10956,10957],{"class":250}," c_g_b ",[91,10959,296],{"class":153},[91,10961,2161],{"class":105},[91,10963,1415],{"class":250},[91,10965,10966],{"class":93,"line":1436},[91,10967,2523],{"emptyLinePlaceholder":175},[91,10969,10970,10972,10974],{"class":93,"line":1442},[91,10971,254],{"class":153},[91,10973,2096],{"class":97},[91,10975,10976],{"class":250},"() {\n",[91,10978,10979],{"class":93,"line":1454},[91,10980,2523],{"emptyLinePlaceholder":175},[91,10982,10983],{"class":93,"line":1736},[91,10984,10985],{"class":308},"    \u002F\u002F局部变量\n",[91,10987,10988,10990,10993,10995,10997],{"class":93,"line":1741},[91,10989,2108],{"class":153},[91,10991,10992],{"class":250}," a ",[91,10994,296],{"class":153},[91,10996,2161],{"class":105},[91,10998,1415],{"class":250},[91,11000,11001,11003,11006,11008,11010],{"class":93,"line":1747},[91,11002,2108],{"class":153},[91,11004,11005],{"class":250}," b ",[91,11007,296],{"class":153},[91,11009,2161],{"class":105},[91,11011,1415],{"class":250},[91,11013,11014],{"class":93,"line":1752},[91,11015,2523],{"emptyLinePlaceholder":175},[91,11017,11018],{"class":93,"line":1766},[91,11019,11020],{"class":308},"    \u002F\u002F打印地址\n",[91,11022,11023,11025,11027,11030,11032,11034,11036,11038,11040,11043,11045],{"class":93,"line":1771},[91,11024,6652],{"class":250},[91,11026,1293],{"class":153},[91,11028,11029],{"class":101}," \"局部变量a地址为： \"",[91,11031,1569],{"class":153},[91,11033,1782],{"class":250},[91,11035,254],{"class":153},[91,11037,678],{"class":250},[91,11039,602],{"class":153},[91,11041,11042],{"class":250},"a ",[91,11044,1293],{"class":153},[91,11046,8963],{"class":250},[91,11048,11049,11051,11053,11056,11058,11060,11062,11064,11066,11069,11071],{"class":93,"line":1777},[91,11050,6652],{"class":250},[91,11052,1293],{"class":153},[91,11054,11055],{"class":101}," \"局部变量b地址为： \"",[91,11057,1569],{"class":153},[91,11059,1782],{"class":250},[91,11061,254],{"class":153},[91,11063,678],{"class":250},[91,11065,602],{"class":153},[91,11067,11068],{"class":250},"b ",[91,11070,1293],{"class":153},[91,11072,8963],{"class":250},[91,11074,11075],{"class":93,"line":1798},[91,11076,2523],{"emptyLinePlaceholder":175},[91,11078,11079,11081,11083,11086,11088,11091,11093,11095,11097,11100,11102],{"class":93,"line":1803},[91,11080,6652],{"class":250},[91,11082,1293],{"class":153},[91,11084,11085],{"class":101}," \"全局变量g_a地址为： \"",[91,11087,1569],{"class":153},[91,11089,11090],{"class":250},"  (",[91,11092,254],{"class":153},[91,11094,678],{"class":250},[91,11096,602],{"class":153},[91,11098,11099],{"class":250},"g_a ",[91,11101,1293],{"class":153},[91,11103,8963],{"class":250},[91,11105,11106,11108,11110,11113,11115,11117,11119,11121,11123,11126,11128],{"class":93,"line":1817},[91,11107,6652],{"class":250},[91,11109,1293],{"class":153},[91,11111,11112],{"class":101}," \"全局变量g_b地址为： \"",[91,11114,1569],{"class":153},[91,11116,11090],{"class":250},[91,11118,254],{"class":153},[91,11120,678],{"class":250},[91,11122,602],{"class":153},[91,11124,11125],{"class":250},"g_b ",[91,11127,1293],{"class":153},[91,11129,8963],{"class":250},[91,11131,11132],{"class":93,"line":1822},[91,11133,2523],{"emptyLinePlaceholder":175},[91,11135,11136],{"class":93,"line":1851},[91,11137,11138],{"class":308},"    \u002F\u002F静态变量\n",[91,11140,11141,11144,11146,11149,11151,11153],{"class":93,"line":1856},[91,11142,11143],{"class":153},"    static",[91,11145,2505],{"class":153},[91,11147,11148],{"class":250}," s_a ",[91,11150,296],{"class":153},[91,11152,2161],{"class":105},[91,11154,1415],{"class":250},[91,11156,11157,11159,11161,11164,11166,11168],{"class":93,"line":1873},[91,11158,11143],{"class":153},[91,11160,2505],{"class":153},[91,11162,11163],{"class":250}," s_b ",[91,11165,296],{"class":153},[91,11167,2161],{"class":105},[91,11169,1415],{"class":250},[91,11171,11172],{"class":93,"line":1878},[91,11173,2523],{"emptyLinePlaceholder":175},[91,11175,11176,11178,11180,11183,11185,11187,11189,11191,11193,11196,11198],{"class":93,"line":1883},[91,11177,6652],{"class":250},[91,11179,1293],{"class":153},[91,11181,11182],{"class":101}," \"静态变量s_a地址为： \"",[91,11184,1569],{"class":153},[91,11186,1782],{"class":250},[91,11188,254],{"class":153},[91,11190,678],{"class":250},[91,11192,602],{"class":153},[91,11194,11195],{"class":250},"s_a ",[91,11197,1293],{"class":153},[91,11199,8963],{"class":250},[91,11201,11202,11204,11206,11209,11211,11213,11215,11217,11219,11222,11224],{"class":93,"line":1888},[91,11203,6652],{"class":250},[91,11205,1293],{"class":153},[91,11207,11208],{"class":101}," \"静态变量s_b地址为： \"",[91,11210,1569],{"class":153},[91,11212,1782],{"class":250},[91,11214,254],{"class":153},[91,11216,678],{"class":250},[91,11218,602],{"class":153},[91,11220,11221],{"class":250},"s_b ",[91,11223,1293],{"class":153},[91,11225,8963],{"class":250},[91,11227,11228],{"class":93,"line":1902},[91,11229,2523],{"emptyLinePlaceholder":175},[91,11231,11232,11234,11236,11239,11241,11243,11245,11247,11249,11251,11253],{"class":93,"line":1907},[91,11233,6652],{"class":250},[91,11235,1293],{"class":153},[91,11237,11238],{"class":101}," \"字符串常量地址为： \"",[91,11240,1569],{"class":153},[91,11242,1782],{"class":250},[91,11244,254],{"class":153},[91,11246,678],{"class":250},[91,11248,602],{"class":153},[91,11250,1311],{"class":101},[91,11252,1569],{"class":153},[91,11254,8963],{"class":250},[91,11256,11257,11259,11261,11263,11265,11267,11269,11271,11273,11276,11278],{"class":93,"line":2700},[91,11258,6652],{"class":250},[91,11260,1293],{"class":153},[91,11262,11238],{"class":101},[91,11264,1569],{"class":153},[91,11266,1782],{"class":250},[91,11268,254],{"class":153},[91,11270,678],{"class":250},[91,11272,602],{"class":153},[91,11274,11275],{"class":101},"\"hello world1\"",[91,11277,1569],{"class":153},[91,11279,8963],{"class":250},[91,11281,11282],{"class":93,"line":2714},[91,11283,2523],{"emptyLinePlaceholder":175},[91,11285,11286,11288,11290,11293,11295,11297,11299,11301,11303,11306,11308],{"class":93,"line":2722},[91,11287,6652],{"class":250},[91,11289,1293],{"class":153},[91,11291,11292],{"class":101}," \"全局常量c_g_a地址为： \"",[91,11294,1569],{"class":153},[91,11296,1782],{"class":250},[91,11298,254],{"class":153},[91,11300,678],{"class":250},[91,11302,602],{"class":153},[91,11304,11305],{"class":250},"c_g_a ",[91,11307,1293],{"class":153},[91,11309,8963],{"class":250},[91,11311,11312,11314,11316,11319,11321,11323,11325,11327,11329,11332,11334],{"class":93,"line":2727},[91,11313,6652],{"class":250},[91,11315,1293],{"class":153},[91,11317,11318],{"class":101}," \"全局常量c_g_b地址为： \"",[91,11320,1569],{"class":153},[91,11322,1782],{"class":250},[91,11324,254],{"class":153},[91,11326,678],{"class":250},[91,11328,602],{"class":153},[91,11330,11331],{"class":250},"c_g_b ",[91,11333,1293],{"class":153},[91,11335,8963],{"class":250},[91,11337,11338],{"class":93,"line":2733},[91,11339,2523],{"emptyLinePlaceholder":175},[91,11341,11342,11345,11347,11350,11352,11354],{"class":93,"line":2739},[91,11343,11344],{"class":153},"    const",[91,11346,2505],{"class":153},[91,11348,11349],{"class":250}," c_l_a ",[91,11351,296],{"class":153},[91,11353,2161],{"class":105},[91,11355,1415],{"class":250},[91,11357,11358,11360,11362,11365,11367,11369],{"class":93,"line":2744},[91,11359,11344],{"class":153},[91,11361,2505],{"class":153},[91,11363,11364],{"class":250}," c_l_b ",[91,11366,296],{"class":153},[91,11368,2161],{"class":105},[91,11370,1415],{"class":250},[91,11372,11373,11375,11377,11380,11382,11384,11386,11388,11390,11393,11395],{"class":93,"line":8071},[91,11374,6652],{"class":250},[91,11376,1293],{"class":153},[91,11378,11379],{"class":101}," \"局部常量c_l_a地址为： \"",[91,11381,1569],{"class":153},[91,11383,1782],{"class":250},[91,11385,254],{"class":153},[91,11387,678],{"class":250},[91,11389,602],{"class":153},[91,11391,11392],{"class":250},"c_l_a ",[91,11394,1293],{"class":153},[91,11396,8963],{"class":250},[91,11398,11399,11401,11403,11406,11408,11410,11412,11414,11416,11419,11421],{"class":93,"line":8095},[91,11400,6652],{"class":250},[91,11402,1293],{"class":153},[91,11404,11405],{"class":101}," \"局部常量c_l_b地址为： \"",[91,11407,1569],{"class":153},[91,11409,1782],{"class":250},[91,11411,254],{"class":153},[91,11413,678],{"class":250},[91,11415,602],{"class":153},[91,11417,11418],{"class":250},"c_l_b ",[91,11420,1293],{"class":153},[91,11422,8963],{"class":250},[91,11424,11425],{"class":93,"line":8100},[91,11426,2523],{"emptyLinePlaceholder":175},[91,11428,11429,11431,11433,11435],{"class":93,"line":8106},[91,11430,2426],{"class":97},[91,11432,251],{"class":250},[91,11434,2431],{"class":101},[91,11436,2842],{"class":250},[91,11438,11439],{"class":93,"line":8133},[91,11440,2523],{"emptyLinePlaceholder":175},[91,11442,11443,11445,11447],{"class":93,"line":8138},[91,11444,4213],{"class":153},[91,11446,4216],{"class":105},[91,11448,1415],{"class":250},[91,11450,11451],{"class":93,"line":8144},[91,11452,1689],{"class":250},[21,11454,11455],{},"总结：",[1256,11457,11458,11461,11464,11467],{},[17,11459,11460],{},"c++中程序运行前分为全局区和代码区",[17,11462,11463],{},"代码区特点是共享和只读",[17,11465,11466],{},"全局区中存放全局变量、静态变量、常量",[17,11468,11469],{},"常量区中存放const修饰的全局常量和字符串常量",[217,11471,11473],{"id":11472},"_512程序运行后","5.1.2程序运行后",[14,11475,11476],{},[17,11477,11478],{},"栈区：",[1256,11480,11481,11488],{},[17,11482,11483,11484,11487],{},"由编译器自动分配释放, 存放",[398,11485,11486],{},"函数的参数值,局部变量","等",[17,11489,11490,11491,11494],{},"注意事项：",[398,11492,11493],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[82,11496,11498],{"className":238,"code":11497,"language":240,"meta":26,"style":26},"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",[88,11499,11500,11511,11515,11530,11542,11546,11550,11558,11563,11578,11596,11613,11623,11631],{"__ignoreMap":26},[91,11501,11502,11504,11506,11509],{"class":93,"line":94},[91,11503,254],{"class":153},[91,11505,6641],{"class":153},[91,11507,11508],{"class":97}," func",[91,11510,2099],{"class":250},[91,11512,11513],{"class":93,"line":38},[91,11514,1670],{"class":250},[91,11516,11517,11519,11521,11523,11525,11527],{"class":93,"line":1304},[91,11518,2108],{"class":153},[91,11520,10992],{"class":250},[91,11522,296],{"class":153},[91,11524,2161],{"class":105},[91,11526,305],{"class":250},[91,11528,11529],{"class":308}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[91,11531,11532,11534,11536,11539],{"class":93,"line":1319},[91,11533,4213],{"class":153},[91,11535,10707],{"class":153},[91,11537,11538],{"class":250},"a;",[91,11540,11541],{"class":308}," \u002F\u002F放回局部变量的地址\n",[91,11543,11544],{"class":93,"line":1325},[91,11545,1689],{"class":250},[91,11547,11548],{"class":93,"line":1339},[91,11549,2523],{"emptyLinePlaceholder":175},[91,11551,11552,11554,11556],{"class":93,"line":1345},[91,11553,254],{"class":153},[91,11555,2096],{"class":97},[91,11557,10976],{"class":250},[91,11559,11560],{"class":93,"line":1436},[91,11561,11562],{"class":308},"    \u002F\u002F接受func的返回值\n",[91,11564,11565,11567,11569,11572,11574,11576],{"class":93,"line":1442},[91,11566,2108],{"class":153},[91,11568,6641],{"class":153},[91,11570,11571],{"class":250},"p ",[91,11573,296],{"class":153},[91,11575,11508],{"class":97},[91,11577,5759],{"class":250},[91,11579,11580,11582,11584,11586,11588,11590,11593],{"class":93,"line":1454},[91,11581,6652],{"class":250},[91,11583,1293],{"class":153},[91,11585,6641],{"class":153},[91,11587,11571],{"class":250},[91,11589,1293],{"class":153},[91,11591,11592],{"class":250}," endl;",[91,11594,11595],{"class":308}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[91,11597,11598,11600,11602,11604,11606,11608,11610],{"class":93,"line":1736},[91,11599,6652],{"class":250},[91,11601,1293],{"class":153},[91,11603,6641],{"class":153},[91,11605,11571],{"class":250},[91,11607,1293],{"class":153},[91,11609,11592],{"class":250},[91,11611,11612],{"class":308}," \u002F\u002F第二次这个数据不再保留\n",[91,11614,11615,11617,11619,11621],{"class":93,"line":1741},[91,11616,2426],{"class":97},[91,11618,251],{"class":250},[91,11620,2431],{"class":101},[91,11622,2842],{"class":250},[91,11624,11625,11627,11629],{"class":93,"line":1747},[91,11626,4213],{"class":153},[91,11628,4216],{"class":105},[91,11630,1415],{"class":250},[91,11632,11633],{"class":93,"line":1752},[91,11634,1689],{"class":250},[21,11636,11637],{},"输出结果：",[21,11639,11640],{},[24,11641],{"alt":11642,"src":11643},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[21,11645,11646],{},"总结：不要返回局部变量的地址",[14,11648,11649],{"start":38},[17,11650,11651],{},"堆区",[1256,11653,11654,11657],{},[17,11655,11656],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[17,11658,11659],{},"在c++中主要利用new在堆区开辟内存",[82,11661,11663],{"className":238,"code":11662,"language":240,"meta":26,"style":26},"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",[88,11664,11665,11680,11684,11689,11710,11717,11721,11729,11733,11738,11752,11764],{"__ignoreMap":26},[91,11666,11667,11669,11672,11675,11677],{"class":93,"line":94},[91,11668,254],{"class":153},[91,11670,11671],{"class":153},"  *",[91,11673,11674],{"class":97},"func",[91,11676,2550],{"class":250},[91,11678,11679],{"class":308},"  \u002F\u002F函数返回指针\n",[91,11681,11682],{"class":93,"line":38},[91,11683,1670],{"class":250},[91,11685,11686],{"class":93,"line":1304},[91,11687,11688],{"class":308},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[91,11690,11691,11693,11695,11697,11699,11702,11704,11706,11708],{"class":93,"line":1319},[91,11692,4270],{"class":153},[91,11694,6641],{"class":153},[91,11696,21],{"class":250},[91,11698,296],{"class":153},[91,11700,11701],{"class":153}," new",[91,11703,2505],{"class":153},[91,11705,251],{"class":250},[91,11707,695],{"class":105},[91,11709,2842],{"class":250},[91,11711,11712,11714],{"class":93,"line":1325},[91,11713,4504],{"class":153},[91,11715,11716],{"class":250}," p;\n",[91,11718,11719],{"class":93,"line":1339},[91,11720,1689],{"class":250},[91,11722,11723,11725,11727],{"class":93,"line":1345},[91,11724,254],{"class":153},[91,11726,2096],{"class":97},[91,11728,2099],{"class":250},[91,11730,11731],{"class":93,"line":1436},[91,11732,1670],{"class":250},[91,11734,11735],{"class":93,"line":1442},[91,11736,11737],{"class":308},"    \u002F\u002F在堆区开辟数据\n",[91,11739,11740,11742,11744,11746,11748,11750],{"class":93,"line":1454},[91,11741,2108],{"class":153},[91,11743,6641],{"class":153},[91,11745,21],{"class":250},[91,11747,296],{"class":153},[91,11749,11674],{"class":97},[91,11751,5759],{"class":250},[91,11753,11754,11756,11758,11760,11762],{"class":93,"line":1736},[91,11755,1675],{"class":250},[91,11757,6542],{"class":153},[91,11759,21],{"class":250},[91,11761,1293],{"class":153},[91,11763,1316],{"class":250},[91,11765,11766],{"class":93,"line":1741},[91,11767,1689],{"class":250},[21,11769,11770],{},"图片展示：",[21,11772,11773],{},[24,11774],{"alt":11642,"src":11775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[21,11777,11778],{},"堆区内存由程序员管生死！！！",[14,11780,11781],{"start":1304},[17,11782,11783],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[21,11785,11786],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[21,11788,11789,11790],{},"​语法：",[88,11791,11792],{}," new 数据类型",[21,11794,11795],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[82,11797,11799],{"className":238,"code":11798,"language":240,"meta":26,"style":26},"\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",[88,11800,11801,11806,11816,11820,11825,11830,11852,11856,11864,11868,11882,11894,11906,11918,11923,11928,11939,11943,11948,11956,11960,11965,11987,12013,12017,12035,12039,12065,12069,12081,12085,12090,12095,12103,12107,12111,12119,12123,12129,12135],{"__ignoreMap":26},[91,11802,11803],{"class":93,"line":94},[91,11804,11805],{"class":308},"\u002F\u002F1.new的基本语法\n",[91,11807,11808,11810,11812,11814],{"class":93,"line":38},[91,11809,254],{"class":153},[91,11811,6641],{"class":153},[91,11813,11674],{"class":97},[91,11815,2099],{"class":250},[91,11817,11818],{"class":93,"line":1304},[91,11819,1670],{"class":250},[91,11821,11822],{"class":93,"line":1319},[91,11823,11824],{"class":308},"    \u002F\u002F在堆区创建整型数据\n",[91,11826,11827],{"class":93,"line":1325},[91,11828,11829],{"class":308},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[91,11831,11832,11834,11836,11838,11841,11843,11845,11847,11849],{"class":93,"line":1339},[91,11833,2108],{"class":153},[91,11835,6641],{"class":153},[91,11837,21],{"class":250},[91,11839,11840],{"class":153},"=new",[91,11842,2505],{"class":153},[91,11844,251],{"class":250},[91,11846,695],{"class":105},[91,11848,6089],{"class":250},[91,11850,11851],{"class":308},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[91,11853,11854],{"class":93,"line":1345},[91,11855,1689],{"class":250},[91,11857,11858,11860,11862],{"class":93,"line":1436},[91,11859,5487],{"class":153},[91,11861,5711],{"class":97},[91,11863,2099],{"class":250},[91,11865,11866],{"class":93,"line":1442},[91,11867,1670],{"class":250},[91,11869,11870,11872,11874,11876,11878,11880],{"class":93,"line":1454},[91,11871,2108],{"class":153},[91,11873,6641],{"class":153},[91,11875,21],{"class":250},[91,11877,296],{"class":153},[91,11879,11674],{"class":97},[91,11881,5759],{"class":250},[91,11883,11884,11886,11888,11890,11892],{"class":93,"line":1736},[91,11885,1675],{"class":250},[91,11887,6542],{"class":153},[91,11889,21],{"class":250},[91,11891,1293],{"class":153},[91,11893,1316],{"class":250},[91,11895,11896,11898,11900,11902,11904],{"class":93,"line":1741},[91,11897,1675],{"class":250},[91,11899,6542],{"class":153},[91,11901,21],{"class":250},[91,11903,1293],{"class":153},[91,11905,1316],{"class":250},[91,11907,11908,11910,11912,11914,11916],{"class":93,"line":1747},[91,11909,1675],{"class":250},[91,11911,6542],{"class":153},[91,11913,21],{"class":250},[91,11915,1293],{"class":153},[91,11917,1316],{"class":250},[91,11919,11920],{"class":93,"line":1752},[91,11921,11922],{"class":308},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[91,11924,11925],{"class":93,"line":1766},[91,11926,11927],{"class":308},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[91,11929,11930,11933,11936],{"class":93,"line":1771},[91,11931,11932],{"class":153},"    delete",[91,11934,11935],{"class":250}," p;",[91,11937,11938],{"class":308},"\u002F\u002F删除这块地址\n",[91,11940,11941],{"class":93,"line":1777},[91,11942,1689],{"class":250},[91,11944,11945],{"class":93,"line":1798},[91,11946,11947],{"class":308},"\u002F\u002F2.在堆区利用new开辟数组\n",[91,11949,11950,11952,11954],{"class":93,"line":1803},[91,11951,5487],{"class":153},[91,11953,5780],{"class":97},[91,11955,2099],{"class":250},[91,11957,11958],{"class":93,"line":1817},[91,11959,1670],{"class":250},[91,11961,11962],{"class":93,"line":1822},[91,11963,11964],{"class":308},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[91,11966,11967,11969,11971,11973,11975,11977,11979,11981,11984],{"class":93,"line":1851},[91,11968,2108],{"class":153},[91,11970,6641],{"class":153},[91,11972,4003],{"class":250},[91,11974,11840],{"class":153},[91,11976,2505],{"class":153},[91,11978,1139],{"class":250},[91,11980,695],{"class":105},[91,11982,11983],{"class":250},"];",[91,11985,11986],{"class":308},"\u002F\u002F10代表数组有10个元素\n",[91,11988,11989,11991,11993,11995,11997,11999,12001,12003,12005,12007,12009,12011],{"class":93,"line":1856},[91,11990,3324],{"class":153},[91,11992,1782],{"class":250},[91,11994,254],{"class":153},[91,11996,3155],{"class":250},[91,11998,296],{"class":153},[91,12000,440],{"class":105},[91,12002,3162],{"class":250},[91,12004,1159],{"class":153},[91,12006,695],{"class":105},[91,12008,3162],{"class":250},[91,12010,2415],{"class":153},[91,12012,257],{"class":250},[91,12014,12015],{"class":93,"line":1873},[91,12016,2153],{"class":250},[91,12018,12019,12022,12024,12026,12028,12030,12032],{"class":93,"line":1878},[91,12020,12021],{"class":250},"        arr[i]",[91,12023,296],{"class":153},[91,12025,690],{"class":250},[91,12027,730],{"class":153},[91,12029,560],{"class":105},[91,12031,305],{"class":250},[91,12033,12034],{"class":308},"\u002F\u002F给10个元素赋值100～109\n",[91,12036,12037],{"class":93,"line":1883},[91,12038,2310],{"class":250},[91,12040,12041,12043,12045,12047,12049,12051,12053,12055,12057,12059,12061,12063],{"class":93,"line":1888},[91,12042,3324],{"class":153},[91,12044,1782],{"class":250},[91,12046,254],{"class":153},[91,12048,3155],{"class":250},[91,12050,296],{"class":153},[91,12052,440],{"class":105},[91,12054,3162],{"class":250},[91,12056,1159],{"class":153},[91,12058,695],{"class":105},[91,12060,3162],{"class":250},[91,12062,2415],{"class":153},[91,12064,257],{"class":250},[91,12066,12067],{"class":93,"line":1902},[91,12068,2153],{"class":250},[91,12070,12071,12073,12075,12077,12079],{"class":93,"line":1907},[91,12072,3574],{"class":250},[91,12074,1293],{"class":153},[91,12076,4477],{"class":250},[91,12078,1293],{"class":153},[91,12080,1316],{"class":250},[91,12082,12083],{"class":93,"line":2700},[91,12084,2310],{"class":250},[91,12086,12087],{"class":93,"line":2714},[91,12088,12089],{"class":308},"    \u002F\u002F释放堆区数组\n",[91,12091,12092],{"class":93,"line":2722},[91,12093,12094],{"class":308},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[91,12096,12097,12100],{"class":93,"line":2727},[91,12098,12099],{"class":153},"    delete[]",[91,12101,12102],{"class":250}," arr;\n",[91,12104,12105],{"class":93,"line":2733},[91,12106,1689],{"class":250},[91,12108,12109],{"class":93,"line":2739},[91,12110,2523],{"emptyLinePlaceholder":175},[91,12112,12113,12115,12117],{"class":93,"line":2744},[91,12114,254],{"class":153},[91,12116,2096],{"class":97},[91,12118,2099],{"class":250},[91,12120,12121],{"class":93,"line":8071},[91,12122,1670],{"class":250},[91,12124,12125,12127],{"class":93,"line":8095},[91,12126,5756],{"class":97},[91,12128,5759],{"class":250},[91,12130,12131,12133],{"class":93,"line":8100},[91,12132,5825],{"class":97},[91,12134,5759],{"class":250},[91,12136,12137],{"class":93,"line":8106},[91,12138,1689],{"class":250},[168,12140,12141],{},"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":26,"searchDepth":38,"depth":38,"links":12143},[12144],{"id":10812,"depth":38,"text":10813,"children":12145},[12146,12147],{"id":10844,"depth":1304,"text":10845},{"id":11472,"depth":1304,"text":11473},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10804,"description":26},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12154,"title":12155,"body":12156,"description":26,"extension":173,"meta":13637,"navigation":175,"path":13638,"seo":13639,"stem":13640,"__hash__":13641},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12157,"toc":13629},[12158,12161,12165,12168,12171,12340,12344,12349,12366,12371,12523,12527,12530,12533,12927,12931,12934,12939,12942,13254,13258,13264,13424,13426,13434,13438,13441,13448,13626],[10,12159,12155],{"id":12160},"_6引用",[190,12162,12164],{"id":12163},"_61引用基本用法","6.1引用基本用法",[21,12166,12167],{},"引用的本质：给变量起别名",[21,12169,12170],{},"语法：数据类型 &别名=原名",[82,12172,12174],{"className":238,"code":12173,"language":240,"meta":26,"style":26},"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",[88,12175,12176,12184,12188,12200,12212,12216,12235,12254,12258,12269,12273,12292,12310,12314,12324,12328,12336],{"__ignoreMap":26},[91,12177,12178,12180,12182],{"class":93,"line":94},[91,12179,254],{"class":153},[91,12181,2096],{"class":97},[91,12183,10976],{"class":250},[91,12185,12186],{"class":93,"line":38},[91,12187,2523],{"emptyLinePlaceholder":175},[91,12189,12190,12192,12194,12196,12198],{"class":93,"line":1304},[91,12191,2108],{"class":153},[91,12193,10992],{"class":250},[91,12195,296],{"class":153},[91,12197,2161],{"class":105},[91,12199,1415],{"class":250},[91,12201,12202,12204,12206,12208,12210],{"class":93,"line":1319},[91,12203,2108],{"class":153},[91,12205,10707],{"class":153},[91,12207,11068],{"class":250},[91,12209,296],{"class":153},[91,12211,1557],{"class":250},[91,12213,12214],{"class":93,"line":1325},[91,12215,2523],{"emptyLinePlaceholder":175},[91,12217,12218,12220,12222,12225,12227,12229,12231,12233],{"class":93,"line":1339},[91,12219,6652],{"class":250},[91,12221,1293],{"class":153},[91,12223,12224],{"class":101}," \"a = \"",[91,12226,1569],{"class":153},[91,12228,10992],{"class":250},[91,12230,1293],{"class":153},[91,12232,11592],{"class":250},[91,12234,7391],{"class":308},[91,12236,12237,12239,12241,12244,12246,12248,12250,12252],{"class":93,"line":1345},[91,12238,6652],{"class":250},[91,12240,1293],{"class":153},[91,12242,12243],{"class":101}," \"b = \"",[91,12245,1569],{"class":153},[91,12247,11005],{"class":250},[91,12249,1293],{"class":153},[91,12251,11592],{"class":250},[91,12253,7391],{"class":308},[91,12255,12256],{"class":93,"line":1436},[91,12257,2523],{"emptyLinePlaceholder":175},[91,12259,12260,12263,12265,12267],{"class":93,"line":1442},[91,12261,12262],{"class":250},"    b ",[91,12264,296],{"class":153},[91,12266,5877],{"class":105},[91,12268,1415],{"class":250},[91,12270,12271],{"class":93,"line":1454},[91,12272,2523],{"emptyLinePlaceholder":175},[91,12274,12275,12277,12279,12281,12283,12285,12287,12289],{"class":93,"line":1736},[91,12276,6652],{"class":250},[91,12278,1293],{"class":153},[91,12280,12224],{"class":101},[91,12282,1569],{"class":153},[91,12284,10992],{"class":250},[91,12286,1293],{"class":153},[91,12288,11592],{"class":250},[91,12290,12291],{"class":308},"\u002F\u002F100\n",[91,12293,12294,12296,12298,12300,12302,12304,12306,12308],{"class":93,"line":1741},[91,12295,6652],{"class":250},[91,12297,1293],{"class":153},[91,12299,12243],{"class":101},[91,12301,1569],{"class":153},[91,12303,11005],{"class":250},[91,12305,1293],{"class":153},[91,12307,11592],{"class":250},[91,12309,12291],{"class":308},[91,12311,12312],{"class":93,"line":1747},[91,12313,2523],{"emptyLinePlaceholder":175},[91,12315,12316,12318,12320,12322],{"class":93,"line":1752},[91,12317,2426],{"class":97},[91,12319,251],{"class":250},[91,12321,2431],{"class":101},[91,12323,2842],{"class":250},[91,12325,12326],{"class":93,"line":1766},[91,12327,2523],{"emptyLinePlaceholder":175},[91,12329,12330,12332,12334],{"class":93,"line":1771},[91,12331,4213],{"class":153},[91,12333,4216],{"class":105},[91,12335,1415],{"class":250},[91,12337,12338],{"class":93,"line":1777},[91,12339,1689],{"class":250},[190,12341,12343],{"id":12342},"_62引用的注意事项","6.2引用的注意事项",[14,12345,12346],{},[17,12347,12348],{},"引用必须要初始化",[82,12350,12352],{"className":238,"code":12351,"language":240,"meta":26,"style":26},"int &b;\u002F\u002F非常错误！\n",[88,12353,12354],{"__ignoreMap":26},[91,12355,12356,12358,12360,12363],{"class":93,"line":94},[91,12357,254],{"class":153},[91,12359,10707],{"class":153},[91,12361,12362],{"class":250},"b;",[91,12364,12365],{"class":308},"\u002F\u002F非常错误！\n",[14,12367,12368],{"start":38},[17,12369,12370],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[82,12372,12374],{"className":238,"code":12373,"language":240,"meta":26,"style":26},"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",[88,12375,12376,12384,12396,12408,12416,12432,12445,12463,12481,12501,12511,12519],{"__ignoreMap":26},[91,12377,12378,12380,12382],{"class":93,"line":94},[91,12379,254],{"class":153},[91,12381,2096],{"class":97},[91,12383,10976],{"class":250},[91,12385,12386,12388,12390,12392,12394],{"class":93,"line":38},[91,12387,2108],{"class":153},[91,12389,10992],{"class":250},[91,12391,296],{"class":153},[91,12393,2161],{"class":105},[91,12395,1415],{"class":250},[91,12397,12398,12400,12402,12404,12406],{"class":93,"line":1304},[91,12399,2108],{"class":153},[91,12401,11005],{"class":250},[91,12403,296],{"class":153},[91,12405,9073],{"class":105},[91,12407,1415],{"class":250},[91,12409,12410,12413],{"class":93,"line":1319},[91,12411,12412],{"class":308},"    \u002F\u002Fint &c;",[91,12414,12415],{"class":308}," \u002F\u002F错误，引用必须初始化\n",[91,12417,12418,12420,12422,12424,12426,12429],{"class":93,"line":1325},[91,12419,2108],{"class":153},[91,12421,10707],{"class":153},[91,12423,3069],{"class":250},[91,12425,296],{"class":153},[91,12427,12428],{"class":250}," a;",[91,12430,12431],{"class":308}," \u002F\u002F一旦初始化后，就不可以更改\n",[91,12433,12434,12437,12439,12442],{"class":93,"line":1339},[91,12435,12436],{"class":250},"    c ",[91,12438,296],{"class":153},[91,12440,12441],{"class":250}," b;",[91,12443,12444],{"class":308}," \u002F\u002F这是赋值操作，不是更改引用\n",[91,12446,12447,12449,12451,12453,12455,12457,12459,12461],{"class":93,"line":1345},[91,12448,6652],{"class":250},[91,12450,1293],{"class":153},[91,12452,12224],{"class":101},[91,12454,1569],{"class":153},[91,12456,10992],{"class":250},[91,12458,1293],{"class":153},[91,12460,11592],{"class":250},[91,12462,7376],{"class":308},[91,12464,12465,12467,12469,12471,12473,12475,12477,12479],{"class":93,"line":1436},[91,12466,6652],{"class":250},[91,12468,1293],{"class":153},[91,12470,12243],{"class":101},[91,12472,1569],{"class":153},[91,12474,11005],{"class":250},[91,12476,1293],{"class":153},[91,12478,11592],{"class":250},[91,12480,7376],{"class":308},[91,12482,12483,12485,12487,12490,12492,12495,12497,12499],{"class":93,"line":1442},[91,12484,6652],{"class":250},[91,12486,1293],{"class":153},[91,12488,12489],{"class":101}," \"c = \"",[91,12491,1569],{"class":153},[91,12493,12494],{"class":250}," c ",[91,12496,1293],{"class":153},[91,12498,11592],{"class":250},[91,12500,7376],{"class":308},[91,12502,12503,12505,12507,12509],{"class":93,"line":1454},[91,12504,2426],{"class":97},[91,12506,251],{"class":250},[91,12508,2431],{"class":101},[91,12510,2842],{"class":250},[91,12512,12513,12515,12517],{"class":93,"line":1736},[91,12514,4213],{"class":153},[91,12516,4216],{"class":105},[91,12518,1415],{"class":250},[91,12520,12521],{"class":93,"line":1741},[91,12522,1689],{"class":250},[190,12524,12526],{"id":12525},"_63引用做函数参数","6.3引用做函数参数",[21,12528,12529],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[21,12531,12532],{},"优点：可以简化指针修改实参",[82,12534,12536],{"className":238,"code":12535,"language":240,"meta":26,"style":26},"\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",[88,12537,12538,12543,12566,12577,12587,12596,12600,12604,12609,12631,12643,12655,12665,12669,12673,12678,12700,12710,12718,12726,12730,12734,12742,12746,12758,12770,12774,12785,12811,12815,12835,12859,12863,12873,12897,12901,12911,12915,12923],{"__ignoreMap":26},[91,12539,12540],{"class":93,"line":94},[91,12541,12542],{"class":308},"\u002F\u002F1. 值传递\n",[91,12544,12545,12547,12550,12552,12554,12556,12559,12561,12563],{"class":93,"line":38},[91,12546,5487],{"class":153},[91,12548,12549],{"class":97}," mySwap01",[91,12551,251],{"class":250},[91,12553,254],{"class":153},[91,12555,1523],{"class":5339},[91,12557,12558],{"class":250},", ",[91,12560,254],{"class":153},[91,12562,2956],{"class":5339},[91,12564,12565],{"class":250},") {\n",[91,12567,12568,12570,12573,12575],{"class":93,"line":1304},[91,12569,2108],{"class":153},[91,12571,12572],{"class":250}," temp ",[91,12574,296],{"class":153},[91,12576,1557],{"class":250},[91,12578,12579,12582,12584],{"class":93,"line":1319},[91,12580,12581],{"class":250},"    a ",[91,12583,296],{"class":153},[91,12585,12586],{"class":250}," b;\n",[91,12588,12589,12591,12593],{"class":93,"line":1325},[91,12590,12262],{"class":250},[91,12592,296],{"class":153},[91,12594,12595],{"class":250}," temp;\n",[91,12597,12598],{"class":93,"line":1339},[91,12599,1689],{"class":250},[91,12601,12602],{"class":93,"line":1345},[91,12603,2523],{"emptyLinePlaceholder":175},[91,12605,12606],{"class":93,"line":1436},[91,12607,12608],{"class":308},"\u002F\u002F2. 地址传递\n",[91,12610,12611,12613,12616,12618,12621,12623,12625,12627,12629],{"class":93,"line":1442},[91,12612,5487],{"class":153},[91,12614,12615],{"class":97}," mySwap02",[91,12617,251],{"class":250},[91,12619,12620],{"class":153},"int*",[91,12622,1523],{"class":5339},[91,12624,12558],{"class":250},[91,12626,12620],{"class":153},[91,12628,2956],{"class":5339},[91,12630,12565],{"class":250},[91,12632,12633,12635,12637,12639,12641],{"class":93,"line":1454},[91,12634,2108],{"class":153},[91,12636,12572],{"class":250},[91,12638,296],{"class":153},[91,12640,6641],{"class":153},[91,12642,6320],{"class":250},[91,12644,12645,12647,12649,12651,12653],{"class":93,"line":1736},[91,12646,6526],{"class":153},[91,12648,11042],{"class":250},[91,12650,296],{"class":153},[91,12652,6641],{"class":153},[91,12654,6192],{"class":250},[91,12656,12657,12659,12661,12663],{"class":93,"line":1741},[91,12658,6526],{"class":153},[91,12660,11068],{"class":250},[91,12662,296],{"class":153},[91,12664,12595],{"class":250},[91,12666,12667],{"class":93,"line":1747},[91,12668,1689],{"class":250},[91,12670,12671],{"class":93,"line":1752},[91,12672,2523],{"emptyLinePlaceholder":175},[91,12674,12675],{"class":93,"line":1766},[91,12676,12677],{"class":308},"\u002F\u002F3. 引用传递\n",[91,12679,12680,12682,12685,12687,12690,12692,12694,12696,12698],{"class":93,"line":1771},[91,12681,5487],{"class":153},[91,12683,12684],{"class":97}," mySwap03",[91,12686,251],{"class":250},[91,12688,12689],{"class":153},"int&",[91,12691,1523],{"class":5339},[91,12693,12558],{"class":250},[91,12695,12689],{"class":153},[91,12697,2956],{"class":5339},[91,12699,12565],{"class":250},[91,12701,12702,12704,12706,12708],{"class":93,"line":1777},[91,12703,2108],{"class":153},[91,12705,12572],{"class":250},[91,12707,296],{"class":153},[91,12709,1557],{"class":250},[91,12711,12712,12714,12716],{"class":93,"line":1798},[91,12713,12581],{"class":250},[91,12715,296],{"class":153},[91,12717,12586],{"class":250},[91,12719,12720,12722,12724],{"class":93,"line":1803},[91,12721,12262],{"class":250},[91,12723,296],{"class":153},[91,12725,12595],{"class":250},[91,12727,12728],{"class":93,"line":1817},[91,12729,1689],{"class":250},[91,12731,12732],{"class":93,"line":1822},[91,12733,2523],{"emptyLinePlaceholder":175},[91,12735,12736,12738,12740],{"class":93,"line":1851},[91,12737,254],{"class":153},[91,12739,2096],{"class":97},[91,12741,10976],{"class":250},[91,12743,12744],{"class":93,"line":1856},[91,12745,2523],{"emptyLinePlaceholder":175},[91,12747,12748,12750,12752,12754,12756],{"class":93,"line":1873},[91,12749,2108],{"class":153},[91,12751,10992],{"class":250},[91,12753,296],{"class":153},[91,12755,2161],{"class":105},[91,12757,1415],{"class":250},[91,12759,12760,12762,12764,12766,12768],{"class":93,"line":1878},[91,12761,2108],{"class":153},[91,12763,11005],{"class":250},[91,12765,296],{"class":153},[91,12767,9073],{"class":105},[91,12769,1415],{"class":250},[91,12771,12772],{"class":93,"line":1883},[91,12773,2523],{"emptyLinePlaceholder":175},[91,12775,12776,12779,12782],{"class":93,"line":1888},[91,12777,12778],{"class":97},"    mySwap01",[91,12780,12781],{"class":250},"(a, b);",[91,12783,12784],{"class":308},"\u002F\u002F值传递，形参不会修饰实参\n",[91,12786,12787,12789,12791,12794,12796,12798,12800,12803,12805,12807,12809],{"class":93,"line":1902},[91,12788,6652],{"class":250},[91,12790,1293],{"class":153},[91,12792,12793],{"class":101}," \"a:\"",[91,12795,1569],{"class":153},[91,12797,10992],{"class":250},[91,12799,1293],{"class":153},[91,12801,12802],{"class":101}," \" b:\"",[91,12804,1569],{"class":153},[91,12806,11005],{"class":250},[91,12808,1293],{"class":153},[91,12810,8963],{"class":250},[91,12812,12813],{"class":93,"line":1907},[91,12814,2523],{"emptyLinePlaceholder":175},[91,12816,12817,12820,12822,12824,12827,12829,12832],{"class":93,"line":2700},[91,12818,12819],{"class":97},"    mySwap02",[91,12821,251],{"class":250},[91,12823,602],{"class":153},[91,12825,12826],{"class":250},"a, ",[91,12828,602],{"class":153},[91,12830,12831],{"class":250},"b);",[91,12833,12834],{"class":308},"\u002F\u002F地址传递，形参会修饰实参\n",[91,12836,12837,12839,12841,12843,12845,12847,12849,12851,12853,12855,12857],{"class":93,"line":2714},[91,12838,6652],{"class":250},[91,12840,1293],{"class":153},[91,12842,12793],{"class":101},[91,12844,1569],{"class":153},[91,12846,10992],{"class":250},[91,12848,1293],{"class":153},[91,12850,12802],{"class":101},[91,12852,1569],{"class":153},[91,12854,11005],{"class":250},[91,12856,1293],{"class":153},[91,12858,8963],{"class":250},[91,12860,12861],{"class":93,"line":2722},[91,12862,2523],{"emptyLinePlaceholder":175},[91,12864,12865,12868,12870],{"class":93,"line":2727},[91,12866,12867],{"class":97},"    mySwap03",[91,12869,12781],{"class":250},[91,12871,12872],{"class":308},"\u002F\u002F引用传递，形参会修饰实参\n",[91,12874,12875,12877,12879,12881,12883,12885,12887,12889,12891,12893,12895],{"class":93,"line":2733},[91,12876,6652],{"class":250},[91,12878,1293],{"class":153},[91,12880,12793],{"class":101},[91,12882,1569],{"class":153},[91,12884,10992],{"class":250},[91,12886,1293],{"class":153},[91,12888,12802],{"class":101},[91,12890,1569],{"class":153},[91,12892,11005],{"class":250},[91,12894,1293],{"class":153},[91,12896,8963],{"class":250},[91,12898,12899],{"class":93,"line":2739},[91,12900,2523],{"emptyLinePlaceholder":175},[91,12902,12903,12905,12907,12909],{"class":93,"line":2744},[91,12904,2426],{"class":97},[91,12906,251],{"class":250},[91,12908,2431],{"class":101},[91,12910,2842],{"class":250},[91,12912,12913],{"class":93,"line":8071},[91,12914,2523],{"emptyLinePlaceholder":175},[91,12916,12917,12919,12921],{"class":93,"line":8095},[91,12918,4213],{"class":153},[91,12920,4216],{"class":105},[91,12922,1415],{"class":250},[91,12924,12925],{"class":93,"line":8100},[91,12926,1689],{"class":250},[190,12928,12930],{"id":12929},"_64引用做函数的返回值","6.4引用做函数的返回值",[21,12932,12933],{},"作用：引用是可以作为函数的返回值存在的",[21,12935,9148,12936],{},[398,12937,12938],{},"不要返回局部变量引用",[21,12940,12941],{},"用法：函数调用作为左值",[82,12943,12945],{"className":10064,"code":12944,"language":10066,"meta":26,"style":26},"\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",[88,12946,12947,12952,12960,12975,12981,12985,12989,12994,13002,13019,13025,13029,13033,13041,13045,13050,13064,13084,13103,13107,13112,13125,13145,13163,13167,13183,13187,13206,13224,13228,13238,13242,13250],{"__ignoreMap":26},[91,12948,12949],{"class":93,"line":94},[91,12950,12951],{"class":308},"\u002F\u002F返回局部变量引用\n",[91,12953,12954,12956,12958],{"class":93,"line":38},[91,12955,12689],{"class":153},[91,12957,5711],{"class":97},[91,12959,10976],{"class":250},[91,12961,12962,12964,12966,12968,12970,12972],{"class":93,"line":1304},[91,12963,2108],{"class":153},[91,12965,10992],{"class":250},[91,12967,296],{"class":153},[91,12969,2161],{"class":105},[91,12971,305],{"class":250},[91,12973,12974],{"class":308}," \u002F\u002F局部变量\n",[91,12976,12977,12979],{"class":93,"line":1319},[91,12978,4213],{"class":153},[91,12980,1557],{"class":250},[91,12982,12983],{"class":93,"line":1325},[91,12984,1689],{"class":250},[91,12986,12987],{"class":93,"line":1339},[91,12988,2523],{"emptyLinePlaceholder":175},[91,12990,12991],{"class":93,"line":1345},[91,12992,12993],{"class":308},"\u002F\u002F返回静态变量引用\n",[91,12995,12996,12998,13000],{"class":93,"line":1436},[91,12997,12689],{"class":153},[91,12999,5780],{"class":97},[91,13001,10976],{"class":250},[91,13003,13004,13006,13008,13010,13012,13014,13016],{"class":93,"line":1442},[91,13005,11143],{"class":153},[91,13007,2505],{"class":153},[91,13009,10992],{"class":250},[91,13011,296],{"class":153},[91,13013,9073],{"class":105},[91,13015,305],{"class":250},[91,13017,13018],{"class":308},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[91,13020,13021,13023],{"class":93,"line":1454},[91,13022,4213],{"class":153},[91,13024,1557],{"class":250},[91,13026,13027],{"class":93,"line":1736},[91,13028,1689],{"class":250},[91,13030,13031],{"class":93,"line":1741},[91,13032,2523],{"emptyLinePlaceholder":175},[91,13034,13035,13037,13039],{"class":93,"line":1747},[91,13036,254],{"class":153},[91,13038,2096],{"class":97},[91,13040,10976],{"class":250},[91,13042,13043],{"class":93,"line":1752},[91,13044,2523],{"emptyLinePlaceholder":175},[91,13046,13047],{"class":93,"line":1766},[91,13048,13049],{"class":308},"    \u002F\u002F不能返回局部变量的引用\n",[91,13051,13052,13055,13058,13060,13062],{"class":93,"line":1771},[91,13053,13054],{"class":153},"    int&",[91,13056,13057],{"class":250}," ref ",[91,13059,296],{"class":153},[91,13061,5711],{"class":97},[91,13063,5759],{"class":250},[91,13065,13066,13068,13070,13073,13075,13077,13079,13081],{"class":93,"line":1777},[91,13067,6652],{"class":250},[91,13069,1293],{"class":153},[91,13071,13072],{"class":101}," \"ref = \"",[91,13074,1569],{"class":153},[91,13076,13057],{"class":250},[91,13078,1293],{"class":153},[91,13080,11592],{"class":250},[91,13082,13083],{"class":308},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[91,13085,13086,13088,13090,13092,13094,13096,13098,13100],{"class":93,"line":1798},[91,13087,6652],{"class":250},[91,13089,1293],{"class":153},[91,13091,13072],{"class":101},[91,13093,1569],{"class":153},[91,13095,13057],{"class":250},[91,13097,1293],{"class":153},[91,13099,11592],{"class":250},[91,13101,13102],{"class":308},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[91,13104,13105],{"class":93,"line":1803},[91,13106,2523],{"emptyLinePlaceholder":175},[91,13108,13109],{"class":93,"line":1817},[91,13110,13111],{"class":308},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[91,13113,13114,13116,13119,13121,13123],{"class":93,"line":1822},[91,13115,13054],{"class":153},[91,13117,13118],{"class":250}," ref2 ",[91,13120,296],{"class":153},[91,13122,5780],{"class":97},[91,13124,5759],{"class":250},[91,13126,13127,13129,13131,13134,13136,13138,13140,13142],{"class":93,"line":1851},[91,13128,6652],{"class":250},[91,13130,1293],{"class":153},[91,13132,13133],{"class":101}," \"ref2 = \"",[91,13135,1569],{"class":153},[91,13137,13118],{"class":250},[91,13139,1293],{"class":153},[91,13141,11592],{"class":250},[91,13143,13144],{"class":308}," \u002F\u002F20\n",[91,13146,13147,13149,13151,13153,13155,13157,13159,13161],{"class":93,"line":1856},[91,13148,6652],{"class":250},[91,13150,1293],{"class":153},[91,13152,13133],{"class":101},[91,13154,1569],{"class":153},[91,13156,13118],{"class":250},[91,13158,1293],{"class":153},[91,13160,11592],{"class":250},[91,13162,13144],{"class":308},[91,13164,13165],{"class":93,"line":1873},[91,13166,2523],{"emptyLinePlaceholder":175},[91,13168,13169,13171,13174,13176,13178,13180],{"class":93,"line":1878},[91,13170,5825],{"class":97},[91,13172,13173],{"class":250},"() ",[91,13175,296],{"class":153},[91,13177,3122],{"class":105},[91,13179,305],{"class":250},[91,13181,13182],{"class":308},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[91,13184,13185],{"class":93,"line":1883},[91,13186,2523],{"emptyLinePlaceholder":175},[91,13188,13189,13191,13193,13195,13197,13199,13201,13203],{"class":93,"line":1888},[91,13190,6652],{"class":250},[91,13192,1293],{"class":153},[91,13194,13133],{"class":101},[91,13196,1569],{"class":153},[91,13198,13118],{"class":250},[91,13200,1293],{"class":153},[91,13202,11592],{"class":250},[91,13204,13205],{"class":308}," \u002F\u002F1000\n",[91,13207,13208,13210,13212,13214,13216,13218,13220,13222],{"class":93,"line":1902},[91,13209,6652],{"class":250},[91,13211,1293],{"class":153},[91,13213,13133],{"class":101},[91,13215,1569],{"class":153},[91,13217,13118],{"class":250},[91,13219,1293],{"class":153},[91,13221,11592],{"class":250},[91,13223,13205],{"class":308},[91,13225,13226],{"class":93,"line":1907},[91,13227,2523],{"emptyLinePlaceholder":175},[91,13229,13230,13232,13234,13236],{"class":93,"line":2700},[91,13231,2426],{"class":97},[91,13233,251],{"class":250},[91,13235,2431],{"class":101},[91,13237,2842],{"class":250},[91,13239,13240],{"class":93,"line":2714},[91,13241,2523],{"emptyLinePlaceholder":175},[91,13243,13244,13246,13248],{"class":93,"line":2722},[91,13245,4213],{"class":153},[91,13247,4216],{"class":105},[91,13249,1415],{"class":250},[91,13251,13252],{"class":93,"line":2727},[91,13253,1689],{"class":250},[190,13255,13257],{"id":13256},"_65引用的本质","6.5引用的本质",[21,13259,13260,13261],{},"本质：",[398,13262,13263],{},"引用的本质在c++内部实现是一个指针常量.",[82,13265,13267],{"className":238,"code":13266,"language":240,"meta":26,"style":26},"\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",[88,13268,13269,13274,13290,13304,13308,13317,13329,13334,13339,13350,13363,13367,13383,13400,13404,13412,13420],{"__ignoreMap":26},[91,13270,13271],{"class":93,"line":94},[91,13272,13273],{"class":308},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[91,13275,13276,13278,13280,13282,13284,13287],{"class":93,"line":38},[91,13277,5487],{"class":153},[91,13279,11508],{"class":97},[91,13281,251],{"class":250},[91,13283,12689],{"class":153},[91,13285,13286],{"class":5339}," ref",[91,13288,13289],{"class":250},"){\n",[91,13291,13292,13295,13297,13299,13301],{"class":93,"line":1304},[91,13293,13294],{"class":250},"    ref ",[91,13296,296],{"class":153},[91,13298,5877],{"class":105},[91,13300,305],{"class":250},[91,13302,13303],{"class":308}," \u002F\u002F ref是引用，转换为*ref = 100\n",[91,13305,13306],{"class":93,"line":1319},[91,13307,1689],{"class":250},[91,13309,13310,13312,13314],{"class":93,"line":1325},[91,13311,254],{"class":153},[91,13313,2096],{"class":97},[91,13315,13316],{"class":250},"(){\n",[91,13318,13319,13321,13323,13325,13327],{"class":93,"line":1339},[91,13320,2108],{"class":153},[91,13322,10992],{"class":250},[91,13324,296],{"class":153},[91,13326,2161],{"class":105},[91,13328,1415],{"class":250},[91,13330,13331],{"class":93,"line":1345},[91,13332,13333],{"class":250},"    \n",[91,13335,13336],{"class":93,"line":1436},[91,13337,13338],{"class":308},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[91,13340,13341,13343,13345,13347],{"class":93,"line":1442},[91,13342,13054],{"class":153},[91,13344,13057],{"class":250},[91,13346,296],{"class":153},[91,13348,13349],{"class":250}," a; \n",[91,13351,13352,13354,13356,13358,13360],{"class":93,"line":1454},[91,13353,13294],{"class":250},[91,13355,296],{"class":153},[91,13357,9073],{"class":105},[91,13359,305],{"class":250},[91,13361,13362],{"class":308}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[91,13364,13365],{"class":93,"line":1736},[91,13366,13333],{"class":250},[91,13368,13369,13371,13373,13375,13377,13379,13381],{"class":93,"line":1741},[91,13370,6652],{"class":250},[91,13372,1293],{"class":153},[91,13374,12793],{"class":101},[91,13376,1569],{"class":153},[91,13378,10992],{"class":250},[91,13380,1293],{"class":153},[91,13382,8963],{"class":250},[91,13384,13385,13387,13389,13392,13394,13396,13398],{"class":93,"line":1747},[91,13386,6652],{"class":250},[91,13388,1293],{"class":153},[91,13390,13391],{"class":101}," \"ref:\"",[91,13393,1569],{"class":153},[91,13395,13057],{"class":250},[91,13397,1293],{"class":153},[91,13399,8963],{"class":250},[91,13401,13402],{"class":93,"line":1752},[91,13403,13333],{"class":250},[91,13405,13406,13409],{"class":93,"line":1766},[91,13407,13408],{"class":97},"    func",[91,13410,13411],{"class":250},"(a);\n",[91,13413,13414,13416,13418],{"class":93,"line":1771},[91,13415,4213],{"class":153},[91,13417,4216],{"class":105},[91,13419,1415],{"class":250},[91,13421,13422],{"class":93,"line":1777},[91,13423,1689],{"class":250},[21,13425,11455],{},[14,13427,13428,13431],{},[17,13429,13430],{},"引用的本质，就是一个指针常量",[17,13432,13433],{},"引用一旦初始化，就不可以发生改变",[190,13435,13437],{"id":13436},"_66常量引用","6.6常量引用",[21,13439,13440],{},"作用：常量引用主要用来修饰形参",[21,13442,13443,13444,13447],{},"在函数形参列表中，可以加",[398,13445,13446],{},"const修饰形参","，防止形参改变实参",[82,13449,13451],{"className":238,"code":13450,"language":240,"meta":26,"style":26},"\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",[88,13452,13453,13458,13463,13482,13487,13500,13504,13508,13516,13520,13525,13530,13544,13548,13556,13568,13572,13577,13589,13596,13600,13610,13614,13622],{"__ignoreMap":26},[91,13454,13455],{"class":93,"line":94},[91,13456,13457],{"class":308},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[91,13459,13460],{"class":93,"line":38},[91,13461,13462],{"class":308},"\u002F\u002F加上const就不能修改实参的\n",[91,13464,13465,13467,13470,13472,13474,13477,13480],{"class":93,"line":1304},[91,13466,5487],{"class":153},[91,13468,13469],{"class":97}," showValue",[91,13471,251],{"class":250},[91,13473,6915],{"class":153},[91,13475,13476],{"class":153}," int&",[91,13478,13479],{"class":5339}," v",[91,13481,12565],{"class":250},[91,13483,13484],{"class":93,"line":1319},[91,13485,13486],{"class":308},"    \u002F\u002Fv += 100;\n",[91,13488,13489,13491,13493,13496,13498],{"class":93,"line":1325},[91,13490,6652],{"class":250},[91,13492,1293],{"class":153},[91,13494,13495],{"class":250}," v ",[91,13497,1293],{"class":153},[91,13499,8963],{"class":250},[91,13501,13502],{"class":93,"line":1339},[91,13503,1689],{"class":250},[91,13505,13506],{"class":93,"line":1345},[91,13507,2523],{"emptyLinePlaceholder":175},[91,13509,13510,13512,13514],{"class":93,"line":1436},[91,13511,254],{"class":153},[91,13513,2096],{"class":97},[91,13515,10976],{"class":250},[91,13517,13518],{"class":93,"line":1442},[91,13519,2523],{"emptyLinePlaceholder":175},[91,13521,13522],{"class":93,"line":1454},[91,13523,13524],{"class":308},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[91,13526,13527],{"class":93,"line":1736},[91,13528,13529],{"class":308},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[91,13531,13532,13534,13536,13538,13540,13542],{"class":93,"line":1741},[91,13533,11344],{"class":153},[91,13535,13476],{"class":153},[91,13537,13057],{"class":250},[91,13539,296],{"class":153},[91,13541,2161],{"class":105},[91,13543,1415],{"class":250},[91,13545,13546],{"class":93,"line":1747},[91,13547,2523],{"emptyLinePlaceholder":175},[91,13549,13550,13553],{"class":93,"line":1752},[91,13551,13552],{"class":308},"    \u002F\u002Fref = 100;",[91,13554,13555],{"class":308},"  \u002F\u002F加入const后不可以修改变量\n",[91,13557,13558,13560,13562,13564,13566],{"class":93,"line":1766},[91,13559,6652],{"class":250},[91,13561,1293],{"class":153},[91,13563,13057],{"class":250},[91,13565,1293],{"class":153},[91,13567,8963],{"class":250},[91,13569,13570],{"class":93,"line":1771},[91,13571,2523],{"emptyLinePlaceholder":175},[91,13573,13574],{"class":93,"line":1777},[91,13575,13576],{"class":308},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[91,13578,13579,13581,13583,13585,13587],{"class":93,"line":1798},[91,13580,2108],{"class":153},[91,13582,10992],{"class":250},[91,13584,296],{"class":153},[91,13586,2161],{"class":105},[91,13588,1415],{"class":250},[91,13590,13591,13594],{"class":93,"line":1803},[91,13592,13593],{"class":97},"    showValue",[91,13595,13411],{"class":250},[91,13597,13598],{"class":93,"line":1817},[91,13599,2523],{"emptyLinePlaceholder":175},[91,13601,13602,13604,13606,13608],{"class":93,"line":1822},[91,13603,2426],{"class":97},[91,13605,251],{"class":250},[91,13607,2431],{"class":101},[91,13609,2842],{"class":250},[91,13611,13612],{"class":93,"line":1851},[91,13613,2523],{"emptyLinePlaceholder":175},[91,13615,13616,13618,13620],{"class":93,"line":1856},[91,13617,4213],{"class":153},[91,13619,4216],{"class":105},[91,13621,1415],{"class":250},[91,13623,13624],{"class":93,"line":1873},[91,13625,1689],{"class":250},[168,13627,13628],{},"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":26,"searchDepth":38,"depth":38,"links":13630},[13631,13632,13633,13634,13635,13636],{"id":12163,"depth":38,"text":12164},{"id":12342,"depth":38,"text":12343},{"id":12525,"depth":38,"text":12526},{"id":12929,"depth":38,"text":12930},{"id":13256,"depth":38,"text":13257},{"id":13436,"depth":38,"text":13437},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12155,"description":26},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13643,"title":13644,"body":13645,"description":26,"extension":173,"meta":14726,"navigation":175,"path":14727,"seo":14728,"stem":14729,"__hash__":14730},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13646,"toc":14718},[13647,13650,13654,13657,13662,13894,13896,13907,13911,13914,13922,14026,14029,14033,14036,14040,14043,14048,14070,14076,14403,14406,14410,14418,14715],[10,13648,13644],{"id":13649},"_7函数高级部分",[190,13651,13653],{"id":13652},"_71函数默认参数","7.1函数默认参数",[21,13655,13656],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[21,13658,5304,13659],{},[88,13660,13661],{}," 返回值类型  函数名 （参数= 默认值）{}",[82,13663,13665],{"className":238,"code":13664,"language":240,"meta":26,"style":26},"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",[88,13666,13667,13702,13717,13721,13725,13730,13735,13764,13784,13794,13798,13802,13810,13814,13842,13864,13868,13878,13882,13890],{"__ignoreMap":26},[91,13668,13669,13671,13673,13675,13677,13679,13681,13683,13685,13688,13690,13692,13694,13696,13698,13700],{"class":93,"line":94},[91,13670,254],{"class":153},[91,13672,11508],{"class":97},[91,13674,251],{"class":250},[91,13676,254],{"class":153},[91,13678,1523],{"class":5339},[91,13680,12558],{"class":250},[91,13682,254],{"class":153},[91,13684,2956],{"class":5339},[91,13686,13687],{"class":153}," =",[91,13689,2161],{"class":105},[91,13691,12558],{"class":250},[91,13693,254],{"class":153},[91,13695,2972],{"class":5339},[91,13697,13687],{"class":153},[91,13699,2161],{"class":105},[91,13701,12565],{"class":250},[91,13703,13704,13706,13708,13710,13712,13714],{"class":93,"line":38},[91,13705,4213],{"class":153},[91,13707,10992],{"class":250},[91,13709,730],{"class":153},[91,13711,11005],{"class":250},[91,13713,730],{"class":153},[91,13715,13716],{"class":250}," c;\n",[91,13718,13719],{"class":93,"line":1304},[91,13720,1689],{"class":250},[91,13722,13723],{"class":93,"line":1319},[91,13724,2523],{"emptyLinePlaceholder":175},[91,13726,13727],{"class":93,"line":1325},[91,13728,13729],{"class":308},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[91,13731,13732],{"class":93,"line":1339},[91,13733,13734],{"class":308},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[91,13736,13737,13739,13742,13744,13746,13748,13750,13752,13754,13756,13758,13760,13762],{"class":93,"line":1345},[91,13738,254],{"class":153},[91,13740,13741],{"class":97}," func2",[91,13743,251],{"class":250},[91,13745,254],{"class":153},[91,13747,1523],{"class":5339},[91,13749,13687],{"class":153},[91,13751,2161],{"class":105},[91,13753,12558],{"class":250},[91,13755,254],{"class":153},[91,13757,2956],{"class":5339},[91,13759,13687],{"class":153},[91,13761,2161],{"class":105},[91,13763,2842],{"class":250},[91,13765,13766,13768,13770,13772,13774,13776,13778,13780,13782],{"class":93,"line":1436},[91,13767,254],{"class":153},[91,13769,13741],{"class":97},[91,13771,251],{"class":250},[91,13773,254],{"class":153},[91,13775,1523],{"class":5339},[91,13777,12558],{"class":250},[91,13779,254],{"class":153},[91,13781,2956],{"class":5339},[91,13783,12565],{"class":250},[91,13785,13786,13788,13790,13792],{"class":93,"line":1442},[91,13787,4213],{"class":153},[91,13789,10992],{"class":250},[91,13791,730],{"class":153},[91,13793,12586],{"class":250},[91,13795,13796],{"class":93,"line":1454},[91,13797,1689],{"class":250},[91,13799,13800],{"class":93,"line":1736},[91,13801,2523],{"emptyLinePlaceholder":175},[91,13803,13804,13806,13808],{"class":93,"line":1741},[91,13805,254],{"class":153},[91,13807,2096],{"class":97},[91,13809,10976],{"class":250},[91,13811,13812],{"class":93,"line":1747},[91,13813,2523],{"emptyLinePlaceholder":175},[91,13815,13816,13818,13820,13823,13825,13827,13829,13831,13833,13835,13838,13840],{"class":93,"line":1752},[91,13817,6652],{"class":250},[91,13819,1293],{"class":153},[91,13821,13822],{"class":101}," \"ret = \"",[91,13824,1569],{"class":153},[91,13826,11508],{"class":97},[91,13828,251],{"class":250},[91,13830,949],{"class":105},[91,13832,12558],{"class":250},[91,13834,949],{"class":105},[91,13836,13837],{"class":250},") ",[91,13839,1293],{"class":153},[91,13841,8963],{"class":250},[91,13843,13844,13846,13848,13850,13852,13854,13856,13858,13860,13862],{"class":93,"line":1766},[91,13845,6652],{"class":250},[91,13847,1293],{"class":153},[91,13849,13822],{"class":101},[91,13851,1569],{"class":153},[91,13853,11508],{"class":97},[91,13855,251],{"class":250},[91,13857,560],{"class":105},[91,13859,13837],{"class":250},[91,13861,1293],{"class":153},[91,13863,8963],{"class":250},[91,13865,13866],{"class":93,"line":1771},[91,13867,2523],{"emptyLinePlaceholder":175},[91,13869,13870,13872,13874,13876],{"class":93,"line":1777},[91,13871,2426],{"class":97},[91,13873,251],{"class":250},[91,13875,2431],{"class":101},[91,13877,2842],{"class":250},[91,13879,13880],{"class":93,"line":1798},[91,13881,2523],{"emptyLinePlaceholder":175},[91,13883,13884,13886,13888],{"class":93,"line":1803},[91,13885,4213],{"class":153},[91,13887,4216],{"class":105},[91,13889,1415],{"class":250},[91,13891,13892],{"class":93,"line":1817},[91,13893,1689],{"class":250},[21,13895,11455],{},[14,13897,13898,13901,13904],{},[17,13899,13900],{},"我传就用我；没传就用你",[17,13902,13903],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[17,13905,13906],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[190,13908,13910],{"id":13909},"_72函数的占位参数","7.2函数的占位参数",[21,13912,13913],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[21,13915,13916,13918,13919],{},[398,13917,5304],{}," ",[88,13920,13921],{},"返回值类型 函数名 (数据类型){}",[82,13923,13925],{"className":238,"code":13924,"language":240,"meta":26,"style":26},"\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",[88,13926,13927,13932,13950,13963,13967,13975,13979,13996,14000,14010,14014,14022],{"__ignoreMap":26},[91,13928,13929],{"class":93,"line":94},[91,13930,13931],{"class":308},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[91,13933,13934,13936,13938,13940,13942,13944,13946,13948],{"class":93,"line":38},[91,13935,5487],{"class":153},[91,13937,11508],{"class":97},[91,13939,251],{"class":250},[91,13941,254],{"class":153},[91,13943,1523],{"class":5339},[91,13945,12558],{"class":250},[91,13947,254],{"class":153},[91,13949,12565],{"class":250},[91,13951,13952,13954,13956,13959,13961],{"class":93,"line":1304},[91,13953,6652],{"class":250},[91,13955,1293],{"class":153},[91,13957,13958],{"class":101}," \"this is func\"",[91,13960,1569],{"class":153},[91,13962,8963],{"class":250},[91,13964,13965],{"class":93,"line":1319},[91,13966,1689],{"class":250},[91,13968,13969,13971,13973],{"class":93,"line":1325},[91,13970,254],{"class":153},[91,13972,2096],{"class":97},[91,13974,10976],{"class":250},[91,13976,13977],{"class":93,"line":1339},[91,13978,2523],{"emptyLinePlaceholder":175},[91,13980,13981,13983,13985,13987,13989,13991,13993],{"class":93,"line":1345},[91,13982,13408],{"class":97},[91,13984,251],{"class":250},[91,13986,695],{"class":105},[91,13988,627],{"class":250},[91,13990,695],{"class":105},[91,13992,6089],{"class":250},[91,13994,13995],{"class":308}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[91,13997,13998],{"class":93,"line":1436},[91,13999,2523],{"emptyLinePlaceholder":175},[91,14001,14002,14004,14006,14008],{"class":93,"line":1442},[91,14003,2426],{"class":97},[91,14005,251],{"class":250},[91,14007,2431],{"class":101},[91,14009,2842],{"class":250},[91,14011,14012],{"class":93,"line":1454},[91,14013,2523],{"emptyLinePlaceholder":175},[91,14015,14016,14018,14020],{"class":93,"line":1736},[91,14017,4213],{"class":153},[91,14019,4216],{"class":105},[91,14021,1415],{"class":250},[91,14023,14024],{"class":93,"line":1741},[91,14025,1689],{"class":250},[21,14027,14028],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[190,14030,14032],{"id":14031},"_73函数重载","7.3函数重载",[21,14034,14035],{},"意思是函数名是可以相同的",[217,14037,14039],{"id":14038},"_731基本语法","7.3.1基本语法",[21,14041,14042],{},"作用：函数名可以相同，提高复用性",[21,14044,14045],{},[398,14046,14047],{},"函数重载满足条件：",[1256,14049,14050,14053,14056],{},[17,14051,14052],{},"同一个作用域下",[17,14054,14055],{},"函数名称相同",[17,14057,14058,14059,14062,14063,14066,14067],{},"函数参数",[398,14060,14061],{},"类型不同","  或者 ",[398,14064,14065],{},"个数不同"," 或者 ",[398,14068,14069],{},"顺序不同",[21,14071,14072,14075],{},[398,14073,14074],{},"注意:","  函数的返回值不可以作为函数重载的条件",[82,14077,14079],{"className":10064,"code":14078,"language":10066,"meta":26,"style":26},"\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",[88,14080,14081,14086,14094,14098,14111,14115,14129,14133,14146,14150,14165,14169,14182,14186,14207,14211,14224,14228,14248,14252,14265,14269,14273,14278,14283,14288,14293,14298,14302,14306,14314,14318,14324,14334,14344,14358,14373,14377,14387,14391,14399],{"__ignoreMap":26},[91,14082,14083],{"class":93,"line":94},[91,14084,14085],{"class":308},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[91,14087,14088,14090,14092],{"class":93,"line":38},[91,14089,5487],{"class":153},[91,14091,11508],{"class":97},[91,14093,2099],{"class":250},[91,14095,14096],{"class":93,"line":1304},[91,14097,1670],{"class":250},[91,14099,14100,14102,14104,14107,14109],{"class":93,"line":1319},[91,14101,6652],{"class":250},[91,14103,1293],{"class":153},[91,14105,14106],{"class":101}," \"func 的调用！\"",[91,14108,1569],{"class":153},[91,14110,8963],{"class":250},[91,14112,14113],{"class":93,"line":1325},[91,14114,1689],{"class":250},[91,14116,14117,14119,14121,14123,14125,14127],{"class":93,"line":1339},[91,14118,5487],{"class":153},[91,14120,11508],{"class":97},[91,14122,251],{"class":250},[91,14124,254],{"class":153},[91,14126,1523],{"class":5339},[91,14128,257],{"class":250},[91,14130,14131],{"class":93,"line":1345},[91,14132,1670],{"class":250},[91,14134,14135,14137,14139,14142,14144],{"class":93,"line":1436},[91,14136,6652],{"class":250},[91,14138,1293],{"class":153},[91,14140,14141],{"class":101}," \"func (int a) 的调用！\"",[91,14143,1569],{"class":153},[91,14145,8963],{"class":250},[91,14147,14148],{"class":93,"line":1442},[91,14149,1689],{"class":250},[91,14151,14152,14154,14156,14158,14161,14163],{"class":93,"line":1454},[91,14153,5487],{"class":153},[91,14155,11508],{"class":97},[91,14157,251],{"class":250},[91,14159,14160],{"class":153},"double",[91,14162,1523],{"class":5339},[91,14164,257],{"class":250},[91,14166,14167],{"class":93,"line":1736},[91,14168,1670],{"class":250},[91,14170,14171,14173,14175,14178,14180],{"class":93,"line":1741},[91,14172,6652],{"class":250},[91,14174,1293],{"class":153},[91,14176,14177],{"class":101}," \"func (double a)的调用！\"",[91,14179,1569],{"class":153},[91,14181,8963],{"class":250},[91,14183,14184],{"class":93,"line":1747},[91,14185,1689],{"class":250},[91,14187,14188,14190,14192,14194,14196,14198,14201,14203,14205],{"class":93,"line":1752},[91,14189,5487],{"class":153},[91,14191,11508],{"class":97},[91,14193,251],{"class":250},[91,14195,254],{"class":153},[91,14197,1523],{"class":5339},[91,14199,14200],{"class":250}," ,",[91,14202,14160],{"class":153},[91,14204,2956],{"class":5339},[91,14206,257],{"class":250},[91,14208,14209],{"class":93,"line":1766},[91,14210,1670],{"class":250},[91,14212,14213,14215,14217,14220,14222],{"class":93,"line":1771},[91,14214,6652],{"class":250},[91,14216,1293],{"class":153},[91,14218,14219],{"class":101}," \"func (int a ,double b) 的调用！\"",[91,14221,1569],{"class":153},[91,14223,8963],{"class":250},[91,14225,14226],{"class":93,"line":1777},[91,14227,1689],{"class":250},[91,14229,14230,14232,14234,14236,14238,14240,14242,14244,14246],{"class":93,"line":1798},[91,14231,5487],{"class":153},[91,14233,11508],{"class":97},[91,14235,251],{"class":250},[91,14237,14160],{"class":153},[91,14239,1523],{"class":5339},[91,14241,14200],{"class":250},[91,14243,254],{"class":153},[91,14245,2956],{"class":5339},[91,14247,257],{"class":250},[91,14249,14250],{"class":93,"line":1803},[91,14251,1670],{"class":250},[91,14253,14254,14256,14258,14261,14263],{"class":93,"line":1817},[91,14255,6652],{"class":250},[91,14257,1293],{"class":153},[91,14259,14260],{"class":101}," \"func (double a ,int b)的调用！\"",[91,14262,1569],{"class":153},[91,14264,8963],{"class":250},[91,14266,14267],{"class":93,"line":1822},[91,14268,1689],{"class":250},[91,14270,14271],{"class":93,"line":1851},[91,14272,2523],{"emptyLinePlaceholder":175},[91,14274,14275],{"class":93,"line":1856},[91,14276,14277],{"class":308},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[91,14279,14280],{"class":93,"line":1873},[91,14281,14282],{"class":308},"\u002F\u002Fint func(double a, int b)\n",[91,14284,14285],{"class":93,"line":1878},[91,14286,14287],{"class":308},"\u002F\u002F{\n",[91,14289,14290],{"class":93,"line":1883},[91,14291,14292],{"class":308},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[91,14294,14295],{"class":93,"line":1888},[91,14296,14297],{"class":308},"\u002F\u002F}\n",[91,14299,14300],{"class":93,"line":1902},[91,14301,2523],{"emptyLinePlaceholder":175},[91,14303,14304],{"class":93,"line":1907},[91,14305,2523],{"emptyLinePlaceholder":175},[91,14307,14308,14310,14312],{"class":93,"line":2700},[91,14309,254],{"class":153},[91,14311,2096],{"class":97},[91,14313,10976],{"class":250},[91,14315,14316],{"class":93,"line":2714},[91,14317,2523],{"emptyLinePlaceholder":175},[91,14319,14320,14322],{"class":93,"line":2722},[91,14321,13408],{"class":97},[91,14323,5759],{"class":250},[91,14325,14326,14328,14330,14332],{"class":93,"line":2727},[91,14327,13408],{"class":97},[91,14329,251],{"class":250},[91,14331,695],{"class":105},[91,14333,2842],{"class":250},[91,14335,14336,14338,14340,14342],{"class":93,"line":2733},[91,14337,13408],{"class":97},[91,14339,251],{"class":250},[91,14341,299],{"class":105},[91,14343,2842],{"class":250},[91,14345,14346,14348,14350,14352,14354,14356],{"class":93,"line":2739},[91,14347,13408],{"class":97},[91,14349,251],{"class":250},[91,14351,695],{"class":105},[91,14353,627],{"class":250},[91,14355,299],{"class":105},[91,14357,2842],{"class":250},[91,14359,14360,14362,14364,14366,14369,14371],{"class":93,"line":2744},[91,14361,13408],{"class":97},[91,14363,251],{"class":250},[91,14365,299],{"class":105},[91,14367,14368],{"class":250}," , ",[91,14370,695],{"class":105},[91,14372,2842],{"class":250},[91,14374,14375],{"class":93,"line":8071},[91,14376,13333],{"class":250},[91,14378,14379,14381,14383,14385],{"class":93,"line":8095},[91,14380,2426],{"class":97},[91,14382,251],{"class":250},[91,14384,2431],{"class":101},[91,14386,2842],{"class":250},[91,14388,14389],{"class":93,"line":8100},[91,14390,2523],{"emptyLinePlaceholder":175},[91,14392,14393,14395,14397],{"class":93,"line":8106},[91,14394,4213],{"class":153},[91,14396,4216],{"class":105},[91,14398,1415],{"class":250},[91,14400,14401],{"class":93,"line":8133},[91,14402,1689],{"class":250},[21,14404,14405],{},"重点：函数返回值不可以作为函数重载条件！",[217,14407,14409],{"id":14408},"_732注意事项","7.3.2注意事项",[1256,14411,14412,14415],{},[17,14413,14414],{},"引用作为重载条件!!!",[17,14416,14417],{},"函数重载碰到函数默认参数",[82,14419,14421],{"className":238,"code":14420,"language":240,"meta":26,"style":26},"\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",[88,14422,14423,14428,14433,14437,14453,14457,14470,14474,14478,14496,14500,14513,14517,14521,14525,14530,14534,14558,14562,14575,14579,14583,14597,14601,14614,14618,14622,14630,14634,14646,14656,14669,14673,14677,14685,14689,14699,14703,14711],{"__ignoreMap":26},[91,14424,14425],{"class":93,"line":94},[91,14426,14427],{"class":308},"\u002F\u002F函数重载注意事项\n",[91,14429,14430],{"class":93,"line":38},[91,14431,14432],{"class":308},"\u002F\u002F1、引用作为重载条件\n",[91,14434,14435],{"class":93,"line":1304},[91,14436,2523],{"emptyLinePlaceholder":175},[91,14438,14439,14441,14443,14445,14447,14449,14451],{"class":93,"line":1319},[91,14440,5487],{"class":153},[91,14442,11508],{"class":97},[91,14444,251],{"class":250},[91,14446,254],{"class":153},[91,14448,10707],{"class":153},[91,14450,487],{"class":5339},[91,14452,257],{"class":250},[91,14454,14455],{"class":93,"line":1325},[91,14456,1670],{"class":250},[91,14458,14459,14461,14463,14466,14468],{"class":93,"line":1339},[91,14460,6652],{"class":250},[91,14462,1293],{"class":153},[91,14464,14465],{"class":101}," \"func (int &a) 调用 \"",[91,14467,1569],{"class":153},[91,14469,8963],{"class":250},[91,14471,14472],{"class":93,"line":1345},[91,14473,1689],{"class":250},[91,14475,14476],{"class":93,"line":1436},[91,14477,2523],{"emptyLinePlaceholder":175},[91,14479,14480,14482,14484,14486,14488,14490,14492,14494],{"class":93,"line":1442},[91,14481,5487],{"class":153},[91,14483,11508],{"class":97},[91,14485,251],{"class":250},[91,14487,6915],{"class":153},[91,14489,2505],{"class":153},[91,14491,10707],{"class":153},[91,14493,487],{"class":5339},[91,14495,257],{"class":250},[91,14497,14498],{"class":93,"line":1454},[91,14499,1670],{"class":250},[91,14501,14502,14504,14506,14509,14511],{"class":93,"line":1736},[91,14503,6652],{"class":250},[91,14505,1293],{"class":153},[91,14507,14508],{"class":101}," \"func (const int &a) 调用 \"",[91,14510,1569],{"class":153},[91,14512,8963],{"class":250},[91,14514,14515],{"class":93,"line":1741},[91,14516,1689],{"class":250},[91,14518,14519],{"class":93,"line":1747},[91,14520,2523],{"emptyLinePlaceholder":175},[91,14522,14523],{"class":93,"line":1752},[91,14524,2523],{"emptyLinePlaceholder":175},[91,14526,14527],{"class":93,"line":1766},[91,14528,14529],{"class":308},"\u002F\u002F2、函数重载碰到函数默认参数\n",[91,14531,14532],{"class":93,"line":1771},[91,14533,2523],{"emptyLinePlaceholder":175},[91,14535,14536,14538,14540,14542,14544,14546,14548,14550,14552,14554,14556],{"class":93,"line":1777},[91,14537,5487],{"class":153},[91,14539,13741],{"class":97},[91,14541,251],{"class":250},[91,14543,254],{"class":153},[91,14545,1523],{"class":5339},[91,14547,12558],{"class":250},[91,14549,254],{"class":153},[91,14551,2956],{"class":5339},[91,14553,13687],{"class":153},[91,14555,2161],{"class":105},[91,14557,257],{"class":250},[91,14559,14560],{"class":93,"line":1798},[91,14561,1670],{"class":250},[91,14563,14564,14566,14568,14571,14573],{"class":93,"line":1803},[91,14565,6652],{"class":250},[91,14567,1293],{"class":153},[91,14569,14570],{"class":101}," \"func2(int a, int b = 10) 调用\"",[91,14572,1569],{"class":153},[91,14574,8963],{"class":250},[91,14576,14577],{"class":93,"line":1817},[91,14578,1689],{"class":250},[91,14580,14581],{"class":93,"line":1822},[91,14582,2523],{"emptyLinePlaceholder":175},[91,14584,14585,14587,14589,14591,14593,14595],{"class":93,"line":1851},[91,14586,5487],{"class":153},[91,14588,13741],{"class":97},[91,14590,251],{"class":250},[91,14592,254],{"class":153},[91,14594,1523],{"class":5339},[91,14596,257],{"class":250},[91,14598,14599],{"class":93,"line":1856},[91,14600,1670],{"class":250},[91,14602,14603,14605,14607,14610,14612],{"class":93,"line":1873},[91,14604,6652],{"class":250},[91,14606,1293],{"class":153},[91,14608,14609],{"class":101}," \"func2(int a) 调用\"",[91,14611,1569],{"class":153},[91,14613,8963],{"class":250},[91,14615,14616],{"class":93,"line":1878},[91,14617,1689],{"class":250},[91,14619,14620],{"class":93,"line":1883},[91,14621,2523],{"emptyLinePlaceholder":175},[91,14623,14624,14626,14628],{"class":93,"line":1888},[91,14625,254],{"class":153},[91,14627,2096],{"class":97},[91,14629,10976],{"class":250},[91,14631,14632],{"class":93,"line":1902},[91,14633,13333],{"class":250},[91,14635,14636,14638,14640,14642,14644],{"class":93,"line":1907},[91,14637,2108],{"class":153},[91,14639,10992],{"class":250},[91,14641,296],{"class":153},[91,14643,2161],{"class":105},[91,14645,1415],{"class":250},[91,14647,14648,14650,14653],{"class":93,"line":2700},[91,14649,13408],{"class":97},[91,14651,14652],{"class":250},"(a);",[91,14654,14655],{"class":308}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[91,14657,14658,14660,14662,14664,14666],{"class":93,"line":2714},[91,14659,13408],{"class":97},[91,14661,251],{"class":250},[91,14663,695],{"class":105},[91,14665,6089],{"class":250},[91,14667,14668],{"class":308},"\u002F\u002F调用有const   10是个常量\n",[91,14670,14671],{"class":93,"line":2722},[91,14672,2523],{"emptyLinePlaceholder":175},[91,14674,14675],{"class":93,"line":2727},[91,14676,2523],{"emptyLinePlaceholder":175},[91,14678,14679,14682],{"class":93,"line":2733},[91,14680,14681],{"class":308},"    \u002F\u002Ffunc2(10);",[91,14683,14684],{"class":308}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[91,14686,14687],{"class":93,"line":2739},[91,14688,2523],{"emptyLinePlaceholder":175},[91,14690,14691,14693,14695,14697],{"class":93,"line":2744},[91,14692,2426],{"class":97},[91,14694,251],{"class":250},[91,14696,2431],{"class":101},[91,14698,2842],{"class":250},[91,14700,14701],{"class":93,"line":8071},[91,14702,2523],{"emptyLinePlaceholder":175},[91,14704,14705,14707,14709],{"class":93,"line":8095},[91,14706,4213],{"class":153},[91,14708,4216],{"class":105},[91,14710,1415],{"class":250},[91,14712,14713],{"class":93,"line":8100},[91,14714,1689],{"class":250},[168,14716,14717],{},"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":26,"searchDepth":38,"depth":38,"links":14719},[14720,14721,14722],{"id":13652,"depth":38,"text":13653},{"id":13909,"depth":38,"text":13910},{"id":14031,"depth":38,"text":14032,"children":14723},[14724,14725],{"id":14038,"depth":1304,"text":14039},{"id":14408,"depth":1304,"text":14409},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13644,"description":26},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14732,"title":14733,"body":14734,"description":23488,"extension":173,"meta":23489,"navigation":175,"path":23490,"seo":23491,"stem":23492,"__hash__":23493},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14735,"toc":23469},[14736,14739,14745,14752,14757,14760,14763,14766,14770,14774,14777,14780,14788,14793,14796,14803,14808,14967,14970,15223,15226,15229,15232,15237,15240,15243,15254,15259,15495,15499,15509,15512,15520,15667,15671,15674,15677,15681,16126,16130,16138,16146,17058,17065,17070,17698,17701,17704,17707,17826,17829,17916,17919,18045,18048,18142,18145,18498,18502,18510,18514,18521,18524,18527,18538,18544,18549,18561,18569,18589,18597,18614,18800,18803,18807,18810,18813,18816,18819,18822,18825,18828,19288,19294,19298,19301,19312,19899,19902,20391,20395,20398,20401,20404,20407,20410,20418,20814,20818,20821,20824,21271,21274,21277,21282,21285,21290,21293,21297,21300,21302,21308,21311,21617,21627,21668,21672,21675,21677,21710,21713,22020,22022,22037,22040,22063,22072,22078,22081,22085,22088,22091,22096,22107,22112,22120,22125,22255,22258,22261,22436,22441,22653,22657,22660,22774,22779,23018,23022,23026,23029,23032,23037,23142,23145,23148,23151,23155,23266,23269,23272,23277,23329,23332,23335,23340,23386,23389,23394,23462,23464,23467],[10,14737,14733],{"id":14738},"_8类和对象",[21,14740,14741,14742],{},"C++面向对象的三大特性为",[398,14743,14744],{},"封装、继承、多态",[21,14746,14747,14748,14751],{},"C++认为",[398,14749,14750],{},"万事万物都皆为对象","，对象上有其属性和行为",[21,14753,14754],{},[398,14755,14756],{},"例如：",[21,14758,14759],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[21,14761,14762],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[21,14764,14765],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[190,14767,14769],{"id":14768},"_81封装","8.1封装",[217,14771,14773],{"id":14772},"_811封装的意义","8.1.1封装的意义",[21,14775,14776],{},"封装是C++面向对象三大特性之一",[21,14778,14779],{},"封装的意义：",[1256,14781,14782,14785],{},[17,14783,14784],{},"将属性和行为作为一个整体，表现生活中的事物",[17,14786,14787],{},"将属性和行为加以权限控制",[21,14789,14790],{},[398,14791,14792],{},"封装意义一：",[21,14794,14795],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[21,14797,14798,13918,14800],{},[398,14799,5304],{},[88,14801,14802],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[14,14804,14805],{},[17,14806,14807],{},"**示例1：**设计一个圆类，求圆的周长",[82,14809,14811],{"className":238,"code":14810,"language":240,"meta":26,"style":26},"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",[88,14812,14813,14821,14825,14830,14835,14840,14845,14852,14857,14867,14871,14889,14893,14897,14905,14909,14914,14919,14924,14929,14940,14963],{"__ignoreMap":26},[91,14814,14815,14818],{"class":93,"line":94},[91,14816,14817],{"class":153},"class",[91,14819,14820],{"class":97}," Circle\n",[91,14822,14823],{"class":93,"line":38},[91,14824,1670],{"class":250},[91,14826,14827],{"class":93,"line":1304},[91,14828,14829],{"class":308},"    \u002F\u002F访问权限\n",[91,14831,14832],{"class":93,"line":1319},[91,14833,14834],{"class":308},"    \u002F\u002F公共权限\n",[91,14836,14837],{"class":93,"line":1325},[91,14838,14839],{"class":153},"public:\n",[91,14841,14842],{"class":93,"line":1339},[91,14843,14844],{"class":308},"    \u002F\u002F属性\n",[91,14846,14847,14849],{"class":93,"line":1345},[91,14848,2108],{"class":153},[91,14850,14851],{"class":250}," m_r;\n",[91,14853,14854],{"class":93,"line":1436},[91,14855,14856],{"class":308},"    \u002F\u002F行为\n",[91,14858,14859,14862,14865],{"class":93,"line":1442},[91,14860,14861],{"class":153},"    double",[91,14863,14864],{"class":97}," calculateZC",[91,14866,2099],{"class":250},[91,14868,14869],{"class":93,"line":1454},[91,14870,2153],{"class":250},[91,14872,14873,14876,14879,14881,14884,14886],{"class":93,"line":1736},[91,14874,14875],{"class":153},"        return",[91,14877,14878],{"class":105}," 2",[91,14880,704],{"class":153},[91,14882,14883],{"class":250},"PI",[91,14885,704],{"class":153},[91,14887,14888],{"class":250},"m_r;\n",[91,14890,14891],{"class":93,"line":1741},[91,14892,2310],{"class":250},[91,14894,14895],{"class":93,"line":1747},[91,14896,4118],{"class":250},[91,14898,14899,14901,14903],{"class":93,"line":1752},[91,14900,254],{"class":153},[91,14902,2096],{"class":97},[91,14904,2099],{"class":250},[91,14906,14907],{"class":93,"line":1766},[91,14908,1670],{"class":250},[91,14910,14911],{"class":93,"line":1771},[91,14912,14913],{"class":308},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[91,14915,14916],{"class":93,"line":1777},[91,14917,14918],{"class":308},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[91,14920,14921],{"class":93,"line":1798},[91,14922,14923],{"class":250},"    Circle c1;\n",[91,14925,14926],{"class":93,"line":1803},[91,14927,14928],{"class":308},"    \u002F\u002F给圆对象 的属性进行赋值\n",[91,14930,14931,14934,14936,14938],{"class":93,"line":1817},[91,14932,14933],{"class":250},"    c1.m_r",[91,14935,296],{"class":153},[91,14937,695],{"class":105},[91,14939,1415],{"class":250},[91,14941,14942,14944,14946,14949,14951,14954,14957,14959,14961],{"class":93,"line":1822},[91,14943,1675],{"class":250},[91,14945,1293],{"class":153},[91,14947,14948],{"class":101},"\"圆的周长\"",[91,14950,1293],{"class":153},[91,14952,14953],{"class":250},"c1.",[91,14955,14956],{"class":97},"calculateZC",[91,14958,2550],{"class":250},[91,14960,1293],{"class":153},[91,14962,1316],{"class":250},[91,14964,14965],{"class":93,"line":1851},[91,14966,1689],{"class":250},[21,14968,14969],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[82,14971,14973],{"className":238,"code":14972,"language":240,"meta":26,"style":26},"#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",[88,14974,14975,14981,14991,14997,15003,15007,15011,15016,15023,15028,15046,15050,15060,15064,15069,15085,15089,15099,15103,15108,15116,15120,15152,15156,15160,15168,15172,15177,15182,15196,15210,15219],{"__ignoreMap":26},[91,14976,14977,14979],{"class":93,"line":94},[91,14978,2073],{"class":153},[91,14980,2076],{"class":101},[91,14982,14983,14985,14987,14989],{"class":93,"line":38},[91,14984,2081],{"class":153},[91,14986,2084],{"class":153},[91,14988,2087],{"class":97},[91,14990,1415],{"class":250},[91,14992,14993,14995],{"class":93,"line":1304},[91,14994,2073],{"class":153},[91,14996,7872],{"class":101},[91,14998,14999,15001],{"class":93,"line":1319},[91,15000,14817],{"class":153},[91,15002,7885],{"class":97},[91,15004,15005],{"class":93,"line":1325},[91,15006,1670],{"class":250},[91,15008,15009],{"class":93,"line":1339},[91,15010,14839],{"class":153},[91,15012,15013],{"class":93,"line":1345},[91,15014,15015],{"class":250},"    string m_name;\n",[91,15017,15018,15020],{"class":93,"line":1436},[91,15019,2108],{"class":153},[91,15021,15022],{"class":250}," m_id;\n",[91,15024,15025],{"class":93,"line":1442},[91,15026,15027],{"class":308},"    \u002F\u002F赋值姓名\n",[91,15029,15030,15033,15036,15038,15041,15044],{"class":93,"line":1454},[91,15031,15032],{"class":153},"    void",[91,15034,15035],{"class":97}," setName",[91,15037,251],{"class":250},[91,15039,15040],{"class":97},"string",[91,15042,15043],{"class":5339}," name",[91,15045,257],{"class":250},[91,15047,15048],{"class":93,"line":1736},[91,15049,2153],{"class":250},[91,15051,15052,15055,15057],{"class":93,"line":1741},[91,15053,15054],{"class":250},"        m_name",[91,15056,296],{"class":153},[91,15058,15059],{"class":250},"name;\n",[91,15061,15062],{"class":93,"line":1747},[91,15063,2310],{"class":250},[91,15065,15066],{"class":93,"line":1752},[91,15067,15068],{"class":308},"    \u002F\u002F赋值学号\n",[91,15070,15071,15073,15076,15078,15080,15083],{"class":93,"line":1766},[91,15072,15032],{"class":153},[91,15074,15075],{"class":97}," setId",[91,15077,251],{"class":250},[91,15079,254],{"class":153},[91,15081,15082],{"class":5339}," id",[91,15084,257],{"class":250},[91,15086,15087],{"class":93,"line":1771},[91,15088,2153],{"class":250},[91,15090,15091,15094,15096],{"class":93,"line":1777},[91,15092,15093],{"class":250},"        m_id",[91,15095,296],{"class":153},[91,15097,15098],{"class":250},"id;\n",[91,15100,15101],{"class":93,"line":1798},[91,15102,2310],{"class":250},[91,15104,15105],{"class":93,"line":1803},[91,15106,15107],{"class":308},"    \u002F\u002F打印学生信息\n",[91,15109,15110,15112,15114],{"class":93,"line":1817},[91,15111,15032],{"class":153},[91,15113,9738],{"class":97},[91,15115,2099],{"class":250},[91,15117,15118],{"class":93,"line":1822},[91,15119,2153],{"class":250},[91,15121,15122,15124,15126,15129,15131,15134,15136,15138,15140,15143,15145,15148,15150],{"class":93,"line":1851},[91,15123,3574],{"class":250},[91,15125,1293],{"class":153},[91,15127,15128],{"class":101},"\"姓名：\"",[91,15130,1293],{"class":153},[91,15132,15133],{"class":250},"m_name",[91,15135,1293],{"class":153},[91,15137,4482],{"class":101},[91,15139,1293],{"class":153},[91,15141,15142],{"class":101},"\"学号：\"",[91,15144,1293],{"class":153},[91,15146,15147],{"class":250},"m_id",[91,15149,1293],{"class":153},[91,15151,1316],{"class":250},[91,15153,15154],{"class":93,"line":1856},[91,15155,2310],{"class":250},[91,15157,15158],{"class":93,"line":1873},[91,15159,4118],{"class":250},[91,15161,15162,15164,15166],{"class":93,"line":1878},[91,15163,254],{"class":153},[91,15165,2096],{"class":97},[91,15167,2099],{"class":250},[91,15169,15170],{"class":93,"line":1883},[91,15171,1670],{"class":250},[91,15173,15174],{"class":93,"line":1888},[91,15175,15176],{"class":308},"    \u002F\u002F实例化\n",[91,15178,15179],{"class":93,"line":1902},[91,15180,15181],{"class":250},"    Student s1;\n",[91,15183,15184,15187,15190,15192,15194],{"class":93,"line":1907},[91,15185,15186],{"class":250},"    s1.",[91,15188,15189],{"class":97},"setName",[91,15191,251],{"class":250},[91,15193,8039],{"class":101},[91,15195,2842],{"class":250},[91,15197,15198,15200,15203,15205,15208],{"class":93,"line":2700},[91,15199,15186],{"class":250},[91,15201,15202],{"class":97},"setId",[91,15204,251],{"class":250},[91,15206,15207],{"class":105},"123456",[91,15209,2842],{"class":250},[91,15211,15212,15214,15217],{"class":93,"line":2714},[91,15213,15186],{"class":250},[91,15215,15216],{"class":97},"printInfo",[91,15218,5759],{"class":250},[91,15220,15221],{"class":93,"line":2722},[91,15222,1689],{"class":250},[21,15224,15225],{},"类中的属性和行为统称为成员",[21,15227,15228],{},"属性：成员属性(成员变量)",[21,15230,15231],{},"方法：成员函数(成员方法)",[21,15233,15234],{},[398,15235,15236],{},"封装意义二：",[21,15238,15239],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[21,15241,15242],{},"访问权限有三种：",[14,15244,15245,15248,15251],{},[17,15246,15247],{},"public        公共权限",[17,15249,15250],{},"protected 保护权限",[17,15252,15253],{},"private      私有权限",[21,15255,15256],{},[398,15257,15258],{},"示例：",[82,15260,15262],{"className":10064,"code":15261,"language":10066,"meta":26,"style":26},"\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",[88,15263,15264,15269,15274,15279,15284,15288,15295,15299,15304,15308,15313,15317,15322,15327,15332,15336,15341,15346,15353,15357,15361,15369,15373,15384,15396,15408,15412,15416,15420,15428,15432,15437,15449,15457,15465,15469,15479,15483,15491],{"__ignoreMap":26},[91,15265,15266],{"class":93,"line":94},[91,15267,15268],{"class":308},"\u002F\u002F三种权限\n",[91,15270,15271],{"class":93,"line":38},[91,15272,15273],{"class":308},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[91,15275,15276],{"class":93,"line":1304},[91,15277,15278],{"class":308},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[91,15280,15281],{"class":93,"line":1319},[91,15282,15283],{"class":308},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[91,15285,15286],{"class":93,"line":1325},[91,15287,2523],{"emptyLinePlaceholder":175},[91,15289,15290,15292],{"class":93,"line":1339},[91,15291,14817],{"class":153},[91,15293,15294],{"class":97}," Person\n",[91,15296,15297],{"class":93,"line":1345},[91,15298,1670],{"class":250},[91,15300,15301],{"class":93,"line":1436},[91,15302,15303],{"class":308},"    \u002F\u002F姓名  公共权限\n",[91,15305,15306],{"class":93,"line":1442},[91,15307,14839],{"class":153},[91,15309,15310],{"class":93,"line":1454},[91,15311,15312],{"class":250},"    string m_Name;\n",[91,15314,15315],{"class":93,"line":1736},[91,15316,2523],{"emptyLinePlaceholder":175},[91,15318,15319],{"class":93,"line":1741},[91,15320,15321],{"class":308},"    \u002F\u002F汽车  保护权限\n",[91,15323,15324],{"class":93,"line":1747},[91,15325,15326],{"class":153},"protected:\n",[91,15328,15329],{"class":93,"line":1752},[91,15330,15331],{"class":250},"    string m_Car;\n",[91,15333,15334],{"class":93,"line":1766},[91,15335,2523],{"emptyLinePlaceholder":175},[91,15337,15338],{"class":93,"line":1771},[91,15339,15340],{"class":308},"    \u002F\u002F银行卡密码  私有权限\n",[91,15342,15343],{"class":93,"line":1777},[91,15344,15345],{"class":153},"private:\n",[91,15347,15348,15350],{"class":93,"line":1798},[91,15349,2108],{"class":153},[91,15351,15352],{"class":250}," m_Password;\n",[91,15354,15355],{"class":93,"line":1803},[91,15356,2523],{"emptyLinePlaceholder":175},[91,15358,15359],{"class":93,"line":1817},[91,15360,14839],{"class":153},[91,15362,15363,15365,15367],{"class":93,"line":1822},[91,15364,15032],{"class":153},[91,15366,11508],{"class":97},[91,15368,2099],{"class":250},[91,15370,15371],{"class":93,"line":1851},[91,15372,2153],{"class":250},[91,15374,15375,15378,15380,15382],{"class":93,"line":1856},[91,15376,15377],{"class":250},"        m_Name ",[91,15379,296],{"class":153},[91,15381,9061],{"class":101},[91,15383,1415],{"class":250},[91,15385,15386,15389,15391,15394],{"class":93,"line":1873},[91,15387,15388],{"class":250},"        m_Car ",[91,15390,296],{"class":153},[91,15392,15393],{"class":101}," \"拖拉机\"",[91,15395,1415],{"class":250},[91,15397,15398,15401,15403,15406],{"class":93,"line":1878},[91,15399,15400],{"class":250},"        m_Password ",[91,15402,296],{"class":153},[91,15404,15405],{"class":105}," 123456",[91,15407,1415],{"class":250},[91,15409,15410],{"class":93,"line":1883},[91,15411,2310],{"class":250},[91,15413,15414],{"class":93,"line":1888},[91,15415,4118],{"class":250},[91,15417,15418],{"class":93,"line":1902},[91,15419,2523],{"emptyLinePlaceholder":175},[91,15421,15422,15424,15426],{"class":93,"line":1907},[91,15423,254],{"class":153},[91,15425,2096],{"class":97},[91,15427,10976],{"class":250},[91,15429,15430],{"class":93,"line":2700},[91,15431,2523],{"emptyLinePlaceholder":175},[91,15433,15434],{"class":93,"line":2714},[91,15435,15436],{"class":250},"    Person p;\n",[91,15438,15439,15442,15444,15447],{"class":93,"line":2722},[91,15440,15441],{"class":250},"    p.m_Name ",[91,15443,296],{"class":153},[91,15445,15446],{"class":101}," \"李四\"",[91,15448,1415],{"class":250},[91,15450,15451,15454],{"class":93,"line":2727},[91,15452,15453],{"class":308},"    \u002F\u002Fp.m_Car = \"奔驰\";",[91,15455,15456],{"class":308},"  \u002F\u002F保护权限类外访问不到\n",[91,15458,15459,15462],{"class":93,"line":2733},[91,15460,15461],{"class":308},"    \u002F\u002Fp.m_Password = 123;",[91,15463,15464],{"class":308}," \u002F\u002F私有权限类外访问不到\n",[91,15466,15467],{"class":93,"line":2739},[91,15468,2523],{"emptyLinePlaceholder":175},[91,15470,15471,15473,15475,15477],{"class":93,"line":2744},[91,15472,2426],{"class":97},[91,15474,251],{"class":250},[91,15476,2431],{"class":101},[91,15478,2842],{"class":250},[91,15480,15481],{"class":93,"line":8071},[91,15482,2523],{"emptyLinePlaceholder":175},[91,15484,15485,15487,15489],{"class":93,"line":8095},[91,15486,4213],{"class":153},[91,15488,4216],{"class":105},[91,15490,1415],{"class":250},[91,15492,15493],{"class":93,"line":8100},[91,15494,1689],{"class":250},[217,15496,15498],{"id":15497},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[21,15500,15501,15502,15505,15506],{},"在C++中 struct和class唯一的",[398,15503,15504],{},"区别","就在于 ",[398,15507,15508],{},"默认的访问权限不同",[21,15510,15511],{},"区别：",[1256,15513,15514,15517],{},[17,15515,15516],{},"struct 默认权限为公共",[17,15518,15519],{},"class   默认权限为私有",[82,15521,15523],{"className":10064,"code":15522,"language":10066,"meta":26,"style":26},"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",[88,15524,15525,15532,15536,15546,15550,15554,15561,15565,15575,15579,15583,15591,15595,15600,15614,15618,15623,15637,15641,15651,15655,15663],{"__ignoreMap":26},[91,15526,15527,15529],{"class":93,"line":94},[91,15528,14817],{"class":153},[91,15530,15531],{"class":97}," C1\n",[91,15533,15534],{"class":93,"line":38},[91,15535,1670],{"class":250},[91,15537,15538,15540,15543],{"class":93,"line":1304},[91,15539,2108],{"class":153},[91,15541,15542],{"class":250},"  m_A;",[91,15544,15545],{"class":308}," \u002F\u002F默认是私有权限\n",[91,15547,15548],{"class":93,"line":1319},[91,15549,4118],{"class":250},[91,15551,15552],{"class":93,"line":1325},[91,15553,2523],{"emptyLinePlaceholder":175},[91,15555,15556,15558],{"class":93,"line":1339},[91,15557,7882],{"class":153},[91,15559,15560],{"class":97}," C2\n",[91,15562,15563],{"class":93,"line":1345},[91,15564,1670],{"class":250},[91,15566,15567,15569,15572],{"class":93,"line":1436},[91,15568,2108],{"class":153},[91,15570,15571],{"class":250}," m_A;",[91,15573,15574],{"class":308},"  \u002F\u002F默认是公共权限\n",[91,15576,15577],{"class":93,"line":1442},[91,15578,4118],{"class":250},[91,15580,15581],{"class":93,"line":1454},[91,15582,2523],{"emptyLinePlaceholder":175},[91,15584,15585,15587,15589],{"class":93,"line":1736},[91,15586,254],{"class":153},[91,15588,2096],{"class":97},[91,15590,10976],{"class":250},[91,15592,15593],{"class":93,"line":1741},[91,15594,2523],{"emptyLinePlaceholder":175},[91,15596,15597],{"class":93,"line":1747},[91,15598,15599],{"class":250},"    C1 c1;\n",[91,15601,15602,15605,15607,15609,15611],{"class":93,"line":1752},[91,15603,15604],{"class":250},"    c1.m_A ",[91,15606,296],{"class":153},[91,15608,2161],{"class":105},[91,15610,305],{"class":250},[91,15612,15613],{"class":308}," \u002F\u002F错误，访问权限是私有\n",[91,15615,15616],{"class":93,"line":1766},[91,15617,2523],{"emptyLinePlaceholder":175},[91,15619,15620],{"class":93,"line":1771},[91,15621,15622],{"class":250},"    C2 c2;\n",[91,15624,15625,15628,15630,15632,15634],{"class":93,"line":1777},[91,15626,15627],{"class":250},"    c2.m_A ",[91,15629,296],{"class":153},[91,15631,2161],{"class":105},[91,15633,305],{"class":250},[91,15635,15636],{"class":308}," \u002F\u002F正确，访问权限是公共\n",[91,15638,15639],{"class":93,"line":1798},[91,15640,2523],{"emptyLinePlaceholder":175},[91,15642,15643,15645,15647,15649],{"class":93,"line":1803},[91,15644,2426],{"class":97},[91,15646,251],{"class":250},[91,15648,2431],{"class":101},[91,15650,2842],{"class":250},[91,15652,15653],{"class":93,"line":1817},[91,15654,2523],{"emptyLinePlaceholder":175},[91,15656,15657,15659,15661],{"class":93,"line":1822},[91,15658,4213],{"class":153},[91,15660,4216],{"class":105},[91,15662,1415],{"class":250},[91,15664,15665],{"class":93,"line":1851},[91,15666,1689],{"class":250},[217,15668,15670],{"id":15669},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[21,15672,15673],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[21,15675,15676],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[21,15678,15679],{},[398,15680,15258],{},[82,15682,15684],{"className":10064,"code":15683,"language":10066,"meta":26,"style":26},"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",[88,15685,15686,15696,15700,15704,15709,15723,15732,15736,15746,15750,15757,15761,15765,15769,15774,15783,15790,15794,15799,15815,15838,15851,15858,15862,15871,15875,15879,15884,15900,15910,15914,15918,15922,15930,15934,15944,15948,15956,15960,15964,15972,15976,15980,15985,15998,16021,16025,16030,16043,16065,16069,16074,16088,16096,16100,16110,16114,16122],{"__ignoreMap":26},[91,15687,15688,15690,15693],{"class":93,"line":94},[91,15689,14817],{"class":153},[91,15691,15692],{"class":97}," Person",[91,15694,15695],{"class":250}," {\n",[91,15697,15698],{"class":93,"line":38},[91,15699,14839],{"class":153},[91,15701,15702],{"class":93,"line":1304},[91,15703,2523],{"emptyLinePlaceholder":175},[91,15705,15706],{"class":93,"line":1319},[91,15707,15708],{"class":308},"    \u002F\u002F姓名设置可读可写\n",[91,15710,15711,15713,15715,15717,15719,15721],{"class":93,"line":1325},[91,15712,15032],{"class":153},[91,15714,15035],{"class":97},[91,15716,251],{"class":250},[91,15718,15040],{"class":97},[91,15720,15043],{"class":5339},[91,15722,12565],{"class":250},[91,15724,15725,15727,15729],{"class":93,"line":1339},[91,15726,15377],{"class":250},[91,15728,296],{"class":153},[91,15730,15731],{"class":250}," name;\n",[91,15733,15734],{"class":93,"line":1345},[91,15735,2310],{"class":250},[91,15737,15738,15741,15744],{"class":93,"line":1436},[91,15739,15740],{"class":97},"    string",[91,15742,15743],{"class":97}," getName",[91,15745,2099],{"class":250},[91,15747,15748],{"class":93,"line":1442},[91,15749,2153],{"class":250},[91,15751,15752,15754],{"class":93,"line":1454},[91,15753,14875],{"class":153},[91,15755,15756],{"class":250}," m_Name;\n",[91,15758,15759],{"class":93,"line":1736},[91,15760,2310],{"class":250},[91,15762,15763],{"class":93,"line":1741},[91,15764,2523],{"emptyLinePlaceholder":175},[91,15766,15767],{"class":93,"line":1747},[91,15768,2523],{"emptyLinePlaceholder":175},[91,15770,15771],{"class":93,"line":1752},[91,15772,15773],{"class":308},"    \u002F\u002F获取年龄 \n",[91,15775,15776,15778,15781],{"class":93,"line":1766},[91,15777,2108],{"class":153},[91,15779,15780],{"class":97}," getAge",[91,15782,10976],{"class":250},[91,15784,15785,15787],{"class":93,"line":1771},[91,15786,14875],{"class":153},[91,15788,15789],{"class":250}," m_Age;\n",[91,15791,15792],{"class":93,"line":1777},[91,15793,2310],{"class":250},[91,15795,15796],{"class":93,"line":1798},[91,15797,15798],{"class":308},"    \u002F\u002F设置年龄\n",[91,15800,15801,15803,15806,15808,15810,15813],{"class":93,"line":1803},[91,15802,15032],{"class":153},[91,15804,15805],{"class":97}," setAge",[91,15807,251],{"class":250},[91,15809,254],{"class":153},[91,15811,15812],{"class":5339}," age",[91,15814,12565],{"class":250},[91,15816,15817,15819,15822,15824,15826,15828,15831,15833,15836],{"class":93,"line":1817},[91,15818,2620],{"class":153},[91,15820,15821],{"class":250}," (age ",[91,15823,1159],{"class":153},[91,15825,4216],{"class":105},[91,15827,3378],{"class":153},[91,15829,15830],{"class":250}," age ",[91,15832,1209],{"class":153},[91,15834,15835],{"class":105}," 150",[91,15837,12565],{"class":250},[91,15839,15840,15842,15844,15847,15849],{"class":93,"line":1822},[91,15841,9842],{"class":250},[91,15843,1293],{"class":153},[91,15845,15846],{"class":101}," \"你个老妖精!\"",[91,15848,1569],{"class":153},[91,15850,8963],{"class":250},[91,15852,15853,15856],{"class":93,"line":1851},[91,15854,15855],{"class":153},"            return",[91,15857,1415],{"class":250},[91,15859,15860],{"class":93,"line":1856},[91,15861,2652],{"class":250},[91,15863,15864,15867,15869],{"class":93,"line":1873},[91,15865,15866],{"class":250},"        m_Age ",[91,15868,296],{"class":153},[91,15870,7920],{"class":250},[91,15872,15873],{"class":93,"line":1878},[91,15874,2310],{"class":250},[91,15876,15877],{"class":93,"line":1883},[91,15878,2523],{"emptyLinePlaceholder":175},[91,15880,15881],{"class":93,"line":1888},[91,15882,15883],{"class":308},"    \u002F\u002F情人设置为只写\n",[91,15885,15886,15888,15891,15893,15895,15898],{"class":93,"line":1902},[91,15887,15032],{"class":153},[91,15889,15890],{"class":97}," setLover",[91,15892,251],{"class":250},[91,15894,15040],{"class":97},[91,15896,15897],{"class":5339}," lover",[91,15899,12565],{"class":250},[91,15901,15902,15905,15907],{"class":93,"line":1907},[91,15903,15904],{"class":250},"        m_Lover ",[91,15906,296],{"class":153},[91,15908,15909],{"class":250}," lover;\n",[91,15911,15912],{"class":93,"line":2700},[91,15913,2310],{"class":250},[91,15915,15916],{"class":93,"line":2714},[91,15917,2523],{"emptyLinePlaceholder":175},[91,15919,15920],{"class":93,"line":2722},[91,15921,15345],{"class":153},[91,15923,15924,15927],{"class":93,"line":2727},[91,15925,15926],{"class":250},"    string m_Name;",[91,15928,15929],{"class":308}," \u002F\u002F可读可写  姓名\n",[91,15931,15932],{"class":93,"line":2733},[91,15933,13333],{"class":250},[91,15935,15936,15938,15941],{"class":93,"line":2739},[91,15937,2108],{"class":153},[91,15939,15940],{"class":250}," m_Age;",[91,15942,15943],{"class":308}," \u002F\u002F只读  年龄\n",[91,15945,15946],{"class":93,"line":2744},[91,15947,2523],{"emptyLinePlaceholder":175},[91,15949,15950,15953],{"class":93,"line":8071},[91,15951,15952],{"class":250},"    string m_Lover;",[91,15954,15955],{"class":308}," \u002F\u002F只写  情人\n",[91,15957,15958],{"class":93,"line":8095},[91,15959,4118],{"class":250},[91,15961,15962],{"class":93,"line":8100},[91,15963,2523],{"emptyLinePlaceholder":175},[91,15965,15966,15968,15970],{"class":93,"line":8106},[91,15967,254],{"class":153},[91,15969,2096],{"class":97},[91,15971,10976],{"class":250},[91,15973,15974],{"class":93,"line":8133},[91,15975,2523],{"emptyLinePlaceholder":175},[91,15977,15978],{"class":93,"line":8138},[91,15979,15436],{"class":250},[91,15981,15982],{"class":93,"line":8144},[91,15983,15984],{"class":308},"    \u002F\u002F姓名设置\n",[91,15986,15987,15990,15992,15994,15996],{"class":93,"line":8156},[91,15988,15989],{"class":250},"    p.",[91,15991,15189],{"class":97},[91,15993,251],{"class":250},[91,15995,8039],{"class":101},[91,15997,2842],{"class":250},[91,15999,16000,16002,16004,16007,16009,16012,16015,16017,16019],{"class":93,"line":8168},[91,16001,6652],{"class":250},[91,16003,1293],{"class":153},[91,16005,16006],{"class":101}," \"姓名： \"",[91,16008,1569],{"class":153},[91,16010,16011],{"class":250}," p.",[91,16013,16014],{"class":97},"getName",[91,16016,13173],{"class":250},[91,16018,1293],{"class":153},[91,16020,8963],{"class":250},[91,16022,16023],{"class":93,"line":8180},[91,16024,2523],{"emptyLinePlaceholder":175},[91,16026,16027],{"class":93,"line":9839},[91,16028,16029],{"class":308},"    \u002F\u002F年龄设置\n",[91,16031,16032,16034,16037,16039,16041],{"class":93,"line":9864},[91,16033,15989],{"class":250},[91,16035,16036],{"class":97},"setAge",[91,16038,251],{"class":250},[91,16040,905],{"class":105},[91,16042,2842],{"class":250},[91,16044,16045,16047,16049,16052,16054,16056,16059,16061,16063],{"class":93,"line":9887},[91,16046,6652],{"class":250},[91,16048,1293],{"class":153},[91,16050,16051],{"class":101}," \"年龄： \"",[91,16053,1569],{"class":153},[91,16055,16011],{"class":250},[91,16057,16058],{"class":97},"getAge",[91,16060,13173],{"class":250},[91,16062,1293],{"class":153},[91,16064,8963],{"class":250},[91,16066,16067],{"class":93,"line":9911},[91,16068,2523],{"emptyLinePlaceholder":175},[91,16070,16071],{"class":93,"line":9916},[91,16072,16073],{"class":308},"    \u002F\u002F情人设置\n",[91,16075,16076,16078,16081,16083,16086],{"class":93,"line":9921},[91,16077,15989],{"class":250},[91,16079,16080],{"class":97},"setLover",[91,16082,251],{"class":250},[91,16084,16085],{"class":101},"\"苍井\"",[91,16087,2842],{"class":250},[91,16089,16090,16093],{"class":93,"line":9926},[91,16091,16092],{"class":308},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[91,16094,16095],{"class":308},"  \u002F\u002F只写属性，不可以读取\n",[91,16097,16098],{"class":93,"line":9935},[91,16099,2523],{"emptyLinePlaceholder":175},[91,16101,16102,16104,16106,16108],{"class":93,"line":9940},[91,16103,2426],{"class":97},[91,16105,251],{"class":250},[91,16107,2431],{"class":101},[91,16109,2842],{"class":250},[91,16111,16112],{"class":93,"line":9946},[91,16113,2523],{"emptyLinePlaceholder":175},[91,16115,16116,16118,16120],{"class":93,"line":9967},[91,16117,4213],{"class":153},[91,16119,4216],{"class":105},[91,16121,1415],{"class":250},[91,16123,16124],{"class":93,"line":9973},[91,16125,1689],{"class":250},[217,16127,16129],{"id":16128},"_814封装案例","8.1.4封装案例",[14,16131,16132],{},[17,16133,16134,16137],{},[398,16135,16136],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1256,16139,16140,16143],{},[17,16141,16142],{},"求出立方体的面积和体积",[17,16144,16145],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[82,16147,16149],{"className":238,"code":16148,"language":240,"meta":26,"style":26},"#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",[88,16150,16151,16157,16167,16174,16178,16182,16187,16217,16221,16231,16241,16251,16255,16264,16268,16304,16308,16317,16321,16337,16341,16346,16355,16359,16366,16370,16379,16383,16390,16394,16403,16407,16414,16418,16423,16440,16444,16490,16494,16503,16507,16511,16515,16524,16528,16532,16537,16541,16547,16553,16559,16563,16567,16572,16594,16598,16652,16656,16664,16668,16673,16678,16691,16698,16714,16725,16731,16754,16760,16783,16797,16817,16823,16834,16857,16879,16884,16890,16904,16917,16922,16936,16941,16947,16952,16966,16971,16976,16990,17002,17007,17020,17025,17030,17035,17048,17053],{"__ignoreMap":26},[91,16152,16153,16155],{"class":93,"line":94},[91,16154,2073],{"class":153},[91,16156,2076],{"class":101},[91,16158,16159,16161,16163,16165],{"class":93,"line":38},[91,16160,2081],{"class":153},[91,16162,2084],{"class":153},[91,16164,2087],{"class":97},[91,16166,1415],{"class":250},[91,16168,16169,16171],{"class":93,"line":1304},[91,16170,14817],{"class":153},[91,16172,16173],{"class":97}," Cube\n",[91,16175,16176],{"class":93,"line":1319},[91,16177,1670],{"class":250},[91,16179,16180],{"class":93,"line":1325},[91,16181,14839],{"class":153},[91,16183,16184],{"class":93,"line":1339},[91,16185,16186],{"class":308},"    \u002F\u002F输入长宽高\n",[91,16188,16189,16191,16194,16196,16198,16201,16203,16205,16208,16210,16212,16215],{"class":93,"line":1345},[91,16190,15032],{"class":153},[91,16192,16193],{"class":97}," setLwh",[91,16195,251],{"class":250},[91,16197,254],{"class":153},[91,16199,16200],{"class":5339}," l",[91,16202,627],{"class":250},[91,16204,254],{"class":153},[91,16206,16207],{"class":5339}," w",[91,16209,627],{"class":250},[91,16211,254],{"class":153},[91,16213,16214],{"class":5339}," h",[91,16216,257],{"class":250},[91,16218,16219],{"class":93,"line":1436},[91,16220,2153],{"class":250},[91,16222,16223,16226,16228],{"class":93,"line":1442},[91,16224,16225],{"class":250},"        m_L",[91,16227,296],{"class":153},[91,16229,16230],{"class":250},"l;\n",[91,16232,16233,16236,16238],{"class":93,"line":1454},[91,16234,16235],{"class":250},"        m_W",[91,16237,296],{"class":153},[91,16239,16240],{"class":250},"w;\n",[91,16242,16243,16246,16248],{"class":93,"line":1736},[91,16244,16245],{"class":250},"        m_H",[91,16247,296],{"class":153},[91,16249,16250],{"class":250},"h;\n",[91,16252,16253],{"class":93,"line":1741},[91,16254,2310],{"class":250},[91,16256,16257,16259,16262],{"class":93,"line":1747},[91,16258,2108],{"class":153},[91,16260,16261],{"class":97}," mianji",[91,16263,2099],{"class":250},[91,16265,16266],{"class":93,"line":1752},[91,16267,2153],{"class":250},[91,16269,16270,16272,16274,16276,16279,16281,16284,16286,16289,16291,16294,16296,16299,16301],{"class":93,"line":1766},[91,16271,14875],{"class":153},[91,16273,14878],{"class":105},[91,16275,704],{"class":153},[91,16277,16278],{"class":250},"(m_L",[91,16280,704],{"class":153},[91,16282,16283],{"class":250},"m_W ",[91,16285,730],{"class":153},[91,16287,16288],{"class":250}," m_L",[91,16290,704],{"class":153},[91,16292,16293],{"class":250},"m_H ",[91,16295,730],{"class":153},[91,16297,16298],{"class":250}," m_W",[91,16300,704],{"class":153},[91,16302,16303],{"class":250},"m_H);\n",[91,16305,16306],{"class":93,"line":1771},[91,16307,2310],{"class":250},[91,16309,16310,16312,16315],{"class":93,"line":1777},[91,16311,2108],{"class":153},[91,16313,16314],{"class":97}," tiji",[91,16316,2099],{"class":250},[91,16318,16319],{"class":93,"line":1798},[91,16320,2153],{"class":250},[91,16322,16323,16325,16327,16329,16332,16334],{"class":93,"line":1803},[91,16324,14875],{"class":153},[91,16326,16288],{"class":250},[91,16328,704],{"class":153},[91,16330,16331],{"class":250},"m_W",[91,16333,704],{"class":153},[91,16335,16336],{"class":250},"m_H;\n",[91,16338,16339],{"class":93,"line":1817},[91,16340,2310],{"class":250},[91,16342,16343],{"class":93,"line":1822},[91,16344,16345],{"class":308},"    \u002F\u002F获取长宽高\n",[91,16347,16348,16350,16353],{"class":93,"line":1851},[91,16349,2108],{"class":153},[91,16351,16352],{"class":97}," getLength",[91,16354,2099],{"class":250},[91,16356,16357],{"class":93,"line":1856},[91,16358,2153],{"class":250},[91,16360,16361,16363],{"class":93,"line":1873},[91,16362,14875],{"class":153},[91,16364,16365],{"class":250}," m_L;\n",[91,16367,16368],{"class":93,"line":1878},[91,16369,2310],{"class":250},[91,16371,16372,16374,16377],{"class":93,"line":1883},[91,16373,2108],{"class":153},[91,16375,16376],{"class":97}," getWidth",[91,16378,2099],{"class":250},[91,16380,16381],{"class":93,"line":1888},[91,16382,2153],{"class":250},[91,16384,16385,16387],{"class":93,"line":1902},[91,16386,14875],{"class":153},[91,16388,16389],{"class":250}," m_W;\n",[91,16391,16392],{"class":93,"line":1907},[91,16393,2310],{"class":250},[91,16395,16396,16398,16401],{"class":93,"line":2700},[91,16397,2108],{"class":153},[91,16399,16400],{"class":97}," getHeight",[91,16402,2099],{"class":250},[91,16404,16405],{"class":93,"line":2714},[91,16406,2153],{"class":250},[91,16408,16409,16411],{"class":93,"line":2722},[91,16410,14875],{"class":153},[91,16412,16413],{"class":250}," m_H;\n",[91,16415,16416],{"class":93,"line":2727},[91,16417,2310],{"class":250},[91,16419,16420],{"class":93,"line":2733},[91,16421,16422],{"class":308},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[91,16424,16425,16428,16431,16433,16436,16438],{"class":93,"line":2739},[91,16426,16427],{"class":153},"    bool",[91,16429,16430],{"class":97}," isEqual",[91,16432,251],{"class":250},[91,16434,16435],{"class":97},"Cube",[91,16437,2972],{"class":5339},[91,16439,257],{"class":250},[91,16441,16442],{"class":93,"line":2744},[91,16443,2153],{"class":250},[91,16445,16446,16448,16451,16454,16456,16458,16461,16463,16466,16469,16471,16473,16476,16478,16480,16483,16485,16487],{"class":93,"line":8071},[91,16447,2620],{"class":153},[91,16449,16450],{"class":250}," (c.",[91,16452,16453],{"class":97},"getLength",[91,16455,13173],{"class":250},[91,16457,3072],{"class":153},[91,16459,16460],{"class":250}," m_L ",[91,16462,1839],{"class":153},[91,16464,16465],{"class":250}," c.",[91,16467,16468],{"class":97},"getWidth",[91,16470,13173],{"class":250},[91,16472,3072],{"class":153},[91,16474,16475],{"class":250}," m_W ",[91,16477,1839],{"class":153},[91,16479,16465],{"class":250},[91,16481,16482],{"class":97},"getHeight",[91,16484,13173],{"class":250},[91,16486,3072],{"class":153},[91,16488,16489],{"class":250}," m_H)\n",[91,16491,16492],{"class":93,"line":8095},[91,16493,2633],{"class":250},[91,16495,16496,16498,16501],{"class":93,"line":8100},[91,16497,15855],{"class":153},[91,16499,16500],{"class":105}," true",[91,16502,1415],{"class":250},[91,16504,16505],{"class":93,"line":8106},[91,16506,2652],{"class":250},[91,16508,16509],{"class":93,"line":8133},[91,16510,2693],{"class":153},[91,16512,16513],{"class":93,"line":8138},[91,16514,2633],{"class":250},[91,16516,16517,16519,16522],{"class":93,"line":8144},[91,16518,15855],{"class":153},[91,16520,16521],{"class":105}," false",[91,16523,1415],{"class":250},[91,16525,16526],{"class":93,"line":8156},[91,16527,2652],{"class":250},[91,16529,16530],{"class":93,"line":8168},[91,16531,2310],{"class":250},[91,16533,16534],{"class":93,"line":8180},[91,16535,16536],{"class":308},"    \u002F\u002F私有属性\n",[91,16538,16539],{"class":93,"line":9839},[91,16540,15345],{"class":153},[91,16542,16543,16545],{"class":93,"line":9864},[91,16544,2108],{"class":153},[91,16546,16365],{"class":250},[91,16548,16549,16551],{"class":93,"line":9887},[91,16550,2108],{"class":153},[91,16552,16389],{"class":250},[91,16554,16555,16557],{"class":93,"line":9911},[91,16556,2108],{"class":153},[91,16558,16413],{"class":250},[91,16560,16561],{"class":93,"line":9916},[91,16562,2523],{"emptyLinePlaceholder":175},[91,16564,16565],{"class":93,"line":9921},[91,16566,4118],{"class":250},[91,16568,16569],{"class":93,"line":9926},[91,16570,16571],{"class":308},"\u002F\u002F全局函数判断两个立方体是否相等\n",[91,16573,16574,16576,16578,16580,16582,16585,16587,16589,16592],{"class":93,"line":9935},[91,16575,1479],{"class":153},[91,16577,16430],{"class":97},[91,16579,251],{"class":250},[91,16581,16435],{"class":97},[91,16583,16584],{"class":5339}," c1",[91,16586,627],{"class":250},[91,16588,16435],{"class":97},[91,16590,16591],{"class":5339}," c2",[91,16593,257],{"class":250},[91,16595,16596],{"class":93,"line":9940},[91,16597,1670],{"class":250},[91,16599,16600,16602,16605,16607,16609,16611,16614,16616,16619,16621,16623,16625,16627,16629,16631,16633,16635,16637,16639,16641,16643,16645,16647,16649],{"class":93,"line":9946},[91,16601,4213],{"class":153},[91,16603,16604],{"class":250}," (c1.",[91,16606,16453],{"class":97},[91,16608,13173],{"class":250},[91,16610,3072],{"class":153},[91,16612,16613],{"class":250}," c2.",[91,16615,16453],{"class":97},[91,16617,16618],{"class":250},"()) ",[91,16620,1839],{"class":153},[91,16622,16604],{"class":250},[91,16624,16468],{"class":97},[91,16626,13173],{"class":250},[91,16628,3072],{"class":153},[91,16630,16613],{"class":250},[91,16632,16468],{"class":97},[91,16634,16618],{"class":250},[91,16636,1839],{"class":153},[91,16638,16604],{"class":250},[91,16640,16482],{"class":97},[91,16642,13173],{"class":250},[91,16644,3072],{"class":153},[91,16646,16613],{"class":250},[91,16648,16482],{"class":97},[91,16650,16651],{"class":250},"());\n",[91,16653,16654],{"class":93,"line":9967},[91,16655,1689],{"class":250},[91,16657,16658,16660,16662],{"class":93,"line":9973},[91,16659,254],{"class":153},[91,16661,2096],{"class":97},[91,16663,2099],{"class":250},[91,16665,16666],{"class":93,"line":9987},[91,16667,1670],{"class":250},[91,16669,16670],{"class":93,"line":9993},[91,16671,16672],{"class":250},"    Cube c1;\n",[91,16674,16675],{"class":93,"line":10020},[91,16676,16677],{"class":308},"    \u002F\u002F输入立方体的长宽高\n",[91,16679,16680,16682,16684,16687,16689],{"class":93,"line":10029},[91,16681,1675],{"class":250},[91,16683,1293],{"class":153},[91,16685,16686],{"class":101},"\"请输入第一个立方体的长、宽、高：\"",[91,16688,1293],{"class":153},[91,16690,1316],{"class":250},[91,16692,16693,16695],{"class":93,"line":10035},[91,16694,2108],{"class":153},[91,16696,16697],{"class":250}," l,w,h,l1,w1,h1;\n",[91,16699,16700,16702,16704,16706,16708,16710,16712],{"class":93,"line":10043},[91,16701,2135],{"class":250},[91,16703,1554],{"class":153},[91,16705,767],{"class":250},[91,16707,1554],{"class":153},[91,16709,1044],{"class":250},[91,16711,1554],{"class":153},[91,16713,16250],{"class":250},[91,16715,16716,16719,16722],{"class":93,"line":10048},[91,16717,16718],{"class":250},"    c1.",[91,16720,16721],{"class":97},"setLwh",[91,16723,16724],{"class":250},"(l,w,h);\n",[91,16726,16728],{"class":93,"line":16727},66,[91,16729,16730],{"class":308},"    \u002F\u002F面积\n",[91,16732,16734,16736,16738,16741,16743,16745,16748,16750,16752],{"class":93,"line":16733},67,[91,16735,1675],{"class":250},[91,16737,1293],{"class":153},[91,16739,16740],{"class":101},"\"立方体的表面积为：\"",[91,16742,1293],{"class":153},[91,16744,14953],{"class":250},[91,16746,16747],{"class":97},"mianji",[91,16749,2550],{"class":250},[91,16751,1293],{"class":153},[91,16753,1316],{"class":250},[91,16755,16757],{"class":93,"line":16756},68,[91,16758,16759],{"class":308},"    \u002F\u002F体积\n",[91,16761,16763,16765,16767,16770,16772,16774,16777,16779,16781],{"class":93,"line":16762},69,[91,16764,1675],{"class":250},[91,16766,1293],{"class":153},[91,16768,16769],{"class":101},"\"立方体的体积为：\"",[91,16771,1293],{"class":153},[91,16773,14953],{"class":250},[91,16775,16776],{"class":97},"tiji",[91,16778,2550],{"class":250},[91,16780,1293],{"class":153},[91,16782,1316],{"class":250},[91,16784,16786,16788,16790,16793,16795],{"class":93,"line":16785},70,[91,16787,1675],{"class":250},[91,16789,1293],{"class":153},[91,16791,16792],{"class":101},"\"请输入第二个立方体的长、宽、高：\"",[91,16794,1293],{"class":153},[91,16796,1316],{"class":250},[91,16798,16800,16802,16804,16807,16809,16812,16814],{"class":93,"line":16799},71,[91,16801,2135],{"class":250},[91,16803,1554],{"class":153},[91,16805,16806],{"class":250},"l1",[91,16808,1554],{"class":153},[91,16810,16811],{"class":250},"w1",[91,16813,1554],{"class":153},[91,16815,16816],{"class":250},"h1;\n",[91,16818,16820],{"class":93,"line":16819},72,[91,16821,16822],{"class":250},"    Cube c2;\n",[91,16824,16826,16829,16831],{"class":93,"line":16825},73,[91,16827,16828],{"class":250},"    c2.",[91,16830,16721],{"class":97},[91,16832,16833],{"class":250},"(l1,w1,h1);\n",[91,16835,16837,16839,16841,16844,16846,16849,16851,16853,16855],{"class":93,"line":16836},74,[91,16838,1675],{"class":250},[91,16840,1293],{"class":153},[91,16842,16843],{"class":101},"\"第二个立方体的表面积为：\"",[91,16845,1293],{"class":153},[91,16847,16848],{"class":250},"c2.",[91,16850,16747],{"class":97},[91,16852,2550],{"class":250},[91,16854,1293],{"class":153},[91,16856,1316],{"class":250},[91,16858,16860,16862,16864,16867,16869,16871,16873,16875,16877],{"class":93,"line":16859},75,[91,16861,1675],{"class":250},[91,16863,1293],{"class":153},[91,16865,16866],{"class":101},"\"第二个立方体的体积为：\"",[91,16868,1293],{"class":153},[91,16870,16848],{"class":250},[91,16872,16776],{"class":97},[91,16874,2550],{"class":250},[91,16876,1293],{"class":153},[91,16878,1316],{"class":250},[91,16880,16882],{"class":93,"line":16881},76,[91,16883,2523],{"emptyLinePlaceholder":175},[91,16885,16887],{"class":93,"line":16886},77,[91,16888,16889],{"class":308},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[91,16891,16893,16895,16897,16900,16902],{"class":93,"line":16892},78,[91,16894,1675],{"class":250},[91,16896,1293],{"class":153},[91,16898,16899],{"class":101},"\"内部函数判断结果：\"",[91,16901,1293],{"class":153},[91,16903,1316],{"class":250},[91,16905,16907,16909,16911,16914],{"class":93,"line":16906},79,[91,16908,3224],{"class":153},[91,16910,16604],{"class":250},[91,16912,16913],{"class":97},"isEqual",[91,16915,16916],{"class":250},"(c2))\n",[91,16918,16920],{"class":93,"line":16919},80,[91,16921,2153],{"class":250},[91,16923,16925,16927,16929,16932,16934],{"class":93,"line":16924},81,[91,16926,3574],{"class":250},[91,16928,1293],{"class":153},[91,16930,16931],{"class":101},"\"两个立方体相等\"",[91,16933,1293],{"class":153},[91,16935,1316],{"class":250},[91,16937,16939],{"class":93,"line":16938},82,[91,16940,2310],{"class":250},[91,16942,16944],{"class":93,"line":16943},83,[91,16945,16946],{"class":153},"    else\n",[91,16948,16950],{"class":93,"line":16949},84,[91,16951,2153],{"class":250},[91,16953,16955,16957,16959,16962,16964],{"class":93,"line":16954},85,[91,16956,3574],{"class":250},[91,16958,1293],{"class":153},[91,16960,16961],{"class":101},"\"两个立方体不相等\"",[91,16963,1293],{"class":153},[91,16965,1316],{"class":250},[91,16967,16969],{"class":93,"line":16968},86,[91,16970,2310],{"class":250},[91,16972,16974],{"class":93,"line":16973},87,[91,16975,2523],{"emptyLinePlaceholder":175},[91,16977,16979,16981,16983,16986,16988],{"class":93,"line":16978},88,[91,16980,1675],{"class":250},[91,16982,1293],{"class":153},[91,16984,16985],{"class":101},"\"全局函数判断结果：\"",[91,16987,1293],{"class":153},[91,16989,1316],{"class":250},[91,16991,16993,16995,16997,16999],{"class":93,"line":16992},89,[91,16994,3224],{"class":153},[91,16996,1782],{"class":250},[91,16998,16913],{"class":97},[91,17000,17001],{"class":250},"(c1, c2))\n",[91,17003,17005],{"class":93,"line":17004},90,[91,17006,2153],{"class":250},[91,17008,17010,17012,17014,17016,17018],{"class":93,"line":17009},91,[91,17011,3574],{"class":250},[91,17013,1293],{"class":153},[91,17015,16931],{"class":101},[91,17017,1293],{"class":153},[91,17019,1316],{"class":250},[91,17021,17023],{"class":93,"line":17022},92,[91,17024,2310],{"class":250},[91,17026,17028],{"class":93,"line":17027},93,[91,17029,16946],{"class":153},[91,17031,17033],{"class":93,"line":17032},94,[91,17034,2153],{"class":250},[91,17036,17038,17040,17042,17044,17046],{"class":93,"line":17037},95,[91,17039,3574],{"class":250},[91,17041,1293],{"class":153},[91,17043,16961],{"class":101},[91,17045,1293],{"class":153},[91,17047,1316],{"class":250},[91,17049,17051],{"class":93,"line":17050},96,[91,17052,2310],{"class":250},[91,17054,17056],{"class":93,"line":17055},97,[91,17057,1689],{"class":250},[14,17059,17060],{"start":38},[17,17061,17062],{},[398,17063,17064],{},"练习案例2：点和圆的关系",[1256,17066,17067],{},[17,17068,17069],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[82,17071,17073],{"className":238,"code":17072,"language":240,"meta":26,"style":26},"#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",[88,17074,17075,17081,17091,17098,17105,17109,17113,17118,17152,17157,17173,17187,17191,17195,17202,17209,17213,17219,17223,17227,17231,17253,17276,17281,17295,17310,17314,17318,17324,17329,17334,17338,17364,17368,17398,17426,17454,17471,17475,17488,17492,17496,17500,17513,17517,17521,17529,17533,17537,17541,17546,17550,17561,17568,17577,17587,17598,17605,17618,17629,17639,17650,17657,17671,17676,17686,17694],{"__ignoreMap":26},[91,17076,17077,17079],{"class":93,"line":94},[91,17078,2073],{"class":153},[91,17080,2076],{"class":101},[91,17082,17083,17085,17087,17089],{"class":93,"line":38},[91,17084,2081],{"class":153},[91,17086,2084],{"class":153},[91,17088,2087],{"class":97},[91,17090,1415],{"class":250},[91,17092,17093,17095],{"class":93,"line":1304},[91,17094,2073],{"class":153},[91,17096,17097],{"class":101},"\u003Ccmath>\n",[91,17099,17100,17102],{"class":93,"line":1319},[91,17101,14817],{"class":153},[91,17103,17104],{"class":97}," Point\n",[91,17106,17107],{"class":93,"line":1325},[91,17108,1670],{"class":250},[91,17110,17111],{"class":93,"line":1339},[91,17112,14839],{"class":153},[91,17114,17115],{"class":93,"line":1345},[91,17116,17117],{"class":308},"    \u002F\u002F赋值\n",[91,17119,17120,17122,17125,17127,17129,17132,17134,17136,17139,17142,17144,17147,17149],{"class":93,"line":1436},[91,17121,15032],{"class":153},[91,17123,17124],{"class":97}," setPoint",[91,17126,251],{"class":250},[91,17128,14160],{"class":153},[91,17130,17131],{"class":5339}," x",[91,17133,12558],{"class":250},[91,17135,14160],{"class":153},[91,17137,17138],{"class":5339}," y",[91,17140,17141],{"class":250},") { m_x ",[91,17143,296],{"class":153},[91,17145,17146],{"class":250}," x; m_y ",[91,17148,296],{"class":153},[91,17150,17151],{"class":250}," y; }\n",[91,17153,17154],{"class":93,"line":1442},[91,17155,17156],{"class":308},"    \u002F\u002F获取坐标\n",[91,17158,17159,17161,17164,17167,17170],{"class":93,"line":1454},[91,17160,14861],{"class":153},[91,17162,17163],{"class":97}," getX",[91,17165,17166],{"class":250},"() { ",[91,17168,17169],{"class":153},"return",[91,17171,17172],{"class":250}," m_x; }\n",[91,17174,17175,17177,17180,17182,17184],{"class":93,"line":1736},[91,17176,14861],{"class":153},[91,17178,17179],{"class":97}," getY",[91,17181,17166],{"class":250},[91,17183,17169],{"class":153},[91,17185,17186],{"class":250}," m_y; }\n",[91,17188,17189],{"class":93,"line":1741},[91,17190,2523],{"emptyLinePlaceholder":175},[91,17192,17193],{"class":93,"line":1747},[91,17194,15345],{"class":153},[91,17196,17197,17199],{"class":93,"line":1752},[91,17198,14861],{"class":153},[91,17200,17201],{"class":250}," m_x;\n",[91,17203,17204,17206],{"class":93,"line":1766},[91,17205,14861],{"class":153},[91,17207,17208],{"class":250}," m_y;\n",[91,17210,17211],{"class":93,"line":1771},[91,17212,4118],{"class":250},[91,17214,17215,17217],{"class":93,"line":1777},[91,17216,14817],{"class":153},[91,17218,14820],{"class":97},[91,17220,17221],{"class":93,"line":1798},[91,17222,1670],{"class":250},[91,17224,17225],{"class":93,"line":1803},[91,17226,14839],{"class":153},[91,17228,17229],{"class":93,"line":1817},[91,17230,17117],{"class":308},[91,17232,17233,17235,17238,17240,17242,17245,17248,17250],{"class":93,"line":1822},[91,17234,15032],{"class":153},[91,17236,17237],{"class":97}," setRadius",[91,17239,251],{"class":250},[91,17241,14160],{"class":153},[91,17243,17244],{"class":5339}," r",[91,17246,17247],{"class":250},") { m_r ",[91,17249,296],{"class":153},[91,17251,17252],{"class":250}," r; }\n",[91,17254,17255,17257,17260,17262,17265,17268,17271,17273],{"class":93,"line":1851},[91,17256,15032],{"class":153},[91,17258,17259],{"class":97}," setCenter",[91,17261,251],{"class":250},[91,17263,17264],{"class":97},"Point",[91,17266,17267],{"class":5339}," center",[91,17269,17270],{"class":250},") { m_center ",[91,17272,296],{"class":153},[91,17274,17275],{"class":250}," center; }\n",[91,17277,17278],{"class":93,"line":1856},[91,17279,17280],{"class":308},"    \u002F\u002F获取属性\n",[91,17282,17283,17285,17288,17290,17292],{"class":93,"line":1873},[91,17284,14861],{"class":153},[91,17286,17287],{"class":97}," getRadius",[91,17289,17166],{"class":250},[91,17291,17169],{"class":153},[91,17293,17294],{"class":250}," m_r; }\n",[91,17296,17297,17300,17303,17305,17307],{"class":93,"line":1878},[91,17298,17299],{"class":97},"    Point",[91,17301,17302],{"class":97}," getCenter",[91,17304,17166],{"class":250},[91,17306,17169],{"class":153},[91,17308,17309],{"class":250}," m_center; }\n",[91,17311,17312],{"class":93,"line":1883},[91,17313,2523],{"emptyLinePlaceholder":175},[91,17315,17316],{"class":93,"line":1888},[91,17317,15345],{"class":153},[91,17319,17320,17322],{"class":93,"line":1902},[91,17321,14861],{"class":153},[91,17323,14851],{"class":250},[91,17325,17326],{"class":93,"line":1907},[91,17327,17328],{"class":308},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[91,17330,17331],{"class":93,"line":2700},[91,17332,17333],{"class":250},"    Point m_center;\n",[91,17335,17336],{"class":93,"line":2714},[91,17337,4118],{"class":250},[91,17339,17340,17342,17345,17347,17350,17352,17354,17356,17358,17360,17362],{"class":93,"line":2722},[91,17341,5487],{"class":153},[91,17343,17344],{"class":97}," isInCircle",[91,17346,251],{"class":250},[91,17348,17349],{"class":97},"Circle",[91,17351,10707],{"class":153},[91,17353,537],{"class":5339},[91,17355,627],{"class":250},[91,17357,17264],{"class":97},[91,17359,10707],{"class":153},[91,17361,21],{"class":5339},[91,17363,257],{"class":250},[91,17365,17366],{"class":93,"line":2727},[91,17367,1670],{"class":250},[91,17369,17370,17372,17375,17377,17379,17382,17385,17388,17390,17392,17394,17396],{"class":93,"line":2733},[91,17371,14861],{"class":153},[91,17373,17374],{"class":250}," dx ",[91,17376,296],{"class":153},[91,17378,16465],{"class":250},[91,17380,17381],{"class":97},"getCenter",[91,17383,17384],{"class":250},"().",[91,17386,17387],{"class":97},"getX",[91,17389,13173],{"class":250},[91,17391,781],{"class":153},[91,17393,16011],{"class":250},[91,17395,17387],{"class":97},[91,17397,5759],{"class":250},[91,17399,17400,17402,17405,17407,17409,17411,17413,17416,17418,17420,17422,17424],{"class":93,"line":2739},[91,17401,14861],{"class":153},[91,17403,17404],{"class":250}," dy ",[91,17406,296],{"class":153},[91,17408,16465],{"class":250},[91,17410,17381],{"class":97},[91,17412,17384],{"class":250},[91,17414,17415],{"class":97},"getY",[91,17417,13173],{"class":250},[91,17419,781],{"class":153},[91,17421,16011],{"class":250},[91,17423,17415],{"class":97},[91,17425,5759],{"class":250},[91,17427,17428,17430,17433,17435,17438,17441,17443,17445,17447,17449,17451],{"class":93,"line":2744},[91,17429,14861],{"class":153},[91,17431,17432],{"class":250}," distance ",[91,17434,296],{"class":153},[91,17436,17437],{"class":97}," sqrt",[91,17439,17440],{"class":250},"(dx ",[91,17442,704],{"class":153},[91,17444,17374],{"class":250},[91,17446,730],{"class":153},[91,17448,17404],{"class":250},[91,17450,704],{"class":153},[91,17452,17453],{"class":250}," dy);\n",[91,17455,17456,17458,17461,17463,17465,17468],{"class":93,"line":8071},[91,17457,3224],{"class":153},[91,17459,17460],{"class":250}," (distance ",[91,17462,1159],{"class":153},[91,17464,16465],{"class":250},[91,17466,17467],{"class":97},"getRadius",[91,17469,17470],{"class":250},"())\n",[91,17472,17473],{"class":93,"line":8095},[91,17474,2153],{"class":250},[91,17476,17477,17479,17481,17484,17486],{"class":93,"line":8100},[91,17478,9792],{"class":250},[91,17480,1293],{"class":153},[91,17482,17483],{"class":101}," \"点在圆内\"",[91,17485,1569],{"class":153},[91,17487,8963],{"class":250},[91,17489,17490],{"class":93,"line":8106},[91,17491,2310],{"class":250},[91,17493,17494],{"class":93,"line":8133},[91,17495,16946],{"class":153},[91,17497,17498],{"class":93,"line":8138},[91,17499,2153],{"class":250},[91,17501,17502,17504,17506,17509,17511],{"class":93,"line":8144},[91,17503,9792],{"class":250},[91,17505,1293],{"class":153},[91,17507,17508],{"class":101}," \"点在圆外\"",[91,17510,1569],{"class":153},[91,17512,8963],{"class":250},[91,17514,17515],{"class":93,"line":8156},[91,17516,2310],{"class":250},[91,17518,17519],{"class":93,"line":8168},[91,17520,1689],{"class":250},[91,17522,17523,17525,17527],{"class":93,"line":8180},[91,17524,254],{"class":153},[91,17526,2096],{"class":97},[91,17528,2099],{"class":250},[91,17530,17531],{"class":93,"line":9839},[91,17532,1670],{"class":250},[91,17534,17535],{"class":93,"line":9864},[91,17536,15176],{"class":308},[91,17538,17539],{"class":93,"line":9887},[91,17540,14923],{"class":250},[91,17542,17543],{"class":93,"line":9911},[91,17544,17545],{"class":250},"    Point p1;\n",[91,17547,17548],{"class":93,"line":9916},[91,17549,17117],{"class":308},[91,17551,17552,17554,17556,17559],{"class":93,"line":9921},[91,17553,1675],{"class":250},[91,17555,1293],{"class":153},[91,17557,17558],{"class":101},"\"请输入圆的半径：\"",[91,17560,1415],{"class":250},[91,17562,17563,17565],{"class":93,"line":9926},[91,17564,14861],{"class":153},[91,17566,17567],{"class":250}," r;\n",[91,17569,17570,17572,17574],{"class":93,"line":9935},[91,17571,2135],{"class":250},[91,17573,1554],{"class":153},[91,17575,17576],{"class":250},"r;\n",[91,17578,17579,17581,17584],{"class":93,"line":9940},[91,17580,16718],{"class":250},[91,17582,17583],{"class":97},"setRadius",[91,17585,17586],{"class":250},"(r);\n",[91,17588,17589,17591,17593,17596],{"class":93,"line":9946},[91,17590,1675],{"class":250},[91,17592,1293],{"class":153},[91,17594,17595],{"class":101},"\"请输入圆心坐标：\"",[91,17597,1415],{"class":250},[91,17599,17600,17602],{"class":93,"line":9967},[91,17601,14861],{"class":153},[91,17603,17604],{"class":250}," x, y;\n",[91,17606,17607,17609,17611,17613,17615],{"class":93,"line":9973},[91,17608,2135],{"class":250},[91,17610,1554],{"class":153},[91,17612,1069],{"class":250},[91,17614,1554],{"class":153},[91,17616,17617],{"class":250},"y;\n",[91,17619,17620,17623,17626],{"class":93,"line":9987},[91,17621,17622],{"class":250},"    p1.",[91,17624,17625],{"class":97},"setPoint",[91,17627,17628],{"class":250},"(x, y);\n",[91,17630,17631,17633,17636],{"class":93,"line":9993},[91,17632,16718],{"class":250},[91,17634,17635],{"class":97},"setCenter",[91,17637,17638],{"class":250},"(p1);\n",[91,17640,17641,17643,17645,17648],{"class":93,"line":10020},[91,17642,1675],{"class":250},[91,17644,1293],{"class":153},[91,17646,17647],{"class":101},"\"请输入测试点坐标：\"",[91,17649,1415],{"class":250},[91,17651,17652,17654],{"class":93,"line":10029},[91,17653,14861],{"class":153},[91,17655,17656],{"class":250}," x1, y1;\n",[91,17658,17659,17661,17663,17666,17668],{"class":93,"line":10035},[91,17660,2135],{"class":250},[91,17662,1554],{"class":153},[91,17664,17665],{"class":250},"x1",[91,17667,1554],{"class":153},[91,17669,17670],{"class":250},"y1;\n",[91,17672,17673],{"class":93,"line":10043},[91,17674,17675],{"class":250},"    Point p2;\n",[91,17677,17678,17681,17683],{"class":93,"line":10048},[91,17679,17680],{"class":250},"    p2.",[91,17682,17625],{"class":97},[91,17684,17685],{"class":250},"(x1, y1);\n",[91,17687,17688,17691],{"class":93,"line":16727},[91,17689,17690],{"class":97},"    isInCircle",[91,17692,17693],{"class":250},"(c1, p2);\n",[91,17695,17696],{"class":93,"line":16733},[91,17697,1689],{"class":250},[21,17699,17700],{},"在类中可以让另一个类作为本来的成员",[21,17702,17703],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[21,17705,17706],{},"创建point.h",[82,17708,17710],{"className":238,"code":17709,"language":240,"meta":26,"style":26},"#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",[88,17711,17712,17723,17729,17739,17745,17749,17754,17758,17762,17782,17786,17794,17802,17806,17810,17816,17822],{"__ignoreMap":26},[91,17713,17714,17717,17720],{"class":93,"line":94},[91,17715,17716],{"class":153},"#pragma",[91,17718,17719],{"class":97}," once",[91,17721,17722],{"class":308}," \u002F\u002F防止头文件重复包含\n",[91,17724,17725,17727],{"class":93,"line":38},[91,17726,2073],{"class":153},[91,17728,2076],{"class":101},[91,17730,17731,17733,17735,17737],{"class":93,"line":1304},[91,17732,2081],{"class":153},[91,17734,2084],{"class":153},[91,17736,2087],{"class":97},[91,17738,1415],{"class":250},[91,17740,17741,17743],{"class":93,"line":1319},[91,17742,14817],{"class":153},[91,17744,17104],{"class":97},[91,17746,17747],{"class":93,"line":1325},[91,17748,1670],{"class":250},[91,17750,17751],{"class":93,"line":1339},[91,17752,17753],{"class":308},"\u002F\u002F做好声明与变量定义就可以\n",[91,17755,17756],{"class":93,"line":1345},[91,17757,14839],{"class":153},[91,17759,17760],{"class":93,"line":1436},[91,17761,17117],{"class":308},[91,17763,17764,17766,17768,17770,17772,17774,17776,17778,17780],{"class":93,"line":1442},[91,17765,15032],{"class":153},[91,17767,17124],{"class":97},[91,17769,251],{"class":250},[91,17771,14160],{"class":153},[91,17773,17131],{"class":5339},[91,17775,12558],{"class":250},[91,17777,14160],{"class":153},[91,17779,17138],{"class":5339},[91,17781,2842],{"class":250},[91,17783,17784],{"class":93,"line":1454},[91,17785,17156],{"class":308},[91,17787,17788,17790,17792],{"class":93,"line":1736},[91,17789,14861],{"class":153},[91,17791,17163],{"class":97},[91,17793,5759],{"class":250},[91,17795,17796,17798,17800],{"class":93,"line":1741},[91,17797,14861],{"class":153},[91,17799,17179],{"class":97},[91,17801,5759],{"class":250},[91,17803,17804],{"class":93,"line":1747},[91,17805,2523],{"emptyLinePlaceholder":175},[91,17807,17808],{"class":93,"line":1752},[91,17809,15345],{"class":153},[91,17811,17812,17814],{"class":93,"line":1766},[91,17813,14861],{"class":153},[91,17815,17201],{"class":250},[91,17817,17818,17820],{"class":93,"line":1771},[91,17819,14861],{"class":153},[91,17821,17208],{"class":250},[91,17823,17824],{"class":93,"line":1777},[91,17825,4118],{"class":250},[21,17827,17828],{},"创建point.cpp",[82,17830,17832],{"className":238,"code":17831,"language":240,"meta":26,"style":26},"#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",[88,17833,17834,17841,17846,17880,17884,17900],{"__ignoreMap":26},[91,17835,17836,17838],{"class":93,"line":94},[91,17837,2073],{"class":153},[91,17839,17840],{"class":101},"\u003Cpoint.h>\n",[91,17842,17843],{"class":93,"line":38},[91,17844,17845],{"class":308},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[91,17847,17848,17850,17853,17856,17858,17860,17862,17864,17866,17868,17870,17872,17874,17876,17878],{"class":93,"line":1304},[91,17849,15032],{"class":153},[91,17851,17852],{"class":97}," Point",[91,17854,17855],{"class":250},"::",[91,17857,17625],{"class":97},[91,17859,251],{"class":250},[91,17861,14160],{"class":153},[91,17863,17131],{"class":5339},[91,17865,12558],{"class":250},[91,17867,14160],{"class":153},[91,17869,17138],{"class":5339},[91,17871,17141],{"class":250},[91,17873,296],{"class":153},[91,17875,17146],{"class":250},[91,17877,296],{"class":153},[91,17879,17151],{"class":250},[91,17881,17882],{"class":93,"line":1319},[91,17883,17156],{"class":308},[91,17885,17886,17888,17890,17892,17894,17896,17898],{"class":93,"line":1325},[91,17887,14861],{"class":153},[91,17889,17852],{"class":97},[91,17891,17855],{"class":250},[91,17893,17387],{"class":97},[91,17895,17166],{"class":250},[91,17897,17169],{"class":153},[91,17899,17172],{"class":250},[91,17901,17902,17904,17906,17908,17910,17912,17914],{"class":93,"line":1339},[91,17903,14861],{"class":153},[91,17905,17852],{"class":97},[91,17907,17855],{"class":250},[91,17909,17415],{"class":97},[91,17911,17166],{"class":250},[91,17913,17169],{"class":153},[91,17915,17186],{"class":250},[21,17917,17918],{},"创建circle.h",[82,17920,17922],{"className":238,"code":17921,"language":240,"meta":26,"style":26},"#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",[88,17923,17924,17931,17937,17947,17953,17959,17963,17967,17971,17985,17999,18003,18011,18019,18023,18027,18033,18037,18041],{"__ignoreMap":26},[91,17925,17926,17928],{"class":93,"line":94},[91,17927,17716],{"class":153},[91,17929,17930],{"class":97}," once\n",[91,17932,17933,17935],{"class":93,"line":38},[91,17934,2073],{"class":153},[91,17936,2076],{"class":101},[91,17938,17939,17941,17943,17945],{"class":93,"line":1304},[91,17940,2081],{"class":153},[91,17942,2084],{"class":153},[91,17944,2087],{"class":97},[91,17946,1415],{"class":250},[91,17948,17949,17951],{"class":93,"line":1319},[91,17950,2073],{"class":153},[91,17952,17840],{"class":101},[91,17954,17955,17957],{"class":93,"line":1325},[91,17956,14817],{"class":153},[91,17958,14820],{"class":97},[91,17960,17961],{"class":93,"line":1339},[91,17962,1670],{"class":250},[91,17964,17965],{"class":93,"line":1345},[91,17966,14839],{"class":153},[91,17968,17969],{"class":93,"line":1436},[91,17970,17117],{"class":308},[91,17972,17973,17975,17977,17979,17981,17983],{"class":93,"line":1442},[91,17974,15032],{"class":153},[91,17976,17237],{"class":97},[91,17978,251],{"class":250},[91,17980,14160],{"class":153},[91,17982,17244],{"class":5339},[91,17984,2842],{"class":250},[91,17986,17987,17989,17991,17993,17995,17997],{"class":93,"line":1454},[91,17988,15032],{"class":153},[91,17990,17259],{"class":97},[91,17992,251],{"class":250},[91,17994,17264],{"class":97},[91,17996,17267],{"class":5339},[91,17998,2842],{"class":250},[91,18000,18001],{"class":93,"line":1736},[91,18002,17280],{"class":308},[91,18004,18005,18007,18009],{"class":93,"line":1741},[91,18006,14861],{"class":153},[91,18008,17287],{"class":97},[91,18010,5759],{"class":250},[91,18012,18013,18015,18017],{"class":93,"line":1747},[91,18014,17299],{"class":97},[91,18016,17302],{"class":97},[91,18018,5759],{"class":250},[91,18020,18021],{"class":93,"line":1752},[91,18022,2523],{"emptyLinePlaceholder":175},[91,18024,18025],{"class":93,"line":1766},[91,18026,15345],{"class":153},[91,18028,18029,18031],{"class":93,"line":1771},[91,18030,14861],{"class":153},[91,18032,14851],{"class":250},[91,18034,18035],{"class":93,"line":1777},[91,18036,17328],{"class":308},[91,18038,18039],{"class":93,"line":1798},[91,18040,17333],{"class":250},[91,18042,18043],{"class":93,"line":1803},[91,18044,4118],{"class":250},[21,18046,18047],{},"创建circle.cpp",[82,18049,18051],{"className":238,"code":18050,"language":240,"meta":26,"style":26},"#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",[88,18052,18053,18060,18083,18105,18110,18126],{"__ignoreMap":26},[91,18054,18055,18057],{"class":93,"line":94},[91,18056,2073],{"class":153},[91,18058,18059],{"class":101},"\u003Ccircle.h>\n",[91,18061,18062,18064,18067,18069,18071,18073,18075,18077,18079,18081],{"class":93,"line":38},[91,18063,5487],{"class":153},[91,18065,18066],{"class":97}," Circle",[91,18068,17855],{"class":250},[91,18070,17583],{"class":97},[91,18072,251],{"class":250},[91,18074,14160],{"class":153},[91,18076,17244],{"class":5339},[91,18078,17247],{"class":250},[91,18080,296],{"class":153},[91,18082,17252],{"class":250},[91,18084,18085,18087,18089,18091,18093,18095,18097,18099,18101,18103],{"class":93,"line":1304},[91,18086,5487],{"class":153},[91,18088,18066],{"class":97},[91,18090,17855],{"class":250},[91,18092,17635],{"class":97},[91,18094,251],{"class":250},[91,18096,17264],{"class":97},[91,18098,17267],{"class":5339},[91,18100,17270],{"class":250},[91,18102,296],{"class":153},[91,18104,17275],{"class":250},[91,18106,18107],{"class":93,"line":1319},[91,18108,18109],{"class":308},"\u002F\u002F获取属性\n",[91,18111,18112,18114,18116,18118,18120,18122,18124],{"class":93,"line":1325},[91,18113,14160],{"class":153},[91,18115,18066],{"class":97},[91,18117,17855],{"class":250},[91,18119,17467],{"class":97},[91,18121,17166],{"class":250},[91,18123,17169],{"class":153},[91,18125,17294],{"class":250},[91,18127,18128,18130,18132,18134,18136,18138,18140],{"class":93,"line":1339},[91,18129,17264],{"class":97},[91,18131,18066],{"class":97},[91,18133,17855],{"class":250},[91,18135,17381],{"class":97},[91,18137,17166],{"class":250},[91,18139,17169],{"class":153},[91,18141,17309],{"class":250},[21,18143,18144],{},"使用封装的类",[82,18146,18148],{"className":238,"code":18147,"language":240,"meta":26,"style":26},"#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",[88,18149,18150,18156,18166,18172,18178,18202,18206,18232,18258,18282,18296,18300,18312,18316,18320,18324,18336,18340,18344,18352,18356,18360,18364,18368,18372,18382,18388,18396,18404,18414,18420,18432,18440,18448,18458,18464,18476,18480,18488,18494],{"__ignoreMap":26},[91,18151,18152,18154],{"class":93,"line":94},[91,18153,2073],{"class":153},[91,18155,2076],{"class":101},[91,18157,18158,18160,18162,18164],{"class":93,"line":38},[91,18159,2081],{"class":153},[91,18161,2084],{"class":153},[91,18163,2087],{"class":97},[91,18165,1415],{"class":250},[91,18167,18168,18170],{"class":93,"line":1304},[91,18169,2073],{"class":153},[91,18171,18059],{"class":101},[91,18173,18174,18176],{"class":93,"line":1319},[91,18175,2073],{"class":153},[91,18177,17840],{"class":101},[91,18179,18180,18182,18184,18186,18188,18190,18192,18194,18196,18198,18200],{"class":93,"line":1325},[91,18181,5487],{"class":153},[91,18183,17344],{"class":97},[91,18185,251],{"class":250},[91,18187,17349],{"class":97},[91,18189,10707],{"class":153},[91,18191,537],{"class":5339},[91,18193,627],{"class":250},[91,18195,17264],{"class":97},[91,18197,10707],{"class":153},[91,18199,21],{"class":5339},[91,18201,257],{"class":250},[91,18203,18204],{"class":93,"line":1339},[91,18205,1670],{"class":250},[91,18207,18208,18210,18212,18214,18216,18218,18220,18222,18224,18226,18228,18230],{"class":93,"line":1345},[91,18209,14861],{"class":153},[91,18211,17374],{"class":250},[91,18213,296],{"class":153},[91,18215,16465],{"class":250},[91,18217,17381],{"class":97},[91,18219,17384],{"class":250},[91,18221,17387],{"class":97},[91,18223,13173],{"class":250},[91,18225,781],{"class":153},[91,18227,16011],{"class":250},[91,18229,17387],{"class":97},[91,18231,5759],{"class":250},[91,18233,18234,18236,18238,18240,18242,18244,18246,18248,18250,18252,18254,18256],{"class":93,"line":1436},[91,18235,14861],{"class":153},[91,18237,17404],{"class":250},[91,18239,296],{"class":153},[91,18241,16465],{"class":250},[91,18243,17381],{"class":97},[91,18245,17384],{"class":250},[91,18247,17415],{"class":97},[91,18249,13173],{"class":250},[91,18251,781],{"class":153},[91,18253,16011],{"class":250},[91,18255,17415],{"class":97},[91,18257,5759],{"class":250},[91,18259,18260,18262,18264,18266,18268,18270,18272,18274,18276,18278,18280],{"class":93,"line":1442},[91,18261,14861],{"class":153},[91,18263,17432],{"class":250},[91,18265,296],{"class":153},[91,18267,17437],{"class":97},[91,18269,17440],{"class":250},[91,18271,704],{"class":153},[91,18273,17374],{"class":250},[91,18275,730],{"class":153},[91,18277,17404],{"class":250},[91,18279,704],{"class":153},[91,18281,17453],{"class":250},[91,18283,18284,18286,18288,18290,18292,18294],{"class":93,"line":1454},[91,18285,3224],{"class":153},[91,18287,17460],{"class":250},[91,18289,1159],{"class":153},[91,18291,16465],{"class":250},[91,18293,17467],{"class":97},[91,18295,17470],{"class":250},[91,18297,18298],{"class":93,"line":1736},[91,18299,2153],{"class":250},[91,18301,18302,18304,18306,18308,18310],{"class":93,"line":1741},[91,18303,9792],{"class":250},[91,18305,1293],{"class":153},[91,18307,17483],{"class":101},[91,18309,1569],{"class":153},[91,18311,8963],{"class":250},[91,18313,18314],{"class":93,"line":1747},[91,18315,2310],{"class":250},[91,18317,18318],{"class":93,"line":1752},[91,18319,16946],{"class":153},[91,18321,18322],{"class":93,"line":1766},[91,18323,2153],{"class":250},[91,18325,18326,18328,18330,18332,18334],{"class":93,"line":1771},[91,18327,9792],{"class":250},[91,18329,1293],{"class":153},[91,18331,17508],{"class":101},[91,18333,1569],{"class":153},[91,18335,8963],{"class":250},[91,18337,18338],{"class":93,"line":1777},[91,18339,2310],{"class":250},[91,18341,18342],{"class":93,"line":1798},[91,18343,1689],{"class":250},[91,18345,18346,18348,18350],{"class":93,"line":1803},[91,18347,254],{"class":153},[91,18349,2096],{"class":97},[91,18351,2099],{"class":250},[91,18353,18354],{"class":93,"line":1817},[91,18355,1670],{"class":250},[91,18357,18358],{"class":93,"line":1822},[91,18359,15176],{"class":308},[91,18361,18362],{"class":93,"line":1851},[91,18363,14923],{"class":250},[91,18365,18366],{"class":93,"line":1856},[91,18367,17545],{"class":250},[91,18369,18370],{"class":93,"line":1873},[91,18371,17117],{"class":308},[91,18373,18374,18376,18378,18380],{"class":93,"line":1878},[91,18375,1675],{"class":250},[91,18377,1293],{"class":153},[91,18379,17558],{"class":101},[91,18381,1415],{"class":250},[91,18383,18384,18386],{"class":93,"line":1883},[91,18385,14861],{"class":153},[91,18387,17567],{"class":250},[91,18389,18390,18392,18394],{"class":93,"line":1888},[91,18391,2135],{"class":250},[91,18393,1554],{"class":153},[91,18395,17576],{"class":250},[91,18397,18398,18400,18402],{"class":93,"line":1902},[91,18399,16718],{"class":250},[91,18401,17583],{"class":97},[91,18403,17586],{"class":250},[91,18405,18406,18408,18410,18412],{"class":93,"line":1907},[91,18407,1675],{"class":250},[91,18409,1293],{"class":153},[91,18411,17595],{"class":101},[91,18413,1415],{"class":250},[91,18415,18416,18418],{"class":93,"line":2700},[91,18417,14861],{"class":153},[91,18419,17604],{"class":250},[91,18421,18422,18424,18426,18428,18430],{"class":93,"line":2714},[91,18423,2135],{"class":250},[91,18425,1554],{"class":153},[91,18427,1069],{"class":250},[91,18429,1554],{"class":153},[91,18431,17617],{"class":250},[91,18433,18434,18436,18438],{"class":93,"line":2722},[91,18435,17622],{"class":250},[91,18437,17625],{"class":97},[91,18439,17628],{"class":250},[91,18441,18442,18444,18446],{"class":93,"line":2727},[91,18443,16718],{"class":250},[91,18445,17635],{"class":97},[91,18447,17638],{"class":250},[91,18449,18450,18452,18454,18456],{"class":93,"line":2733},[91,18451,1675],{"class":250},[91,18453,1293],{"class":153},[91,18455,17647],{"class":101},[91,18457,1415],{"class":250},[91,18459,18460,18462],{"class":93,"line":2739},[91,18461,14861],{"class":153},[91,18463,17656],{"class":250},[91,18465,18466,18468,18470,18472,18474],{"class":93,"line":2744},[91,18467,2135],{"class":250},[91,18469,1554],{"class":153},[91,18471,17665],{"class":250},[91,18473,1554],{"class":153},[91,18475,17670],{"class":250},[91,18477,18478],{"class":93,"line":8071},[91,18479,17675],{"class":250},[91,18481,18482,18484,18486],{"class":93,"line":8095},[91,18483,17680],{"class":250},[91,18485,17625],{"class":97},[91,18487,17685],{"class":250},[91,18489,18490,18492],{"class":93,"line":8100},[91,18491,17690],{"class":97},[91,18493,17693],{"class":250},[91,18495,18496],{"class":93,"line":8106},[91,18497,1689],{"class":250},[190,18499,18501],{"id":18500},"_82对象的初始化清理","8.2对象的初始化清理",[1256,18503,18504,18507],{},[17,18505,18506],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[17,18508,18509],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[217,18511,18513],{"id":18512},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[21,18515,18516,18517,18520],{},"对象的",[398,18518,18519],{},"初始化和清理","也是两个非常重要的安全问题",[21,18522,18523],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[21,18525,18526],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[21,18528,18529,18530,18533,18534,18537],{},"c++利用了",[398,18531,18532],{},"构造函数","和",[398,18535,18536],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[21,18539,18540,18541],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[398,18542,18543],{},"我们不提供构造和析构，编译器会提供",[21,18545,18546],{},[398,18547,18548],{},"编译器提供的构造函数和析构函数是空实现。",[1256,18550,18551,18554],{},[17,18552,18553],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[17,18555,18556,18557,18560],{},"析构函数：主要作用在于对象",[398,18558,18559],{},"销毁前","系统自动调用，执行一些清理工作。",[21,18562,18563,18566],{},[398,18564,18565],{},"构造函数语法：",[88,18567,18568],{},"类名(){}",[14,18570,18571,18574,18577,18580,18583],{},[17,18572,18573],{},"构造函数，没有返回值也不写void",[17,18575,18576],{},"函数名称与类名相同",[17,18578,18579],{},"构造函数可以有参数，因此可以发生重载",[17,18581,18582],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[17,18584,18585,18586,678],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[88,18587,18588],{},"Person(){}",[21,18590,18591,13918,18594],{},[398,18592,18593],{},"析构函数语法：",[88,18595,18596],{},"~类名(){}",[14,18598,18599,18602,18605,18611],{},[17,18600,18601],{},"析构函数，没有返回值也不写void",[17,18603,18604],{},"函数名称与类名相同,在名称前加上符号  ~",[17,18606,18607,18608],{},"析构函数不可以有参数，因此",[398,18609,18610],{},"不可以发生重载",[17,18612,18613],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[82,18615,18617],{"className":238,"code":18616,"language":240,"meta":26,"style":26},"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",[88,18618,18619,18625,18629,18633,18638,18645,18649,18662,18666,18671,18678,18682,18695,18699,18703,18707,18711,18719,18723,18731,18735,18739,18747,18751,18756,18760,18767,18771,18784,18788,18796],{"__ignoreMap":26},[91,18620,18621,18623],{"class":93,"line":94},[91,18622,14817],{"class":153},[91,18624,15294],{"class":97},[91,18626,18627],{"class":93,"line":38},[91,18628,1670],{"class":250},[91,18630,18631],{"class":93,"line":1304},[91,18632,14839],{"class":153},[91,18634,18635],{"class":93,"line":1319},[91,18636,18637],{"class":308},"    \u002F\u002F构造函数\n",[91,18639,18640,18643],{"class":93,"line":1325},[91,18641,18642],{"class":97},"    Person",[91,18644,2099],{"class":250},[91,18646,18647],{"class":93,"line":1339},[91,18648,2153],{"class":250},[91,18650,18651,18653,18655,18658,18660],{"class":93,"line":1345},[91,18652,9792],{"class":250},[91,18654,1293],{"class":153},[91,18656,18657],{"class":101}," \"Person的构造函数调用\"",[91,18659,1569],{"class":153},[91,18661,8963],{"class":250},[91,18663,18664],{"class":93,"line":1436},[91,18665,2310],{"class":250},[91,18667,18668],{"class":93,"line":1442},[91,18669,18670],{"class":308},"    \u002F\u002F析构函数\n",[91,18672,18673,18676],{"class":93,"line":1454},[91,18674,18675],{"class":97},"    ~Person",[91,18677,2099],{"class":250},[91,18679,18680],{"class":93,"line":1736},[91,18681,2153],{"class":250},[91,18683,18684,18686,18688,18691,18693],{"class":93,"line":1741},[91,18685,9792],{"class":250},[91,18687,1293],{"class":153},[91,18689,18690],{"class":101}," \"Person的析构函数调用\"",[91,18692,1569],{"class":153},[91,18694,8963],{"class":250},[91,18696,18697],{"class":93,"line":1747},[91,18698,2310],{"class":250},[91,18700,18701],{"class":93,"line":1752},[91,18702,2523],{"emptyLinePlaceholder":175},[91,18704,18705],{"class":93,"line":1766},[91,18706,4118],{"class":250},[91,18708,18709],{"class":93,"line":1771},[91,18710,2523],{"emptyLinePlaceholder":175},[91,18712,18713,18715,18717],{"class":93,"line":1777},[91,18714,5487],{"class":153},[91,18716,5711],{"class":97},[91,18718,2099],{"class":250},[91,18720,18721],{"class":93,"line":1798},[91,18722,1670],{"class":250},[91,18724,18725,18728],{"class":93,"line":1803},[91,18726,18727],{"class":250},"    Person p;",[91,18729,18730],{"class":308},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[91,18732,18733],{"class":93,"line":1817},[91,18734,1689],{"class":250},[91,18736,18737],{"class":93,"line":1822},[91,18738,2523],{"emptyLinePlaceholder":175},[91,18740,18741,18743,18745],{"class":93,"line":1851},[91,18742,254],{"class":153},[91,18744,2096],{"class":97},[91,18746,10976],{"class":250},[91,18748,18749],{"class":93,"line":1856},[91,18750,13333],{"class":250},[91,18752,18753],{"class":93,"line":1873},[91,18754,18755],{"class":308},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[91,18757,18758],{"class":93,"line":1878},[91,18759,2523],{"emptyLinePlaceholder":175},[91,18761,18762,18764],{"class":93,"line":1883},[91,18763,18727],{"class":250},[91,18765,18766],{"class":308},"\u002F\u002F只有构造函数\n",[91,18768,18769],{"class":93,"line":1888},[91,18770,2523],{"emptyLinePlaceholder":175},[91,18772,18773,18775,18777,18779,18781],{"class":93,"line":1902},[91,18774,2426],{"class":97},[91,18776,251],{"class":250},[91,18778,2431],{"class":101},[91,18780,6089],{"class":250},[91,18782,18783],{"class":308},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[91,18785,18786],{"class":93,"line":1907},[91,18787,2523],{"emptyLinePlaceholder":175},[91,18789,18790,18792,18794],{"class":93,"line":2700},[91,18791,4213],{"class":153},[91,18793,4216],{"class":105},[91,18795,1415],{"class":250},[91,18797,18798],{"class":93,"line":2714},[91,18799,1689],{"class":250},[21,18801,18802],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[217,18804,18806],{"id":18805},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[21,18808,18809],{},"两种分类方式：",[21,18811,18812],{},"​\t按参数分为： 有参构造和无参构造",[21,18814,18815],{},"​\t按类型分为： 普通构造和拷贝构造",[21,18817,18818],{},"三种调用方式：",[21,18820,18821],{},"​\t括号法",[21,18823,18824],{},"​\t显示法",[21,18826,18827],{},"​\t隐式转换法",[82,18829,18831],{"className":238,"code":18830,"language":240,"meta":26,"style":26},"#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",[88,18832,18833,18839,18849,18854,18859,18864,18869,18873,18881,18885,18889,18893,18899,18903,18916,18920,18932,18936,18945,18958,18962,18966,18972,18976,18989,18993,18998,19014,19018,19023,19032,19045,19049,19055,19059,19064,19072,19076,19081,19085,19093,19097,19102,19107,19112,19117,19122,19126,19131,19136,19141,19146,19150,19155,19160,19176,19188,19193,19197,19202,19207,19212,19216,19221,19235,19248,19252,19260,19264,19270,19276,19284],{"__ignoreMap":26},[91,18834,18835,18837],{"class":93,"line":94},[91,18836,2073],{"class":153},[91,18838,2076],{"class":101},[91,18840,18841,18843,18845,18847],{"class":93,"line":38},[91,18842,2081],{"class":153},[91,18844,2084],{"class":153},[91,18846,2087],{"class":97},[91,18848,1415],{"class":250},[91,18850,18851],{"class":93,"line":1304},[91,18852,18853],{"class":308},"\u002F\u002F1.构造函数的分类及调用\n",[91,18855,18856],{"class":93,"line":1319},[91,18857,18858],{"class":308},"\u002F\u002F分类\n",[91,18860,18861],{"class":93,"line":1325},[91,18862,18863],{"class":308},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[91,18865,18866],{"class":93,"line":1339},[91,18867,18868],{"class":308},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[91,18870,18871],{"class":93,"line":1345},[91,18872,2523],{"emptyLinePlaceholder":175},[91,18874,18875,18877,18879],{"class":93,"line":1436},[91,18876,14817],{"class":153},[91,18878,15692],{"class":97},[91,18880,2797],{"class":250},[91,18882,18883],{"class":93,"line":1442},[91,18884,1670],{"class":250},[91,18886,18887],{"class":93,"line":1454},[91,18888,14839],{"class":153},[91,18890,18891],{"class":93,"line":1736},[91,18892,18637],{"class":308},[91,18894,18895,18897],{"class":93,"line":1741},[91,18896,18642],{"class":97},[91,18898,2099],{"class":250},[91,18900,18901],{"class":93,"line":1747},[91,18902,2153],{"class":250},[91,18904,18905,18907,18909,18912,18914],{"class":93,"line":1752},[91,18906,3574],{"class":250},[91,18908,1293],{"class":153},[91,18910,18911],{"class":101},"\"Person构造函数无参构造\"",[91,18913,1293],{"class":153},[91,18915,1316],{"class":250},[91,18917,18918],{"class":93,"line":1766},[91,18919,2310],{"class":250},[91,18921,18922,18924,18926,18928,18930],{"class":93,"line":1771},[91,18923,18642],{"class":97},[91,18925,251],{"class":250},[91,18927,254],{"class":153},[91,18929,1523],{"class":5339},[91,18931,257],{"class":250},[91,18933,18934],{"class":93,"line":1777},[91,18935,2153],{"class":250},[91,18937,18938,18941,18943],{"class":93,"line":1798},[91,18939,18940],{"class":250},"        age",[91,18942,296],{"class":153},[91,18944,6320],{"class":250},[91,18946,18947,18949,18951,18954,18956],{"class":93,"line":1803},[91,18948,3574],{"class":250},[91,18950,1293],{"class":153},[91,18952,18953],{"class":101},"\"Person构造函数有参构造\"",[91,18955,1293],{"class":153},[91,18957,1316],{"class":250},[91,18959,18960],{"class":93,"line":1817},[91,18961,2310],{"class":250},[91,18963,18964],{"class":93,"line":1822},[91,18965,18670],{"class":308},[91,18967,18968,18970],{"class":93,"line":1851},[91,18969,18675],{"class":97},[91,18971,2099],{"class":250},[91,18973,18974],{"class":93,"line":1856},[91,18975,2153],{"class":250},[91,18977,18978,18980,18982,18985,18987],{"class":93,"line":1873},[91,18979,3574],{"class":250},[91,18981,1293],{"class":153},[91,18983,18984],{"class":101},"\"Person析构函数被调用\"",[91,18986,1293],{"class":153},[91,18988,1316],{"class":250},[91,18990,18991],{"class":93,"line":1878},[91,18992,2310],{"class":250},[91,18994,18995],{"class":93,"line":1883},[91,18996,18997],{"class":308},"    \u002F\u002F拷贝构造函数\n",[91,18999,19000,19002,19004,19006,19008,19010,19012],{"class":93,"line":1888},[91,19001,18642],{"class":97},[91,19003,251],{"class":250},[91,19005,6915],{"class":153},[91,19007,15692],{"class":97},[91,19009,10707],{"class":153},[91,19011,21],{"class":5339},[91,19013,257],{"class":250},[91,19015,19016],{"class":93,"line":1902},[91,19017,2153],{"class":250},[91,19019,19020],{"class":93,"line":1907},[91,19021,19022],{"class":308},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[91,19024,19025,19027,19029],{"class":93,"line":2700},[91,19026,18940],{"class":250},[91,19028,296],{"class":153},[91,19030,19031],{"class":250},"p.age;\n",[91,19033,19034,19036,19038,19041,19043],{"class":93,"line":2714},[91,19035,3574],{"class":250},[91,19037,1293],{"class":153},[91,19039,19040],{"class":101},"\"Person拷贝构造函数被调用\"",[91,19042,1293],{"class":153},[91,19044,1316],{"class":250},[91,19046,19047],{"class":93,"line":2722},[91,19048,2310],{"class":250},[91,19050,19051,19053],{"class":93,"line":2727},[91,19052,2108],{"class":153},[91,19054,7920],{"class":250},[91,19056,19057],{"class":93,"line":2733},[91,19058,4118],{"class":250},[91,19060,19061],{"class":93,"line":2739},[91,19062,19063],{"class":308},"\u002F\u002F调用\n",[91,19065,19066,19068,19070],{"class":93,"line":2744},[91,19067,5487],{"class":153},[91,19069,5711],{"class":97},[91,19071,2099],{"class":250},[91,19073,19074],{"class":93,"line":8071},[91,19075,1670],{"class":250},[91,19077,19078],{"class":93,"line":8095},[91,19079,19080],{"class":308},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[91,19082,19083],{"class":93,"line":8100},[91,19084,1689],{"class":250},[91,19086,19087,19089,19091],{"class":93,"line":8106},[91,19088,5487],{"class":153},[91,19090,5780],{"class":97},[91,19092,2099],{"class":250},[91,19094,19095],{"class":93,"line":8133},[91,19096,1670],{"class":250},[91,19098,19099],{"class":93,"line":8138},[91,19100,19101],{"class":308},"    \u002F\u002F1.括号法\n",[91,19103,19104],{"class":93,"line":8144},[91,19105,19106],{"class":308},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[91,19108,19109],{"class":93,"line":8156},[91,19110,19111],{"class":308},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[91,19113,19114],{"class":93,"line":8168},[91,19115,19116],{"class":308},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[91,19118,19119],{"class":93,"line":8180},[91,19120,19121],{"class":308},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[91,19123,19124],{"class":93,"line":9839},[91,19125,2523],{"emptyLinePlaceholder":175},[91,19127,19128],{"class":93,"line":9864},[91,19129,19130],{"class":308},"    \u002F\u002F注意事项\n",[91,19132,19133],{"class":93,"line":9887},[91,19134,19135],{"class":308},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[91,19137,19138],{"class":93,"line":9911},[91,19139,19140],{"class":308},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[91,19142,19143],{"class":93,"line":9916},[91,19144,19145],{"class":308},"    \u002F\u002F Person p4();\n",[91,19147,19148],{"class":93,"line":9921},[91,19149,2523],{"emptyLinePlaceholder":175},[91,19151,19152],{"class":93,"line":9926},[91,19153,19154],{"class":308},"    \u002F\u002F2.显示法\n",[91,19156,19157],{"class":93,"line":9935},[91,19158,19159],{"class":250},"    Person p1;\n",[91,19161,19162,19165,19167,19170,19172,19174],{"class":93,"line":9940},[91,19163,19164],{"class":250},"    Person p2",[91,19166,296],{"class":153},[91,19168,19169],{"class":97},"Person",[91,19171,251],{"class":250},[91,19173,695],{"class":105},[91,19175,2842],{"class":250},[91,19177,19178,19181,19183,19185],{"class":93,"line":9946},[91,19179,19180],{"class":250},"    Person p3",[91,19182,296],{"class":153},[91,19184,19169],{"class":97},[91,19186,19187],{"class":250},"(p2);\n",[91,19189,19190],{"class":93,"line":9967},[91,19191,19192],{"class":308},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[91,19194,19195],{"class":93,"line":9973},[91,19196,2523],{"emptyLinePlaceholder":175},[91,19198,19199],{"class":93,"line":9987},[91,19200,19201],{"class":308},"    \u002F\u002F 注意事项2\n",[91,19203,19204],{"class":93,"line":9993},[91,19205,19206],{"class":308},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[91,19208,19209],{"class":93,"line":10020},[91,19210,19211],{"class":308},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[91,19213,19214],{"class":93,"line":10029},[91,19215,2523],{"emptyLinePlaceholder":175},[91,19217,19218],{"class":93,"line":10035},[91,19219,19220],{"class":308},"    \u002F\u002F3.隐士转换法\n",[91,19222,19223,19226,19228,19230,19232],{"class":93,"line":10043},[91,19224,19225],{"class":250},"    Person p4",[91,19227,296],{"class":153},[91,19229,695],{"class":105},[91,19231,305],{"class":250},[91,19233,19234],{"class":308},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[91,19236,19237,19240,19242,19245],{"class":93,"line":10048},[91,19238,19239],{"class":250},"    Person p5",[91,19241,296],{"class":153},[91,19243,19244],{"class":250},"p4;",[91,19246,19247],{"class":308}," \u002F\u002F 这里会调用拷贝构造函数\n",[91,19249,19250],{"class":93,"line":16727},[91,19251,1689],{"class":250},[91,19253,19254,19256,19258],{"class":93,"line":16733},[91,19255,254],{"class":153},[91,19257,2096],{"class":97},[91,19259,2099],{"class":250},[91,19261,19262],{"class":93,"line":16756},[91,19263,1670],{"class":250},[91,19265,19266,19268],{"class":93,"line":16762},[91,19267,5756],{"class":97},[91,19269,5759],{"class":250},[91,19271,19272,19274],{"class":93,"line":16785},[91,19273,5825],{"class":97},[91,19275,5759],{"class":250},[91,19277,19278,19280,19282],{"class":93,"line":16799},[91,19279,4213],{"class":153},[91,19281,4216],{"class":105},[91,19283,1415],{"class":250},[91,19285,19286],{"class":93,"line":16819},[91,19287,1689],{"class":250},[21,19289,19290,19293],{},[398,19291,19292],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[217,19295,19297],{"id":19296},"_823拷贝构造函数","8.2.3拷贝构造函数",[21,19299,19300],{},"C++中拷贝构造函数调用时机通常有三种情况",[1256,19302,19303,19306,19309],{},[17,19304,19305],{},"使用一个已经创建完毕的对象来初始化一个新对象",[17,19307,19308],{},"值传递的方式给函数参数传值",[17,19310,19311],{},"以值方式返回局部对象",[82,19313,19315],{"className":238,"code":19314,"language":240,"meta":26,"style":26},"#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",[88,19316,19317,19323,19333,19337,19342,19346,19351,19356,19361,19367,19371,19375,19381,19385,19398,19402,19407,19419,19423,19431,19444,19448,19452,19468,19472,19481,19494,19498,19504,19508,19520,19524,19530,19534,19538,19546,19550,19563,19571,19589,19593,19598,19603,19618,19622,19635,19639,19647,19651,19655,19663,19667,19672,19681,19685,19689,19714,19724,19728,19736,19740,19751,19776,19780,19784,19788,19796,19800,19805,19810,19817,19822,19827,19832,19837,19841,19846,19850,19855,19859,19864,19869,19873,19877,19882,19887,19895],{"__ignoreMap":26},[91,19318,19319,19321],{"class":93,"line":94},[91,19320,2073],{"class":153},[91,19322,2076],{"class":101},[91,19324,19325,19327,19329,19331],{"class":93,"line":38},[91,19326,2081],{"class":153},[91,19328,2084],{"class":153},[91,19330,2087],{"class":97},[91,19332,1415],{"class":250},[91,19334,19335],{"class":93,"line":1304},[91,19336,2523],{"emptyLinePlaceholder":175},[91,19338,19339],{"class":93,"line":1319},[91,19340,19341],{"class":308},"\u002F\u002F拷贝构造函数调用时机\n",[91,19343,19344],{"class":93,"line":1325},[91,19345,2523],{"emptyLinePlaceholder":175},[91,19347,19348],{"class":93,"line":1339},[91,19349,19350],{"class":308},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[91,19352,19353],{"class":93,"line":1345},[91,19354,19355],{"class":308},"\u002F\u002F2.值传递的方式给函数参数传值\n",[91,19357,19358],{"class":93,"line":1436},[91,19359,19360],{"class":308},"\u002F\u002F3.以值方式返回局部对象\n",[91,19362,19363,19365],{"class":93,"line":1442},[91,19364,14817],{"class":153},[91,19366,15294],{"class":97},[91,19368,19369],{"class":93,"line":1454},[91,19370,1670],{"class":250},[91,19372,19373],{"class":93,"line":1736},[91,19374,14839],{"class":153},[91,19376,19377,19379],{"class":93,"line":1741},[91,19378,18642],{"class":97},[91,19380,2099],{"class":250},[91,19382,19383],{"class":93,"line":1747},[91,19384,2153],{"class":250},[91,19386,19387,19389,19391,19394,19396],{"class":93,"line":1752},[91,19388,9792],{"class":250},[91,19390,1293],{"class":153},[91,19392,19393],{"class":101}," \"Person的默认构造函数调用\"",[91,19395,1569],{"class":153},[91,19397,8963],{"class":250},[91,19399,19400],{"class":93,"line":1766},[91,19401,2310],{"class":250},[91,19403,19404],{"class":93,"line":1771},[91,19405,19406],{"class":308},"    \u002F\u002F有参构造\n",[91,19408,19409,19411,19413,19415,19417],{"class":93,"line":1777},[91,19410,18642],{"class":97},[91,19412,251],{"class":250},[91,19414,254],{"class":153},[91,19416,15812],{"class":5339},[91,19418,257],{"class":250},[91,19420,19421],{"class":93,"line":1798},[91,19422,2153],{"class":250},[91,19424,19425,19427,19429],{"class":93,"line":1803},[91,19426,15866],{"class":250},[91,19428,296],{"class":153},[91,19430,7920],{"class":250},[91,19432,19433,19435,19437,19440,19442],{"class":93,"line":1817},[91,19434,9792],{"class":250},[91,19436,1293],{"class":153},[91,19438,19439],{"class":101}," \"Person的有参构造函数调用\"",[91,19441,1569],{"class":153},[91,19443,8963],{"class":250},[91,19445,19446],{"class":93,"line":1822},[91,19447,2310],{"class":250},[91,19449,19450],{"class":93,"line":1851},[91,19451,18997],{"class":308},[91,19453,19454,19456,19458,19460,19462,19464,19466],{"class":93,"line":1856},[91,19455,18642],{"class":97},[91,19457,251],{"class":250},[91,19459,6915],{"class":153},[91,19461,15692],{"class":97},[91,19463,10707],{"class":153},[91,19465,21],{"class":5339},[91,19467,257],{"class":250},[91,19469,19470],{"class":93,"line":1873},[91,19471,2153],{"class":250},[91,19473,19474,19476,19478],{"class":93,"line":1878},[91,19475,15866],{"class":250},[91,19477,296],{"class":153},[91,19479,19480],{"class":250}," p.m_Age;\n",[91,19482,19483,19485,19487,19490,19492],{"class":93,"line":1883},[91,19484,9792],{"class":250},[91,19486,1293],{"class":153},[91,19488,19489],{"class":101}," \"Person的拷贝构造函数调用\"",[91,19491,1569],{"class":153},[91,19493,8963],{"class":250},[91,19495,19496],{"class":93,"line":1888},[91,19497,2310],{"class":250},[91,19499,19500,19502],{"class":93,"line":1902},[91,19501,18675],{"class":97},[91,19503,2099],{"class":250},[91,19505,19506],{"class":93,"line":1907},[91,19507,2153],{"class":250},[91,19509,19510,19512,19514,19516,19518],{"class":93,"line":2700},[91,19511,9792],{"class":250},[91,19513,1293],{"class":153},[91,19515,18690],{"class":101},[91,19517,1569],{"class":153},[91,19519,8963],{"class":250},[91,19521,19522],{"class":93,"line":2714},[91,19523,2310],{"class":250},[91,19525,19526,19528],{"class":93,"line":2722},[91,19527,2108],{"class":153},[91,19529,15789],{"class":250},[91,19531,19532],{"class":93,"line":2727},[91,19533,4118],{"class":250},[91,19535,19536],{"class":93,"line":2733},[91,19537,19350],{"class":308},[91,19539,19540,19542,19544],{"class":93,"line":2739},[91,19541,5487],{"class":153},[91,19543,5711],{"class":97},[91,19545,2099],{"class":250},[91,19547,19548],{"class":93,"line":2744},[91,19549,1670],{"class":250},[91,19551,19552,19555,19557,19559,19561],{"class":93,"line":8071},[91,19553,19554],{"class":250},"    Person ",[91,19556,7253],{"class":97},[91,19558,251],{"class":250},[91,19560,949],{"class":105},[91,19562,2842],{"class":250},[91,19564,19565,19567,19569],{"class":93,"line":8095},[91,19566,19554],{"class":250},[91,19568,7156],{"class":97},[91,19570,17638],{"class":250},[91,19572,19573,19575,19577,19580,19582,19585,19587],{"class":93,"line":8100},[91,19574,1675],{"class":250},[91,19576,1293],{"class":153},[91,19578,19579],{"class":101},"\"P2的年龄为：\"",[91,19581,1293],{"class":153},[91,19583,19584],{"class":250},"p2.m_Age",[91,19586,1293],{"class":153},[91,19588,1316],{"class":250},[91,19590,19591],{"class":93,"line":8106},[91,19592,1689],{"class":250},[91,19594,19595],{"class":93,"line":8133},[91,19596,19597],{"class":308},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[91,19599,19600],{"class":93,"line":8138},[91,19601,19602],{"class":308},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[91,19604,19605,19607,19610,19612,19614,19616],{"class":93,"line":8144},[91,19606,5487],{"class":153},[91,19608,19609],{"class":97}," doWork",[91,19611,251],{"class":250},[91,19613,19169],{"class":97},[91,19615,6948],{"class":5339},[91,19617,257],{"class":250},[91,19619,19620],{"class":93,"line":8156},[91,19621,1670],{"class":250},[91,19623,19624,19626,19628,19631,19633],{"class":93,"line":8168},[91,19625,6652],{"class":250},[91,19627,1293],{"class":153},[91,19629,19630],{"class":101}," \"doWork函数调用\"",[91,19632,1569],{"class":153},[91,19634,8963],{"class":250},[91,19636,19637],{"class":93,"line":8180},[91,19638,1689],{"class":250},[91,19640,19641,19643,19645],{"class":93,"line":9839},[91,19642,5487],{"class":153},[91,19644,5780],{"class":97},[91,19646,2099],{"class":250},[91,19648,19649],{"class":93,"line":9864},[91,19650,1670],{"class":250},[91,19652,19653],{"class":93,"line":9887},[91,19654,15436],{"class":250},[91,19656,19657,19660],{"class":93,"line":9911},[91,19658,19659],{"class":97},"    doWork",[91,19661,19662],{"class":250},"(p);\n",[91,19664,19665],{"class":93,"line":9916},[91,19666,1689],{"class":250},[91,19668,19669],{"class":93,"line":9921},[91,19670,19671],{"class":308},"\u002F\u002F 3.以值方式返回局部对象\n",[91,19673,19674,19676,19679],{"class":93,"line":9926},[91,19675,19169],{"class":97},[91,19677,19678],{"class":97}," doWork2",[91,19680,2099],{"class":250},[91,19682,19683],{"class":93,"line":9935},[91,19684,1670],{"class":250},[91,19686,19687],{"class":93,"line":9940},[91,19688,19159],{"class":250},[91,19690,19691,19693,19695,19697,19699,19701,19703,19705,19707,19709,19711],{"class":93,"line":9946},[91,19692,1675],{"class":250},[91,19694,1293],{"class":153},[91,19696,251],{"class":250},[91,19698,254],{"class":153},[91,19700,6641],{"class":153},[91,19702,678],{"class":250},[91,19704,602],{"class":153},[91,19706,7253],{"class":250},[91,19708,1293],{"class":153},[91,19710,1363],{"class":250},[91,19712,19713],{"class":308},"\u002F\u002F打印p1的地址\n",[91,19715,19716,19718,19721],{"class":93,"line":9967},[91,19717,4213],{"class":153},[91,19719,19720],{"class":250}," p1;",[91,19722,19723],{"class":308},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[91,19725,19726],{"class":93,"line":9973},[91,19727,1689],{"class":250},[91,19729,19730,19732,19734],{"class":93,"line":9987},[91,19731,5487],{"class":153},[91,19733,5852],{"class":97},[91,19735,2099],{"class":250},[91,19737,19738],{"class":93,"line":9993},[91,19739,1670],{"class":250},[91,19741,19742,19745,19747,19749],{"class":93,"line":10020},[91,19743,19744],{"class":250},"    Person p ",[91,19746,296],{"class":153},[91,19748,19678],{"class":97},[91,19750,5759],{"class":250},[91,19752,19753,19755,19757,19759,19761,19763,19765,19767,19769,19771,19773],{"class":93,"line":10029},[91,19754,1675],{"class":250},[91,19756,1293],{"class":153},[91,19758,251],{"class":250},[91,19760,254],{"class":153},[91,19762,6641],{"class":153},[91,19764,678],{"class":250},[91,19766,602],{"class":153},[91,19768,21],{"class":250},[91,19770,1293],{"class":153},[91,19772,1363],{"class":250},[91,19774,19775],{"class":308},"\u002F\u002F打印p的地址\n",[91,19777,19778],{"class":93,"line":10035},[91,19779,1689],{"class":250},[91,19781,19782],{"class":93,"line":10043},[91,19783,2523],{"emptyLinePlaceholder":175},[91,19785,19786],{"class":93,"line":10048},[91,19787,2523],{"emptyLinePlaceholder":175},[91,19789,19790,19792,19794],{"class":93,"line":16727},[91,19791,254],{"class":153},[91,19793,2096],{"class":97},[91,19795,2099],{"class":250},[91,19797,19798],{"class":93,"line":16733},[91,19799,1670],{"class":250},[91,19801,19802],{"class":93,"line":16756},[91,19803,19804],{"class":308},"    \u002F\u002F test01();\n",[91,19806,19807],{"class":93,"line":16762},[91,19808,19809],{"class":308},"    \u002F\u002F test02();\n",[91,19811,19812,19815],{"class":93,"line":16785},[91,19813,19814],{"class":97},"    test03",[91,19816,5759],{"class":250},[91,19818,19819],{"class":93,"line":16799},[91,19820,19821],{"class":308},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[91,19823,19824],{"class":93,"line":16819},[91,19825,19826],{"class":308},"\u002F\u002F 输出结果如下：\n",[91,19828,19829],{"class":93,"line":16825},[91,19830,19831],{"class":308},"\u002F\u002F Person的默认构造函数调用\n",[91,19833,19834],{"class":93,"line":16836},[91,19835,19836],{"class":308},"\u002F\u002F 0x7fffffffceec\n",[91,19838,19839],{"class":93,"line":16859},[91,19840,19836],{"class":308},[91,19842,19843],{"class":93,"line":16881},[91,19844,19845],{"class":308},"\u002F\u002F Person的析构函数调用\n",[91,19847,19848],{"class":93,"line":16886},[91,19849,2523],{"emptyLinePlaceholder":175},[91,19851,19852],{"class":93,"line":16892},[91,19853,19854],{"class":308},"\u002F\u002F 之前的输出结果如下：\n",[91,19856,19857],{"class":93,"line":16906},[91,19858,19831],{"class":308},[91,19860,19861],{"class":93,"line":16919},[91,19862,19863],{"class":308},"\u002F\u002F 地址\n",[91,19865,19866],{"class":93,"line":16924},[91,19867,19868],{"class":308},"\u002F\u002F Person的拷贝构造函数调用\n",[91,19870,19871],{"class":93,"line":16938},[91,19872,19845],{"class":308},[91,19874,19875],{"class":93,"line":16943},[91,19876,19863],{"class":308},[91,19878,19879],{"class":93,"line":16949},[91,19880,19881],{"class":308},"\u002F\u002F (这两次输出的地址也是不同的) \n",[91,19883,19884],{"class":93,"line":16954},[91,19885,19886],{"class":308},"\u002F\u002F Person的析构函数调用     \n",[91,19888,19889,19891,19893],{"class":93,"line":16968},[91,19890,4213],{"class":153},[91,19892,4216],{"class":105},[91,19894,1415],{"class":250},[91,19896,19897],{"class":93,"line":16973},[91,19898,1689],{"class":250},[21,19900,19901],{},"简化版理解",[82,19903,19905],{"className":238,"code":19904,"language":240,"meta":26,"style":26},"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",[88,19906,19907,19915,19919,19925,19938,19949,19953,19965,19978,19986,19990,20006,20019,20028,20032,20037,20043,20056,20060,20064,20071,20075,20079,20084,20092,20096,20112,20125,20138,20142,20147,20155,20159,20163,20168,20173,20189,20197,20204,20210,20214,20218,20223,20231,20235,20239,20262,20269,20273,20277,20285,20289,20299,20321,20325,20329,20333,20341,20345,20350,20355,20361,20365,20375,20379,20387],{"__ignoreMap":26},[91,19908,19909,19911,19913],{"class":93,"line":94},[91,19910,14817],{"class":153},[91,19912,15692],{"class":97},[91,19914,15695],{"class":250},[91,19916,19917],{"class":93,"line":38},[91,19918,14839],{"class":153},[91,19920,19921,19923],{"class":93,"line":1304},[91,19922,18642],{"class":97},[91,19924,10976],{"class":250},[91,19926,19927,19929,19931,19934,19936],{"class":93,"line":1319},[91,19928,9792],{"class":250},[91,19930,1293],{"class":153},[91,19932,19933],{"class":101}," \"无参构造函数!\"",[91,19935,1569],{"class":153},[91,19937,8963],{"class":250},[91,19939,19940,19943,19945,19947],{"class":93,"line":1325},[91,19941,19942],{"class":250},"        mAge ",[91,19944,296],{"class":153},[91,19946,4216],{"class":105},[91,19948,1415],{"class":250},[91,19950,19951],{"class":93,"line":1339},[91,19952,2310],{"class":250},[91,19954,19955,19957,19959,19961,19963],{"class":93,"line":1345},[91,19956,18642],{"class":97},[91,19958,251],{"class":250},[91,19960,254],{"class":153},[91,19962,15812],{"class":5339},[91,19964,12565],{"class":250},[91,19966,19967,19969,19971,19974,19976],{"class":93,"line":1436},[91,19968,9792],{"class":250},[91,19970,1293],{"class":153},[91,19972,19973],{"class":101}," \"有参构造函数!\"",[91,19975,1569],{"class":153},[91,19977,8963],{"class":250},[91,19979,19980,19982,19984],{"class":93,"line":1442},[91,19981,19942],{"class":250},[91,19983,296],{"class":153},[91,19985,7920],{"class":250},[91,19987,19988],{"class":93,"line":1454},[91,19989,2310],{"class":250},[91,19991,19992,19994,19996,19998,20000,20002,20004],{"class":93,"line":1736},[91,19993,18642],{"class":97},[91,19995,251],{"class":250},[91,19997,6915],{"class":153},[91,19999,15692],{"class":97},[91,20001,602],{"class":153},[91,20003,6948],{"class":5339},[91,20005,12565],{"class":250},[91,20007,20008,20010,20012,20015,20017],{"class":93,"line":1741},[91,20009,9792],{"class":250},[91,20011,1293],{"class":153},[91,20013,20014],{"class":101}," \"拷贝构造函数!\"",[91,20016,1569],{"class":153},[91,20018,8963],{"class":250},[91,20020,20021,20023,20025],{"class":93,"line":1747},[91,20022,19942],{"class":250},[91,20024,296],{"class":153},[91,20026,20027],{"class":250}," p.mAge;\n",[91,20029,20030],{"class":93,"line":1752},[91,20031,2310],{"class":250},[91,20033,20034],{"class":93,"line":1766},[91,20035,20036],{"class":308},"    \u002F\u002F析构函数在释放内存之前调用\n",[91,20038,20039,20041],{"class":93,"line":1771},[91,20040,18675],{"class":97},[91,20042,10976],{"class":250},[91,20044,20045,20047,20049,20052,20054],{"class":93,"line":1777},[91,20046,9792],{"class":250},[91,20048,1293],{"class":153},[91,20050,20051],{"class":101}," \"析构函数!\"",[91,20053,1569],{"class":153},[91,20055,8963],{"class":250},[91,20057,20058],{"class":93,"line":1798},[91,20059,2310],{"class":250},[91,20061,20062],{"class":93,"line":1803},[91,20063,14839],{"class":153},[91,20065,20066,20068],{"class":93,"line":1817},[91,20067,2108],{"class":153},[91,20069,20070],{"class":250}," mAge;\n",[91,20072,20073],{"class":93,"line":1822},[91,20074,4118],{"class":250},[91,20076,20077],{"class":93,"line":1851},[91,20078,2523],{"emptyLinePlaceholder":175},[91,20080,20081],{"class":93,"line":1856},[91,20082,20083],{"class":308},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[91,20085,20086,20088,20090],{"class":93,"line":1873},[91,20087,5487],{"class":153},[91,20089,5711],{"class":97},[91,20091,10976],{"class":250},[91,20093,20094],{"class":93,"line":1878},[91,20095,2523],{"emptyLinePlaceholder":175},[91,20097,20098,20100,20103,20105,20107,20109],{"class":93,"line":1883},[91,20099,19554],{"class":250},[91,20101,20102],{"class":97},"man",[91,20104,251],{"class":250},[91,20106,560],{"class":105},[91,20108,6089],{"class":250},[91,20110,20111],{"class":308}," \u002F\u002Fp对象已经创建完毕\n",[91,20113,20114,20116,20119,20122],{"class":93,"line":1888},[91,20115,19554],{"class":250},[91,20117,20118],{"class":97},"newman",[91,20120,20121],{"class":250},"(man);",[91,20123,20124],{"class":308}," \u002F\u002F调用拷贝构造函数\n",[91,20126,20127,20130,20132,20135],{"class":93,"line":1902},[91,20128,20129],{"class":250},"    Person newman2 ",[91,20131,296],{"class":153},[91,20133,20134],{"class":250}," man;",[91,20136,20137],{"class":308}," \u002F\u002F拷贝构造\n",[91,20139,20140],{"class":93,"line":1907},[91,20141,2523],{"emptyLinePlaceholder":175},[91,20143,20144],{"class":93,"line":2700},[91,20145,20146],{"class":308},"    \u002F\u002FPerson newman3;\n",[91,20148,20149,20152],{"class":93,"line":2714},[91,20150,20151],{"class":308},"    \u002F\u002Fnewman3 = man;",[91,20153,20154],{"class":308}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[91,20156,20157],{"class":93,"line":2722},[91,20158,1689],{"class":250},[91,20160,20161],{"class":93,"line":2727},[91,20162,2523],{"emptyLinePlaceholder":175},[91,20164,20165],{"class":93,"line":2733},[91,20166,20167],{"class":308},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[91,20169,20170],{"class":93,"line":2739},[91,20171,20172],{"class":308},"\u002F\u002F相当于Person p1 = p;\n",[91,20174,20175,20177,20179,20181,20183,20186],{"class":93,"line":2744},[91,20176,5487],{"class":153},[91,20178,19609],{"class":97},[91,20180,251],{"class":250},[91,20182,19169],{"class":97},[91,20184,20185],{"class":5339}," p1",[91,20187,20188],{"class":250},") {}\n",[91,20190,20191,20193,20195],{"class":93,"line":8071},[91,20192,5487],{"class":153},[91,20194,5780],{"class":97},[91,20196,10976],{"class":250},[91,20198,20199,20201],{"class":93,"line":8095},[91,20200,18727],{"class":250},[91,20202,20203],{"class":308}," \u002F\u002F无参构造函数\n",[91,20205,20206,20208],{"class":93,"line":8100},[91,20207,19659],{"class":97},[91,20209,19662],{"class":250},[91,20211,20212],{"class":93,"line":8106},[91,20213,1689],{"class":250},[91,20215,20216],{"class":93,"line":8133},[91,20217,2523],{"emptyLinePlaceholder":175},[91,20219,20220],{"class":93,"line":8138},[91,20221,20222],{"class":308},"\u002F\u002F3. 以值方式返回局部对象\n",[91,20224,20225,20227,20229],{"class":93,"line":8144},[91,20226,19169],{"class":97},[91,20228,19678],{"class":97},[91,20230,2099],{"class":250},[91,20232,20233],{"class":93,"line":8156},[91,20234,1670],{"class":250},[91,20236,20237],{"class":93,"line":8168},[91,20238,19159],{"class":250},[91,20240,20241,20243,20245,20247,20249,20251,20253,20255,20258,20260],{"class":93,"line":8180},[91,20242,6652],{"class":250},[91,20244,1293],{"class":153},[91,20246,1782],{"class":250},[91,20248,254],{"class":153},[91,20250,6641],{"class":153},[91,20252,678],{"class":250},[91,20254,602],{"class":153},[91,20256,20257],{"class":250},"p1 ",[91,20259,1293],{"class":153},[91,20261,8963],{"class":250},[91,20263,20264,20266],{"class":93,"line":9839},[91,20265,4213],{"class":153},[91,20267,20268],{"class":250}," p1;\n",[91,20270,20271],{"class":93,"line":9864},[91,20272,1689],{"class":250},[91,20274,20275],{"class":93,"line":9887},[91,20276,2523],{"emptyLinePlaceholder":175},[91,20278,20279,20281,20283],{"class":93,"line":9911},[91,20280,5487],{"class":153},[91,20282,5852],{"class":97},[91,20284,2099],{"class":250},[91,20286,20287],{"class":93,"line":9916},[91,20288,1670],{"class":250},[91,20290,20291,20293,20295,20297],{"class":93,"line":9921},[91,20292,19744],{"class":250},[91,20294,296],{"class":153},[91,20296,19678],{"class":97},[91,20298,5759],{"class":250},[91,20300,20301,20303,20305,20307,20309,20311,20313,20315,20317,20319],{"class":93,"line":9926},[91,20302,6652],{"class":250},[91,20304,1293],{"class":153},[91,20306,1782],{"class":250},[91,20308,254],{"class":153},[91,20310,6641],{"class":153},[91,20312,678],{"class":250},[91,20314,602],{"class":153},[91,20316,11571],{"class":250},[91,20318,1293],{"class":153},[91,20320,8963],{"class":250},[91,20322,20323],{"class":93,"line":9935},[91,20324,1689],{"class":250},[91,20326,20327],{"class":93,"line":9940},[91,20328,2523],{"emptyLinePlaceholder":175},[91,20330,20331],{"class":93,"line":9946},[91,20332,2523],{"emptyLinePlaceholder":175},[91,20334,20335,20337,20339],{"class":93,"line":9967},[91,20336,254],{"class":153},[91,20338,2096],{"class":97},[91,20340,10976],{"class":250},[91,20342,20343],{"class":93,"line":9973},[91,20344,2523],{"emptyLinePlaceholder":175},[91,20346,20347],{"class":93,"line":9987},[91,20348,20349],{"class":308},"    \u002F\u002Ftest01();\n",[91,20351,20352],{"class":93,"line":9993},[91,20353,20354],{"class":308},"    \u002F\u002Ftest02();\n",[91,20356,20357,20359],{"class":93,"line":10020},[91,20358,19814],{"class":97},[91,20360,5759],{"class":250},[91,20362,20363],{"class":93,"line":10029},[91,20364,2523],{"emptyLinePlaceholder":175},[91,20366,20367,20369,20371,20373],{"class":93,"line":10035},[91,20368,2426],{"class":97},[91,20370,251],{"class":250},[91,20372,2431],{"class":101},[91,20374,2842],{"class":250},[91,20376,20377],{"class":93,"line":10043},[91,20378,2523],{"emptyLinePlaceholder":175},[91,20380,20381,20383,20385],{"class":93,"line":10048},[91,20382,4213],{"class":153},[91,20384,4216],{"class":105},[91,20386,1415],{"class":250},[91,20388,20389],{"class":93,"line":16727},[91,20390,1689],{"class":250},[217,20392,20394],{"id":20393},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[21,20396,20397],{},"默认情况下，c++编译器至少给一个类添加3个函数",[21,20399,20400],{},"1．默认构造函数(无参，函数体为空)",[21,20402,20403],{},"2．默认析构函数(无参，函数体为空)",[21,20405,20406],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[21,20408,20409],{},"构造函数调用规则如下：",[1256,20411,20412,20415],{},[17,20413,20414],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[17,20416,20417],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[82,20419,20421],{"className":238,"code":20420,"language":240,"meta":26,"style":26},"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",[88,20422,20423,20431,20435,20440,20446,20458,20462,20467,20479,20488,20500,20504,20508,20524,20533,20545,20549,20553,20559,20571,20575,20579,20585,20589,20593,20601,20605,20617,20622,20630,20634,20652,20656,20660,20668,20672,20677,20685,20700,20713,20717,20722,20729,20745,20758,20762,20766,20774,20778,20784,20788,20798,20802,20810],{"__ignoreMap":26},[91,20424,20425,20427,20429],{"class":93,"line":94},[91,20426,14817],{"class":153},[91,20428,15692],{"class":97},[91,20430,15695],{"class":250},[91,20432,20433],{"class":93,"line":38},[91,20434,14839],{"class":153},[91,20436,20437],{"class":93,"line":1304},[91,20438,20439],{"class":308},"    \u002F\u002F无参（默认）构造函数\n",[91,20441,20442,20444],{"class":93,"line":1319},[91,20443,18642],{"class":97},[91,20445,10976],{"class":250},[91,20447,20448,20450,20452,20454,20456],{"class":93,"line":1325},[91,20449,9792],{"class":250},[91,20451,1293],{"class":153},[91,20453,19933],{"class":101},[91,20455,1569],{"class":153},[91,20457,8963],{"class":250},[91,20459,20460],{"class":93,"line":1339},[91,20461,2310],{"class":250},[91,20463,20464],{"class":93,"line":1345},[91,20465,20466],{"class":308},"    \u002F\u002F有参构造函数\n",[91,20468,20469,20471,20473,20475,20477],{"class":93,"line":1436},[91,20470,18642],{"class":97},[91,20472,251],{"class":250},[91,20474,254],{"class":153},[91,20476,1523],{"class":5339},[91,20478,12565],{"class":250},[91,20480,20481,20484,20486],{"class":93,"line":1442},[91,20482,20483],{"class":250},"        age ",[91,20485,296],{"class":153},[91,20487,1557],{"class":250},[91,20489,20490,20492,20494,20496,20498],{"class":93,"line":1454},[91,20491,9792],{"class":250},[91,20493,1293],{"class":153},[91,20495,19973],{"class":101},[91,20497,1569],{"class":153},[91,20499,8963],{"class":250},[91,20501,20502],{"class":93,"line":1736},[91,20503,2310],{"class":250},[91,20505,20506],{"class":93,"line":1741},[91,20507,18997],{"class":308},[91,20509,20510,20512,20514,20516,20518,20520,20522],{"class":93,"line":1747},[91,20511,18642],{"class":97},[91,20513,251],{"class":250},[91,20515,6915],{"class":153},[91,20517,15692],{"class":97},[91,20519,602],{"class":153},[91,20521,6948],{"class":5339},[91,20523,12565],{"class":250},[91,20525,20526,20528,20530],{"class":93,"line":1752},[91,20527,20483],{"class":250},[91,20529,296],{"class":153},[91,20531,20532],{"class":250}," p.age;\n",[91,20534,20535,20537,20539,20541,20543],{"class":93,"line":1766},[91,20536,9792],{"class":250},[91,20538,1293],{"class":153},[91,20540,20014],{"class":101},[91,20542,1569],{"class":153},[91,20544,8963],{"class":250},[91,20546,20547],{"class":93,"line":1771},[91,20548,2310],{"class":250},[91,20550,20551],{"class":93,"line":1777},[91,20552,18670],{"class":308},[91,20554,20555,20557],{"class":93,"line":1798},[91,20556,18675],{"class":97},[91,20558,10976],{"class":250},[91,20560,20561,20563,20565,20567,20569],{"class":93,"line":1803},[91,20562,9792],{"class":250},[91,20564,1293],{"class":153},[91,20566,20051],{"class":101},[91,20568,1569],{"class":153},[91,20570,8963],{"class":250},[91,20572,20573],{"class":93,"line":1817},[91,20574,2310],{"class":250},[91,20576,20577],{"class":93,"line":1822},[91,20578,14839],{"class":153},[91,20580,20581,20583],{"class":93,"line":1851},[91,20582,2108],{"class":153},[91,20584,7920],{"class":250},[91,20586,20587],{"class":93,"line":1856},[91,20588,4118],{"class":250},[91,20590,20591],{"class":93,"line":1873},[91,20592,2523],{"emptyLinePlaceholder":175},[91,20594,20595,20597,20599],{"class":93,"line":1878},[91,20596,5487],{"class":153},[91,20598,5711],{"class":97},[91,20600,2099],{"class":250},[91,20602,20603],{"class":93,"line":1883},[91,20604,1670],{"class":250},[91,20606,20607,20609,20611,20613,20615],{"class":93,"line":1888},[91,20608,19554],{"class":250},[91,20610,7253],{"class":97},[91,20612,251],{"class":250},[91,20614,899],{"class":105},[91,20616,2842],{"class":250},[91,20618,20619],{"class":93,"line":1902},[91,20620,20621],{"class":308},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[91,20623,20624,20626,20628],{"class":93,"line":1907},[91,20625,19554],{"class":250},[91,20627,7156],{"class":97},[91,20629,17638],{"class":250},[91,20631,20632],{"class":93,"line":2700},[91,20633,2523],{"emptyLinePlaceholder":175},[91,20635,20636,20638,20640,20643,20645,20648,20650],{"class":93,"line":2714},[91,20637,6652],{"class":250},[91,20639,1293],{"class":153},[91,20641,20642],{"class":101}," \"p2的年龄为： \"",[91,20644,1569],{"class":153},[91,20646,20647],{"class":250}," p2.age ",[91,20649,1293],{"class":153},[91,20651,8963],{"class":250},[91,20653,20654],{"class":93,"line":2722},[91,20655,1689],{"class":250},[91,20657,20658],{"class":93,"line":2727},[91,20659,2523],{"emptyLinePlaceholder":175},[91,20661,20662,20664,20666],{"class":93,"line":2733},[91,20663,5487],{"class":153},[91,20665,5780],{"class":97},[91,20667,2099],{"class":250},[91,20669,20670],{"class":93,"line":2739},[91,20671,1670],{"class":250},[91,20673,20674],{"class":93,"line":2744},[91,20675,20676],{"class":308},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[91,20678,20679,20682],{"class":93,"line":8071},[91,20680,20681],{"class":250},"    Person p1;",[91,20683,20684],{"class":308}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[91,20686,20687,20689,20691,20693,20695,20697],{"class":93,"line":8095},[91,20688,19554],{"class":250},[91,20690,7156],{"class":97},[91,20692,251],{"class":250},[91,20694,695],{"class":105},[91,20696,6089],{"class":250},[91,20698,20699],{"class":308}," \u002F\u002F用户提供的有参\n",[91,20701,20702,20704,20707,20710],{"class":93,"line":8100},[91,20703,19554],{"class":250},[91,20705,20706],{"class":97},"p3",[91,20708,20709],{"class":250},"(p2);",[91,20711,20712],{"class":308}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[91,20714,20715],{"class":93,"line":8106},[91,20716,2523],{"emptyLinePlaceholder":175},[91,20718,20719],{"class":93,"line":8133},[91,20720,20721],{"class":308},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[91,20723,20724,20727],{"class":93,"line":8138},[91,20725,20726],{"class":250},"    Person p4;",[91,20728,20684],{"class":308},[91,20730,20731,20733,20736,20738,20740,20742],{"class":93,"line":8144},[91,20732,19554],{"class":250},[91,20734,20735],{"class":97},"p5",[91,20737,251],{"class":250},[91,20739,695],{"class":105},[91,20741,6089],{"class":250},[91,20743,20744],{"class":308}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[91,20746,20747,20749,20752,20755],{"class":93,"line":8156},[91,20748,19554],{"class":250},[91,20750,20751],{"class":97},"p6",[91,20753,20754],{"class":250},"(p5);",[91,20756,20757],{"class":308}," \u002F\u002F用户自己提供拷贝构造\n",[91,20759,20760],{"class":93,"line":8168},[91,20761,1689],{"class":250},[91,20763,20764],{"class":93,"line":8180},[91,20765,2523],{"emptyLinePlaceholder":175},[91,20767,20768,20770,20772],{"class":93,"line":9839},[91,20769,254],{"class":153},[91,20771,2096],{"class":97},[91,20773,10976],{"class":250},[91,20775,20776],{"class":93,"line":9864},[91,20777,2523],{"emptyLinePlaceholder":175},[91,20779,20780,20782],{"class":93,"line":9887},[91,20781,5756],{"class":97},[91,20783,5759],{"class":250},[91,20785,20786],{"class":93,"line":9911},[91,20787,2523],{"emptyLinePlaceholder":175},[91,20789,20790,20792,20794,20796],{"class":93,"line":9916},[91,20791,2426],{"class":97},[91,20793,251],{"class":250},[91,20795,2431],{"class":101},[91,20797,2842],{"class":250},[91,20799,20800],{"class":93,"line":9921},[91,20801,2523],{"emptyLinePlaceholder":175},[91,20803,20804,20806,20808],{"class":93,"line":9926},[91,20805,4213],{"class":153},[91,20807,4216],{"class":105},[91,20809,1415],{"class":250},[91,20811,20812],{"class":93,"line":9935},[91,20813,1689],{"class":250},[217,20815,20817],{"id":20816},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[21,20819,20820],{},"浅拷贝：简单的赋值拷贝操作",[21,20822,20823],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[82,20825,20827],{"className":238,"code":20826,"language":240,"meta":26,"style":26},"#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",[88,20828,20829,20835,20845,20851,20855,20859,20864,20870,20874,20887,20891,20895,20902,20906,20916,20931,20944,20948,20953,20958,20974,20978,20991,20996,21001,21006,21015,21020,21035,21039,21043,21047,21053,21057,21062,21077,21081,21092,21106,21110,21119,21123,21129,21141,21145,21153,21157,21174,21205,21213,21241,21245,21249,21257,21261,21267],{"__ignoreMap":26},[91,20830,20831,20833],{"class":93,"line":94},[91,20832,2073],{"class":153},[91,20834,2076],{"class":101},[91,20836,20837,20839,20841,20843],{"class":93,"line":38},[91,20838,2081],{"class":153},[91,20840,2084],{"class":153},[91,20842,2087],{"class":97},[91,20844,1415],{"class":250},[91,20846,20847,20849],{"class":93,"line":1304},[91,20848,14817],{"class":153},[91,20850,15294],{"class":97},[91,20852,20853],{"class":93,"line":1319},[91,20854,1670],{"class":250},[91,20856,20857],{"class":93,"line":1325},[91,20858,14839],{"class":153},[91,20860,20861],{"class":93,"line":1339},[91,20862,20863],{"class":308},"    \u002F\u002F默认构造函数\n",[91,20865,20866,20868],{"class":93,"line":1345},[91,20867,18642],{"class":97},[91,20869,2099],{"class":250},[91,20871,20872],{"class":93,"line":1436},[91,20873,2153],{"class":250},[91,20875,20876,20878,20880,20883,20885],{"class":93,"line":1442},[91,20877,3574],{"class":250},[91,20879,1293],{"class":153},[91,20881,20882],{"class":101},"\"默认构造函数\"",[91,20884,1293],{"class":153},[91,20886,1316],{"class":250},[91,20888,20889],{"class":93,"line":1454},[91,20890,2310],{"class":250},[91,20892,20893],{"class":93,"line":1736},[91,20894,20466],{"class":308},[91,20896,20897,20899],{"class":93,"line":1741},[91,20898,18675],{"class":97},[91,20900,20901],{"class":250},"(int age,int height)\n",[91,20903,20904],{"class":93,"line":1747},[91,20905,2153],{"class":250},[91,20907,20908,20911,20913],{"class":93,"line":1752},[91,20909,20910],{"class":250},"        m_Age",[91,20912,296],{"class":153},[91,20914,20915],{"class":250},"age;\n",[91,20917,20918,20921,20923,20925,20928],{"class":93,"line":1766},[91,20919,20920],{"class":250},"        m_Height",[91,20922,11840],{"class":153},[91,20924,2505],{"class":153},[91,20926,20927],{"class":250},"(height);",[91,20929,20930],{"class":308},"\u002F\u002F放到堆区\n",[91,20932,20933,20935,20937,20940,20942],{"class":93,"line":1771},[91,20934,3574],{"class":250},[91,20936,1293],{"class":153},[91,20938,20939],{"class":101},"\"有参构造函数\"",[91,20941,1293],{"class":153},[91,20943,1316],{"class":250},[91,20945,20946],{"class":93,"line":1777},[91,20947,2310],{"class":250},[91,20949,20950],{"class":93,"line":1798},[91,20951,20952],{"class":308},"    \u002F\u002F深拷贝解决上述问题\n",[91,20954,20955],{"class":93,"line":1803},[91,20956,20957],{"class":308},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[91,20959,20960,20962,20964,20966,20968,20970,20972],{"class":93,"line":1817},[91,20961,18642],{"class":97},[91,20963,251],{"class":250},[91,20965,6915],{"class":153},[91,20967,15692],{"class":97},[91,20969,10707],{"class":153},[91,20971,21],{"class":5339},[91,20973,257],{"class":250},[91,20975,20976],{"class":93,"line":1822},[91,20977,2153],{"class":250},[91,20979,20980,20982,20984,20987,20989],{"class":93,"line":1851},[91,20981,3574],{"class":250},[91,20983,1293],{"class":153},[91,20985,20986],{"class":101},"\"拷贝构造函数\"",[91,20988,1293],{"class":153},[91,20990,1316],{"class":250},[91,20992,20993],{"class":93,"line":1856},[91,20994,20995],{"class":308},"        \u002F\u002F编译器默认的写如下注释部分\n",[91,20997,20998],{"class":93,"line":1873},[91,20999,21000],{"class":308},"        \u002F\u002Fm_Age=p.m_Age;\n",[91,21002,21003],{"class":93,"line":1878},[91,21004,21005],{"class":308},"        \u002F\u002Fm_Height=p.m_Height;\n",[91,21007,21008,21010,21012],{"class":93,"line":1883},[91,21009,20910],{"class":250},[91,21011,296],{"class":153},[91,21013,21014],{"class":250},"p.m_Age;\n",[91,21016,21017],{"class":93,"line":1888},[91,21018,21019],{"class":308},"        \u002F\u002F深拷贝操作\n",[91,21021,21022,21024,21026,21028,21030,21032],{"class":93,"line":1902},[91,21023,20920],{"class":250},[91,21025,11840],{"class":153},[91,21027,2505],{"class":153},[91,21029,251],{"class":250},[91,21031,704],{"class":153},[91,21033,21034],{"class":250},"p.m_Height);\n",[91,21036,21037],{"class":93,"line":1907},[91,21038,2310],{"class":250},[91,21040,21041],{"class":93,"line":2700},[91,21042,2523],{"emptyLinePlaceholder":175},[91,21044,21045],{"class":93,"line":2714},[91,21046,18670],{"class":308},[91,21048,21049,21051],{"class":93,"line":2722},[91,21050,18675],{"class":97},[91,21052,2099],{"class":250},[91,21054,21055],{"class":93,"line":2727},[91,21056,2153],{"class":250},[91,21058,21059],{"class":93,"line":2733},[91,21060,21061],{"class":308},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[91,21063,21064,21066,21069,21072,21075],{"class":93,"line":2739},[91,21065,2620],{"class":153},[91,21067,21068],{"class":250},"(m_Height ",[91,21070,21071],{"class":153},"!=",[91,21073,21074],{"class":105}," NULL",[91,21076,257],{"class":250},[91,21078,21079],{"class":93,"line":2744},[91,21080,2633],{"class":250},[91,21082,21083,21086,21089],{"class":93,"line":8071},[91,21084,21085],{"class":153},"            delete",[91,21087,21088],{"class":250}," m_Height;",[91,21090,21091],{"class":308}," \u002F\u002F释放堆区内存\n",[91,21093,21094,21097,21099,21101,21103],{"class":93,"line":8095},[91,21095,21096],{"class":250},"            m_Height",[91,21098,296],{"class":153},[91,21100,2515],{"class":105},[91,21102,305],{"class":250},[91,21104,21105],{"class":308}," \u002F\u002F防止野指针\n",[91,21107,21108],{"class":93,"line":8100},[91,21109,2652],{"class":250},[91,21111,21112,21114,21116],{"class":93,"line":8106},[91,21113,3574],{"class":250},[91,21115,1293],{"class":153},[91,21117,21118],{"class":101},"\"Person的析构函数调用\"\n",[91,21120,21121],{"class":93,"line":8133},[91,21122,2310],{"class":250},[91,21124,21125,21127],{"class":93,"line":8138},[91,21126,2108],{"class":153},[91,21128,15789],{"class":250},[91,21130,21131,21133,21135,21138],{"class":93,"line":8144},[91,21132,2108],{"class":153},[91,21134,6641],{"class":153},[91,21136,21137],{"class":250},"m_Height;",[91,21139,21140],{"class":308}," \u002F\u002F定义一个指针，指向身高\n",[91,21142,21143],{"class":93,"line":8156},[91,21144,4118],{"class":250},[91,21146,21147,21149,21151],{"class":93,"line":8168},[91,21148,5487],{"class":153},[91,21150,5711],{"class":97},[91,21152,2099],{"class":250},[91,21154,21155],{"class":93,"line":8180},[91,21156,1670],{"class":250},[91,21158,21159,21161,21163,21165,21167,21169,21172],{"class":93,"line":9839},[91,21160,19554],{"class":250},[91,21162,7253],{"class":97},[91,21164,251],{"class":250},[91,21166,899],{"class":105},[91,21168,627],{"class":250},[91,21170,21171],{"class":105},"160",[91,21173,2842],{"class":250},[91,21175,21176,21178,21180,21183,21185,21188,21190,21193,21195,21198,21200,21202],{"class":93,"line":9864},[91,21177,1675],{"class":250},[91,21179,1293],{"class":153},[91,21181,21182],{"class":101},"\"p1的年龄为:\"",[91,21184,1293],{"class":153},[91,21186,21187],{"class":250},"p1.m_Age",[91,21189,1293],{"class":153},[91,21191,21192],{"class":101},"\"身高为：\"",[91,21194,6542],{"class":153},[91,21196,21197],{"class":250},"p1.m_Height",[91,21199,1293],{"class":153},[91,21201,1363],{"class":250},[91,21203,21204],{"class":308},"  \u002F\u002F18\n",[91,21206,21207,21209,21211],{"class":93,"line":9887},[91,21208,19554],{"class":250},[91,21210,7156],{"class":97},[91,21212,17638],{"class":250},[91,21214,21215,21217,21219,21222,21224,21226,21228,21230,21232,21235,21237,21239],{"class":93,"line":9911},[91,21216,1675],{"class":250},[91,21218,1293],{"class":153},[91,21220,21221],{"class":101},"\"p2的年龄为：\"",[91,21223,1293],{"class":153},[91,21225,19584],{"class":250},[91,21227,1293],{"class":153},[91,21229,21192],{"class":101},[91,21231,6542],{"class":153},[91,21233,21234],{"class":250},"p2.m_Height",[91,21236,1293],{"class":153},[91,21238,1363],{"class":250},[91,21240,21204],{"class":308},[91,21242,21243],{"class":93,"line":9916},[91,21244,13333],{"class":250},[91,21246,21247],{"class":93,"line":9921},[91,21248,1689],{"class":250},[91,21250,21251,21253,21255],{"class":93,"line":9926},[91,21252,254],{"class":153},[91,21254,2096],{"class":97},[91,21256,2099],{"class":250},[91,21258,21259],{"class":93,"line":9935},[91,21260,1670],{"class":250},[91,21262,21263,21265],{"class":93,"line":9940},[91,21264,5756],{"class":97},[91,21266,5759],{"class":250},[91,21268,21269],{"class":93,"line":9946},[91,21270,1689],{"class":250},[21,21272,21273],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[21,21275,21276],{},"浅拷贝带来的问题是堆区的内存重复释放",[21,21278,21279],{},[24,21280],{"alt":26,"src":21281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[21,21283,21284],{},"浅拷贝问题要使用深拷贝来解决",[21,21286,21287],{},[24,21288],{"alt":26,"src":21289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[21,21291,21292],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[217,21294,21296],{"id":21295},"_826初始化列表","8.2.6初始化列表",[21,21298,21299],{},"作用：初始化属性",[21,21301,5304],{},[82,21303,21306],{"className":21304,"code":21305,"language":5310},[5308],"构造函数():属性1(值1),属性2(值2).....{}\n",[88,21307,21305],{"__ignoreMap":26},[21,21309,21310],{},"例子",[82,21312,21314],{"className":238,"code":21313,"language":240,"meta":26,"style":26},"#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",[88,21315,21316,21322,21332,21338,21342,21347,21351,21356,21361,21366,21371,21376,21381,21385,21390,21395,21438,21447,21465,21483,21501,21505,21509,21516,21523,21530,21534,21538,21546,21550,21554,21574,21583,21587,21591,21601,21605,21613],{"__ignoreMap":26},[91,21317,21318,21320],{"class":93,"line":94},[91,21319,2073],{"class":153},[91,21321,2076],{"class":101},[91,21323,21324,21326,21328,21330],{"class":93,"line":38},[91,21325,2081],{"class":153},[91,21327,2084],{"class":153},[91,21329,2087],{"class":97},[91,21331,1415],{"class":250},[91,21333,21334,21336],{"class":93,"line":1304},[91,21335,14817],{"class":153},[91,21337,15294],{"class":97},[91,21339,21340],{"class":93,"line":1319},[91,21341,1670],{"class":250},[91,21343,21344],{"class":93,"line":1325},[91,21345,21346],{"class":153},"    public:\n",[91,21348,21349],{"class":93,"line":1339},[91,21350,2523],{"emptyLinePlaceholder":175},[91,21352,21353],{"class":93,"line":1345},[91,21354,21355],{"class":308},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[91,21357,21358],{"class":93,"line":1436},[91,21359,21360],{"class":308},"    \u002F\u002FPerson(int a, int b, int c) {\n",[91,21362,21363],{"class":93,"line":1442},[91,21364,21365],{"class":308},"    \u002F\u002F  m_A = a;\n",[91,21367,21368],{"class":93,"line":1454},[91,21369,21370],{"class":308},"    \u002F\u002F  m_B = b;\n",[91,21372,21373],{"class":93,"line":1736},[91,21374,21375],{"class":308},"    \u002F\u002F  m_C = c;\n",[91,21377,21378],{"class":93,"line":1741},[91,21379,21380],{"class":308},"    \u002F\u002F}\n",[91,21382,21383],{"class":93,"line":1747},[91,21384,2523],{"emptyLinePlaceholder":175},[91,21386,21387],{"class":93,"line":1752},[91,21388,21389],{"class":308},"    \u002F\u002F初始化列表方式初始化\n",[91,21391,21392],{"class":93,"line":1766},[91,21393,21394],{"class":308},"    \u002F\u002F使用有参构造函数\n",[91,21396,21397,21399,21401,21403,21405,21407,21409,21411,21413,21415,21417,21420,21423,21426,21429,21432,21435],{"class":93,"line":1771},[91,21398,18642],{"class":97},[91,21400,251],{"class":250},[91,21402,254],{"class":153},[91,21404,1523],{"class":5339},[91,21406,12558],{"class":250},[91,21408,254],{"class":153},[91,21410,2956],{"class":5339},[91,21412,12558],{"class":250},[91,21414,254],{"class":153},[91,21416,2972],{"class":5339},[91,21418,21419],{"class":250},") :",[91,21421,21422],{"class":97},"m_A",[91,21424,21425],{"class":250},"(a), ",[91,21427,21428],{"class":97},"m_B",[91,21430,21431],{"class":250},"(b), ",[91,21433,21434],{"class":97},"m_C",[91,21436,21437],{"class":250},"(c) {}\n",[91,21439,21440,21442,21445],{"class":93,"line":1777},[91,21441,15032],{"class":153},[91,21443,21444],{"class":97}," PrintPerson",[91,21446,10976],{"class":250},[91,21448,21449,21451,21453,21456,21458,21461,21463],{"class":93,"line":1798},[91,21450,9792],{"class":250},[91,21452,1293],{"class":153},[91,21454,21455],{"class":101}," \"mA:\"",[91,21457,1569],{"class":153},[91,21459,21460],{"class":250}," m_A ",[91,21462,1293],{"class":153},[91,21464,8963],{"class":250},[91,21466,21467,21469,21471,21474,21476,21479,21481],{"class":93,"line":1803},[91,21468,9792],{"class":250},[91,21470,1293],{"class":153},[91,21472,21473],{"class":101}," \"mB:\"",[91,21475,1569],{"class":153},[91,21477,21478],{"class":250}," m_B ",[91,21480,1293],{"class":153},[91,21482,8963],{"class":250},[91,21484,21485,21487,21489,21492,21494,21497,21499],{"class":93,"line":1817},[91,21486,9792],{"class":250},[91,21488,1293],{"class":153},[91,21490,21491],{"class":101}," \"mC:\"",[91,21493,1569],{"class":153},[91,21495,21496],{"class":250}," m_C ",[91,21498,1293],{"class":153},[91,21500,8963],{"class":250},[91,21502,21503],{"class":93,"line":1822},[91,21504,2310],{"class":250},[91,21506,21507],{"class":93,"line":1851},[91,21508,15345],{"class":153},[91,21510,21511,21513],{"class":93,"line":1856},[91,21512,2108],{"class":153},[91,21514,21515],{"class":250}," m_A;\n",[91,21517,21518,21520],{"class":93,"line":1873},[91,21519,2108],{"class":153},[91,21521,21522],{"class":250}," m_B;\n",[91,21524,21525,21527],{"class":93,"line":1878},[91,21526,2108],{"class":153},[91,21528,21529],{"class":250}," m_C;\n",[91,21531,21532],{"class":93,"line":1883},[91,21533,4118],{"class":250},[91,21535,21536],{"class":93,"line":1888},[91,21537,2523],{"emptyLinePlaceholder":175},[91,21539,21540,21542,21544],{"class":93,"line":1902},[91,21541,254],{"class":153},[91,21543,2096],{"class":97},[91,21545,6101],{"class":250},[91,21547,21548],{"class":93,"line":1907},[91,21549,1670],{"class":250},[91,21551,21552],{"class":93,"line":2700},[91,21553,2523],{"emptyLinePlaceholder":175},[91,21555,21556,21558,21560,21562,21564,21566,21568,21570,21572],{"class":93,"line":2714},[91,21557,19554],{"class":250},[91,21559,21],{"class":97},[91,21561,251],{"class":250},[91,21563,466],{"class":105},[91,21565,12558],{"class":250},[91,21567,327],{"class":105},[91,21569,12558],{"class":250},[91,21571,321],{"class":105},[91,21573,2842],{"class":250},[91,21575,21576,21578,21581],{"class":93,"line":2722},[91,21577,15989],{"class":250},[91,21579,21580],{"class":97},"PrintPerson",[91,21582,5759],{"class":250},[91,21584,21585],{"class":93,"line":2727},[91,21586,2523],{"emptyLinePlaceholder":175},[91,21588,21589],{"class":93,"line":2733},[91,21590,2523],{"emptyLinePlaceholder":175},[91,21592,21593,21595,21597,21599],{"class":93,"line":2739},[91,21594,2426],{"class":97},[91,21596,251],{"class":250},[91,21598,2431],{"class":101},[91,21600,2842],{"class":250},[91,21602,21603],{"class":93,"line":2744},[91,21604,2523],{"emptyLinePlaceholder":175},[91,21606,21607,21609,21611],{"class":93,"line":8071},[91,21608,4213],{"class":153},[91,21610,4216],{"class":105},[91,21612,1415],{"class":250},[91,21614,21615],{"class":93,"line":8095},[91,21616,1689],{"class":250},[21,21618,21619,21620,21623,21624],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[398,21621,21622],{},"参数名就是定义的对象属性","，",[398,21625,21626],{},"属性后面的值为有参构造函数的形参",[82,21628,21630],{"className":238,"code":21629,"language":240,"meta":26,"style":26},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[88,21631,21632],{"__ignoreMap":26},[91,21633,21634,21636,21638,21640,21643,21645,21648,21650,21653,21655,21658,21660,21663,21665],{"class":93,"line":94},[91,21635,19169],{"class":97},[91,21637,251],{"class":250},[91,21639,254],{"class":153},[91,21641,21642],{"class":250}," a.",[91,21644,254],{"class":153},[91,21646,21647],{"class":250}," b,",[91,21649,254],{"class":153},[91,21651,21652],{"class":250}," b):",[91,21654,21422],{"class":97},[91,21656,21657],{"class":250},"(a),",[91,21659,21428],{"class":97},[91,21661,21662],{"class":250},"(c),",[91,21664,21434],{"class":97},[91,21666,21667],{"class":250},"(b) {}\n",[217,21669,21671],{"id":21670},"_827类对象作为类成员","8.2.7类对象作为类成员",[21,21673,21674],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[21,21676,14756],{},[82,21678,21680],{"className":238,"code":21679,"language":240,"meta":26,"style":26},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[88,21681,21682,21687,21692,21696,21701,21705],{"__ignoreMap":26},[91,21683,21684],{"class":93,"line":94},[91,21685,21686],{"class":250},"A{};\n",[91,21688,21689],{"class":93,"line":38},[91,21690,21691],{"class":250},"B\n",[91,21693,21694],{"class":93,"line":1304},[91,21695,1670],{"class":250},[91,21697,21698],{"class":93,"line":1319},[91,21699,21700],{"class":250},"    A a;\n",[91,21702,21703],{"class":93,"line":1325},[91,21704,1689],{"class":250},[91,21706,21707],{"class":93,"line":1339},[91,21708,21709],{"class":308},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[21,21711,21712],{},"案例",[82,21714,21716],{"className":238,"code":21715,"language":240,"meta":26,"style":26},"\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",[88,21717,21718,21723,21730,21734,21739,21744,21758,21762,21772,21783,21787,21794,21798,21811,21815,21820,21825,21829,21835,21839,21843,21847,21878,21882,21893,21897,21903,21907,21920,21924,21928,21932,21937,21942,21946,21954,21958,21975,21994,21998,22006,22010,22016],{"__ignoreMap":26},[91,21719,21720],{"class":93,"line":94},[91,21721,21722],{"class":308},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[91,21724,21725,21727],{"class":93,"line":38},[91,21726,14817],{"class":153},[91,21728,21729],{"class":97}," Phone\n",[91,21731,21732],{"class":93,"line":1304},[91,21733,1670],{"class":250},[91,21735,21736],{"class":93,"line":1319},[91,21737,21738],{"class":250},"public：\n",[91,21740,21741],{"class":93,"line":1325},[91,21742,21743],{"class":308},"    \u002F\u002F 赋值(构造函数)\n",[91,21745,21746,21749,21751,21753,21756],{"class":93,"line":1339},[91,21747,21748],{"class":97},"    Phone",[91,21750,251],{"class":250},[91,21752,15040],{"class":97},[91,21754,21755],{"class":5339}," pName",[91,21757,257],{"class":250},[91,21759,21760],{"class":93,"line":1345},[91,21761,2153],{"class":250},[91,21763,21764,21767,21769],{"class":93,"line":1436},[91,21765,21766],{"class":250},"        m_pName",[91,21768,296],{"class":153},[91,21770,21771],{"class":250},"pName;\n",[91,21773,21774,21776,21778,21781],{"class":93,"line":1442},[91,21775,3574],{"class":250},[91,21777,1293],{"class":153},[91,21779,21780],{"class":101},"\"Phone的构造函数调用\"",[91,21782,1415],{"class":250},[91,21784,21785],{"class":93,"line":1454},[91,21786,2310],{"class":250},[91,21788,21789,21792],{"class":93,"line":1736},[91,21790,21791],{"class":97},"    ~Phone",[91,21793,2099],{"class":250},[91,21795,21796],{"class":93,"line":1741},[91,21797,2153],{"class":250},[91,21799,21800,21802,21804,21807,21809],{"class":93,"line":1747},[91,21801,3574],{"class":250},[91,21803,1293],{"class":153},[91,21805,21806],{"class":101},"\"Phone析构函数调用\"",[91,21808,1293],{"class":153},[91,21810,1316],{"class":250},[91,21812,21813],{"class":93,"line":1752},[91,21814,2310],{"class":250},[91,21816,21817],{"class":93,"line":1766},[91,21818,21819],{"class":308},"    \u002F\u002F\n",[91,21821,21822],{"class":93,"line":1771},[91,21823,21824],{"class":250},"    string m_PName;\n",[91,21826,21827],{"class":93,"line":1777},[91,21828,4118],{"class":250},[91,21830,21831,21833],{"class":93,"line":1798},[91,21832,14817],{"class":153},[91,21834,15294],{"class":97},[91,21836,21837],{"class":93,"line":1803},[91,21838,1670],{"class":250},[91,21840,21841],{"class":93,"line":1817},[91,21842,14839],{"class":153},[91,21844,21845],{"class":93,"line":1822},[91,21846,17117],{"class":308},[91,21848,21849,21851,21853,21855,21857,21859,21861,21864,21867,21869,21872,21875],{"class":93,"line":1851},[91,21850,18642],{"class":97},[91,21852,251],{"class":250},[91,21854,15040],{"class":97},[91,21856,15043],{"class":5339},[91,21858,627],{"class":250},[91,21860,15040],{"class":97},[91,21862,21863],{"class":5339}," pname",[91,21865,21866],{"class":250},"):",[91,21868,15133],{"class":97},[91,21870,21871],{"class":250},"(name),m_phone.",[91,21873,21874],{"class":97},"m_PName",[91,21876,21877],{"class":250},"(pname) \n",[91,21879,21880],{"class":93,"line":1856},[91,21881,2153],{"class":250},[91,21883,21884,21886,21888,21891],{"class":93,"line":1873},[91,21885,3574],{"class":250},[91,21887,1293],{"class":153},[91,21889,21890],{"class":101},"\"Person的构造函数调用\"",[91,21892,1415],{"class":250},[91,21894,21895],{"class":93,"line":1878},[91,21896,2310],{"class":250},[91,21898,21899,21901],{"class":93,"line":1883},[91,21900,18675],{"class":97},[91,21902,2099],{"class":250},[91,21904,21905],{"class":93,"line":1888},[91,21906,2153],{"class":250},[91,21908,21909,21911,21913,21916,21918],{"class":93,"line":1902},[91,21910,3574],{"class":250},[91,21912,1293],{"class":153},[91,21914,21915],{"class":101},"\"Person析构函数调用\"",[91,21917,1293],{"class":153},[91,21919,1316],{"class":250},[91,21921,21922],{"class":93,"line":1907},[91,21923,2310],{"class":250},[91,21925,21926],{"class":93,"line":2700},[91,21927,7903],{"class":308},[91,21929,21930],{"class":93,"line":2714},[91,21931,15015],{"class":250},[91,21933,21934],{"class":93,"line":2722},[91,21935,21936],{"class":308},"    \u002F\u002F手机\n",[91,21938,21939],{"class":93,"line":2727},[91,21940,21941],{"class":250},"    Phone m_Phone;\n",[91,21943,21944],{"class":93,"line":2733},[91,21945,4118],{"class":250},[91,21947,21948,21950,21952],{"class":93,"line":2739},[91,21949,5487],{"class":153},[91,21951,5711],{"class":97},[91,21953,2099],{"class":250},[91,21955,21956],{"class":93,"line":2744},[91,21957,1670],{"class":250},[91,21959,21960,21962,21964,21966,21968,21970,21973],{"class":93,"line":8071},[91,21961,19554],{"class":250},[91,21963,21],{"class":97},[91,21965,251],{"class":250},[91,21967,8039],{"class":101},[91,21969,627],{"class":250},[91,21971,21972],{"class":101},"\"安卓\"",[91,21974,2842],{"class":250},[91,21976,21977,21979,21981,21984,21986,21989,21991],{"class":93,"line":8095},[91,21978,1675],{"class":250},[91,21980,1293],{"class":153},[91,21982,21983],{"class":250},"p.Name",[91,21985,1293],{"class":153},[91,21987,21988],{"class":101},"\"拿着：\"",[91,21990,1293],{"class":153},[91,21992,21993],{"class":250},"p.m_phone.m_PName;\n",[91,21995,21996],{"class":93,"line":8100},[91,21997,1689],{"class":250},[91,21999,22000,22002,22004],{"class":93,"line":8106},[91,22001,254],{"class":153},[91,22003,2096],{"class":97},[91,22005,2099],{"class":250},[91,22007,22008],{"class":93,"line":8133},[91,22009,1670],{"class":250},[91,22011,22012,22014],{"class":93,"line":8138},[91,22013,5756],{"class":97},[91,22015,5759],{"class":250},[91,22017,22018],{"class":93,"line":8144},[91,22019,1689],{"class":250},[21,22021,9148],{},[82,22023,22025],{"className":238,"code":22024,"language":240,"meta":26,"style":26},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[88,22026,22027,22032],{"__ignoreMap":26},[91,22028,22029],{"class":93,"line":94},[91,22030,22031],{"class":308},"    \u002F\u002F不需要写这个：\n",[91,22033,22034],{"class":93,"line":38},[91,22035,22036],{"class":308},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[21,22038,22039],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[82,22041,22043],{"className":238,"code":22042,"language":240,"meta":26,"style":26},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[88,22044,22045],{"__ignoreMap":26},[91,22046,22047,22049,22052,22054,22057,22060],{"class":93,"line":94},[91,22048,19169],{"class":97},[91,22050,22051],{"class":250},"(string name.string pname):",[91,22053,15133],{"class":97},[91,22055,22056],{"class":250},"(name),",[91,22058,22059],{"class":97},"m_phone",[91,22061,22062],{"class":250},"(pname) {}\n",[21,22064,22065,22066,296,22069],{},"采用的是隐式转换法，实际为如下：\n",[88,22067,22068],{},"m_phone(pname)",[88,22070,22071],{},"Phone m_phone=pname",[21,22073,22074,22077],{},[398,22075,22076],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[21,22079,22080],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[217,22082,22084],{"id":22083},"_828静态对象","8.2.8静态对象",[21,22086,22087],{},"静态对象在成员对象前static，称为静态对象",[21,22089,22090],{},"静态对象分为两类：",[14,22092,22093],{},[17,22094,22095],{},"静态成员变量",[1256,22097,22098,22101,22104],{},[17,22099,22100],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[17,22102,22103],{},"②在编译阶段分配内存",[17,22105,22106],{},"③类内声明，类外初始化",[14,22108,22109],{"start":38},[17,22110,22111],{},"静态成员函数",[1256,22113,22114,22117],{},[17,22115,22116],{},"①所有对象共享同一个函数",[17,22118,22119],{},"②静态成员函数只能访问静态成员变量",[22121,22122,22124],"h4",{"id":22123},"_8281静态成员变量","8.2.8.1静态成员变量",[82,22126,22128],{"className":238,"code":22127,"language":240,"meta":26,"style":26},"#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",[88,22129,22130,22136,22146,22152,22156,22160,22165,22170,22175,22183,22187,22191,22195,22203,22207,22211,22216,22229,22233,22241,22245,22251],{"__ignoreMap":26},[91,22131,22132,22134],{"class":93,"line":94},[91,22133,2073],{"class":153},[91,22135,2076],{"class":101},[91,22137,22138,22140,22142,22144],{"class":93,"line":38},[91,22139,2081],{"class":153},[91,22141,2084],{"class":153},[91,22143,2087],{"class":97},[91,22145,1415],{"class":250},[91,22147,22148,22150],{"class":93,"line":1304},[91,22149,14817],{"class":153},[91,22151,15294],{"class":97},[91,22153,22154],{"class":93,"line":1319},[91,22155,1670],{"class":250},[91,22157,22158],{"class":93,"line":1325},[91,22159,14839],{"class":153},[91,22161,22162],{"class":93,"line":1339},[91,22163,22164],{"class":308},"    \u002F\u002F非静态成员变量\n",[91,22166,22167],{"class":93,"line":1345},[91,22168,22169],{"class":308},"    \u002F\u002F int m_A;\n",[91,22171,22172],{"class":93,"line":1436},[91,22173,22174],{"class":308},"    \u002F\u002F定义静态成员变量\n",[91,22176,22177,22179,22181],{"class":93,"line":1442},[91,22178,11143],{"class":153},[91,22180,2505],{"class":153},[91,22182,21515],{"class":250},[91,22184,22185],{"class":93,"line":1454},[91,22186,2523],{"emptyLinePlaceholder":175},[91,22188,22189],{"class":93,"line":1736},[91,22190,2523],{"emptyLinePlaceholder":175},[91,22192,22193],{"class":93,"line":1741},[91,22194,4118],{"class":250},[91,22196,22197,22199,22201],{"class":93,"line":1747},[91,22198,5487],{"class":153},[91,22200,5711],{"class":97},[91,22202,2099],{"class":250},[91,22204,22205],{"class":93,"line":1752},[91,22206,1670],{"class":250},[91,22208,22209],{"class":93,"line":1766},[91,22210,15436],{"class":250},[91,22212,22213],{"class":93,"line":1771},[91,22214,22215],{"class":308},"    \u002F\u002F输出类成员变量这块内存\n",[91,22217,22218,22220,22222,22225,22227],{"class":93,"line":1777},[91,22219,1675],{"class":250},[91,22221,1293],{"class":153},[91,22223,22224],{"class":250},"p.m_A",[91,22226,1293],{"class":153},[91,22228,1316],{"class":250},[91,22230,22231],{"class":93,"line":1798},[91,22232,1689],{"class":250},[91,22234,22235,22237,22239],{"class":93,"line":1803},[91,22236,254],{"class":153},[91,22238,2096],{"class":97},[91,22240,2099],{"class":250},[91,22242,22243],{"class":93,"line":1817},[91,22244,1670],{"class":250},[91,22246,22247,22249],{"class":93,"line":1822},[91,22248,5756],{"class":97},[91,22250,2099],{"class":250},[91,22252,22253],{"class":93,"line":1851},[91,22254,1689],{"class":250},[21,22256,22257],{},"此时输出是报错的：无法解析外部命令",[21,22259,22260],{},"解决这一问题：必须用到类内声明，类外初始化操作",[82,22262,22264],{"className":238,"code":22263,"language":240,"meta":26,"style":26},"#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",[88,22265,22266,22272,22282,22288,22292,22296,22301,22309,22313,22318,22333,22341,22345,22349,22354,22359,22371,22376,22387,22392,22397,22410,22414,22422,22426,22432],{"__ignoreMap":26},[91,22267,22268,22270],{"class":93,"line":94},[91,22269,2073],{"class":153},[91,22271,2076],{"class":101},[91,22273,22274,22276,22278,22280],{"class":93,"line":38},[91,22275,2081],{"class":153},[91,22277,2084],{"class":153},[91,22279,2087],{"class":97},[91,22281,1415],{"class":250},[91,22283,22284,22286],{"class":93,"line":1304},[91,22285,14817],{"class":153},[91,22287,15294],{"class":97},[91,22289,22290],{"class":93,"line":1319},[91,22291,1670],{"class":250},[91,22293,22294],{"class":93,"line":1325},[91,22295,14839],{"class":153},[91,22297,22298],{"class":93,"line":1339},[91,22299,22300],{"class":308},"    \u002F\u002F类内声明\n",[91,22302,22303,22305,22307],{"class":93,"line":1345},[91,22304,11143],{"class":153},[91,22306,2505],{"class":153},[91,22308,21515],{"class":250},[91,22310,22311],{"class":93,"line":1436},[91,22312,4118],{"class":250},[91,22314,22315],{"class":93,"line":1442},[91,22316,22317],{"class":308},"\u002F\u002F类外初始化\n",[91,22319,22320,22322,22324,22327,22329,22331],{"class":93,"line":1454},[91,22321,254],{"class":153},[91,22323,15692],{"class":97},[91,22325,22326],{"class":250},"::m_A",[91,22328,296],{"class":153},[91,22330,695],{"class":105},[91,22332,1415],{"class":250},[91,22334,22335,22337,22339],{"class":93,"line":1736},[91,22336,5487],{"class":153},[91,22338,5711],{"class":97},[91,22340,2099],{"class":250},[91,22342,22343],{"class":93,"line":1741},[91,22344,1670],{"class":250},[91,22346,22347],{"class":93,"line":1747},[91,22348,15436],{"class":250},[91,22350,22351],{"class":93,"line":1752},[91,22352,22353],{"class":308},"    \u002F\u002F访问变量的原内存空间\n",[91,22355,22356],{"class":93,"line":1766},[91,22357,22358],{"class":308},"    \u002F\u002F100\n",[91,22360,22361,22363,22365,22367,22369],{"class":93,"line":1771},[91,22362,1675],{"class":250},[91,22364,1293],{"class":153},[91,22366,22224],{"class":250},[91,22368,1293],{"class":153},[91,22370,1316],{"class":250},[91,22372,22373],{"class":93,"line":1777},[91,22374,22375],{"class":250},"    Person p2;\n",[91,22377,22378,22381,22383,22385],{"class":93,"line":1798},[91,22379,22380],{"class":250},"    p2.m_A",[91,22382,296],{"class":153},[91,22384,1846],{"class":105},[91,22386,1415],{"class":250},[91,22388,22389],{"class":93,"line":1803},[91,22390,22391],{"class":308},"    \u002F\u002F继续访问这片空间\n",[91,22393,22394],{"class":93,"line":1817},[91,22395,22396],{"class":308},"    \u002F\u002F200\n",[91,22398,22399,22401,22403,22406,22408],{"class":93,"line":1822},[91,22400,1675],{"class":250},[91,22402,1293],{"class":153},[91,22404,22405],{"class":250},"p2.m_A",[91,22407,1293],{"class":153},[91,22409,1316],{"class":250},[91,22411,22412],{"class":93,"line":1851},[91,22413,1689],{"class":250},[91,22415,22416,22418,22420],{"class":93,"line":1856},[91,22417,254],{"class":153},[91,22419,2096],{"class":97},[91,22421,2099],{"class":250},[91,22423,22424],{"class":93,"line":1873},[91,22425,1670],{"class":250},[91,22427,22428,22430],{"class":93,"line":1878},[91,22429,5756],{"class":97},[91,22431,5759],{"class":250},[91,22433,22434],{"class":93,"line":1883},[91,22435,1689],{"class":250},[21,22437,22438],{},[398,22439,22440],{},"静态变量的访问",[82,22442,22444],{"className":238,"code":22443,"language":240,"meta":26,"style":26},"#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",[88,22445,22446,22452,22462,22468,22472,22476,22480,22488,22492,22497,22505,22509,22513,22527,22542,22550,22554,22559,22564,22569,22574,22586,22591,22596,22610,22627,22631,22639,22643,22649],{"__ignoreMap":26},[91,22447,22448,22450],{"class":93,"line":94},[91,22449,2073],{"class":153},[91,22451,2076],{"class":101},[91,22453,22454,22456,22458,22460],{"class":93,"line":38},[91,22455,2081],{"class":153},[91,22457,2084],{"class":153},[91,22459,2087],{"class":97},[91,22461,1415],{"class":250},[91,22463,22464,22466],{"class":93,"line":1304},[91,22465,14817],{"class":153},[91,22467,15294],{"class":97},[91,22469,22470],{"class":93,"line":1319},[91,22471,1670],{"class":250},[91,22473,22474],{"class":93,"line":1325},[91,22475,14839],{"class":153},[91,22477,22478],{"class":93,"line":1339},[91,22479,22300],{"class":308},[91,22481,22482,22484,22486],{"class":93,"line":1345},[91,22483,11143],{"class":153},[91,22485,2505],{"class":153},[91,22487,21515],{"class":250},[91,22489,22490],{"class":93,"line":1436},[91,22491,15345],{"class":153},[91,22493,22494],{"class":93,"line":1442},[91,22495,22496],{"class":308},"    \u002F\u002F静态成员变量也是有访问权限的\n",[91,22498,22499,22501,22503],{"class":93,"line":1454},[91,22500,11143],{"class":153},[91,22502,2505],{"class":153},[91,22504,21522],{"class":250},[91,22506,22507],{"class":93,"line":1736},[91,22508,4118],{"class":250},[91,22510,22511],{"class":93,"line":1741},[91,22512,22317],{"class":308},[91,22514,22515,22517,22519,22521,22523,22525],{"class":93,"line":1747},[91,22516,254],{"class":153},[91,22518,15692],{"class":97},[91,22520,22326],{"class":250},[91,22522,296],{"class":153},[91,22524,695],{"class":105},[91,22526,1415],{"class":250},[91,22528,22529,22531,22533,22536,22538,22540],{"class":93,"line":1752},[91,22530,254],{"class":153},[91,22532,15692],{"class":97},[91,22534,22535],{"class":250},"::m_B",[91,22537,296],{"class":153},[91,22539,949],{"class":105},[91,22541,1415],{"class":250},[91,22543,22544,22546,22548],{"class":93,"line":1766},[91,22545,5487],{"class":153},[91,22547,5780],{"class":97},[91,22549,2099],{"class":250},[91,22551,22552],{"class":93,"line":1771},[91,22553,1670],{"class":250},[91,22555,22556],{"class":93,"line":1777},[91,22557,22558],{"class":308},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[91,22560,22561],{"class":93,"line":1798},[91,22562,22563],{"class":308},"    \u002F\u002F静态成员变量有两种访问方式：\n",[91,22565,22566],{"class":93,"line":1803},[91,22567,22568],{"class":308},"    \u002F\u002F1.通过对象进行访问\n",[91,22570,22571],{"class":93,"line":1817},[91,22572,22573],{"class":250},"    Person p;  \n",[91,22575,22576,22578,22580,22582,22584],{"class":93,"line":1822},[91,22577,1675],{"class":250},[91,22579,1293],{"class":153},[91,22581,22224],{"class":250},[91,22583,1293],{"class":153},[91,22585,1316],{"class":250},[91,22587,22588],{"class":93,"line":1851},[91,22589,22590],{"class":308},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[91,22592,22593],{"class":93,"line":1856},[91,22594,22595],{"class":308},"    \u002F\u002F2.通过类名进行访问\n",[91,22597,22598,22600,22602,22604,22606,22608],{"class":93,"line":1873},[91,22599,1675],{"class":250},[91,22601,1293],{"class":153},[91,22603,19169],{"class":97},[91,22605,22326],{"class":250},[91,22607,1293],{"class":153},[91,22609,1316],{"class":250},[91,22611,22612,22614,22616,22618,22620,22622,22624],{"class":93,"line":1878},[91,22613,1675],{"class":250},[91,22615,1293],{"class":153},[91,22617,19169],{"class":97},[91,22619,22535],{"class":250},[91,22621,1293],{"class":153},[91,22623,1363],{"class":250},[91,22625,22626],{"class":308}," \u002F\u002F没有访问权限，报错\n",[91,22628,22629],{"class":93,"line":1883},[91,22630,1689],{"class":250},[91,22632,22633,22635,22637],{"class":93,"line":1888},[91,22634,254],{"class":153},[91,22636,2096],{"class":97},[91,22638,2099],{"class":250},[91,22640,22641],{"class":93,"line":1902},[91,22642,1670],{"class":250},[91,22644,22645,22647],{"class":93,"line":1907},[91,22646,5825],{"class":97},[91,22648,5759],{"class":250},[91,22650,22651],{"class":93,"line":2700},[91,22652,1689],{"class":250},[22121,22654,22656],{"id":22655},"_8282静态成员函数","8.2.8.2静态成员函数",[21,22658,22659],{},"1.静态成员函数定义与访问",[82,22661,22663],{"className":238,"code":22662,"language":240,"meta":26,"style":26},"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",[88,22664,22665,22671,22675,22679,22684,22695,22699,22713,22717,22721,22729,22733,22738,22743,22747,22755,22760,22770],{"__ignoreMap":26},[91,22666,22667,22669],{"class":93,"line":94},[91,22668,14817],{"class":153},[91,22670,15294],{"class":97},[91,22672,22673],{"class":93,"line":38},[91,22674,1670],{"class":250},[91,22676,22677],{"class":93,"line":1304},[91,22678,14839],{"class":153},[91,22680,22681],{"class":93,"line":1319},[91,22682,22683],{"class":308},"    \u002F\u002F在公共权限下定义静态成员函数\n",[91,22685,22686,22688,22691,22693],{"class":93,"line":1325},[91,22687,11143],{"class":153},[91,22689,22690],{"class":153}," void",[91,22692,11508],{"class":97},[91,22694,2099],{"class":250},[91,22696,22697],{"class":93,"line":1339},[91,22698,2153],{"class":250},[91,22700,22701,22704,22706,22709,22711],{"class":93,"line":1345},[91,22702,22703],{"class":250},"        coout",[91,22705,1293],{"class":153},[91,22707,22708],{"class":101},"\"静态成员函数的调用\"",[91,22710,1293],{"class":153},[91,22712,1316],{"class":250},[91,22714,22715],{"class":93,"line":1436},[91,22716,2310],{"class":250},[91,22718,22719],{"class":93,"line":1442},[91,22720,4118],{"class":250},[91,22722,22723,22725,22727],{"class":93,"line":1454},[91,22724,5487],{"class":153},[91,22726,5711],{"class":97},[91,22728,2099],{"class":250},[91,22730,22731],{"class":93,"line":1736},[91,22732,1670],{"class":250},[91,22734,22735],{"class":93,"line":1741},[91,22736,22737],{"class":308},"    \u002F\u002F静态成员函数的调用方式:\n",[91,22739,22740],{"class":93,"line":1747},[91,22741,22742],{"class":308},"    \u002F\u002F1.通过对象访问\n",[91,22744,22745],{"class":93,"line":1752},[91,22746,15436],{"class":250},[91,22748,22749,22751,22753],{"class":93,"line":1766},[91,22750,15989],{"class":250},[91,22752,11674],{"class":97},[91,22754,5759],{"class":250},[91,22756,22757],{"class":93,"line":1771},[91,22758,22759],{"class":308},"    \u002F\u002F2.通过类名访问\n",[91,22761,22762,22764,22766,22768],{"class":93,"line":1777},[91,22763,18642],{"class":97},[91,22765,17855],{"class":250},[91,22767,11674],{"class":97},[91,22769,5759],{"class":250},[91,22771,22772],{"class":93,"line":1798},[91,22773,1689],{"class":250},[14,22775,22776],{"start":38},[17,22777,22778],{},"静态成员函数只能访问静态成员变量",[82,22780,22782],{"className":238,"code":22781,"language":240,"meta":26,"style":26},"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",[88,22783,22784,22790,22794,22798,22802,22812,22816,22830,22835,22847,22851,22862,22872,22876,22880,22884,22894,22898,22911,22915,22919,22923,22927,22941,22949,22953,22957,22961,22965,22973,22977,22987,22992,22996,23004,23008,23014],{"__ignoreMap":26},[91,22785,22786,22788],{"class":93,"line":94},[91,22787,14817],{"class":153},[91,22789,15294],{"class":97},[91,22791,22792],{"class":93,"line":38},[91,22793,1670],{"class":250},[91,22795,22796],{"class":93,"line":1304},[91,22797,14839],{"class":153},[91,22799,22800],{"class":93,"line":1319},[91,22801,22683],{"class":308},[91,22803,22804,22806,22808,22810],{"class":93,"line":1325},[91,22805,11143],{"class":153},[91,22807,22690],{"class":153},[91,22809,11508],{"class":97},[91,22811,2099],{"class":250},[91,22813,22814],{"class":93,"line":1339},[91,22815,2153],{"class":250},[91,22817,22818,22821,22823,22825,22827],{"class":93,"line":1345},[91,22819,22820],{"class":250},"        m_A",[91,22822,296],{"class":153},[91,22824,560],{"class":105},[91,22826,305],{"class":250},[91,22828,22829],{"class":308}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[91,22831,22832],{"class":93,"line":1436},[91,22833,22834],{"class":308},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[91,22836,22837,22839,22841,22843,22845],{"class":93,"line":1442},[91,22838,22703],{"class":250},[91,22840,1293],{"class":153},[91,22842,22708],{"class":101},[91,22844,1293],{"class":153},[91,22846,1316],{"class":250},[91,22848,22849],{"class":93,"line":1454},[91,22850,2310],{"class":250},[91,22852,22853,22855,22857,22859],{"class":93,"line":1736},[91,22854,11143],{"class":153},[91,22856,2505],{"class":153},[91,22858,15571],{"class":250},[91,22860,22861],{"class":308}," \u002F\u002F静态成员变量\n",[91,22863,22864,22866,22869],{"class":93,"line":1741},[91,22865,2108],{"class":153},[91,22867,22868],{"class":250}," m_B;",[91,22870,22871],{"class":308}," \u002F\u002F非静态成员变量\n",[91,22873,22874],{"class":93,"line":1747},[91,22875,2523],{"emptyLinePlaceholder":175},[91,22877,22878],{"class":93,"line":1752},[91,22879,15345],{"class":153},[91,22881,22882],{"class":93,"line":1766},[91,22883,22496],{"class":308},[91,22885,22886,22888,22890,22892],{"class":93,"line":1771},[91,22887,11143],{"class":153},[91,22889,22690],{"class":153},[91,22891,13741],{"class":97},[91,22893,2099],{"class":250},[91,22895,22896],{"class":93,"line":1777},[91,22897,2153],{"class":250},[91,22899,22900,22902,22904,22907,22909],{"class":93,"line":1798},[91,22901,3574],{"class":250},[91,22903,1293],{"class":153},[91,22905,22906],{"class":101},"\"这是私有权限下的静态函数调用\"",[91,22908,1293],{"class":153},[91,22910,1316],{"class":250},[91,22912,22913],{"class":93,"line":1803},[91,22914,2310],{"class":250},[91,22916,22917],{"class":93,"line":1817},[91,22918,2523],{"emptyLinePlaceholder":175},[91,22920,22921],{"class":93,"line":1822},[91,22922,2523],{"emptyLinePlaceholder":175},[91,22924,22925],{"class":93,"line":1851},[91,22926,4118],{"class":250},[91,22928,22929,22931,22933,22935,22937,22939],{"class":93,"line":1856},[91,22930,254],{"class":153},[91,22932,15692],{"class":97},[91,22934,22326],{"class":250},[91,22936,296],{"class":153},[91,22938,440],{"class":105},[91,22940,1415],{"class":250},[91,22942,22943,22945,22947],{"class":93,"line":1873},[91,22944,5487],{"class":153},[91,22946,5711],{"class":97},[91,22948,2099],{"class":250},[91,22950,22951],{"class":93,"line":1878},[91,22952,1670],{"class":250},[91,22954,22955],{"class":93,"line":1883},[91,22956,22737],{"class":308},[91,22958,22959],{"class":93,"line":1888},[91,22960,22742],{"class":308},[91,22962,22963],{"class":93,"line":1902},[91,22964,15436],{"class":250},[91,22966,22967,22969,22971],{"class":93,"line":1907},[91,22968,15989],{"class":250},[91,22970,11674],{"class":97},[91,22972,5759],{"class":250},[91,22974,22975],{"class":93,"line":2700},[91,22976,22759],{"class":308},[91,22978,22979,22981,22983,22985],{"class":93,"line":2714},[91,22980,18642],{"class":97},[91,22982,17855],{"class":250},[91,22984,11674],{"class":97},[91,22986,5759],{"class":250},[91,22988,22989],{"class":93,"line":2722},[91,22990,22991],{"class":308},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[91,22993,22994],{"class":93,"line":2727},[91,22995,1689],{"class":250},[91,22997,22998,23000,23002],{"class":93,"line":2733},[91,22999,254],{"class":153},[91,23001,2096],{"class":97},[91,23003,2099],{"class":250},[91,23005,23006],{"class":93,"line":2739},[91,23007,1670],{"class":250},[91,23009,23010,23012],{"class":93,"line":2744},[91,23011,5756],{"class":97},[91,23013,5759],{"class":250},[91,23015,23016],{"class":93,"line":8071},[91,23017,1689],{"class":250},[217,23019,23021],{"id":23020},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22121,23023,23025],{"id":23024},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[21,23027,23028],{},"在c++中，类内的成员变量和成员函数分开存储",[21,23030,23031],{},"只有非静态成员变量才属于类的对象上",[23033,23034,23036],"h5",{"id":23035},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[82,23038,23040],{"className":238,"code":23039,"language":240,"meta":26,"style":26},"#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",[88,23041,23042,23049,23059,23065,23069,23073,23077,23085,23089,23093,23116,23120,23128,23132,23138],{"__ignoreMap":26},[91,23043,23044,23046],{"class":93,"line":94},[91,23045,2073],{"class":153},[91,23047,23048],{"class":101},"\u003Ciostraem>\n",[91,23050,23051,23053,23055,23057],{"class":93,"line":38},[91,23052,2081],{"class":153},[91,23054,2084],{"class":153},[91,23056,2087],{"class":97},[91,23058,1415],{"class":250},[91,23060,23061,23063],{"class":93,"line":1304},[91,23062,14817],{"class":153},[91,23064,15294],{"class":97},[91,23066,23067],{"class":93,"line":1319},[91,23068,1670],{"class":250},[91,23070,23071],{"class":93,"line":1325},[91,23072,2523],{"emptyLinePlaceholder":175},[91,23074,23075],{"class":93,"line":1339},[91,23076,4118],{"class":250},[91,23078,23079,23081,23083],{"class":93,"line":1345},[91,23080,5487],{"class":153},[91,23082,5711],{"class":97},[91,23084,2099],{"class":250},[91,23086,23087],{"class":93,"line":1436},[91,23088,1670],{"class":250},[91,23090,23091],{"class":93,"line":1442},[91,23092,15436],{"class":250},[91,23094,23095,23097,23099,23102,23104,23107,23109,23111,23113],{"class":93,"line":1454},[91,23096,1675],{"class":250},[91,23098,1293],{"class":153},[91,23100,23101],{"class":101},"\"size of p=\"",[91,23103,1293],{"class":153},[91,23105,23106],{"class":97},"sizeoif",[91,23108,6662],{"class":250},[91,23110,1293],{"class":153},[91,23112,1363],{"class":250},[91,23114,23115],{"class":308}," \u002F\u002F查看这个空类的占用的内存空间\n",[91,23117,23118],{"class":93,"line":1736},[91,23119,1689],{"class":250},[91,23121,23122,23124,23126],{"class":93,"line":1741},[91,23123,254],{"class":153},[91,23125,2096],{"class":97},[91,23127,2099],{"class":250},[91,23129,23130],{"class":93,"line":1747},[91,23131,1670],{"class":250},[91,23133,23134,23136],{"class":93,"line":1752},[91,23135,5756],{"class":97},[91,23137,5759],{"class":250},[91,23139,23140],{"class":93,"line":1766},[91,23141,1689],{"class":250},[21,23143,23144],{},"输出结果为：size of p=1",[21,23146,23147],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[21,23149,23150],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23033,23152,23154],{"id":23153},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[82,23156,23158],{"className":238,"code":23157,"language":240,"meta":26,"style":26},"#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",[88,23159,23160,23166,23176,23184,23188,23197,23201,23209,23213,23217,23236,23240,23244,23252,23256,23262],{"__ignoreMap":26},[91,23161,23162,23164],{"class":93,"line":94},[91,23163,2073],{"class":153},[91,23165,2076],{"class":101},[91,23167,23168,23170,23172,23174],{"class":93,"line":38},[91,23169,2081],{"class":153},[91,23171,2084],{"class":153},[91,23173,2087],{"class":97},[91,23175,1415],{"class":250},[91,23177,23178,23180,23182],{"class":93,"line":1304},[91,23179,14817],{"class":153},[91,23181,15692],{"class":97},[91,23183,2797],{"class":250},[91,23185,23186],{"class":93,"line":1319},[91,23187,1670],{"class":250},[91,23189,23190,23192,23194],{"class":93,"line":1325},[91,23191,2108],{"class":153},[91,23193,15571],{"class":250},[91,23195,23196],{"class":308},"\u002F\u002F非静态成员变量\n",[91,23198,23199],{"class":93,"line":1339},[91,23200,4118],{"class":250},[91,23202,23203,23205,23207],{"class":93,"line":1345},[91,23204,5487],{"class":153},[91,23206,5711],{"class":97},[91,23208,2099],{"class":250},[91,23210,23211],{"class":93,"line":1436},[91,23212,1670],{"class":250},[91,23214,23215],{"class":93,"line":1442},[91,23216,15436],{"class":250},[91,23218,23219,23221,23223,23225,23227,23229,23231,23233],{"class":93,"line":1454},[91,23220,1675],{"class":250},[91,23222,1293],{"class":153},[91,23224,23101],{"class":101},[91,23226,1497],{"class":153},[91,23228,6662],{"class":250},[91,23230,1293],{"class":153},[91,23232,1363],{"class":250},[91,23234,23235],{"class":308}," \u002F\u002F查看不是空对象时占用多少内存\n",[91,23237,23238],{"class":93,"line":1736},[91,23239,2523],{"emptyLinePlaceholder":175},[91,23241,23242],{"class":93,"line":1741},[91,23243,1689],{"class":250},[91,23245,23246,23248,23250],{"class":93,"line":1747},[91,23247,254],{"class":153},[91,23249,2096],{"class":97},[91,23251,2099],{"class":250},[91,23253,23254],{"class":93,"line":1752},[91,23255,1670],{"class":250},[91,23257,23258,23260],{"class":93,"line":1766},[91,23259,5756],{"class":97},[91,23261,5759],{"class":250},[91,23263,23264],{"class":93,"line":1771},[91,23265,1689],{"class":250},[21,23267,23268],{},"输出结果：size of p=4",[21,23270,23271],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[14,23273,23274],{},[17,23275,23276],{},"如果加上非静态成员变量，Person类修改如下",[82,23278,23280],{"className":238,"code":23279,"language":240,"meta":26,"style":26},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[88,23281,23282,23288,23292,23298,23306,23310,23315],{"__ignoreMap":26},[91,23283,23284,23286],{"class":93,"line":94},[91,23285,14817],{"class":153},[91,23287,15294],{"class":97},[91,23289,23290],{"class":93,"line":38},[91,23291,1670],{"class":250},[91,23293,23294,23296],{"class":93,"line":1304},[91,23295,2108],{"class":153},[91,23297,21515],{"class":250},[91,23299,23300,23302,23304],{"class":93,"line":1319},[91,23301,11143],{"class":153},[91,23303,2505],{"class":153},[91,23305,21522],{"class":250},[91,23307,23308],{"class":93,"line":1325},[91,23309,4118],{"class":250},[91,23311,23312],{"class":93,"line":1339},[91,23313,23314],{"class":308},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[91,23316,23317,23319,23321,23323,23325,23327],{"class":93,"line":1345},[91,23318,254],{"class":153},[91,23320,15692],{"class":97},[91,23322,22535],{"class":250},[91,23324,296],{"class":153},[91,23326,440],{"class":105},[91,23328,1415],{"class":250},[21,23330,23331],{},"输出结果：4",[21,23333,23334],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[14,23336,23337],{"start":38},[17,23338,23339],{},"加上非静态成员函数",[82,23341,23343],{"className":238,"code":23342,"language":240,"meta":26,"style":26},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[88,23344,23345,23352,23356,23362,23370,23374,23378,23382],{"__ignoreMap":26},[91,23346,23347,23349],{"class":93,"line":94},[91,23348,14817],{"class":153},[91,23350,23351],{"class":97},"  Person\n",[91,23353,23354],{"class":93,"line":38},[91,23355,1670],{"class":250},[91,23357,23358,23360],{"class":93,"line":1304},[91,23359,2108],{"class":153},[91,23361,21515],{"class":250},[91,23363,23364,23366,23368],{"class":93,"line":1319},[91,23365,15032],{"class":153},[91,23367,11508],{"class":97},[91,23369,2099],{"class":250},[91,23371,23372],{"class":93,"line":1325},[91,23373,2153],{"class":250},[91,23375,23376],{"class":93,"line":1339},[91,23377,2523],{"emptyLinePlaceholder":175},[91,23379,23380],{"class":93,"line":1345},[91,23381,2310],{"class":250},[91,23383,23384],{"class":93,"line":1436},[91,23385,4118],{"class":250},[21,23387,23388],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[14,23390,23391],{"start":1304},[17,23392,23393],{},"加上静态成员函数",[82,23395,23397],{"className":238,"code":23396,"language":240,"meta":26,"style":26},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[88,23398,23399,23405,23409,23415,23423,23427,23431,23435,23446,23450,23454,23458],{"__ignoreMap":26},[91,23400,23401,23403],{"class":93,"line":94},[91,23402,14817],{"class":153},[91,23404,23351],{"class":97},[91,23406,23407],{"class":93,"line":38},[91,23408,1670],{"class":250},[91,23410,23411,23413],{"class":93,"line":1304},[91,23412,2108],{"class":153},[91,23414,21515],{"class":250},[91,23416,23417,23419,23421],{"class":93,"line":1319},[91,23418,15032],{"class":153},[91,23420,11508],{"class":97},[91,23422,2099],{"class":250},[91,23424,23425],{"class":93,"line":1325},[91,23426,2153],{"class":250},[91,23428,23429],{"class":93,"line":1339},[91,23430,2523],{"emptyLinePlaceholder":175},[91,23432,23433],{"class":93,"line":1345},[91,23434,2310],{"class":250},[91,23436,23437,23439,23441,23444],{"class":93,"line":1436},[91,23438,11143],{"class":153},[91,23440,22690],{"class":153},[91,23442,23443],{"class":97}," func1",[91,23445,2099],{"class":250},[91,23447,23448],{"class":93,"line":1442},[91,23449,2153],{"class":250},[91,23451,23452],{"class":93,"line":1454},[91,23453,2523],{"emptyLinePlaceholder":175},[91,23455,23456],{"class":93,"line":1736},[91,23457,2310],{"class":250},[91,23459,23460],{"class":93,"line":1741},[91,23461,4118],{"class":250},[21,23463,23331],{},[21,23465,23466],{},"解释：静态成员函数也不属于类上",[168,23468,7797],{},{"title":26,"searchDepth":38,"depth":38,"links":23470},[23471,23477],{"id":14768,"depth":38,"text":14769,"children":23472},[23473,23474,23475,23476],{"id":14772,"depth":1304,"text":14773},{"id":15497,"depth":1304,"text":15498},{"id":15669,"depth":1304,"text":15670},{"id":16128,"depth":1304,"text":16129},{"id":18500,"depth":38,"text":18501,"children":23478},[23479,23480,23481,23482,23483,23484,23485,23486,23487],{"id":18512,"depth":1304,"text":18513},{"id":18805,"depth":1304,"text":18806},{"id":19296,"depth":1304,"text":19297},{"id":20393,"depth":1304,"text":20394},{"id":20816,"depth":1304,"text":20817},{"id":21295,"depth":1304,"text":21296},{"id":21670,"depth":1304,"text":21671},{"id":22083,"depth":1304,"text":22084},{"id":23020,"depth":1304,"text":23021},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14733,"description":23488},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23495,"title":240,"body":23496,"description":23500,"extension":173,"meta":23501,"navigation":175,"path":23503,"seo":23504,"stem":23505,"__hash__":23506},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23497,"toc":23498},[],{"title":26,"searchDepth":38,"depth":38,"links":23499},[],null,{"category":23502},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":240,"description":23500},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23508,"title":23509,"body":23510,"description":26,"extension":173,"meta":24099,"navigation":175,"path":24100,"seo":24101,"stem":24102,"__hash__":24103},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23511,"toc":24081},[23512,23515,23519,23522,23525,23528,23546,23551,23554,23557,23560,23563,23568,23571,23576,23579,23582,23586,23589,23592,23598,23601,23619,23623,23627,23630,23635,23638,23642,23645,23658,23661,23665,23668,23671,23674,23699,23702,23711,23722,23737,23769,23773,23780,23788,23792,23795,23798,23803,23807,23810,23813,23818,23821,23825,23828,23831,23836,23839,23843,23848,23852,23919,23923,23926,23929,23932,23935,23938,23944,23963,23966,23980,23989,23993,23996,23999,24004,24007,24012,24017,24020,24023,24028,24033,24036,24041,24046,24049,24054,24059,24062,24065,24070,24073,24078],[10,23513,23509],{"id":23514},"_1强化学习基本认识",[190,23516,23518],{"id":23517},"_11什么是强化学习","1.1.什么是强化学习",[21,23520,23521],{},"强化学习有两部分组成：智能体和环境；",[21,23523,23524],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[21,23526,23527],{},"强化学习与监督学习的区别:",[14,23529,23530,23533,23536,23539],{},[17,23531,23532],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[17,23534,23535],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[17,23537,23538],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[17,23540,23541,23542,23545],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[398,23543,23544],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[21,23547,23548],{},[24,23549],{"alt":26,"src":23550},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[21,23552,23553],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[21,23555,23556],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[21,23558,23559],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[21,23561,23562],{},"获取奖励",[21,23564,23565],{},[24,23566],{"alt":26,"src":23567},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[21,23569,23570],{},"强化学习可以分成标准强化学习和深度强化学习",[21,23572,23573],{},[24,23574],{"alt":26,"src":23575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[21,23577,23578],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[21,23580,23581],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[190,23583,23585],{"id":23584},"_12强化学习应用场景","1.2.强化学习应用场景",[21,23587,23588],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[21,23590,23591],{},"具身智能中的应用",[21,23593,23594,23597],{},[398,23595,23596],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[21,23599,23600],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[21,23602,23603,23604,23607,23608,23611,23612,23615,23616],{},"机器人是",[398,23605,23606],{},"躯体","，深度学习是",[398,23609,23610],{},"神经元****网络","，VLA是",[398,23613,23614],{},"通用的行为逻辑","，而强化学习是",[398,23617,23618],{},"教练",[190,23620,23622],{"id":23621},"_13序列决策","1.3.序列决策",[217,23624,23626],{"id":23625},"_131智能体与环境","1.3.1.智能体与环境",[21,23628,23629],{},"强化学习研究的问题是智能体agent与环境交互的问题",[21,23631,23632],{},[24,23633],{"alt":26,"src":23634},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[21,23636,23637],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[217,23639,23641],{"id":23640},"_132奖励","1.3.2.奖励",[21,23643,23644],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[21,23646,23647,23648,23657],{},"取某个策略的表现如何。强化学习的目的就是",[398,23649,23650,23651,23656],{},"最大化",[398,23652,23653],{},[398,23654,23655],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[21,23659,23660],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[217,23662,23664],{"id":23663},"_133序列决策","1.3.3.序列决策",[21,23666,23667],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[21,23669,23670],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[21,23672,23673],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[21,23675,23676,23680,23681,23683,23684,23686,23687,23689,23690,13918,23693,13918,23696],{},[23677,23678,23679],"em",{},"Ht"," = ",[23677,23682,845],{},"1*, a",[23677,23685,466],{},", r",[23677,23688,466],{},", . . . ,* ",[23677,23691,23692],{},"ot",[23677,23694,23695],{},", at ,",[23677,23697,23698],{},"rt",[21,23700,23701],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[21,23703,23704,23680,23707,1782,23709,678],{},[23677,23705,23706],{},"st",[23677,23708,302],{},[23677,23710,23679],{},[21,23712,23713,23714,23717,23718,23721],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[398,23715,23716],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[398,23719,23720],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[21,23723,23724,23725,23728,23729,23732,23733,23736],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[398,23726,23727],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[398,23730,23731],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23677,23734,23735],{},"S, A, T, R, Ω, O, γ",")。",[21,23738,23739,23740,23742,23743,23745,23746,251,23748,23751,23752,23754,23755,251,23758,23761,23762,23764,23765,23768],{},"其中 ",[23677,23741,938],{}," 表示状态空间，为隐变量，",[23677,23744,481],{}," 为动作空间，",[23677,23747,963],{},[23677,23749,23750],{},"s ′ |s, a",") 为状态转移概率，",[23677,23753,913],{}," 为奖励函数，",[23677,23756,23757],{},"Ω",[23677,23759,23760],{},"o|s, a",") 为观测概率，",[23677,23763,839],{}," 为观测空间，",[23677,23766,23767],{},"γ"," 为折扣因子。",[190,23770,23772],{"id":23771},"_14动作空间","1.4.动作空间",[21,23774,23775,23776,23779],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[398,23777,23778],{},"动作空间"," ，动作空间分为:",[14,23781,23782,23785],{},[17,23783,23784],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[17,23786,23787],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[190,23789,23791],{"id":23790},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[21,23793,23794],{},"由策略、价值函数、模型三部分组成",[21,23796,23797],{},"这三者组成马尔可夫决策过程",[21,23799,23800],{},[24,23801],{"alt":26,"src":23802},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[217,23804,23806],{"id":23805},"_151策略","1.5.1.策略",[21,23808,23809],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[21,23811,23812],{},"策略可分为两种：",[21,23814,23815],{},[24,23816],{"alt":26,"src":23817},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[21,23819,23820],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[217,23822,23824],{"id":23823},"_152价值函数","1.5.2.价值函数",[21,23826,23827],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[21,23829,23830],{},"价值函数中有一个折扣因子，类似于存款利息",[21,23832,23833],{},[24,23834],{"alt":26,"src":23835},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[21,23837,23838],{},"进入某个状态采取的最优动作可以通过Q函数得到",[217,23840,23842],{"id":23841},"_153模型","1.5.3.模型",[21,23844,23845],{},[24,23846],{"alt":26,"src":23847},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[190,23849,23851],{"id":23850},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[386,23853,23854,23865],{},[389,23855,23856],{},[392,23857,23858,23862],{},[395,23859,23861],{"align":23860},"left","类型",[395,23863,23864],{"align":23860},"特点",[433,23866,23867,23877,23887,23897,23909],{},[392,23868,23869,23874],{},[438,23870,23871],{"align":23860},[398,23872,23873],{},"基于价值的智能体",[438,23875,23876],{"align":23860},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[392,23878,23879,23884],{},[438,23880,23881],{"align":23860},[398,23882,23883],{},"基于策略的智能体",[438,23885,23886],{"align":23860},"直接学习策略，没有学习价值函数",[392,23888,23889,23894],{},[438,23890,23891],{"align":23860},[398,23892,23893],{},"演员-评论员智能体",[438,23895,23896],{"align":23860},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[392,23898,23899,23904],{},[438,23900,23901],{"align":23860},[398,23902,23903],{},"有模型强化学习智能体",[438,23905,23906],{"align":23860},[24,23907],{"alt":26,"src":23908},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[392,23910,23911,23916],{},[438,23912,23913],{"align":23860},[398,23914,23915],{},"免模型强化学习智能体",[438,23917,23918],{"align":23860},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[190,23920,23922],{"id":23921},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[21,23924,23925],{},"学习和规划是序列决策的两个基本问题",[21,23927,23928],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[21,23930,23931],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[21,23933,23934],{},"强化学习用到的库：Gym",[21,23936,23937],{},"Gym可以检验强化学习算法的优劣",[21,23939,23940,23943],{},[398,23941,23942],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[82,23945,23947],{"className":84,"code":23946,"language":86,"meta":26,"style":26},"pip install gym==0.25.2\n",[88,23948,23949],{"__ignoreMap":26},[91,23950,23951,23954,23957,23960],{"class":93,"line":94},[91,23952,23953],{"class":97},"pip",[91,23955,23956],{"class":101}," install",[91,23958,23959],{"class":101}," gym==",[91,23961,23962],{"class":105},"0.25.2\n",[21,23964,23965],{},"显示图形界面需要",[82,23967,23969],{"className":84,"code":23968,"language":86,"meta":26,"style":26},"pip install pygame\n",[88,23970,23971],{"__ignoreMap":26},[91,23972,23973,23975,23977],{"class":93,"line":94},[91,23974,23953],{"class":97},[91,23976,23956],{"class":101},[91,23978,23979],{"class":101}," pygame\n",[21,23981,23982,23983],{},"有关Gym库的相关文档介绍：",[487,23984,23988],{"href":23985,"rel":23986},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23987],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[190,23990,23992],{"id":23991},"_18一些补充基础概念","1.8.一些补充基础概念",[21,23994,23995],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[21,23997,23998],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[21,24000,24001],{},[24,24002],{"alt":26,"src":24003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[21,24005,24006],{},"折扣率需要自己来设定",[21,24008,24009],{},[24,24010],{"alt":26,"src":24011},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[14,24013,24014],{},[17,24015,24016],{},"状态转移函数：",[21,24018,24019],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[21,24021,24022],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[21,24024,24025],{},[24,24026],{"alt":26,"src":24027},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[14,24029,24030],{"start":38},[17,24031,24032],{},"动作价值函数：",[21,24034,24035],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[21,24037,24038],{},[24,24039],{"alt":26,"src":24040},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[14,24042,24043],{"start":1304},[17,24044,24045],{},"最优动作价值函数：",[21,24047,24048],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[21,24050,24051],{},[24,24052],{"alt":26,"src":24053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[14,24055,24056],{"start":1319},[17,24057,24058],{},"状态价值函数:",[21,24060,24061],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[21,24063,24064],{},"它衡量的是“一个具体动作”的长期价值",[21,24066,24067],{},[24,24068],{"alt":26,"src":24069},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[21,24071,24072],{},"几个价值函数之间的比较：",[21,24074,24075],{},[24,24076],{"alt":26,"src":24077},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[168,24079,24080],{},"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":26,"searchDepth":38,"depth":38,"links":24082},[24083,24084,24085,24090,24091,24096,24097,24098],{"id":23517,"depth":38,"text":23518},{"id":23584,"depth":38,"text":23585},{"id":23621,"depth":38,"text":23622,"children":24086},[24087,24088,24089],{"id":23625,"depth":1304,"text":23626},{"id":23640,"depth":1304,"text":23641},{"id":23663,"depth":1304,"text":23664},{"id":23771,"depth":38,"text":23772},{"id":23790,"depth":38,"text":23791,"children":24092},[24093,24094,24095],{"id":23805,"depth":1304,"text":23806},{"id":23823,"depth":1304,"text":23824},{"id":23841,"depth":1304,"text":23842},{"id":23850,"depth":38,"text":23851},{"id":23921,"depth":38,"text":23922},{"id":23991,"depth":38,"text":23992},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23509,"description":26},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24105,"title":24106,"body":24107,"description":24114,"extension":173,"meta":24125,"navigation":175,"path":24126,"seo":24127,"stem":24128,"__hash__":24129},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24108,"toc":24123},[24109,24112,24115,24120],[10,24110,24106],{"id":24111},"_2马尔可夫决策过程",[21,24113,24114],{},"这是强化学习的基本框架",[21,24116,24117],{},[24,24118],{"alt":26,"src":24119},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[21,24121,24122],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":26,"searchDepth":38,"depth":38,"links":24124},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24106,"description":24114},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24131,"title":24132,"body":24133,"description":26,"extension":173,"meta":24249,"navigation":175,"path":24250,"seo":24251,"stem":24252,"__hash__":24253},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24134,"toc":24244},[24135,24138,24142,24145,24150,24155,24158,24163,24166,24171,24174,24178,24183,24186,24191,24196,24201,24204,24208,24213,24216,24221,24226,24231,24236,24239],[10,24136,24132],{"id":24137},"_3动作价值函数",[190,24139,24141],{"id":24140},"_31dqn","3.1.DQN",[21,24143,24144],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[21,24146,24147],{},[24,24148],{"alt":26,"src":24149},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[21,24151,24152],{},[24,24153],{"alt":26,"src":24154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[21,24156,24157],{},"DQN算法的描述：",[21,24159,24160],{},[24,24161],{"alt":26,"src":24162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[21,24164,24165],{},"这里的Dense指的是全连接层",[21,24167,24168],{},[24,24169],{"alt":26,"src":24170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[21,24172,24173],{},"当前观测的状态为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算法",[190,24175,24177],{"id":24176},"_32dqn的举例","3.2.DQN的举例",[21,24179,24180],{},[24,24181],{"alt":26,"src":24182},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[21,24184,24185],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[21,24187,24188],{},[24,24189],{"alt":26,"src":24190},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[21,24192,24193],{},[24,24194],{"alt":26,"src":24195},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[21,24197,24198],{},[24,24199],{"alt":26,"src":24200},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[21,24202,24203],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[190,24205,24207],{"id":24206},"_33td算法","3.3.TD算法",[21,24209,24210],{},[24,24211],{"alt":26,"src":24212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[21,24214,24215],{},"强化学习TD算法公式的粗略解释：",[21,24217,24218],{},[24,24219],{"alt":26,"src":24220},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[21,24222,24223],{},[24,24224],{"alt":26,"src":24225},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[21,24227,24228],{},[24,24229],{"alt":26,"src":24230},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[21,24232,24233],{},[24,24234],{"alt":26,"src":24235},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[21,24237,24238],{},"TD算法总结：",[21,24240,24241],{},[24,24242],{"alt":26,"src":24243},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":26,"searchDepth":38,"depth":38,"links":24245},[24246,24247,24248],{"id":24140,"depth":38,"text":24141},{"id":24176,"depth":38,"text":24177},{"id":24206,"depth":38,"text":24207},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24132,"description":26},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24255,"title":24256,"body":24257,"description":26,"extension":173,"meta":24490,"navigation":175,"path":24491,"seo":24492,"stem":24493,"__hash__":24494},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24258,"toc":24486},[24259,24262,24266,24269,24272,24277,24282,24285,24290,24295,24298,24303,24306,24311,24314,24319,24322,24327,24330,24335,24340,24343,24348,24351,24354,24359,24362,24367,24372,24376,24379,24382,24387,24392,24395,24400,24405,24408,24413,24416,24419,24424,24427,24432,24435,24440,24445,24448,24453,24458,24461,24466,24469,24474,24477],[10,24260,24256],{"id":24261},"_4策略学习",[190,24263,24265],{"id":24264},"_41概念描述","4.1.概念描述",[21,24267,24268],{},"用神经网络（策略网络）近似策略函数",[21,24270,24271],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[21,24273,24274],{},[24,24275],{"alt":26,"src":24276},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[21,24278,24279],{},[24,24280],{"alt":26,"src":24281},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[21,24283,24284],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[21,24286,24287],{},[24,24288],{"alt":26,"src":24289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[21,24291,24292],{},[24,24293],{"alt":26,"src":24294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[21,24296,24297],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[21,24299,24300],{},[24,24301],{"alt":26,"src":24302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[21,24304,24305],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[21,24307,24308],{},[24,24309],{"alt":26,"src":24310},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[21,24312,24313],{},"改进theta要用到策略梯度算法",[21,24315,24316],{},[24,24317],{"alt":26,"src":24318},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[21,24320,24321],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[21,24323,24324],{},[24,24325],{"alt":26,"src":24326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[21,24328,24329],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[21,24331,24332],{},[24,24333],{"alt":26,"src":24334},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[21,24336,24337],{},[24,24338],{"alt":26,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[21,24341,24342],{},"梯度公式总结：",[21,24344,24345],{},[24,24346],{"alt":26,"src":24347},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[21,24349,24350],{},"两个公式的分别应用场景：",[21,24352,24353],{},"对于离散的动作：",[21,24355,24356],{},[24,24357],{"alt":26,"src":24358},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[21,24360,24361],{},"对于连续的动作：",[21,24363,24364],{},[24,24365],{"alt":26,"src":24366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[21,24368,24369],{},[24,24370],{"alt":26,"src":24371},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[190,24373,24375],{"id":24374},"_42概率梯度算法总结","4.2.概率梯度算法总结",[21,24377,24378],{},"使用蒙特卡洛来近似计算策略梯度",[21,24380,24381],{},"蒙特卡洛法的解释如下：",[21,24383,24384],{},[24,24385],{"alt":26,"src":24386},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[21,24388,24389],{},[24,24390],{"alt":26,"src":24391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[21,24393,24394],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[14,24396,24397],{},[17,24398,24399],{},"方法一：reinforce算法",[21,24401,24402],{},[24,24403],{"alt":26,"src":24404},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[21,24406,24407],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[14,24409,24410],{"start":38},[17,24411,24412],{},"方法二：actor-critic算法",[21,24414,24415],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[21,24417,24418],{},"两个网络的构建：",[21,24420,24421],{},[24,24422],{"alt":26,"src":24423},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[21,24425,24426],{},"actor网路：",[21,24428,24429],{},[24,24430],{"alt":26,"src":24431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[21,24433,24434],{},"critic网络",[21,24436,24437],{},[24,24438],{"alt":26,"src":24439},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[14,24441,24442],{"start":1304},[17,24443,24444],{},"网络的训练",[21,24446,24447],{},"网络描述",[21,24449,24450],{},[24,24451],{"alt":26,"src":24452},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[21,24454,24455],{},[24,24456],{"alt":26,"src":24457},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[21,24459,24460],{},"TD算法更新梯度：",[21,24462,24463],{},[24,24464],{"alt":26,"src":24465},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[21,24467,24468],{},"策略网络更新梯度：",[21,24470,24471],{},[24,24472],{"alt":26,"src":24473},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[21,24475,24476],{},"训练整个流程的具体描述：",[21,24478,24479,24482,24483],{},[24,24480],{"alt":26,"src":24481},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[24,24484],{"alt":26,"src":24485},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":26,"searchDepth":38,"depth":38,"links":24487},[24488,24489],{"id":24264,"depth":38,"text":24265},{"id":24374,"depth":38,"text":24375},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24256,"description":26},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24496,"title":24497,"body":24498,"description":24505,"extension":173,"meta":24555,"navigation":175,"path":24556,"seo":24557,"stem":24558,"__hash__":24559},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24499,"toc":24551},[24500,24503,24506,24510,24513,24518,24522,24525,24530,24533,24538,24543,24546],[10,24501,24497],{"id":24502},"_5alphago算法",[21,24504,24505],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[190,24507,24509],{"id":24508},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[21,24511,24512],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[21,24514,24515],{},[24,24516],{"alt":26,"src":24517},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[190,24519,24521],{"id":24520},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[21,24523,24524],{},"采用强化学习的方式训练策略网络",[21,24526,24527],{},[24,24528],{"alt":26,"src":24529},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[21,24531,24532],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[21,24534,24535],{},[24,24536],{"alt":26,"src":24537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[21,24539,24540],{},[24,24541],{"alt":26,"src":24542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[21,24544,24545],{},"强化学习训练策略网络的总结：",[21,24547,24548],{},[24,24549],{"alt":26,"src":24550},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":26,"searchDepth":38,"depth":38,"links":24552},[24553,24554],{"id":24508,"depth":38,"text":24509},{"id":24520,"depth":38,"text":24521},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24497,"description":24505},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24561,"title":24562,"body":24563,"description":24570,"extension":173,"meta":24573,"navigation":175,"path":24574,"seo":24575,"stem":24576,"__hash__":24577},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24564,"toc":24571},[24565,24568],[10,24566,24562],{"id":24567},"_6价值网络",[21,24569,24570],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":26,"searchDepth":38,"depth":38,"links":24572},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24562,"description":24570},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24579,"title":24580,"body":24581,"description":24585,"extension":173,"meta":24586,"navigation":175,"path":24587,"seo":24588,"stem":24589,"__hash__":24590},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24582,"toc":24583},[],{"title":26,"searchDepth":38,"depth":38,"links":24584},[],"记录自己的强化学习笔记。",{"category":23502},"\u002Fwiki\u002F2025-12-04",{"title":24580,"description":24585},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24592,"title":24593,"body":24594,"description":23500,"extension":173,"meta":24633,"navigation":175,"path":24634,"seo":24635,"stem":24636,"__hash__":24637},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24595,"toc":24631},[24596,24599,24602,24608,24611,24617,24620,24625,24628],[10,24597,24593],{"id":24598},"_1-项目概览与官方资源",[21,24600,24601],{},"官方文档：",[21,24603,24604],{},[487,24605,24606],{"href":24606,"rel":24607},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23987],[21,24609,24610],{},"官方代码仓库：",[21,24612,24613],{},[487,24614,24615],{"href":24615,"rel":24616},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23987],[21,24618,24619],{},"复现大体流程：",[21,24621,24622],{},[24,24623],{"alt":26,"src":24624},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[21,24626,24627],{},"本教程的目标是打通这条链路：",[21,24629,24630],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":26,"searchDepth":38,"depth":38,"links":24632},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24593,"description":23500},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24639,"title":24640,"body":24641,"description":23500,"extension":173,"meta":24757,"navigation":175,"path":24758,"seo":24759,"stem":24760,"__hash__":24761},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24642,"toc":24752},[24643,24646,24650,24653,24660,24664,24667,24676,24686,24690,24720,24723,24749],[10,24644,24640],{"id":24645},"_2-环境准备与设备连接",[190,24647,24649],{"id":24648},"_21-系统与环境","2.1 系统与环境",[21,24651,24652],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[21,24654,24655,24656,24659],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[88,24657,24658],{},"lerobot"," 依赖。",[190,24661,24663],{"id":24662},"_22-机械臂串口识别","2.2 机械臂串口识别",[21,24665,24666],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[82,24668,24670],{"className":84,"code":24669,"language":86,"meta":26,"style":26},"lerobot-find-out\n",[88,24671,24672],{"__ignoreMap":26},[91,24673,24674],{"class":93,"line":94},[91,24675,24669],{"class":97},[21,24677,24678,24679,461,24682,24685],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[88,24680,24681],{},"\u002Fdev\u002FttyACM0",[88,24683,24684],{},"\u002Fdev\u002FttyACM1","）。",[190,24687,24689],{"id":24688},"_23-串口授权","2.3 串口授权",[82,24691,24693],{"className":84,"code":24692,"language":86,"meta":26,"style":26},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[88,24694,24695,24709],{"__ignoreMap":26},[91,24696,24697,24700,24703,24706],{"class":93,"line":94},[91,24698,24699],{"class":97},"sudo",[91,24701,24702],{"class":101}," chmod",[91,24704,24705],{"class":105}," 666",[91,24707,24708],{"class":101}," \u002Fdev\u002FttyACM0\n",[91,24710,24711,24713,24715,24717],{"class":93,"line":38},[91,24712,24699],{"class":97},[91,24714,24702],{"class":101},[91,24716,24705],{"class":105},[91,24718,24719],{"class":101}," \u002Fdev\u002FttyACM1\n",[21,24721,24722],{},"说明：",[1256,24724,24725,24730,24736,24746],{},[17,24726,24727,24729],{},[88,24728,24699],{},"：以 root 权限执行命令。",[17,24731,24732,24735],{},[88,24733,24734],{},"chmod","：修改设备节点权限。",[17,24737,24738,24741,24742,24745],{},[88,24739,24740],{},"666","：",[88,24743,24744],{},"rw-rw-rw-","，所有用户可读写。",[17,24747,24748],{},"串口号必须替换为你机器上的真实端口。",[168,24750,24751],{},"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":26,"searchDepth":38,"depth":38,"links":24753},[24754,24755,24756],{"id":24648,"depth":38,"text":24649},{"id":24662,"depth":38,"text":24663},{"id":24688,"depth":38,"text":24689},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24640,"description":23500},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24763,"title":24764,"body":24765,"description":23500,"extension":173,"meta":24926,"navigation":175,"path":24927,"seo":24928,"stem":24929,"__hash__":24930},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24766,"toc":24922},[24767,24771,24775,24781,24784,24841,24844,24848,24851,24919],[10,24768,24770],{"id":24769},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[190,24772,24774],{"id":24773},"_31-配置电机-id","3.1 配置电机 ID",[21,24776,24777,24778,24780],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[88,24779,466],{},"，需要改成机械臂链路里不冲突的编号。",[21,24782,24783],{},"方式一：用 LeRobot 命令逐步写入。",[82,24785,24787],{"className":84,"code":24786,"language":86,"meta":26,"style":26},"# 主臂舵机配置 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",[88,24788,24789,24794,24802,24809,24814,24818,24823,24829,24836],{"__ignoreMap":26},[91,24790,24791],{"class":93,"line":94},[91,24792,24793],{"class":308},"# 主臂舵机配置 ID\n",[91,24795,24796,24799],{"class":93,"line":38},[91,24797,24798],{"class":97},"lerobot-setup-motors",[91,24800,24801],{"class":105}," \\\n",[91,24803,24804,24807],{"class":93,"line":1304},[91,24805,24806],{"class":105},"  --teleop.type=so101_leader",[91,24808,24801],{"class":105},[91,24810,24811],{"class":93,"line":1319},[91,24812,24813],{"class":105},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[91,24815,24816],{"class":93,"line":1325},[91,24817,2523],{"emptyLinePlaceholder":175},[91,24819,24820],{"class":93,"line":1339},[91,24821,24822],{"class":308},"# 从臂舵机配置 ID\n",[91,24824,24825,24827],{"class":93,"line":1345},[91,24826,24798],{"class":97},[91,24828,24801],{"class":105},[91,24830,24831,24834],{"class":93,"line":1436},[91,24832,24833],{"class":105},"  --robot.type=so101_follower",[91,24835,24801],{"class":105},[91,24837,24838],{"class":93,"line":1442},[91,24839,24840],{"class":105},"  --robot.port=\u002Fdev\u002FttyACM1\n",[21,24842,24843],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[190,24845,24847],{"id":24846},"_32-机械臂校准","3.2 机械臂校准",[21,24849,24850],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[82,24852,24854],{"className":84,"code":24853,"language":86,"meta":26,"style":26},"# 主臂校准\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",[88,24855,24856,24861,24868,24874,24881,24886,24890,24895,24901,24907,24914],{"__ignoreMap":26},[91,24857,24858],{"class":93,"line":94},[91,24859,24860],{"class":308},"# 主臂校准\n",[91,24862,24863,24866],{"class":93,"line":38},[91,24864,24865],{"class":97},"lerobot-calibrate",[91,24867,24801],{"class":105},[91,24869,24870,24872],{"class":93,"line":1304},[91,24871,24806],{"class":105},[91,24873,24801],{"class":105},[91,24875,24876,24879],{"class":93,"line":1319},[91,24877,24878],{"class":105},"  --teleop.port=\u002Fdev\u002FttyACM0",[91,24880,24801],{"class":105},[91,24882,24883],{"class":93,"line":1325},[91,24884,24885],{"class":105},"  --teleop.id=my_awesome_leader_arm\n",[91,24887,24888],{"class":93,"line":1339},[91,24889,2523],{"emptyLinePlaceholder":175},[91,24891,24892],{"class":93,"line":1345},[91,24893,24894],{"class":308},"# 从臂校准\n",[91,24896,24897,24899],{"class":93,"line":1436},[91,24898,24865],{"class":97},[91,24900,24801],{"class":105},[91,24902,24903,24905],{"class":93,"line":1442},[91,24904,24833],{"class":105},[91,24906,24801],{"class":105},[91,24908,24909,24912],{"class":93,"line":1454},[91,24910,24911],{"class":105},"  --robot.port=\u002Fdev\u002FttyACM1",[91,24913,24801],{"class":105},[91,24915,24916],{"class":93,"line":1736},[91,24917,24918],{"class":105},"  --robot.id=my_awesome_follower_arm\n",[168,24920,24921],{},"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":26,"searchDepth":38,"depth":38,"links":24923},[24924,24925],{"id":24773,"depth":38,"text":24774},{"id":24846,"depth":38,"text":24847},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24764,"description":23500},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24932,"title":24933,"body":24934,"description":23500,"extension":173,"meta":25125,"navigation":175,"path":25126,"seo":25127,"stem":25128,"__hash__":25129},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24935,"toc":25121},[24936,24939,24943,24990,24994,25007,25070,25073,25118],[10,24937,24933],{"id":24938},"_4-遥操与相机接入",[190,24940,24942],{"id":24941},"_41-不带相机遥操","4.1 不带相机遥操",[82,24944,24946],{"className":84,"code":24945,"language":86,"meta":26,"style":26},"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",[88,24947,24948,24955,24961,24967,24974,24980,24986],{"__ignoreMap":26},[91,24949,24950,24953],{"class":93,"line":94},[91,24951,24952],{"class":97},"lerobot-teleoperate",[91,24954,24801],{"class":105},[91,24956,24957,24959],{"class":93,"line":38},[91,24958,24833],{"class":105},[91,24960,24801],{"class":105},[91,24962,24963,24965],{"class":93,"line":1304},[91,24964,24911],{"class":105},[91,24966,24801],{"class":105},[91,24968,24969,24972],{"class":93,"line":1319},[91,24970,24971],{"class":105},"  --robot.id=my_awesome_follower_arm",[91,24973,24801],{"class":105},[91,24975,24976,24978],{"class":93,"line":1325},[91,24977,24806],{"class":105},[91,24979,24801],{"class":105},[91,24981,24982,24984],{"class":93,"line":1339},[91,24983,24878],{"class":105},[91,24985,24801],{"class":105},[91,24987,24988],{"class":93,"line":1345},[91,24989,24885],{"class":105},[190,24991,24993],{"id":24992},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[82,24995,24997],{"className":84,"code":24996,"language":86,"meta":26,"style":26},"lerobot-find-cameras opencv\n",[88,24998,24999],{"__ignoreMap":26},[91,25000,25001,25004],{"class":93,"line":94},[91,25002,25003],{"class":97},"lerobot-find-cameras",[91,25005,25006],{"class":101}," opencv\n",[82,25008,25010],{"className":84,"code":25009,"language":86,"meta":26,"style":26},"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",[88,25011,25012,25018,25024,25030,25036,25046,25052,25058,25065],{"__ignoreMap":26},[91,25013,25014,25016],{"class":93,"line":94},[91,25015,24952],{"class":97},[91,25017,24801],{"class":105},[91,25019,25020,25022],{"class":93,"line":38},[91,25021,24833],{"class":105},[91,25023,24801],{"class":105},[91,25025,25026,25028],{"class":93,"line":1304},[91,25027,24911],{"class":105},[91,25029,24801],{"class":105},[91,25031,25032,25034],{"class":93,"line":1319},[91,25033,24971],{"class":105},[91,25035,24801],{"class":105},[91,25037,25038,25041,25044],{"class":93,"line":1325},[91,25039,25040],{"class":105},"  --robot.cameras=",[91,25042,25043],{"class":101},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[91,25045,24801],{"class":105},[91,25047,25048,25050],{"class":93,"line":1339},[91,25049,24806],{"class":105},[91,25051,24801],{"class":105},[91,25053,25054,25056],{"class":93,"line":1345},[91,25055,24878],{"class":105},[91,25057,24801],{"class":105},[91,25059,25060,25063],{"class":93,"line":1436},[91,25061,25062],{"class":105},"  --teleop.id=my_awesome_leader_arm",[91,25064,24801],{"class":105},[91,25066,25067],{"class":93,"line":1442},[91,25068,25069],{"class":105},"  --display_data=true\n",[21,25071,25072],{},"相机参数说明：",[1256,25074,25075,25081,25087,25096,25106,25112],{},[17,25076,25077,25080],{},[88,25078,25079],{},"front","：相机名称。",[17,25082,25083,25086],{},[88,25084,25085],{},"type: opencv","：相机驱动类型。",[17,25088,25089,25092,25093,24685],{},[88,25090,25091],{},"index_or_path","：设备编号或设备路径（如 ",[88,25094,25095],{},"\u002Fdev\u002Fvideo4",[17,25097,25098,25101,25102,25105],{},[88,25099,25100],{},"width"," \u002F ",[88,25103,25104],{},"height","：图像分辨率。",[17,25107,25108,25111],{},[88,25109,25110],{},"fps","：采样帧率。",[17,25113,25114,25117],{},[88,25115,25116],{},"--display_data=true","：启用实时可视化。",[168,25119,25120],{},"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":26,"searchDepth":38,"depth":38,"links":25122},[25123,25124],{"id":24941,"depth":38,"text":24942},{"id":24992,"depth":38,"text":24993},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24933,"description":23500},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25131,"title":25132,"body":25133,"description":23500,"extension":173,"meta":25304,"navigation":175,"path":25305,"seo":25306,"stem":25307,"__hash__":25308},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25134,"toc":25299},[25135,25139,25143,25148,25153,25156,25198,25204,25208,25256,25261,25265,25268,25276,25281,25286,25291,25296],[10,25136,25138],{"id":25137},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[190,25140,25142],{"id":25141},"_51-生成访问令牌","5.1 生成访问令牌",[21,25144,25145],{},[24,25146],{"alt":26,"src":25147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[21,25149,25150],{},[24,25151],{"alt":26,"src":25152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[21,25154,25155],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[82,25157,25159],{"className":84,"code":25158,"language":86,"meta":26,"style":26},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[88,25160,25161,25174],{"__ignoreMap":26},[91,25162,25163,25166,25169,25171],{"class":93,"line":94},[91,25164,25165],{"class":153},"export",[91,25167,25168],{"class":250}," HF_TOKEN",[91,25170,296],{"class":153},[91,25172,25173],{"class":101},"\"your_huggingface_token\"\n",[91,25175,25176,25179,25182,25185,25188,25190,25193,25195],{"class":93,"line":38},[91,25177,25178],{"class":97},"hf",[91,25180,25181],{"class":101}," auth",[91,25183,25184],{"class":101}," login",[91,25186,25187],{"class":105}," --token",[91,25189,9847],{"class":101},[91,25191,25192],{"class":250},"$HF_TOKEN",[91,25194,500],{"class":101},[91,25196,25197],{"class":105}," --add-to-git-credential\n",[21,25199,25200,25203],{},[88,25201,25202],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[190,25205,25207],{"id":25206},"_52-验证登录","5.2 验证登录",[82,25209,25211],{"className":84,"code":25210,"language":86,"meta":26,"style":26},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[88,25212,25213,25243],{"__ignoreMap":26},[91,25214,25215,25218,25220,25223,25225,25227,25230,25232,25235,25238,25241],{"class":93,"line":94},[91,25216,25217],{"class":250},"HF_USER",[91,25219,296],{"class":153},[91,25221,25222],{"class":250},"$(",[91,25224,25178],{"class":97},[91,25226,25181],{"class":101},[91,25228,25229],{"class":101}," whoami",[91,25231,154],{"class":153},[91,25233,25234],{"class":97}," head",[91,25236,25237],{"class":105}," -n",[91,25239,25240],{"class":105}," 1",[91,25242,257],{"class":250},[91,25244,25245,25248,25250,25253],{"class":93,"line":38},[91,25246,25247],{"class":105},"echo",[91,25249,9847],{"class":101},[91,25251,25252],{"class":250},"$HF_USER",[91,25254,25255],{"class":101},"\"\n",[21,25257,25258],{},[24,25259],{"alt":26,"src":25260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[190,25262,25264],{"id":25263},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[21,25266,25267],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1256,25269,25270,25273],{},[17,25271,25272],{},"Dataset Repo（用于上传演示数据）",[17,25274,25275],{},"Model Repo（用于上传训练后的 ACT 权重）",[21,25277,25278],{},[24,25279],{"alt":26,"src":25280},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[21,25282,25283],{},[24,25284],{"alt":26,"src":25285},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[21,25287,25288],{},[24,25289],{"alt":26,"src":25290},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[21,25292,25293],{},[24,25294],{"alt":26,"src":25295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[168,25297,25298],{},"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":26,"searchDepth":38,"depth":38,"links":25300},[25301,25302,25303],{"id":25141,"depth":38,"text":25142},{"id":25206,"depth":38,"text":25207},{"id":25263,"depth":38,"text":25264},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25132,"description":23500},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25310,"title":25311,"body":25312,"description":23500,"extension":173,"meta":25509,"navigation":175,"path":25510,"seo":25511,"stem":25512,"__hash__":25513},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25313,"toc":25504},[25314,25318,25322,25418,25426,25431,25435,25451,25454,25458,25501],[10,25315,25317],{"id":25316},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[190,25319,25321],{"id":25320},"_61-录制示教数据","6.1 录制示教数据",[82,25323,25325],{"className":84,"code":25324,"language":86,"meta":26,"style":26},"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",[88,25326,25327,25334,25340,25346,25352,25361,25367,25373,25379,25386,25396,25403,25413],{"__ignoreMap":26},[91,25328,25329,25332],{"class":93,"line":94},[91,25330,25331],{"class":97},"lerobot-record",[91,25333,24801],{"class":105},[91,25335,25336,25338],{"class":93,"line":38},[91,25337,24833],{"class":105},[91,25339,24801],{"class":105},[91,25341,25342,25344],{"class":93,"line":1304},[91,25343,24911],{"class":105},[91,25345,24801],{"class":105},[91,25347,25348,25350],{"class":93,"line":1319},[91,25349,24971],{"class":105},[91,25351,24801],{"class":105},[91,25353,25354,25356,25359],{"class":93,"line":1325},[91,25355,25040],{"class":105},[91,25357,25358],{"class":101},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[91,25360,24801],{"class":105},[91,25362,25363,25365],{"class":93,"line":1339},[91,25364,24806],{"class":105},[91,25366,24801],{"class":105},[91,25368,25369,25371],{"class":93,"line":1345},[91,25370,24878],{"class":105},[91,25372,24801],{"class":105},[91,25374,25375,25377],{"class":93,"line":1436},[91,25376,25062],{"class":105},[91,25378,24801],{"class":105},[91,25380,25381,25384],{"class":93,"line":1442},[91,25382,25383],{"class":105},"  --display_data=true",[91,25385,24801],{"class":105},[91,25387,25388,25391,25394],{"class":93,"line":1454},[91,25389,25390],{"class":105},"  --dataset.repo_id=",[91,25392,25393],{"class":101},"\"Embodied-AI-6\u002Fso101_test\"",[91,25395,24801],{"class":105},[91,25397,25398,25401],{"class":93,"line":1736},[91,25399,25400],{"class":105},"  --dataset.num_episodes=10",[91,25402,24801],{"class":105},[91,25404,25405,25408,25411],{"class":93,"line":1741},[91,25406,25407],{"class":105},"  --dataset.single_task=",[91,25409,25410],{"class":101},"\"Grab the green cube\"",[91,25412,24801],{"class":105},[91,25414,25415],{"class":93,"line":1747},[91,25416,25417],{"class":105},"  --resume=true\n",[1256,25419,25420],{},[17,25421,25422,25425],{},[88,25423,25424],{},"--resume=true","：已有同一数据集时继续追加 episode。",[21,25427,25428],{},[24,25429],{"alt":26,"src":25430},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[190,25432,25434],{"id":25433},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[82,25436,25438],{"className":84,"code":25437,"language":86,"meta":26,"style":26},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[88,25439,25440],{"__ignoreMap":26},[91,25441,25442,25445,25448],{"class":93,"line":94},[91,25443,25444],{"class":97},"rm",[91,25446,25447],{"class":105}," -rf",[91,25449,25450],{"class":101}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[21,25452,25453],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[190,25455,25457],{"id":25456},"_63-回放指定-episode","6.3 回放指定 episode",[82,25459,25461],{"className":84,"code":25460,"language":86,"meta":26,"style":26},"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",[88,25462,25463,25470,25476,25482,25488,25496],{"__ignoreMap":26},[91,25464,25465,25468],{"class":93,"line":94},[91,25466,25467],{"class":97},"lerobot-replay",[91,25469,24801],{"class":105},[91,25471,25472,25474],{"class":93,"line":38},[91,25473,24833],{"class":105},[91,25475,24801],{"class":105},[91,25477,25478,25480],{"class":93,"line":1304},[91,25479,24911],{"class":105},[91,25481,24801],{"class":105},[91,25483,25484,25486],{"class":93,"line":1319},[91,25485,24971],{"class":105},[91,25487,24801],{"class":105},[91,25489,25490,25492,25494],{"class":93,"line":1325},[91,25491,25390],{"class":105},[91,25493,25393],{"class":101},[91,25495,24801],{"class":105},[91,25497,25498],{"class":93,"line":1339},[91,25499,25500],{"class":105},"  --dataset.episode=0\n",[168,25502,25503],{},"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":26,"searchDepth":38,"depth":38,"links":25505},[25506,25507,25508],{"id":25320,"depth":38,"text":25321},{"id":25433,"depth":38,"text":25434},{"id":25456,"depth":38,"text":25457},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25311,"description":23500},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25515,"title":25516,"body":25517,"description":23500,"extension":173,"meta":25645,"navigation":175,"path":25646,"seo":25647,"stem":25648,"__hash__":25649},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25518,"toc":25643},[25519,25523,25586,25589,25636,25641],[10,25520,25522],{"id":25521},"_7-act-模型训练","7. ACT 模型训练",[82,25524,25526],{"className":84,"code":25525,"language":86,"meta":26,"style":26},"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",[88,25527,25528,25535,25543,25550,25557,25564,25571,25578],{"__ignoreMap":26},[91,25529,25530,25533],{"class":93,"line":94},[91,25531,25532],{"class":97},"lerobot-train",[91,25534,24801],{"class":105},[91,25536,25537,25539,25541],{"class":93,"line":38},[91,25538,25390],{"class":105},[91,25540,25393],{"class":101},[91,25542,24801],{"class":105},[91,25544,25545,25548],{"class":93,"line":1304},[91,25546,25547],{"class":105},"  --policy.type=act",[91,25549,24801],{"class":105},[91,25551,25552,25555],{"class":93,"line":1319},[91,25553,25554],{"class":105},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[91,25556,24801],{"class":105},[91,25558,25559,25562],{"class":93,"line":1325},[91,25560,25561],{"class":105},"  --job_name=act_so101_test",[91,25563,24801],{"class":105},[91,25565,25566,25569],{"class":93,"line":1339},[91,25567,25568],{"class":105},"  --policy.device=cuda",[91,25570,24801],{"class":105},[91,25572,25573,25576],{"class":93,"line":1345},[91,25574,25575],{"class":105},"  --wandb.enable=false",[91,25577,24801],{"class":105},[91,25579,25580,25583],{"class":93,"line":1436},[91,25581,25582],{"class":105},"  --policy.repo_id=",[91,25584,25585],{"class":101},"\"Embodied-AI-6\u002Flerobot_new\"\n",[21,25587,25588],{},"参数说明：",[1256,25590,25591,25597,25603,25609,25615,25624,25630],{},[17,25592,25593,25596],{},[88,25594,25595],{},"--dataset.repo_id","：训练数据集仓库。",[17,25598,25599,25602],{},[88,25600,25601],{},"--policy.type=act","：策略模型类型为 ACT。",[17,25604,25605,25608],{},[88,25606,25607],{},"--output_dir","：本地训练输出目录。",[17,25610,25611,25614],{},[88,25612,25613],{},"--job_name","：训练任务名称。",[17,25616,25617,25620,25621,24685],{},[88,25618,25619],{},"--policy.device","：训练设备（如 ",[88,25622,25623],{},"cuda",[17,25625,25626,25629],{},[88,25627,25628],{},"--wandb.enable","：是否启用 WandB 可视化。",[17,25631,25632,25635],{},[88,25633,25634],{},"--policy.repo_id","：训练后模型推送目标仓库。",[21,25637,25638],{},[24,25639],{"alt":26,"src":25640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[168,25642,25503],{},{"title":26,"searchDepth":38,"depth":38,"links":25644},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25516,"description":23500},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25651,"title":25652,"body":25653,"description":23500,"extension":173,"meta":25740,"navigation":175,"path":25741,"seo":25742,"stem":25743,"__hash__":25744},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25654,"toc":25738},[25655,25658,25661,25728,25736],[10,25656,25652],{"id":25657},"_8-策略部署与自动采集",[21,25659,25660],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[82,25662,25664],{"className":84,"code":25663,"language":86,"meta":26,"style":26},"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",[88,25665,25666,25672,25678,25684,25692,25698,25705,25713,25721],{"__ignoreMap":26},[91,25667,25668,25670],{"class":93,"line":94},[91,25669,25331],{"class":97},[91,25671,24801],{"class":105},[91,25673,25674,25676],{"class":93,"line":38},[91,25675,24833],{"class":105},[91,25677,24801],{"class":105},[91,25679,25680,25682],{"class":93,"line":1304},[91,25681,24911],{"class":105},[91,25683,24801],{"class":105},[91,25685,25686,25688,25690],{"class":93,"line":1319},[91,25687,25040],{"class":105},[91,25689,25358],{"class":101},[91,25691,24801],{"class":105},[91,25693,25694,25696],{"class":93,"line":1325},[91,25695,24971],{"class":105},[91,25697,24801],{"class":105},[91,25699,25700,25703],{"class":93,"line":1339},[91,25701,25702],{"class":105},"  --display_data=false",[91,25704,24801],{"class":105},[91,25706,25707,25709,25711],{"class":93,"line":1345},[91,25708,25390],{"class":105},[91,25710,25393],{"class":101},[91,25712,24801],{"class":105},[91,25714,25715,25717,25719],{"class":93,"line":1436},[91,25716,25407],{"class":105},[91,25718,25410],{"class":101},[91,25720,24801],{"class":105},[91,25722,25723,25726],{"class":93,"line":1442},[91,25724,25725],{"class":105},"  --policy.path=",[91,25727,25585],{"class":101},[1256,25729,25730],{},[17,25731,25732,25735],{},[88,25733,25734],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[168,25737,25503],{},{"title":26,"searchDepth":38,"depth":38,"links":25739},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25652,"description":23500},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25746,"title":25747,"body":25748,"description":23500,"extension":173,"meta":25777,"navigation":175,"path":25778,"seo":25779,"stem":25780,"__hash__":25781},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25749,"toc":25775},[25750,25754,25757,25763,25766,25772],[10,25751,25753],{"id":25752},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[21,25755,25756],{},"项目地址：",[21,25758,25759],{},[487,25760,25761],{"href":25761,"rel":25762},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23987],[21,25764,25765],{},"参考教程：",[21,25767,25768],{},[487,25769,25770],{"href":25770,"rel":25771},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23987],[21,25773,25774],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":26,"searchDepth":38,"depth":38,"links":25776},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25747,"description":23500},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25783,"title":25784,"body":25785,"description":25789,"extension":173,"meta":25790,"navigation":175,"path":25791,"seo":25792,"stem":25793,"__hash__":25794},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25786,"toc":25787},[],{"title":26,"searchDepth":38,"depth":38,"links":25788},[],"act复现",{"category":23502},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25784,"description":25789},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25796,"title":25797,"body":25798,"description":26,"extension":173,"meta":26100,"navigation":175,"path":26101,"seo":26102,"stem":26103,"__hash__":26104},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25799,"toc":26092},[25800,25803,25807,25817,25824,25831,25834,25841,25844,25847,25851,25863,25867,25913,25916,25919,25922,25925,25928,25932,25970,25976,25980,26034,26039,26042,26045,26050,26053,26058,26061,26064,26068,26071,26074,26078],[10,25801,25797],{"id":25802},"_1简介",[217,25804,25806],{"id":25805},"_11什么是-docker","1.1什么是 Docker？",[21,25808,25809,25810,25813,25814],{},"Docker 是一个开源的 ",[398,25811,25812],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[398,25815,25816],{},"一次构建，到处运行。",[21,25818,25819,25820,25823],{},"“ ",[398,25821,25822],{},"一次构建，到处运行"," ”也就是说：",[14,25825,25826],{},[17,25827,25828],{},[398,25829,25830],{},"之前：",[21,25832,25833],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[14,25835,25836],{},[17,25837,25838],{},[398,25839,25840],{},"使用docker后：",[21,25842,25843],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[21,25845,25846],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[217,25848,25850],{"id":25849},"_12它是怎么工作的","1.2.它是怎么工作的？",[1256,25852,25853,25856],{},[17,25854,25855],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[17,25857,25858,25859,25862],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[398,25860,25861],{},"无论在哪运行都一样稳定"," 。",[217,25864,25866],{"id":25865},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[386,25868,25869,25879],{},[389,25870,25871],{},[392,25872,25873,25876],{},[395,25874,25875],{"align":23860},"概念",[395,25877,25878],{"align":23860},"解释",[433,25880,25881,25889,25897,25905],{},[392,25882,25883,25886],{},[438,25884,25885],{"align":23860},"镜像",[438,25887,25888],{"align":23860},"Image，运行容器的模板，像是一个应用快照",[392,25890,25891,25894],{},[438,25892,25893],{"align":23860},"容器",[438,25895,25896],{"align":23860},"Container，运行中的镜像实例，有自己的文件系统、网络等",[392,25898,25899,25902],{},[438,25900,25901],{"align":23860},"Dockerfile",[438,25903,25904],{"align":23860},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[392,25906,25907,25910],{},[438,25908,25909],{"align":23860},"仓库",[438,25911,25912],{"align":23860},"Registry，存放镜像的地方，比如 Docker Hub",[21,25914,25915],{},"抽象化理解:",[21,25917,25918],{},"Docker镜像≈C++类",[21,25920,25921],{},"Docker容器≈C++类实例(即对象)",[21,25923,25924],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[21,25926,25927],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[217,25929,25931],{"id":25930},"_14类比理解","1.4.类比理解",[386,25933,25934,25944],{},[389,25935,25936],{},[392,25937,25938,25941],{},[395,25939,25940],{"align":23860},"传统部署",[395,25942,25943],{"align":23860},"Docker部署",[433,25945,25946,25954,25962],{},[392,25947,25948,25951],{},[438,25949,25950],{"align":23860},"手动安装依赖、调试版本不一致问题",[438,25952,25953],{"align":23860},"一次打包环境和代码",[392,25955,25956,25959],{},[438,25957,25958],{"align":23860},"程序“裸奔”跑在系统上",[438,25960,25961],{"align":23860},"程序“穿着容器”隔离运行",[392,25963,25964,25967],{},[438,25965,25966],{"align":23860},"容易“在我电脑上能跑”",[438,25968,25969],{"align":23860},"保证“无论在哪都能跑”",[21,25971,25972,25973],{},"就像快递包裹： ",[398,25974,25975],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[217,25977,25979],{"id":25978},"_15docker-的核心优势","1.5.Docker 的核心优势",[386,25981,25982,25992],{},[389,25983,25984],{},[392,25985,25986,25989],{},[395,25987,25988],{"align":23860},"优势",[395,25990,25991],{"align":23860},"说明",[433,25993,25994,26002,26010,26018,26026],{},[392,25995,25996,25999],{},[438,25997,25998],{"align":23860},"轻量级",[438,26000,26001],{"align":23860},"基于系统内核共享，启动速度快，占资源少",[392,26003,26004,26007],{},[438,26005,26006],{"align":23860},"跨平台",[438,26008,26009],{"align":23860},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[392,26011,26012,26015],{},[438,26013,26014],{"align":23860},"易于迁移部署",[438,26016,26017],{"align":23860},"应用和环境一起封装，不怕依赖不一致",[392,26019,26020,26023],{},[438,26021,26022],{"align":23860},"易于版本控制",[438,26024,26025],{"align":23860},"镜像版本可控，支持回滚",[392,26027,26028,26031],{},[438,26029,26030],{"align":23860},"生态丰富",[438,26032,26033],{"align":23860},"Docker Hub 上有成千上万的现成镜像可用",[14,26035,26036],{},[17,26037,26038],{},"在Linux上可以几乎实现无性能损失。",[21,26040,26041],{},"docker里的发行版和本机共用Linux内核。",[21,26043,26044],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[14,26046,26047],{},[17,26048,26049],{},"可以快速部署在绝大多数Linux发行版",[21,26051,26052],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[14,26054,26055],{},[17,26056,26057],{},"配置环境简单",[21,26059,26060],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[21,26062,26063],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[14,26065,26066],{},[17,26067,26030],{},[21,26069,26070],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[21,26072,26073],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[217,26075,26077],{"id":26076},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1256,26079,26080,26083,26086,26089],{},[17,26081,26082],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[17,26084,26085],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[17,26087,26088],{},"微服务架构：每个服务一个容器，灵活组合",[17,26090,26091],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":26,"searchDepth":38,"depth":38,"links":26093},[26094,26095,26096,26097,26098,26099],{"id":25805,"depth":1304,"text":25806},{"id":25849,"depth":1304,"text":25850},{"id":25865,"depth":1304,"text":25866},{"id":25930,"depth":1304,"text":25931},{"id":25978,"depth":1304,"text":25979},{"id":26076,"depth":1304,"text":26077},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25797,"description":26},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26106,"title":26107,"body":26108,"description":26,"extension":173,"meta":26839,"navigation":175,"path":26840,"seo":26841,"stem":26842,"__hash__":26843},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26109,"toc":26834},[26110,26113,26117,26120,26123,26129,26135,26139,26148,26151,26208,26211,26262,26265,26348,26351,26388,26392,26403,26416,26423,26426,26506,26509,26558,26561,26584,26588,26595,26598,26614,26620,26623,26639,26645,26648,26664,26677,26683,26703,26709,26712,26724,26730,26733,26747,26753,26756,26776,26781,26784,26787,26791,26794,26797,26800,26807,26810,26813,26816,26821,26826,26831],[10,26111,26107],{"id":26112},"_2安装docker",[217,26114,26116],{"id":26115},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[21,26118,26119],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[21,26121,26122],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[21,26124,26125],{},[487,26126,26127],{"href":26127,"rel":26128},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23987],[21,26130,26131],{},[487,26132,26133],{"href":26133,"rel":26134},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23987],[22121,26136,26138],{"id":26137},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[21,26140,26141,26142,26147],{},"以下内容根据 ",[487,26143,26146],{"href":26144,"rel":26145},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23987],"官方文档"," 修改而来。",[21,26149,26150],{},"如果你过去安装过 docker，先删掉：",[82,26152,26154],{"className":84,"code":26153,"language":86,"meta":26,"style":26},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[88,26155,26156],{"__ignoreMap":26},[91,26157,26158,26160,26163,26166,26169,26172,26175,26178,26181,26184,26187,26190,26193,26196,26199,26202,26205],{"class":93,"line":94},[91,26159,3148],{"class":153},[91,26161,26162],{"class":250}," pkg ",[91,26164,26165],{"class":153},"in",[91,26167,26168],{"class":101}," docker.io",[91,26170,26171],{"class":101}," docker-doc",[91,26173,26174],{"class":101}," docker-compose",[91,26176,26177],{"class":101}," docker-compose-v2",[91,26179,26180],{"class":101}," podman-docker",[91,26182,26183],{"class":101}," containerd",[91,26185,26186],{"class":101}," runc",[91,26188,26189],{"class":250},"; ",[91,26191,26192],{"class":153},"do",[91,26194,26195],{"class":97}," sudo",[91,26197,26198],{"class":101}," apt-get",[91,26200,26201],{"class":101}," remove",[91,26203,26204],{"class":250}," $pkg; ",[91,26206,26207],{"class":153},"done\n",[21,26209,26210],{},"首先安装依赖和GPG：",[82,26212,26216],{"className":26213,"code":26214,"language":26215,"meta":26,"style":26},"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",[88,26217,26218,26223,26228,26233,26238,26243,26248,26252,26257],{"__ignoreMap":26},[91,26219,26220],{"class":93,"line":94},[91,26221,26222],{},"# Add Docker's official GPG key:\n",[91,26224,26225],{"class":93,"line":38},[91,26226,26227],{},"sudo apt-get update\n",[91,26229,26230],{"class":93,"line":1304},[91,26231,26232],{},"sudo apt-get install ca-certificates curl\n",[91,26234,26235],{"class":93,"line":1319},[91,26236,26237],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[91,26239,26240],{"class":93,"line":1325},[91,26241,26242],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[91,26244,26245],{"class":93,"line":1339},[91,26246,26247],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[91,26249,26250],{"class":93,"line":1345},[91,26251,2523],{"emptyLinePlaceholder":175},[91,26253,26254],{"class":93,"line":1436},[91,26255,26256],{},"# 如果上面这行报错就弄下面这行\n",[91,26258,26259],{"class":93,"line":1442},[91,26260,26261],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[21,26263,26264],{},"信任 Docker 的 GPG 公钥并添加仓库：",[82,26266,26268],{"className":84,"code":26267,"language":86,"meta":26,"style":26},"# 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",[88,26269,26270,26275,26281,26298,26331],{"__ignoreMap":26},[91,26271,26272],{"class":93,"line":94},[91,26273,26274],{"class":308},"# Add the repository to Apt sources:\n",[91,26276,26277,26279],{"class":93,"line":38},[91,26278,25247],{"class":105},[91,26280,24801],{"class":105},[91,26282,26283,26286,26289,26292,26295],{"class":93,"line":1304},[91,26284,26285],{"class":101},"  \"deb [arch=$(",[91,26287,26288],{"class":97},"dpkg",[91,26290,26291],{"class":105}," --print-architecture",[91,26293,26294],{"class":101},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[91,26296,26297],{"class":105},"\\\n",[91,26299,26300,26303,26305,26307,26310,26313,26315,26317,26320,26322,26324,26327,26329],{"class":93,"line":1319},[91,26301,26302],{"class":101},"  \"",[91,26304,25222],{"class":250},[91,26306,807],{"class":105},[91,26308,26309],{"class":101}," \u002Fetc\u002Fos-release",[91,26311,26312],{"class":250}," && ",[91,26314,25247],{"class":105},[91,26316,9847],{"class":101},[91,26318,26319],{"class":250},"$VERSION_CODENAME",[91,26321,500],{"class":101},[91,26323,678],{"class":250},[91,26325,26326],{"class":101},"\" stable\"",[91,26328,154],{"class":153},[91,26330,24801],{"class":105},[91,26332,26333,26336,26339,26342,26345],{"class":93,"line":1325},[91,26334,26335],{"class":97},"  sudo",[91,26337,26338],{"class":101}," tee",[91,26340,26341],{"class":101}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[91,26343,26344],{"class":153}," >",[91,26346,26347],{"class":101}," \u002Fdev\u002Fnull\n",[21,26349,26350],{},"最后安装",[82,26352,26354],{"className":84,"code":26353,"language":86,"meta":26,"style":26},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[88,26355,26356,26365],{"__ignoreMap":26},[91,26357,26358,26360,26362],{"class":93,"line":94},[91,26359,24699],{"class":97},[91,26361,26198],{"class":101},[91,26363,26364],{"class":101}," update\n",[91,26366,26367,26369,26371,26373,26376,26379,26382,26385],{"class":93,"line":38},[91,26368,24699],{"class":97},[91,26370,26198],{"class":101},[91,26372,23956],{"class":101},[91,26374,26375],{"class":101}," docker-ce",[91,26377,26378],{"class":101}," docker-ce-cli",[91,26380,26381],{"class":101}," containerd.io",[91,26383,26384],{"class":101}," docker-buildx-plugin",[91,26386,26387],{"class":101}," docker-compose-plugin\n",[22121,26389,26391],{"id":26390},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[21,26393,26394,26395,26398,26399,26402],{},"查看自己自己包管理工具版本（dnf是 ",[398,26396,26397],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[398,26400,26401],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[82,26404,26406],{"className":84,"code":26405,"language":86,"meta":26,"style":26},"dnf --version\n",[88,26407,26408],{"__ignoreMap":26},[91,26409,26410,26413],{"class":93,"line":94},[91,26411,26412],{"class":97},"dnf",[91,26414,26415],{"class":105}," --version\n",[21,26417,26141,26418,26422],{},[487,26419,26146],{"href":26420,"rel":26421},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23987]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[21,26424,26425],{},"如果你之前安装过 docker，请先删掉",[82,26427,26429],{"className":84,"code":26428,"language":86,"meta":26,"style":26},"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",[88,26430,26431,26445,26452,26459,26466,26473,26480,26487,26494,26501],{"__ignoreMap":26},[91,26432,26433,26435,26438,26440,26443],{"class":93,"line":94},[91,26434,24699],{"class":97},[91,26436,26437],{"class":101}," dnf",[91,26439,26201],{"class":101},[91,26441,26442],{"class":101}," docker",[91,26444,24801],{"class":105},[91,26446,26447,26450],{"class":93,"line":38},[91,26448,26449],{"class":101},"                  docker-client",[91,26451,24801],{"class":105},[91,26453,26454,26457],{"class":93,"line":1304},[91,26455,26456],{"class":101},"                  docker-client-latest",[91,26458,24801],{"class":105},[91,26460,26461,26464],{"class":93,"line":1319},[91,26462,26463],{"class":101},"                  docker-common",[91,26465,24801],{"class":105},[91,26467,26468,26471],{"class":93,"line":1325},[91,26469,26470],{"class":101},"                  docker-latest",[91,26472,24801],{"class":105},[91,26474,26475,26478],{"class":93,"line":1339},[91,26476,26477],{"class":101},"                  docker-latest-logrotate",[91,26479,24801],{"class":105},[91,26481,26482,26485],{"class":93,"line":1345},[91,26483,26484],{"class":101},"                  docker-logrotate",[91,26486,24801],{"class":105},[91,26488,26489,26492],{"class":93,"line":1436},[91,26490,26491],{"class":101},"                  docker-selinux",[91,26493,24801],{"class":105},[91,26495,26496,26499],{"class":93,"line":1442},[91,26497,26498],{"class":101},"                  docker-engine-selinux",[91,26500,24801],{"class":105},[91,26502,26503],{"class":93,"line":1454},[91,26504,26505],{"class":101},"                  docker-engine\n",[21,26507,26508],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[82,26510,26512],{"className":84,"code":26511,"language":86,"meta":26,"style":26},"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",[88,26513,26514,26528,26543],{"__ignoreMap":26},[91,26515,26516,26518,26520,26523,26525],{"class":93,"line":94},[91,26517,24699],{"class":97},[91,26519,26437],{"class":101},[91,26521,26522],{"class":105}," -y",[91,26524,23956],{"class":101},[91,26526,26527],{"class":101}," dnf-plugins-core\n",[91,26529,26530,26532,26534,26537,26540],{"class":93,"line":38},[91,26531,24699],{"class":97},[91,26533,26437],{"class":101},[91,26535,26536],{"class":101}," config-manager",[91,26538,26539],{"class":101}," addrepo",[91,26541,26542],{"class":105}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[91,26544,26545,26547,26550,26552,26555],{"class":93,"line":1304},[91,26546,24699],{"class":97},[91,26548,26549],{"class":101}," sed",[91,26551,160],{"class":105},[91,26553,26554],{"class":101}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[91,26556,26557],{"class":101}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[21,26559,26560],{},"最后安装：",[82,26562,26564],{"className":84,"code":26563,"language":86,"meta":26,"style":26},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[88,26565,26566],{"__ignoreMap":26},[91,26567,26568,26570,26572,26574,26576,26578,26580,26582],{"class":93,"line":94},[91,26569,24699],{"class":97},[91,26571,26437],{"class":101},[91,26573,23956],{"class":101},[91,26575,26375],{"class":101},[91,26577,26378],{"class":101},[91,26579,26381],{"class":101},[91,26581,26384],{"class":101},[91,26583,26387],{"class":101},[217,26585,26587],{"id":26586},"_22配置环境","2.2.配置环境",[22121,26589,26591,26594],{"id":26590},"_221检查-docker-服务状态",[398,26592,26593],{},"2.2.1.检查 Docker 服务状态"," ：",[21,26596,26597],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[82,26599,26601],{"className":84,"code":26600,"language":86,"meta":26,"style":26},"systemctl status docker\n",[88,26602,26603],{"__ignoreMap":26},[91,26604,26605,26608,26611],{"class":93,"line":94},[91,26606,26607],{"class":97},"systemctl",[91,26609,26610],{"class":101}," status",[91,26612,26613],{"class":101}," docker\n",[22121,26615,26617,26594],{"id":26616},"_222启动-docker-服务",[398,26618,26619],{},"2.2.2.启动 Docker 服务",[21,26621,26622],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[82,26624,26626],{"className":84,"code":26625,"language":86,"meta":26,"style":26},"sudo systemctl start docker\n",[88,26627,26628],{"__ignoreMap":26},[91,26629,26630,26632,26635,26637],{"class":93,"line":94},[91,26631,24699],{"class":97},[91,26633,26634],{"class":101}," systemctl",[91,26636,4307],{"class":101},[91,26638,26613],{"class":101},[22121,26640,26642,26594],{"id":26641},"_223设置-docker-开机自启",[398,26643,26644],{},"2.2.3.设置 Docker 开机自启",[21,26646,26647],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[82,26649,26651],{"className":84,"code":26650,"language":86,"meta":26,"style":26},"sudo systemctl enable docker\n",[88,26652,26653],{"__ignoreMap":26},[91,26654,26655,26657,26659,26662],{"class":93,"line":94},[91,26656,24699],{"class":97},[91,26658,26634],{"class":101},[91,26660,26661],{"class":101}," enable",[91,26663,26613],{"class":101},[22121,26665,26667,13918,26670,13918,26674,26594],{"id":26666},"_224将用户添加到-docker-组",[398,26668,26669],{},"2.2.4.将用户添加到",[398,26671,26672],{},[88,26673,98],{},[398,26675,26676],{},"组",[21,26678,26679,26680,26682],{},"使用以下命令将当前用户添加到 ",[88,26681,98],{}," 组：",[82,26684,26686],{"className":84,"code":26685,"language":86,"meta":26,"style":26},"sudo usermod -aG docker $USER\n",[88,26687,26688],{"__ignoreMap":26},[91,26689,26690,26692,26695,26698,26700],{"class":93,"line":94},[91,26691,24699],{"class":97},[91,26693,26694],{"class":101}," usermod",[91,26696,26697],{"class":105}," -aG",[91,26699,26442],{"class":101},[91,26701,26702],{"class":250}," $USER\n",[22121,26704,26706,26594],{"id":26705},"_225退出并重新登录",[398,26707,26708],{},"2.2.5.退出并重新登录",[21,26710,26711],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[82,26713,26715],{"className":84,"code":26714,"language":86,"meta":26,"style":26},"newgrp docker\n",[88,26716,26717],{"__ignoreMap":26},[91,26718,26719,26722],{"class":93,"line":94},[91,26720,26721],{"class":97},"newgrp",[91,26723,26613],{"class":101},[22121,26725,26727,26594],{"id":26726},"_226重新启动-docker-服务如果需要",[398,26728,26729],{},"2.2.6.重新启动 Docker 服务（如果需要）",[21,26731,26732],{},"确保 Docker 服务正在运行，可以使用以下命令：",[82,26734,26735],{"className":84,"code":26625,"language":86,"meta":26,"style":26},[88,26736,26737],{"__ignoreMap":26},[91,26738,26739,26741,26743,26745],{"class":93,"line":94},[91,26740,24699],{"class":97},[91,26742,26634],{"class":101},[91,26744,4307],{"class":101},[91,26746,26613],{"class":101},[22121,26748,26750,26594],{"id":26749},"_227重启电脑后检查-docker-服务状态",[398,26751,26752],{},"2.2.7.重启电脑后检查 Docker 服务状态",[21,26754,26755],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[82,26757,26759],{"className":84,"code":26758,"language":86,"meta":26,"style":26},"sudo reboot\nsystemctl status docker\n",[88,26760,26761,26768],{"__ignoreMap":26},[91,26762,26763,26765],{"class":93,"line":94},[91,26764,24699],{"class":97},[91,26766,26767],{"class":101}," reboot\n",[91,26769,26770,26772,26774],{"class":93,"line":38},[91,26771,26607],{"class":97},[91,26773,26610],{"class":101},[91,26775,26613],{"class":101},[21,26777,26778],{},[24,26779],{"alt":26,"src":26780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[21,26782,26783],{},"第三行显示enabled说明开机自启动成功",[21,26785,26786],{},"按q退出",[217,26788,26790],{"id":26789},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[21,26792,26793],{},"优先使用linux来使用docker是比较好的",[21,26795,26796],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[21,26798,26799],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[21,26801,26802,26803],{},"官方下载安装:",[487,26804,26805],{"href":26805,"rel":26806},"https:\u002F\u002Fwww.docker.com\u002F",[23987],[21,26808,26809],{},"Windows的Docker显卡直通与USB直通:",[21,26811,26812],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[21,26814,26815],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[21,26817,26818],{},[24,26819],{"alt":26,"src":26820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[21,26822,26823],{},[24,26824],{"alt":26,"src":26825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[21,26827,26828],{},[24,26829],{"alt":26,"src":26830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[168,26832,26833],{},"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":26,"searchDepth":38,"depth":38,"links":26835},[26836,26837,26838],{"id":26115,"depth":1304,"text":26116},{"id":26586,"depth":1304,"text":26587},{"id":26789,"depth":1304,"text":26790},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26107,"description":26},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26845,"title":26846,"body":26847,"description":26854,"extension":173,"meta":27546,"navigation":175,"path":27547,"seo":27548,"stem":27549,"__hash__":27550},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26848,"toc":27540},[26849,26852,26855,26859,26864,26869,26872,26900,26905,26914,26917,26922,26926,26933,26938,26944,26948,26951,26955,26960,27052,27057,27075,27080,27101,27106,27122,27126,27131,27160,27165,27211,27216,27260,27268,27285,27290,27306,27311,27325,27328,27331,27334,27337,27365,27368,27373,27377,27380,27383,27389,27392,27395,27398,27460,27467,27472,27475,27493,27497,27500,27517,27520,27523,27537],[10,26850,26846],{"id":26851},"_3docker直通",[21,26853,26854],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[217,26856,26858],{"id":26857},"_31usb直通","3.1.USB直通",[21,26860,26861],{},[24,26862],{"alt":26,"src":26863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[14,26865,26866],{},[17,26867,26868],{},"方法一(不是很推荐新手)：",[21,26870,26871],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[82,26873,26875],{"className":84,"code":26874,"language":86,"meta":26,"style":26},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[88,26876,26877,26885,26890],{"__ignoreMap":26},[91,26878,26879,26882],{"class":93,"line":94},[91,26880,26881],{"class":97},"ls",[91,26883,26884],{"class":101}," \u002Fdev\n",[91,26886,26887],{"class":93,"line":38},[91,26888,26889],{"class":308},"#例如\n",[91,26891,26892,26895,26897],{"class":93,"line":1304},[91,26893,26894],{"class":250},"--device",[91,26896,296],{"class":153},[91,26898,26899],{"class":101},"\u002Fdev\u002Ftty_USB0\n",[14,26901,26902],{"start":38},[17,26903,26904],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[82,26906,26908],{"className":84,"code":26907,"language":86,"meta":26,"style":26},"--privileged\n",[88,26909,26910],{"__ignoreMap":26},[91,26911,26912],{"class":93,"line":94},[91,26913,26907],{"class":97},[21,26915,26916],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[21,26918,26919],{},[24,26920],{"alt":26,"src":26921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[217,26923,26925],{"id":26924},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[21,26927,26928,26929,26932],{},"NVIDIA Container Toolkit使用户 ",[398,26930,26931],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[21,26934,26935],{},[24,26936],{"alt":26,"src":26937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[21,26939,26940],{},[487,26941,26942],{"href":26942,"rel":26943},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23987],[22121,26945,26947],{"id":26946},"_321安装","3.2.1.安装",[21,26949,26950],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23033,26952,26954],{"id":26953},"_3211ubuntu","3.2.1.1.Ubuntu",[14,26956,26957],{},[17,26958,26959],{},"配置存储库 并更新",[82,26961,26963],{"className":84,"code":26962,"language":86,"meta":26,"style":26},"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",[88,26964,26965,26994,27014,27026,27038,27044],{"__ignoreMap":26},[91,26966,26967,26970,26973,26976,26978,26980,26983,26986,26989,26992],{"class":93,"line":94},[91,26968,26969],{"class":97},"curl",[91,26971,26972],{"class":105}," -fsSL",[91,26974,26975],{"class":101}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[91,26977,154],{"class":153},[91,26979,26195],{"class":97},[91,26981,26982],{"class":101}," gpg",[91,26984,26985],{"class":105}," --dearmor",[91,26987,26988],{"class":105}," -o",[91,26990,26991],{"class":101}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[91,26993,24801],{"class":105},[91,26995,26996,26999,27001,27004,27007,27010,27012],{"class":93,"line":38},[91,26997,26998],{"class":250},"  && ",[91,27000,26969],{"class":97},[91,27002,27003],{"class":105}," -s",[91,27005,27006],{"class":105}," -L",[91,27008,27009],{"class":101}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[91,27011,154],{"class":153},[91,27013,24801],{"class":105},[91,27015,27016,27019,27022,27024],{"class":93,"line":1304},[91,27017,27018],{"class":97},"    sed",[91,27020,27021],{"class":101}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[91,27023,154],{"class":153},[91,27025,24801],{"class":105},[91,27027,27028,27031,27033,27036],{"class":93,"line":1319},[91,27029,27030],{"class":97},"    sudo",[91,27032,26338],{"class":101},[91,27034,27035],{"class":101}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[91,27037,24801],{"class":105},[91,27039,27040,27042],{"class":93,"line":1325},[91,27041,26998],{"class":250},[91,27043,26297],{"class":105},[91,27045,27046,27048,27050],{"class":93,"line":1339},[91,27047,27030],{"class":97},[91,27049,26198],{"class":101},[91,27051,26364],{"class":101},[14,27053,27054],{"start":38},[17,27055,27056],{},"安装nvidia-docker2",[82,27058,27060],{"className":84,"code":27059,"language":86,"meta":26,"style":26},"sudo apt-get install -y nvidia-docker2\n",[88,27061,27062],{"__ignoreMap":26},[91,27063,27064,27066,27068,27070,27072],{"class":93,"line":94},[91,27065,24699],{"class":97},[91,27067,26198],{"class":101},[91,27069,23956],{"class":101},[91,27071,26522],{"class":105},[91,27073,27074],{"class":101}," nvidia-docker2\n",[14,27076,27077],{"start":1304},[17,27078,27079],{},"使用nvidia-ctk命令配置container runtime",[82,27081,27083],{"className":84,"code":27082,"language":86,"meta":26,"style":26},"sudo nvidia-ctk runtime configure --runtime=docker\n",[88,27084,27085],{"__ignoreMap":26},[91,27086,27087,27089,27092,27095,27098],{"class":93,"line":94},[91,27088,24699],{"class":97},[91,27090,27091],{"class":101}," nvidia-ctk",[91,27093,27094],{"class":101}," runtime",[91,27096,27097],{"class":101}," configure",[91,27099,27100],{"class":105}," --runtime=docker\n",[14,27102,27103],{"start":1319},[17,27104,27105],{},"重启docker服务:",[82,27107,27109],{"className":84,"code":27108,"language":86,"meta":26,"style":26},"sudo systemctl restart docker\n",[88,27110,27111],{"__ignoreMap":26},[91,27112,27113,27115,27117,27120],{"class":93,"line":94},[91,27114,24699],{"class":97},[91,27116,26634],{"class":101},[91,27118,27119],{"class":101}," restart",[91,27121,26613],{"class":101},[23033,27123,27125],{"id":27124},"_3212fedora","3.2.1.2.Fedora",[14,27127,27128],{},[17,27129,27130],{},"配置存储库",[82,27132,27134],{"className":84,"code":27133,"language":86,"meta":26,"style":26},"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",[88,27135,27136,27151],{"__ignoreMap":26},[91,27137,27138,27140,27142,27144,27147,27149],{"class":93,"line":94},[91,27139,26969],{"class":97},[91,27141,27003],{"class":105},[91,27143,27006],{"class":105},[91,27145,27146],{"class":101}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[91,27148,154],{"class":153},[91,27150,24801],{"class":105},[91,27152,27153,27155,27157],{"class":93,"line":38},[91,27154,24699],{"class":97},[91,27156,26338],{"class":101},[91,27158,27159],{"class":101}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[14,27161,27162],{"start":38},[17,27163,27164],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[82,27166,27168],{"className":84,"code":27167,"language":86,"meta":26,"style":26},"# 如果是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",[88,27169,27170,27175,27189,27193,27198],{"__ignoreMap":26},[91,27171,27172],{"class":93,"line":94},[91,27173,27174],{"class":308},"# 如果是RHEL或者Rocky（DNF4）\n",[91,27176,27177,27179,27181,27183,27186],{"class":93,"line":38},[91,27178,24699],{"class":97},[91,27180,26437],{"class":101},[91,27182,26536],{"class":101},[91,27184,27185],{"class":105}," --add-repo",[91,27187,27188],{"class":101}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[91,27190,27191],{"class":93,"line":1304},[91,27192,2523],{"emptyLinePlaceholder":175},[91,27194,27195],{"class":93,"line":1319},[91,27196,27197],{"class":308},"# 如果是Feodra41+（DNF5）\n",[91,27199,27200,27202,27204,27206,27208],{"class":93,"line":1325},[91,27201,24699],{"class":97},[91,27203,26437],{"class":101},[91,27205,26536],{"class":101},[91,27207,26539],{"class":101},[91,27209,27210],{"class":105}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[14,27212,27213],{"start":1304},[17,27214,27215],{},"安装NVIDIA Container Toolki包",[82,27217,27219],{"className":84,"code":27218,"language":86,"meta":26,"style":26},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[88,27220,27221,27226,27239,27243,27248],{"__ignoreMap":26},[91,27222,27223],{"class":93,"line":94},[91,27224,27225],{"class":308},"# 如果是RHEL或者Rocky\n",[91,27227,27228,27230,27232,27234,27236],{"class":93,"line":38},[91,27229,24699],{"class":97},[91,27231,26437],{"class":101},[91,27233,23956],{"class":101},[91,27235,26522],{"class":105},[91,27237,27238],{"class":101}," nvidia-container-toolkit\n",[91,27240,27241],{"class":93,"line":1304},[91,27242,2523],{"emptyLinePlaceholder":175},[91,27244,27245],{"class":93,"line":1319},[91,27246,27247],{"class":308},"# 如果是Fedora\n",[91,27249,27250,27252,27254,27256,27258],{"class":93,"line":1325},[91,27251,24699],{"class":97},[91,27253,26437],{"class":101},[91,27255,23956],{"class":101},[91,27257,26522],{"class":105},[91,27259,27238],{"class":101},[14,27261,27262],{"start":1319},[17,27263,27264,27265,27267],{},"安装nvidia-docker2 ： 在Fedora上使用",[88,27266,26412],{},"进行安装",[82,27269,27271],{"className":84,"code":27270,"language":86,"meta":26,"style":26},"sudo dnf install -y nvidia-docker2\n",[88,27272,27273],{"__ignoreMap":26},[91,27274,27275,27277,27279,27281,27283],{"class":93,"line":94},[91,27276,24699],{"class":97},[91,27278,26437],{"class":101},[91,27280,23956],{"class":101},[91,27282,26522],{"class":105},[91,27284,27074],{"class":101},[14,27286,27287],{"start":1325},[17,27288,27289],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[82,27291,27292],{"className":84,"code":27082,"language":86,"meta":26,"style":26},[88,27293,27294],{"__ignoreMap":26},[91,27295,27296,27298,27300,27302,27304],{"class":93,"line":94},[91,27297,24699],{"class":97},[91,27299,27091],{"class":101},[91,27301,27094],{"class":101},[91,27303,27097],{"class":101},[91,27305,27100],{"class":105},[14,27307,27308],{"start":1339},[17,27309,27310],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[82,27312,27313],{"className":84,"code":27108,"language":86,"meta":26,"style":26},[88,27314,27315],{"__ignoreMap":26},[91,27316,27317,27319,27321,27323],{"class":93,"line":94},[91,27318,24699],{"class":97},[91,27320,26634],{"class":101},[91,27322,27119],{"class":101},[91,27324,26613],{"class":101},[21,27326,27327],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[21,27329,27330],{},"方法：",[21,27332,27333],{},"1️⃣nvidia-smi",[21,27335,27336],{},"2️⃣运行nvidia cuda 容器进行测试",[82,27338,27340],{"className":84,"code":27339,"language":86,"meta":26,"style":26},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[88,27341,27342],{"__ignoreMap":26},[91,27343,27344,27346,27348,27350,27353,27356,27359,27362],{"class":93,"line":94},[91,27345,24699],{"class":97},[91,27347,26442],{"class":101},[91,27349,102],{"class":101},[91,27351,27352],{"class":105}," --rm",[91,27354,27355],{"class":105}," --gpus",[91,27357,27358],{"class":101}," all",[91,27360,27361],{"class":101}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[91,27363,27364],{"class":101}," nvidia-smi\n",[21,27366,27367],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[21,27369,27370],{},[24,27371],{"alt":26,"src":27372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[217,27374,27376],{"id":27375},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[21,27378,27379],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[21,27381,27382],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[21,27384,27385],{},[487,27386,27387],{"href":27387,"rel":27388},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23987],[21,27390,27391],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[21,27393,27394],{},"我们只需要找到对应的Docker镜像当底包即可。",[21,27396,27397],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[386,27399,27400,27416],{},[389,27401,27402],{},[392,27403,27404,27407,27410,27413],{},[395,27405,27406],{"align":23860},"镜像类型",[395,27408,27409],{"align":23860},"适用场景",[395,27411,27412],{"align":23860},"示例标签",[395,27414,27415],{"align":23860},"大小",[433,27417,27418,27432,27446],{},[392,27419,27420,27423,27426,27429],{},[438,27421,27422],{"align":23860},"base",[438,27424,27425],{"align":23860},"仅需 CUDA 运行时库",[438,27427,27428],{"align":23860},"12.4.0-base-ubuntu22.04",[438,27430,27431],{"align":23860},"~240MB",[392,27433,27434,27437,27440,27443],{},[438,27435,27436],{"align":23860},"runtime",[438,27438,27439],{"align":23860},"部署编译后的应用（含数学库）",[438,27441,27442],{"align":23860},"12.4.0-runtime-ubuntu22.04",[438,27444,27445],{"align":23860},"~2GB",[392,27447,27448,27451,27454,27457],{},[438,27449,27450],{"align":23860},"devel",[438,27452,27453],{"align":23860},"开发环境（含编译工具）",[438,27455,27456],{"align":23860},"12.4.0-devel-ubuntu22.04",[438,27458,27459],{"align":23860},"~3GB",[21,27461,27462,27463,27466],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[88,27464,27465],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[21,27468,27469],{},[24,27470],{"alt":26,"src":27471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[21,27473,27474],{},"在dockerfile里就可以开头这么写：",[82,27476,27478],{"className":84,"code":27477,"language":86,"meta":26,"style":26},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[88,27479,27480,27485],{"__ignoreMap":26},[91,27481,27482],{"class":93,"line":94},[91,27483,27484],{"class":308},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[91,27486,27487,27490],{"class":93,"line":38},[91,27488,27489],{"class":97},"FROM",[91,27491,27492],{"class":101}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[217,27494,27496],{"id":27495},"_34配置以太网","3.4.配置以太网",[21,27498,27499],{},"指定网络模式",[82,27501,27503],{"className":84,"code":27502,"language":86,"meta":26,"style":26},"--net=host \\\n",[88,27504,27505],{"__ignoreMap":26},[91,27506,27507,27510,27512,27515],{"class":93,"line":94},[91,27508,27509],{"class":250},"--net",[91,27511,296],{"class":153},[91,27513,27514],{"class":101},"host",[91,27516,24801],{"class":97},[21,27518,27519],{},"启动参数里加上这行即可。具体在下方",[21,27521,27522],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1256,27524,27525,27528,27531,27534],{},[17,27526,27527],{},"--net=bridge:默认选项，表示连接到默认的网桥",[17,27529,27530],{},"--net=host:容器使用宿主机的网络",[17,27532,27533],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[17,27535,27536],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[168,27538,27539],{},"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":26,"searchDepth":38,"depth":38,"links":27541},[27542,27543,27544,27545],{"id":26857,"depth":1304,"text":26858},{"id":26924,"depth":1304,"text":26925},{"id":27375,"depth":1304,"text":27376},{"id":27495,"depth":1304,"text":27496},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26846,"description":26854},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27552,"title":27553,"body":27554,"description":27561,"extension":173,"meta":27567,"navigation":175,"path":27568,"seo":27569,"stem":27570,"__hash__":27571},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27555,"toc":27565},[27556,27559,27562],[10,27557,27553],{"id":27558},"_4dockerhub换源",[21,27560,27561],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[21,27563,27564],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":26,"searchDepth":38,"depth":38,"links":27566},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27553,"description":27561},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27573,"title":27574,"body":27575,"description":26,"extension":173,"meta":28587,"navigation":175,"path":28588,"seo":28589,"stem":28590,"__hash__":28591},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27576,"toc":28582},[27577,27580,27584,27590,27594,27597,27937,27940,27943,27946,27951,27956,27959,27962,27965,27968,27987,27990,28001,28007,28189,28199,28215,28478,28480,28505,28520,28529,28579],[10,27578,27574],{"id":27579},"_5docker命令学习",[217,27581,27583],{"id":27582},"_51参考文档","5.1.参考文档",[21,27585,27586],{},[487,27587,27588],{"href":27588,"rel":27589},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23987],[217,27591,27593],{"id":27592},"_52常用命令","5.2.常用命令",[21,27595,27596],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[386,27598,27599,27612],{},[389,27600,27601],{},[392,27602,27603,27606,27609],{},[395,27604,27605],{"align":23860},"命令",[395,27607,27608],{"align":23860},"描述",[395,27610,27611],{"align":23860},"示例",[433,27613,27614,27625,27636,27647,27658,27669,27680,27691,27701,27712,27723,27734,27744,27755,27766,27777,27787,27797,27807,27817,27828,27839,27850,27861,27872,27883,27893,27904,27915,27926],{},[392,27615,27616,27619,27622],{},[438,27617,27618],{"align":23860},"docker run",[438,27620,27621],{"align":23860},"创建并启动一个新的容器。",[438,27623,27624],{"align":23860},"docker run -it ubuntu bash",[392,27626,27627,27630,27633],{},[438,27628,27629],{"align":23860},"docker build",[438,27631,27632],{"align":23860},"通过指定的 Dockerfile 创建一个新的镜像。",[438,27634,27635],{"align":23860},"docker build -t myimage .",[392,27637,27638,27641,27644],{},[438,27639,27640],{"align":23860},"docker pull",[438,27642,27643],{"align":23860},"从 Docker 仓库拉取镜像。",[438,27645,27646],{"align":23860},"docker pull ubuntu",[392,27648,27649,27652,27655],{},[438,27650,27651],{"align":23860},"docker push",[438,27653,27654],{"align":23860},"将本地镜像推送到 Docker 仓库。",[438,27656,27657],{"align":23860},"docker push myimage",[392,27659,27660,27663,27666],{},[438,27661,27662],{"align":23860},"docker stop",[438,27664,27665],{"align":23860},"停止一个正在运行的容器。",[438,27667,27668],{"align":23860},"docker stop container_id",[392,27670,27671,27674,27677],{},[438,27672,27673],{"align":23860},"docker start",[438,27675,27676],{"align":23860},"启动一个已经存在的容器。",[438,27678,27679],{"align":23860},"docker start container_id",[392,27681,27682,27685,27688],{},[438,27683,27684],{"align":23860},"docker restart",[438,27686,27687],{"align":23860},"重新启动容器。",[438,27689,27690],{"align":23860},"docker restart container_id",[392,27692,27693,27696,27699],{},[438,27694,27695],{"align":23860},"docker ps",[438,27697,27698],{"align":23860},"列出当前正在运行的容器。",[438,27700,27695],{"align":23860},[392,27702,27703,27706,27709],{},[438,27704,27705],{"align":23860},"docker rm",[438,27707,27708],{"align":23860},"删除一个或多个停止的容器。",[438,27710,27711],{"align":23860},"docker rm container_id",[392,27713,27714,27717,27720],{},[438,27715,27716],{"align":23860},"docker exec",[438,27718,27719],{"align":23860},"在一个正在运行的容器中执行命令。",[438,27721,27722],{"align":23860},"docker exec -it container_id bash",[392,27724,27725,27728,27731],{},[438,27726,27727],{"align":23860},"docker logs",[438,27729,27730],{"align":23860},"查看容器的日志输出。",[438,27732,27733],{"align":23860},"docker logs container_id",[392,27735,27736,27739,27742],{},[438,27737,27738],{"align":23860},"docker images",[438,27740,27741],{"align":23860},"列出本地所有镜像。",[438,27743,27738],{"align":23860},[392,27745,27746,27749,27752],{},[438,27747,27748],{"align":23860},"docker rmi",[438,27750,27751],{"align":23860},"删除一个或多个镜像。",[438,27753,27754],{"align":23860},"docker rmi myimage",[392,27756,27757,27760,27763],{},[438,27758,27759],{"align":23860},"docker network",[438,27761,27762],{"align":23860},"管理 Docker 网络。",[438,27764,27765],{"align":23860},"docker network ls",[392,27767,27768,27771,27774],{},[438,27769,27770],{"align":23860},"docker volume",[438,27772,27773],{"align":23860},"管理 Docker 数据卷。",[438,27775,27776],{"align":23860},"docker volume ls",[392,27778,27779,27782,27785],{},[438,27780,27781],{"align":23860},"docker-compose up",[438,27783,27784],{"align":23860},"启动 docker-compose.yml 中定义的所有服务。",[438,27786,27781],{"align":23860},[392,27788,27789,27792,27795],{},[438,27790,27791],{"align":23860},"docker-compose down",[438,27793,27794],{"align":23860},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[438,27796,27791],{"align":23860},[392,27798,27799,27802,27805],{},[438,27800,27801],{"align":23860},"docker info",[438,27803,27804],{"align":23860},"显示 Docker 系统的详细信息。",[438,27806,27801],{"align":23860},[392,27808,27809,27812,27815],{},[438,27810,27811],{"align":23860},"docker stats",[438,27813,27814],{"align":23860},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[438,27816,27811],{"align":23860},[392,27818,27819,27822,27825],{},[438,27820,27821],{"align":23860},"docker inspect",[438,27823,27824],{"align":23860},"查看容器或镜像的详细信息（JSON 格式）。",[438,27826,27827],{"align":23860},"docker inspect container_id",[392,27829,27830,27833,27836],{},[438,27831,27832],{"align":23860},"docker save",[438,27834,27835],{"align":23860},"将一个镜像保存为 tar 文件。",[438,27837,27838],{"align":23860},"docker save -o myimage.tar myimage",[392,27840,27841,27844,27847],{},[438,27842,27843],{"align":23860},"docker load",[438,27845,27846],{"align":23860},"从 tar 文件中加载镜像。",[438,27848,27849],{"align":23860},"docker load -i myimage.tar",[392,27851,27852,27855,27858],{},[438,27853,27854],{"align":23860},"docker tag",[438,27856,27857],{"align":23860},"为镜像添加标签（tag）。",[438,27859,27860],{"align":23860},"docker tag myimage myimage:v1",[392,27862,27863,27866,27869],{},[438,27864,27865],{"align":23860},"docker buildx build",[438,27867,27868],{"align":23860},"使用 Buildx 构建多架构镜像。",[438,27870,27871],{"align":23860},"docker buildx build -t myimage .",[392,27873,27874,27877,27880],{},[438,27875,27876],{"align":23860},"docker buildx create",[438,27878,27879],{"align":23860},"创建一个新的 Buildx 构建实例。",[438,27881,27882],{"align":23860},"docker buildx create –use",[392,27884,27885,27888,27891],{},[438,27886,27887],{"align":23860},"docker buildx ls",[438,27889,27890],{"align":23860},"列出所有可用的 Buildx 构建实例。",[438,27892,27887],{"align":23860},[392,27894,27895,27898,27901],{},[438,27896,27897],{"align":23860},"docker buildx use",[438,27899,27900],{"align":23860},"设置当前的 Buildx 构建实例。",[438,27902,27903],{"align":23860},"docker buildx use mybuilder",[392,27905,27906,27909,27912],{},[438,27907,27908],{"align":23860},"docker buildx bake",[438,27910,27911],{"align":23860},"使用 Bake 文件批量构建镜像。",[438,27913,27914],{"align":23860},"docker buildx bake -f bake.hcl",[392,27916,27917,27920,27923],{},[438,27918,27919],{"align":23860},"docker buildx build –push",[438,27921,27922],{"align":23860},"构建镜像并推送到镜像仓库。",[438,27924,27925],{"align":23860},"docker buildx build –push -t myimage .",[392,27927,27928,27931,27934],{},[438,27929,27930],{"align":23860},"docker buildx build –platform",[438,27932,27933],{"align":23860},"构建镜像并为多个平台生成支持。",[438,27935,27936],{"align":23860},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[21,27938,27939],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[21,27941,27942],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[21,27944,27945],{},"docker images 可以查看已经下载的镜像",[21,27947,27948],{},[24,27949],{"alt":26,"src":27950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[21,27952,27953],{},[398,27954,27955],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[21,27957,27958],{},"docker rmi $(docker images -q) 删除所有的镜像",[21,27960,27961],{},"docker container logs 查看容器日志",[21,27963,27964],{},"docker top 查看容器里的进程",[21,27966,27967],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[82,27969,27971],{"className":84,"code":27970,"language":86,"meta":26,"style":26},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[88,27972,27973],{"__ignoreMap":26},[91,27974,27975,27978,27981,27984],{"class":93,"line":94},[91,27976,27977],{"class":97},"如：docker",[91,27979,27980],{"class":101}," cp",[91,27982,27983],{"class":101}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[91,27985,27986],{"class":101}," \u002Fmydata\u002Fnginx\n",[21,27988,27989],{},"docker run时在启动容器的时候会有几个常用的选项：",[1256,27991,27992,27995,27998],{},[17,27993,27994],{},"-d选项：表示后台运行",[17,27996,27997],{},"-P选项：随机端口映射",[17,27999,28000],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[217,28002,28004],{"id":28003},"_53run命令的参数非常重要",[398,28005,28006],{},"5.3.run命令的参数（非常重要）",[386,28008,28009,28022],{},[389,28010,28011],{},[392,28012,28013,28016,28019],{},[395,28014,28015],{"align":23860},"参数\u002F配置",[395,28017,28018],{"align":23860},"功能说明",[395,28020,28021],{"align":23860},"重要性与参考依据",[433,28023,28024,28035,28046,28057,28068,28079,28090,28101,28112,28123,28134,28145,28156,28167,28178],{},[392,28025,28026,28029,28032],{},[438,28027,28028],{"align":23860},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[438,28030,28031],{"align":23860},"指定容器名称，便于后续管理",[438,28033,28034],{"align":23860},"替代随机生成的容器名。",[392,28036,28037,28040,28043],{},[438,28038,28039],{"align":23860},"–gpus all",[438,28041,28042],{"align":23860},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[438,28044,28045],{"align":23860},"用于CUDA加速等GPU依赖任务。",[392,28047,28048,28051,28054],{},[438,28049,28050],{"align":23860},"-e NVIDIA_DRIVER_CAPABILITIES=all",[438,28052,28053],{"align":23860},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[438,28055,28056],{"align":23860},"确保容器内GPU功能完整67。",[392,28058,28059,28062,28065],{},[438,28060,28061],{"align":23860},"-dit",[438,28063,28064],{"align":23860},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[438,28066,28067],{"align":23860},"允许容器在后台运行并支持交互操作。",[392,28069,28070,28073,28076],{},[438,28071,28072],{"align":23860},"–privileged",[438,28074,28075],{"align":23860},"赋予容器完全主机权限（可访问设备、内核模块等）",[438,28077,28078],{"align":23860},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[392,28080,28081,28084,28087],{},[438,28082,28083],{"align":23860},"–net=host",[438,28085,28086],{"align":23860},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[438,28088,28089],{"align":23860},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[392,28091,28092,28095,28098],{},[438,28093,28094],{"align":23860},"–group-add audio–group-add video–group-add dialout",[438,28096,28097],{"align":23860},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[438,28099,28100],{"align":23860},"避免权限问题（如避免无法调用摄像头、麦克风）。",[392,28102,28103,28106,28109],{},[438,28104,28105],{"align":23860},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[438,28107,28108],{"align":23860},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[438,28110,28111],{"align":23860},"支持容器内运行图形界面应用（如OpenCV可视化）。",[392,28113,28114,28117,28120],{},[438,28115,28116],{"align":23860},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[438,28118,28119],{"align":23860},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[438,28121,28122],{"align":23860},"实现容器内图形显示。",[392,28124,28125,28128,28131],{},[438,28126,28127],{"align":23860},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[438,28129,28130],{"align":23860},"挂载X11认证文件（只读）",[438,28132,28133],{"align":23860},"确保容器有权连接宿主机显示服务。",[392,28135,28136,28139,28142],{},[438,28137,28138],{"align":23860},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[438,28140,28141],{"align":23860},"挂载Wayland显示协议相关目录",[438,28143,28144],{"align":23860},"支持Wayland协议的图形显示。",[392,28146,28147,28150,28153],{},[438,28148,28149],{"align":23860},"–ulimit nofile=1024:524288",[438,28151,28152],{"align":23860},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[438,28154,28155],{"align":23860},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[392,28157,28158,28161,28164],{},[438,28159,28160],{"align":23860},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[438,28162,28163],{"align":23860},"挂载宿主机用户目录到容器内同名路径",[438,28165,28166],{"align":23860},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[392,28168,28169,28172,28175],{},[438,28170,28171],{"align":23860},"-w \u002Fhome\u002Ftungchiahui",[438,28173,28174],{"align":23860},"设置容器启动后的默认工作目录",[438,28176,28177],{"align":23860},"直接进入项目路径，方便执行命令2324。",[392,28179,28180,28183,28186],{},[438,28181,28182],{"align":23860},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[438,28184,28185],{"align":23860},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[438,28187,28188],{"align":23860},"提供预配置的深度学习与机器人开发环境。",[21,28190,28191,28192,28194,28195,28198],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[88,28193,24699],{},"加不加",[88,28196,28197],{},"sudo -E","都无所谓。",[21,28200,28201,28202,28204,28205,28207,28208,28211,28212,28214],{},"用户已经被加到docker组了，不用",[88,28203,24699],{},"也行跑，其次，",[88,28206,24699],{},"运行的话，你的",[88,28209,28210],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[88,28213,28210],{},"更不可能变了。",[82,28216,28218],{"className":84,"code":28217,"language":86,"meta":26,"style":26},"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",[88,28219,28220,28233,28243,28253,28265,28272,28279,28286,28296,28305,28314,28328,28340,28352,28361,28371,28380,28395,28428,28455,28466,28473],{"__ignoreMap":26},[91,28221,28222,28224,28226,28228,28231],{"class":93,"line":94},[91,28223,24699],{"class":97},[91,28225,26442],{"class":101},[91,28227,102],{"class":101},[91,28229,28230],{"class":105}," --name=ros_opencv_cuda",[91,28232,24801],{"class":105},[91,28234,28235,28238,28241],{"class":93,"line":38},[91,28236,28237],{"class":250},"--gpus ",[91,28239,28240],{"class":101},"all",[91,28242,24801],{"class":105},[91,28244,28245,28248,28251],{"class":93,"line":1304},[91,28246,28247],{"class":250},"-e ",[91,28249,28250],{"class":101},"NVIDIA_DRIVER_CAPABILITIES=all",[91,28252,24801],{"class":105},[91,28254,28255,28257,28260,28263],{"class":93,"line":1319},[91,28256,28247],{"class":250},[91,28258,28259],{"class":101},"DISPLAY=",[91,28261,28262],{"class":250},"$DISPLAY ",[91,28264,26297],{"class":105},[91,28266,28267,28270],{"class":93,"line":1325},[91,28268,28269],{"class":250},"-dit ",[91,28271,26297],{"class":105},[91,28273,28274,28277],{"class":93,"line":1339},[91,28275,28276],{"class":250},"--privileged ",[91,28278,26297],{"class":105},[91,28280,28281,28284],{"class":93,"line":1345},[91,28282,28283],{"class":250},"--net=host ",[91,28285,26297],{"class":105},[91,28287,28288,28291,28294],{"class":93,"line":1436},[91,28289,28290],{"class":250},"--group-add ",[91,28292,28293],{"class":101},"audio",[91,28295,24801],{"class":105},[91,28297,28298,28300,28303],{"class":93,"line":1442},[91,28299,28290],{"class":250},[91,28301,28302],{"class":101},"video",[91,28304,24801],{"class":105},[91,28306,28307,28309,28312],{"class":93,"line":1454},[91,28308,28290],{"class":250},[91,28310,28311],{"class":101},"dialout",[91,28313,24801],{"class":105},[91,28315,28316,28318,28321,28323,28326],{"class":93,"line":1736},[91,28317,28247],{"class":250},[91,28319,28320],{"class":101},"XAUTHORITY=",[91,28322,28210],{"class":250},[91,28324,28325],{"class":101},"\u002F.Xauthority",[91,28327,24801],{"class":105},[91,28329,28330,28332,28335,28338],{"class":93,"line":1741},[91,28331,28247],{"class":250},[91,28333,28334],{"class":101},"WAYLAND_DISPLAY=",[91,28336,28337],{"class":250},"$WAYLAND_DISPLAY ",[91,28339,26297],{"class":105},[91,28341,28342,28344,28347,28350],{"class":93,"line":1747},[91,28343,28247],{"class":250},[91,28345,28346],{"class":101},"XDG_RUNTIME_DIR=",[91,28348,28349],{"class":250},"$XDG_RUNTIME_DIR ",[91,28351,26297],{"class":105},[91,28353,28354,28356,28359],{"class":93,"line":1752},[91,28355,28247],{"class":250},[91,28357,28358],{"class":101},"QT_QPA_PLATFORM=xcb",[91,28360,24801],{"class":105},[91,28362,28363,28366,28369],{"class":93,"line":1766},[91,28364,28365],{"class":250},"-v ",[91,28367,28368],{"class":101},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[91,28370,24801],{"class":105},[91,28372,28373,28375,28378],{"class":93,"line":1771},[91,28374,28365],{"class":250},[91,28376,28377],{"class":101},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[91,28379,24801],{"class":105},[91,28381,28382,28385,28388,28390,28393],{"class":93,"line":1777},[91,28383,28384],{"class":250},"-v $HOME",[91,28386,28387],{"class":101},"\u002F.Xauthority:",[91,28389,28210],{"class":250},[91,28391,28392],{"class":101},"\u002F.Xauthority:ro",[91,28394,24801],{"class":105},[91,28396,28397,28399,28402,28404,28407,28410,28412,28415,28417,28419,28421,28423,28426],{"class":93,"line":1798},[91,28398,28365],{"class":250},[91,28400,28401],{"class":101},"\u002Frun\u002Fuser\u002F",[91,28403,25222],{"class":250},[91,28405,28406],{"class":97},"id",[91,28408,28409],{"class":105}," -u",[91,28411,678],{"class":250},[91,28413,28414],{"class":101},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[91,28416,25222],{"class":250},[91,28418,28406],{"class":97},[91,28420,28409],{"class":105},[91,28422,678],{"class":250},[91,28424,28425],{"class":101},"\u002Fwayland-0",[91,28427,24801],{"class":105},[91,28429,28430,28432,28434,28436,28438,28440,28442,28445,28447,28449,28451,28453],{"class":93,"line":1803},[91,28431,28365],{"class":250},[91,28433,28401],{"class":101},[91,28435,25222],{"class":250},[91,28437,28406],{"class":97},[91,28439,28409],{"class":105},[91,28441,678],{"class":250},[91,28443,28444],{"class":101},":\u002Frun\u002Fuser\u002F",[91,28446,25222],{"class":250},[91,28448,28406],{"class":97},[91,28450,28409],{"class":105},[91,28452,13837],{"class":250},[91,28454,26297],{"class":105},[91,28456,28457,28459,28461,28464],{"class":93,"line":1817},[91,28458,28384],{"class":250},[91,28460,1108],{"class":101},[91,28462,28463],{"class":250},"$HOME ",[91,28465,26297],{"class":105},[91,28467,28468,28471],{"class":93,"line":1822},[91,28469,28470],{"class":250},"-w $HOME ",[91,28472,26297],{"class":105},[91,28474,28475],{"class":93,"line":1851},[91,28476,28477],{"class":250},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[21,28479,9148],{},[14,28481,28482,28490,28493,28496],{},[17,28483,28484,13918,28486,28489],{},[88,28485,28250],{},[88,28487,28488],{},"--gpus all","没有英伟达显卡请注释。",[17,28491,28492],{},"--name后面请自己为容器起名。",[17,28494,28495],{},"最后一行仓库名称请你自己找对应的镜像填上。",[17,28497,28498,28499,28504],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23677,28500,28501],{},[398,28502,28503],{},"请不要加","。",[82,28506,28508],{"className":84,"code":28507,"language":86,"meta":26,"style":26},"--ulimit nofile=1024:524288 \\\n",[88,28509,28510],{"__ignoreMap":26},[91,28511,28512,28515,28518],{"class":93,"line":94},[91,28513,28514],{"class":97},"--ulimit",[91,28516,28517],{"class":101}," nofile=1024:524288",[91,28519,24801],{"class":105},[21,28521,28522,28523,28528],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23677,28524,28525],{},[398,28526,28527],{},"不建议","**.**",[82,28530,28532],{"className":84,"code":28531,"language":86,"meta":26,"style":26},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[88,28533,28534,28561,28570],{"__ignoreMap":26},[91,28535,28536,28539,28542,28544,28546,28548,28550,28552,28554,28557,28559],{"class":93,"line":94},[91,28537,28538],{"class":97},"--user",[91,28540,28541],{"class":250}," $(",[91,28543,28406],{"class":97},[91,28545,28409],{"class":105},[91,28547,678],{"class":250},[91,28549,1108],{"class":101},[91,28551,25222],{"class":250},[91,28553,28406],{"class":97},[91,28555,28556],{"class":105}," -g",[91,28558,13837],{"class":250},[91,28560,26297],{"class":105},[91,28562,28563,28565,28568],{"class":93,"line":38},[91,28564,28365],{"class":250},[91,28566,28567],{"class":101},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[91,28569,24801],{"class":105},[91,28571,28572,28574,28577],{"class":93,"line":1304},[91,28573,28365],{"class":250},[91,28575,28576],{"class":101},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[91,28578,24801],{"class":105},[168,28580,28581],{},"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":26,"searchDepth":38,"depth":38,"links":28583},[28584,28585,28586],{"id":27582,"depth":1304,"text":27583},{"id":27592,"depth":1304,"text":27593},{"id":28003,"depth":1304,"text":28006},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27574,"description":26},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28593,"title":28594,"body":28595,"description":26,"extension":173,"meta":30218,"navigation":175,"path":30219,"seo":30220,"stem":30221,"__hash__":30222},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28596,"toc":30213},[28597,28600,28604,28607,28829,28833,28837,28840,28946,28951,28954,28959,28962,28967,28970,28975,28978,28990,28993,28998,29005,29033,29040,29116,29121,29124,29147,29149,29224,29229,29232,29236,29244,29249,29254,29258,29269,29275,29278,29281,29305,29308,29311,29339,29342,29345,29810,29813,29818,29823,29827,29850,29855,29859,29863,29866,29869,29872,29899,29902,29905,29923,29926,29929,29951,29959,29964,29969,29973,29976,29979,29982,29985,30030,30033,30051,30054,30059,30062,30083,30086,30142,30145,30150,30154,30157,30164,30167,30170,30175,30178,30194,30197,30210],[10,28598,28594],{"id":28599},"_6手动创建docker镜像",[217,28601,28603],{"id":28602},"_61dockerfile","6.1.DockerFile",[21,28605,28606],{},"常用命令：",[386,28608,28609,28620],{},[389,28610,28611],{},[392,28612,28613,28616,28618],{},[395,28614,28615],{"align":23860},"指令",[395,28617,25991],{"align":23860},[395,28619,27611],{"align":23860},[433,28621,28622,28632,28648,28659,28670,28681,28692,28703,28714,28728,28742,28753,28767,28778,28789,28803,28818],{},[392,28623,28624,28626,28629],{},[438,28625,27489],{"align":23860},[438,28627,28628],{"align":23860},"指定基础镜像，是 Dockerfile 的起点",[438,28630,28631],{"align":23860},"FROM ubuntu:22.04",[392,28633,28634,28637,28640],{},[438,28635,28636],{"align":23860},"LABEL",[438,28638,28639],{"align":23860},"添加元数据（如作者、版本等）",[438,28641,28642,28643,28647],{"align":23860},"LABEL maintainer=”",[487,28644,28646],{"href":28645},"mailto:you@example.com","you@example.com","”",[392,28649,28650,28653,28656],{},[438,28651,28652],{"align":23860},"ENV",[438,28654,28655],{"align":23860},"设置环境变量",[438,28657,28658],{"align":23860},"ENV PORT=8080",[392,28660,28661,28664,28667],{},[438,28662,28663],{"align":23860},"ARG",[438,28665,28666],{"align":23860},"构建参数，只在构建期间可用",[438,28668,28669],{"align":23860},"ARG VERSION=1.0",[392,28671,28672,28675,28678],{},[438,28673,28674],{"align":23860},"RUN",[438,28676,28677],{"align":23860},"构建镜像时运行命令",[438,28679,28680],{"align":23860},"RUN apt-get update && apt-get install -y curl",[392,28682,28683,28686,28689],{},[438,28684,28685],{"align":23860},"COPY",[438,28687,28688],{"align":23860},"复制文件到镜像中",[438,28690,28691],{"align":23860},"COPY . \u002Fapp",[392,28693,28694,28697,28700],{},[438,28695,28696],{"align":23860},"ADD",[438,28698,28699],{"align":23860},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[438,28701,28702],{"align":23860},"ADD archive.tar.gz \u002Fdata\u002F",[392,28704,28705,28708,28711],{},[438,28706,28707],{"align":23860},"WORKDIR",[438,28709,28710],{"align":23860},"设置工作目录",[438,28712,28713],{"align":23860},"WORKDIR \u002Fopt",[392,28715,28716,28719,28722],{},[438,28717,28718],{"align":23860},"CMD",[438,28720,28721],{"align":23860},"设置容器启动时默认命令（可被 docker run 覆盖）",[438,28723,28724,28725],{"align":23860},"CMD ",[91,28726,28727],{},"“node”, “index.js”",[392,28729,28730,28733,28736],{},[438,28731,28732],{"align":23860},"ENTRYPOINT",[438,28734,28735],{"align":23860},"设置容器启动时固定命令（通常用于 CLI 工具等）",[438,28737,28738,28739],{"align":23860},"ENTRYPOINT ",[91,28740,28741],{},"“python3”",[392,28743,28744,28747,28750],{},[438,28745,28746],{"align":23860},"EXPOSE",[438,28748,28749],{"align":23860},"声明镜像内服务监听的端口（不会自动映射）",[438,28751,28752],{"align":23860},"EXPOSE 80",[392,28754,28755,28758,28761],{},[438,28756,28757],{"align":23860},"VOLUME",[438,28759,28760],{"align":23860},"声明数据卷挂载点",[438,28762,28763,28764],{"align":23860},"VOLUME ",[91,28765,28766],{},"“\u002Fdata”",[392,28768,28769,28772,28775],{},[438,28770,28771],{"align":23860},"USER",[438,28773,28774],{"align":23860},"设置后续命令执行的用户",[438,28776,28777],{"align":23860},"USER appuser",[392,28779,28780,28783,28786],{},[438,28781,28782],{"align":23860},"ONBUILD",[438,28784,28785],{"align":23860},"当镜像作为其他镜像基础镜像时触发的构建指令",[438,28787,28788],{"align":23860},"ONBUILD COPY . \u002Fsrc",[392,28790,28791,28794,28797],{},[438,28792,28793],{"align":23860},"SHELL",[438,28795,28796],{"align":23860},"更改默认 shell，比如将 sh -c 改为 bash -c",[438,28798,28799,28800],{"align":23860},"SHELL ",[91,28801,28802],{},"“\u002Fbin\u002Fbash”, “-c”",[392,28804,28805,28808,28811],{},[438,28806,28807],{"align":23860},"HEALTHCHECK",[438,28809,28810],{"align":23860},"定义容器运行时的健康检查命令",[438,28812,28813,28814],{"align":23860},"`HEALTHCHECK CMD curl –fail ",[487,28815,28816],{"href":28816,"rel":28817},"http:\u002F\u002Flocalhost:8080",[23987],[392,28819,28820,28823,28826],{},[438,28821,28822],{"align":23860},"STOPSIGNAL",[438,28824,28825],{"align":23860},"容器停止时发送的信号",[438,28827,28828],{"align":23860},"STOPSIGNAL SIGKILL",[217,28830,28832],{"id":28831},"_62自己创建容器","6.2.自己创建容器",[22121,28834,28836],{"id":28835},"_621手动创建","6.2.1.手动创建",[21,28838,28839],{},"在x86电脑上编译x86的：",[82,28841,28843],{"className":84,"code":28842,"language":86,"meta":26,"style":26},"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",[88,28844,28845,28861,28865,28878,28882,28895,28899,28912,28916,28929,28933],{"__ignoreMap":26},[91,28846,28847,28849,28852,28855,28858],{"class":93,"line":94},[91,28848,98],{"class":97},[91,28850,28851],{"class":101}," build",[91,28853,28854],{"class":105}," -t",[91,28856,28857],{"class":101}," ros-melodic-cuda118-cudnn8-bionic:latest",[91,28859,28860],{"class":101}," .\n",[91,28862,28863],{"class":93,"line":38},[91,28864,2523],{"emptyLinePlaceholder":175},[91,28866,28867,28869,28871,28873,28876],{"class":93,"line":1304},[91,28868,98],{"class":97},[91,28870,28851],{"class":101},[91,28872,28854],{"class":105},[91,28874,28875],{"class":101}," ros-noetic-focal:latest",[91,28877,28860],{"class":101},[91,28879,28880],{"class":93,"line":1319},[91,28881,2523],{"emptyLinePlaceholder":175},[91,28883,28884,28886,28888,28890,28893],{"class":93,"line":1325},[91,28885,98],{"class":97},[91,28887,28851],{"class":101},[91,28889,28854],{"class":105},[91,28891,28892],{"class":101}," ros-humble-jammy:latest",[91,28894,28860],{"class":101},[91,28896,28897],{"class":93,"line":1339},[91,28898,2523],{"emptyLinePlaceholder":175},[91,28900,28901,28903,28905,28907,28910],{"class":93,"line":1345},[91,28902,98],{"class":97},[91,28904,28851],{"class":101},[91,28906,28854],{"class":105},[91,28908,28909],{"class":101}," ros-jazzy-noble:latest",[91,28911,28860],{"class":101},[91,28913,28914],{"class":93,"line":1436},[91,28915,2523],{"emptyLinePlaceholder":175},[91,28917,28918,28920,28922,28924,28927],{"class":93,"line":1442},[91,28919,98],{"class":97},[91,28921,28851],{"class":101},[91,28923,28854],{"class":105},[91,28925,28926],{"class":101}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[91,28928,28860],{"class":101},[91,28930,28931],{"class":93,"line":1454},[91,28932,2523],{"emptyLinePlaceholder":175},[91,28934,28935,28937,28939,28941,28944],{"class":93,"line":1736},[91,28936,98],{"class":97},[91,28938,28851],{"class":101},[91,28940,28854],{"class":105},[91,28942,28943],{"class":101}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[91,28945,28860],{"class":101},[21,28947,28948],{},[24,28949],{"alt":26,"src":28950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[21,28952,28953],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[21,28955,28956],{},[24,28957],{"alt":26,"src":28958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[21,28960,28961],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[14,28963,28964],{},[17,28965,28966],{},"创建 Docker Hub 账户",[21,28968,28969],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[14,28971,28972],{"start":38},[17,28973,28974],{},"登录 Docker Hub",[21,28976,28977],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[82,28979,28981],{"className":84,"code":28980,"language":86,"meta":26,"style":26},"docker login\n",[88,28982,28983],{"__ignoreMap":26},[91,28984,28985,28987],{"class":93,"line":94},[91,28986,98],{"class":97},[91,28988,28989],{"class":101}," login\n",[21,28991,28992],{},"输入你的 Docker Hub 用户名和密码进行验证。",[14,28994,28995],{},[17,28996,28997],{},"为你的镜像打标签",[21,28999,29000,29001,29004],{},"Docker Hub 使用 ",[88,29002,29003],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[82,29006,29008],{"className":84,"code":29007,"language":86,"meta":26,"style":26},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[88,29009,29010],{"__ignoreMap":26},[91,29011,29012,29014,29017,29019,29022,29025,29028,29030],{"class":93,"line":94},[91,29013,98],{"class":97},[91,29015,29016],{"class":101}," tag",[91,29018,28909],{"class":101},[91,29020,29021],{"class":153}," \u003C",[91,29023,29024],{"class":101},"你的用户",[91,29026,29027],{"class":250},"名",[91,29029,1209],{"class":153},[91,29031,29032],{"class":101},"\u002Fros-jazzy-noble:latest\n",[21,29034,29035,29036,29039],{},"例如，如果你的 Docker Hub 用户名是 ",[88,29037,29038],{},"tungchiahui","，你应该执行：",[82,29041,29043],{"className":84,"code":29042,"language":86,"meta":26,"style":26},"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",[88,29044,29045,29056,29060,29071,29075,29086,29090,29101,29105],{"__ignoreMap":26},[91,29046,29047,29049,29051,29053],{"class":93,"line":94},[91,29048,98],{"class":97},[91,29050,29016],{"class":101},[91,29052,28875],{"class":101},[91,29054,29055],{"class":101}," tungchiahui\u002Fros-noetic-focal:latest\n",[91,29057,29058],{"class":93,"line":38},[91,29059,2523],{"emptyLinePlaceholder":175},[91,29061,29062,29064,29066,29068],{"class":93,"line":1304},[91,29063,98],{"class":97},[91,29065,29016],{"class":101},[91,29067,28892],{"class":101},[91,29069,29070],{"class":101}," tungchiahui\u002Fros-humble-jammy:latest\n",[91,29072,29073],{"class":93,"line":1319},[91,29074,2523],{"emptyLinePlaceholder":175},[91,29076,29077,29079,29081,29083],{"class":93,"line":1325},[91,29078,98],{"class":97},[91,29080,29016],{"class":101},[91,29082,28909],{"class":101},[91,29084,29085],{"class":101}," tungchiahui\u002Fros-jazzy-noble:latest\n",[91,29087,29088],{"class":93,"line":1339},[91,29089,2523],{"emptyLinePlaceholder":175},[91,29091,29092,29094,29096,29098],{"class":93,"line":1345},[91,29093,98],{"class":97},[91,29095,29016],{"class":101},[91,29097,28926],{"class":101},[91,29099,29100],{"class":101}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[91,29102,29103],{"class":93,"line":1436},[91,29104,2523],{"emptyLinePlaceholder":175},[91,29106,29107,29109,29111,29113],{"class":93,"line":1442},[91,29108,98],{"class":97},[91,29110,29016],{"class":101},[91,29112,28943],{"class":101},[91,29114,29115],{"class":101}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[14,29117,29118],{"start":38},[17,29119,29120],{},"推送镜像到 Docker Hub",[21,29122,29123],{},"使用以下命令将镜像推送到 Docker Hub：",[82,29125,29127],{"className":84,"code":29126,"language":86,"meta":26,"style":26},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[88,29128,29129],{"__ignoreMap":26},[91,29130,29131,29133,29136,29138,29140,29142,29144],{"class":93,"line":94},[91,29132,98],{"class":97},[91,29134,29135],{"class":101}," push",[91,29137,29021],{"class":153},[91,29139,29024],{"class":101},[91,29141,29027],{"class":250},[91,29143,1209],{"class":153},[91,29145,29146],{"class":101},"\u002Fros-noetic-jazzy-noble:latest\n",[21,29148,14756],{},[82,29150,29152],{"className":84,"code":29151,"language":86,"meta":26,"style":26},"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",[88,29153,29154,29162,29166,29174,29178,29186,29190,29199,29203,29211,29215],{"__ignoreMap":26},[91,29155,29156,29158,29160],{"class":93,"line":94},[91,29157,98],{"class":97},[91,29159,29135],{"class":101},[91,29161,29055],{"class":101},[91,29163,29164],{"class":93,"line":38},[91,29165,2523],{"emptyLinePlaceholder":175},[91,29167,29168,29170,29172],{"class":93,"line":1304},[91,29169,98],{"class":97},[91,29171,29135],{"class":101},[91,29173,29070],{"class":101},[91,29175,29176],{"class":93,"line":1319},[91,29177,2523],{"emptyLinePlaceholder":175},[91,29179,29180,29182,29184],{"class":93,"line":1325},[91,29181,98],{"class":97},[91,29183,29135],{"class":101},[91,29185,29085],{"class":101},[91,29187,29188],{"class":93,"line":1339},[91,29189,2523],{"emptyLinePlaceholder":175},[91,29191,29192,29194,29196],{"class":93,"line":1345},[91,29193,98],{"class":97},[91,29195,29135],{"class":101},[91,29197,29198],{"class":101}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[91,29200,29201],{"class":93,"line":1436},[91,29202,2523],{"emptyLinePlaceholder":175},[91,29204,29205,29207,29209],{"class":93,"line":1442},[91,29206,98],{"class":97},[91,29208,29135],{"class":101},[91,29210,29115],{"class":101},[91,29212,29213],{"class":93,"line":1454},[91,29214,2523],{"emptyLinePlaceholder":175},[91,29216,29217,29219,29221],{"class":93,"line":1736},[91,29218,98],{"class":97},[91,29220,29135],{"class":101},[91,29222,29223],{"class":101}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[14,29225,29226],{"start":1304},[17,29227,29228],{},"验证推送成功",[21,29230,29231],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[21,29233,29234],{},[398,29235,3907],{},[1256,29237,29238,29241],{},[17,29239,29240],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[17,29242,29243],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[21,29245,29246],{},[24,29247],{"alt":26,"src":29248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[21,29250,29251],{},[24,29252],{"alt":26,"src":29253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22121,29255,29257],{"id":29256},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[21,29259,29260,29261,29264,29265,29268],{},"如果您想在 ",[398,29262,29263],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[398,29266,29267],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[21,29270,29271,29272],{},"1. ",[398,29273,29274],{},"启用 Docker 跨平台构建",[21,29276,29277],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[21,29279,29280],{},"第一步：启用 buildx（只需执行一次）",[82,29282,29284],{"className":84,"code":29283,"language":86,"meta":26,"style":26},"docker buildx create --name multiarch_builder --use\n",[88,29285,29286],{"__ignoreMap":26},[91,29287,29288,29290,29293,29296,29299,29302],{"class":93,"line":94},[91,29289,98],{"class":97},[91,29291,29292],{"class":101}," buildx",[91,29294,29295],{"class":101}," create",[91,29297,29298],{"class":105}," --name",[91,29300,29301],{"class":101}," multiarch_builder",[91,29303,29304],{"class":105}," --use\n",[21,29306,29307],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[21,29309,29310],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[82,29312,29314],{"className":84,"code":29313,"language":86,"meta":26,"style":26},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[88,29315,29316],{"__ignoreMap":26},[91,29317,29318,29320,29322,29324,29327,29330,29333,29336],{"class":93,"line":94},[91,29319,98],{"class":97},[91,29321,102],{"class":101},[91,29323,27352],{"class":105},[91,29325,29326],{"class":105}," --privileged",[91,29328,29329],{"class":101}," multiarch\u002Fqemu-user-static",[91,29331,29332],{"class":105}," --reset",[91,29334,29335],{"class":105}," -p",[91,29337,29338],{"class":101}," yes\n",[21,29340,29341],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[21,29343,29344],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[82,29346,29348],{"className":84,"code":29347,"language":86,"meta":26,"style":26},"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",[88,29349,29350,29392,29396,29401,29411,29421,29430,29436,29440,29444,29454,29462,29471,29477,29481,29485,29495,29503,29512,29518,29522,29526,29536,29544,29553,29559,29563,29567,29577,29585,29594,29600,29604,29608,29618,29626,29635,29641,29645,29649,29659,29667,29676,29682,29686,29690,29700,29708,29717,29723,29727,29731,29741,29749,29758,29764,29768,29772,29783,29791,29800,29806],{"__ignoreMap":26},[91,29351,29352,29354,29356,29358,29361,29364,29366,29368,29371,29373,29375,29377,29379,29382,29385,29387,29390],{"class":93,"line":94},[91,29353,98],{"class":97},[91,29355,29292],{"class":101},[91,29357,28851],{"class":101},[91,29359,29360],{"class":105}," --platform",[91,29362,29363],{"class":101}," linux\u002Famd64,linux\u002Farm64",[91,29365,28854],{"class":105},[91,29367,29021],{"class":153},[91,29369,29370],{"class":101},"你的镜像",[91,29372,29027],{"class":250},[91,29374,1209],{"class":153},[91,29376,1108],{"class":101},[91,29378,1159],{"class":153},[91,29380,29381],{"class":101},"标",[91,29383,29384],{"class":250},"签",[91,29386,1209],{"class":153},[91,29388,29389],{"class":105}," --push",[91,29391,28860],{"class":101},[91,29393,29394],{"class":93,"line":38},[91,29395,2523],{"emptyLinePlaceholder":175},[91,29397,29398],{"class":93,"line":1304},[91,29399,29400],{"class":308},"# 例子：\n",[91,29402,29403,29405,29407,29409],{"class":93,"line":1319},[91,29404,98],{"class":97},[91,29406,29292],{"class":101},[91,29408,28851],{"class":101},[91,29410,24801],{"class":105},[91,29412,29413,29416,29419],{"class":93,"line":1325},[91,29414,29415],{"class":250},"--platform ",[91,29417,29418],{"class":101},"linux\u002Famd64,linux\u002Farm64",[91,29420,24801],{"class":105},[91,29422,29423,29425,29428],{"class":93,"line":1339},[91,29424,28854],{"class":105},[91,29426,29427],{"class":101}," tungchiahui\u002Fros:noetic-focal",[91,29429,24801],{"class":105},[91,29431,29432,29434],{"class":93,"line":1345},[91,29433,29389],{"class":105},[91,29435,24801],{"class":105},[91,29437,29438],{"class":93,"line":1436},[91,29439,28860],{"class":101},[91,29441,29442],{"class":93,"line":1442},[91,29443,2523],{"emptyLinePlaceholder":175},[91,29445,29446,29448,29450,29452],{"class":93,"line":1454},[91,29447,98],{"class":97},[91,29449,29292],{"class":101},[91,29451,28851],{"class":101},[91,29453,24801],{"class":105},[91,29455,29456,29458,29460],{"class":93,"line":1736},[91,29457,29415],{"class":250},[91,29459,29418],{"class":101},[91,29461,24801],{"class":105},[91,29463,29464,29466,29469],{"class":93,"line":1741},[91,29465,28854],{"class":105},[91,29467,29468],{"class":101}," tungchiahui\u002Fros:humble-jammy",[91,29470,24801],{"class":105},[91,29472,29473,29475],{"class":93,"line":1747},[91,29474,29389],{"class":105},[91,29476,24801],{"class":105},[91,29478,29479],{"class":93,"line":1752},[91,29480,28860],{"class":101},[91,29482,29483],{"class":93,"line":1766},[91,29484,2523],{"emptyLinePlaceholder":175},[91,29486,29487,29489,29491,29493],{"class":93,"line":1771},[91,29488,98],{"class":97},[91,29490,29292],{"class":101},[91,29492,28851],{"class":101},[91,29494,24801],{"class":105},[91,29496,29497,29499,29501],{"class":93,"line":1777},[91,29498,29415],{"class":250},[91,29500,29418],{"class":101},[91,29502,24801],{"class":105},[91,29504,29505,29507,29510],{"class":93,"line":1798},[91,29506,28854],{"class":105},[91,29508,29509],{"class":101}," tungchiahui\u002Fros:jazzy-noble",[91,29511,24801],{"class":105},[91,29513,29514,29516],{"class":93,"line":1803},[91,29515,29389],{"class":105},[91,29517,24801],{"class":105},[91,29519,29520],{"class":93,"line":1817},[91,29521,28860],{"class":101},[91,29523,29524],{"class":93,"line":1822},[91,29525,2523],{"emptyLinePlaceholder":175},[91,29527,29528,29530,29532,29534],{"class":93,"line":1851},[91,29529,26442],{"class":97},[91,29531,29292],{"class":101},[91,29533,28851],{"class":101},[91,29535,24801],{"class":105},[91,29537,29538,29540,29542],{"class":93,"line":1856},[91,29539,29415],{"class":250},[91,29541,29418],{"class":101},[91,29543,24801],{"class":105},[91,29545,29546,29548,29551],{"class":93,"line":1873},[91,29547,28854],{"class":105},[91,29549,29550],{"class":101}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[91,29552,24801],{"class":105},[91,29554,29555,29557],{"class":93,"line":1878},[91,29556,29389],{"class":105},[91,29558,24801],{"class":105},[91,29560,29561],{"class":93,"line":1883},[91,29562,28860],{"class":101},[91,29564,29565],{"class":93,"line":1888},[91,29566,2523],{"emptyLinePlaceholder":175},[91,29568,29569,29571,29573,29575],{"class":93,"line":1902},[91,29570,98],{"class":97},[91,29572,29292],{"class":101},[91,29574,28851],{"class":101},[91,29576,24801],{"class":105},[91,29578,29579,29581,29583],{"class":93,"line":1907},[91,29580,29415],{"class":250},[91,29582,29418],{"class":101},[91,29584,24801],{"class":105},[91,29586,29587,29589,29592],{"class":93,"line":2700},[91,29588,28854],{"class":105},[91,29590,29591],{"class":101}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[91,29593,24801],{"class":105},[91,29595,29596,29598],{"class":93,"line":2714},[91,29597,29389],{"class":105},[91,29599,24801],{"class":105},[91,29601,29602],{"class":93,"line":2722},[91,29603,28860],{"class":101},[91,29605,29606],{"class":93,"line":2727},[91,29607,2523],{"emptyLinePlaceholder":175},[91,29609,29610,29612,29614,29616],{"class":93,"line":2733},[91,29611,26442],{"class":97},[91,29613,29292],{"class":101},[91,29615,28851],{"class":101},[91,29617,24801],{"class":105},[91,29619,29620,29622,29624],{"class":93,"line":2739},[91,29621,29415],{"class":250},[91,29623,29418],{"class":101},[91,29625,24801],{"class":105},[91,29627,29628,29630,29633],{"class":93,"line":2744},[91,29629,28854],{"class":105},[91,29631,29632],{"class":101}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[91,29634,24801],{"class":105},[91,29636,29637,29639],{"class":93,"line":8071},[91,29638,29389],{"class":105},[91,29640,24801],{"class":105},[91,29642,29643],{"class":93,"line":8095},[91,29644,28860],{"class":101},[91,29646,29647],{"class":93,"line":8100},[91,29648,2523],{"emptyLinePlaceholder":175},[91,29650,29651,29653,29655,29657],{"class":93,"line":8106},[91,29652,98],{"class":97},[91,29654,29292],{"class":101},[91,29656,28851],{"class":101},[91,29658,24801],{"class":105},[91,29660,29661,29663,29665],{"class":93,"line":8133},[91,29662,29415],{"class":250},[91,29664,29418],{"class":101},[91,29666,24801],{"class":105},[91,29668,29669,29671,29674],{"class":93,"line":8138},[91,29670,28854],{"class":105},[91,29672,29673],{"class":101}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[91,29675,24801],{"class":105},[91,29677,29678,29680],{"class":93,"line":8144},[91,29679,29389],{"class":105},[91,29681,24801],{"class":105},[91,29683,29684],{"class":93,"line":8156},[91,29685,28860],{"class":101},[91,29687,29688],{"class":93,"line":8168},[91,29689,2523],{"emptyLinePlaceholder":175},[91,29691,29692,29694,29696,29698],{"class":93,"line":8180},[91,29693,98],{"class":97},[91,29695,29292],{"class":101},[91,29697,28851],{"class":101},[91,29699,24801],{"class":105},[91,29701,29702,29704,29706],{"class":93,"line":9839},[91,29703,29415],{"class":250},[91,29705,29418],{"class":101},[91,29707,24801],{"class":105},[91,29709,29710,29712,29715],{"class":93,"line":9864},[91,29711,28854],{"class":105},[91,29713,29714],{"class":101}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[91,29716,24801],{"class":105},[91,29718,29719,29721],{"class":93,"line":9887},[91,29720,29389],{"class":105},[91,29722,24801],{"class":105},[91,29724,29725],{"class":93,"line":9911},[91,29726,28860],{"class":101},[91,29728,29729],{"class":93,"line":9916},[91,29730,2523],{"emptyLinePlaceholder":175},[91,29732,29733,29735,29737,29739],{"class":93,"line":9921},[91,29734,26442],{"class":97},[91,29736,29292],{"class":101},[91,29738,28851],{"class":101},[91,29740,24801],{"class":105},[91,29742,29743,29745,29747],{"class":93,"line":9926},[91,29744,29415],{"class":250},[91,29746,29418],{"class":101},[91,29748,24801],{"class":105},[91,29750,29751,29753,29756],{"class":93,"line":9935},[91,29752,28854],{"class":105},[91,29754,29755],{"class":101}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[91,29757,24801],{"class":105},[91,29759,29760,29762],{"class":93,"line":9940},[91,29761,29389],{"class":105},[91,29763,24801],{"class":105},[91,29765,29766],{"class":93,"line":9946},[91,29767,28860],{"class":101},[91,29769,29770],{"class":93,"line":9967},[91,29771,2523],{"emptyLinePlaceholder":175},[91,29773,29774,29777,29779,29781],{"class":93,"line":9973},[91,29775,29776],{"class":97},"  docker",[91,29778,29292],{"class":101},[91,29780,28851],{"class":101},[91,29782,24801],{"class":105},[91,29784,29785,29787,29789],{"class":93,"line":9987},[91,29786,29415],{"class":250},[91,29788,29418],{"class":101},[91,29790,24801],{"class":105},[91,29792,29793,29795,29798],{"class":93,"line":9993},[91,29794,28854],{"class":105},[91,29796,29797],{"class":101}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[91,29799,24801],{"class":105},[91,29801,29802,29804],{"class":93,"line":10020},[91,29803,29389],{"class":105},[91,29805,24801],{"class":105},[91,29807,29808],{"class":93,"line":10029},[91,29809,28860],{"class":101},[21,29811,29812],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[21,29814,29815],{},[24,29816],{"alt":26,"src":29817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[21,29819,29820],{},[24,29821],{"alt":26,"src":29822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22121,29824,29826],{"id":29825},"_623清除构建缓存","6.2.3.清除构建缓存",[82,29828,29830],{"className":84,"code":29829,"language":86,"meta":26,"style":26},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[88,29831,29832,29837],{"__ignoreMap":26},[91,29833,29834],{"class":93,"line":94},[91,29835,29836],{"class":308},"# 清理BuildKit构建缓存\n",[91,29838,29839,29841,29844,29847],{"class":93,"line":38},[91,29840,98],{"class":97},[91,29842,29843],{"class":101}," builder",[91,29845,29846],{"class":101}," prune",[91,29848,29849],{"class":105}," -f\n",[21,29851,29852],{},[24,29853],{"alt":26,"src":29854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[217,29856,29858],{"id":29857},"_63补充","6.3.补充",[22121,29860,29862],{"id":29861},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[21,29864,29865],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[21,29867,29868],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[21,29870,29871],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[82,29873,29875],{"className":84,"code":29874,"language":86,"meta":26,"style":26},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[88,29876,29877,29884],{"__ignoreMap":26},[91,29878,29879,29881],{"class":93,"line":94},[91,29880,27489],{"class":97},[91,29882,29883],{"class":101}," nginx\n",[91,29885,29886,29888,29891,29894,29896],{"class":93,"line":38},[91,29887,28674],{"class":97},[91,29889,29890],{"class":101}," echo",[91,29892,29893],{"class":101}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[91,29895,26344],{"class":153},[91,29897,29898],{"class":101}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[21,29900,29901],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[21,29903,29904],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[82,29906,29908],{"className":84,"code":29907,"language":86,"meta":26,"style":26},"docker build -t nginx:tuling .\n",[88,29909,29910],{"__ignoreMap":26},[91,29911,29912,29914,29916,29918,29921],{"class":93,"line":94},[91,29913,98],{"class":97},[91,29915,28851],{"class":101},[91,29917,28854],{"class":105},[91,29919,29920],{"class":101}," nginx:tuling",[91,29922,28860],{"class":101},[21,29924,29925],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[21,29927,29928],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[82,29930,29932],{"className":84,"code":29931,"language":86,"meta":26,"style":26},"docker run -d -p 92:80 nginx:tuling\n",[88,29933,29934],{"__ignoreMap":26},[91,29935,29936,29938,29940,29943,29945,29948],{"class":93,"line":94},[91,29937,98],{"class":97},[91,29939,102],{"class":101},[91,29941,29942],{"class":105}," -d",[91,29944,29335],{"class":105},[91,29946,29947],{"class":101}," 92:80",[91,29949,29950],{"class":101}," nginx:tuling\n",[21,29952,29953,29954],{},"4、访问 ",[487,29955,29958],{"href":29956,"rel":29957},"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",[23987],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[21,29960,29961],{},[24,29962],{"alt":26,"src":29963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[21,29965,29966],{},[24,29967],{"alt":26,"src":29968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22121,29970,29972],{"id":29971},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[21,29974,29975],{},"只需要知道大体流程即可",[21,29977,29978],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[21,29980,29981],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[21,29983,29984],{},"2、在Dockerfile中添加以下内容",[82,29986,29988],{"className":26213,"code":29987,"language":26215,"meta":26,"style":26},"# 基于哪个镜像\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",[88,29989,29990,29995,30000,30005,30010,30015,30020,30025],{"__ignoreMap":26},[91,29991,29992],{"class":93,"line":94},[91,29993,29994],{},"# 基于哪个镜像\n",[91,29996,29997],{"class":93,"line":38},[91,29998,29999],{},"From java:8\n",[91,30001,30002],{"class":93,"line":1304},[91,30003,30004],{},"# 复制文件到容器\n",[91,30006,30007],{"class":93,"line":1319},[91,30008,30009],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[91,30011,30012],{"class":93,"line":1325},[91,30013,30014],{},"# 声明需要暴露的端口\n",[91,30016,30017],{"class":93,"line":1339},[91,30018,30019],{},"EXPOSE 8877\n",[91,30021,30022],{"class":93,"line":1345},[91,30023,30024],{},"# 配置容器启动后执行的命令\n",[91,30026,30027],{"class":93,"line":1436},[91,30028,30029],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[21,30031,30032],{},"3、使用docker build命令构建镜像",[82,30034,30036],{"className":84,"code":30035,"language":86,"meta":26,"style":26},"docker build -t tulingmall-member:0.0.5 .\n",[88,30037,30038],{"__ignoreMap":26},[91,30039,30040,30042,30044,30046,30049],{"class":93,"line":94},[91,30041,98],{"class":97},[91,30043,28851],{"class":101},[91,30045,28854],{"class":105},[91,30047,30048],{"class":101}," tulingmall-member:0.0.5",[91,30050,28860],{"class":101},[21,30052,30053],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[21,30055,30056],{},[24,30057],{"alt":26,"src":30058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[21,30060,30061],{},"4、启动镜像，加-d可在后台启动",[82,30063,30065],{"className":84,"code":30064,"language":86,"meta":26,"style":26},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[88,30066,30067],{"__ignoreMap":26},[91,30068,30069,30071,30073,30075,30077,30080],{"class":93,"line":94},[91,30070,98],{"class":97},[91,30072,102],{"class":101},[91,30074,29942],{"class":105},[91,30076,29335],{"class":105},[91,30078,30079],{"class":101}," 8877:8877",[91,30081,30082],{"class":101}," tulingmall-member:0.0.5\n",[21,30084,30085],{},"加上JVM参数：",[82,30087,30089],{"className":84,"code":30088,"language":86,"meta":26,"style":26},"# --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",[88,30090,30091,30096,30111,30121,30130,30137],{"__ignoreMap":26},[91,30092,30093],{"class":93,"line":94},[91,30094,30095],{"class":308},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[91,30097,30098,30100,30102,30105,30107,30109],{"class":93,"line":38},[91,30099,98],{"class":97},[91,30101,102],{"class":101},[91,30103,30104],{"class":105},"  -d",[91,30106,29335],{"class":105},[91,30108,30079],{"class":101},[91,30110,24801],{"class":105},[91,30112,30113,30115,30118],{"class":93,"line":1304},[91,30114,28247],{"class":250},[91,30116,30117],{"class":101},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[91,30119,30120],{"class":105},"  \\\n",[91,30122,30123,30125,30128],{"class":93,"line":1319},[91,30124,28247],{"class":250},[91,30126,30127],{"class":101},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[91,30129,30120],{"class":105},[91,30131,30132,30135],{"class":93,"line":1325},[91,30133,30134],{"class":250},"--cap-add=SYS_PTRACE  ",[91,30136,26297],{"class":105},[91,30138,30139],{"class":93,"line":1339},[91,30140,30141],{"class":250},"tulingmall-member:0.0.5\n",[21,30143,30144],{},"5、访问会员服务接口",[21,30146,30147],{},[24,30148],{"alt":26,"src":30149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22121,30151,30153],{"id":30152},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[21,30155,30156],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[21,30158,30159,30160],{},"阿里云docker镜像仓库：",[487,30161,30162],{"href":30162,"rel":30163},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23987],[21,30165,30166],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[21,30168,30169],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[21,30171,30172],{},[24,30173],{"alt":26,"src":30174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[21,30176,30177],{},"要把镜像推送到镜像仓库",[82,30179,30181],{"className":84,"code":30180,"language":86,"meta":26,"style":26},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[88,30182,30183],{"__ignoreMap":26},[91,30184,30185,30187,30189,30191],{"class":93,"line":94},[91,30186,98],{"class":97},[91,30188,29016],{"class":101},[91,30190,30048],{"class":101},[91,30192,30193],{"class":101}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[21,30195,30196],{},"最后将镜像推送到远程仓库",[82,30198,30200],{"className":84,"code":30199,"language":86,"meta":26,"style":26},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[88,30201,30202],{"__ignoreMap":26},[91,30203,30204,30206,30208],{"class":93,"line":94},[91,30205,98],{"class":97},[91,30207,29135],{"class":101},[91,30209,30193],{"class":101},[168,30211,30212],{},"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":26,"searchDepth":38,"depth":38,"links":30214},[30215,30216,30217],{"id":28602,"depth":1304,"text":28603},{"id":28831,"depth":1304,"text":28832},{"id":29857,"depth":1304,"text":29858},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28594,"description":26},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":4,"title":5,"body":30224,"description":26,"extension":173,"meta":30334,"navigation":175,"path":176,"seo":30335,"stem":178,"__hash__":179},{"type":7,"value":30225,"toc":30332},[30226,30228,30232,30236,30238,30242,30246,30248,30252,30256,30258,30262,30264,30266,30268,30270,30272,30274,30290,30308,30310,30312,30328,30330],[10,30227,5],{"id":12},[14,30229,30230],{},[17,30231,19],{},[21,30233,30234],{},[24,30235],{"alt":26,"src":27},[21,30237,30],{},[21,30239,30240],{},[24,30241],{"alt":26,"src":35},[14,30243,30244],{"start":38},[17,30245,41],{},[21,30247,44],{},[21,30249,30250],{},[24,30251],{"alt":26,"src":49},[21,30253,30254],{},[24,30255],{"alt":26,"src":54},[21,30257,57],{},[21,30259,30260],{},[24,30261],{"alt":26,"src":62},[21,30263,65],{},[21,30265,68],{},[21,30267,71],{},[21,30269,74],{},[21,30271,77],{},[21,30273,80],{},[82,30275,30276],{"className":84,"code":85,"language":86,"meta":26,"style":26},[88,30277,30278],{"__ignoreMap":26},[91,30279,30280,30282,30284,30286,30288],{"class":93,"line":94},[91,30281,98],{"class":97},[91,30283,102],{"class":101},[91,30285,106],{"class":105},[91,30287,109],{"class":101},[91,30289,112],{"class":101},[82,30291,30292],{"className":84,"code":115,"language":86,"meta":26,"style":26},[88,30293,30294],{"__ignoreMap":26},[91,30295,30296,30298,30300,30302,30304,30306],{"class":93,"line":94},[91,30297,98],{"class":97},[91,30299,102],{"class":101},[91,30301,126],{"class":105},[91,30303,106],{"class":105},[91,30305,131],{"class":101},[91,30307,134],{"class":101},[21,30309,137],{},[21,30311,140],{},[82,30313,30314],{"className":84,"code":143,"language":86,"meta":26,"style":26},[88,30315,30316],{"__ignoreMap":26},[91,30317,30318,30320,30322,30324,30326],{"class":93,"line":94},[91,30319,150],{"class":97},[91,30321,154],{"class":153},[91,30323,157],{"class":97},[91,30325,160],{"class":105},[91,30327,163],{"class":101},[21,30329,166],{},[168,30331,170],{},{"title":26,"searchDepth":38,"depth":38,"links":30333},[],{},{"title":5,"description":26},{"id":30337,"title":30338,"body":30339,"description":23500,"extension":173,"meta":30343,"navigation":175,"path":30345,"seo":30346,"stem":30347,"__hash__":30348},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30340,"toc":30341},[],{"title":26,"searchDepth":38,"depth":38,"links":30342},[],{"category":30344},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30338,"description":23500},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30350,"title":30351,"body":30352,"description":23500,"extension":173,"meta":30356,"navigation":175,"path":30357,"seo":30358,"stem":30359,"__hash__":30360},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30353,"toc":30354},[],{"title":26,"searchDepth":38,"depth":38,"links":30355},[],{"category":30344},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30351,"description":23500},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30362,"title":30363,"body":30364,"description":23500,"extension":173,"meta":30657,"navigation":175,"path":30658,"seo":30659,"stem":30660,"__hash__":30661},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30365,"toc":30655},[30366,30369,30377,30392,30397,30448,30451,30457,30644,30649,30652],[10,30367,30363],{"id":30368},"_1验证深度学习环境",[21,30370,30371,30372],{},"关于环境的安装，看",[487,30373,30376],{"href":30374,"rel":30375},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23987],"Pytorch-->深度学习",[21,30378,30379,30380,30383,30384,30387,30388,30391],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[88,30381,30382],{},"pytorch-cuda=12.4"," 是一个“ ",[398,30385,30386],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[398,30389,30390],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[21,30393,30394],{},[24,30395],{"alt":26,"src":30396},"\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",[82,30398,30400],{"className":84,"code":30399,"language":86,"meta":26,"style":26},"# 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",[88,30401,30402,30407],{"__ignoreMap":26},[91,30403,30404],{"class":93,"line":94},[91,30405,30406],{"class":308},"# CUDA 12.4\n",[91,30408,30409,30412,30414,30417,30420,30423,30426,30429,30431,30434,30437,30440,30443,30445],{"class":93,"line":38},[91,30410,30411],{"class":97},"conda",[91,30413,23956],{"class":101},[91,30415,30416],{"class":101}," pytorch==",[91,30418,30419],{"class":105},"2.5.1",[91,30421,30422],{"class":101}," torchvision==",[91,30424,30425],{"class":105},"0.20.1",[91,30427,30428],{"class":101}," torchaudio==",[91,30430,30419],{"class":105},[91,30432,30433],{"class":101}," pytorch-cuda=",[91,30435,30436],{"class":105},"12.4",[91,30438,30439],{"class":105}," -c",[91,30441,30442],{"class":101}," pytorch",[91,30444,30439],{"class":105},[91,30446,30447],{"class":101}," nvidia\n",[21,30449,30450],{},"）：",[21,30452,30453],{},[487,30454,30455],{"href":30455,"rel":30456},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23987],[82,30458,30462],{"className":30459,"code":30460,"language":30461,"meta":26,"style":26},"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",[88,30463,30464,30469,30477,30482,30492,30508,30513,30523,30560,30567,30579,30595,30600,30610,30622,30632],{"__ignoreMap":26},[91,30465,30466],{"class":93,"line":94},[91,30467,30468],{"class":308},"# 对深度学习环境进行测试\n",[91,30470,30471,30474],{"class":93,"line":38},[91,30472,30473],{"class":153},"import",[91,30475,30476],{"class":250}," torch\n",[91,30478,30479],{"class":93,"line":1304},[91,30480,30481],{"class":308},"# 查看cuda是否被激活\n",[91,30483,30484,30487,30489],{"class":93,"line":1319},[91,30485,30486],{"class":250},"flag",[91,30488,296],{"class":153},[91,30490,30491],{"class":250},"torch.cuda.is_available()\n",[91,30493,30494,30497,30499,30502,30505],{"class":93,"line":1325},[91,30495,30496],{"class":105},"print",[91,30498,251],{"class":250},[91,30500,30501],{"class":101},"\"cuda:\"",[91,30503,30504],{"class":250},", flag)   ",[91,30506,30507],{"class":308},"#返回true的话说明被激活\n",[91,30509,30510],{"class":93,"line":1339},[91,30511,30512],{"class":308},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[91,30514,30515,30518,30520],{"class":93,"line":1345},[91,30516,30517],{"class":250},"ngpu",[91,30519,296],{"class":153},[91,30521,30522],{"class":105},"1\n",[91,30524,30525,30528,30530,30533,30536,30538,30541,30544,30547,30549,30551,30553,30555,30558],{"class":93,"line":1436},[91,30526,30527],{"class":250},"device",[91,30529,296],{"class":153},[91,30531,30532],{"class":250},"torch.device(",[91,30534,30535],{"class":101},"\"cuda:0\"",[91,30537,1828],{"class":153},[91,30539,30540],{"class":250},"(torch.cuda.is_available() ",[91,30542,30543],{"class":153},"and",[91,30545,30546],{"class":250}," ngpu",[91,30548,1209],{"class":153},[91,30550,440],{"class":105},[91,30552,13837],{"class":250},[91,30554,1825],{"class":153},[91,30556,30557],{"class":101}," \"cpu\"",[91,30559,257],{"class":250},[91,30561,30562,30564],{"class":93,"line":1442},[91,30563,30496],{"class":105},[91,30565,30566],{"class":250},"(device)\n",[91,30568,30569,30571,30574,30576],{"class":93,"line":1454},[91,30570,30496],{"class":105},[91,30572,30573],{"class":250},"(torch.cuda.get_device_name(",[91,30575,440],{"class":105},[91,30577,30578],{"class":250},"))\n",[91,30580,30581,30583,30586,30588,30590,30592],{"class":93,"line":1736},[91,30582,30496],{"class":105},[91,30584,30585],{"class":250},"(torch.rand(",[91,30587,321],{"class":105},[91,30589,627],{"class":250},[91,30591,321],{"class":105},[91,30593,30594],{"class":250},").cuda())\n",[91,30596,30597],{"class":93,"line":1741},[91,30598,30599],{"class":308},"# 查看cuda和cudnn的版本\n",[91,30601,30602,30605,30607],{"class":93,"line":1747},[91,30603,30604],{"class":250},"cuda_version",[91,30606,296],{"class":153},[91,30608,30609],{"class":250},"torch.version.cuda\n",[91,30611,30612,30614,30616,30619],{"class":93,"line":1752},[91,30613,30496],{"class":105},[91,30615,251],{"class":250},[91,30617,30618],{"class":101},"\"cuda version\"",[91,30620,30621],{"class":250},",cuda_version)\n",[91,30623,30624,30627,30629],{"class":93,"line":1766},[91,30625,30626],{"class":250},"cudnn_version",[91,30628,296],{"class":153},[91,30630,30631],{"class":250},"torch.backends.cudnn.version()\n",[91,30633,30634,30636,30638,30641],{"class":93,"line":1771},[91,30635,30496],{"class":105},[91,30637,251],{"class":250},[91,30639,30640],{"class":101},"\"cudnn version\"",[91,30642,30643],{"class":250},",cudnn_version)\n",[21,30645,30646],{},[24,30647],{"alt":26,"src":30648},"\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",[21,30650,30651],{},"cuda:0 指的是一块显卡",[168,30653,30654],{},"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":26,"searchDepth":38,"depth":38,"links":30656},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30363,"description":23500},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30663,"title":30664,"body":30665,"description":23500,"extension":173,"meta":50469,"navigation":175,"path":50470,"seo":50471,"stem":50472,"__hash__":50473},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30666,"toc":50463},[30667,30670,30674,30678,30681,30686,30691,30694,30699,30704,30709,30712,30716,30721,30725,30730,30733,30738,30741,30744,30747,30750,30755,30758,30763,30768,30773,30778,30781,30785,30788,30793,31397,31402,31405,31410,31413,31416,31880,31883,31886,31889,31892,33943,33946,33951,33956,34751,34754,34759,35537,35541,37200,37204,37918,37922,37926,37931,37936,37941,37944,37949,37954,37959,37964,37969,37973,37978,39260,39265,39268,39271,39274,39429,39432,39435,40651,40656,41351,41355,41359,41364,41369,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41427,41432,41437,41442,41447,41452,41457,41462,41467,41472,41477,41482,41487,41492,41497,41502,41507,41512,41517,41522,41526,41530,41533,43011,43015,44662,44666,45360,45364,45367,45370,45914,45917,45921,45924,47321,47325,47328,47906,49693,49697,49700,50460],[10,30668,30664],{"id":30669},"_2经典神经网络",[217,30671,30673],{"id":30672},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22121,30675,30677],{"id":30676},"_211原理介绍","2.1.1.原理介绍",[21,30679,30680],{},"LeNet-5",[14,30682,30683],{},[17,30684,30685],{},"原理",[21,30687,30688],{},[24,30689],{"alt":26,"src":30690},"\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",[21,30692,30693],{},"B是batch批次；C是channel通道",[14,30695,30696],{"start":38},[17,30697,30698],{},"网络参数详细",[21,30700,30701],{},[24,30702],{"alt":26,"src":30703},"\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",[21,30705,30706],{},[24,30707],{"alt":26,"src":30708},"\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",[21,30710,30711],{},"AlexNet",[14,30713,30714],{},[17,30715,30685],{},[21,30717,30718],{},[24,30719],{"alt":26,"src":30720},"\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",[14,30722,30723],{"start":38},[17,30724,30698],{},[21,30726,30727],{},[24,30728],{"alt":26,"src":30729},"\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",[21,30731,30732],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[21,30734,30735],{},[24,30736],{"alt":26,"src":30737},"\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",[21,30739,30740],{},"数据处理中的图像增强操作:",[21,30742,30743],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[21,30745,30746],{},"①增加数据量，保证训练数据充足；②防止过拟合",[21,30748,30749],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[21,30751,30752],{},[24,30753],{"alt":26,"src":30754},"\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",[21,30756,30757],{},"提升网络精确度的方法：LRN正则化",[21,30759,30760],{},[24,30761],{"alt":26,"src":30762},"\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",[21,30764,30765],{},[24,30766],{"alt":26,"src":30767},"\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",[14,30769,30770],{"start":1304},[17,30771,30772],{},"AlexNet的总结",[21,30774,30775],{},[24,30776],{"alt":26,"src":30777},"\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",[21,30779,30780],{},"比LeNet模型要深一丢丢",[22121,30782,30784],{"id":30783},"_212代码实现","2.1.2.代码实现",[21,30786,30787],{},"（1）LeNet",[14,30789,30790],{},[17,30791,30792],{},"模型搭建",[82,30794,30796],{"className":30459,"code":30795,"language":30461,"meta":26,"style":26},"# 导入库\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",[88,30797,30798,30803,30809,30814,30827,30832,30844,30848,30868,30873,30878,30889,30894,30913,30917,30922,30971,30983,30988,31017,31052,31079,31084,31096,31101,31121,31140,31159,31163,31168,31178,31195,31206,31221,31232,31243,31258,31273,31284,31291,31295,31309,31314,31337,31342,31347,31352,31356,31361,31366,31376],{"__ignoreMap":26},[91,30799,30800],{"class":93,"line":94},[91,30801,30802],{"class":308},"# 导入库\n",[91,30804,30805,30807],{"class":93,"line":38},[91,30806,30473],{"class":153},[91,30808,30476],{"class":250},[91,30810,30811],{"class":93,"line":1304},[91,30812,30813],{"class":308},"# 导入神经网络层\n",[91,30815,30816,30819,30822,30824],{"class":93,"line":1319},[91,30817,30818],{"class":153},"from",[91,30820,30821],{"class":250}," torch ",[91,30823,30473],{"class":153},[91,30825,30826],{"class":250}," nn\n",[91,30828,30829],{"class":93,"line":1325},[91,30830,30831],{"class":308},"# 导入展示神经网络参数的包\n",[91,30833,30834,30836,30839,30841],{"class":93,"line":1339},[91,30835,30818],{"class":153},[91,30837,30838],{"class":250}," torchsummary ",[91,30840,30473],{"class":153},[91,30842,30843],{"class":250}," summary\n",[91,30845,30846],{"class":93,"line":1345},[91,30847,2523],{"emptyLinePlaceholder":175},[91,30849,30850,30852,30855,30857,30860,30862,30865],{"class":93,"line":1436},[91,30851,14817],{"class":153},[91,30853,30854],{"class":97}," LeNet",[91,30856,251],{"class":250},[91,30858,30859],{"class":97},"nn",[91,30861,807],{"class":250},[91,30863,30864],{"class":97},"Module",[91,30866,30867],{"class":250},"):\n",[91,30869,30870],{"class":93,"line":1442},[91,30871,30872],{"class":308},"    # 模型初始化:\n",[91,30874,30875],{"class":93,"line":1454},[91,30876,30877],{"class":308},"    # 定义一些网络层和激活函数\n",[91,30879,30880,30883,30886],{"class":93,"line":1736},[91,30881,30882],{"class":153},"    def",[91,30884,30885],{"class":105}," __init__",[91,30887,30888],{"class":250},"(self):\n",[91,30890,30891],{"class":93,"line":1741},[91,30892,30893],{"class":308},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[91,30895,30896,30899,30902,30905,30908,30911],{"class":93,"line":1747},[91,30897,30898],{"class":105},"        super",[91,30900,30901],{"class":250},"(LeNet,",[91,30903,30904],{"class":105},"self",[91,30906,30907],{"class":250},").",[91,30909,30910],{"class":105},"__init__",[91,30912,2099],{"class":250},[91,30914,30915],{"class":93,"line":1752},[91,30916,2523],{"emptyLinePlaceholder":175},[91,30918,30919],{"class":93,"line":1766},[91,30920,30921],{"class":308},"        # 定义网络层\n",[91,30923,30924,30927,30930,30932,30935,30938,30940,30942,30944,30947,30949,30951,30953,30956,30958,30960,30962,30965,30967,30969],{"class":93,"line":1771},[91,30925,30926],{"class":105},"        self",[91,30928,30929],{"class":250},".c1",[91,30931,296],{"class":153},[91,30933,30934],{"class":250},"nn.Conv2d(",[91,30936,30937],{"class":5339},"in_channels",[91,30939,296],{"class":153},[91,30941,466],{"class":105},[91,30943,627],{"class":250},[91,30945,30946],{"class":5339},"out_channels",[91,30948,296],{"class":153},[91,30950,593],{"class":105},[91,30952,627],{"class":250},[91,30954,30955],{"class":5339},"kernel_size",[91,30957,296],{"class":153},[91,30959,568],{"class":105},[91,30961,627],{"class":250},[91,30963,30964],{"class":5339},"padding",[91,30966,296],{"class":153},[91,30968,327],{"class":105},[91,30970,257],{"class":250},[91,30972,30973,30975,30978,30980],{"class":93,"line":1777},[91,30974,30926],{"class":105},[91,30976,30977],{"class":250},".sig",[91,30979,296],{"class":153},[91,30981,30982],{"class":250},"nn.Sigmoid()\n",[91,30984,30985],{"class":93,"line":1798},[91,30986,30987],{"class":308},"        # 定义池化\n",[91,30989,30990,30992,30995,30997,31000,31002,31004,31006,31008,31011,31013,31015],{"class":93,"line":1803},[91,30991,30926],{"class":105},[91,30993,30994],{"class":250},".s2",[91,30996,296],{"class":153},[91,30998,30999],{"class":250},"nn.AvgPool2d(",[91,31001,30955],{"class":5339},[91,31003,296],{"class":153},[91,31005,327],{"class":105},[91,31007,627],{"class":250},[91,31009,31010],{"class":5339},"stride",[91,31012,296],{"class":153},[91,31014,327],{"class":105},[91,31016,257],{"class":250},[91,31018,31019,31021,31024,31026,31028,31030,31032,31034,31036,31038,31040,31042,31044,31046,31048,31050],{"class":93,"line":1817},[91,31020,30926],{"class":105},[91,31022,31023],{"class":250},".c3",[91,31025,296],{"class":153},[91,31027,30934],{"class":250},[91,31029,30937],{"class":5339},[91,31031,296],{"class":153},[91,31033,593],{"class":105},[91,31035,627],{"class":250},[91,31037,30946],{"class":5339},[91,31039,296],{"class":153},[91,31041,850],{"class":105},[91,31043,627],{"class":250},[91,31045,30955],{"class":5339},[91,31047,296],{"class":153},[91,31049,568],{"class":105},[91,31051,257],{"class":250},[91,31053,31054,31056,31059,31061,31063,31065,31067,31069,31071,31073,31075,31077],{"class":93,"line":1822},[91,31055,30926],{"class":105},[91,31057,31058],{"class":250},".s4",[91,31060,296],{"class":153},[91,31062,30999],{"class":250},[91,31064,30955],{"class":5339},[91,31066,296],{"class":153},[91,31068,327],{"class":105},[91,31070,627],{"class":250},[91,31072,31010],{"class":5339},[91,31074,296],{"class":153},[91,31076,327],{"class":105},[91,31078,257],{"class":250},[91,31080,31081],{"class":93,"line":1851},[91,31082,31083],{"class":308},"        # 定义平展层\n",[91,31085,31086,31088,31091,31093],{"class":93,"line":1856},[91,31087,30926],{"class":105},[91,31089,31090],{"class":250},".flatten",[91,31092,296],{"class":153},[91,31094,31095],{"class":250},"nn.Flatten()\n",[91,31097,31098],{"class":93,"line":1873},[91,31099,31100],{"class":308},"        # 定义全连接层\n",[91,31102,31103,31105,31108,31110,31113,31115,31117,31119],{"class":93,"line":1878},[91,31104,30926],{"class":105},[91,31106,31107],{"class":250},".f5",[91,31109,296],{"class":153},[91,31111,31112],{"class":250},"nn.Linear(",[91,31114,4110],{"class":105},[91,31116,627],{"class":250},[91,31118,1066],{"class":105},[91,31120,257],{"class":250},[91,31122,31123,31125,31128,31130,31132,31134,31136,31138],{"class":93,"line":1883},[91,31124,30926],{"class":105},[91,31126,31127],{"class":250},".f6",[91,31129,296],{"class":153},[91,31131,31112],{"class":250},[91,31133,1066],{"class":105},[91,31135,627],{"class":250},[91,31137,960],{"class":105},[91,31139,257],{"class":250},[91,31141,31142,31144,31147,31149,31151,31153,31155,31157],{"class":93,"line":1888},[91,31143,30926],{"class":105},[91,31145,31146],{"class":250},".f7",[91,31148,296],{"class":153},[91,31150,31112],{"class":250},[91,31152,960],{"class":105},[91,31154,627],{"class":250},[91,31156,695],{"class":105},[91,31158,257],{"class":250},[91,31160,31161],{"class":93,"line":1902},[91,31162,2523],{"emptyLinePlaceholder":175},[91,31164,31165],{"class":93,"line":1907},[91,31166,31167],{"class":308},"    # 写工具->写前向传播\n",[91,31169,31170,31172,31175],{"class":93,"line":2700},[91,31171,30882],{"class":153},[91,31173,31174],{"class":97}," forward",[91,31176,31177],{"class":250},"(self,x):\n",[91,31179,31180,31183,31185,31187,31190,31192],{"class":93,"line":2714},[91,31181,31182],{"class":250},"        x",[91,31184,296],{"class":153},[91,31186,30904],{"class":105},[91,31188,31189],{"class":250},".sig(",[91,31191,30904],{"class":105},[91,31193,31194],{"class":250},".c1(x))\n",[91,31196,31197,31199,31201,31203],{"class":93,"line":2722},[91,31198,31182],{"class":250},[91,31200,296],{"class":153},[91,31202,30904],{"class":105},[91,31204,31205],{"class":250},".s2(x)\n",[91,31207,31208,31210,31212,31214,31216,31218],{"class":93,"line":2727},[91,31209,31182],{"class":250},[91,31211,296],{"class":153},[91,31213,30904],{"class":105},[91,31215,31189],{"class":250},[91,31217,30904],{"class":105},[91,31219,31220],{"class":250},".c3(x))\n",[91,31222,31223,31225,31227,31229],{"class":93,"line":2733},[91,31224,31182],{"class":250},[91,31226,296],{"class":153},[91,31228,30904],{"class":105},[91,31230,31231],{"class":250},".s4(x)\n",[91,31233,31234,31236,31238,31240],{"class":93,"line":2739},[91,31235,31182],{"class":250},[91,31237,296],{"class":153},[91,31239,30904],{"class":105},[91,31241,31242],{"class":250},".flatten(x)\n",[91,31244,31245,31247,31249,31251,31253,31255],{"class":93,"line":2744},[91,31246,31182],{"class":250},[91,31248,296],{"class":153},[91,31250,30904],{"class":105},[91,31252,31189],{"class":250},[91,31254,30904],{"class":105},[91,31256,31257],{"class":250},".f5(x))\n",[91,31259,31260,31262,31264,31266,31268,31270],{"class":93,"line":8071},[91,31261,31182],{"class":250},[91,31263,296],{"class":153},[91,31265,30904],{"class":105},[91,31267,31189],{"class":250},[91,31269,30904],{"class":105},[91,31271,31272],{"class":250},".f6(x))\n",[91,31274,31275,31277,31279,31281],{"class":93,"line":8095},[91,31276,31182],{"class":250},[91,31278,296],{"class":153},[91,31280,30904],{"class":105},[91,31282,31283],{"class":250},".f7(x)\n",[91,31285,31286,31288],{"class":93,"line":8100},[91,31287,14875],{"class":153},[91,31289,31290],{"class":250}," x\n",[91,31292,31293],{"class":93,"line":8106},[91,31294,2523],{"emptyLinePlaceholder":175},[91,31296,31297,31299,31302,31304,31307],{"class":93,"line":8133},[91,31298,1655],{"class":153},[91,31300,31301],{"class":105}," __name__",[91,31303,3072],{"class":153},[91,31305,31306],{"class":101},"\"__main__\"",[91,31308,3862],{"class":250},[91,31310,31311],{"class":93,"line":8138},[91,31312,31313],{"class":308},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[91,31315,31316,31319,31321,31323,31326,31328,31331,31333,31335],{"class":93,"line":8144},[91,31317,31318],{"class":250},"    device",[91,31320,296],{"class":153},[91,31322,30532],{"class":250},[91,31324,31325],{"class":101},"\"cuda\"",[91,31327,1828],{"class":153},[91,31329,31330],{"class":250}," torch.cuda.is_available() ",[91,31332,1825],{"class":153},[91,31334,30557],{"class":101},[91,31336,257],{"class":250},[91,31338,31339],{"class":93,"line":8156},[91,31340,31341],{"class":308},"    # 如果就是想指定用cpu用下方代码:\n",[91,31343,31344],{"class":93,"line":8168},[91,31345,31346],{"class":308},"    # device=\"cpu\"\n",[91,31348,31349],{"class":93,"line":8180},[91,31350,31351],{"class":308},"    # print(device)\n",[91,31353,31354],{"class":93,"line":9839},[91,31355,2523],{"emptyLinePlaceholder":175},[91,31357,31358],{"class":93,"line":9864},[91,31359,31360],{"class":308},"    # 实例化模型\n",[91,31362,31363],{"class":93,"line":9887},[91,31364,31365],{"class":308},"    # 将模型放到设备中去运行\n",[91,31367,31368,31371,31373],{"class":93,"line":9911},[91,31369,31370],{"class":250},"    model",[91,31372,296],{"class":153},[91,31374,31375],{"class":250},"LeNet().to(device)\n",[91,31377,31378,31381,31384,31386,31388,31390,31392,31394],{"class":93,"line":9916},[91,31379,31380],{"class":105},"    print",[91,31382,31383],{"class":250},"(summary(model,(",[91,31385,466],{"class":105},[91,31387,627],{"class":250},[91,31389,1150],{"class":105},[91,31391,627],{"class":250},[91,31393,1150],{"class":105},[91,31395,31396],{"class":250},")))\n",[21,31398,31399],{},[24,31400],{"alt":26,"src":31401},"\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",[21,31403,31404],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[14,31406,31407],{"start":38},[17,31408,31409],{},"训练",[21,31411,31412],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[21,31414,31415],{},"在训练之前可以将数据展示看一下",[82,31417,31419],{"className":30459,"code":31418,"language":30461,"meta":26,"style":26},"# 建立画图的函数，用于展示数据\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",[88,31420,31421,31426,31431,31443,31455,31468,31473,31485,31490,31502,31507,31519,31523,31527,31548,31560,31565,31586,31597,31601,31606,31624,31635,31640,31651,31656,31667,31671,31676,31691,31704,31709,31714,31727,31740,31753,31758,31762,31767,31787,31804,31824,31837,31850,31860,31875],{"__ignoreMap":26},[91,31422,31423],{"class":93,"line":94},[91,31424,31425],{"class":308},"# 建立画图的函数，用于展示数据\n",[91,31427,31428],{"class":93,"line":38},[91,31429,31430],{"class":308},"# torchvision中包含很多内置的数据集\n",[91,31432,31433,31435,31438,31440],{"class":93,"line":1304},[91,31434,30818],{"class":153},[91,31436,31437],{"class":250}," sklearn.externals.array_api_compat.torch ",[91,31439,30473],{"class":153},[91,31441,31442],{"class":250}," squeeze\n",[91,31444,31445,31447,31450,31452],{"class":93,"line":1319},[91,31446,30818],{"class":153},[91,31448,31449],{"class":250}," torchvision.datasets ",[91,31451,30473],{"class":153},[91,31453,31454],{"class":250}," FashionMNIST\n",[91,31456,31457,31459,31462,31465],{"class":93,"line":1325},[91,31458,30473],{"class":153},[91,31460,31461],{"class":250}," numpy ",[91,31463,31464],{"class":153},"as",[91,31466,31467],{"class":250}," np\n",[91,31469,31470],{"class":93,"line":1339},[91,31471,31472],{"class":308},"# 引入处理数据集的包\n",[91,31474,31475,31477,31480,31482],{"class":93,"line":1345},[91,31476,30818],{"class":153},[91,31478,31479],{"class":250}," torchvision ",[91,31481,30473],{"class":153},[91,31483,31484],{"class":250}," transforms\n",[91,31486,31487],{"class":93,"line":1436},[91,31488,31489],{"class":308},"# 从torch库中引入数据处理的包\n",[91,31491,31492,31494,31497,31499],{"class":93,"line":1442},[91,31493,30473],{"class":153},[91,31495,31496],{"class":250}," torch.utils.data ",[91,31498,31464],{"class":153},[91,31500,31501],{"class":250}," Data\n",[91,31503,31504],{"class":93,"line":1454},[91,31505,31506],{"class":308},"# 导入画图的库\n",[91,31508,31509,31511,31514,31516],{"class":93,"line":1736},[91,31510,30473],{"class":153},[91,31512,31513],{"class":250}," matplotlib.pyplot ",[91,31515,31464],{"class":153},[91,31517,31518],{"class":250}," plt\n",[91,31520,31521],{"class":93,"line":1741},[91,31522,2523],{"emptyLinePlaceholder":175},[91,31524,31525],{"class":93,"line":1747},[91,31526,2523],{"emptyLinePlaceholder":175},[91,31528,31529,31532,31534,31537,31540,31542,31545],{"class":93,"line":1752},[91,31530,31531],{"class":250},"train_data",[91,31533,296],{"class":153},[91,31535,31536],{"class":250},"FashionMNIST(",[91,31538,31539],{"class":5339},"root",[91,31541,296],{"class":153},[91,31543,31544],{"class":101},"'.\u002Fdata'",[91,31546,31547],{"class":250},",\n",[91,31549,31550,31553,31555,31558],{"class":93,"line":1766},[91,31551,31552],{"class":5339},"                        train",[91,31554,296],{"class":153},[91,31556,31557],{"class":105},"True",[91,31559,31547],{"class":250},[91,31561,31562],{"class":93,"line":1771},[91,31563,31564],{"class":308},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[91,31566,31567,31570,31572,31575,31578,31580,31583],{"class":93,"line":1777},[91,31568,31569],{"class":5339},"                        transform",[91,31571,296],{"class":153},[91,31573,31574],{"class":250},"transforms.Compose([transforms.Resize(",[91,31576,31577],{"class":5339},"size",[91,31579,296],{"class":153},[91,31581,31582],{"class":105},"224",[91,31584,31585],{"class":250},"),transforms.ToTensor()]),\n",[91,31587,31588,31591,31593,31595],{"class":93,"line":1798},[91,31589,31590],{"class":5339},"                        download",[91,31592,296],{"class":153},[91,31594,31557],{"class":105},[91,31596,257],{"class":250},[91,31598,31599],{"class":93,"line":1803},[91,31600,2523],{"emptyLinePlaceholder":175},[91,31602,31603],{"class":93,"line":1817},[91,31604,31605],{"class":308},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[91,31607,31608,31611,31613,31616,31619,31621],{"class":93,"line":1822},[91,31609,31610],{"class":250},"train_loader",[91,31612,296],{"class":153},[91,31614,31615],{"class":250},"Data.DataLoader(",[91,31617,31618],{"class":5339},"dataset",[91,31620,296],{"class":153},[91,31622,31623],{"class":250},"train_data,\n",[91,31625,31626,31629,31631,31633],{"class":93,"line":1851},[91,31627,31628],{"class":5339},"                             batch_size",[91,31630,296],{"class":153},[91,31632,452],{"class":105},[91,31634,31547],{"class":250},[91,31636,31637],{"class":93,"line":1856},[91,31638,31639],{"class":308},"                             # 数据是否打乱\n",[91,31641,31642,31645,31647,31649],{"class":93,"line":1873},[91,31643,31644],{"class":5339},"                             shuffle",[91,31646,296],{"class":153},[91,31648,31557],{"class":105},[91,31650,31547],{"class":250},[91,31652,31653],{"class":93,"line":1878},[91,31654,31655],{"class":308},"                             # 规定加载数据的进程\n",[91,31657,31658,31661,31663,31665],{"class":93,"line":1883},[91,31659,31660],{"class":5339},"                             num_workers",[91,31662,296],{"class":153},[91,31664,440],{"class":105},[91,31666,257],{"class":250},[91,31668,31669],{"class":93,"line":1888},[91,31670,2523],{"emptyLinePlaceholder":175},[91,31672,31673],{"class":93,"line":1902},[91,31674,31675],{"class":308},"# 获得一个batch的数据\n",[91,31677,31678,31680,31683,31685,31688],{"class":93,"line":1907},[91,31679,3148],{"class":153},[91,31681,31682],{"class":250}," step,(b_x,b_y) ",[91,31684,26165],{"class":153},[91,31686,31687],{"class":105}," enumerate",[91,31689,31690],{"class":250},"(train_loader):\n",[91,31692,31693,31695,31698,31700,31702],{"class":93,"line":2700},[91,31694,3224],{"class":153},[91,31696,31697],{"class":250}," step ",[91,31699,1209],{"class":153},[91,31701,4216],{"class":105},[91,31703,3862],{"class":250},[91,31705,31706],{"class":93,"line":2714},[91,31707,31708],{"class":153},"        break\n",[91,31710,31711],{"class":93,"line":2722},[91,31712,31713],{"class":308},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[91,31715,31716,31719,31721,31724],{"class":93,"line":2727},[91,31717,31718],{"class":250},"batch_x",[91,31720,296],{"class":153},[91,31722,31723],{"class":250},"b_x.squeeze().numpy()  ",[91,31725,31726],{"class":308},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[91,31728,31729,31732,31734,31737],{"class":93,"line":2733},[91,31730,31731],{"class":250},"batch_y",[91,31733,296],{"class":153},[91,31735,31736],{"class":250},"b_y.numpy()   ",[91,31738,31739],{"class":308},"#将张量转换成功numpy数组\n",[91,31741,31742,31745,31747,31750],{"class":93,"line":2739},[91,31743,31744],{"class":250},"class_label",[91,31746,296],{"class":153},[91,31748,31749],{"class":250},"train_data.classes  ",[91,31751,31752],{"class":308},"#训练集标签\n",[91,31754,31755],{"class":93,"line":2744},[91,31756,31757],{"class":308},"# print(class_label)\n",[91,31759,31760],{"class":93,"line":8071},[91,31761,2523],{"emptyLinePlaceholder":175},[91,31763,31764],{"class":93,"line":8095},[91,31765,31766],{"class":308},"# 可视化一个batch的图像\n",[91,31768,31769,31772,31775,31777,31779,31781,31783,31785],{"class":93,"line":8100},[91,31770,31771],{"class":250},"plt.figure(",[91,31773,31774],{"class":5339},"figsize",[91,31776,296],{"class":153},[91,31778,251],{"class":250},[91,31780,747],{"class":105},[91,31782,627],{"class":250},[91,31784,568],{"class":105},[91,31786,30578],{"class":250},[91,31788,31789,31791,31794,31796,31799,31801],{"class":93,"line":8106},[91,31790,3148],{"class":153},[91,31792,31793],{"class":250}," ii ",[91,31795,26165],{"class":153},[91,31797,31798],{"class":250}," np.arange(",[91,31800,7481],{"class":105},[91,31802,31803],{"class":250},"(batch_y)):\n",[91,31805,31806,31809,31811,31813,31815,31818,31820,31822],{"class":93,"line":8133},[91,31807,31808],{"class":250},"    plt.subplot(",[91,31810,542],{"class":105},[91,31812,627],{"class":250},[91,31814,850],{"class":105},[91,31816,31817],{"class":250},",ii ",[91,31819,730],{"class":153},[91,31821,25240],{"class":105},[91,31823,257],{"class":250},[91,31825,31826,31829,31832,31834],{"class":93,"line":8138},[91,31827,31828],{"class":250},"    plt.imshow(batch_x[ii,:,:],",[91,31830,31831],{"class":5339},"cmap",[91,31833,296],{"class":153},[91,31835,31836],{"class":250},"plt.cm.gray)\n",[91,31838,31839,31842,31844,31846,31848],{"class":93,"line":8144},[91,31840,31841],{"class":250},"    plt.title(class_label[batch_y[ii]],",[91,31843,31577],{"class":5339},[91,31845,296],{"class":153},[91,31847,695],{"class":105},[91,31849,257],{"class":250},[91,31851,31852,31855,31858],{"class":93,"line":8156},[91,31853,31854],{"class":250},"    plt.axis(",[91,31856,31857],{"class":101},"\"off\"",[91,31859,257],{"class":250},[91,31861,31862,31865,31868,31870,31873],{"class":93,"line":8168},[91,31863,31864],{"class":250},"    plt.subplots_adjust(",[91,31866,31867],{"class":5339},"wspace",[91,31869,296],{"class":153},[91,31871,31872],{"class":105},"0.05",[91,31874,257],{"class":250},[91,31876,31877],{"class":93,"line":8180},[91,31878,31879],{"class":250},"plt.show()\n",[21,31881,31882],{},"用matplotlib进行展示的过程可以后续再补",[21,31884,31885],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[21,31887,31888],{},"训练次数就是按照批次过整个训练集数据的次数",[21,31890,31891],{},"模型训练：",[82,31893,31895],{"className":30459,"code":31894,"language":30461,"meta":26,"style":26},"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",[88,31896,31897,31904,31911,31915,31927,31933,31944,31954,31964,31974,31984,31989,32001,32011,32015,32019,32024,32035,32048,32059,32076,32087,32126,32142,32154,32165,32170,32181,32197,32208,32219,32230,32237,32241,32246,32251,32255,32260,32270,32291,32295,32299,32304,32309,32314,32334,32338,32343,32353,32357,32362,32371,32376,32381,32386,32396,32400,32404,32409,32414,32424,32429,32439,32444,32453,32458,32467,32472,32481,32485,32490,32500,32504,32508,32513,32528,32556,32571,32575,32580,32585,32594,32599,32608,32613,32622,32627,32636,32641,32650,32655,32664,32669,32682,32687,32697,32702,32712,32718,32724,32730,32736,32747,32753,32773,32779,32790,32796,32802,32808,32814,32820,32826,32832,32852,32858,32874,32880,32894,32900,32915,32921,32930,32936,32945,32951,32957,32966,32972,32983,32989,33008,33014,33025,33031,33051,33067,33073,33087,33093,33099,33110,33116,33122,33132,33138,33149,33155,33165,33170,33176,33225,33272,33277,33283,33302,33308,33328,33334,33340,33350,33355,33361,33377,33422,33428,33434,33440,33451,33457,33463,33469,33487,33501,33510,33519,33528,33537,33543,33549,33557,33562,33568,33579,33585,33605,33611,33617,33623,33640,33646,33652,33658,33664,33670,33697,33721,33727,33733,33739,33750,33761,33767,33784,33807,33830,33836,33841,33850,33860,33866,33871,33877,33890,33896,33907,33918,33937],{"__ignoreMap":26},[91,31898,31899,31901],{"class":93,"line":94},[91,31900,30473],{"class":153},[91,31902,31903],{"class":250}," copy\n",[91,31905,31906,31908],{"class":93,"line":38},[91,31907,30473],{"class":153},[91,31909,31910],{"class":250}," time\n",[91,31912,31913],{"class":93,"line":1304},[91,31914,2523],{"emptyLinePlaceholder":175},[91,31916,31917,31919,31922,31924],{"class":93,"line":1319},[91,31918,30473],{"class":153},[91,31920,31921],{"class":250}," pandas ",[91,31923,31464],{"class":153},[91,31925,31926],{"class":250}," pd\n",[91,31928,31929,31931],{"class":93,"line":1325},[91,31930,30473],{"class":153},[91,31932,30476],{"class":250},[91,31934,31935,31937,31939,31941],{"class":93,"line":1339},[91,31936,30818],{"class":153},[91,31938,31496],{"class":250},[91,31940,30473],{"class":153},[91,31942,31943],{"class":250}," Dataset\n",[91,31945,31946,31948,31950,31952],{"class":93,"line":1345},[91,31947,30818],{"class":153},[91,31949,31449],{"class":250},[91,31951,30473],{"class":153},[91,31953,31454],{"class":250},[91,31955,31956,31958,31960,31962],{"class":93,"line":1436},[91,31957,30818],{"class":153},[91,31959,31479],{"class":250},[91,31961,30473],{"class":153},[91,31963,31484],{"class":250},[91,31965,31966,31968,31970,31972],{"class":93,"line":1442},[91,31967,30473],{"class":153},[91,31969,31496],{"class":250},[91,31971,31464],{"class":153},[91,31973,31501],{"class":250},[91,31975,31976,31978,31980,31982],{"class":93,"line":1454},[91,31977,30473],{"class":153},[91,31979,31513],{"class":250},[91,31981,31464],{"class":153},[91,31983,31518],{"class":250},[91,31985,31986],{"class":93,"line":1736},[91,31987,31988],{"class":308},"# 导入模型\n",[91,31990,31991,31993,31996,31998],{"class":93,"line":1741},[91,31992,30818],{"class":153},[91,31994,31995],{"class":250}," model ",[91,31997,30473],{"class":153},[91,31999,32000],{"class":250}," LeNet\n",[91,32002,32003,32005,32007,32009],{"class":93,"line":1747},[91,32004,30818],{"class":153},[91,32006,30821],{"class":250},[91,32008,30473],{"class":153},[91,32010,30826],{"class":250},[91,32012,32013],{"class":93,"line":1752},[91,32014,2523],{"emptyLinePlaceholder":175},[91,32016,32017],{"class":93,"line":1766},[91,32018,2523],{"emptyLinePlaceholder":175},[91,32020,32021],{"class":93,"line":1771},[91,32022,32023],{"class":308},"# 处理训练集与验证集函数--->划分数据集\n",[91,32025,32026,32029,32032],{"class":93,"line":1777},[91,32027,32028],{"class":153},"def",[91,32030,32031],{"class":97}," train_val_data_process",[91,32033,32034],{"class":250},"():\n",[91,32036,32037,32040,32042,32044,32046],{"class":93,"line":1798},[91,32038,32039],{"class":250},"    train_data",[91,32041,296],{"class":153},[91,32043,31536],{"class":250},[91,32045,31544],{"class":101},[91,32047,31547],{"class":250},[91,32049,32050,32053,32055,32057],{"class":93,"line":1803},[91,32051,32052],{"class":5339},"                            train",[91,32054,296],{"class":153},[91,32056,31557],{"class":105},[91,32058,31547],{"class":250},[91,32060,32061,32064,32066,32068,32070,32072,32074],{"class":93,"line":1817},[91,32062,32063],{"class":5339},"                            transform",[91,32065,296],{"class":153},[91,32067,31574],{"class":250},[91,32069,31577],{"class":5339},[91,32071,296],{"class":153},[91,32073,1150],{"class":105},[91,32075,31585],{"class":250},[91,32077,32078,32081,32083,32085],{"class":93,"line":1822},[91,32079,32080],{"class":5339},"                            download",[91,32082,296],{"class":153},[91,32084,31557],{"class":105},[91,32086,257],{"class":250},[91,32088,32089,32092,32094,32097,32100,32102,32105,32107,32109,32112,32114,32116,32119,32121,32123],{"class":93,"line":1851},[91,32090,32091],{"class":250},"    train_data,val_data",[91,32093,296],{"class":153},[91,32095,32096],{"class":250},"Data.random_split(train_data,[",[91,32098,32099],{"class":105},"round",[91,32101,251],{"class":250},[91,32103,32104],{"class":105},"0.8",[91,32106,704],{"class":153},[91,32108,7481],{"class":105},[91,32110,32111],{"class":250},"(train_data)),",[91,32113,32099],{"class":105},[91,32115,251],{"class":250},[91,32117,32118],{"class":105},"0.2",[91,32120,704],{"class":153},[91,32122,7481],{"class":105},[91,32124,32125],{"class":250},"(train_data))])\n",[91,32127,32128,32131,32133,32136,32138,32140],{"class":93,"line":1856},[91,32129,32130],{"class":250},"    train_dataloader ",[91,32132,296],{"class":153},[91,32134,32135],{"class":250}," Data.DataLoader(",[91,32137,31618],{"class":5339},[91,32139,296],{"class":153},[91,32141,31623],{"class":250},[91,32143,32144,32147,32149,32152],{"class":93,"line":1873},[91,32145,32146],{"class":5339},"                                       batch_size",[91,32148,296],{"class":153},[91,32150,32151],{"class":105},"128",[91,32153,31547],{"class":250},[91,32155,32156,32159,32161,32163],{"class":93,"line":1878},[91,32157,32158],{"class":5339},"                                       shuffle",[91,32160,296],{"class":153},[91,32162,31557],{"class":105},[91,32164,31547],{"class":250},[91,32166,32167],{"class":93,"line":1883},[91,32168,32169],{"class":308},"                                       # 规定8个进程\n",[91,32171,32172,32175,32177,32179],{"class":93,"line":1888},[91,32173,32174],{"class":5339},"                                       num_workers",[91,32176,296],{"class":153},[91,32178,644],{"class":105},[91,32180,257],{"class":250},[91,32182,32183,32186,32188,32190,32192,32194],{"class":93,"line":1902},[91,32184,32185],{"class":250},"    val_dataloader",[91,32187,296],{"class":153},[91,32189,31615],{"class":250},[91,32191,31618],{"class":5339},[91,32193,296],{"class":153},[91,32195,32196],{"class":250},"val_data,\n",[91,32198,32199,32202,32204,32206],{"class":93,"line":1907},[91,32200,32201],{"class":5339},"                                   batch_size",[91,32203,296],{"class":153},[91,32205,32151],{"class":105},[91,32207,31547],{"class":250},[91,32209,32210,32213,32215,32217],{"class":93,"line":2700},[91,32211,32212],{"class":5339},"                                   shuffle",[91,32214,296],{"class":153},[91,32216,31557],{"class":105},[91,32218,31547],{"class":250},[91,32220,32221,32224,32226,32228],{"class":93,"line":2714},[91,32222,32223],{"class":5339},"                                   num_workers",[91,32225,296],{"class":153},[91,32227,644],{"class":105},[91,32229,257],{"class":250},[91,32231,32232,32234],{"class":93,"line":2722},[91,32233,4213],{"class":153},[91,32235,32236],{"class":250}," train_dataloader,val_dataloader\n",[91,32238,32239],{"class":93,"line":2727},[91,32240,2523],{"emptyLinePlaceholder":175},[91,32242,32243],{"class":93,"line":2733},[91,32244,32245],{"class":308},"# 验证是否出错\n",[91,32247,32248],{"class":93,"line":2739},[91,32249,32250],{"class":308},"# train_val_data_process()\n",[91,32252,32253],{"class":93,"line":2744},[91,32254,2523],{"emptyLinePlaceholder":175},[91,32256,32257],{"class":93,"line":8071},[91,32258,32259],{"class":308},"# 定义模型训练函数\n",[91,32261,32262,32264,32267],{"class":93,"line":8095},[91,32263,32028],{"class":153},[91,32265,32266],{"class":97}," train_model_process",[91,32268,32269],{"class":250},"(model,train_dataloader,val_dataloader,num_epochs):\n",[91,32271,32272,32274,32276,32278,32280,32282,32284,32286,32289],{"class":93,"line":8100},[91,32273,31318],{"class":250},[91,32275,296],{"class":153},[91,32277,30532],{"class":250},[91,32279,31325],{"class":101},[91,32281,1828],{"class":153},[91,32283,31330],{"class":250},[91,32285,1825],{"class":153},[91,32287,32288],{"class":101}," 'cpu'",[91,32290,257],{"class":250},[91,32292,32293],{"class":93,"line":8106},[91,32294,2523],{"emptyLinePlaceholder":175},[91,32296,32297],{"class":93,"line":8133},[91,32298,2523],{"emptyLinePlaceholder":175},[91,32300,32301],{"class":93,"line":8138},[91,32302,32303],{"class":308},"    # 定义优化器\n",[91,32305,32306],{"class":93,"line":8144},[91,32307,32308],{"class":308},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[91,32310,32311],{"class":93,"line":8156},[91,32312,32313],{"class":308},"    # lr为学习率\n",[91,32315,32316,32319,32321,32324,32327,32329,32332],{"class":93,"line":8168},[91,32317,32318],{"class":250},"    optimizer",[91,32320,296],{"class":153},[91,32322,32323],{"class":250},"torch.optim.Adam(model.parameters(),",[91,32325,32326],{"class":5339},"lr",[91,32328,296],{"class":153},[91,32330,32331],{"class":105},"0.001",[91,32333,257],{"class":250},[91,32335,32336],{"class":93,"line":8180},[91,32337,2523],{"emptyLinePlaceholder":175},[91,32339,32340],{"class":93,"line":9839},[91,32341,32342],{"class":308},"    # 定义损失函数使用交叉熵损失函数\n",[91,32344,32345,32348,32350],{"class":93,"line":9864},[91,32346,32347],{"class":250},"    criterion",[91,32349,296],{"class":153},[91,32351,32352],{"class":250},"nn.CrossEntropyLoss()\n",[91,32354,32355],{"class":93,"line":9887},[91,32356,2523],{"emptyLinePlaceholder":175},[91,32358,32359],{"class":93,"line":9911},[91,32360,32361],{"class":308},"    # 将模型放到GPU中进行训练\n",[91,32363,32364,32366,32368],{"class":93,"line":9916},[91,32365,31370],{"class":250},[91,32367,296],{"class":153},[91,32369,32370],{"class":250},"model.to(device)\n",[91,32372,32373],{"class":93,"line":9921},[91,32374,32375],{"class":308},"    # 复制当前模型的参数\n",[91,32377,32378],{"class":93,"line":9926},[91,32379,32380],{"class":308},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[91,32382,32383],{"class":93,"line":9935},[91,32384,32385],{"class":308},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[91,32387,32388,32391,32393],{"class":93,"line":9940},[91,32389,32390],{"class":250},"    best_model_wts",[91,32392,296],{"class":153},[91,32394,32395],{"class":250},"copy.deepcopy(model.state_dict())\n",[91,32397,32398],{"class":93,"line":9946},[91,32399,2523],{"emptyLinePlaceholder":175},[91,32401,32402],{"class":93,"line":9967},[91,32403,2523],{"emptyLinePlaceholder":175},[91,32405,32406],{"class":93,"line":9973},[91,32407,32408],{"class":308},"    # 初始化参数\n",[91,32410,32411],{"class":93,"line":9987},[91,32412,32413],{"class":308},"    # 最高准确度\n",[91,32415,32416,32419,32421],{"class":93,"line":9993},[91,32417,32418],{"class":250},"    best_acc",[91,32420,296],{"class":153},[91,32422,32423],{"class":105},"0.0\n",[91,32425,32426],{"class":93,"line":10020},[91,32427,32428],{"class":308},"    # 训练集损失列表\n",[91,32430,32431,32434,32436],{"class":93,"line":10029},[91,32432,32433],{"class":250},"    train_loss_all",[91,32435,296],{"class":153},[91,32437,32438],{"class":250},"[]\n",[91,32440,32441],{"class":93,"line":10035},[91,32442,32443],{"class":308},"    # 验证集函数列表\n",[91,32445,32446,32449,32451],{"class":93,"line":10043},[91,32447,32448],{"class":250},"    val_loss_all",[91,32450,296],{"class":153},[91,32452,32438],{"class":250},[91,32454,32455],{"class":93,"line":10048},[91,32456,32457],{"class":308},"    # 训练集准确度列表\n",[91,32459,32460,32463,32465],{"class":93,"line":16727},[91,32461,32462],{"class":250},"    train_acc_all",[91,32464,296],{"class":153},[91,32466,32438],{"class":250},[91,32468,32469],{"class":93,"line":16733},[91,32470,32471],{"class":308},"    # 验证集准确度列表\n",[91,32473,32474,32477,32479],{"class":93,"line":16756},[91,32475,32476],{"class":250},"    val_acc_all",[91,32478,296],{"class":153},[91,32480,32438],{"class":250},[91,32482,32483],{"class":93,"line":16762},[91,32484,2523],{"emptyLinePlaceholder":175},[91,32486,32487],{"class":93,"line":16785},[91,32488,32489],{"class":308},"    # 保存当前时间--->方便看每轮训练的时间\n",[91,32491,32492,32495,32497],{"class":93,"line":16799},[91,32493,32494],{"class":250},"    since",[91,32496,296],{"class":153},[91,32498,32499],{"class":250},"time.time()\n",[91,32501,32502],{"class":93,"line":16819},[91,32503,2523],{"emptyLinePlaceholder":175},[91,32505,32506],{"class":93,"line":16825},[91,32507,2523],{"emptyLinePlaceholder":175},[91,32509,32510],{"class":93,"line":16836},[91,32511,32512],{"class":308},"    # 准备工作完成--->开始训练模型\n",[91,32514,32515,32517,32520,32522,32525],{"class":93,"line":16859},[91,32516,3324],{"class":153},[91,32518,32519],{"class":250}," epoch ",[91,32521,26165],{"class":153},[91,32523,32524],{"class":105}," range",[91,32526,32527],{"class":250},"(num_epochs):\n",[91,32529,32530,32533,32535,32538,32541,32543,32545,32547,32550,32552,32554],{"class":93,"line":16881},[91,32531,32532],{"class":105},"        print",[91,32534,251],{"class":250},[91,32536,32537],{"class":101},"\"Epoch ",[91,32539,32540],{"class":105},"{}",[91,32542,833],{"class":101},[91,32544,32540],{"class":105},[91,32546,500],{"class":101},[91,32548,32549],{"class":250},".format(epoch,num_epochs",[91,32551,781],{"class":153},[91,32553,466],{"class":105},[91,32555,30578],{"class":250},[91,32557,32558,32560,32562,32565,32567,32569],{"class":93,"line":16886},[91,32559,32532],{"class":105},[91,32561,251],{"class":250},[91,32563,32564],{"class":101},"\"-\"",[91,32566,704],{"class":153},[91,32568,695],{"class":105},[91,32570,257],{"class":250},[91,32572,32573],{"class":93,"line":16892},[91,32574,2523],{"emptyLinePlaceholder":175},[91,32576,32577],{"class":93,"line":16906},[91,32578,32579],{"class":308},"        # 初始化参数\n",[91,32581,32582],{"class":93,"line":16919},[91,32583,32584],{"class":308},"        # 训练集损失函数\n",[91,32586,32587,32590,32592],{"class":93,"line":16924},[91,32588,32589],{"class":250},"        train_loss",[91,32591,296],{"class":153},[91,32593,32423],{"class":105},[91,32595,32596],{"class":93,"line":16938},[91,32597,32598],{"class":308},"        # 训练集准确度\n",[91,32600,32601,32604,32606],{"class":93,"line":16943},[91,32602,32603],{"class":250},"        train_corrects",[91,32605,296],{"class":153},[91,32607,3208],{"class":105},[91,32609,32610],{"class":93,"line":16949},[91,32611,32612],{"class":308},"        # 验证集损失函数\n",[91,32614,32615,32618,32620],{"class":93,"line":16954},[91,32616,32617],{"class":250},"        val_loss",[91,32619,296],{"class":153},[91,32621,32423],{"class":105},[91,32623,32624],{"class":93,"line":16968},[91,32625,32626],{"class":308},"        # 验证集准确度\n",[91,32628,32629,32632,32634],{"class":93,"line":16973},[91,32630,32631],{"class":250},"        val_corrects",[91,32633,296],{"class":153},[91,32635,3208],{"class":105},[91,32637,32638],{"class":93,"line":16978},[91,32639,32640],{"class":308},"        # 训练集样本数量\n",[91,32642,32643,32646,32648],{"class":93,"line":16992},[91,32644,32645],{"class":250},"        train_num",[91,32647,296],{"class":153},[91,32649,3208],{"class":105},[91,32651,32652],{"class":93,"line":17004},[91,32653,32654],{"class":308},"        # 验证集样本数量\n",[91,32656,32657,32660,32662],{"class":93,"line":17009},[91,32658,32659],{"class":250},"        val_num",[91,32661,296],{"class":153},[91,32663,3208],{"class":105},[91,32665,32666],{"class":93,"line":17022},[91,32667,32668],{"class":308},"        # 将数据放到设备,并开始训练\n",[91,32670,32671,32673,32675,32677,32679],{"class":93,"line":17027},[91,32672,3526],{"class":153},[91,32674,31682],{"class":250},[91,32676,26165],{"class":153},[91,32678,31687],{"class":105},[91,32680,32681],{"class":250},"(train_dataloader):\n",[91,32683,32684],{"class":93,"line":17032},[91,32685,32686],{"class":308},"            # 将特征放入到训练设备\n",[91,32688,32689,32692,32694],{"class":93,"line":17037},[91,32690,32691],{"class":250},"            b_x",[91,32693,296],{"class":153},[91,32695,32696],{"class":250},"b_x.to(device)\n",[91,32698,32699],{"class":93,"line":17050},[91,32700,32701],{"class":308},"            # 将标签放入到训练设备当中\n",[91,32703,32704,32707,32709],{"class":93,"line":17055},[91,32705,32706],{"class":250},"            b_y",[91,32708,296],{"class":153},[91,32710,32711],{"class":250},"b_y.to(device)\n",[91,32713,32715],{"class":93,"line":32714},98,[91,32716,32717],{"class":308},"            # 设置模型为训练模式\n",[91,32719,32721],{"class":93,"line":32720},99,[91,32722,32723],{"class":250},"            model.train()\n",[91,32725,32727],{"class":93,"line":32726},100,[91,32728,32729],{"class":308},"            # 将数据放到模型当中,开始前向传播\n",[91,32731,32733],{"class":93,"line":32732},101,[91,32734,32735],{"class":308},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[91,32737,32739,32742,32744],{"class":93,"line":32738},102,[91,32740,32741],{"class":250},"            output",[91,32743,296],{"class":153},[91,32745,32746],{"class":250},"model(b_x)\n",[91,32748,32750],{"class":93,"line":32749},103,[91,32751,32752],{"class":308},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[91,32754,32756,32759,32761,32764,32767,32769,32771],{"class":93,"line":32755},104,[91,32757,32758],{"class":250},"            pre_lab",[91,32760,296],{"class":153},[91,32762,32763],{"class":250},"torch.argmax(output,",[91,32765,32766],{"class":5339},"dim",[91,32768,296],{"class":153},[91,32770,466],{"class":105},[91,32772,257],{"class":250},[91,32774,32776],{"class":93,"line":32775},105,[91,32777,32778],{"class":308},"            # 计算每一个batch的损失函数\n",[91,32780,32782,32785,32787],{"class":93,"line":32781},106,[91,32783,32784],{"class":250},"            loss",[91,32786,296],{"class":153},[91,32788,32789],{"class":250},"criterion(output,b_y)\n",[91,32791,32793],{"class":93,"line":32792},107,[91,32794,32795],{"class":308},"            # 将梯度初始化为0\n",[91,32797,32799],{"class":93,"line":32798},108,[91,32800,32801],{"class":250},"            optimizer.zero_grad()\n",[91,32803,32805],{"class":93,"line":32804},109,[91,32806,32807],{"class":308},"            # 梯度置为0后再进行反向传播\n",[91,32809,32811],{"class":93,"line":32810},110,[91,32812,32813],{"class":250},"            loss.backward()\n",[91,32815,32817],{"class":93,"line":32816},111,[91,32818,32819],{"class":308},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[91,32821,32823],{"class":93,"line":32822},112,[91,32824,32825],{"class":250},"            optimizer.step()\n",[91,32827,32829],{"class":93,"line":32828},113,[91,32830,32831],{"class":308},"            # loss.item()指的是batch的平均损失\n",[91,32833,32835,32838,32840,32843,32845,32848,32850],{"class":93,"line":32834},114,[91,32836,32837],{"class":250},"            train_loss",[91,32839,9600],{"class":153},[91,32841,32842],{"class":250},"loss.item()",[91,32844,704],{"class":153},[91,32846,32847],{"class":250},"b_x.size(",[91,32849,440],{"class":105},[91,32851,257],{"class":250},[91,32853,32855],{"class":93,"line":32854},115,[91,32856,32857],{"class":308},"            # 计算每个批次中正确预测的数量\n",[91,32859,32861,32864,32866,32869,32871],{"class":93,"line":32860},116,[91,32862,32863],{"class":250},"            train_corrects",[91,32865,9600],{"class":153},[91,32867,32868],{"class":250},"torch.sum(pre_lab",[91,32870,3072],{"class":153},[91,32872,32873],{"class":250},"b_y.data)\n",[91,32875,32877],{"class":93,"line":32876},117,[91,32878,32879],{"class":308},"            # 计算目前为止一共处理了多少样本\n",[91,32881,32883,32886,32888,32890,32892],{"class":93,"line":32882},118,[91,32884,32885],{"class":250},"            train_num",[91,32887,9600],{"class":153},[91,32889,32847],{"class":250},[91,32891,440],{"class":105},[91,32893,257],{"class":250},[91,32895,32897],{"class":93,"line":32896},119,[91,32898,32899],{"class":308},"        # 验证数据\n",[91,32901,32903,32905,32908,32910,32912],{"class":93,"line":32902},120,[91,32904,3526],{"class":153},[91,32906,32907],{"class":250}," step ,(b_x,b_y) ",[91,32909,26165],{"class":153},[91,32911,31687],{"class":105},[91,32913,32914],{"class":250},"(val_dataloader):\n",[91,32916,32918],{"class":93,"line":32917},121,[91,32919,32920],{"class":308},"            # 将特征放到验证设备当中\n",[91,32922,32924,32926,32928],{"class":93,"line":32923},122,[91,32925,32691],{"class":250},[91,32927,296],{"class":153},[91,32929,32696],{"class":250},[91,32931,32933],{"class":93,"line":32932},123,[91,32934,32935],{"class":308},"            # 将标签放到放到训练设备当中\n",[91,32937,32939,32941,32943],{"class":93,"line":32938},124,[91,32940,32706],{"class":250},[91,32942,296],{"class":153},[91,32944,32711],{"class":250},[91,32946,32948],{"class":93,"line":32947},125,[91,32949,32950],{"class":308},"            # 开启验证模式，设置模型为评估模式\n",[91,32952,32954],{"class":93,"line":32953},126,[91,32955,32956],{"class":250},"            model.eval()\n",[91,32958,32960,32963],{"class":93,"line":32959},127,[91,32961,32962],{"class":153},"            with",[91,32964,32965],{"class":250}," torch.no_grad():\n",[91,32967,32969],{"class":93,"line":32968},128,[91,32970,32971],{"class":308},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[91,32973,32975,32978,32980],{"class":93,"line":32974},129,[91,32976,32977],{"class":250},"                output ",[91,32979,296],{"class":153},[91,32981,32982],{"class":250}," model(b_x)\n",[91,32984,32986],{"class":93,"line":32985},130,[91,32987,32988],{"class":308},"                # 查找每一行中最大值对应的下标\n",[91,32990,32992,32995,32997,33000,33002,33004,33006],{"class":93,"line":32991},131,[91,32993,32994],{"class":250},"                pre_lab ",[91,32996,296],{"class":153},[91,32998,32999],{"class":250}," torch.argmax(output, ",[91,33001,32766],{"class":5339},[91,33003,296],{"class":153},[91,33005,466],{"class":105},[91,33007,257],{"class":250},[91,33009,33011],{"class":93,"line":33010},132,[91,33012,33013],{"class":308},"                # 计算验证集上的当前 batch 损失\n",[91,33015,33017,33020,33022],{"class":93,"line":33016},133,[91,33018,33019],{"class":250},"                val_batch_loss ",[91,33021,296],{"class":153},[91,33023,33024],{"class":250}," criterion(output, b_y)\n",[91,33026,33028],{"class":93,"line":33027},134,[91,33029,33030],{"class":308},"                # 对损失函数进行累加（按样本数加权）\n",[91,33032,33034,33037,33039,33042,33044,33047,33049],{"class":93,"line":33033},135,[91,33035,33036],{"class":250},"                val_loss ",[91,33038,9600],{"class":153},[91,33040,33041],{"class":250}," val_batch_loss.item() ",[91,33043,704],{"class":153},[91,33045,33046],{"class":250}," b_x.size(",[91,33048,440],{"class":105},[91,33050,257],{"class":250},[91,33052,33054,33057,33059,33062,33064],{"class":93,"line":33053},136,[91,33055,33056],{"class":250},"                val_corrects ",[91,33058,9600],{"class":153},[91,33060,33061],{"class":250}," torch.sum(pre_lab ",[91,33063,3072],{"class":153},[91,33065,33066],{"class":250}," b_y.data)\n",[91,33068,33070],{"class":93,"line":33069},137,[91,33071,33072],{"class":308},"                # 当前用于验证的样本数量\n",[91,33074,33076,33079,33081,33083,33085],{"class":93,"line":33075},138,[91,33077,33078],{"class":250},"            val_num ",[91,33080,9600],{"class":153},[91,33082,33046],{"class":250},[91,33084,440],{"class":105},[91,33086,257],{"class":250},[91,33088,33090],{"class":93,"line":33089},139,[91,33091,33092],{"class":308},"        # 计算并保存每一次迭代的loss值和准确率\n",[91,33094,33096],{"class":93,"line":33095},140,[91,33097,33098],{"class":308},"        # 计算并保存训练集的loss值\n",[91,33100,33102,33105,33107],{"class":93,"line":33101},141,[91,33103,33104],{"class":250},"        train_loss_all.append(train_loss",[91,33106,833],{"class":153},[91,33108,33109],{"class":250},"train_num)\n",[91,33111,33113],{"class":93,"line":33112},142,[91,33114,33115],{"class":308},"        # 取双精度\n",[91,33117,33119],{"class":93,"line":33118},143,[91,33120,33121],{"class":308},"        # 计算并保存训练集的准确率\n",[91,33123,33125,33128,33130],{"class":93,"line":33124},144,[91,33126,33127],{"class":250},"        train_acc_all.append(train_corrects.double().item()",[91,33129,833],{"class":153},[91,33131,33109],{"class":250},[91,33133,33135],{"class":93,"line":33134},145,[91,33136,33137],{"class":308},"        # 计算并保存验证集的loss值\n",[91,33139,33141,33144,33146],{"class":93,"line":33140},146,[91,33142,33143],{"class":250},"        val_loss_all.append(val_loss",[91,33145,833],{"class":153},[91,33147,33148],{"class":250},"val_num)\n",[91,33150,33152],{"class":93,"line":33151},147,[91,33153,33154],{"class":308},"        # 计算并保存验证集的准确率\n",[91,33156,33158,33161,33163],{"class":93,"line":33157},148,[91,33159,33160],{"class":250},"        val_acc_all.append(val_corrects.double().item()",[91,33162,833],{"class":153},[91,33164,33148],{"class":250},[91,33166,33168],{"class":93,"line":33167},149,[91,33169,2523],{"emptyLinePlaceholder":175},[91,33171,33173],{"class":93,"line":33172},150,[91,33174,33175],{"class":308},"        # 打印训练一轮的loss值和准确率\n",[91,33177,33179,33181,33183,33185,33187,33190,33192,33195,33197,33200,33202,33204,33206,33208,33211,33213,33215,33218,33220,33222],{"class":93,"line":33178},151,[91,33180,32532],{"class":105},[91,33182,251],{"class":250},[91,33184,3715],{"class":101},[91,33186,32540],{"class":105},[91,33188,33189],{"class":101},"train loss:",[91,33191,1145],{"class":105},[91,33193,33194],{"class":153},":.4f",[91,33196,1195],{"class":105},[91,33198,33199],{"class":101}," train acc:",[91,33201,1145],{"class":105},[91,33203,33194],{"class":153},[91,33205,1195],{"class":105},[91,33207,3715],{"class":101},[91,33209,33210],{"class":250},".format(epoch,train_loss_all[",[91,33212,781],{"class":153},[91,33214,466],{"class":105},[91,33216,33217],{"class":250},"],train_acc_all[",[91,33219,781],{"class":153},[91,33221,466],{"class":105},[91,33223,33224],{"class":250},"]))\n",[91,33226,33228,33230,33232,33234,33236,33239,33241,33243,33245,33248,33250,33252,33254,33256,33259,33261,33263,33266,33268,33270],{"class":93,"line":33227},152,[91,33229,32532],{"class":105},[91,33231,251],{"class":250},[91,33233,3715],{"class":101},[91,33235,32540],{"class":105},[91,33237,33238],{"class":101},"val loss:",[91,33240,1145],{"class":105},[91,33242,33194],{"class":153},[91,33244,1195],{"class":105},[91,33246,33247],{"class":101}," val acc:",[91,33249,1145],{"class":105},[91,33251,33194],{"class":153},[91,33253,1195],{"class":105},[91,33255,3715],{"class":101},[91,33257,33258],{"class":250},".format(epoch,val_loss_all[",[91,33260,781],{"class":153},[91,33262,466],{"class":105},[91,33264,33265],{"class":250},"],val_acc_all[",[91,33267,781],{"class":153},[91,33269,466],{"class":105},[91,33271,33224],{"class":250},[91,33273,33275],{"class":93,"line":33274},153,[91,33276,2523],{"emptyLinePlaceholder":175},[91,33278,33280],{"class":93,"line":33279},154,[91,33281,33282],{"class":308},"        # 判断准确度--->保存最优模型\n",[91,33284,33286,33288,33291,33293,33295,33297,33299],{"class":93,"line":33285},155,[91,33287,2620],{"class":153},[91,33289,33290],{"class":250}," val_acc_all[",[91,33292,781],{"class":153},[91,33294,466],{"class":105},[91,33296,1189],{"class":250},[91,33298,1209],{"class":153},[91,33300,33301],{"class":250},"best_acc:\n",[91,33303,33305],{"class":93,"line":33304},156,[91,33306,33307],{"class":308},"            # 保存当前模型准确度\n",[91,33309,33311,33314,33316,33318,33321,33323,33325],{"class":93,"line":33310},157,[91,33312,33313],{"class":250},"            best_acc:",[91,33315,290],{"class":105},[91,33317,296],{"class":153},[91,33319,33320],{"class":250},"val_acc_all[",[91,33322,781],{"class":153},[91,33324,466],{"class":105},[91,33326,33327],{"class":250},"]\n",[91,33329,33331],{"class":93,"line":33330},158,[91,33332,33333],{"class":308},"            # 保存当前的准确度\n",[91,33335,33337],{"class":93,"line":33336},159,[91,33338,33339],{"class":308},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[91,33341,33343,33346,33348],{"class":93,"line":33342},160,[91,33344,33345],{"class":250},"            best_model_wts",[91,33347,296],{"class":153},[91,33349,32395],{"class":250},[91,33351,33353],{"class":93,"line":33352},161,[91,33354,2523],{"emptyLinePlaceholder":175},[91,33356,33358],{"class":93,"line":33357},162,[91,33359,33360],{"class":308},"        # 计算耗时\n",[91,33362,33364,33367,33369,33372,33374],{"class":93,"line":33363},163,[91,33365,33366],{"class":250},"        time_use",[91,33368,296],{"class":153},[91,33370,33371],{"class":250},"time.time()",[91,33373,781],{"class":153},[91,33375,33376],{"class":250},"since\n",[91,33378,33380,33382,33384,33387,33389,33392,33394,33396,33398,33400,33402,33405,33408,33411,33413,33416,33418,33420],{"class":93,"line":33379},164,[91,33381,32532],{"class":105},[91,33383,251],{"class":250},[91,33385,33386],{"class":101},"'训练和验证耗费的时间",[91,33388,1145],{"class":105},[91,33390,33391],{"class":153},":.0f",[91,33393,1195],{"class":105},[91,33395,793],{"class":101},[91,33397,1145],{"class":105},[91,33399,33391],{"class":153},[91,33401,1195],{"class":105},[91,33403,33404],{"class":101},"s'",[91,33406,33407],{"class":250},".format(time_use",[91,33409,33410],{"class":153},"\u002F\u002F",[91,33412,1156],{"class":105},[91,33414,33415],{"class":250},",time_use",[91,33417,577],{"class":153},[91,33419,1156],{"class":105},[91,33421,30578],{"class":250},[91,33423,33425],{"class":93,"line":33424},165,[91,33426,33427],{"class":308},"    # 选择最优参数\n",[91,33429,33431],{"class":93,"line":33430},166,[91,33432,33433],{"class":308},"    # 加载最高准确率下的模型参数\n",[91,33435,33437],{"class":93,"line":33436},167,[91,33438,33439],{"class":308},"    # model.load_state_dict(best_model_wts)\n",[91,33441,33443,33446,33449],{"class":93,"line":33442},168,[91,33444,33445],{"class":250},"    torch.save(model.state_dict(best_model_wts), ",[91,33447,33448],{"class":101},"'.\u002Fbest_model.pth'",[91,33450,257],{"class":250},[91,33452,33454],{"class":93,"line":33453},169,[91,33455,33456],{"class":308},"    # 或者写成\n",[91,33458,33460],{"class":93,"line":33459},170,[91,33461,33462],{"class":308},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[91,33464,33466],{"class":93,"line":33465},171,[91,33467,33468],{"class":308},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[91,33470,33472,33475,33477,33480,33483,33485],{"class":93,"line":33471},172,[91,33473,33474],{"class":250},"    train_process",[91,33476,296],{"class":153},[91,33478,33479],{"class":250},"pd.DataFrame(",[91,33481,33482],{"class":5339},"data",[91,33484,296],{"class":153},[91,33486,1670],{"class":250},[91,33488,33490,33493,33495,33498],{"class":93,"line":33489},173,[91,33491,33492],{"class":101},"        \"epoch\"",[91,33494,1108],{"class":250},[91,33496,33497],{"class":105},"range",[91,33499,33500],{"class":250},"(num_epochs),\n",[91,33502,33504,33507],{"class":93,"line":33503},174,[91,33505,33506],{"class":101},"        \"train_loss_all\"",[91,33508,33509],{"class":250},":train_loss_all,\n",[91,33511,33513,33516],{"class":93,"line":33512},175,[91,33514,33515],{"class":101},"        \"val_loss_all\"",[91,33517,33518],{"class":250},":val_loss_all,\n",[91,33520,33522,33525],{"class":93,"line":33521},176,[91,33523,33524],{"class":101},"        \"train_acc_all\"",[91,33526,33527],{"class":250},":train_acc_all,\n",[91,33529,33531,33534],{"class":93,"line":33530},177,[91,33532,33533],{"class":101},"        \"val_acc_all\"",[91,33535,33536],{"class":250},":val_acc_all\n",[91,33538,33540],{"class":93,"line":33539},178,[91,33541,33542],{"class":250},"    })\n",[91,33544,33546],{"class":93,"line":33545},179,[91,33547,33548],{"class":308},"    # 返回训练保存的过程\n",[91,33550,33552,33554],{"class":93,"line":33551},180,[91,33553,4213],{"class":153},[91,33555,33556],{"class":250}," train_process\n",[91,33558,33560],{"class":93,"line":33559},181,[91,33561,2523],{"emptyLinePlaceholder":175},[91,33563,33565],{"class":93,"line":33564},182,[91,33566,33567],{"class":308},"# 将loss值和精度按照图片的形式展示出来\n",[91,33569,33571,33573,33576],{"class":93,"line":33570},183,[91,33572,32028],{"class":153},[91,33574,33575],{"class":97}," matplot_acc_loss",[91,33577,33578],{"class":250},"(train_process):\n",[91,33580,33582],{"class":93,"line":33581},184,[91,33583,33584],{"class":308},"    # 设置图的大小\n",[91,33586,33588,33591,33593,33595,33597,33599,33601,33603],{"class":93,"line":33587},185,[91,33589,33590],{"class":250},"    plt.figure(",[91,33592,31774],{"class":5339},[91,33594,296],{"class":153},[91,33596,251],{"class":250},[91,33598,747],{"class":105},[91,33600,627],{"class":250},[91,33602,542],{"class":105},[91,33604,30578],{"class":250},[91,33606,33608],{"class":93,"line":33607},186,[91,33609,33610],{"class":308},"    # 设置图中有几张图\n",[91,33612,33614],{"class":93,"line":33613},187,[91,33615,33616],{"class":308},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[91,33618,33620],{"class":93,"line":33619},188,[91,33621,33622],{"class":308},"    # ①loss图\n",[91,33624,33626,33628,33630,33632,33634,33636,33638],{"class":93,"line":33625},189,[91,33627,31808],{"class":250},[91,33629,466],{"class":105},[91,33631,627],{"class":250},[91,33633,327],{"class":105},[91,33635,627],{"class":250},[91,33637,466],{"class":105},[91,33639,257],{"class":250},[91,33641,33643],{"class":93,"line":33642},190,[91,33644,33645],{"class":308},"    # 补充:\n",[91,33647,33649],{"class":93,"line":33648},191,[91,33650,33651],{"class":308},"    # plt.subplot(nrows, ncols, index)\n",[91,33653,33655],{"class":93,"line":33654},192,[91,33656,33657],{"class":308},"    # nrows：行数\n",[91,33659,33661],{"class":93,"line":33660},193,[91,33662,33663],{"class":308},"    # ncols：列数\n",[91,33665,33667],{"class":93,"line":33666},194,[91,33668,33669],{"class":308},"    # index：目前选中第几个子图（从1开始）\n",[91,33671,33673,33676,33679,33682,33685,33687,33690,33692,33695],{"class":93,"line":33672},195,[91,33674,33675],{"class":250},"    plt.plot(train_process[",[91,33677,33678],{"class":101},"\"epoch\"",[91,33680,33681],{"class":250},"],train_process.train_loss_all,",[91,33683,33684],{"class":101},"'ro-'",[91,33686,627],{"class":250},[91,33688,33689],{"class":5339},"label",[91,33691,296],{"class":153},[91,33693,33694],{"class":101},"'train loss'",[91,33696,257],{"class":250},[91,33698,33700,33702,33704,33707,33710,33712,33714,33716,33719],{"class":93,"line":33699},196,[91,33701,33675],{"class":250},[91,33703,33678],{"class":101},[91,33705,33706],{"class":250},"],train_process.val_loss_all,",[91,33708,33709],{"class":101},"'bs--'",[91,33711,627],{"class":250},[91,33713,33689],{"class":5339},[91,33715,296],{"class":153},[91,33717,33718],{"class":101},"'val loss'",[91,33720,257],{"class":250},[91,33722,33724],{"class":93,"line":33723},197,[91,33725,33726],{"class":308},"    # 添加一个图例\n",[91,33728,33730],{"class":93,"line":33729},198,[91,33731,33732],{"class":250},"    plt.legend()\n",[91,33734,33736],{"class":93,"line":33735},199,[91,33737,33738],{"class":308},"    # 给轴添加标签\n",[91,33740,33742,33745,33748],{"class":93,"line":33741},200,[91,33743,33744],{"class":250},"    plt.xlabel(",[91,33746,33747],{"class":101},"'epoch'",[91,33749,257],{"class":250},[91,33751,33753,33756,33759],{"class":93,"line":33752},201,[91,33754,33755],{"class":250},"    plt.ylabel(",[91,33757,33758],{"class":101},"'loss'",[91,33760,257],{"class":250},[91,33762,33764],{"class":93,"line":33763},202,[91,33765,33766],{"class":308},"    # ②准确度图\n",[91,33768,33770,33772,33774,33776,33778,33780,33782],{"class":93,"line":33769},203,[91,33771,31808],{"class":250},[91,33773,466],{"class":105},[91,33775,627],{"class":250},[91,33777,327],{"class":105},[91,33779,627],{"class":250},[91,33781,327],{"class":105},[91,33783,257],{"class":250},[91,33785,33787,33789,33791,33794,33796,33798,33800,33802,33805],{"class":93,"line":33786},204,[91,33788,33675],{"class":250},[91,33790,33678],{"class":101},[91,33792,33793],{"class":250},"],train_process.train_acc_all,",[91,33795,33684],{"class":101},[91,33797,627],{"class":250},[91,33799,33689],{"class":5339},[91,33801,296],{"class":153},[91,33803,33804],{"class":101},"'train acc'",[91,33806,257],{"class":250},[91,33808,33810,33812,33814,33817,33819,33821,33823,33825,33828],{"class":93,"line":33809},205,[91,33811,33675],{"class":250},[91,33813,33678],{"class":101},[91,33815,33816],{"class":250},"],train_process.val_acc_all,",[91,33818,33709],{"class":101},[91,33820,627],{"class":250},[91,33822,33689],{"class":5339},[91,33824,296],{"class":153},[91,33826,33827],{"class":101},"'val acc'",[91,33829,257],{"class":250},[91,33831,33833],{"class":93,"line":33832},206,[91,33834,33835],{"class":308},"    # 添加图例\n",[91,33837,33839],{"class":93,"line":33838},207,[91,33840,33732],{"class":250},[91,33842,33844,33846,33848],{"class":93,"line":33843},208,[91,33845,33744],{"class":250},[91,33847,33678],{"class":101},[91,33849,257],{"class":250},[91,33851,33853,33855,33858],{"class":93,"line":33852},209,[91,33854,33755],{"class":250},[91,33856,33857],{"class":101},"\"acc\"",[91,33859,257],{"class":250},[91,33861,33863],{"class":93,"line":33862},210,[91,33864,33865],{"class":250},"    plt.show()\n",[91,33867,33869],{"class":93,"line":33868},211,[91,33870,2523],{"emptyLinePlaceholder":175},[91,33872,33874],{"class":93,"line":33873},212,[91,33875,33876],{"class":308},"# 正式开始训练:\n",[91,33878,33880,33882,33884,33886,33888],{"class":93,"line":33879},213,[91,33881,1655],{"class":153},[91,33883,31301],{"class":105},[91,33885,3072],{"class":153},[91,33887,31306],{"class":101},[91,33889,3862],{"class":250},[91,33891,33893],{"class":93,"line":33892},214,[91,33894,33895],{"class":308},"    # 将模型实例化\n",[91,33897,33899,33902,33904],{"class":93,"line":33898},215,[91,33900,33901],{"class":250},"    LeNet",[91,33903,296],{"class":153},[91,33905,33906],{"class":250},"LeNet()\n",[91,33908,33910,33913,33915],{"class":93,"line":33909},216,[91,33911,33912],{"class":250},"    train_dataloader,val_dataloader",[91,33914,296],{"class":153},[91,33916,33917],{"class":250},"train_val_data_process()\n",[91,33919,33921,33923,33925,33928,33931,33933,33935],{"class":93,"line":33920},217,[91,33922,33474],{"class":250},[91,33924,296],{"class":153},[91,33926,33927],{"class":250},"train_model_process(LeNet,train_dataloader,val_dataloader,",[91,33929,33930],{"class":5339},"num_epochs",[91,33932,296],{"class":153},[91,33934,949],{"class":105},[91,33936,257],{"class":250},[91,33938,33940],{"class":93,"line":33939},218,[91,33941,33942],{"class":250},"    matplot_acc_loss(train_process)\n",[21,33944,33945],{},"画图的补充点学习：",[21,33947,33948],{},[24,33949],{"alt":26,"src":33950},"\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",[14,33952,33953],{"start":1304},[17,33954,33955],{},"测试",[82,33957,33959],{"className":30459,"code":33958,"language":30461,"meta":26,"style":26},"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",[88,33960,33961,33967,33977,33989,33999,34004,34014,34024,34028,34033,34042,34059,34071,34088,34099,34115,34120,34131,34142,34153,34160,34164,34169,34179,34184,34201,34209,34213,34218,34227,34236,34240,34245,34250,34255,34262,34267,34279,34289,34299,34304,34308,34313,34322,34327,34343,34348,34353,34358,34372,34377,34391,34395,34400,34415,34420,34432,34436,34441,34453,34458,34466,34471,34476,34486,34491,34500,34505,34510,34514,34519,34524,34540,34548,34553,34558,34617,34623,34628,34639,34647,34655,34659,34664,34668,34673,34681,34686,34702,34707,34717,34727],{"__ignoreMap":26},[91,33962,33963,33965],{"class":93,"line":94},[91,33964,30473],{"class":153},[91,33966,30476],{"class":250},[91,33968,33969,33971,33973,33975],{"class":93,"line":38},[91,33970,30473],{"class":153},[91,33972,31496],{"class":250},[91,33974,31464],{"class":153},[91,33976,31501],{"class":250},[91,33978,33979,33981,33984,33986],{"class":93,"line":1304},[91,33980,30818],{"class":153},[91,33982,33983],{"class":250}," jupyter_client.consoleapp ",[91,33985,30473],{"class":153},[91,33987,33988],{"class":250}," classes\n",[91,33990,33991,33993,33995,33997],{"class":93,"line":1319},[91,33992,30818],{"class":153},[91,33994,31479],{"class":250},[91,33996,30473],{"class":153},[91,33998,31484],{"class":250},[91,34000,34001],{"class":93,"line":1325},[91,34002,34003],{"class":308},"# 导入数据集\n",[91,34005,34006,34008,34010,34012],{"class":93,"line":1339},[91,34007,30818],{"class":153},[91,34009,31449],{"class":250},[91,34011,30473],{"class":153},[91,34013,31454],{"class":250},[91,34015,34016,34018,34020,34022],{"class":93,"line":1345},[91,34017,30818],{"class":153},[91,34019,31995],{"class":250},[91,34021,30473],{"class":153},[91,34023,32000],{"class":250},[91,34025,34026],{"class":93,"line":1436},[91,34027,2523],{"emptyLinePlaceholder":175},[91,34029,34030],{"class":93,"line":1442},[91,34031,34032],{"class":308},"# 测试数据处理\n",[91,34034,34035,34037,34040],{"class":93,"line":1454},[91,34036,32028],{"class":153},[91,34038,34039],{"class":97}," test_data_process",[91,34041,32034],{"class":250},[91,34043,34044,34047,34049,34051,34053,34055,34057],{"class":93,"line":1736},[91,34045,34046],{"class":250},"    test_data",[91,34048,296],{"class":153},[91,34050,31536],{"class":250},[91,34052,31539],{"class":5339},[91,34054,296],{"class":153},[91,34056,31544],{"class":101},[91,34058,31547],{"class":250},[91,34060,34061,34064,34066,34069],{"class":93,"line":1741},[91,34062,34063],{"class":5339},"                           train",[91,34065,296],{"class":153},[91,34067,34068],{"class":105},"False",[91,34070,31547],{"class":250},[91,34072,34073,34076,34078,34080,34082,34084,34086],{"class":93,"line":1747},[91,34074,34075],{"class":5339},"                           transform",[91,34077,296],{"class":153},[91,34079,31574],{"class":250},[91,34081,31577],{"class":5339},[91,34083,296],{"class":153},[91,34085,1150],{"class":105},[91,34087,31585],{"class":250},[91,34089,34090,34093,34095,34097],{"class":93,"line":1752},[91,34091,34092],{"class":5339},"                           download",[91,34094,296],{"class":153},[91,34096,31557],{"class":105},[91,34098,257],{"class":250},[91,34100,34101,34104,34106,34108,34110,34112],{"class":93,"line":1766},[91,34102,34103],{"class":250},"    test_dataloader",[91,34105,296],{"class":153},[91,34107,31615],{"class":250},[91,34109,31618],{"class":5339},[91,34111,296],{"class":153},[91,34113,34114],{"class":250},"test_data,\n",[91,34116,34117],{"class":93,"line":1771},[91,34118,34119],{"class":308},"                                    # 这里是一张一张进行测试\n",[91,34121,34122,34125,34127,34129],{"class":93,"line":1777},[91,34123,34124],{"class":5339},"                                    batch_size",[91,34126,296],{"class":153},[91,34128,466],{"class":105},[91,34130,31547],{"class":250},[91,34132,34133,34136,34138,34140],{"class":93,"line":1798},[91,34134,34135],{"class":5339},"                                    shuffle",[91,34137,296],{"class":153},[91,34139,31557],{"class":105},[91,34141,31547],{"class":250},[91,34143,34144,34147,34149,34151],{"class":93,"line":1803},[91,34145,34146],{"class":5339},"                                    num_workers",[91,34148,296],{"class":153},[91,34150,440],{"class":105},[91,34152,257],{"class":250},[91,34154,34155,34157],{"class":93,"line":1817},[91,34156,4213],{"class":153},[91,34158,34159],{"class":250}," test_dataloader\n",[91,34161,34162],{"class":93,"line":1822},[91,34163,2523],{"emptyLinePlaceholder":175},[91,34165,34166],{"class":93,"line":1851},[91,34167,34168],{"class":308},"# 定义模型测试函数\n",[91,34170,34171,34173,34176],{"class":93,"line":1856},[91,34172,32028],{"class":153},[91,34174,34175],{"class":97}," test_model_process",[91,34177,34178],{"class":250},"(model,test_dataloader):\n",[91,34180,34181],{"class":93,"line":1873},[91,34182,34183],{"class":308},"    # 将模型放到设备当中，先进行判断\n",[91,34185,34186,34188,34190,34192,34194,34196,34198],{"class":93,"line":1878},[91,34187,31318],{"class":250},[91,34189,296],{"class":153},[91,34191,31325],{"class":101},[91,34193,1828],{"class":153},[91,34195,31330],{"class":250},[91,34197,1825],{"class":153},[91,34199,34200],{"class":101}," \"cpu\"\n",[91,34202,34203,34205,34207],{"class":93,"line":1883},[91,34204,31370],{"class":250},[91,34206,296],{"class":153},[91,34208,32370],{"class":250},[91,34210,34211],{"class":93,"line":1888},[91,34212,2523],{"emptyLinePlaceholder":175},[91,34214,34215],{"class":93,"line":1902},[91,34216,34217],{"class":308},"    # 设置初始化参数\n",[91,34219,34220,34223,34225],{"class":93,"line":1907},[91,34221,34222],{"class":250},"    test_corrects",[91,34224,296],{"class":153},[91,34226,32423],{"class":105},[91,34228,34229,34232,34234],{"class":93,"line":2700},[91,34230,34231],{"class":250},"    test_num",[91,34233,296],{"class":153},[91,34235,3208],{"class":105},[91,34237,34238],{"class":93,"line":2714},[91,34239,2523],{"emptyLinePlaceholder":175},[91,34241,34242],{"class":93,"line":2722},[91,34243,34244],{"class":308},"    # 进行模型测试\n",[91,34246,34247],{"class":93,"line":2727},[91,34248,34249],{"class":308},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[91,34251,34252],{"class":93,"line":2733},[91,34253,34254],{"class":308},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[91,34256,34257,34260],{"class":93,"line":2739},[91,34258,34259],{"class":153},"    with",[91,34261,32965],{"class":250},[91,34263,34264],{"class":93,"line":2744},[91,34265,34266],{"class":308},"        # 从数据中进行\n",[91,34268,34269,34271,34274,34276],{"class":93,"line":8071},[91,34270,3526],{"class":153},[91,34272,34273],{"class":250}," test_data_x,test_data_y ",[91,34275,26165],{"class":153},[91,34277,34278],{"class":250}," test_dataloader:\n",[91,34280,34281,34284,34286],{"class":93,"line":8095},[91,34282,34283],{"class":250},"            test_data_x",[91,34285,296],{"class":153},[91,34287,34288],{"class":250},"test_data_x.to(device)\n",[91,34290,34291,34294,34296],{"class":93,"line":8100},[91,34292,34293],{"class":250},"            test_data_y",[91,34295,296],{"class":153},[91,34297,34298],{"class":250},"test_data_y.to(device)\n",[91,34300,34301],{"class":93,"line":8106},[91,34302,34303],{"class":308},"            # 设置为验证模式\n",[91,34305,34306],{"class":93,"line":8133},[91,34307,32956],{"class":250},[91,34309,34310],{"class":93,"line":8138},[91,34311,34312],{"class":308},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[91,34314,34315,34317,34319],{"class":93,"line":8144},[91,34316,32741],{"class":250},[91,34318,296],{"class":153},[91,34320,34321],{"class":250},"model(test_data_x)\n",[91,34323,34324],{"class":93,"line":8156},[91,34325,34326],{"class":308},"            # 查找每一行中最大值对应的下标\n",[91,34328,34329,34331,34333,34335,34337,34339,34341],{"class":93,"line":8168},[91,34330,32758],{"class":250},[91,34332,296],{"class":153},[91,34334,32763],{"class":250},[91,34336,32766],{"class":5339},[91,34338,296],{"class":153},[91,34340,466],{"class":105},[91,34342,257],{"class":250},[91,34344,34345],{"class":93,"line":8180},[91,34346,34347],{"class":308},"            # 计算正确率\n",[91,34349,34350],{"class":93,"line":9839},[91,34351,34352],{"class":308},"            # .data表示是一个不带梯度信息的tensor\n",[91,34354,34355],{"class":93,"line":9864},[91,34356,34357],{"class":308},"            # 如果预测正确，则准确度test_corrects加1\n",[91,34359,34360,34363,34365,34367,34369],{"class":93,"line":9887},[91,34361,34362],{"class":250},"            test_corrects",[91,34364,9600],{"class":153},[91,34366,32868],{"class":250},[91,34368,3072],{"class":153},[91,34370,34371],{"class":250},"test_data_y.data)\n",[91,34373,34374],{"class":93,"line":9911},[91,34375,34376],{"class":308},"            # 将所有的测试样本进行累计\n",[91,34378,34379,34382,34384,34387,34389],{"class":93,"line":9916},[91,34380,34381],{"class":250},"            test_num",[91,34383,9600],{"class":153},[91,34385,34386],{"class":250},"test_data_x.size(",[91,34388,440],{"class":105},[91,34390,257],{"class":250},[91,34392,34393],{"class":93,"line":9921},[91,34394,2523],{"emptyLinePlaceholder":175},[91,34396,34397],{"class":93,"line":9926},[91,34398,34399],{"class":308},"        # 计算准确度\n",[91,34401,34402,34405,34407,34410,34412],{"class":93,"line":9935},[91,34403,34404],{"class":250},"        test_acc",[91,34406,296],{"class":153},[91,34408,34409],{"class":250},"test_corrects.double().item()",[91,34411,833],{"class":153},[91,34413,34414],{"class":250},"test_num\n",[91,34416,34417],{"class":93,"line":9940},[91,34418,34419],{"class":308},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[91,34421,34422,34424,34426,34429],{"class":93,"line":9946},[91,34423,32532],{"class":105},[91,34425,251],{"class":250},[91,34427,34428],{"class":101},"\"测试的准确率：\"",[91,34430,34431],{"class":250},",test_acc)\n",[91,34433,34434],{"class":93,"line":9967},[91,34435,2523],{"emptyLinePlaceholder":175},[91,34437,34438],{"class":93,"line":9973},[91,34439,34440],{"class":308},"# 实现模型的测试功能\n",[91,34442,34443,34445,34447,34449,34451],{"class":93,"line":9987},[91,34444,1655],{"class":153},[91,34446,31301],{"class":105},[91,34448,3072],{"class":153},[91,34450,31306],{"class":101},[91,34452,3862],{"class":250},[91,34454,34455],{"class":93,"line":9993},[91,34456,34457],{"class":308},"    # 加载模型\n",[91,34459,34460,34462,34464],{"class":93,"line":10020},[91,34461,31370],{"class":250},[91,34463,296],{"class":153},[91,34465,33906],{"class":250},[91,34467,34468],{"class":93,"line":10029},[91,34469,34470],{"class":308},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[91,34472,34473],{"class":93,"line":10035},[91,34474,34475],{"class":308},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[91,34477,34478,34481,34484],{"class":93,"line":10043},[91,34479,34480],{"class":250},"    model.load_state_dict(torch.load(",[91,34482,34483],{"class":101},"'best_model.pth'",[91,34485,30578],{"class":250},[91,34487,34488],{"class":93,"line":10048},[91,34489,34490],{"class":308},"    # 数据加载\n",[91,34492,34493,34495,34497],{"class":93,"line":16727},[91,34494,34103],{"class":250},[91,34496,296],{"class":153},[91,34498,34499],{"class":250},"test_data_process()\n",[91,34501,34502],{"class":93,"line":16733},[91,34503,34504],{"class":308},"    # 加载模型测试的函数\n",[91,34506,34507],{"class":93,"line":16756},[91,34508,34509],{"class":250},"    test_model_process(model,test_dataloader)\n",[91,34511,34512],{"class":93,"line":16762},[91,34513,2523],{"emptyLinePlaceholder":175},[91,34515,34516],{"class":93,"line":16785},[91,34517,34518],{"class":308},"    # 验证集推理实现：\n",[91,34520,34521],{"class":93,"line":16799},[91,34522,34523],{"class":308},"    # 加载数据加载的更详细一些\n",[91,34525,34526,34528,34530,34532,34534,34536,34538],{"class":93,"line":16819},[91,34527,31318],{"class":250},[91,34529,296],{"class":153},[91,34531,31325],{"class":101},[91,34533,1828],{"class":153},[91,34535,31330],{"class":250},[91,34537,1825],{"class":153},[91,34539,34200],{"class":101},[91,34541,34542,34544,34546],{"class":93,"line":16825},[91,34543,31370],{"class":250},[91,34545,296],{"class":153},[91,34547,32370],{"class":250},[91,34549,34550],{"class":93,"line":16836},[91,34551,34552],{"class":308},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[91,34554,34555],{"class":93,"line":16859},[91,34556,34557],{"class":308},"    # 顺序不可改变\n",[91,34559,34560,34563,34565,34567,34570,34572,34575,34577,34580,34582,34585,34587,34590,34592,34595,34597,34600,34602,34605,34607,34610,34612,34615],{"class":93,"line":16881},[91,34561,34562],{"class":250},"    classes",[91,34564,296],{"class":153},[91,34566,1139],{"class":250},[91,34568,34569],{"class":101},"'T-shirt\u002Ftop'",[91,34571,627],{"class":250},[91,34573,34574],{"class":101},"'Trouser'",[91,34576,627],{"class":250},[91,34578,34579],{"class":101},"'Pullover'",[91,34581,627],{"class":250},[91,34583,34584],{"class":101},"'Dress'",[91,34586,627],{"class":250},[91,34588,34589],{"class":101},"'Coat'",[91,34591,627],{"class":250},[91,34593,34594],{"class":101},"'Sandal'",[91,34596,627],{"class":250},[91,34598,34599],{"class":101},"'Shirt'",[91,34601,627],{"class":250},[91,34603,34604],{"class":101},"'Sneaker'",[91,34606,627],{"class":250},[91,34608,34609],{"class":101},"'Bag'",[91,34611,627],{"class":250},[91,34613,34614],{"class":101},"'Ankle boot'",[91,34616,33327],{"class":250},[91,34618,34619,34621],{"class":93,"line":16886},[91,34620,34259],{"class":153},[91,34622,32965],{"class":250},[91,34624,34625],{"class":93,"line":16892},[91,34626,34627],{"class":308},"        # 将数据和标签都放到设备当中\n",[91,34629,34630,34632,34635,34637],{"class":93,"line":16906},[91,34631,3526],{"class":153},[91,34633,34634],{"class":250}," b_x,b_y ",[91,34636,26165],{"class":153},[91,34638,34278],{"class":250},[91,34640,34641,34643,34645],{"class":93,"line":16919},[91,34642,32691],{"class":250},[91,34644,296],{"class":153},[91,34646,32696],{"class":250},[91,34648,34649,34651,34653],{"class":93,"line":16924},[91,34650,32706],{"class":250},[91,34652,296],{"class":153},[91,34654,32711],{"class":250},[91,34656,34657],{"class":93,"line":16938},[91,34658,2523],{"emptyLinePlaceholder":175},[91,34660,34661],{"class":93,"line":16943},[91,34662,34663],{"class":308},"            # 设置模型为验证模式\n",[91,34665,34666],{"class":93,"line":16949},[91,34667,32956],{"class":250},[91,34669,34670],{"class":93,"line":16954},[91,34671,34672],{"class":308},"            # 模型推理结果\n",[91,34674,34675,34677,34679],{"class":93,"line":16968},[91,34676,32741],{"class":250},[91,34678,296],{"class":153},[91,34680,32746],{"class":250},[91,34682,34683],{"class":93,"line":16973},[91,34684,34685],{"class":308},"            # 获取最大下标，最大下标就是类别号\n",[91,34687,34688,34690,34692,34694,34696,34698,34700],{"class":93,"line":16978},[91,34689,32758],{"class":250},[91,34691,296],{"class":153},[91,34693,32763],{"class":250},[91,34695,32766],{"class":5339},[91,34697,296],{"class":153},[91,34699,466],{"class":105},[91,34701,257],{"class":250},[91,34703,34704],{"class":93,"line":16992},[91,34705,34706],{"class":308},"            # 取出张量中的数值\n",[91,34708,34709,34712,34714],{"class":93,"line":17004},[91,34710,34711],{"class":250},"            result",[91,34713,296],{"class":153},[91,34715,34716],{"class":250},"pre_lab.item()\n",[91,34718,34719,34722,34724],{"class":93,"line":17009},[91,34720,34721],{"class":250},"            label",[91,34723,296],{"class":153},[91,34725,34726],{"class":250},"b_y.item()\n",[91,34728,34729,34732,34734,34737,34740,34743,34745,34748],{"class":93,"line":17022},[91,34730,34731],{"class":105},"            print",[91,34733,251],{"class":250},[91,34735,34736],{"class":101},"\"预测值：\"",[91,34738,34739],{"class":250},",classes[result],",[91,34741,34742],{"class":101},"\"------\"",[91,34744,627],{"class":250},[91,34746,34747],{"class":101},"\"真实值：\"",[91,34749,34750],{"class":250},",classes[label])\n",[21,34752,34753],{},"（2）AlexNet",[14,34755,34756],{},[17,34757,34758],{},"神经网络构建",[82,34760,34762],{"className":30459,"code":34761,"language":30461,"meta":26,"style":26},"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",[88,34763,34764,34770,34780,34790,34802,34806,34823,34831,34846,34858,34900,34927,34970,34996,35040,35083,35126,35153,35157,35167,35172,35200,35219,35238,35242,35247,35255,35270,35280,35294,35304,35319,35334,35349,35360,35364,35369,35379,35394,35399,35413,35428,35440,35445,35456,35461,35467,35472,35484,35504,35509,35518],{"__ignoreMap":26},[91,34765,34766,34768],{"class":93,"line":94},[91,34767,30473],{"class":153},[91,34769,30476],{"class":250},[91,34771,34772,34774,34776,34778],{"class":93,"line":38},[91,34773,30818],{"class":153},[91,34775,30821],{"class":250},[91,34777,30473],{"class":153},[91,34779,30826],{"class":250},[91,34781,34782,34784,34786,34788],{"class":93,"line":1304},[91,34783,30818],{"class":153},[91,34785,30838],{"class":250},[91,34787,30473],{"class":153},[91,34789,30843],{"class":250},[91,34791,34792,34794,34797,34799],{"class":93,"line":1319},[91,34793,30473],{"class":153},[91,34795,34796],{"class":250}," torch.nn.functional ",[91,34798,31464],{"class":153},[91,34800,34801],{"class":250}," F\n",[91,34803,34804],{"class":93,"line":1325},[91,34805,2523],{"emptyLinePlaceholder":175},[91,34807,34808,34810,34813,34815,34817,34819,34821],{"class":93,"line":1339},[91,34809,14817],{"class":153},[91,34811,34812],{"class":97}," AlexNet",[91,34814,251],{"class":250},[91,34816,30859],{"class":97},[91,34818,807],{"class":250},[91,34820,30864],{"class":97},[91,34822,30867],{"class":250},[91,34824,34825,34827,34829],{"class":93,"line":1345},[91,34826,30882],{"class":153},[91,34828,30885],{"class":105},[91,34830,30888],{"class":250},[91,34832,34833,34835,34838,34840,34842,34844],{"class":93,"line":1436},[91,34834,30898],{"class":105},[91,34836,34837],{"class":250},"(AlexNet,",[91,34839,30904],{"class":105},[91,34841,30907],{"class":250},[91,34843,30910],{"class":105},[91,34845,2099],{"class":250},[91,34847,34848,34850,34853,34855],{"class":93,"line":1442},[91,34849,30926],{"class":105},[91,34851,34852],{"class":250},".ReLu",[91,34854,296],{"class":153},[91,34856,34857],{"class":250},"nn.ReLU()\n",[91,34859,34860,34862,34864,34866,34868,34870,34872,34874,34876,34878,34880,34882,34884,34886,34888,34890,34892,34894,34896,34898],{"class":93,"line":1454},[91,34861,30926],{"class":105},[91,34863,30929],{"class":250},[91,34865,296],{"class":153},[91,34867,30934],{"class":250},[91,34869,30937],{"class":5339},[91,34871,296],{"class":153},[91,34873,466],{"class":105},[91,34875,627],{"class":250},[91,34877,30946],{"class":5339},[91,34879,296],{"class":153},[91,34881,458],{"class":105},[91,34883,627],{"class":250},[91,34885,30955],{"class":5339},[91,34887,296],{"class":153},[91,34889,721],{"class":105},[91,34891,627],{"class":250},[91,34893,31010],{"class":5339},[91,34895,296],{"class":153},[91,34897,542],{"class":105},[91,34899,257],{"class":250},[91,34901,34902,34904,34906,34908,34911,34913,34915,34917,34919,34921,34923,34925],{"class":93,"line":1736},[91,34903,30926],{"class":105},[91,34905,30994],{"class":250},[91,34907,296],{"class":153},[91,34909,34910],{"class":250},"nn.MaxPool2d(",[91,34912,30955],{"class":5339},[91,34914,296],{"class":153},[91,34916,321],{"class":105},[91,34918,627],{"class":250},[91,34920,31010],{"class":5339},[91,34922,296],{"class":153},[91,34924,327],{"class":105},[91,34926,257],{"class":250},[91,34928,34929,34931,34933,34935,34937,34939,34941,34943,34945,34947,34949,34952,34954,34956,34958,34960,34962,34964,34966,34968],{"class":93,"line":1741},[91,34930,30926],{"class":105},[91,34932,31023],{"class":250},[91,34934,296],{"class":153},[91,34936,30934],{"class":250},[91,34938,30937],{"class":5339},[91,34940,296],{"class":153},[91,34942,458],{"class":105},[91,34944,627],{"class":250},[91,34946,30946],{"class":5339},[91,34948,296],{"class":153},[91,34950,34951],{"class":105},"256",[91,34953,627],{"class":250},[91,34955,30955],{"class":5339},[91,34957,296],{"class":153},[91,34959,568],{"class":105},[91,34961,627],{"class":250},[91,34963,30964],{"class":5339},[91,34965,296],{"class":153},[91,34967,327],{"class":105},[91,34969,257],{"class":250},[91,34971,34972,34974,34976,34978,34980,34982,34984,34986,34988,34990,34992,34994],{"class":93,"line":1747},[91,34973,30926],{"class":105},[91,34975,31058],{"class":250},[91,34977,296],{"class":153},[91,34979,34910],{"class":250},[91,34981,30955],{"class":5339},[91,34983,296],{"class":153},[91,34985,321],{"class":105},[91,34987,627],{"class":250},[91,34989,31010],{"class":5339},[91,34991,296],{"class":153},[91,34993,327],{"class":105},[91,34995,257],{"class":250},[91,34997,34998,35000,35003,35005,35007,35009,35011,35013,35015,35017,35019,35022,35024,35026,35028,35030,35032,35034,35036,35038],{"class":93,"line":1752},[91,34999,30926],{"class":105},[91,35001,35002],{"class":250},".c5",[91,35004,296],{"class":153},[91,35006,30934],{"class":250},[91,35008,30937],{"class":5339},[91,35010,296],{"class":153},[91,35012,34951],{"class":105},[91,35014,627],{"class":250},[91,35016,30946],{"class":5339},[91,35018,296],{"class":153},[91,35020,35021],{"class":105},"384",[91,35023,627],{"class":250},[91,35025,30955],{"class":5339},[91,35027,296],{"class":153},[91,35029,321],{"class":105},[91,35031,627],{"class":250},[91,35033,30964],{"class":5339},[91,35035,296],{"class":153},[91,35037,466],{"class":105},[91,35039,257],{"class":250},[91,35041,35042,35044,35047,35049,35051,35053,35055,35057,35059,35061,35063,35065,35067,35069,35071,35073,35075,35077,35079,35081],{"class":93,"line":1766},[91,35043,30926],{"class":105},[91,35045,35046],{"class":250},".c6",[91,35048,296],{"class":153},[91,35050,30934],{"class":250},[91,35052,30937],{"class":5339},[91,35054,296],{"class":153},[91,35056,35021],{"class":105},[91,35058,627],{"class":250},[91,35060,30946],{"class":5339},[91,35062,296],{"class":153},[91,35064,35021],{"class":105},[91,35066,627],{"class":250},[91,35068,30955],{"class":5339},[91,35070,296],{"class":153},[91,35072,321],{"class":105},[91,35074,627],{"class":250},[91,35076,30964],{"class":5339},[91,35078,296],{"class":153},[91,35080,466],{"class":105},[91,35082,257],{"class":250},[91,35084,35085,35087,35090,35092,35094,35096,35098,35100,35102,35104,35106,35108,35110,35112,35114,35116,35118,35120,35122,35124],{"class":93,"line":1771},[91,35086,30926],{"class":105},[91,35088,35089],{"class":250},".c7",[91,35091,296],{"class":153},[91,35093,30934],{"class":250},[91,35095,30937],{"class":5339},[91,35097,296],{"class":153},[91,35099,35021],{"class":105},[91,35101,627],{"class":250},[91,35103,30946],{"class":5339},[91,35105,296],{"class":153},[91,35107,34951],{"class":105},[91,35109,627],{"class":250},[91,35111,30955],{"class":5339},[91,35113,296],{"class":153},[91,35115,321],{"class":105},[91,35117,627],{"class":250},[91,35119,30964],{"class":5339},[91,35121,296],{"class":153},[91,35123,466],{"class":105},[91,35125,257],{"class":250},[91,35127,35128,35130,35133,35135,35137,35139,35141,35143,35145,35147,35149,35151],{"class":93,"line":1777},[91,35129,30926],{"class":105},[91,35131,35132],{"class":250},".s8",[91,35134,296],{"class":153},[91,35136,34910],{"class":250},[91,35138,30955],{"class":5339},[91,35140,296],{"class":153},[91,35142,321],{"class":105},[91,35144,627],{"class":250},[91,35146,31010],{"class":5339},[91,35148,296],{"class":153},[91,35150,327],{"class":105},[91,35152,257],{"class":250},[91,35154,35155],{"class":93,"line":1798},[91,35156,31083],{"class":308},[91,35158,35159,35161,35163,35165],{"class":93,"line":1803},[91,35160,30926],{"class":105},[91,35162,31090],{"class":250},[91,35164,296],{"class":153},[91,35166,31095],{"class":250},[91,35168,35169],{"class":93,"line":1817},[91,35170,35171],{"class":308},"       # 定义全连接层\n",[91,35173,35174,35176,35179,35181,35183,35185,35187,35189,35191,35193,35195,35198],{"class":93,"line":1822},[91,35175,30926],{"class":105},[91,35177,35178],{"class":250},".f1",[91,35180,296],{"class":153},[91,35182,31112],{"class":250},[91,35184,593],{"class":105},[91,35186,704],{"class":153},[91,35188,593],{"class":105},[91,35190,704],{"class":153},[91,35192,34951],{"class":105},[91,35194,627],{"class":250},[91,35196,35197],{"class":105},"4096",[91,35199,257],{"class":250},[91,35201,35202,35204,35207,35209,35211,35213,35215,35217],{"class":93,"line":1851},[91,35203,30926],{"class":105},[91,35205,35206],{"class":250},".f2",[91,35208,296],{"class":153},[91,35210,31112],{"class":250},[91,35212,35197],{"class":105},[91,35214,627],{"class":250},[91,35216,35197],{"class":105},[91,35218,257],{"class":250},[91,35220,35221,35223,35226,35228,35230,35232,35234,35236],{"class":93,"line":1856},[91,35222,30926],{"class":105},[91,35224,35225],{"class":250},".f3",[91,35227,296],{"class":153},[91,35229,31112],{"class":250},[91,35231,35197],{"class":105},[91,35233,627],{"class":250},[91,35235,695],{"class":105},[91,35237,257],{"class":250},[91,35239,35240],{"class":93,"line":1873},[91,35241,2523],{"emptyLinePlaceholder":175},[91,35243,35244],{"class":93,"line":1878},[91,35245,35246],{"class":308},"    # 定义前向传播\n",[91,35248,35249,35251,35253],{"class":93,"line":1883},[91,35250,30882],{"class":153},[91,35252,31174],{"class":97},[91,35254,31177],{"class":250},[91,35256,35257,35259,35261,35263,35266,35268],{"class":93,"line":1888},[91,35258,31182],{"class":250},[91,35260,296],{"class":153},[91,35262,30904],{"class":105},[91,35264,35265],{"class":250},".ReLu(",[91,35267,30904],{"class":105},[91,35269,31194],{"class":250},[91,35271,35272,35274,35276,35278],{"class":93,"line":1902},[91,35273,31182],{"class":250},[91,35275,296],{"class":153},[91,35277,30904],{"class":105},[91,35279,31205],{"class":250},[91,35281,35282,35284,35286,35288,35290,35292],{"class":93,"line":1907},[91,35283,31182],{"class":250},[91,35285,296],{"class":153},[91,35287,30904],{"class":105},[91,35289,35265],{"class":250},[91,35291,30904],{"class":105},[91,35293,31220],{"class":250},[91,35295,35296,35298,35300,35302],{"class":93,"line":2700},[91,35297,31182],{"class":250},[91,35299,296],{"class":153},[91,35301,30904],{"class":105},[91,35303,31231],{"class":250},[91,35305,35306,35308,35310,35312,35314,35316],{"class":93,"line":2714},[91,35307,31182],{"class":250},[91,35309,296],{"class":153},[91,35311,30904],{"class":105},[91,35313,35265],{"class":250},[91,35315,30904],{"class":105},[91,35317,35318],{"class":250},".c5(x))\n",[91,35320,35321,35323,35325,35327,35329,35331],{"class":93,"line":2722},[91,35322,31182],{"class":250},[91,35324,296],{"class":153},[91,35326,30904],{"class":105},[91,35328,35265],{"class":250},[91,35330,30904],{"class":105},[91,35332,35333],{"class":250},".c6(x))\n",[91,35335,35336,35338,35340,35342,35344,35346],{"class":93,"line":2727},[91,35337,31182],{"class":250},[91,35339,296],{"class":153},[91,35341,30904],{"class":105},[91,35343,35265],{"class":250},[91,35345,30904],{"class":105},[91,35347,35348],{"class":250},".c7(x))\n",[91,35350,35351,35353,35355,35357],{"class":93,"line":2733},[91,35352,31182],{"class":250},[91,35354,296],{"class":153},[91,35356,30904],{"class":105},[91,35358,35359],{"class":250},".s8(x)\n",[91,35361,35362],{"class":93,"line":2739},[91,35363,2523],{"emptyLinePlaceholder":175},[91,35365,35366],{"class":93,"line":2744},[91,35367,35368],{"class":308},"        # 展平加线性全连接层\n",[91,35370,35371,35373,35375,35377],{"class":93,"line":8071},[91,35372,31182],{"class":250},[91,35374,296],{"class":153},[91,35376,30904],{"class":105},[91,35378,31242],{"class":250},[91,35380,35381,35383,35385,35387,35389,35391],{"class":93,"line":8095},[91,35382,31182],{"class":250},[91,35384,296],{"class":153},[91,35386,30904],{"class":105},[91,35388,35265],{"class":250},[91,35390,30904],{"class":105},[91,35392,35393],{"class":250},".f1(x))\n",[91,35395,35396],{"class":93,"line":8100},[91,35397,35398],{"class":308},"        # 还需要dropout对神经元随机进行失活\n",[91,35400,35401,35403,35405,35408,35411],{"class":93,"line":8106},[91,35402,31182],{"class":250},[91,35404,296],{"class":153},[91,35406,35407],{"class":250},"F.dropout(x,",[91,35409,35410],{"class":105},"0.5",[91,35412,257],{"class":250},[91,35414,35415,35417,35419,35421,35423,35425],{"class":93,"line":8133},[91,35416,31182],{"class":250},[91,35418,296],{"class":153},[91,35420,30904],{"class":105},[91,35422,35265],{"class":250},[91,35424,30904],{"class":105},[91,35426,35427],{"class":250},".f2(x))\n",[91,35429,35430,35432,35434,35436,35438],{"class":93,"line":8138},[91,35431,31182],{"class":250},[91,35433,296],{"class":153},[91,35435,35407],{"class":250},[91,35437,35410],{"class":105},[91,35439,257],{"class":250},[91,35441,35442],{"class":93,"line":8144},[91,35443,35444],{"class":308},"        # 直接输出\n",[91,35446,35447,35449,35451,35453],{"class":93,"line":8156},[91,35448,31182],{"class":250},[91,35450,296],{"class":153},[91,35452,30904],{"class":105},[91,35454,35455],{"class":250},".f3(x)\n",[91,35457,35458],{"class":93,"line":8168},[91,35459,35460],{"class":308},"        # 前向传播输出\n",[91,35462,35463,35465],{"class":93,"line":8180},[91,35464,14875],{"class":153},[91,35466,31290],{"class":250},[91,35468,35469],{"class":93,"line":9839},[91,35470,35471],{"class":308},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[91,35473,35474,35476,35478,35480,35482],{"class":93,"line":9864},[91,35475,1655],{"class":153},[91,35477,31301],{"class":105},[91,35479,3072],{"class":153},[91,35481,31306],{"class":101},[91,35483,3862],{"class":250},[91,35485,35486,35488,35490,35492,35494,35496,35498,35500,35502],{"class":93,"line":9887},[91,35487,31318],{"class":250},[91,35489,296],{"class":153},[91,35491,30532],{"class":250},[91,35493,31325],{"class":101},[91,35495,1828],{"class":153},[91,35497,31330],{"class":250},[91,35499,1825],{"class":153},[91,35501,30557],{"class":101},[91,35503,257],{"class":250},[91,35505,35506],{"class":93,"line":9911},[91,35507,35508],{"class":308},"    # 模型实例化，然后将实例化的模型放到设备中\n",[91,35510,35511,35513,35515],{"class":93,"line":9916},[91,35512,31370],{"class":250},[91,35514,296],{"class":153},[91,35516,35517],{"class":250},"AlexNet().to(device)\n",[91,35519,35520,35522,35524,35526,35528,35531,35533,35535],{"class":93,"line":9921},[91,35521,31380],{"class":105},[91,35523,31383],{"class":250},[91,35525,466],{"class":105},[91,35527,627],{"class":250},[91,35529,35530],{"class":105},"227",[91,35532,627],{"class":250},[91,35534,35530],{"class":105},[91,35536,31396],{"class":250},[14,35538,35539],{"start":38},[17,35540,31409],{},[82,35542,35544],{"className":30459,"code":35543,"language":30461,"meta":26,"style":26},"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",[88,35545,35546,35552,35558,35568,35574,35584,35594,35604,35614,35624,35628,35639,35649,35653,35657,35661,35669,35681,35691,35707,35717,35749,35763,35773,35783,35787,35797,35811,35821,35831,35841,35847,35851,35855,35859,35863,35867,35875,35895,35899,35903,35907,35911,35915,35931,35935,35939,35947,35951,35955,35963,35967,35971,35975,35983,35987,35991,35995,35999,36007,36011,36019,36023,36031,36035,36043,36047,36055,36059,36063,36071,36075,36079,36083,36095,36119,36133,36137,36141,36145,36153,36157,36165,36169,36177,36181,36189,36193,36201,36205,36213,36217,36229,36233,36241,36245,36253,36257,36261,36265,36269,36277,36281,36297,36301,36309,36313,36317,36321,36325,36329,36333,36337,36353,36357,36369,36373,36385,36389,36401,36405,36413,36417,36425,36429,36433,36438,36444,36448,36457,36461,36478,36482,36491,36495,36513,36526,36531,36544,36548,36552,36560,36564,36568,36576,36580,36588,36592,36600,36604,36608,36650,36692,36696,36700,36716,36720,36736,36740,36744,36752,36756,36760,36772,36810,36815,36820,36829,36833,36847,36857,36863,36869,36875,36881,36885,36889,36895,36899,36903,36911,36915,36933,36937,36941,36945,36961,36965,36969,36973,36977,36981,37001,37021,37025,37029,37033,37041,37049,37053,37069,37089,37109,37113,37117,37125,37133,37137,37141,37145,37157,37161,37171,37179,37196],{"__ignoreMap":26},[91,35547,35548,35550],{"class":93,"line":94},[91,35549,30473],{"class":153},[91,35551,31903],{"class":250},[91,35553,35554,35556],{"class":93,"line":38},[91,35555,30473],{"class":153},[91,35557,31910],{"class":250},[91,35559,35560,35562,35564,35566],{"class":93,"line":1304},[91,35561,30473],{"class":153},[91,35563,31921],{"class":250},[91,35565,31464],{"class":153},[91,35567,31926],{"class":250},[91,35569,35570,35572],{"class":93,"line":1319},[91,35571,30473],{"class":153},[91,35573,30476],{"class":250},[91,35575,35576,35578,35580,35582],{"class":93,"line":1325},[91,35577,30818],{"class":153},[91,35579,31496],{"class":250},[91,35581,30473],{"class":153},[91,35583,31943],{"class":250},[91,35585,35586,35588,35590,35592],{"class":93,"line":1339},[91,35587,30818],{"class":153},[91,35589,31449],{"class":250},[91,35591,30473],{"class":153},[91,35593,31454],{"class":250},[91,35595,35596,35598,35600,35602],{"class":93,"line":1345},[91,35597,30818],{"class":153},[91,35599,31479],{"class":250},[91,35601,30473],{"class":153},[91,35603,31484],{"class":250},[91,35605,35606,35608,35610,35612],{"class":93,"line":1436},[91,35607,30473],{"class":153},[91,35609,31496],{"class":250},[91,35611,31464],{"class":153},[91,35613,31501],{"class":250},[91,35615,35616,35618,35620,35622],{"class":93,"line":1442},[91,35617,30473],{"class":153},[91,35619,31513],{"class":250},[91,35621,31464],{"class":153},[91,35623,31518],{"class":250},[91,35625,35626],{"class":93,"line":1454},[91,35627,31988],{"class":308},[91,35629,35630,35632,35634,35636],{"class":93,"line":1736},[91,35631,30818],{"class":153},[91,35633,31995],{"class":250},[91,35635,30473],{"class":153},[91,35637,35638],{"class":250}," AlexNet\n",[91,35640,35641,35643,35645,35647],{"class":93,"line":1741},[91,35642,30818],{"class":153},[91,35644,30821],{"class":250},[91,35646,30473],{"class":153},[91,35648,30826],{"class":250},[91,35650,35651],{"class":93,"line":1747},[91,35652,2523],{"emptyLinePlaceholder":175},[91,35654,35655],{"class":93,"line":1752},[91,35656,2523],{"emptyLinePlaceholder":175},[91,35658,35659],{"class":93,"line":1766},[91,35660,32023],{"class":308},[91,35662,35663,35665,35667],{"class":93,"line":1771},[91,35664,32028],{"class":153},[91,35666,32031],{"class":97},[91,35668,32034],{"class":250},[91,35670,35671,35673,35675,35677,35679],{"class":93,"line":1777},[91,35672,32039],{"class":250},[91,35674,296],{"class":153},[91,35676,31536],{"class":250},[91,35678,31544],{"class":101},[91,35680,31547],{"class":250},[91,35682,35683,35685,35687,35689],{"class":93,"line":1798},[91,35684,32052],{"class":5339},[91,35686,296],{"class":153},[91,35688,31557],{"class":105},[91,35690,31547],{"class":250},[91,35692,35693,35695,35697,35699,35701,35703,35705],{"class":93,"line":1803},[91,35694,32063],{"class":5339},[91,35696,296],{"class":153},[91,35698,31574],{"class":250},[91,35700,31577],{"class":5339},[91,35702,296],{"class":153},[91,35704,35530],{"class":105},[91,35706,31585],{"class":250},[91,35708,35709,35711,35713,35715],{"class":93,"line":1817},[91,35710,32080],{"class":5339},[91,35712,296],{"class":153},[91,35714,31557],{"class":105},[91,35716,257],{"class":250},[91,35718,35719,35721,35723,35725,35727,35729,35731,35733,35735,35737,35739,35741,35743,35745,35747],{"class":93,"line":1822},[91,35720,32091],{"class":250},[91,35722,296],{"class":153},[91,35724,32096],{"class":250},[91,35726,32099],{"class":105},[91,35728,251],{"class":250},[91,35730,32104],{"class":105},[91,35732,704],{"class":153},[91,35734,7481],{"class":105},[91,35736,32111],{"class":250},[91,35738,32099],{"class":105},[91,35740,251],{"class":250},[91,35742,32118],{"class":105},[91,35744,704],{"class":153},[91,35746,7481],{"class":105},[91,35748,32125],{"class":250},[91,35750,35751,35753,35755,35757,35759,35761],{"class":93,"line":1851},[91,35752,32130],{"class":250},[91,35754,296],{"class":153},[91,35756,32135],{"class":250},[91,35758,31618],{"class":5339},[91,35760,296],{"class":153},[91,35762,31623],{"class":250},[91,35764,35765,35767,35769,35771],{"class":93,"line":1856},[91,35766,32146],{"class":5339},[91,35768,296],{"class":153},[91,35770,32151],{"class":105},[91,35772,31547],{"class":250},[91,35774,35775,35777,35779,35781],{"class":93,"line":1873},[91,35776,32158],{"class":5339},[91,35778,296],{"class":153},[91,35780,31557],{"class":105},[91,35782,31547],{"class":250},[91,35784,35785],{"class":93,"line":1878},[91,35786,32169],{"class":308},[91,35788,35789,35791,35793,35795],{"class":93,"line":1883},[91,35790,32174],{"class":5339},[91,35792,296],{"class":153},[91,35794,644],{"class":105},[91,35796,257],{"class":250},[91,35798,35799,35801,35803,35805,35807,35809],{"class":93,"line":1888},[91,35800,32185],{"class":250},[91,35802,296],{"class":153},[91,35804,31615],{"class":250},[91,35806,31618],{"class":5339},[91,35808,296],{"class":153},[91,35810,32196],{"class":250},[91,35812,35813,35815,35817,35819],{"class":93,"line":1902},[91,35814,32201],{"class":5339},[91,35816,296],{"class":153},[91,35818,32151],{"class":105},[91,35820,31547],{"class":250},[91,35822,35823,35825,35827,35829],{"class":93,"line":1907},[91,35824,32212],{"class":5339},[91,35826,296],{"class":153},[91,35828,31557],{"class":105},[91,35830,31547],{"class":250},[91,35832,35833,35835,35837,35839],{"class":93,"line":2700},[91,35834,32223],{"class":5339},[91,35836,296],{"class":153},[91,35838,644],{"class":105},[91,35840,257],{"class":250},[91,35842,35843,35845],{"class":93,"line":2714},[91,35844,4213],{"class":153},[91,35846,32236],{"class":250},[91,35848,35849],{"class":93,"line":2722},[91,35850,2523],{"emptyLinePlaceholder":175},[91,35852,35853],{"class":93,"line":2727},[91,35854,32245],{"class":308},[91,35856,35857],{"class":93,"line":2733},[91,35858,32250],{"class":308},[91,35860,35861],{"class":93,"line":2739},[91,35862,2523],{"emptyLinePlaceholder":175},[91,35864,35865],{"class":93,"line":2744},[91,35866,32259],{"class":308},[91,35868,35869,35871,35873],{"class":93,"line":8071},[91,35870,32028],{"class":153},[91,35872,32266],{"class":97},[91,35874,32269],{"class":250},[91,35876,35877,35879,35881,35883,35885,35887,35889,35891,35893],{"class":93,"line":8095},[91,35878,31318],{"class":250},[91,35880,296],{"class":153},[91,35882,30532],{"class":250},[91,35884,31325],{"class":101},[91,35886,1828],{"class":153},[91,35888,31330],{"class":250},[91,35890,1825],{"class":153},[91,35892,32288],{"class":101},[91,35894,257],{"class":250},[91,35896,35897],{"class":93,"line":8100},[91,35898,2523],{"emptyLinePlaceholder":175},[91,35900,35901],{"class":93,"line":8106},[91,35902,2523],{"emptyLinePlaceholder":175},[91,35904,35905],{"class":93,"line":8133},[91,35906,32303],{"class":308},[91,35908,35909],{"class":93,"line":8138},[91,35910,32308],{"class":308},[91,35912,35913],{"class":93,"line":8144},[91,35914,32313],{"class":308},[91,35916,35917,35919,35921,35923,35925,35927,35929],{"class":93,"line":8156},[91,35918,32318],{"class":250},[91,35920,296],{"class":153},[91,35922,32323],{"class":250},[91,35924,32326],{"class":5339},[91,35926,296],{"class":153},[91,35928,32331],{"class":105},[91,35930,257],{"class":250},[91,35932,35933],{"class":93,"line":8168},[91,35934,2523],{"emptyLinePlaceholder":175},[91,35936,35937],{"class":93,"line":8180},[91,35938,32342],{"class":308},[91,35940,35941,35943,35945],{"class":93,"line":9839},[91,35942,32347],{"class":250},[91,35944,296],{"class":153},[91,35946,32352],{"class":250},[91,35948,35949],{"class":93,"line":9864},[91,35950,2523],{"emptyLinePlaceholder":175},[91,35952,35953],{"class":93,"line":9887},[91,35954,32361],{"class":308},[91,35956,35957,35959,35961],{"class":93,"line":9911},[91,35958,31370],{"class":250},[91,35960,296],{"class":153},[91,35962,32370],{"class":250},[91,35964,35965],{"class":93,"line":9916},[91,35966,32375],{"class":308},[91,35968,35969],{"class":93,"line":9921},[91,35970,32380],{"class":308},[91,35972,35973],{"class":93,"line":9926},[91,35974,32385],{"class":308},[91,35976,35977,35979,35981],{"class":93,"line":9935},[91,35978,32390],{"class":250},[91,35980,296],{"class":153},[91,35982,32395],{"class":250},[91,35984,35985],{"class":93,"line":9940},[91,35986,2523],{"emptyLinePlaceholder":175},[91,35988,35989],{"class":93,"line":9946},[91,35990,2523],{"emptyLinePlaceholder":175},[91,35992,35993],{"class":93,"line":9967},[91,35994,32408],{"class":308},[91,35996,35997],{"class":93,"line":9973},[91,35998,32413],{"class":308},[91,36000,36001,36003,36005],{"class":93,"line":9987},[91,36002,32418],{"class":250},[91,36004,296],{"class":153},[91,36006,32423],{"class":105},[91,36008,36009],{"class":93,"line":9993},[91,36010,32428],{"class":308},[91,36012,36013,36015,36017],{"class":93,"line":10020},[91,36014,32433],{"class":250},[91,36016,296],{"class":153},[91,36018,32438],{"class":250},[91,36020,36021],{"class":93,"line":10029},[91,36022,32443],{"class":308},[91,36024,36025,36027,36029],{"class":93,"line":10035},[91,36026,32448],{"class":250},[91,36028,296],{"class":153},[91,36030,32438],{"class":250},[91,36032,36033],{"class":93,"line":10043},[91,36034,32457],{"class":308},[91,36036,36037,36039,36041],{"class":93,"line":10048},[91,36038,32462],{"class":250},[91,36040,296],{"class":153},[91,36042,32438],{"class":250},[91,36044,36045],{"class":93,"line":16727},[91,36046,32471],{"class":308},[91,36048,36049,36051,36053],{"class":93,"line":16733},[91,36050,32476],{"class":250},[91,36052,296],{"class":153},[91,36054,32438],{"class":250},[91,36056,36057],{"class":93,"line":16756},[91,36058,2523],{"emptyLinePlaceholder":175},[91,36060,36061],{"class":93,"line":16762},[91,36062,32489],{"class":308},[91,36064,36065,36067,36069],{"class":93,"line":16785},[91,36066,32494],{"class":250},[91,36068,296],{"class":153},[91,36070,32499],{"class":250},[91,36072,36073],{"class":93,"line":16799},[91,36074,2523],{"emptyLinePlaceholder":175},[91,36076,36077],{"class":93,"line":16819},[91,36078,2523],{"emptyLinePlaceholder":175},[91,36080,36081],{"class":93,"line":16825},[91,36082,32512],{"class":308},[91,36084,36085,36087,36089,36091,36093],{"class":93,"line":16836},[91,36086,3324],{"class":153},[91,36088,32519],{"class":250},[91,36090,26165],{"class":153},[91,36092,32524],{"class":105},[91,36094,32527],{"class":250},[91,36096,36097,36099,36101,36103,36105,36107,36109,36111,36113,36115,36117],{"class":93,"line":16859},[91,36098,32532],{"class":105},[91,36100,251],{"class":250},[91,36102,32537],{"class":101},[91,36104,32540],{"class":105},[91,36106,833],{"class":101},[91,36108,32540],{"class":105},[91,36110,500],{"class":101},[91,36112,32549],{"class":250},[91,36114,781],{"class":153},[91,36116,466],{"class":105},[91,36118,30578],{"class":250},[91,36120,36121,36123,36125,36127,36129,36131],{"class":93,"line":16881},[91,36122,32532],{"class":105},[91,36124,251],{"class":250},[91,36126,32564],{"class":101},[91,36128,704],{"class":153},[91,36130,695],{"class":105},[91,36132,257],{"class":250},[91,36134,36135],{"class":93,"line":16886},[91,36136,2523],{"emptyLinePlaceholder":175},[91,36138,36139],{"class":93,"line":16892},[91,36140,32579],{"class":308},[91,36142,36143],{"class":93,"line":16906},[91,36144,32584],{"class":308},[91,36146,36147,36149,36151],{"class":93,"line":16919},[91,36148,32589],{"class":250},[91,36150,296],{"class":153},[91,36152,32423],{"class":105},[91,36154,36155],{"class":93,"line":16924},[91,36156,32598],{"class":308},[91,36158,36159,36161,36163],{"class":93,"line":16938},[91,36160,32603],{"class":250},[91,36162,296],{"class":153},[91,36164,3208],{"class":105},[91,36166,36167],{"class":93,"line":16943},[91,36168,32612],{"class":308},[91,36170,36171,36173,36175],{"class":93,"line":16949},[91,36172,32617],{"class":250},[91,36174,296],{"class":153},[91,36176,32423],{"class":105},[91,36178,36179],{"class":93,"line":16954},[91,36180,32626],{"class":308},[91,36182,36183,36185,36187],{"class":93,"line":16968},[91,36184,32631],{"class":250},[91,36186,296],{"class":153},[91,36188,3208],{"class":105},[91,36190,36191],{"class":93,"line":16973},[91,36192,32640],{"class":308},[91,36194,36195,36197,36199],{"class":93,"line":16978},[91,36196,32645],{"class":250},[91,36198,296],{"class":153},[91,36200,3208],{"class":105},[91,36202,36203],{"class":93,"line":16992},[91,36204,32654],{"class":308},[91,36206,36207,36209,36211],{"class":93,"line":17004},[91,36208,32659],{"class":250},[91,36210,296],{"class":153},[91,36212,3208],{"class":105},[91,36214,36215],{"class":93,"line":17009},[91,36216,32668],{"class":308},[91,36218,36219,36221,36223,36225,36227],{"class":93,"line":17022},[91,36220,3526],{"class":153},[91,36222,31682],{"class":250},[91,36224,26165],{"class":153},[91,36226,31687],{"class":105},[91,36228,32681],{"class":250},[91,36230,36231],{"class":93,"line":17027},[91,36232,32686],{"class":308},[91,36234,36235,36237,36239],{"class":93,"line":17032},[91,36236,32691],{"class":250},[91,36238,296],{"class":153},[91,36240,32696],{"class":250},[91,36242,36243],{"class":93,"line":17037},[91,36244,32701],{"class":308},[91,36246,36247,36249,36251],{"class":93,"line":17050},[91,36248,32706],{"class":250},[91,36250,296],{"class":153},[91,36252,32711],{"class":250},[91,36254,36255],{"class":93,"line":17055},[91,36256,32717],{"class":308},[91,36258,36259],{"class":93,"line":32714},[91,36260,32723],{"class":250},[91,36262,36263],{"class":93,"line":32720},[91,36264,32729],{"class":308},[91,36266,36267],{"class":93,"line":32726},[91,36268,32735],{"class":308},[91,36270,36271,36273,36275],{"class":93,"line":32732},[91,36272,32741],{"class":250},[91,36274,296],{"class":153},[91,36276,32746],{"class":250},[91,36278,36279],{"class":93,"line":32738},[91,36280,32752],{"class":308},[91,36282,36283,36285,36287,36289,36291,36293,36295],{"class":93,"line":32749},[91,36284,32758],{"class":250},[91,36286,296],{"class":153},[91,36288,32763],{"class":250},[91,36290,32766],{"class":5339},[91,36292,296],{"class":153},[91,36294,466],{"class":105},[91,36296,257],{"class":250},[91,36298,36299],{"class":93,"line":32755},[91,36300,32778],{"class":308},[91,36302,36303,36305,36307],{"class":93,"line":32775},[91,36304,32784],{"class":250},[91,36306,296],{"class":153},[91,36308,32789],{"class":250},[91,36310,36311],{"class":93,"line":32781},[91,36312,32795],{"class":308},[91,36314,36315],{"class":93,"line":32792},[91,36316,32801],{"class":250},[91,36318,36319],{"class":93,"line":32798},[91,36320,32807],{"class":308},[91,36322,36323],{"class":93,"line":32804},[91,36324,32813],{"class":250},[91,36326,36327],{"class":93,"line":32810},[91,36328,32819],{"class":308},[91,36330,36331],{"class":93,"line":32816},[91,36332,32825],{"class":250},[91,36334,36335],{"class":93,"line":32822},[91,36336,32831],{"class":308},[91,36338,36339,36341,36343,36345,36347,36349,36351],{"class":93,"line":32828},[91,36340,32837],{"class":250},[91,36342,9600],{"class":153},[91,36344,32842],{"class":250},[91,36346,704],{"class":153},[91,36348,32847],{"class":250},[91,36350,440],{"class":105},[91,36352,257],{"class":250},[91,36354,36355],{"class":93,"line":32834},[91,36356,32857],{"class":308},[91,36358,36359,36361,36363,36365,36367],{"class":93,"line":32854},[91,36360,32863],{"class":250},[91,36362,9600],{"class":153},[91,36364,32868],{"class":250},[91,36366,3072],{"class":153},[91,36368,32873],{"class":250},[91,36370,36371],{"class":93,"line":32860},[91,36372,32879],{"class":308},[91,36374,36375,36377,36379,36381,36383],{"class":93,"line":32876},[91,36376,32885],{"class":250},[91,36378,9600],{"class":153},[91,36380,32847],{"class":250},[91,36382,440],{"class":105},[91,36384,257],{"class":250},[91,36386,36387],{"class":93,"line":32882},[91,36388,32899],{"class":308},[91,36390,36391,36393,36395,36397,36399],{"class":93,"line":32896},[91,36392,3526],{"class":153},[91,36394,32907],{"class":250},[91,36396,26165],{"class":153},[91,36398,31687],{"class":105},[91,36400,32914],{"class":250},[91,36402,36403],{"class":93,"line":32902},[91,36404,32920],{"class":308},[91,36406,36407,36409,36411],{"class":93,"line":32917},[91,36408,32691],{"class":250},[91,36410,296],{"class":153},[91,36412,32696],{"class":250},[91,36414,36415],{"class":93,"line":32923},[91,36416,32935],{"class":308},[91,36418,36419,36421,36423],{"class":93,"line":32932},[91,36420,32706],{"class":250},[91,36422,296],{"class":153},[91,36424,32711],{"class":250},[91,36426,36427],{"class":93,"line":32938},[91,36428,32950],{"class":308},[91,36430,36431],{"class":93,"line":32947},[91,36432,32956],{"class":250},[91,36434,36435],{"class":93,"line":32953},[91,36436,36437],{"class":308},"            # 验证时不计算梯度以节省内存\u002F计算\n",[91,36439,36440,36442],{"class":93,"line":32959},[91,36441,32962],{"class":153},[91,36443,32965],{"class":250},[91,36445,36446],{"class":93,"line":32968},[91,36447,32971],{"class":308},[91,36449,36450,36453,36455],{"class":93,"line":32974},[91,36451,36452],{"class":250},"                output",[91,36454,296],{"class":153},[91,36456,32746],{"class":250},[91,36458,36459],{"class":93,"line":32985},[91,36460,32988],{"class":308},[91,36462,36463,36466,36468,36470,36472,36474,36476],{"class":93,"line":32991},[91,36464,36465],{"class":250},"                pre_lab",[91,36467,296],{"class":153},[91,36469,32763],{"class":250},[91,36471,32766],{"class":5339},[91,36473,296],{"class":153},[91,36475,466],{"class":105},[91,36477,257],{"class":250},[91,36479,36480],{"class":93,"line":33010},[91,36481,33013],{"class":308},[91,36483,36484,36487,36489],{"class":93,"line":33016},[91,36485,36486],{"class":250},"                val_batch_loss",[91,36488,296],{"class":153},[91,36490,32789],{"class":250},[91,36492,36493],{"class":93,"line":33027},[91,36494,33030],{"class":308},[91,36496,36497,36500,36502,36505,36507,36509,36511],{"class":93,"line":33033},[91,36498,36499],{"class":250},"                val_loss",[91,36501,9600],{"class":153},[91,36503,36504],{"class":250},"val_batch_loss.item()",[91,36506,704],{"class":153},[91,36508,32847],{"class":250},[91,36510,440],{"class":105},[91,36512,257],{"class":250},[91,36514,36515,36518,36520,36522,36524],{"class":93,"line":33053},[91,36516,36517],{"class":250},"                val_corrects",[91,36519,9600],{"class":153},[91,36521,32868],{"class":250},[91,36523,3072],{"class":153},[91,36525,32873],{"class":250},[91,36527,36528],{"class":93,"line":33069},[91,36529,36530],{"class":308},"            # 当前用于验证的样本数量\n",[91,36532,36533,36536,36538,36540,36542],{"class":93,"line":33075},[91,36534,36535],{"class":250},"            val_num",[91,36537,9600],{"class":153},[91,36539,32847],{"class":250},[91,36541,440],{"class":105},[91,36543,257],{"class":250},[91,36545,36546],{"class":93,"line":33089},[91,36547,33092],{"class":308},[91,36549,36550],{"class":93,"line":33095},[91,36551,33098],{"class":308},[91,36553,36554,36556,36558],{"class":93,"line":33101},[91,36555,33104],{"class":250},[91,36557,833],{"class":153},[91,36559,33109],{"class":250},[91,36561,36562],{"class":93,"line":33112},[91,36563,33115],{"class":308},[91,36565,36566],{"class":93,"line":33118},[91,36567,33121],{"class":308},[91,36569,36570,36572,36574],{"class":93,"line":33124},[91,36571,33127],{"class":250},[91,36573,833],{"class":153},[91,36575,33109],{"class":250},[91,36577,36578],{"class":93,"line":33134},[91,36579,33137],{"class":308},[91,36581,36582,36584,36586],{"class":93,"line":33140},[91,36583,33143],{"class":250},[91,36585,833],{"class":153},[91,36587,33148],{"class":250},[91,36589,36590],{"class":93,"line":33151},[91,36591,33154],{"class":308},[91,36593,36594,36596,36598],{"class":93,"line":33157},[91,36595,33160],{"class":250},[91,36597,833],{"class":153},[91,36599,33148],{"class":250},[91,36601,36602],{"class":93,"line":33167},[91,36603,2523],{"emptyLinePlaceholder":175},[91,36605,36606],{"class":93,"line":33172},[91,36607,33175],{"class":308},[91,36609,36610,36612,36614,36616,36618,36620,36622,36624,36626,36628,36630,36632,36634,36636,36638,36640,36642,36644,36646,36648],{"class":93,"line":33178},[91,36611,32532],{"class":105},[91,36613,251],{"class":250},[91,36615,3715],{"class":101},[91,36617,32540],{"class":105},[91,36619,33189],{"class":101},[91,36621,1145],{"class":105},[91,36623,33194],{"class":153},[91,36625,1195],{"class":105},[91,36627,33199],{"class":101},[91,36629,1145],{"class":105},[91,36631,33194],{"class":153},[91,36633,1195],{"class":105},[91,36635,3715],{"class":101},[91,36637,33210],{"class":250},[91,36639,781],{"class":153},[91,36641,466],{"class":105},[91,36643,33217],{"class":250},[91,36645,781],{"class":153},[91,36647,466],{"class":105},[91,36649,33224],{"class":250},[91,36651,36652,36654,36656,36658,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680,36682,36684,36686,36688,36690],{"class":93,"line":33227},[91,36653,32532],{"class":105},[91,36655,251],{"class":250},[91,36657,3715],{"class":101},[91,36659,32540],{"class":105},[91,36661,33238],{"class":101},[91,36663,1145],{"class":105},[91,36665,33194],{"class":153},[91,36667,1195],{"class":105},[91,36669,33247],{"class":101},[91,36671,1145],{"class":105},[91,36673,33194],{"class":153},[91,36675,1195],{"class":105},[91,36677,3715],{"class":101},[91,36679,33258],{"class":250},[91,36681,781],{"class":153},[91,36683,466],{"class":105},[91,36685,33265],{"class":250},[91,36687,781],{"class":153},[91,36689,466],{"class":105},[91,36691,33224],{"class":250},[91,36693,36694],{"class":93,"line":33274},[91,36695,2523],{"emptyLinePlaceholder":175},[91,36697,36698],{"class":93,"line":33279},[91,36699,33282],{"class":308},[91,36701,36702,36704,36706,36708,36710,36712,36714],{"class":93,"line":33285},[91,36703,2620],{"class":153},[91,36705,33290],{"class":250},[91,36707,781],{"class":153},[91,36709,466],{"class":105},[91,36711,1189],{"class":250},[91,36713,1209],{"class":153},[91,36715,33301],{"class":250},[91,36717,36718],{"class":93,"line":33304},[91,36719,33307],{"class":308},[91,36721,36722,36724,36726,36728,36730,36732,36734],{"class":93,"line":33310},[91,36723,33313],{"class":250},[91,36725,290],{"class":105},[91,36727,296],{"class":153},[91,36729,33320],{"class":250},[91,36731,781],{"class":153},[91,36733,466],{"class":105},[91,36735,33327],{"class":250},[91,36737,36738],{"class":93,"line":33330},[91,36739,33333],{"class":308},[91,36741,36742],{"class":93,"line":33336},[91,36743,33339],{"class":308},[91,36745,36746,36748,36750],{"class":93,"line":33342},[91,36747,33345],{"class":250},[91,36749,296],{"class":153},[91,36751,32395],{"class":250},[91,36753,36754],{"class":93,"line":33352},[91,36755,2523],{"emptyLinePlaceholder":175},[91,36757,36758],{"class":93,"line":33357},[91,36759,33360],{"class":308},[91,36761,36762,36764,36766,36768,36770],{"class":93,"line":33363},[91,36763,33366],{"class":250},[91,36765,296],{"class":153},[91,36767,33371],{"class":250},[91,36769,781],{"class":153},[91,36771,33376],{"class":250},[91,36773,36774,36776,36778,36780,36782,36784,36786,36788,36790,36792,36794,36796,36798,36800,36802,36804,36806,36808],{"class":93,"line":33379},[91,36775,32532],{"class":105},[91,36777,251],{"class":250},[91,36779,33386],{"class":101},[91,36781,1145],{"class":105},[91,36783,33391],{"class":153},[91,36785,1195],{"class":105},[91,36787,793],{"class":101},[91,36789,1145],{"class":105},[91,36791,33391],{"class":153},[91,36793,1195],{"class":105},[91,36795,33404],{"class":101},[91,36797,33407],{"class":250},[91,36799,33410],{"class":153},[91,36801,1156],{"class":105},[91,36803,33415],{"class":250},[91,36805,577],{"class":153},[91,36807,1156],{"class":105},[91,36809,30578],{"class":250},[91,36811,36812],{"class":93,"line":33424},[91,36813,36814],{"class":308},"    # 选择最优参数并保存\n",[91,36816,36817],{"class":93,"line":33430},[91,36818,36819],{"class":308},"    # 保存最佳模型权重字典\n",[91,36821,36822,36825,36827],{"class":93,"line":33436},[91,36823,36824],{"class":250},"    torch.save(best_model_wts,",[91,36826,33448],{"class":101},[91,36828,257],{"class":250},[91,36830,36831],{"class":93,"line":33442},[91,36832,33468],{"class":308},[91,36834,36835,36837,36839,36841,36843,36845],{"class":93,"line":33453},[91,36836,33474],{"class":250},[91,36838,296],{"class":153},[91,36840,33479],{"class":250},[91,36842,33482],{"class":5339},[91,36844,296],{"class":153},[91,36846,1670],{"class":250},[91,36848,36849,36851,36853,36855],{"class":93,"line":33459},[91,36850,33492],{"class":101},[91,36852,1108],{"class":250},[91,36854,33497],{"class":105},[91,36856,33500],{"class":250},[91,36858,36859,36861],{"class":93,"line":33465},[91,36860,33506],{"class":101},[91,36862,33509],{"class":250},[91,36864,36865,36867],{"class":93,"line":33471},[91,36866,33515],{"class":101},[91,36868,33518],{"class":250},[91,36870,36871,36873],{"class":93,"line":33489},[91,36872,33524],{"class":101},[91,36874,33527],{"class":250},[91,36876,36877,36879],{"class":93,"line":33503},[91,36878,33533],{"class":101},[91,36880,33536],{"class":250},[91,36882,36883],{"class":93,"line":33512},[91,36884,33542],{"class":250},[91,36886,36887],{"class":93,"line":33521},[91,36888,33548],{"class":308},[91,36890,36891,36893],{"class":93,"line":33530},[91,36892,4213],{"class":153},[91,36894,33556],{"class":250},[91,36896,36897],{"class":93,"line":33539},[91,36898,2523],{"emptyLinePlaceholder":175},[91,36900,36901],{"class":93,"line":33545},[91,36902,33567],{"class":308},[91,36904,36905,36907,36909],{"class":93,"line":33551},[91,36906,32028],{"class":153},[91,36908,33575],{"class":97},[91,36910,33578],{"class":250},[91,36912,36913],{"class":93,"line":33559},[91,36914,33584],{"class":308},[91,36916,36917,36919,36921,36923,36925,36927,36929,36931],{"class":93,"line":33564},[91,36918,33590],{"class":250},[91,36920,31774],{"class":5339},[91,36922,296],{"class":153},[91,36924,251],{"class":250},[91,36926,747],{"class":105},[91,36928,627],{"class":250},[91,36930,542],{"class":105},[91,36932,30578],{"class":250},[91,36934,36935],{"class":93,"line":33570},[91,36936,33610],{"class":308},[91,36938,36939],{"class":93,"line":33581},[91,36940,33616],{"class":308},[91,36942,36943],{"class":93,"line":33587},[91,36944,33622],{"class":308},[91,36946,36947,36949,36951,36953,36955,36957,36959],{"class":93,"line":33607},[91,36948,31808],{"class":250},[91,36950,466],{"class":105},[91,36952,627],{"class":250},[91,36954,327],{"class":105},[91,36956,627],{"class":250},[91,36958,466],{"class":105},[91,36960,257],{"class":250},[91,36962,36963],{"class":93,"line":33613},[91,36964,33645],{"class":308},[91,36966,36967],{"class":93,"line":33619},[91,36968,33651],{"class":308},[91,36970,36971],{"class":93,"line":33625},[91,36972,33657],{"class":308},[91,36974,36975],{"class":93,"line":33642},[91,36976,33663],{"class":308},[91,36978,36979],{"class":93,"line":33648},[91,36980,33669],{"class":308},[91,36982,36983,36985,36987,36989,36991,36993,36995,36997,36999],{"class":93,"line":33654},[91,36984,33675],{"class":250},[91,36986,33678],{"class":101},[91,36988,33681],{"class":250},[91,36990,33684],{"class":101},[91,36992,627],{"class":250},[91,36994,33689],{"class":5339},[91,36996,296],{"class":153},[91,36998,33694],{"class":101},[91,37000,257],{"class":250},[91,37002,37003,37005,37007,37009,37011,37013,37015,37017,37019],{"class":93,"line":33660},[91,37004,33675],{"class":250},[91,37006,33678],{"class":101},[91,37008,33706],{"class":250},[91,37010,33709],{"class":101},[91,37012,627],{"class":250},[91,37014,33689],{"class":5339},[91,37016,296],{"class":153},[91,37018,33718],{"class":101},[91,37020,257],{"class":250},[91,37022,37023],{"class":93,"line":33666},[91,37024,33726],{"class":308},[91,37026,37027],{"class":93,"line":33672},[91,37028,33732],{"class":250},[91,37030,37031],{"class":93,"line":33699},[91,37032,33738],{"class":308},[91,37034,37035,37037,37039],{"class":93,"line":33723},[91,37036,33744],{"class":250},[91,37038,33747],{"class":101},[91,37040,257],{"class":250},[91,37042,37043,37045,37047],{"class":93,"line":33729},[91,37044,33755],{"class":250},[91,37046,33758],{"class":101},[91,37048,257],{"class":250},[91,37050,37051],{"class":93,"line":33735},[91,37052,33766],{"class":308},[91,37054,37055,37057,37059,37061,37063,37065,37067],{"class":93,"line":33741},[91,37056,31808],{"class":250},[91,37058,466],{"class":105},[91,37060,627],{"class":250},[91,37062,327],{"class":105},[91,37064,627],{"class":250},[91,37066,327],{"class":105},[91,37068,257],{"class":250},[91,37070,37071,37073,37075,37077,37079,37081,37083,37085,37087],{"class":93,"line":33752},[91,37072,33675],{"class":250},[91,37074,33678],{"class":101},[91,37076,33793],{"class":250},[91,37078,33684],{"class":101},[91,37080,627],{"class":250},[91,37082,33689],{"class":5339},[91,37084,296],{"class":153},[91,37086,33804],{"class":101},[91,37088,257],{"class":250},[91,37090,37091,37093,37095,37097,37099,37101,37103,37105,37107],{"class":93,"line":33763},[91,37092,33675],{"class":250},[91,37094,33678],{"class":101},[91,37096,33816],{"class":250},[91,37098,33709],{"class":101},[91,37100,627],{"class":250},[91,37102,33689],{"class":5339},[91,37104,296],{"class":153},[91,37106,33827],{"class":101},[91,37108,257],{"class":250},[91,37110,37111],{"class":93,"line":33769},[91,37112,33835],{"class":308},[91,37114,37115],{"class":93,"line":33786},[91,37116,33732],{"class":250},[91,37118,37119,37121,37123],{"class":93,"line":33809},[91,37120,33744],{"class":250},[91,37122,33678],{"class":101},[91,37124,257],{"class":250},[91,37126,37127,37129,37131],{"class":93,"line":33832},[91,37128,33755],{"class":250},[91,37130,33857],{"class":101},[91,37132,257],{"class":250},[91,37134,37135],{"class":93,"line":33838},[91,37136,33865],{"class":250},[91,37138,37139],{"class":93,"line":33843},[91,37140,2523],{"emptyLinePlaceholder":175},[91,37142,37143],{"class":93,"line":33852},[91,37144,33876],{"class":308},[91,37146,37147,37149,37151,37153,37155],{"class":93,"line":33862},[91,37148,1655],{"class":153},[91,37150,31301],{"class":105},[91,37152,3072],{"class":153},[91,37154,31306],{"class":101},[91,37156,3862],{"class":250},[91,37158,37159],{"class":93,"line":33868},[91,37160,33895],{"class":308},[91,37162,37163,37166,37168],{"class":93,"line":33873},[91,37164,37165],{"class":250},"    AlexNet",[91,37167,296],{"class":153},[91,37169,37170],{"class":250},"AlexNet()\n",[91,37172,37173,37175,37177],{"class":93,"line":33879},[91,37174,33912],{"class":250},[91,37176,296],{"class":153},[91,37178,33917],{"class":250},[91,37180,37181,37183,37185,37188,37190,37192,37194],{"class":93,"line":33892},[91,37182,33474],{"class":250},[91,37184,296],{"class":153},[91,37186,37187],{"class":250},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[91,37189,33930],{"class":5339},[91,37191,296],{"class":153},[91,37193,949],{"class":105},[91,37195,257],{"class":250},[91,37197,37198],{"class":93,"line":33898},[91,37199,33942],{"class":250},[14,37201,37202],{"start":1304},[17,37203,33955],{},[82,37205,37207],{"className":30459,"code":37206,"language":30461,"meta":26,"style":26},"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",[88,37208,37209,37215,37225,37235,37245,37249,37259,37269,37280,37284,37288,37292,37300,37316,37326,37342,37352,37366,37370,37380,37390,37400,37406,37410,37414,37422,37426,37442,37450,37454,37458,37466,37474,37478,37482,37486,37490,37496,37500,37510,37518,37526,37530,37534,37538,37546,37550,37566,37570,37574,37578,37590,37594,37606,37610,37614,37626,37630,37640,37644,37648,37660,37664,37672,37676,37680,37688,37692,37700,37704,37708,37712,37716,37720,37736,37744,37748,37752,37800,37806,37810,37820,37828,37836,37840,37844,37848,37852,37860,37864,37880,37884,37892,37900],{"__ignoreMap":26},[91,37210,37211,37213],{"class":93,"line":94},[91,37212,30473],{"class":153},[91,37214,30476],{"class":250},[91,37216,37217,37219,37221,37223],{"class":93,"line":38},[91,37218,30473],{"class":153},[91,37220,31496],{"class":250},[91,37222,31464],{"class":153},[91,37224,31501],{"class":250},[91,37226,37227,37229,37231,37233],{"class":93,"line":1304},[91,37228,30818],{"class":153},[91,37230,33983],{"class":250},[91,37232,30473],{"class":153},[91,37234,33988],{"class":250},[91,37236,37237,37239,37241,37243],{"class":93,"line":1319},[91,37238,30818],{"class":153},[91,37240,31479],{"class":250},[91,37242,30473],{"class":153},[91,37244,31484],{"class":250},[91,37246,37247],{"class":93,"line":1325},[91,37248,34003],{"class":308},[91,37250,37251,37253,37255,37257],{"class":93,"line":1339},[91,37252,30818],{"class":153},[91,37254,31449],{"class":250},[91,37256,30473],{"class":153},[91,37258,31454],{"class":250},[91,37260,37261,37263,37265,37267],{"class":93,"line":1345},[91,37262,30818],{"class":153},[91,37264,31995],{"class":250},[91,37266,30473],{"class":153},[91,37268,35638],{"class":250},[91,37270,37271,37273,37276,37278],{"class":93,"line":1436},[91,37272,30818],{"class":153},[91,37274,37275],{"class":250}," 练习.AlexNet.model ",[91,37277,30473],{"class":153},[91,37279,35638],{"class":250},[91,37281,37282],{"class":93,"line":1442},[91,37283,2523],{"emptyLinePlaceholder":175},[91,37285,37286],{"class":93,"line":1454},[91,37287,2523],{"emptyLinePlaceholder":175},[91,37289,37290],{"class":93,"line":1736},[91,37291,34032],{"class":308},[91,37293,37294,37296,37298],{"class":93,"line":1741},[91,37295,32028],{"class":153},[91,37297,34039],{"class":97},[91,37299,32034],{"class":250},[91,37301,37302,37304,37306,37308,37310,37312,37314],{"class":93,"line":1747},[91,37303,34046],{"class":250},[91,37305,296],{"class":153},[91,37307,31536],{"class":250},[91,37309,31539],{"class":5339},[91,37311,296],{"class":153},[91,37313,31544],{"class":101},[91,37315,31547],{"class":250},[91,37317,37318,37320,37322,37324],{"class":93,"line":1752},[91,37319,34063],{"class":5339},[91,37321,296],{"class":153},[91,37323,34068],{"class":105},[91,37325,31547],{"class":250},[91,37327,37328,37330,37332,37334,37336,37338,37340],{"class":93,"line":1766},[91,37329,34075],{"class":5339},[91,37331,296],{"class":153},[91,37333,31574],{"class":250},[91,37335,31577],{"class":5339},[91,37337,296],{"class":153},[91,37339,35530],{"class":105},[91,37341,31585],{"class":250},[91,37343,37344,37346,37348,37350],{"class":93,"line":1771},[91,37345,34092],{"class":5339},[91,37347,296],{"class":153},[91,37349,31557],{"class":105},[91,37351,257],{"class":250},[91,37353,37354,37356,37358,37360,37362,37364],{"class":93,"line":1777},[91,37355,34103],{"class":250},[91,37357,296],{"class":153},[91,37359,31615],{"class":250},[91,37361,31618],{"class":5339},[91,37363,296],{"class":153},[91,37365,34114],{"class":250},[91,37367,37368],{"class":93,"line":1798},[91,37369,34119],{"class":308},[91,37371,37372,37374,37376,37378],{"class":93,"line":1803},[91,37373,34124],{"class":5339},[91,37375,296],{"class":153},[91,37377,466],{"class":105},[91,37379,31547],{"class":250},[91,37381,37382,37384,37386,37388],{"class":93,"line":1817},[91,37383,34135],{"class":5339},[91,37385,296],{"class":153},[91,37387,31557],{"class":105},[91,37389,31547],{"class":250},[91,37391,37392,37394,37396,37398],{"class":93,"line":1822},[91,37393,34146],{"class":5339},[91,37395,296],{"class":153},[91,37397,440],{"class":105},[91,37399,257],{"class":250},[91,37401,37402,37404],{"class":93,"line":1851},[91,37403,4213],{"class":153},[91,37405,34159],{"class":250},[91,37407,37408],{"class":93,"line":1856},[91,37409,2523],{"emptyLinePlaceholder":175},[91,37411,37412],{"class":93,"line":1873},[91,37413,34168],{"class":308},[91,37415,37416,37418,37420],{"class":93,"line":1878},[91,37417,32028],{"class":153},[91,37419,34175],{"class":97},[91,37421,34178],{"class":250},[91,37423,37424],{"class":93,"line":1883},[91,37425,34183],{"class":308},[91,37427,37428,37430,37432,37434,37436,37438,37440],{"class":93,"line":1888},[91,37429,31318],{"class":250},[91,37431,296],{"class":153},[91,37433,31325],{"class":101},[91,37435,1828],{"class":153},[91,37437,31330],{"class":250},[91,37439,1825],{"class":153},[91,37441,34200],{"class":101},[91,37443,37444,37446,37448],{"class":93,"line":1902},[91,37445,31370],{"class":250},[91,37447,296],{"class":153},[91,37449,32370],{"class":250},[91,37451,37452],{"class":93,"line":1907},[91,37453,2523],{"emptyLinePlaceholder":175},[91,37455,37456],{"class":93,"line":2700},[91,37457,34217],{"class":308},[91,37459,37460,37462,37464],{"class":93,"line":2714},[91,37461,34222],{"class":250},[91,37463,296],{"class":153},[91,37465,32423],{"class":105},[91,37467,37468,37470,37472],{"class":93,"line":2722},[91,37469,34231],{"class":250},[91,37471,296],{"class":153},[91,37473,3208],{"class":105},[91,37475,37476],{"class":93,"line":2727},[91,37477,2523],{"emptyLinePlaceholder":175},[91,37479,37480],{"class":93,"line":2733},[91,37481,34244],{"class":308},[91,37483,37484],{"class":93,"line":2739},[91,37485,34249],{"class":308},[91,37487,37488],{"class":93,"line":2744},[91,37489,34254],{"class":308},[91,37491,37492,37494],{"class":93,"line":8071},[91,37493,34259],{"class":153},[91,37495,32965],{"class":250},[91,37497,37498],{"class":93,"line":8095},[91,37499,34266],{"class":308},[91,37501,37502,37504,37506,37508],{"class":93,"line":8100},[91,37503,3526],{"class":153},[91,37505,34273],{"class":250},[91,37507,26165],{"class":153},[91,37509,34278],{"class":250},[91,37511,37512,37514,37516],{"class":93,"line":8106},[91,37513,34283],{"class":250},[91,37515,296],{"class":153},[91,37517,34288],{"class":250},[91,37519,37520,37522,37524],{"class":93,"line":8133},[91,37521,34293],{"class":250},[91,37523,296],{"class":153},[91,37525,34298],{"class":250},[91,37527,37528],{"class":93,"line":8138},[91,37529,34303],{"class":308},[91,37531,37532],{"class":93,"line":8144},[91,37533,32956],{"class":250},[91,37535,37536],{"class":93,"line":8156},[91,37537,34312],{"class":308},[91,37539,37540,37542,37544],{"class":93,"line":8168},[91,37541,32741],{"class":250},[91,37543,296],{"class":153},[91,37545,34321],{"class":250},[91,37547,37548],{"class":93,"line":8180},[91,37549,34326],{"class":308},[91,37551,37552,37554,37556,37558,37560,37562,37564],{"class":93,"line":9839},[91,37553,32758],{"class":250},[91,37555,296],{"class":153},[91,37557,32763],{"class":250},[91,37559,32766],{"class":5339},[91,37561,296],{"class":153},[91,37563,466],{"class":105},[91,37565,257],{"class":250},[91,37567,37568],{"class":93,"line":9864},[91,37569,34347],{"class":308},[91,37571,37572],{"class":93,"line":9887},[91,37573,34352],{"class":308},[91,37575,37576],{"class":93,"line":9911},[91,37577,34357],{"class":308},[91,37579,37580,37582,37584,37586,37588],{"class":93,"line":9916},[91,37581,34362],{"class":250},[91,37583,9600],{"class":153},[91,37585,32868],{"class":250},[91,37587,3072],{"class":153},[91,37589,34371],{"class":250},[91,37591,37592],{"class":93,"line":9921},[91,37593,34376],{"class":308},[91,37595,37596,37598,37600,37602,37604],{"class":93,"line":9926},[91,37597,34381],{"class":250},[91,37599,9600],{"class":153},[91,37601,34386],{"class":250},[91,37603,440],{"class":105},[91,37605,257],{"class":250},[91,37607,37608],{"class":93,"line":9935},[91,37609,2523],{"emptyLinePlaceholder":175},[91,37611,37612],{"class":93,"line":9940},[91,37613,34399],{"class":308},[91,37615,37616,37618,37620,37622,37624],{"class":93,"line":9946},[91,37617,34404],{"class":250},[91,37619,296],{"class":153},[91,37621,34409],{"class":250},[91,37623,833],{"class":153},[91,37625,34414],{"class":250},[91,37627,37628],{"class":93,"line":9967},[91,37629,34419],{"class":308},[91,37631,37632,37634,37636,37638],{"class":93,"line":9973},[91,37633,32532],{"class":105},[91,37635,251],{"class":250},[91,37637,34428],{"class":101},[91,37639,34431],{"class":250},[91,37641,37642],{"class":93,"line":9987},[91,37643,2523],{"emptyLinePlaceholder":175},[91,37645,37646],{"class":93,"line":9993},[91,37647,34440],{"class":308},[91,37649,37650,37652,37654,37656,37658],{"class":93,"line":10020},[91,37651,1655],{"class":153},[91,37653,31301],{"class":105},[91,37655,3072],{"class":153},[91,37657,31306],{"class":101},[91,37659,3862],{"class":250},[91,37661,37662],{"class":93,"line":10029},[91,37663,34457],{"class":308},[91,37665,37666,37668,37670],{"class":93,"line":10035},[91,37667,31370],{"class":250},[91,37669,296],{"class":153},[91,37671,37170],{"class":250},[91,37673,37674],{"class":93,"line":10043},[91,37675,34470],{"class":308},[91,37677,37678],{"class":93,"line":10048},[91,37679,34475],{"class":308},[91,37681,37682,37684,37686],{"class":93,"line":16727},[91,37683,34480],{"class":250},[91,37685,34483],{"class":101},[91,37687,30578],{"class":250},[91,37689,37690],{"class":93,"line":16733},[91,37691,34490],{"class":308},[91,37693,37694,37696,37698],{"class":93,"line":16756},[91,37695,34103],{"class":250},[91,37697,296],{"class":153},[91,37699,34499],{"class":250},[91,37701,37702],{"class":93,"line":16762},[91,37703,34504],{"class":308},[91,37705,37706],{"class":93,"line":16785},[91,37707,34509],{"class":250},[91,37709,37710],{"class":93,"line":16799},[91,37711,2523],{"emptyLinePlaceholder":175},[91,37713,37714],{"class":93,"line":16819},[91,37715,34518],{"class":308},[91,37717,37718],{"class":93,"line":16825},[91,37719,34523],{"class":308},[91,37721,37722,37724,37726,37728,37730,37732,37734],{"class":93,"line":16836},[91,37723,31318],{"class":250},[91,37725,296],{"class":153},[91,37727,31325],{"class":101},[91,37729,1828],{"class":153},[91,37731,31330],{"class":250},[91,37733,1825],{"class":153},[91,37735,34200],{"class":101},[91,37737,37738,37740,37742],{"class":93,"line":16859},[91,37739,31370],{"class":250},[91,37741,296],{"class":153},[91,37743,32370],{"class":250},[91,37745,37746],{"class":93,"line":16881},[91,37747,34552],{"class":308},[91,37749,37750],{"class":93,"line":16886},[91,37751,34557],{"class":308},[91,37753,37754,37756,37758,37760,37762,37764,37766,37768,37770,37772,37774,37776,37778,37780,37782,37784,37786,37788,37790,37792,37794,37796,37798],{"class":93,"line":16892},[91,37755,34562],{"class":250},[91,37757,296],{"class":153},[91,37759,1139],{"class":250},[91,37761,34569],{"class":101},[91,37763,627],{"class":250},[91,37765,34574],{"class":101},[91,37767,627],{"class":250},[91,37769,34579],{"class":101},[91,37771,627],{"class":250},[91,37773,34584],{"class":101},[91,37775,627],{"class":250},[91,37777,34589],{"class":101},[91,37779,627],{"class":250},[91,37781,34594],{"class":101},[91,37783,627],{"class":250},[91,37785,34599],{"class":101},[91,37787,627],{"class":250},[91,37789,34604],{"class":101},[91,37791,627],{"class":250},[91,37793,34609],{"class":101},[91,37795,627],{"class":250},[91,37797,34614],{"class":101},[91,37799,33327],{"class":250},[91,37801,37802,37804],{"class":93,"line":16906},[91,37803,34259],{"class":153},[91,37805,32965],{"class":250},[91,37807,37808],{"class":93,"line":16919},[91,37809,34627],{"class":308},[91,37811,37812,37814,37816,37818],{"class":93,"line":16924},[91,37813,3526],{"class":153},[91,37815,34634],{"class":250},[91,37817,26165],{"class":153},[91,37819,34278],{"class":250},[91,37821,37822,37824,37826],{"class":93,"line":16938},[91,37823,32691],{"class":250},[91,37825,296],{"class":153},[91,37827,32696],{"class":250},[91,37829,37830,37832,37834],{"class":93,"line":16943},[91,37831,32706],{"class":250},[91,37833,296],{"class":153},[91,37835,32711],{"class":250},[91,37837,37838],{"class":93,"line":16949},[91,37839,2523],{"emptyLinePlaceholder":175},[91,37841,37842],{"class":93,"line":16954},[91,37843,34663],{"class":308},[91,37845,37846],{"class":93,"line":16968},[91,37847,32956],{"class":250},[91,37849,37850],{"class":93,"line":16973},[91,37851,34672],{"class":308},[91,37853,37854,37856,37858],{"class":93,"line":16978},[91,37855,32741],{"class":250},[91,37857,296],{"class":153},[91,37859,32746],{"class":250},[91,37861,37862],{"class":93,"line":16992},[91,37863,34685],{"class":308},[91,37865,37866,37868,37870,37872,37874,37876,37878],{"class":93,"line":17004},[91,37867,32758],{"class":250},[91,37869,296],{"class":153},[91,37871,32763],{"class":250},[91,37873,32766],{"class":5339},[91,37875,296],{"class":153},[91,37877,466],{"class":105},[91,37879,257],{"class":250},[91,37881,37882],{"class":93,"line":17009},[91,37883,34706],{"class":308},[91,37885,37886,37888,37890],{"class":93,"line":17022},[91,37887,34711],{"class":250},[91,37889,296],{"class":153},[91,37891,34716],{"class":250},[91,37893,37894,37896,37898],{"class":93,"line":17027},[91,37895,34721],{"class":250},[91,37897,296],{"class":153},[91,37899,34726],{"class":250},[91,37901,37902,37904,37906,37908,37910,37912,37914,37916],{"class":93,"line":17032},[91,37903,34731],{"class":105},[91,37905,251],{"class":250},[91,37907,34736],{"class":101},[91,37909,34739],{"class":250},[91,37911,34742],{"class":101},[91,37913,627],{"class":250},[91,37915,34747],{"class":101},[91,37917,34750],{"class":250},[217,37919,37921],{"id":37920},"_22vgg","2.2.VGG",[22121,37923,37925],{"id":37924},"_221原理","2.2.1.原理",[21,37927,37928],{},[24,37929],{"alt":26,"src":37930},"\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",[21,37932,37933],{},[24,37934],{"alt":26,"src":37935},"\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",[21,37937,37938],{},[24,37939],{"alt":26,"src":37940},"\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",[21,37942,37943],{},"参数详细描述：",[21,37945,37946],{},[24,37947],{"alt":26,"src":37948},"\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",[21,37950,37951],{},[24,37952],{"alt":26,"src":37953},"\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",[21,37955,37956],{},[24,37957],{"alt":26,"src":37958},"\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",[21,37960,37961],{},[24,37962],{"alt":26,"src":37963},"\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",[21,37965,37966],{},[24,37967],{"alt":26,"src":37968},"\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",[22121,37970,37972],{"id":37971},"_222代码实现","2.2.2.代码实现",[14,37974,37975],{},[17,37976,37977],{},"网络搭建",[82,37979,37981],{"className":30459,"code":37980,"language":30461,"meta":26,"style":26},"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",[88,37982,37983,37989,38001,38011,38021,38025,38042,38050,38069,38074,38079,38091,38129,38134,38170,38174,38203,38208,38213,38224,38260,38264,38300,38304,38332,38336,38341,38352,38388,38392,38428,38432,38468,38472,38500,38504,38509,38520,38557,38561,38597,38601,38637,38641,38669,38673,38678,38689,38725,38729,38765,38769,38805,38809,38837,38841,38846,38857,38862,38867,38872,38893,38897,38909,38913,38925,38929,38933,38938,38943,38958,38963,38973,38978,38993,38998,39017,39022,39031,39036,39046,39051,39056,39070,39075,39089,39097,39101,39105,39113,39124,39135,39146,39157,39168,39179,39185,39189,39194,39207,39227,39233,39242],{"__ignoreMap":26},[91,37984,37985,37987],{"class":93,"line":94},[91,37986,30473],{"class":153},[91,37988,30476],{"class":250},[91,37990,37991,37993,37996,37998],{"class":93,"line":38},[91,37992,30818],{"class":153},[91,37994,37995],{"class":250}," sympy.core.sympify ",[91,37997,30473],{"class":153},[91,37999,38000],{"class":250}," kernS\n",[91,38002,38003,38005,38007,38009],{"class":93,"line":1304},[91,38004,30818],{"class":153},[91,38006,30821],{"class":250},[91,38008,30473],{"class":153},[91,38010,30826],{"class":250},[91,38012,38013,38015,38017,38019],{"class":93,"line":1319},[91,38014,30818],{"class":153},[91,38016,30838],{"class":250},[91,38018,30473],{"class":153},[91,38020,30843],{"class":250},[91,38022,38023],{"class":93,"line":1325},[91,38024,2523],{"emptyLinePlaceholder":175},[91,38026,38027,38029,38032,38034,38036,38038,38040],{"class":93,"line":1339},[91,38028,14817],{"class":153},[91,38030,38031],{"class":97}," VGG16",[91,38033,251],{"class":250},[91,38035,30859],{"class":97},[91,38037,807],{"class":250},[91,38039,30864],{"class":97},[91,38041,30867],{"class":250},[91,38043,38044,38046,38048],{"class":93,"line":1345},[91,38045,30882],{"class":153},[91,38047,30885],{"class":105},[91,38049,30888],{"class":250},[91,38051,38052,38054,38056,38059,38061,38063,38065,38067],{"class":93,"line":1436},[91,38053,30898],{"class":105},[91,38055,251],{"class":250},[91,38057,38058],{"class":105},"VGG16",[91,38060,12558],{"class":250},[91,38062,30904],{"class":105},[91,38064,30907],{"class":250},[91,38066,30910],{"class":105},[91,38068,2099],{"class":250},[91,38070,38071],{"class":93,"line":1442},[91,38072,38073],{"class":308},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[91,38075,38076],{"class":93,"line":1454},[91,38077,38078],{"class":308},"        # 这里用的是灰度图\n",[91,38080,38081,38083,38086,38088],{"class":93,"line":1736},[91,38082,30926],{"class":105},[91,38084,38085],{"class":250},".block1",[91,38087,296],{"class":153},[91,38089,38090],{"class":250},"nn.Sequential(\n",[91,38092,38093,38096,38098,38100,38102,38104,38106,38108,38110,38112,38114,38116,38118,38120,38122,38124,38126],{"class":93,"line":1741},[91,38094,38095],{"class":250},"            nn.Conv2d(",[91,38097,30937],{"class":5339},[91,38099,296],{"class":153},[91,38101,466],{"class":105},[91,38103,627],{"class":250},[91,38105,30946],{"class":5339},[91,38107,296],{"class":153},[91,38109,452],{"class":105},[91,38111,627],{"class":250},[91,38113,30955],{"class":5339},[91,38115,296],{"class":153},[91,38117,321],{"class":105},[91,38119,627],{"class":250},[91,38121,30964],{"class":5339},[91,38123,296],{"class":153},[91,38125,466],{"class":105},[91,38127,38128],{"class":250},"),\n",[91,38130,38131],{"class":93,"line":1747},[91,38132,38133],{"class":250},"            nn.ReLU(),\n",[91,38135,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160,38162,38164,38166,38168],{"class":93,"line":1752},[91,38137,38095],{"class":250},[91,38139,30937],{"class":5339},[91,38141,296],{"class":153},[91,38143,452],{"class":105},[91,38145,627],{"class":250},[91,38147,30946],{"class":5339},[91,38149,296],{"class":153},[91,38151,452],{"class":105},[91,38153,627],{"class":250},[91,38155,30955],{"class":5339},[91,38157,296],{"class":153},[91,38159,321],{"class":105},[91,38161,627],{"class":250},[91,38163,30964],{"class":5339},[91,38165,296],{"class":153},[91,38167,466],{"class":105},[91,38169,38128],{"class":250},[91,38171,38172],{"class":93,"line":1766},[91,38173,38133],{"class":250},[91,38175,38176,38179,38181,38183,38185,38187,38189,38191,38193,38195,38197,38199,38201],{"class":93,"line":1771},[91,38177,38178],{"class":250},"            nn.MaxPool2d(",[91,38180,30955],{"class":5339},[91,38182,296],{"class":153},[91,38184,327],{"class":105},[91,38186,627],{"class":250},[91,38188,31010],{"class":5339},[91,38190,296],{"class":153},[91,38192,327],{"class":105},[91,38194,627],{"class":250},[91,38196,30964],{"class":5339},[91,38198,296],{"class":153},[91,38200,440],{"class":105},[91,38202,257],{"class":250},[91,38204,38205],{"class":93,"line":1777},[91,38206,38207],{"class":250},"        )\n",[91,38209,38210],{"class":93,"line":1798},[91,38211,38212],{"class":308},"        # 第二层\n",[91,38214,38215,38217,38220,38222],{"class":93,"line":1803},[91,38216,30926],{"class":105},[91,38218,38219],{"class":250},".block2",[91,38221,296],{"class":153},[91,38223,38090],{"class":250},[91,38225,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246,38248,38250,38252,38254,38256,38258],{"class":93,"line":1817},[91,38227,38095],{"class":250},[91,38229,30937],{"class":5339},[91,38231,296],{"class":153},[91,38233,452],{"class":105},[91,38235,627],{"class":250},[91,38237,30946],{"class":5339},[91,38239,296],{"class":153},[91,38241,32151],{"class":105},[91,38243,627],{"class":250},[91,38245,30955],{"class":5339},[91,38247,296],{"class":153},[91,38249,321],{"class":105},[91,38251,627],{"class":250},[91,38253,30964],{"class":5339},[91,38255,296],{"class":153},[91,38257,466],{"class":105},[91,38259,38128],{"class":250},[91,38261,38262],{"class":93,"line":1822},[91,38263,38133],{"class":250},[91,38265,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294,38296,38298],{"class":93,"line":1851},[91,38267,38095],{"class":250},[91,38269,30937],{"class":5339},[91,38271,296],{"class":153},[91,38273,32151],{"class":105},[91,38275,627],{"class":250},[91,38277,30946],{"class":5339},[91,38279,296],{"class":153},[91,38281,32151],{"class":105},[91,38283,627],{"class":250},[91,38285,30955],{"class":5339},[91,38287,296],{"class":153},[91,38289,321],{"class":105},[91,38291,627],{"class":250},[91,38293,30964],{"class":5339},[91,38295,296],{"class":153},[91,38297,466],{"class":105},[91,38299,38128],{"class":250},[91,38301,38302],{"class":93,"line":1856},[91,38303,38133],{"class":250},[91,38305,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328,38330],{"class":93,"line":1873},[91,38307,38178],{"class":250},[91,38309,30955],{"class":5339},[91,38311,296],{"class":153},[91,38313,327],{"class":105},[91,38315,627],{"class":250},[91,38317,31010],{"class":5339},[91,38319,296],{"class":153},[91,38321,327],{"class":105},[91,38323,627],{"class":250},[91,38325,30964],{"class":5339},[91,38327,296],{"class":153},[91,38329,440],{"class":105},[91,38331,257],{"class":250},[91,38333,38334],{"class":93,"line":1878},[91,38335,38207],{"class":250},[91,38337,38338],{"class":93,"line":1883},[91,38339,38340],{"class":308},"        # 第三层\n",[91,38342,38343,38345,38348,38350],{"class":93,"line":1888},[91,38344,30926],{"class":105},[91,38346,38347],{"class":250},".block3",[91,38349,296],{"class":153},[91,38351,38090],{"class":250},[91,38353,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386],{"class":93,"line":1902},[91,38355,38095],{"class":250},[91,38357,30937],{"class":5339},[91,38359,296],{"class":153},[91,38361,32151],{"class":105},[91,38363,627],{"class":250},[91,38365,30946],{"class":5339},[91,38367,296],{"class":153},[91,38369,34951],{"class":105},[91,38371,627],{"class":250},[91,38373,30955],{"class":5339},[91,38375,296],{"class":153},[91,38377,321],{"class":105},[91,38379,627],{"class":250},[91,38381,30964],{"class":5339},[91,38383,296],{"class":153},[91,38385,466],{"class":105},[91,38387,38128],{"class":250},[91,38389,38390],{"class":93,"line":1907},[91,38391,38133],{"class":250},[91,38393,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414,38416,38418,38420,38422,38424,38426],{"class":93,"line":2700},[91,38395,38095],{"class":250},[91,38397,30937],{"class":5339},[91,38399,296],{"class":153},[91,38401,34951],{"class":105},[91,38403,627],{"class":250},[91,38405,30946],{"class":5339},[91,38407,296],{"class":153},[91,38409,34951],{"class":105},[91,38411,627],{"class":250},[91,38413,30955],{"class":5339},[91,38415,296],{"class":153},[91,38417,321],{"class":105},[91,38419,627],{"class":250},[91,38421,30964],{"class":5339},[91,38423,296],{"class":153},[91,38425,466],{"class":105},[91,38427,38128],{"class":250},[91,38429,38430],{"class":93,"line":2714},[91,38431,38133],{"class":250},[91,38433,38434,38436,38438,38440,38442,38444,38446,38448,38450,38452,38454,38456,38458,38460,38462,38464,38466],{"class":93,"line":2722},[91,38435,38095],{"class":250},[91,38437,30937],{"class":5339},[91,38439,296],{"class":153},[91,38441,34951],{"class":105},[91,38443,627],{"class":250},[91,38445,30946],{"class":5339},[91,38447,296],{"class":153},[91,38449,34951],{"class":105},[91,38451,627],{"class":250},[91,38453,30955],{"class":5339},[91,38455,296],{"class":153},[91,38457,321],{"class":105},[91,38459,627],{"class":250},[91,38461,30964],{"class":5339},[91,38463,296],{"class":153},[91,38465,466],{"class":105},[91,38467,38128],{"class":250},[91,38469,38470],{"class":93,"line":2727},[91,38471,38133],{"class":250},[91,38473,38474,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496,38498],{"class":93,"line":2733},[91,38475,38178],{"class":250},[91,38477,30955],{"class":5339},[91,38479,296],{"class":153},[91,38481,327],{"class":105},[91,38483,627],{"class":250},[91,38485,31010],{"class":5339},[91,38487,296],{"class":153},[91,38489,327],{"class":105},[91,38491,627],{"class":250},[91,38493,30964],{"class":5339},[91,38495,296],{"class":153},[91,38497,440],{"class":105},[91,38499,257],{"class":250},[91,38501,38502],{"class":93,"line":2739},[91,38503,38207],{"class":250},[91,38505,38506],{"class":93,"line":2744},[91,38507,38508],{"class":308},"        # 第四层\n",[91,38510,38511,38513,38516,38518],{"class":93,"line":8071},[91,38512,30926],{"class":105},[91,38514,38515],{"class":250},".block4",[91,38517,296],{"class":153},[91,38519,38090],{"class":250},[91,38521,38522,38524,38526,38528,38530,38532,38534,38536,38539,38541,38543,38545,38547,38549,38551,38553,38555],{"class":93,"line":8095},[91,38523,38095],{"class":250},[91,38525,30937],{"class":5339},[91,38527,296],{"class":153},[91,38529,34951],{"class":105},[91,38531,627],{"class":250},[91,38533,30946],{"class":5339},[91,38535,296],{"class":153},[91,38537,38538],{"class":105},"512",[91,38540,627],{"class":250},[91,38542,30955],{"class":5339},[91,38544,296],{"class":153},[91,38546,321],{"class":105},[91,38548,627],{"class":250},[91,38550,30964],{"class":5339},[91,38552,296],{"class":153},[91,38554,466],{"class":105},[91,38556,38128],{"class":250},[91,38558,38559],{"class":93,"line":8100},[91,38560,38133],{"class":250},[91,38562,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595],{"class":93,"line":8106},[91,38564,38095],{"class":250},[91,38566,30937],{"class":5339},[91,38568,296],{"class":153},[91,38570,38538],{"class":105},[91,38572,627],{"class":250},[91,38574,30946],{"class":5339},[91,38576,296],{"class":153},[91,38578,38538],{"class":105},[91,38580,627],{"class":250},[91,38582,30955],{"class":5339},[91,38584,296],{"class":153},[91,38586,321],{"class":105},[91,38588,627],{"class":250},[91,38590,30964],{"class":5339},[91,38592,296],{"class":153},[91,38594,466],{"class":105},[91,38596,38128],{"class":250},[91,38598,38599],{"class":93,"line":8133},[91,38600,38133],{"class":250},[91,38602,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635],{"class":93,"line":8138},[91,38604,38095],{"class":250},[91,38606,30937],{"class":5339},[91,38608,296],{"class":153},[91,38610,38538],{"class":105},[91,38612,627],{"class":250},[91,38614,30946],{"class":5339},[91,38616,296],{"class":153},[91,38618,38538],{"class":105},[91,38620,627],{"class":250},[91,38622,30955],{"class":5339},[91,38624,296],{"class":153},[91,38626,321],{"class":105},[91,38628,627],{"class":250},[91,38630,30964],{"class":5339},[91,38632,296],{"class":153},[91,38634,466],{"class":105},[91,38636,38128],{"class":250},[91,38638,38639],{"class":93,"line":8144},[91,38640,38133],{"class":250},[91,38642,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667],{"class":93,"line":8156},[91,38644,38178],{"class":250},[91,38646,30955],{"class":5339},[91,38648,296],{"class":153},[91,38650,327],{"class":105},[91,38652,627],{"class":250},[91,38654,31010],{"class":5339},[91,38656,296],{"class":153},[91,38658,327],{"class":105},[91,38660,627],{"class":250},[91,38662,30964],{"class":5339},[91,38664,296],{"class":153},[91,38666,440],{"class":105},[91,38668,257],{"class":250},[91,38670,38671],{"class":93,"line":8168},[91,38672,38207],{"class":250},[91,38674,38675],{"class":93,"line":8180},[91,38676,38677],{"class":308},"        # 第五层\n",[91,38679,38680,38682,38685,38687],{"class":93,"line":9839},[91,38681,30926],{"class":105},[91,38683,38684],{"class":250},".block5",[91,38686,296],{"class":153},[91,38688,38090],{"class":250},[91,38690,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723],{"class":93,"line":9864},[91,38692,38095],{"class":250},[91,38694,30937],{"class":5339},[91,38696,296],{"class":153},[91,38698,38538],{"class":105},[91,38700,627],{"class":250},[91,38702,30946],{"class":5339},[91,38704,296],{"class":153},[91,38706,38538],{"class":105},[91,38708,627],{"class":250},[91,38710,30955],{"class":5339},[91,38712,296],{"class":153},[91,38714,321],{"class":105},[91,38716,627],{"class":250},[91,38718,30964],{"class":5339},[91,38720,296],{"class":153},[91,38722,466],{"class":105},[91,38724,38128],{"class":250},[91,38726,38727],{"class":93,"line":9887},[91,38728,38133],{"class":250},[91,38730,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763],{"class":93,"line":9911},[91,38732,38095],{"class":250},[91,38734,30937],{"class":5339},[91,38736,296],{"class":153},[91,38738,38538],{"class":105},[91,38740,627],{"class":250},[91,38742,30946],{"class":5339},[91,38744,296],{"class":153},[91,38746,38538],{"class":105},[91,38748,627],{"class":250},[91,38750,30955],{"class":5339},[91,38752,296],{"class":153},[91,38754,321],{"class":105},[91,38756,627],{"class":250},[91,38758,30964],{"class":5339},[91,38760,296],{"class":153},[91,38762,466],{"class":105},[91,38764,38128],{"class":250},[91,38766,38767],{"class":93,"line":9916},[91,38768,38133],{"class":250},[91,38770,38771,38773,38775,38777,38779,38781,38783,38785,38787,38789,38791,38793,38795,38797,38799,38801,38803],{"class":93,"line":9921},[91,38772,38095],{"class":250},[91,38774,30937],{"class":5339},[91,38776,296],{"class":153},[91,38778,38538],{"class":105},[91,38780,627],{"class":250},[91,38782,30946],{"class":5339},[91,38784,296],{"class":153},[91,38786,38538],{"class":105},[91,38788,627],{"class":250},[91,38790,30955],{"class":5339},[91,38792,296],{"class":153},[91,38794,321],{"class":105},[91,38796,627],{"class":250},[91,38798,30964],{"class":5339},[91,38800,296],{"class":153},[91,38802,466],{"class":105},[91,38804,38128],{"class":250},[91,38806,38807],{"class":93,"line":9926},[91,38808,38133],{"class":250},[91,38810,38811,38813,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835],{"class":93,"line":9935},[91,38812,38178],{"class":250},[91,38814,30955],{"class":5339},[91,38816,296],{"class":153},[91,38818,327],{"class":105},[91,38820,627],{"class":250},[91,38822,31010],{"class":5339},[91,38824,296],{"class":153},[91,38826,327],{"class":105},[91,38828,627],{"class":250},[91,38830,30964],{"class":5339},[91,38832,296],{"class":153},[91,38834,440],{"class":105},[91,38836,257],{"class":250},[91,38838,38839],{"class":93,"line":9940},[91,38840,38207],{"class":250},[91,38842,38843],{"class":93,"line":9946},[91,38844,38845],{"class":308},"        # 全连接层\n",[91,38847,38848,38850,38853,38855],{"class":93,"line":9967},[91,38849,30926],{"class":105},[91,38851,38852],{"class":250},".block6",[91,38854,296],{"class":153},[91,38856,38090],{"class":250},[91,38858,38859],{"class":93,"line":9973},[91,38860,38861],{"class":308},"            # 平展操作\n",[91,38863,38864],{"class":93,"line":9987},[91,38865,38866],{"class":308},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[91,38868,38869],{"class":93,"line":9993},[91,38870,38871],{"class":250},"            nn.Flatten(),\n",[91,38873,38874,38877,38879,38881,38883,38885,38887,38889,38891],{"class":93,"line":10020},[91,38875,38876],{"class":250},"            nn.Linear(",[91,38878,618],{"class":105},[91,38880,704],{"class":153},[91,38882,618],{"class":105},[91,38884,704],{"class":153},[91,38886,38538],{"class":105},[91,38888,627],{"class":250},[91,38890,34951],{"class":105},[91,38892,38128],{"class":250},[91,38894,38895],{"class":93,"line":10029},[91,38896,38133],{"class":250},[91,38898,38899,38901,38903,38905,38907],{"class":93,"line":10035},[91,38900,38876],{"class":250},[91,38902,34951],{"class":105},[91,38904,627],{"class":250},[91,38906,32151],{"class":105},[91,38908,38128],{"class":250},[91,38910,38911],{"class":93,"line":10043},[91,38912,38133],{"class":250},[91,38914,38915,38917,38919,38921,38923],{"class":93,"line":10048},[91,38916,38876],{"class":250},[91,38918,32151],{"class":105},[91,38920,627],{"class":250},[91,38922,695],{"class":105},[91,38924,257],{"class":250},[91,38926,38927],{"class":93,"line":16727},[91,38928,38207],{"class":250},[91,38930,38931],{"class":93,"line":16733},[91,38932,2523],{"emptyLinePlaceholder":175},[91,38934,38935],{"class":93,"line":16756},[91,38936,38937],{"class":308},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[91,38939,38940],{"class":93,"line":16762},[91,38941,38942],{"class":308},"        # 循环遍历模型\n",[91,38944,38945,38947,38950,38952,38955],{"class":93,"line":16785},[91,38946,3526],{"class":153},[91,38948,38949],{"class":250}," m ",[91,38951,26165],{"class":153},[91,38953,38954],{"class":105}," self",[91,38956,38957],{"class":250},".modules():\n",[91,38959,38960],{"class":93,"line":16799},[91,38961,38962],{"class":308},"            # print(m)\n",[91,38964,38965,38967,38970],{"class":93,"line":16819},[91,38966,4765],{"class":153},[91,38968,38969],{"class":105}," isinstance",[91,38971,38972],{"class":250},"(m,nn.Conv2d):\n",[91,38974,38975],{"class":93,"line":16825},[91,38976,38977],{"class":308},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[91,38979,38980,38983,38986,38988,38991],{"class":93,"line":16836},[91,38981,38982],{"class":250},"                nn.init.kaiming_normal_(m.weight,",[91,38984,38985],{"class":5339},"nonlinearity",[91,38987,296],{"class":153},[91,38989,38990],{"class":101},"'relu'",[91,38992,257],{"class":250},[91,38994,38995],{"class":93,"line":16859},[91,38996,38997],{"class":308},"                # 判断b参数是否存在\n",[91,38999,39000,39003,39006,39009,39012,39015],{"class":93,"line":16881},[91,39001,39002],{"class":153},"                if",[91,39004,39005],{"class":250}," m.bias ",[91,39007,39008],{"class":153},"is",[91,39010,39011],{"class":153}," not",[91,39013,39014],{"class":105}," None",[91,39016,3862],{"class":250},[91,39018,39019],{"class":93,"line":16886},[91,39020,39021],{"class":308},"                    # 如果参数不存在的化初始化b=0\n",[91,39023,39024,39027,39029],{"class":93,"line":16892},[91,39025,39026],{"class":250},"                    nn.init.constant_(m.bias,",[91,39028,440],{"class":105},[91,39030,257],{"class":250},[91,39032,39033],{"class":93,"line":16906},[91,39034,39035],{"class":308},"            # 全连接层初始化\n",[91,39037,39038,39041,39043],{"class":93,"line":16919},[91,39039,39040],{"class":153},"            elif",[91,39042,38969],{"class":105},[91,39044,39045],{"class":250},"(m,nn.Linear):\n",[91,39047,39048],{"class":93,"line":16924},[91,39049,39050],{"class":308},"                # 这个初始化方法是利用的是正太分布的方式\n",[91,39052,39053],{"class":93,"line":16938},[91,39054,39055],{"class":308},"                # 均值为0，方差为0.01\n",[91,39057,39058,39061,39063,39065,39068],{"class":93,"line":16943},[91,39059,39060],{"class":250},"                nn.init.normal_(m.weight,",[91,39062,440],{"class":105},[91,39064,627],{"class":250},[91,39066,39067],{"class":105},"0.01",[91,39069,257],{"class":250},[91,39071,39072],{"class":93,"line":16949},[91,39073,39074],{"class":308},"                # 初始化b参数\n",[91,39076,39077,39079,39081,39083,39085,39087],{"class":93,"line":16954},[91,39078,39002],{"class":153},[91,39080,39005],{"class":250},[91,39082,39008],{"class":153},[91,39084,39011],{"class":153},[91,39086,39014],{"class":105},[91,39088,3862],{"class":250},[91,39090,39091,39093,39095],{"class":93,"line":16968},[91,39092,39026],{"class":250},[91,39094,440],{"class":105},[91,39096,257],{"class":250},[91,39098,39099],{"class":93,"line":16973},[91,39100,2523],{"emptyLinePlaceholder":175},[91,39102,39103],{"class":93,"line":16978},[91,39104,35246],{"class":308},[91,39106,39107,39109,39111],{"class":93,"line":16992},[91,39108,30882],{"class":153},[91,39110,31174],{"class":97},[91,39112,31177],{"class":250},[91,39114,39115,39117,39119,39121],{"class":93,"line":17004},[91,39116,31182],{"class":250},[91,39118,296],{"class":153},[91,39120,30904],{"class":105},[91,39122,39123],{"class":250},".block1(x)\n",[91,39125,39126,39128,39130,39132],{"class":93,"line":17009},[91,39127,31182],{"class":250},[91,39129,296],{"class":153},[91,39131,30904],{"class":105},[91,39133,39134],{"class":250},".block2(x)\n",[91,39136,39137,39139,39141,39143],{"class":93,"line":17022},[91,39138,31182],{"class":250},[91,39140,296],{"class":153},[91,39142,30904],{"class":105},[91,39144,39145],{"class":250},".block3(x)\n",[91,39147,39148,39150,39152,39154],{"class":93,"line":17027},[91,39149,31182],{"class":250},[91,39151,296],{"class":153},[91,39153,30904],{"class":105},[91,39155,39156],{"class":250},".block4(x)\n",[91,39158,39159,39161,39163,39165],{"class":93,"line":17032},[91,39160,31182],{"class":250},[91,39162,296],{"class":153},[91,39164,30904],{"class":105},[91,39166,39167],{"class":250},".block5(x)\n",[91,39169,39170,39172,39174,39176],{"class":93,"line":17037},[91,39171,31182],{"class":250},[91,39173,296],{"class":153},[91,39175,30904],{"class":105},[91,39177,39178],{"class":250},".block6(x)\n",[91,39180,39181,39183],{"class":93,"line":17050},[91,39182,14875],{"class":153},[91,39184,31290],{"class":250},[91,39186,39187],{"class":93,"line":17055},[91,39188,2523],{"emptyLinePlaceholder":175},[91,39190,39191],{"class":93,"line":32714},[91,39192,39193],{"class":308},"# 验证模型\n",[91,39195,39196,39198,39200,39202,39205],{"class":93,"line":32720},[91,39197,1655],{"class":153},[91,39199,31301],{"class":105},[91,39201,3072],{"class":153},[91,39203,39204],{"class":101},"'__main__'",[91,39206,3862],{"class":250},[91,39208,39209,39211,39213,39215,39217,39219,39221,39223,39225],{"class":93,"line":32726},[91,39210,31318],{"class":250},[91,39212,296],{"class":153},[91,39214,30532],{"class":250},[91,39216,31325],{"class":101},[91,39218,1828],{"class":153},[91,39220,31330],{"class":250},[91,39222,1825],{"class":153},[91,39224,30557],{"class":101},[91,39226,257],{"class":250},[91,39228,39229,39231],{"class":93,"line":32732},[91,39230,31380],{"class":105},[91,39232,30566],{"class":250},[91,39234,39235,39237,39239],{"class":93,"line":32738},[91,39236,31370],{"class":250},[91,39238,296],{"class":153},[91,39240,39241],{"class":250},"VGG16().to(device)\n",[91,39243,39244,39246,39248,39250,39252,39254,39256,39258],{"class":93,"line":32749},[91,39245,31380],{"class":105},[91,39247,31383],{"class":250},[91,39249,466],{"class":105},[91,39251,627],{"class":250},[91,39253,31582],{"class":105},[91,39255,627],{"class":250},[91,39257,31582],{"class":105},[91,39259,31396],{"class":250},[14,39261,39262],{"start":38},[17,39263,39264],{},"训练代码",[21,39266,39267],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[21,39269,39270],{},"解决方式:",[21,39272,39273],{},"①权重初始化",[82,39275,39277],{"className":30459,"code":39276,"language":30461,"meta":26,"style":26},"# 权重初始化,保证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",[88,39278,39279,39284,39289,39301,39306,39314,39319,39332,39337,39351,39356,39365,39370,39379,39384,39389,39402,39407,39421],{"__ignoreMap":26},[91,39280,39281],{"class":93,"line":94},[91,39282,39283],{"class":308},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[91,39285,39286],{"class":93,"line":38},[91,39287,39288],{"class":308},"# 循环遍历模型\n",[91,39290,39291,39293,39295,39297,39299],{"class":93,"line":1304},[91,39292,3148],{"class":153},[91,39294,38949],{"class":250},[91,39296,26165],{"class":153},[91,39298,38954],{"class":105},[91,39300,38957],{"class":250},[91,39302,39303],{"class":93,"line":1319},[91,39304,39305],{"class":308},"    # print(m)\n",[91,39307,39308,39310,39312],{"class":93,"line":1325},[91,39309,3224],{"class":153},[91,39311,38969],{"class":105},[91,39313,38972],{"class":250},[91,39315,39316],{"class":93,"line":1339},[91,39317,39318],{"class":308},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[91,39320,39321,39324,39326,39328,39330],{"class":93,"line":1345},[91,39322,39323],{"class":250},"        nn.init.kaiming_normal_(m.weight,",[91,39325,38985],{"class":5339},[91,39327,296],{"class":153},[91,39329,38990],{"class":101},[91,39331,257],{"class":250},[91,39333,39334],{"class":93,"line":1436},[91,39335,39336],{"class":308},"        # 判断b参数是否存在\n",[91,39338,39339,39341,39343,39345,39347,39349],{"class":93,"line":1442},[91,39340,2620],{"class":153},[91,39342,39005],{"class":250},[91,39344,39008],{"class":153},[91,39346,39011],{"class":153},[91,39348,39014],{"class":105},[91,39350,3862],{"class":250},[91,39352,39353],{"class":93,"line":1454},[91,39354,39355],{"class":308},"            # 如果参数不存在的化初始化b=0\n",[91,39357,39358,39361,39363],{"class":93,"line":1736},[91,39359,39360],{"class":250},"            nn.init.constant_(m.bias,",[91,39362,440],{"class":105},[91,39364,257],{"class":250},[91,39366,39367],{"class":93,"line":1741},[91,39368,39369],{"class":308},"    # 全连接层初始化\n",[91,39371,39372,39375,39377],{"class":93,"line":1747},[91,39373,39374],{"class":153},"    elif",[91,39376,38969],{"class":105},[91,39378,39045],{"class":250},[91,39380,39381],{"class":93,"line":1752},[91,39382,39383],{"class":308},"        # 这个初始化方法是利用的是正太分布的方式\n",[91,39385,39386],{"class":93,"line":1766},[91,39387,39388],{"class":308},"        # 均值为0，方差为0.01\n",[91,39390,39391,39394,39396,39398,39400],{"class":93,"line":1771},[91,39392,39393],{"class":250},"        nn.init.normal_(m.weight,",[91,39395,440],{"class":105},[91,39397,627],{"class":250},[91,39399,39067],{"class":105},[91,39401,257],{"class":250},[91,39403,39404],{"class":93,"line":1777},[91,39405,39406],{"class":308},"        # 初始化b参数\n",[91,39408,39409,39411,39413,39415,39417,39419],{"class":93,"line":1798},[91,39410,2620],{"class":153},[91,39412,39005],{"class":250},[91,39414,39008],{"class":153},[91,39416,39011],{"class":153},[91,39418,39014],{"class":105},[91,39420,3862],{"class":250},[91,39422,39423,39425,39427],{"class":93,"line":1803},[91,39424,39360],{"class":250},[91,39426,440],{"class":105},[91,39428,257],{"class":250},[21,39430,39431],{},"②尽可能地增加批次",[21,39433,39434],{},"训练完整代码：",[82,39436,39437],{"className":30459,"code":37980,"language":30461,"meta":26,"style":26},[88,39438,39439,39445,39455,39465,39475,39479,39495,39503,39521,39525,39529,39539,39575,39579,39615,39619,39647,39651,39655,39665,39701,39705,39741,39745,39773,39777,39781,39791,39827,39831,39867,39871,39907,39911,39939,39943,39947,39957,39993,39997,40033,40037,40073,40077,40105,40109,40113,40123,40159,40163,40199,40203,40239,40243,40271,40275,40279,40289,40293,40297,40301,40321,40325,40337,40341,40353,40357,40361,40365,40369,40381,40385,40393,40397,40409,40413,40427,40431,40439,40443,40451,40455,40459,40471,40475,40489,40497,40501,40505,40513,40523,40533,40543,40553,40563,40573,40579,40583,40587,40599,40619,40625,40633],{"__ignoreMap":26},[91,39440,39441,39443],{"class":93,"line":94},[91,39442,30473],{"class":153},[91,39444,30476],{"class":250},[91,39446,39447,39449,39451,39453],{"class":93,"line":38},[91,39448,30818],{"class":153},[91,39450,37995],{"class":250},[91,39452,30473],{"class":153},[91,39454,38000],{"class":250},[91,39456,39457,39459,39461,39463],{"class":93,"line":1304},[91,39458,30818],{"class":153},[91,39460,30821],{"class":250},[91,39462,30473],{"class":153},[91,39464,30826],{"class":250},[91,39466,39467,39469,39471,39473],{"class":93,"line":1319},[91,39468,30818],{"class":153},[91,39470,30838],{"class":250},[91,39472,30473],{"class":153},[91,39474,30843],{"class":250},[91,39476,39477],{"class":93,"line":1325},[91,39478,2523],{"emptyLinePlaceholder":175},[91,39480,39481,39483,39485,39487,39489,39491,39493],{"class":93,"line":1339},[91,39482,14817],{"class":153},[91,39484,38031],{"class":97},[91,39486,251],{"class":250},[91,39488,30859],{"class":97},[91,39490,807],{"class":250},[91,39492,30864],{"class":97},[91,39494,30867],{"class":250},[91,39496,39497,39499,39501],{"class":93,"line":1345},[91,39498,30882],{"class":153},[91,39500,30885],{"class":105},[91,39502,30888],{"class":250},[91,39504,39505,39507,39509,39511,39513,39515,39517,39519],{"class":93,"line":1436},[91,39506,30898],{"class":105},[91,39508,251],{"class":250},[91,39510,38058],{"class":105},[91,39512,12558],{"class":250},[91,39514,30904],{"class":105},[91,39516,30907],{"class":250},[91,39518,30910],{"class":105},[91,39520,2099],{"class":250},[91,39522,39523],{"class":93,"line":1442},[91,39524,38073],{"class":308},[91,39526,39527],{"class":93,"line":1454},[91,39528,38078],{"class":308},[91,39530,39531,39533,39535,39537],{"class":93,"line":1736},[91,39532,30926],{"class":105},[91,39534,38085],{"class":250},[91,39536,296],{"class":153},[91,39538,38090],{"class":250},[91,39540,39541,39543,39545,39547,39549,39551,39553,39555,39557,39559,39561,39563,39565,39567,39569,39571,39573],{"class":93,"line":1741},[91,39542,38095],{"class":250},[91,39544,30937],{"class":5339},[91,39546,296],{"class":153},[91,39548,466],{"class":105},[91,39550,627],{"class":250},[91,39552,30946],{"class":5339},[91,39554,296],{"class":153},[91,39556,452],{"class":105},[91,39558,627],{"class":250},[91,39560,30955],{"class":5339},[91,39562,296],{"class":153},[91,39564,321],{"class":105},[91,39566,627],{"class":250},[91,39568,30964],{"class":5339},[91,39570,296],{"class":153},[91,39572,466],{"class":105},[91,39574,38128],{"class":250},[91,39576,39577],{"class":93,"line":1747},[91,39578,38133],{"class":250},[91,39580,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609,39611,39613],{"class":93,"line":1752},[91,39582,38095],{"class":250},[91,39584,30937],{"class":5339},[91,39586,296],{"class":153},[91,39588,452],{"class":105},[91,39590,627],{"class":250},[91,39592,30946],{"class":5339},[91,39594,296],{"class":153},[91,39596,452],{"class":105},[91,39598,627],{"class":250},[91,39600,30955],{"class":5339},[91,39602,296],{"class":153},[91,39604,321],{"class":105},[91,39606,627],{"class":250},[91,39608,30964],{"class":5339},[91,39610,296],{"class":153},[91,39612,466],{"class":105},[91,39614,38128],{"class":250},[91,39616,39617],{"class":93,"line":1766},[91,39618,38133],{"class":250},[91,39620,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645],{"class":93,"line":1771},[91,39622,38178],{"class":250},[91,39624,30955],{"class":5339},[91,39626,296],{"class":153},[91,39628,327],{"class":105},[91,39630,627],{"class":250},[91,39632,31010],{"class":5339},[91,39634,296],{"class":153},[91,39636,327],{"class":105},[91,39638,627],{"class":250},[91,39640,30964],{"class":5339},[91,39642,296],{"class":153},[91,39644,440],{"class":105},[91,39646,257],{"class":250},[91,39648,39649],{"class":93,"line":1777},[91,39650,38207],{"class":250},[91,39652,39653],{"class":93,"line":1798},[91,39654,38212],{"class":308},[91,39656,39657,39659,39661,39663],{"class":93,"line":1803},[91,39658,30926],{"class":105},[91,39660,38219],{"class":250},[91,39662,296],{"class":153},[91,39664,38090],{"class":250},[91,39666,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699],{"class":93,"line":1817},[91,39668,38095],{"class":250},[91,39670,30937],{"class":5339},[91,39672,296],{"class":153},[91,39674,452],{"class":105},[91,39676,627],{"class":250},[91,39678,30946],{"class":5339},[91,39680,296],{"class":153},[91,39682,32151],{"class":105},[91,39684,627],{"class":250},[91,39686,30955],{"class":5339},[91,39688,296],{"class":153},[91,39690,321],{"class":105},[91,39692,627],{"class":250},[91,39694,30964],{"class":5339},[91,39696,296],{"class":153},[91,39698,466],{"class":105},[91,39700,38128],{"class":250},[91,39702,39703],{"class":93,"line":1822},[91,39704,38133],{"class":250},[91,39706,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737,39739],{"class":93,"line":1851},[91,39708,38095],{"class":250},[91,39710,30937],{"class":5339},[91,39712,296],{"class":153},[91,39714,32151],{"class":105},[91,39716,627],{"class":250},[91,39718,30946],{"class":5339},[91,39720,296],{"class":153},[91,39722,32151],{"class":105},[91,39724,627],{"class":250},[91,39726,30955],{"class":5339},[91,39728,296],{"class":153},[91,39730,321],{"class":105},[91,39732,627],{"class":250},[91,39734,30964],{"class":5339},[91,39736,296],{"class":153},[91,39738,466],{"class":105},[91,39740,38128],{"class":250},[91,39742,39743],{"class":93,"line":1856},[91,39744,38133],{"class":250},[91,39746,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771],{"class":93,"line":1873},[91,39748,38178],{"class":250},[91,39750,30955],{"class":5339},[91,39752,296],{"class":153},[91,39754,327],{"class":105},[91,39756,627],{"class":250},[91,39758,31010],{"class":5339},[91,39760,296],{"class":153},[91,39762,327],{"class":105},[91,39764,627],{"class":250},[91,39766,30964],{"class":5339},[91,39768,296],{"class":153},[91,39770,440],{"class":105},[91,39772,257],{"class":250},[91,39774,39775],{"class":93,"line":1878},[91,39776,38207],{"class":250},[91,39778,39779],{"class":93,"line":1883},[91,39780,38340],{"class":308},[91,39782,39783,39785,39787,39789],{"class":93,"line":1888},[91,39784,30926],{"class":105},[91,39786,38347],{"class":250},[91,39788,296],{"class":153},[91,39790,38090],{"class":250},[91,39792,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825],{"class":93,"line":1902},[91,39794,38095],{"class":250},[91,39796,30937],{"class":5339},[91,39798,296],{"class":153},[91,39800,32151],{"class":105},[91,39802,627],{"class":250},[91,39804,30946],{"class":5339},[91,39806,296],{"class":153},[91,39808,34951],{"class":105},[91,39810,627],{"class":250},[91,39812,30955],{"class":5339},[91,39814,296],{"class":153},[91,39816,321],{"class":105},[91,39818,627],{"class":250},[91,39820,30964],{"class":5339},[91,39822,296],{"class":153},[91,39824,466],{"class":105},[91,39826,38128],{"class":250},[91,39828,39829],{"class":93,"line":1907},[91,39830,38133],{"class":250},[91,39832,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865],{"class":93,"line":2700},[91,39834,38095],{"class":250},[91,39836,30937],{"class":5339},[91,39838,296],{"class":153},[91,39840,34951],{"class":105},[91,39842,627],{"class":250},[91,39844,30946],{"class":5339},[91,39846,296],{"class":153},[91,39848,34951],{"class":105},[91,39850,627],{"class":250},[91,39852,30955],{"class":5339},[91,39854,296],{"class":153},[91,39856,321],{"class":105},[91,39858,627],{"class":250},[91,39860,30964],{"class":5339},[91,39862,296],{"class":153},[91,39864,466],{"class":105},[91,39866,38128],{"class":250},[91,39868,39869],{"class":93,"line":2714},[91,39870,38133],{"class":250},[91,39872,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905],{"class":93,"line":2722},[91,39874,38095],{"class":250},[91,39876,30937],{"class":5339},[91,39878,296],{"class":153},[91,39880,34951],{"class":105},[91,39882,627],{"class":250},[91,39884,30946],{"class":5339},[91,39886,296],{"class":153},[91,39888,34951],{"class":105},[91,39890,627],{"class":250},[91,39892,30955],{"class":5339},[91,39894,296],{"class":153},[91,39896,321],{"class":105},[91,39898,627],{"class":250},[91,39900,30964],{"class":5339},[91,39902,296],{"class":153},[91,39904,466],{"class":105},[91,39906,38128],{"class":250},[91,39908,39909],{"class":93,"line":2727},[91,39910,38133],{"class":250},[91,39912,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937],{"class":93,"line":2733},[91,39914,38178],{"class":250},[91,39916,30955],{"class":5339},[91,39918,296],{"class":153},[91,39920,327],{"class":105},[91,39922,627],{"class":250},[91,39924,31010],{"class":5339},[91,39926,296],{"class":153},[91,39928,327],{"class":105},[91,39930,627],{"class":250},[91,39932,30964],{"class":5339},[91,39934,296],{"class":153},[91,39936,440],{"class":105},[91,39938,257],{"class":250},[91,39940,39941],{"class":93,"line":2739},[91,39942,38207],{"class":250},[91,39944,39945],{"class":93,"line":2744},[91,39946,38508],{"class":308},[91,39948,39949,39951,39953,39955],{"class":93,"line":8071},[91,39950,30926],{"class":105},[91,39952,38515],{"class":250},[91,39954,296],{"class":153},[91,39956,38090],{"class":250},[91,39958,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991],{"class":93,"line":8095},[91,39960,38095],{"class":250},[91,39962,30937],{"class":5339},[91,39964,296],{"class":153},[91,39966,34951],{"class":105},[91,39968,627],{"class":250},[91,39970,30946],{"class":5339},[91,39972,296],{"class":153},[91,39974,38538],{"class":105},[91,39976,627],{"class":250},[91,39978,30955],{"class":5339},[91,39980,296],{"class":153},[91,39982,321],{"class":105},[91,39984,627],{"class":250},[91,39986,30964],{"class":5339},[91,39988,296],{"class":153},[91,39990,466],{"class":105},[91,39992,38128],{"class":250},[91,39994,39995],{"class":93,"line":8100},[91,39996,38133],{"class":250},[91,39998,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031],{"class":93,"line":8106},[91,40000,38095],{"class":250},[91,40002,30937],{"class":5339},[91,40004,296],{"class":153},[91,40006,38538],{"class":105},[91,40008,627],{"class":250},[91,40010,30946],{"class":5339},[91,40012,296],{"class":153},[91,40014,38538],{"class":105},[91,40016,627],{"class":250},[91,40018,30955],{"class":5339},[91,40020,296],{"class":153},[91,40022,321],{"class":105},[91,40024,627],{"class":250},[91,40026,30964],{"class":5339},[91,40028,296],{"class":153},[91,40030,466],{"class":105},[91,40032,38128],{"class":250},[91,40034,40035],{"class":93,"line":8133},[91,40036,38133],{"class":250},[91,40038,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071],{"class":93,"line":8138},[91,40040,38095],{"class":250},[91,40042,30937],{"class":5339},[91,40044,296],{"class":153},[91,40046,38538],{"class":105},[91,40048,627],{"class":250},[91,40050,30946],{"class":5339},[91,40052,296],{"class":153},[91,40054,38538],{"class":105},[91,40056,627],{"class":250},[91,40058,30955],{"class":5339},[91,40060,296],{"class":153},[91,40062,321],{"class":105},[91,40064,627],{"class":250},[91,40066,30964],{"class":5339},[91,40068,296],{"class":153},[91,40070,466],{"class":105},[91,40072,38128],{"class":250},[91,40074,40075],{"class":93,"line":8144},[91,40076,38133],{"class":250},[91,40078,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103],{"class":93,"line":8156},[91,40080,38178],{"class":250},[91,40082,30955],{"class":5339},[91,40084,296],{"class":153},[91,40086,327],{"class":105},[91,40088,627],{"class":250},[91,40090,31010],{"class":5339},[91,40092,296],{"class":153},[91,40094,327],{"class":105},[91,40096,627],{"class":250},[91,40098,30964],{"class":5339},[91,40100,296],{"class":153},[91,40102,440],{"class":105},[91,40104,257],{"class":250},[91,40106,40107],{"class":93,"line":8168},[91,40108,38207],{"class":250},[91,40110,40111],{"class":93,"line":8180},[91,40112,38677],{"class":308},[91,40114,40115,40117,40119,40121],{"class":93,"line":9839},[91,40116,30926],{"class":105},[91,40118,38684],{"class":250},[91,40120,296],{"class":153},[91,40122,38090],{"class":250},[91,40124,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157],{"class":93,"line":9864},[91,40126,38095],{"class":250},[91,40128,30937],{"class":5339},[91,40130,296],{"class":153},[91,40132,38538],{"class":105},[91,40134,627],{"class":250},[91,40136,30946],{"class":5339},[91,40138,296],{"class":153},[91,40140,38538],{"class":105},[91,40142,627],{"class":250},[91,40144,30955],{"class":5339},[91,40146,296],{"class":153},[91,40148,321],{"class":105},[91,40150,627],{"class":250},[91,40152,30964],{"class":5339},[91,40154,296],{"class":153},[91,40156,466],{"class":105},[91,40158,38128],{"class":250},[91,40160,40161],{"class":93,"line":9887},[91,40162,38133],{"class":250},[91,40164,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197],{"class":93,"line":9911},[91,40166,38095],{"class":250},[91,40168,30937],{"class":5339},[91,40170,296],{"class":153},[91,40172,38538],{"class":105},[91,40174,627],{"class":250},[91,40176,30946],{"class":5339},[91,40178,296],{"class":153},[91,40180,38538],{"class":105},[91,40182,627],{"class":250},[91,40184,30955],{"class":5339},[91,40186,296],{"class":153},[91,40188,321],{"class":105},[91,40190,627],{"class":250},[91,40192,30964],{"class":5339},[91,40194,296],{"class":153},[91,40196,466],{"class":105},[91,40198,38128],{"class":250},[91,40200,40201],{"class":93,"line":9916},[91,40202,38133],{"class":250},[91,40204,40205,40207,40209,40211,40213,40215,40217,40219,40221,40223,40225,40227,40229,40231,40233,40235,40237],{"class":93,"line":9921},[91,40206,38095],{"class":250},[91,40208,30937],{"class":5339},[91,40210,296],{"class":153},[91,40212,38538],{"class":105},[91,40214,627],{"class":250},[91,40216,30946],{"class":5339},[91,40218,296],{"class":153},[91,40220,38538],{"class":105},[91,40222,627],{"class":250},[91,40224,30955],{"class":5339},[91,40226,296],{"class":153},[91,40228,321],{"class":105},[91,40230,627],{"class":250},[91,40232,30964],{"class":5339},[91,40234,296],{"class":153},[91,40236,466],{"class":105},[91,40238,38128],{"class":250},[91,40240,40241],{"class":93,"line":9926},[91,40242,38133],{"class":250},[91,40244,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269],{"class":93,"line":9935},[91,40246,38178],{"class":250},[91,40248,30955],{"class":5339},[91,40250,296],{"class":153},[91,40252,327],{"class":105},[91,40254,627],{"class":250},[91,40256,31010],{"class":5339},[91,40258,296],{"class":153},[91,40260,327],{"class":105},[91,40262,627],{"class":250},[91,40264,30964],{"class":5339},[91,40266,296],{"class":153},[91,40268,440],{"class":105},[91,40270,257],{"class":250},[91,40272,40273],{"class":93,"line":9940},[91,40274,38207],{"class":250},[91,40276,40277],{"class":93,"line":9946},[91,40278,38845],{"class":308},[91,40280,40281,40283,40285,40287],{"class":93,"line":9967},[91,40282,30926],{"class":105},[91,40284,38852],{"class":250},[91,40286,296],{"class":153},[91,40288,38090],{"class":250},[91,40290,40291],{"class":93,"line":9973},[91,40292,38861],{"class":308},[91,40294,40295],{"class":93,"line":9987},[91,40296,38866],{"class":308},[91,40298,40299],{"class":93,"line":9993},[91,40300,38871],{"class":250},[91,40302,40303,40305,40307,40309,40311,40313,40315,40317,40319],{"class":93,"line":10020},[91,40304,38876],{"class":250},[91,40306,618],{"class":105},[91,40308,704],{"class":153},[91,40310,618],{"class":105},[91,40312,704],{"class":153},[91,40314,38538],{"class":105},[91,40316,627],{"class":250},[91,40318,34951],{"class":105},[91,40320,38128],{"class":250},[91,40322,40323],{"class":93,"line":10029},[91,40324,38133],{"class":250},[91,40326,40327,40329,40331,40333,40335],{"class":93,"line":10035},[91,40328,38876],{"class":250},[91,40330,34951],{"class":105},[91,40332,627],{"class":250},[91,40334,32151],{"class":105},[91,40336,38128],{"class":250},[91,40338,40339],{"class":93,"line":10043},[91,40340,38133],{"class":250},[91,40342,40343,40345,40347,40349,40351],{"class":93,"line":10048},[91,40344,38876],{"class":250},[91,40346,32151],{"class":105},[91,40348,627],{"class":250},[91,40350,695],{"class":105},[91,40352,257],{"class":250},[91,40354,40355],{"class":93,"line":16727},[91,40356,38207],{"class":250},[91,40358,40359],{"class":93,"line":16733},[91,40360,2523],{"emptyLinePlaceholder":175},[91,40362,40363],{"class":93,"line":16756},[91,40364,38937],{"class":308},[91,40366,40367],{"class":93,"line":16762},[91,40368,38942],{"class":308},[91,40370,40371,40373,40375,40377,40379],{"class":93,"line":16785},[91,40372,3526],{"class":153},[91,40374,38949],{"class":250},[91,40376,26165],{"class":153},[91,40378,38954],{"class":105},[91,40380,38957],{"class":250},[91,40382,40383],{"class":93,"line":16799},[91,40384,38962],{"class":308},[91,40386,40387,40389,40391],{"class":93,"line":16819},[91,40388,4765],{"class":153},[91,40390,38969],{"class":105},[91,40392,38972],{"class":250},[91,40394,40395],{"class":93,"line":16825},[91,40396,38977],{"class":308},[91,40398,40399,40401,40403,40405,40407],{"class":93,"line":16836},[91,40400,38982],{"class":250},[91,40402,38985],{"class":5339},[91,40404,296],{"class":153},[91,40406,38990],{"class":101},[91,40408,257],{"class":250},[91,40410,40411],{"class":93,"line":16859},[91,40412,38997],{"class":308},[91,40414,40415,40417,40419,40421,40423,40425],{"class":93,"line":16881},[91,40416,39002],{"class":153},[91,40418,39005],{"class":250},[91,40420,39008],{"class":153},[91,40422,39011],{"class":153},[91,40424,39014],{"class":105},[91,40426,3862],{"class":250},[91,40428,40429],{"class":93,"line":16886},[91,40430,39021],{"class":308},[91,40432,40433,40435,40437],{"class":93,"line":16892},[91,40434,39026],{"class":250},[91,40436,440],{"class":105},[91,40438,257],{"class":250},[91,40440,40441],{"class":93,"line":16906},[91,40442,39035],{"class":308},[91,40444,40445,40447,40449],{"class":93,"line":16919},[91,40446,39040],{"class":153},[91,40448,38969],{"class":105},[91,40450,39045],{"class":250},[91,40452,40453],{"class":93,"line":16924},[91,40454,39050],{"class":308},[91,40456,40457],{"class":93,"line":16938},[91,40458,39055],{"class":308},[91,40460,40461,40463,40465,40467,40469],{"class":93,"line":16943},[91,40462,39060],{"class":250},[91,40464,440],{"class":105},[91,40466,627],{"class":250},[91,40468,39067],{"class":105},[91,40470,257],{"class":250},[91,40472,40473],{"class":93,"line":16949},[91,40474,39074],{"class":308},[91,40476,40477,40479,40481,40483,40485,40487],{"class":93,"line":16954},[91,40478,39002],{"class":153},[91,40480,39005],{"class":250},[91,40482,39008],{"class":153},[91,40484,39011],{"class":153},[91,40486,39014],{"class":105},[91,40488,3862],{"class":250},[91,40490,40491,40493,40495],{"class":93,"line":16968},[91,40492,39026],{"class":250},[91,40494,440],{"class":105},[91,40496,257],{"class":250},[91,40498,40499],{"class":93,"line":16973},[91,40500,2523],{"emptyLinePlaceholder":175},[91,40502,40503],{"class":93,"line":16978},[91,40504,35246],{"class":308},[91,40506,40507,40509,40511],{"class":93,"line":16992},[91,40508,30882],{"class":153},[91,40510,31174],{"class":97},[91,40512,31177],{"class":250},[91,40514,40515,40517,40519,40521],{"class":93,"line":17004},[91,40516,31182],{"class":250},[91,40518,296],{"class":153},[91,40520,30904],{"class":105},[91,40522,39123],{"class":250},[91,40524,40525,40527,40529,40531],{"class":93,"line":17009},[91,40526,31182],{"class":250},[91,40528,296],{"class":153},[91,40530,30904],{"class":105},[91,40532,39134],{"class":250},[91,40534,40535,40537,40539,40541],{"class":93,"line":17022},[91,40536,31182],{"class":250},[91,40538,296],{"class":153},[91,40540,30904],{"class":105},[91,40542,39145],{"class":250},[91,40544,40545,40547,40549,40551],{"class":93,"line":17027},[91,40546,31182],{"class":250},[91,40548,296],{"class":153},[91,40550,30904],{"class":105},[91,40552,39156],{"class":250},[91,40554,40555,40557,40559,40561],{"class":93,"line":17032},[91,40556,31182],{"class":250},[91,40558,296],{"class":153},[91,40560,30904],{"class":105},[91,40562,39167],{"class":250},[91,40564,40565,40567,40569,40571],{"class":93,"line":17037},[91,40566,31182],{"class":250},[91,40568,296],{"class":153},[91,40570,30904],{"class":105},[91,40572,39178],{"class":250},[91,40574,40575,40577],{"class":93,"line":17050},[91,40576,14875],{"class":153},[91,40578,31290],{"class":250},[91,40580,40581],{"class":93,"line":17055},[91,40582,2523],{"emptyLinePlaceholder":175},[91,40584,40585],{"class":93,"line":32714},[91,40586,39193],{"class":308},[91,40588,40589,40591,40593,40595,40597],{"class":93,"line":32720},[91,40590,1655],{"class":153},[91,40592,31301],{"class":105},[91,40594,3072],{"class":153},[91,40596,39204],{"class":101},[91,40598,3862],{"class":250},[91,40600,40601,40603,40605,40607,40609,40611,40613,40615,40617],{"class":93,"line":32726},[91,40602,31318],{"class":250},[91,40604,296],{"class":153},[91,40606,30532],{"class":250},[91,40608,31325],{"class":101},[91,40610,1828],{"class":153},[91,40612,31330],{"class":250},[91,40614,1825],{"class":153},[91,40616,30557],{"class":101},[91,40618,257],{"class":250},[91,40620,40621,40623],{"class":93,"line":32732},[91,40622,31380],{"class":105},[91,40624,30566],{"class":250},[91,40626,40627,40629,40631],{"class":93,"line":32738},[91,40628,31370],{"class":250},[91,40630,296],{"class":153},[91,40632,39241],{"class":250},[91,40634,40635,40637,40639,40641,40643,40645,40647,40649],{"class":93,"line":32749},[91,40636,31380],{"class":105},[91,40638,31383],{"class":250},[91,40640,466],{"class":105},[91,40642,627],{"class":250},[91,40644,31582],{"class":105},[91,40646,627],{"class":250},[91,40648,31582],{"class":105},[91,40650,31396],{"class":250},[14,40652,40653],{"start":1304},[17,40654,40655],{},"测试代码",[82,40657,40659],{"className":30459,"code":40658,"language":30461,"meta":26,"style":26},"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",[88,40660,40661,40667,40677,40687,40691,40701,40712,40716,40720,40724,40732,40748,40758,40774,40784,40798,40802,40812,40822,40832,40838,40842,40846,40854,40858,40874,40882,40886,40890,40898,40906,40910,40914,40918,40922,40928,40932,40942,40950,40958,40962,40966,40970,40978,40982,40998,41002,41006,41010,41022,41026,41038,41042,41046,41058,41062,41072,41076,41080,41092,41096,41105,41109,41113,41121,41125,41133,41137,41141,41145,41149,41153,41169,41177,41181,41185,41233,41239,41243,41253,41261,41269,41273,41277,41281,41285,41293,41297,41313,41317,41325,41333],{"__ignoreMap":26},[91,40662,40663,40665],{"class":93,"line":94},[91,40664,30473],{"class":153},[91,40666,30476],{"class":250},[91,40668,40669,40671,40673,40675],{"class":93,"line":38},[91,40670,30473],{"class":153},[91,40672,31496],{"class":250},[91,40674,31464],{"class":153},[91,40676,31501],{"class":250},[91,40678,40679,40681,40683,40685],{"class":93,"line":1304},[91,40680,30818],{"class":153},[91,40682,31479],{"class":250},[91,40684,30473],{"class":153},[91,40686,31484],{"class":250},[91,40688,40689],{"class":93,"line":1319},[91,40690,34003],{"class":308},[91,40692,40693,40695,40697,40699],{"class":93,"line":1325},[91,40694,30818],{"class":153},[91,40696,31449],{"class":250},[91,40698,30473],{"class":153},[91,40700,31454],{"class":250},[91,40702,40703,40705,40707,40709],{"class":93,"line":1339},[91,40704,30818],{"class":153},[91,40706,31995],{"class":250},[91,40708,30473],{"class":153},[91,40710,40711],{"class":105}," VGG16\n",[91,40713,40714],{"class":93,"line":1345},[91,40715,2523],{"emptyLinePlaceholder":175},[91,40717,40718],{"class":93,"line":1436},[91,40719,2523],{"emptyLinePlaceholder":175},[91,40721,40722],{"class":93,"line":1442},[91,40723,34032],{"class":308},[91,40725,40726,40728,40730],{"class":93,"line":1454},[91,40727,32028],{"class":153},[91,40729,34039],{"class":97},[91,40731,32034],{"class":250},[91,40733,40734,40736,40738,40740,40742,40744,40746],{"class":93,"line":1736},[91,40735,34046],{"class":250},[91,40737,296],{"class":153},[91,40739,31536],{"class":250},[91,40741,31539],{"class":5339},[91,40743,296],{"class":153},[91,40745,31544],{"class":101},[91,40747,31547],{"class":250},[91,40749,40750,40752,40754,40756],{"class":93,"line":1741},[91,40751,34063],{"class":5339},[91,40753,296],{"class":153},[91,40755,34068],{"class":105},[91,40757,31547],{"class":250},[91,40759,40760,40762,40764,40766,40768,40770,40772],{"class":93,"line":1747},[91,40761,34075],{"class":5339},[91,40763,296],{"class":153},[91,40765,31574],{"class":250},[91,40767,31577],{"class":5339},[91,40769,296],{"class":153},[91,40771,31582],{"class":105},[91,40773,31585],{"class":250},[91,40775,40776,40778,40780,40782],{"class":93,"line":1752},[91,40777,34092],{"class":5339},[91,40779,296],{"class":153},[91,40781,31557],{"class":105},[91,40783,257],{"class":250},[91,40785,40786,40788,40790,40792,40794,40796],{"class":93,"line":1766},[91,40787,34103],{"class":250},[91,40789,296],{"class":153},[91,40791,31615],{"class":250},[91,40793,31618],{"class":5339},[91,40795,296],{"class":153},[91,40797,34114],{"class":250},[91,40799,40800],{"class":93,"line":1771},[91,40801,34119],{"class":308},[91,40803,40804,40806,40808,40810],{"class":93,"line":1777},[91,40805,34124],{"class":5339},[91,40807,296],{"class":153},[91,40809,466],{"class":105},[91,40811,31547],{"class":250},[91,40813,40814,40816,40818,40820],{"class":93,"line":1798},[91,40815,34135],{"class":5339},[91,40817,296],{"class":153},[91,40819,31557],{"class":105},[91,40821,31547],{"class":250},[91,40823,40824,40826,40828,40830],{"class":93,"line":1803},[91,40825,34146],{"class":5339},[91,40827,296],{"class":153},[91,40829,440],{"class":105},[91,40831,257],{"class":250},[91,40833,40834,40836],{"class":93,"line":1817},[91,40835,4213],{"class":153},[91,40837,34159],{"class":250},[91,40839,40840],{"class":93,"line":1822},[91,40841,2523],{"emptyLinePlaceholder":175},[91,40843,40844],{"class":93,"line":1851},[91,40845,34168],{"class":308},[91,40847,40848,40850,40852],{"class":93,"line":1856},[91,40849,32028],{"class":153},[91,40851,34175],{"class":97},[91,40853,34178],{"class":250},[91,40855,40856],{"class":93,"line":1873},[91,40857,34183],{"class":308},[91,40859,40860,40862,40864,40866,40868,40870,40872],{"class":93,"line":1878},[91,40861,31318],{"class":250},[91,40863,296],{"class":153},[91,40865,31325],{"class":101},[91,40867,1828],{"class":153},[91,40869,31330],{"class":250},[91,40871,1825],{"class":153},[91,40873,34200],{"class":101},[91,40875,40876,40878,40880],{"class":93,"line":1883},[91,40877,31370],{"class":250},[91,40879,296],{"class":153},[91,40881,32370],{"class":250},[91,40883,40884],{"class":93,"line":1888},[91,40885,2523],{"emptyLinePlaceholder":175},[91,40887,40888],{"class":93,"line":1902},[91,40889,34217],{"class":308},[91,40891,40892,40894,40896],{"class":93,"line":1907},[91,40893,34222],{"class":250},[91,40895,296],{"class":153},[91,40897,32423],{"class":105},[91,40899,40900,40902,40904],{"class":93,"line":2700},[91,40901,34231],{"class":250},[91,40903,296],{"class":153},[91,40905,3208],{"class":105},[91,40907,40908],{"class":93,"line":2714},[91,40909,2523],{"emptyLinePlaceholder":175},[91,40911,40912],{"class":93,"line":2722},[91,40913,34244],{"class":308},[91,40915,40916],{"class":93,"line":2727},[91,40917,34249],{"class":308},[91,40919,40920],{"class":93,"line":2733},[91,40921,34254],{"class":308},[91,40923,40924,40926],{"class":93,"line":2739},[91,40925,34259],{"class":153},[91,40927,32965],{"class":250},[91,40929,40930],{"class":93,"line":2744},[91,40931,34266],{"class":308},[91,40933,40934,40936,40938,40940],{"class":93,"line":8071},[91,40935,3526],{"class":153},[91,40937,34273],{"class":250},[91,40939,26165],{"class":153},[91,40941,34278],{"class":250},[91,40943,40944,40946,40948],{"class":93,"line":8095},[91,40945,34283],{"class":250},[91,40947,296],{"class":153},[91,40949,34288],{"class":250},[91,40951,40952,40954,40956],{"class":93,"line":8100},[91,40953,34293],{"class":250},[91,40955,296],{"class":153},[91,40957,34298],{"class":250},[91,40959,40960],{"class":93,"line":8106},[91,40961,34303],{"class":308},[91,40963,40964],{"class":93,"line":8133},[91,40965,32956],{"class":250},[91,40967,40968],{"class":93,"line":8138},[91,40969,34312],{"class":308},[91,40971,40972,40974,40976],{"class":93,"line":8144},[91,40973,32741],{"class":250},[91,40975,296],{"class":153},[91,40977,34321],{"class":250},[91,40979,40980],{"class":93,"line":8156},[91,40981,34326],{"class":308},[91,40983,40984,40986,40988,40990,40992,40994,40996],{"class":93,"line":8168},[91,40985,32758],{"class":250},[91,40987,296],{"class":153},[91,40989,32763],{"class":250},[91,40991,32766],{"class":5339},[91,40993,296],{"class":153},[91,40995,466],{"class":105},[91,40997,257],{"class":250},[91,40999,41000],{"class":93,"line":8180},[91,41001,34347],{"class":308},[91,41003,41004],{"class":93,"line":9839},[91,41005,34352],{"class":308},[91,41007,41008],{"class":93,"line":9864},[91,41009,34357],{"class":308},[91,41011,41012,41014,41016,41018,41020],{"class":93,"line":9887},[91,41013,34362],{"class":250},[91,41015,9600],{"class":153},[91,41017,32868],{"class":250},[91,41019,3072],{"class":153},[91,41021,34371],{"class":250},[91,41023,41024],{"class":93,"line":9911},[91,41025,34376],{"class":308},[91,41027,41028,41030,41032,41034,41036],{"class":93,"line":9916},[91,41029,34381],{"class":250},[91,41031,9600],{"class":153},[91,41033,34386],{"class":250},[91,41035,440],{"class":105},[91,41037,257],{"class":250},[91,41039,41040],{"class":93,"line":9921},[91,41041,2523],{"emptyLinePlaceholder":175},[91,41043,41044],{"class":93,"line":9926},[91,41045,34399],{"class":308},[91,41047,41048,41050,41052,41054,41056],{"class":93,"line":9935},[91,41049,34404],{"class":250},[91,41051,296],{"class":153},[91,41053,34409],{"class":250},[91,41055,833],{"class":153},[91,41057,34414],{"class":250},[91,41059,41060],{"class":93,"line":9940},[91,41061,34419],{"class":308},[91,41063,41064,41066,41068,41070],{"class":93,"line":9946},[91,41065,32532],{"class":105},[91,41067,251],{"class":250},[91,41069,34428],{"class":101},[91,41071,34431],{"class":250},[91,41073,41074],{"class":93,"line":9967},[91,41075,2523],{"emptyLinePlaceholder":175},[91,41077,41078],{"class":93,"line":9973},[91,41079,34440],{"class":308},[91,41081,41082,41084,41086,41088,41090],{"class":93,"line":9987},[91,41083,1655],{"class":153},[91,41085,31301],{"class":105},[91,41087,3072],{"class":153},[91,41089,31306],{"class":101},[91,41091,3862],{"class":250},[91,41093,41094],{"class":93,"line":9993},[91,41095,34457],{"class":308},[91,41097,41098,41100,41102],{"class":93,"line":10020},[91,41099,31370],{"class":250},[91,41101,296],{"class":153},[91,41103,41104],{"class":250},"VGG16()\n",[91,41106,41107],{"class":93,"line":10029},[91,41108,34470],{"class":308},[91,41110,41111],{"class":93,"line":10035},[91,41112,34475],{"class":308},[91,41114,41115,41117,41119],{"class":93,"line":10043},[91,41116,34480],{"class":250},[91,41118,34483],{"class":101},[91,41120,30578],{"class":250},[91,41122,41123],{"class":93,"line":10048},[91,41124,34490],{"class":308},[91,41126,41127,41129,41131],{"class":93,"line":16727},[91,41128,34103],{"class":250},[91,41130,296],{"class":153},[91,41132,34499],{"class":250},[91,41134,41135],{"class":93,"line":16733},[91,41136,34504],{"class":308},[91,41138,41139],{"class":93,"line":16756},[91,41140,34509],{"class":250},[91,41142,41143],{"class":93,"line":16762},[91,41144,2523],{"emptyLinePlaceholder":175},[91,41146,41147],{"class":93,"line":16785},[91,41148,34518],{"class":308},[91,41150,41151],{"class":93,"line":16799},[91,41152,34523],{"class":308},[91,41154,41155,41157,41159,41161,41163,41165,41167],{"class":93,"line":16819},[91,41156,31318],{"class":250},[91,41158,296],{"class":153},[91,41160,31325],{"class":101},[91,41162,1828],{"class":153},[91,41164,31330],{"class":250},[91,41166,1825],{"class":153},[91,41168,34200],{"class":101},[91,41170,41171,41173,41175],{"class":93,"line":16825},[91,41172,31370],{"class":250},[91,41174,296],{"class":153},[91,41176,32370],{"class":250},[91,41178,41179],{"class":93,"line":16836},[91,41180,34552],{"class":308},[91,41182,41183],{"class":93,"line":16859},[91,41184,34557],{"class":308},[91,41186,41187,41189,41191,41193,41195,41197,41199,41201,41203,41205,41207,41209,41211,41213,41215,41217,41219,41221,41223,41225,41227,41229,41231],{"class":93,"line":16881},[91,41188,34562],{"class":250},[91,41190,296],{"class":153},[91,41192,1139],{"class":250},[91,41194,34569],{"class":101},[91,41196,627],{"class":250},[91,41198,34574],{"class":101},[91,41200,627],{"class":250},[91,41202,34579],{"class":101},[91,41204,627],{"class":250},[91,41206,34584],{"class":101},[91,41208,627],{"class":250},[91,41210,34589],{"class":101},[91,41212,627],{"class":250},[91,41214,34594],{"class":101},[91,41216,627],{"class":250},[91,41218,34599],{"class":101},[91,41220,627],{"class":250},[91,41222,34604],{"class":101},[91,41224,627],{"class":250},[91,41226,34609],{"class":101},[91,41228,627],{"class":250},[91,41230,34614],{"class":101},[91,41232,33327],{"class":250},[91,41234,41235,41237],{"class":93,"line":16886},[91,41236,34259],{"class":153},[91,41238,32965],{"class":250},[91,41240,41241],{"class":93,"line":16892},[91,41242,34627],{"class":308},[91,41244,41245,41247,41249,41251],{"class":93,"line":16906},[91,41246,3526],{"class":153},[91,41248,34634],{"class":250},[91,41250,26165],{"class":153},[91,41252,34278],{"class":250},[91,41254,41255,41257,41259],{"class":93,"line":16919},[91,41256,32691],{"class":250},[91,41258,296],{"class":153},[91,41260,32696],{"class":250},[91,41262,41263,41265,41267],{"class":93,"line":16924},[91,41264,32706],{"class":250},[91,41266,296],{"class":153},[91,41268,32711],{"class":250},[91,41270,41271],{"class":93,"line":16938},[91,41272,2523],{"emptyLinePlaceholder":175},[91,41274,41275],{"class":93,"line":16943},[91,41276,34663],{"class":308},[91,41278,41279],{"class":93,"line":16949},[91,41280,32956],{"class":250},[91,41282,41283],{"class":93,"line":16954},[91,41284,34672],{"class":308},[91,41286,41287,41289,41291],{"class":93,"line":16968},[91,41288,32741],{"class":250},[91,41290,296],{"class":153},[91,41292,32746],{"class":250},[91,41294,41295],{"class":93,"line":16973},[91,41296,34685],{"class":308},[91,41298,41299,41301,41303,41305,41307,41309,41311],{"class":93,"line":16978},[91,41300,32758],{"class":250},[91,41302,296],{"class":153},[91,41304,32763],{"class":250},[91,41306,32766],{"class":5339},[91,41308,296],{"class":153},[91,41310,466],{"class":105},[91,41312,257],{"class":250},[91,41314,41315],{"class":93,"line":16992},[91,41316,34706],{"class":308},[91,41318,41319,41321,41323],{"class":93,"line":17004},[91,41320,34711],{"class":250},[91,41322,296],{"class":153},[91,41324,34716],{"class":250},[91,41326,41327,41329,41331],{"class":93,"line":17009},[91,41328,34721],{"class":250},[91,41330,296],{"class":153},[91,41332,34726],{"class":250},[91,41334,41335,41337,41339,41341,41343,41345,41347,41349],{"class":93,"line":17022},[91,41336,34731],{"class":105},[91,41338,251],{"class":250},[91,41340,34736],{"class":101},[91,41342,34739],{"class":250},[91,41344,34742],{"class":101},[91,41346,627],{"class":250},[91,41348,34747],{"class":101},[91,41350,34750],{"class":250},[217,41352,41354],{"id":41353},"_23googlenet","2.3.GoogLeNet",[22121,41356,41358],{"id":41357},"_231原理","2.3.1.原理",[14,41360,41361],{},[17,41362,41363],{},"网络结构",[21,41365,41366],{},[24,41367],{"alt":26,"src":41368},"\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",[21,41370,41371],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[21,41373,41374],{},[24,41375],{"alt":26,"src":41376},"\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",[21,41378,41379],{},[24,41380],{"alt":26,"src":41381},"\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",[21,41383,41384],{},[24,41385],{"alt":26,"src":41386},"\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",[14,41388,41389],{"start":38},[17,41390,41391],{},"1x1卷积的优点",[21,41393,41394],{},[24,41395],{"alt":26,"src":41396},"\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",[14,41398,41399],{"start":1304},[17,41400,41401],{},"全局平均池化层优点",[21,41403,41404],{},[24,41405],{"alt":26,"src":41406},"\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",[21,41408,41409],{},[24,41410],{"alt":26,"src":41411},"\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",[14,41413,41414],{"start":1319},[17,41415,41416],{},"参数详细描述",[21,41418,41419],{},[24,41420],{"alt":26,"src":41421},"\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",[21,41423,41424],{},[24,41425],{"alt":26,"src":41426},"\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",[21,41428,41429],{},[24,41430],{"alt":26,"src":41431},"\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",[21,41433,41434],{},[24,41435],{"alt":26,"src":41436},"\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",[21,41438,41439],{},[24,41440],{"alt":26,"src":41441},"\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",[21,41443,41444],{},[24,41445],{"alt":26,"src":41446},"\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",[21,41448,41449],{},[24,41450],{"alt":26,"src":41451},"\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",[21,41453,41454],{},[24,41455],{"alt":26,"src":41456},"\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",[21,41458,41459],{},[24,41460],{"alt":26,"src":41461},"\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",[21,41463,41464],{},[24,41465],{"alt":26,"src":41466},"\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",[21,41468,41469],{},[24,41470],{"alt":26,"src":41471},"\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",[21,41473,41474],{},[24,41475],{"alt":26,"src":41476},"\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",[21,41478,41479],{},[24,41480],{"alt":26,"src":41481},"\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",[21,41483,41484],{},[24,41485],{"alt":26,"src":41486},"\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",[21,41488,41489],{},[24,41490],{"alt":26,"src":41491},"\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",[21,41493,41494],{},[24,41495],{"alt":26,"src":41496},"\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",[21,41498,41499],{},[24,41500],{"alt":26,"src":41501},"\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",[21,41503,41504],{},[24,41505],{"alt":26,"src":41506},"\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",[21,41508,41509],{},[24,41510],{"alt":26,"src":41511},"\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",[21,41513,41514],{},[24,41515],{"alt":26,"src":41516},"\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",[21,41518,41519],{},[24,41520],{"alt":26,"src":41521},"\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",[22121,41523,41525],{"id":41524},"_232代码实现","2.3.2.代码实现",[14,41527,41528],{},[17,41529,30792],{},[21,41531,41532],{},"根据原理一步一步搭建即可",[82,41534,41536],{"className":30459,"code":41535,"language":30461,"meta":26,"style":26},"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",[88,41537,41538,41544,41554,41564,41568,41585,41594,41609,41619,41624,41657,41662,41699,41746,41751,41787,41834,41839,41844,41879,41911,41915,41923,41939,41963,41988,42009,42014,42029,42033,42037,42042,42059,42064,42073,42088,42099,42143,42147,42175,42179,42190,42218,42222,42259,42263,42291,42295,42306,42342,42374,42402,42406,42417,42451,42483,42515,42548,42582,42610,42614,42625,42658,42690,42704,42708,42721,42725,42730,42742,42750,42772,42777,42782,42787,42792,42797,42802,42816,42824,42833,42846,42861,42870,42874,42882,42893,42904,42915,42926,42937,42943,42947,42952,42964,42984,42993],{"__ignoreMap":26},[91,41539,41540,41542],{"class":93,"line":94},[91,41541,30473],{"class":153},[91,41543,30476],{"class":250},[91,41545,41546,41548,41550,41552],{"class":93,"line":38},[91,41547,30818],{"class":153},[91,41549,30821],{"class":250},[91,41551,30473],{"class":153},[91,41553,30826],{"class":250},[91,41555,41556,41558,41560,41562],{"class":93,"line":1304},[91,41557,30818],{"class":153},[91,41559,30838],{"class":250},[91,41561,30473],{"class":153},[91,41563,30843],{"class":250},[91,41565,41566],{"class":93,"line":1319},[91,41567,2523],{"emptyLinePlaceholder":175},[91,41569,41570,41572,41575,41577,41579,41581,41583],{"class":93,"line":1325},[91,41571,14817],{"class":153},[91,41573,41574],{"class":97}," Inception",[91,41576,251],{"class":250},[91,41578,30859],{"class":97},[91,41580,807],{"class":250},[91,41582,30864],{"class":97},[91,41584,30867],{"class":250},[91,41586,41587,41589,41591],{"class":93,"line":1339},[91,41588,30882],{"class":153},[91,41590,30885],{"class":105},[91,41592,41593],{"class":250},"(self,in_channels,c1,c2,c3,c4):\n",[91,41595,41596,41598,41601,41603,41605,41607],{"class":93,"line":1345},[91,41597,30898],{"class":105},[91,41599,41600],{"class":250},"(Inception,",[91,41602,30904],{"class":105},[91,41604,30907],{"class":250},[91,41606,30910],{"class":105},[91,41608,2099],{"class":250},[91,41610,41611,41613,41615,41617],{"class":93,"line":1436},[91,41612,30926],{"class":105},[91,41614,34852],{"class":250},[91,41616,296],{"class":153},[91,41618,34857],{"class":250},[91,41620,41621],{"class":93,"line":1442},[91,41622,41623],{"class":308},"        # 路线1：定义1*1卷积\n",[91,41625,41626,41628,41631,41633,41635,41637,41639,41642,41644,41646,41649,41651,41653,41655],{"class":93,"line":1454},[91,41627,30926],{"class":105},[91,41629,41630],{"class":250},".p1_1",[91,41632,296],{"class":153},[91,41634,30934],{"class":250},[91,41636,30937],{"class":5339},[91,41638,296],{"class":153},[91,41640,41641],{"class":250},"in_channels,",[91,41643,30946],{"class":5339},[91,41645,296],{"class":153},[91,41647,41648],{"class":250},"c1,",[91,41650,30955],{"class":5339},[91,41652,296],{"class":153},[91,41654,466],{"class":105},[91,41656,257],{"class":250},[91,41658,41659],{"class":93,"line":1736},[91,41660,41661],{"class":308},"        # 路线2：定义1*1卷积和3*3\n",[91,41663,41664,41666,41669,41671,41673,41675,41677,41679,41681,41683,41686,41688,41691,41693,41695,41697],{"class":93,"line":1741},[91,41665,30926],{"class":105},[91,41667,41668],{"class":250},".p2_1",[91,41670,296],{"class":153},[91,41672,30934],{"class":250},[91,41674,30937],{"class":5339},[91,41676,296],{"class":153},[91,41678,41641],{"class":250},[91,41680,30946],{"class":5339},[91,41682,296],{"class":153},[91,41684,41685],{"class":250},"c2[",[91,41687,440],{"class":105},[91,41689,41690],{"class":250},"],",[91,41692,30955],{"class":5339},[91,41694,296],{"class":153},[91,41696,466],{"class":105},[91,41698,257],{"class":250},[91,41700,41701,41703,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744],{"class":93,"line":1747},[91,41702,30926],{"class":105},[91,41704,41705],{"class":250},".p2_2",[91,41707,296],{"class":153},[91,41709,30934],{"class":250},[91,41711,30937],{"class":5339},[91,41713,296],{"class":153},[91,41715,41685],{"class":250},[91,41717,440],{"class":105},[91,41719,41690],{"class":250},[91,41721,30946],{"class":5339},[91,41723,296],{"class":153},[91,41725,41685],{"class":250},[91,41727,466],{"class":105},[91,41729,41690],{"class":250},[91,41731,30955],{"class":5339},[91,41733,296],{"class":153},[91,41735,321],{"class":105},[91,41737,627],{"class":250},[91,41739,30964],{"class":5339},[91,41741,296],{"class":153},[91,41743,466],{"class":105},[91,41745,257],{"class":250},[91,41747,41748],{"class":93,"line":1752},[91,41749,41750],{"class":308},"        # 路线3：定义1*1卷积和5*5\n",[91,41752,41753,41755,41758,41760,41762,41764,41766,41768,41770,41772,41775,41777,41779,41781,41783,41785],{"class":93,"line":1766},[91,41754,30926],{"class":105},[91,41756,41757],{"class":250},".p3_1",[91,41759,296],{"class":153},[91,41761,30934],{"class":250},[91,41763,30937],{"class":5339},[91,41765,296],{"class":153},[91,41767,41641],{"class":250},[91,41769,30946],{"class":5339},[91,41771,296],{"class":153},[91,41773,41774],{"class":250},"c3[",[91,41776,440],{"class":105},[91,41778,41690],{"class":250},[91,41780,30955],{"class":5339},[91,41782,296],{"class":153},[91,41784,466],{"class":105},[91,41786,257],{"class":250},[91,41788,41789,41791,41794,41796,41798,41800,41802,41804,41806,41808,41810,41812,41814,41816,41818,41820,41822,41824,41826,41828,41830,41832],{"class":93,"line":1771},[91,41790,30926],{"class":105},[91,41792,41793],{"class":250},".p3_2",[91,41795,296],{"class":153},[91,41797,30934],{"class":250},[91,41799,30937],{"class":5339},[91,41801,296],{"class":153},[91,41803,41774],{"class":250},[91,41805,440],{"class":105},[91,41807,41690],{"class":250},[91,41809,30946],{"class":5339},[91,41811,296],{"class":153},[91,41813,41774],{"class":250},[91,41815,466],{"class":105},[91,41817,41690],{"class":250},[91,41819,30955],{"class":5339},[91,41821,296],{"class":153},[91,41823,568],{"class":105},[91,41825,627],{"class":250},[91,41827,30964],{"class":5339},[91,41829,296],{"class":153},[91,41831,327],{"class":105},[91,41833,257],{"class":250},[91,41835,41836],{"class":93,"line":1777},[91,41837,41838],{"class":308},"        # 路线4：定义3*3最大池化和1*1卷积\n",[91,41840,41841],{"class":93,"line":1798},[91,41842,41843],{"class":308},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[91,41845,41846,41848,41851,41853,41855,41857,41859,41861,41863,41865,41867,41869,41871,41873,41875,41877],{"class":93,"line":1803},[91,41847,30926],{"class":105},[91,41849,41850],{"class":250},".p4_1",[91,41852,296],{"class":153},[91,41854,34910],{"class":250},[91,41856,30955],{"class":5339},[91,41858,296],{"class":153},[91,41860,321],{"class":105},[91,41862,627],{"class":250},[91,41864,31010],{"class":5339},[91,41866,296],{"class":153},[91,41868,466],{"class":105},[91,41870,627],{"class":250},[91,41872,30964],{"class":5339},[91,41874,296],{"class":153},[91,41876,466],{"class":105},[91,41878,257],{"class":250},[91,41880,41881,41883,41886,41888,41890,41892,41894,41896,41898,41900,41903,41905,41907,41909],{"class":93,"line":1817},[91,41882,30926],{"class":105},[91,41884,41885],{"class":250},".p4_2",[91,41887,296],{"class":153},[91,41889,30934],{"class":250},[91,41891,30937],{"class":5339},[91,41893,296],{"class":153},[91,41895,41641],{"class":250},[91,41897,30946],{"class":5339},[91,41899,296],{"class":153},[91,41901,41902],{"class":250},"c4,",[91,41904,30955],{"class":5339},[91,41906,296],{"class":153},[91,41908,466],{"class":105},[91,41910,257],{"class":250},[91,41912,41913],{"class":93,"line":1822},[91,41914,2523],{"emptyLinePlaceholder":175},[91,41916,41917,41919,41921],{"class":93,"line":1851},[91,41918,30882],{"class":153},[91,41920,31174],{"class":97},[91,41922,31177],{"class":250},[91,41924,41925,41928,41930,41932,41934,41936],{"class":93,"line":1856},[91,41926,41927],{"class":250},"        p1",[91,41929,296],{"class":153},[91,41931,30904],{"class":105},[91,41933,35265],{"class":250},[91,41935,30904],{"class":105},[91,41937,41938],{"class":250},".p1_1(x))\n",[91,41940,41941,41943,41945,41947,41949,41951,41954,41956,41958,41960],{"class":93,"line":1873},[91,41942,7208],{"class":250},[91,41944,296],{"class":153},[91,41946,30904],{"class":105},[91,41948,35265],{"class":250},[91,41950,30904],{"class":105},[91,41952,41953],{"class":250},".p2_2(",[91,41955,30904],{"class":105},[91,41957,35265],{"class":250},[91,41959,30904],{"class":105},[91,41961,41962],{"class":250},".p2_1(x))))\n",[91,41964,41965,41968,41970,41972,41974,41976,41979,41981,41983,41985],{"class":93,"line":1878},[91,41966,41967],{"class":250},"        p3",[91,41969,296],{"class":153},[91,41971,30904],{"class":105},[91,41973,35265],{"class":250},[91,41975,30904],{"class":105},[91,41977,41978],{"class":250},".p3_2(",[91,41980,30904],{"class":105},[91,41982,35265],{"class":250},[91,41984,30904],{"class":105},[91,41986,41987],{"class":250},".p3_1(x))))\n",[91,41989,41990,41993,41995,41997,41999,42001,42004,42006],{"class":93,"line":1883},[91,41991,41992],{"class":250},"        p4",[91,41994,296],{"class":153},[91,41996,30904],{"class":105},[91,41998,35265],{"class":250},[91,42000,30904],{"class":105},[91,42002,42003],{"class":250},".p4_2(",[91,42005,30904],{"class":105},[91,42007,42008],{"class":250},".p4_1(x)))\n",[91,42010,42011],{"class":93,"line":1888},[91,42012,42013],{"class":308},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[91,42015,42016,42018,42021,42023,42025,42027],{"class":93,"line":1902},[91,42017,14875],{"class":153},[91,42019,42020],{"class":250}," torch.cat((p1,p2,p3,p4),",[91,42022,32766],{"class":5339},[91,42024,296],{"class":153},[91,42026,466],{"class":105},[91,42028,257],{"class":250},[91,42030,42031],{"class":93,"line":1907},[91,42032,2523],{"emptyLinePlaceholder":175},[91,42034,42035],{"class":93,"line":2700},[91,42036,2523],{"emptyLinePlaceholder":175},[91,42038,42039],{"class":93,"line":2714},[91,42040,42041],{"class":308},"# 搭建GoogLeNet网络\n",[91,42043,42044,42046,42049,42051,42053,42055,42057],{"class":93,"line":2722},[91,42045,14817],{"class":153},[91,42047,42048],{"class":97}," GoogLeNet",[91,42050,251],{"class":250},[91,42052,30859],{"class":97},[91,42054,807],{"class":250},[91,42056,30864],{"class":97},[91,42058,30867],{"class":250},[91,42060,42061],{"class":93,"line":2727},[91,42062,42063],{"class":308},"    # 必须把Inception导入到里边\n",[91,42065,42066,42068,42070],{"class":93,"line":2733},[91,42067,30882],{"class":153},[91,42069,30885],{"class":105},[91,42071,42072],{"class":250},"(self,Inception):\n",[91,42074,42075,42077,42080,42082,42084,42086],{"class":93,"line":2739},[91,42076,30898],{"class":105},[91,42078,42079],{"class":250},"(GoogLeNet,",[91,42081,30904],{"class":105},[91,42083,30907],{"class":250},[91,42085,30910],{"class":105},[91,42087,2099],{"class":250},[91,42089,42090,42092,42095,42097],{"class":93,"line":2744},[91,42091,30926],{"class":105},[91,42093,42094],{"class":250},".b1",[91,42096,296],{"class":153},[91,42098,38090],{"class":250},[91,42100,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129,42131,42133,42135,42137,42139,42141],{"class":93,"line":8071},[91,42102,38095],{"class":250},[91,42104,30937],{"class":5339},[91,42106,296],{"class":153},[91,42108,466],{"class":105},[91,42110,627],{"class":250},[91,42112,30946],{"class":5339},[91,42114,296],{"class":153},[91,42116,452],{"class":105},[91,42118,627],{"class":250},[91,42120,30955],{"class":5339},[91,42122,296],{"class":153},[91,42124,618],{"class":105},[91,42126,627],{"class":250},[91,42128,31010],{"class":5339},[91,42130,296],{"class":153},[91,42132,327],{"class":105},[91,42134,627],{"class":250},[91,42136,30964],{"class":5339},[91,42138,296],{"class":153},[91,42140,321],{"class":105},[91,42142,38128],{"class":250},[91,42144,42145],{"class":93,"line":8095},[91,42146,38133],{"class":250},[91,42148,42149,42151,42153,42155,42157,42159,42161,42163,42165,42167,42169,42171,42173],{"class":93,"line":8100},[91,42150,38178],{"class":250},[91,42152,30955],{"class":5339},[91,42154,296],{"class":153},[91,42156,321],{"class":105},[91,42158,627],{"class":250},[91,42160,31010],{"class":5339},[91,42162,296],{"class":153},[91,42164,327],{"class":105},[91,42166,627],{"class":250},[91,42168,30964],{"class":5339},[91,42170,296],{"class":153},[91,42172,466],{"class":105},[91,42174,257],{"class":250},[91,42176,42177],{"class":93,"line":8106},[91,42178,38207],{"class":250},[91,42180,42181,42183,42186,42188],{"class":93,"line":8133},[91,42182,30926],{"class":105},[91,42184,42185],{"class":250},".b2",[91,42187,296],{"class":153},[91,42189,38090],{"class":250},[91,42191,42192,42194,42196,42198,42200,42202,42204,42206,42208,42210,42212,42214,42216],{"class":93,"line":8138},[91,42193,38095],{"class":250},[91,42195,30937],{"class":5339},[91,42197,296],{"class":153},[91,42199,452],{"class":105},[91,42201,627],{"class":250},[91,42203,30946],{"class":5339},[91,42205,296],{"class":153},[91,42207,452],{"class":105},[91,42209,627],{"class":250},[91,42211,30955],{"class":5339},[91,42213,296],{"class":153},[91,42215,466],{"class":105},[91,42217,38128],{"class":250},[91,42219,42220],{"class":93,"line":8144},[91,42221,38133],{"class":250},[91,42223,42224,42226,42228,42230,42232,42234,42236,42238,42241,42243,42245,42247,42249,42251,42253,42255,42257],{"class":93,"line":8156},[91,42225,38095],{"class":250},[91,42227,30937],{"class":5339},[91,42229,296],{"class":153},[91,42231,452],{"class":105},[91,42233,627],{"class":250},[91,42235,30946],{"class":5339},[91,42237,296],{"class":153},[91,42239,42240],{"class":105},"192",[91,42242,627],{"class":250},[91,42244,30955],{"class":5339},[91,42246,296],{"class":153},[91,42248,321],{"class":105},[91,42250,627],{"class":250},[91,42252,30964],{"class":5339},[91,42254,296],{"class":153},[91,42256,466],{"class":105},[91,42258,38128],{"class":250},[91,42260,42261],{"class":93,"line":8168},[91,42262,38133],{"class":250},[91,42264,42265,42267,42269,42271,42273,42275,42277,42279,42281,42283,42285,42287,42289],{"class":93,"line":8180},[91,42266,38178],{"class":250},[91,42268,30955],{"class":5339},[91,42270,296],{"class":153},[91,42272,321],{"class":105},[91,42274,627],{"class":250},[91,42276,31010],{"class":5339},[91,42278,296],{"class":153},[91,42280,327],{"class":105},[91,42282,627],{"class":250},[91,42284,30964],{"class":5339},[91,42286,296],{"class":153},[91,42288,466],{"class":105},[91,42290,257],{"class":250},[91,42292,42293],{"class":93,"line":9839},[91,42294,38207],{"class":250},[91,42296,42297,42299,42302,42304],{"class":93,"line":9864},[91,42298,30926],{"class":105},[91,42300,42301],{"class":250},".b3",[91,42303,296],{"class":153},[91,42305,38090],{"class":250},[91,42307,42308,42311,42313,42315,42317,42320,42322,42324,42326,42329,42331,42333,42335,42338,42340],{"class":93,"line":9887},[91,42309,42310],{"class":250},"            Inception(",[91,42312,42240],{"class":105},[91,42314,627],{"class":250},[91,42316,452],{"class":105},[91,42318,42319],{"class":250},",(",[91,42321,458],{"class":105},[91,42323,627],{"class":250},[91,42325,32151],{"class":105},[91,42327,42328],{"class":250},"),(",[91,42330,850],{"class":105},[91,42332,627],{"class":250},[91,42334,446],{"class":105},[91,42336,42337],{"class":250},"),",[91,42339,446],{"class":105},[91,42341,38128],{"class":250},[91,42343,42344,42346,42348,42350,42352,42354,42356,42358,42360,42362,42364,42366,42368,42370,42372],{"class":93,"line":9911},[91,42345,42310],{"class":250},[91,42347,34951],{"class":105},[91,42349,627],{"class":250},[91,42351,32151],{"class":105},[91,42353,42319],{"class":250},[91,42355,32151],{"class":105},[91,42357,627],{"class":250},[91,42359,42240],{"class":105},[91,42361,42328],{"class":250},[91,42363,446],{"class":105},[91,42365,627],{"class":250},[91,42367,458],{"class":105},[91,42369,42337],{"class":250},[91,42371,452],{"class":105},[91,42373,38128],{"class":250},[91,42375,42376,42378,42380,42382,42384,42386,42388,42390,42392,42394,42396,42398,42400],{"class":93,"line":9916},[91,42377,38178],{"class":250},[91,42379,30955],{"class":5339},[91,42381,296],{"class":153},[91,42383,321],{"class":105},[91,42385,627],{"class":250},[91,42387,31010],{"class":5339},[91,42389,296],{"class":153},[91,42391,327],{"class":105},[91,42393,627],{"class":250},[91,42395,30964],{"class":5339},[91,42397,296],{"class":153},[91,42399,466],{"class":105},[91,42401,257],{"class":250},[91,42403,42404],{"class":93,"line":9921},[91,42405,38207],{"class":250},[91,42407,42408,42410,42413,42415],{"class":93,"line":9926},[91,42409,30926],{"class":105},[91,42411,42412],{"class":250},".b4",[91,42414,296],{"class":153},[91,42416,38090],{"class":250},[91,42418,42419,42421,42424,42426,42428,42430,42432,42434,42437,42439,42441,42443,42445,42447,42449],{"class":93,"line":9935},[91,42420,42310],{"class":250},[91,42422,42423],{"class":105},"480",[91,42425,627],{"class":250},[91,42427,42240],{"class":105},[91,42429,42319],{"class":250},[91,42431,458],{"class":105},[91,42433,627],{"class":250},[91,42435,42436],{"class":105},"208",[91,42438,42328],{"class":250},[91,42440,850],{"class":105},[91,42442,627],{"class":250},[91,42444,856],{"class":105},[91,42446,42337],{"class":250},[91,42448,452],{"class":105},[91,42450,38128],{"class":250},[91,42452,42453,42455,42457,42459,42461,42463,42465,42467,42469,42471,42473,42475,42477,42479,42481],{"class":93,"line":9940},[91,42454,42310],{"class":250},[91,42456,38538],{"class":105},[91,42458,627],{"class":250},[91,42460,21171],{"class":105},[91,42462,42319],{"class":250},[91,42464,867],{"class":105},[91,42466,627],{"class":250},[91,42468,31582],{"class":105},[91,42470,42328],{"class":250},[91,42472,1049],{"class":105},[91,42474,627],{"class":250},[91,42476,452],{"class":105},[91,42478,42337],{"class":250},[91,42480,452],{"class":105},[91,42482,38128],{"class":250},[91,42484,42485,42487,42489,42491,42493,42495,42497,42499,42501,42503,42505,42507,42509,42511,42513],{"class":93,"line":9946},[91,42486,42310],{"class":250},[91,42488,38538],{"class":105},[91,42490,627],{"class":250},[91,42492,32151],{"class":105},[91,42494,42319],{"class":250},[91,42496,32151],{"class":105},[91,42498,627],{"class":250},[91,42500,34951],{"class":105},[91,42502,42328],{"class":250},[91,42504,1049],{"class":105},[91,42506,627],{"class":250},[91,42508,452],{"class":105},[91,42510,42337],{"class":250},[91,42512,452],{"class":105},[91,42514,38128],{"class":250},[91,42516,42517,42519,42521,42523,42525,42527,42529,42531,42534,42536,42538,42540,42542,42544,42546],{"class":93,"line":9967},[91,42518,42310],{"class":250},[91,42520,38538],{"class":105},[91,42522,627],{"class":250},[91,42524,867],{"class":105},[91,42526,42319],{"class":250},[91,42528,32151],{"class":105},[91,42530,627],{"class":250},[91,42532,42533],{"class":105},"288",[91,42535,42328],{"class":250},[91,42537,446],{"class":105},[91,42539,627],{"class":250},[91,42541,452],{"class":105},[91,42543,42337],{"class":250},[91,42545,452],{"class":105},[91,42547,38128],{"class":250},[91,42549,42550,42552,42555,42557,42559,42561,42563,42565,42568,42570,42572,42574,42576,42578,42580],{"class":93,"line":9973},[91,42551,42310],{"class":250},[91,42553,42554],{"class":105},"528",[91,42556,627],{"class":250},[91,42558,34951],{"class":105},[91,42560,42319],{"class":250},[91,42562,21171],{"class":105},[91,42564,627],{"class":250},[91,42566,42567],{"class":105},"320",[91,42569,42328],{"class":250},[91,42571,446],{"class":105},[91,42573,627],{"class":250},[91,42575,32151],{"class":105},[91,42577,42337],{"class":250},[91,42579,32151],{"class":105},[91,42581,38128],{"class":250},[91,42583,42584,42586,42588,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608],{"class":93,"line":9987},[91,42585,38178],{"class":250},[91,42587,30955],{"class":5339},[91,42589,296],{"class":153},[91,42591,321],{"class":105},[91,42593,627],{"class":250},[91,42595,31010],{"class":5339},[91,42597,296],{"class":153},[91,42599,327],{"class":105},[91,42601,627],{"class":250},[91,42603,30964],{"class":5339},[91,42605,296],{"class":153},[91,42607,466],{"class":105},[91,42609,257],{"class":250},[91,42611,42612],{"class":93,"line":9993},[91,42613,38207],{"class":250},[91,42615,42616,42618,42621,42623],{"class":93,"line":10020},[91,42617,30926],{"class":105},[91,42619,42620],{"class":250},".b5",[91,42622,296],{"class":153},[91,42624,38090],{"class":250},[91,42626,42627,42629,42632,42634,42636,42638,42640,42642,42644,42646,42648,42650,42652,42654,42656],{"class":93,"line":10029},[91,42628,42310],{"class":250},[91,42630,42631],{"class":105},"832",[91,42633,627],{"class":250},[91,42635,34951],{"class":105},[91,42637,42319],{"class":250},[91,42639,21171],{"class":105},[91,42641,627],{"class":250},[91,42643,42567],{"class":105},[91,42645,42328],{"class":250},[91,42647,446],{"class":105},[91,42649,627],{"class":250},[91,42651,32151],{"class":105},[91,42653,42337],{"class":250},[91,42655,32151],{"class":105},[91,42657,38128],{"class":250},[91,42659,42660,42662,42664,42666,42668,42670,42672,42674,42676,42678,42680,42682,42684,42686,42688],{"class":93,"line":10035},[91,42661,42310],{"class":250},[91,42663,42631],{"class":105},[91,42665,627],{"class":250},[91,42667,35021],{"class":105},[91,42669,42319],{"class":250},[91,42671,42240],{"class":105},[91,42673,627],{"class":250},[91,42675,35021],{"class":105},[91,42677,42328],{"class":250},[91,42679,856],{"class":105},[91,42681,627],{"class":250},[91,42683,32151],{"class":105},[91,42685,42337],{"class":250},[91,42687,32151],{"class":105},[91,42689,38128],{"class":250},[91,42691,42692,42695,42697,42699,42701],{"class":93,"line":10043},[91,42693,42694],{"class":250},"            nn.AdaptiveAvgPool2d((",[91,42696,466],{"class":105},[91,42698,627],{"class":250},[91,42700,466],{"class":105},[91,42702,42703],{"class":250},")),\n",[91,42705,42706],{"class":93,"line":10048},[91,42707,38871],{"class":250},[91,42709,42710,42712,42715,42717,42719],{"class":93,"line":16727},[91,42711,38876],{"class":250},[91,42713,42714],{"class":105},"1024",[91,42716,627],{"class":250},[91,42718,695],{"class":105},[91,42720,257],{"class":250},[91,42722,42723],{"class":93,"line":16733},[91,42724,38207],{"class":250},[91,42726,42727],{"class":93,"line":16756},[91,42728,42729],{"class":308},"        # 对模型参数初始化\n",[91,42731,42732,42734,42736,42738,42740],{"class":93,"line":16762},[91,42733,3526],{"class":153},[91,42735,38949],{"class":250},[91,42737,26165],{"class":153},[91,42739,38954],{"class":105},[91,42741,38957],{"class":250},[91,42743,42744,42746,42748],{"class":93,"line":16785},[91,42745,4765],{"class":153},[91,42747,38969],{"class":105},[91,42749,38972],{"class":250},[91,42751,42752,42754,42757,42759,42762,42764,42766,42768,42770],{"class":93,"line":16799},[91,42753,38982],{"class":250},[91,42755,42756],{"class":5339},"mode",[91,42758,296],{"class":153},[91,42760,42761],{"class":101},"'fan_out'",[91,42763,627],{"class":250},[91,42765,38985],{"class":5339},[91,42767,296],{"class":153},[91,42769,38990],{"class":101},[91,42771,257],{"class":250},[91,42773,42774],{"class":93,"line":16819},[91,42775,42776],{"class":308},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[91,42778,42779],{"class":93,"line":16825},[91,42780,42781],{"class":308},"                # ② mode = 'fan_out'决定使用的fan值：\n",[91,42783,42784],{"class":93,"line":16836},[91,42785,42786],{"class":308},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[91,42788,42789],{"class":93,"line":16859},[91,42790,42791],{"class":308},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[91,42793,42794],{"class":93,"line":16881},[91,42795,42796],{"class":308},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[91,42798,42799],{"class":93,"line":16886},[91,42800,42801],{"class":308},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[91,42803,42804,42806,42808,42810,42812,42814],{"class":93,"line":16892},[91,42805,39002],{"class":153},[91,42807,39005],{"class":250},[91,42809,39008],{"class":153},[91,42811,39011],{"class":153},[91,42813,39014],{"class":105},[91,42815,3862],{"class":250},[91,42817,42818,42820,42822],{"class":93,"line":16906},[91,42819,39026],{"class":250},[91,42821,440],{"class":105},[91,42823,257],{"class":250},[91,42825,42826,42829,42831],{"class":93,"line":16919},[91,42827,42828],{"class":153},"                elif",[91,42830,38969],{"class":105},[91,42832,39045],{"class":250},[91,42834,42835,42838,42840,42842,42844],{"class":93,"line":16924},[91,42836,42837],{"class":250},"                    nn.init.normal_(m.weight,",[91,42839,440],{"class":105},[91,42841,627],{"class":250},[91,42843,39067],{"class":105},[91,42845,257],{"class":250},[91,42847,42848,42851,42853,42855,42857,42859],{"class":93,"line":16938},[91,42849,42850],{"class":153},"                    if",[91,42852,39005],{"class":250},[91,42854,39008],{"class":153},[91,42856,39011],{"class":153},[91,42858,39014],{"class":105},[91,42860,3862],{"class":250},[91,42862,42863,42866,42868],{"class":93,"line":16943},[91,42864,42865],{"class":250},"                        nn.init.constant_(m.bias,",[91,42867,440],{"class":105},[91,42869,257],{"class":250},[91,42871,42872],{"class":93,"line":16949},[91,42873,35246],{"class":308},[91,42875,42876,42878,42880],{"class":93,"line":16954},[91,42877,30882],{"class":153},[91,42879,31174],{"class":97},[91,42881,31177],{"class":250},[91,42883,42884,42886,42888,42890],{"class":93,"line":16968},[91,42885,31182],{"class":250},[91,42887,296],{"class":153},[91,42889,30904],{"class":105},[91,42891,42892],{"class":250},".b1(x)\n",[91,42894,42895,42897,42899,42901],{"class":93,"line":16973},[91,42896,31182],{"class":250},[91,42898,296],{"class":153},[91,42900,30904],{"class":105},[91,42902,42903],{"class":250},".b2(x)\n",[91,42905,42906,42908,42910,42912],{"class":93,"line":16978},[91,42907,31182],{"class":250},[91,42909,296],{"class":153},[91,42911,30904],{"class":105},[91,42913,42914],{"class":250},".b3(x)\n",[91,42916,42917,42919,42921,42923],{"class":93,"line":16992},[91,42918,31182],{"class":250},[91,42920,296],{"class":153},[91,42922,30904],{"class":105},[91,42924,42925],{"class":250},".b4(x)\n",[91,42927,42928,42930,42932,42934],{"class":93,"line":17004},[91,42929,31182],{"class":250},[91,42931,296],{"class":153},[91,42933,30904],{"class":105},[91,42935,42936],{"class":250},".b5(x)\n",[91,42938,42939,42941],{"class":93,"line":17009},[91,42940,14875],{"class":153},[91,42942,31290],{"class":250},[91,42944,42945],{"class":93,"line":17022},[91,42946,2523],{"emptyLinePlaceholder":175},[91,42948,42949],{"class":93,"line":17027},[91,42950,42951],{"class":308},"# 模型展示\n",[91,42953,42954,42956,42958,42960,42962],{"class":93,"line":17032},[91,42955,1655],{"class":153},[91,42957,31301],{"class":105},[91,42959,3072],{"class":153},[91,42961,31306],{"class":101},[91,42963,3862],{"class":250},[91,42965,42966,42968,42970,42972,42974,42976,42978,42980,42982],{"class":93,"line":17037},[91,42967,31318],{"class":250},[91,42969,296],{"class":153},[91,42971,30532],{"class":250},[91,42973,31325],{"class":101},[91,42975,1828],{"class":153},[91,42977,31330],{"class":250},[91,42979,1825],{"class":153},[91,42981,30557],{"class":101},[91,42983,257],{"class":250},[91,42985,42986,42988,42990],{"class":93,"line":17050},[91,42987,31370],{"class":250},[91,42989,296],{"class":153},[91,42991,42992],{"class":250},"GoogLeNet(Inception).to(device)\n",[91,42994,42995,42997,42999,43001,43003,43005,43007,43009],{"class":93,"line":17055},[91,42996,31380],{"class":105},[91,42998,31383],{"class":250},[91,43000,466],{"class":105},[91,43002,627],{"class":250},[91,43004,31582],{"class":105},[91,43006,627],{"class":250},[91,43008,31582],{"class":105},[91,43010,31396],{"class":250},[14,43012,43013],{"start":38},[17,43014,39264],{},[82,43016,43018],{"className":30459,"code":43017,"language":30461,"meta":26,"style":26},"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",[88,43019,43020,43026,43032,43042,43048,43058,43068,43078,43088,43098,43102,43113,43123,43127,43131,43135,43143,43155,43165,43181,43191,43223,43237,43247,43257,43261,43271,43285,43295,43305,43315,43321,43325,43329,43333,43337,43341,43349,43369,43373,43377,43381,43385,43389,43405,43409,43413,43421,43425,43429,43437,43441,43445,43449,43457,43461,43465,43469,43473,43481,43485,43493,43497,43505,43509,43517,43521,43529,43533,43537,43545,43549,43553,43557,43569,43593,43607,43611,43615,43619,43627,43631,43639,43643,43651,43655,43663,43667,43675,43679,43687,43691,43703,43707,43715,43719,43727,43731,43735,43739,43743,43751,43755,43771,43775,43783,43787,43791,43795,43799,43803,43807,43811,43827,43831,43843,43847,43859,43863,43875,43879,43887,43891,43899,43903,43907,43911,43917,43921,43929,43933,43949,43953,43961,43965,43981,43993,43997,44009,44013,44017,44025,44029,44033,44041,44045,44053,44057,44065,44069,44073,44115,44157,44161,44165,44181,44185,44201,44205,44209,44217,44221,44225,44237,44275,44279,44283,44291,44295,44309,44319,44325,44331,44337,44343,44347,44351,44357,44361,44365,44373,44377,44395,44399,44403,44407,44423,44427,44431,44435,44439,44443,44463,44483,44487,44491,44495,44503,44511,44515,44531,44551,44571,44575,44579,44587,44595,44599,44603,44607,44619,44623,44633,44641,44658],{"__ignoreMap":26},[91,43021,43022,43024],{"class":93,"line":94},[91,43023,30473],{"class":153},[91,43025,31903],{"class":250},[91,43027,43028,43030],{"class":93,"line":38},[91,43029,30473],{"class":153},[91,43031,31910],{"class":250},[91,43033,43034,43036,43038,43040],{"class":93,"line":1304},[91,43035,30473],{"class":153},[91,43037,31921],{"class":250},[91,43039,31464],{"class":153},[91,43041,31926],{"class":250},[91,43043,43044,43046],{"class":93,"line":1319},[91,43045,30473],{"class":153},[91,43047,30476],{"class":250},[91,43049,43050,43052,43054,43056],{"class":93,"line":1325},[91,43051,30818],{"class":153},[91,43053,31496],{"class":250},[91,43055,30473],{"class":153},[91,43057,31943],{"class":250},[91,43059,43060,43062,43064,43066],{"class":93,"line":1339},[91,43061,30818],{"class":153},[91,43063,31449],{"class":250},[91,43065,30473],{"class":153},[91,43067,31454],{"class":250},[91,43069,43070,43072,43074,43076],{"class":93,"line":1345},[91,43071,30818],{"class":153},[91,43073,31479],{"class":250},[91,43075,30473],{"class":153},[91,43077,31484],{"class":250},[91,43079,43080,43082,43084,43086],{"class":93,"line":1436},[91,43081,30473],{"class":153},[91,43083,31496],{"class":250},[91,43085,31464],{"class":153},[91,43087,31501],{"class":250},[91,43089,43090,43092,43094,43096],{"class":93,"line":1442},[91,43091,30473],{"class":153},[91,43093,31513],{"class":250},[91,43095,31464],{"class":153},[91,43097,31518],{"class":250},[91,43099,43100],{"class":93,"line":1454},[91,43101,31988],{"class":308},[91,43103,43104,43106,43108,43110],{"class":93,"line":1736},[91,43105,30818],{"class":153},[91,43107,31995],{"class":250},[91,43109,30473],{"class":153},[91,43111,43112],{"class":250}," GoogLeNet, Inception\n",[91,43114,43115,43117,43119,43121],{"class":93,"line":1741},[91,43116,30818],{"class":153},[91,43118,30821],{"class":250},[91,43120,30473],{"class":153},[91,43122,30826],{"class":250},[91,43124,43125],{"class":93,"line":1747},[91,43126,2523],{"emptyLinePlaceholder":175},[91,43128,43129],{"class":93,"line":1752},[91,43130,2523],{"emptyLinePlaceholder":175},[91,43132,43133],{"class":93,"line":1766},[91,43134,32023],{"class":308},[91,43136,43137,43139,43141],{"class":93,"line":1771},[91,43138,32028],{"class":153},[91,43140,32031],{"class":97},[91,43142,32034],{"class":250},[91,43144,43145,43147,43149,43151,43153],{"class":93,"line":1777},[91,43146,32039],{"class":250},[91,43148,296],{"class":153},[91,43150,31536],{"class":250},[91,43152,31544],{"class":101},[91,43154,31547],{"class":250},[91,43156,43157,43159,43161,43163],{"class":93,"line":1798},[91,43158,32052],{"class":5339},[91,43160,296],{"class":153},[91,43162,31557],{"class":105},[91,43164,31547],{"class":250},[91,43166,43167,43169,43171,43173,43175,43177,43179],{"class":93,"line":1803},[91,43168,32063],{"class":5339},[91,43170,296],{"class":153},[91,43172,31574],{"class":250},[91,43174,31577],{"class":5339},[91,43176,296],{"class":153},[91,43178,35530],{"class":105},[91,43180,31585],{"class":250},[91,43182,43183,43185,43187,43189],{"class":93,"line":1817},[91,43184,32080],{"class":5339},[91,43186,296],{"class":153},[91,43188,31557],{"class":105},[91,43190,257],{"class":250},[91,43192,43193,43195,43197,43199,43201,43203,43205,43207,43209,43211,43213,43215,43217,43219,43221],{"class":93,"line":1822},[91,43194,32091],{"class":250},[91,43196,296],{"class":153},[91,43198,32096],{"class":250},[91,43200,32099],{"class":105},[91,43202,251],{"class":250},[91,43204,32104],{"class":105},[91,43206,704],{"class":153},[91,43208,7481],{"class":105},[91,43210,32111],{"class":250},[91,43212,32099],{"class":105},[91,43214,251],{"class":250},[91,43216,32118],{"class":105},[91,43218,704],{"class":153},[91,43220,7481],{"class":105},[91,43222,32125],{"class":250},[91,43224,43225,43227,43229,43231,43233,43235],{"class":93,"line":1851},[91,43226,32130],{"class":250},[91,43228,296],{"class":153},[91,43230,32135],{"class":250},[91,43232,31618],{"class":5339},[91,43234,296],{"class":153},[91,43236,31623],{"class":250},[91,43238,43239,43241,43243,43245],{"class":93,"line":1856},[91,43240,32146],{"class":5339},[91,43242,296],{"class":153},[91,43244,446],{"class":105},[91,43246,31547],{"class":250},[91,43248,43249,43251,43253,43255],{"class":93,"line":1873},[91,43250,32158],{"class":5339},[91,43252,296],{"class":153},[91,43254,31557],{"class":105},[91,43256,31547],{"class":250},[91,43258,43259],{"class":93,"line":1878},[91,43260,32169],{"class":308},[91,43262,43263,43265,43267,43269],{"class":93,"line":1883},[91,43264,32174],{"class":5339},[91,43266,296],{"class":153},[91,43268,644],{"class":105},[91,43270,257],{"class":250},[91,43272,43273,43275,43277,43279,43281,43283],{"class":93,"line":1888},[91,43274,32185],{"class":250},[91,43276,296],{"class":153},[91,43278,31615],{"class":250},[91,43280,31618],{"class":5339},[91,43282,296],{"class":153},[91,43284,32196],{"class":250},[91,43286,43287,43289,43291,43293],{"class":93,"line":1902},[91,43288,32201],{"class":5339},[91,43290,296],{"class":153},[91,43292,446],{"class":105},[91,43294,31547],{"class":250},[91,43296,43297,43299,43301,43303],{"class":93,"line":1907},[91,43298,32212],{"class":5339},[91,43300,296],{"class":153},[91,43302,31557],{"class":105},[91,43304,31547],{"class":250},[91,43306,43307,43309,43311,43313],{"class":93,"line":2700},[91,43308,32223],{"class":5339},[91,43310,296],{"class":153},[91,43312,644],{"class":105},[91,43314,257],{"class":250},[91,43316,43317,43319],{"class":93,"line":2714},[91,43318,4213],{"class":153},[91,43320,32236],{"class":250},[91,43322,43323],{"class":93,"line":2722},[91,43324,2523],{"emptyLinePlaceholder":175},[91,43326,43327],{"class":93,"line":2727},[91,43328,32245],{"class":308},[91,43330,43331],{"class":93,"line":2733},[91,43332,32250],{"class":308},[91,43334,43335],{"class":93,"line":2739},[91,43336,2523],{"emptyLinePlaceholder":175},[91,43338,43339],{"class":93,"line":2744},[91,43340,32259],{"class":308},[91,43342,43343,43345,43347],{"class":93,"line":8071},[91,43344,32028],{"class":153},[91,43346,32266],{"class":97},[91,43348,32269],{"class":250},[91,43350,43351,43353,43355,43357,43359,43361,43363,43365,43367],{"class":93,"line":8095},[91,43352,31318],{"class":250},[91,43354,296],{"class":153},[91,43356,30532],{"class":250},[91,43358,31325],{"class":101},[91,43360,1828],{"class":153},[91,43362,31330],{"class":250},[91,43364,1825],{"class":153},[91,43366,32288],{"class":101},[91,43368,257],{"class":250},[91,43370,43371],{"class":93,"line":8100},[91,43372,2523],{"emptyLinePlaceholder":175},[91,43374,43375],{"class":93,"line":8106},[91,43376,2523],{"emptyLinePlaceholder":175},[91,43378,43379],{"class":93,"line":8133},[91,43380,32303],{"class":308},[91,43382,43383],{"class":93,"line":8138},[91,43384,32308],{"class":308},[91,43386,43387],{"class":93,"line":8144},[91,43388,32313],{"class":308},[91,43390,43391,43393,43395,43397,43399,43401,43403],{"class":93,"line":8156},[91,43392,32318],{"class":250},[91,43394,296],{"class":153},[91,43396,32323],{"class":250},[91,43398,32326],{"class":5339},[91,43400,296],{"class":153},[91,43402,32331],{"class":105},[91,43404,257],{"class":250},[91,43406,43407],{"class":93,"line":8168},[91,43408,2523],{"emptyLinePlaceholder":175},[91,43410,43411],{"class":93,"line":8180},[91,43412,32342],{"class":308},[91,43414,43415,43417,43419],{"class":93,"line":9839},[91,43416,32347],{"class":250},[91,43418,296],{"class":153},[91,43420,32352],{"class":250},[91,43422,43423],{"class":93,"line":9864},[91,43424,2523],{"emptyLinePlaceholder":175},[91,43426,43427],{"class":93,"line":9887},[91,43428,32361],{"class":308},[91,43430,43431,43433,43435],{"class":93,"line":9911},[91,43432,31370],{"class":250},[91,43434,296],{"class":153},[91,43436,32370],{"class":250},[91,43438,43439],{"class":93,"line":9916},[91,43440,32375],{"class":308},[91,43442,43443],{"class":93,"line":9921},[91,43444,32380],{"class":308},[91,43446,43447],{"class":93,"line":9926},[91,43448,32385],{"class":308},[91,43450,43451,43453,43455],{"class":93,"line":9935},[91,43452,32390],{"class":250},[91,43454,296],{"class":153},[91,43456,32395],{"class":250},[91,43458,43459],{"class":93,"line":9940},[91,43460,2523],{"emptyLinePlaceholder":175},[91,43462,43463],{"class":93,"line":9946},[91,43464,2523],{"emptyLinePlaceholder":175},[91,43466,43467],{"class":93,"line":9967},[91,43468,32408],{"class":308},[91,43470,43471],{"class":93,"line":9973},[91,43472,32413],{"class":308},[91,43474,43475,43477,43479],{"class":93,"line":9987},[91,43476,32418],{"class":250},[91,43478,296],{"class":153},[91,43480,32423],{"class":105},[91,43482,43483],{"class":93,"line":9993},[91,43484,32428],{"class":308},[91,43486,43487,43489,43491],{"class":93,"line":10020},[91,43488,32433],{"class":250},[91,43490,296],{"class":153},[91,43492,32438],{"class":250},[91,43494,43495],{"class":93,"line":10029},[91,43496,32443],{"class":308},[91,43498,43499,43501,43503],{"class":93,"line":10035},[91,43500,32448],{"class":250},[91,43502,296],{"class":153},[91,43504,32438],{"class":250},[91,43506,43507],{"class":93,"line":10043},[91,43508,32457],{"class":308},[91,43510,43511,43513,43515],{"class":93,"line":10048},[91,43512,32462],{"class":250},[91,43514,296],{"class":153},[91,43516,32438],{"class":250},[91,43518,43519],{"class":93,"line":16727},[91,43520,32471],{"class":308},[91,43522,43523,43525,43527],{"class":93,"line":16733},[91,43524,32476],{"class":250},[91,43526,296],{"class":153},[91,43528,32438],{"class":250},[91,43530,43531],{"class":93,"line":16756},[91,43532,2523],{"emptyLinePlaceholder":175},[91,43534,43535],{"class":93,"line":16762},[91,43536,32489],{"class":308},[91,43538,43539,43541,43543],{"class":93,"line":16785},[91,43540,32494],{"class":250},[91,43542,296],{"class":153},[91,43544,32499],{"class":250},[91,43546,43547],{"class":93,"line":16799},[91,43548,2523],{"emptyLinePlaceholder":175},[91,43550,43551],{"class":93,"line":16819},[91,43552,2523],{"emptyLinePlaceholder":175},[91,43554,43555],{"class":93,"line":16825},[91,43556,32512],{"class":308},[91,43558,43559,43561,43563,43565,43567],{"class":93,"line":16836},[91,43560,3324],{"class":153},[91,43562,32519],{"class":250},[91,43564,26165],{"class":153},[91,43566,32524],{"class":105},[91,43568,32527],{"class":250},[91,43570,43571,43573,43575,43577,43579,43581,43583,43585,43587,43589,43591],{"class":93,"line":16859},[91,43572,32532],{"class":105},[91,43574,251],{"class":250},[91,43576,32537],{"class":101},[91,43578,32540],{"class":105},[91,43580,833],{"class":101},[91,43582,32540],{"class":105},[91,43584,500],{"class":101},[91,43586,32549],{"class":250},[91,43588,781],{"class":153},[91,43590,466],{"class":105},[91,43592,30578],{"class":250},[91,43594,43595,43597,43599,43601,43603,43605],{"class":93,"line":16881},[91,43596,32532],{"class":105},[91,43598,251],{"class":250},[91,43600,32564],{"class":101},[91,43602,704],{"class":153},[91,43604,695],{"class":105},[91,43606,257],{"class":250},[91,43608,43609],{"class":93,"line":16886},[91,43610,2523],{"emptyLinePlaceholder":175},[91,43612,43613],{"class":93,"line":16892},[91,43614,32579],{"class":308},[91,43616,43617],{"class":93,"line":16906},[91,43618,32584],{"class":308},[91,43620,43621,43623,43625],{"class":93,"line":16919},[91,43622,32589],{"class":250},[91,43624,296],{"class":153},[91,43626,32423],{"class":105},[91,43628,43629],{"class":93,"line":16924},[91,43630,32598],{"class":308},[91,43632,43633,43635,43637],{"class":93,"line":16938},[91,43634,32603],{"class":250},[91,43636,296],{"class":153},[91,43638,3208],{"class":105},[91,43640,43641],{"class":93,"line":16943},[91,43642,32612],{"class":308},[91,43644,43645,43647,43649],{"class":93,"line":16949},[91,43646,32617],{"class":250},[91,43648,296],{"class":153},[91,43650,32423],{"class":105},[91,43652,43653],{"class":93,"line":16954},[91,43654,32626],{"class":308},[91,43656,43657,43659,43661],{"class":93,"line":16968},[91,43658,32631],{"class":250},[91,43660,296],{"class":153},[91,43662,3208],{"class":105},[91,43664,43665],{"class":93,"line":16973},[91,43666,32640],{"class":308},[91,43668,43669,43671,43673],{"class":93,"line":16978},[91,43670,32645],{"class":250},[91,43672,296],{"class":153},[91,43674,3208],{"class":105},[91,43676,43677],{"class":93,"line":16992},[91,43678,32654],{"class":308},[91,43680,43681,43683,43685],{"class":93,"line":17004},[91,43682,32659],{"class":250},[91,43684,296],{"class":153},[91,43686,3208],{"class":105},[91,43688,43689],{"class":93,"line":17009},[91,43690,32668],{"class":308},[91,43692,43693,43695,43697,43699,43701],{"class":93,"line":17022},[91,43694,3526],{"class":153},[91,43696,31682],{"class":250},[91,43698,26165],{"class":153},[91,43700,31687],{"class":105},[91,43702,32681],{"class":250},[91,43704,43705],{"class":93,"line":17027},[91,43706,32686],{"class":308},[91,43708,43709,43711,43713],{"class":93,"line":17032},[91,43710,32691],{"class":250},[91,43712,296],{"class":153},[91,43714,32696],{"class":250},[91,43716,43717],{"class":93,"line":17037},[91,43718,32701],{"class":308},[91,43720,43721,43723,43725],{"class":93,"line":17050},[91,43722,32706],{"class":250},[91,43724,296],{"class":153},[91,43726,32711],{"class":250},[91,43728,43729],{"class":93,"line":17055},[91,43730,32717],{"class":308},[91,43732,43733],{"class":93,"line":32714},[91,43734,32723],{"class":250},[91,43736,43737],{"class":93,"line":32720},[91,43738,32729],{"class":308},[91,43740,43741],{"class":93,"line":32726},[91,43742,32735],{"class":308},[91,43744,43745,43747,43749],{"class":93,"line":32732},[91,43746,32741],{"class":250},[91,43748,296],{"class":153},[91,43750,32746],{"class":250},[91,43752,43753],{"class":93,"line":32738},[91,43754,32752],{"class":308},[91,43756,43757,43759,43761,43763,43765,43767,43769],{"class":93,"line":32749},[91,43758,32758],{"class":250},[91,43760,296],{"class":153},[91,43762,32763],{"class":250},[91,43764,32766],{"class":5339},[91,43766,296],{"class":153},[91,43768,466],{"class":105},[91,43770,257],{"class":250},[91,43772,43773],{"class":93,"line":32755},[91,43774,32778],{"class":308},[91,43776,43777,43779,43781],{"class":93,"line":32775},[91,43778,32784],{"class":250},[91,43780,296],{"class":153},[91,43782,32789],{"class":250},[91,43784,43785],{"class":93,"line":32781},[91,43786,32795],{"class":308},[91,43788,43789],{"class":93,"line":32792},[91,43790,32801],{"class":250},[91,43792,43793],{"class":93,"line":32798},[91,43794,32807],{"class":308},[91,43796,43797],{"class":93,"line":32804},[91,43798,32813],{"class":250},[91,43800,43801],{"class":93,"line":32810},[91,43802,32819],{"class":308},[91,43804,43805],{"class":93,"line":32816},[91,43806,32825],{"class":250},[91,43808,43809],{"class":93,"line":32822},[91,43810,32831],{"class":308},[91,43812,43813,43815,43817,43819,43821,43823,43825],{"class":93,"line":32828},[91,43814,32837],{"class":250},[91,43816,9600],{"class":153},[91,43818,32842],{"class":250},[91,43820,704],{"class":153},[91,43822,32847],{"class":250},[91,43824,440],{"class":105},[91,43826,257],{"class":250},[91,43828,43829],{"class":93,"line":32834},[91,43830,32857],{"class":308},[91,43832,43833,43835,43837,43839,43841],{"class":93,"line":32854},[91,43834,32863],{"class":250},[91,43836,9600],{"class":153},[91,43838,32868],{"class":250},[91,43840,3072],{"class":153},[91,43842,32873],{"class":250},[91,43844,43845],{"class":93,"line":32860},[91,43846,32879],{"class":308},[91,43848,43849,43851,43853,43855,43857],{"class":93,"line":32876},[91,43850,32885],{"class":250},[91,43852,9600],{"class":153},[91,43854,32847],{"class":250},[91,43856,440],{"class":105},[91,43858,257],{"class":250},[91,43860,43861],{"class":93,"line":32882},[91,43862,32899],{"class":308},[91,43864,43865,43867,43869,43871,43873],{"class":93,"line":32896},[91,43866,3526],{"class":153},[91,43868,32907],{"class":250},[91,43870,26165],{"class":153},[91,43872,31687],{"class":105},[91,43874,32914],{"class":250},[91,43876,43877],{"class":93,"line":32902},[91,43878,32920],{"class":308},[91,43880,43881,43883,43885],{"class":93,"line":32917},[91,43882,32691],{"class":250},[91,43884,296],{"class":153},[91,43886,32696],{"class":250},[91,43888,43889],{"class":93,"line":32923},[91,43890,32935],{"class":308},[91,43892,43893,43895,43897],{"class":93,"line":32932},[91,43894,32706],{"class":250},[91,43896,296],{"class":153},[91,43898,32711],{"class":250},[91,43900,43901],{"class":93,"line":32938},[91,43902,32950],{"class":308},[91,43904,43905],{"class":93,"line":32947},[91,43906,32956],{"class":250},[91,43908,43909],{"class":93,"line":32953},[91,43910,36437],{"class":308},[91,43912,43913,43915],{"class":93,"line":32959},[91,43914,32962],{"class":153},[91,43916,32965],{"class":250},[91,43918,43919],{"class":93,"line":32968},[91,43920,32971],{"class":308},[91,43922,43923,43925,43927],{"class":93,"line":32974},[91,43924,36452],{"class":250},[91,43926,296],{"class":153},[91,43928,32746],{"class":250},[91,43930,43931],{"class":93,"line":32985},[91,43932,32988],{"class":308},[91,43934,43935,43937,43939,43941,43943,43945,43947],{"class":93,"line":32991},[91,43936,36465],{"class":250},[91,43938,296],{"class":153},[91,43940,32763],{"class":250},[91,43942,32766],{"class":5339},[91,43944,296],{"class":153},[91,43946,466],{"class":105},[91,43948,257],{"class":250},[91,43950,43951],{"class":93,"line":33010},[91,43952,33013],{"class":308},[91,43954,43955,43957,43959],{"class":93,"line":33016},[91,43956,36486],{"class":250},[91,43958,296],{"class":153},[91,43960,32789],{"class":250},[91,43962,43963],{"class":93,"line":33027},[91,43964,33030],{"class":308},[91,43966,43967,43969,43971,43973,43975,43977,43979],{"class":93,"line":33033},[91,43968,36499],{"class":250},[91,43970,9600],{"class":153},[91,43972,36504],{"class":250},[91,43974,704],{"class":153},[91,43976,32847],{"class":250},[91,43978,440],{"class":105},[91,43980,257],{"class":250},[91,43982,43983,43985,43987,43989,43991],{"class":93,"line":33053},[91,43984,36517],{"class":250},[91,43986,9600],{"class":153},[91,43988,32868],{"class":250},[91,43990,3072],{"class":153},[91,43992,32873],{"class":250},[91,43994,43995],{"class":93,"line":33069},[91,43996,36530],{"class":308},[91,43998,43999,44001,44003,44005,44007],{"class":93,"line":33075},[91,44000,36535],{"class":250},[91,44002,9600],{"class":153},[91,44004,32847],{"class":250},[91,44006,440],{"class":105},[91,44008,257],{"class":250},[91,44010,44011],{"class":93,"line":33089},[91,44012,33092],{"class":308},[91,44014,44015],{"class":93,"line":33095},[91,44016,33098],{"class":308},[91,44018,44019,44021,44023],{"class":93,"line":33101},[91,44020,33104],{"class":250},[91,44022,833],{"class":153},[91,44024,33109],{"class":250},[91,44026,44027],{"class":93,"line":33112},[91,44028,33115],{"class":308},[91,44030,44031],{"class":93,"line":33118},[91,44032,33121],{"class":308},[91,44034,44035,44037,44039],{"class":93,"line":33124},[91,44036,33127],{"class":250},[91,44038,833],{"class":153},[91,44040,33109],{"class":250},[91,44042,44043],{"class":93,"line":33134},[91,44044,33137],{"class":308},[91,44046,44047,44049,44051],{"class":93,"line":33140},[91,44048,33143],{"class":250},[91,44050,833],{"class":153},[91,44052,33148],{"class":250},[91,44054,44055],{"class":93,"line":33151},[91,44056,33154],{"class":308},[91,44058,44059,44061,44063],{"class":93,"line":33157},[91,44060,33160],{"class":250},[91,44062,833],{"class":153},[91,44064,33148],{"class":250},[91,44066,44067],{"class":93,"line":33167},[91,44068,2523],{"emptyLinePlaceholder":175},[91,44070,44071],{"class":93,"line":33172},[91,44072,33175],{"class":308},[91,44074,44075,44077,44079,44081,44083,44085,44087,44089,44091,44093,44095,44097,44099,44101,44103,44105,44107,44109,44111,44113],{"class":93,"line":33178},[91,44076,32532],{"class":105},[91,44078,251],{"class":250},[91,44080,3715],{"class":101},[91,44082,32540],{"class":105},[91,44084,33189],{"class":101},[91,44086,1145],{"class":105},[91,44088,33194],{"class":153},[91,44090,1195],{"class":105},[91,44092,33199],{"class":101},[91,44094,1145],{"class":105},[91,44096,33194],{"class":153},[91,44098,1195],{"class":105},[91,44100,3715],{"class":101},[91,44102,33210],{"class":250},[91,44104,781],{"class":153},[91,44106,466],{"class":105},[91,44108,33217],{"class":250},[91,44110,781],{"class":153},[91,44112,466],{"class":105},[91,44114,33224],{"class":250},[91,44116,44117,44119,44121,44123,44125,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155],{"class":93,"line":33227},[91,44118,32532],{"class":105},[91,44120,251],{"class":250},[91,44122,3715],{"class":101},[91,44124,32540],{"class":105},[91,44126,33238],{"class":101},[91,44128,1145],{"class":105},[91,44130,33194],{"class":153},[91,44132,1195],{"class":105},[91,44134,33247],{"class":101},[91,44136,1145],{"class":105},[91,44138,33194],{"class":153},[91,44140,1195],{"class":105},[91,44142,3715],{"class":101},[91,44144,33258],{"class":250},[91,44146,781],{"class":153},[91,44148,466],{"class":105},[91,44150,33265],{"class":250},[91,44152,781],{"class":153},[91,44154,466],{"class":105},[91,44156,33224],{"class":250},[91,44158,44159],{"class":93,"line":33274},[91,44160,2523],{"emptyLinePlaceholder":175},[91,44162,44163],{"class":93,"line":33279},[91,44164,33282],{"class":308},[91,44166,44167,44169,44171,44173,44175,44177,44179],{"class":93,"line":33285},[91,44168,2620],{"class":153},[91,44170,33290],{"class":250},[91,44172,781],{"class":153},[91,44174,466],{"class":105},[91,44176,1189],{"class":250},[91,44178,1209],{"class":153},[91,44180,33301],{"class":250},[91,44182,44183],{"class":93,"line":33304},[91,44184,33307],{"class":308},[91,44186,44187,44189,44191,44193,44195,44197,44199],{"class":93,"line":33310},[91,44188,33313],{"class":250},[91,44190,290],{"class":105},[91,44192,296],{"class":153},[91,44194,33320],{"class":250},[91,44196,781],{"class":153},[91,44198,466],{"class":105},[91,44200,33327],{"class":250},[91,44202,44203],{"class":93,"line":33330},[91,44204,33333],{"class":308},[91,44206,44207],{"class":93,"line":33336},[91,44208,33339],{"class":308},[91,44210,44211,44213,44215],{"class":93,"line":33342},[91,44212,33345],{"class":250},[91,44214,296],{"class":153},[91,44216,32395],{"class":250},[91,44218,44219],{"class":93,"line":33352},[91,44220,2523],{"emptyLinePlaceholder":175},[91,44222,44223],{"class":93,"line":33357},[91,44224,33360],{"class":308},[91,44226,44227,44229,44231,44233,44235],{"class":93,"line":33363},[91,44228,33366],{"class":250},[91,44230,296],{"class":153},[91,44232,33371],{"class":250},[91,44234,781],{"class":153},[91,44236,33376],{"class":250},[91,44238,44239,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263,44265,44267,44269,44271,44273],{"class":93,"line":33379},[91,44240,32532],{"class":105},[91,44242,251],{"class":250},[91,44244,33386],{"class":101},[91,44246,1145],{"class":105},[91,44248,33391],{"class":153},[91,44250,1195],{"class":105},[91,44252,793],{"class":101},[91,44254,1145],{"class":105},[91,44256,33391],{"class":153},[91,44258,1195],{"class":105},[91,44260,33404],{"class":101},[91,44262,33407],{"class":250},[91,44264,33410],{"class":153},[91,44266,1156],{"class":105},[91,44268,33415],{"class":250},[91,44270,577],{"class":153},[91,44272,1156],{"class":105},[91,44274,30578],{"class":250},[91,44276,44277],{"class":93,"line":33424},[91,44278,36814],{"class":308},[91,44280,44281],{"class":93,"line":33430},[91,44282,36819],{"class":308},[91,44284,44285,44287,44289],{"class":93,"line":33436},[91,44286,36824],{"class":250},[91,44288,33448],{"class":101},[91,44290,257],{"class":250},[91,44292,44293],{"class":93,"line":33442},[91,44294,33468],{"class":308},[91,44296,44297,44299,44301,44303,44305,44307],{"class":93,"line":33453},[91,44298,33474],{"class":250},[91,44300,296],{"class":153},[91,44302,33479],{"class":250},[91,44304,33482],{"class":5339},[91,44306,296],{"class":153},[91,44308,1670],{"class":250},[91,44310,44311,44313,44315,44317],{"class":93,"line":33459},[91,44312,33492],{"class":101},[91,44314,1108],{"class":250},[91,44316,33497],{"class":105},[91,44318,33500],{"class":250},[91,44320,44321,44323],{"class":93,"line":33465},[91,44322,33506],{"class":101},[91,44324,33509],{"class":250},[91,44326,44327,44329],{"class":93,"line":33471},[91,44328,33515],{"class":101},[91,44330,33518],{"class":250},[91,44332,44333,44335],{"class":93,"line":33489},[91,44334,33524],{"class":101},[91,44336,33527],{"class":250},[91,44338,44339,44341],{"class":93,"line":33503},[91,44340,33533],{"class":101},[91,44342,33536],{"class":250},[91,44344,44345],{"class":93,"line":33512},[91,44346,33542],{"class":250},[91,44348,44349],{"class":93,"line":33521},[91,44350,33548],{"class":308},[91,44352,44353,44355],{"class":93,"line":33530},[91,44354,4213],{"class":153},[91,44356,33556],{"class":250},[91,44358,44359],{"class":93,"line":33539},[91,44360,2523],{"emptyLinePlaceholder":175},[91,44362,44363],{"class":93,"line":33545},[91,44364,33567],{"class":308},[91,44366,44367,44369,44371],{"class":93,"line":33551},[91,44368,32028],{"class":153},[91,44370,33575],{"class":97},[91,44372,33578],{"class":250},[91,44374,44375],{"class":93,"line":33559},[91,44376,33584],{"class":308},[91,44378,44379,44381,44383,44385,44387,44389,44391,44393],{"class":93,"line":33564},[91,44380,33590],{"class":250},[91,44382,31774],{"class":5339},[91,44384,296],{"class":153},[91,44386,251],{"class":250},[91,44388,747],{"class":105},[91,44390,627],{"class":250},[91,44392,542],{"class":105},[91,44394,30578],{"class":250},[91,44396,44397],{"class":93,"line":33570},[91,44398,33610],{"class":308},[91,44400,44401],{"class":93,"line":33581},[91,44402,33616],{"class":308},[91,44404,44405],{"class":93,"line":33587},[91,44406,33622],{"class":308},[91,44408,44409,44411,44413,44415,44417,44419,44421],{"class":93,"line":33607},[91,44410,31808],{"class":250},[91,44412,466],{"class":105},[91,44414,627],{"class":250},[91,44416,327],{"class":105},[91,44418,627],{"class":250},[91,44420,466],{"class":105},[91,44422,257],{"class":250},[91,44424,44425],{"class":93,"line":33613},[91,44426,33645],{"class":308},[91,44428,44429],{"class":93,"line":33619},[91,44430,33651],{"class":308},[91,44432,44433],{"class":93,"line":33625},[91,44434,33657],{"class":308},[91,44436,44437],{"class":93,"line":33642},[91,44438,33663],{"class":308},[91,44440,44441],{"class":93,"line":33648},[91,44442,33669],{"class":308},[91,44444,44445,44447,44449,44451,44453,44455,44457,44459,44461],{"class":93,"line":33654},[91,44446,33675],{"class":250},[91,44448,33678],{"class":101},[91,44450,33681],{"class":250},[91,44452,33684],{"class":101},[91,44454,627],{"class":250},[91,44456,33689],{"class":5339},[91,44458,296],{"class":153},[91,44460,33694],{"class":101},[91,44462,257],{"class":250},[91,44464,44465,44467,44469,44471,44473,44475,44477,44479,44481],{"class":93,"line":33660},[91,44466,33675],{"class":250},[91,44468,33678],{"class":101},[91,44470,33706],{"class":250},[91,44472,33709],{"class":101},[91,44474,627],{"class":250},[91,44476,33689],{"class":5339},[91,44478,296],{"class":153},[91,44480,33718],{"class":101},[91,44482,257],{"class":250},[91,44484,44485],{"class":93,"line":33666},[91,44486,33726],{"class":308},[91,44488,44489],{"class":93,"line":33672},[91,44490,33732],{"class":250},[91,44492,44493],{"class":93,"line":33699},[91,44494,33738],{"class":308},[91,44496,44497,44499,44501],{"class":93,"line":33723},[91,44498,33744],{"class":250},[91,44500,33747],{"class":101},[91,44502,257],{"class":250},[91,44504,44505,44507,44509],{"class":93,"line":33729},[91,44506,33755],{"class":250},[91,44508,33758],{"class":101},[91,44510,257],{"class":250},[91,44512,44513],{"class":93,"line":33735},[91,44514,33766],{"class":308},[91,44516,44517,44519,44521,44523,44525,44527,44529],{"class":93,"line":33741},[91,44518,31808],{"class":250},[91,44520,466],{"class":105},[91,44522,627],{"class":250},[91,44524,327],{"class":105},[91,44526,627],{"class":250},[91,44528,327],{"class":105},[91,44530,257],{"class":250},[91,44532,44533,44535,44537,44539,44541,44543,44545,44547,44549],{"class":93,"line":33752},[91,44534,33675],{"class":250},[91,44536,33678],{"class":101},[91,44538,33793],{"class":250},[91,44540,33684],{"class":101},[91,44542,627],{"class":250},[91,44544,33689],{"class":5339},[91,44546,296],{"class":153},[91,44548,33804],{"class":101},[91,44550,257],{"class":250},[91,44552,44553,44555,44557,44559,44561,44563,44565,44567,44569],{"class":93,"line":33763},[91,44554,33675],{"class":250},[91,44556,33678],{"class":101},[91,44558,33816],{"class":250},[91,44560,33709],{"class":101},[91,44562,627],{"class":250},[91,44564,33689],{"class":5339},[91,44566,296],{"class":153},[91,44568,33827],{"class":101},[91,44570,257],{"class":250},[91,44572,44573],{"class":93,"line":33769},[91,44574,33835],{"class":308},[91,44576,44577],{"class":93,"line":33786},[91,44578,33732],{"class":250},[91,44580,44581,44583,44585],{"class":93,"line":33809},[91,44582,33744],{"class":250},[91,44584,33678],{"class":101},[91,44586,257],{"class":250},[91,44588,44589,44591,44593],{"class":93,"line":33832},[91,44590,33755],{"class":250},[91,44592,33857],{"class":101},[91,44594,257],{"class":250},[91,44596,44597],{"class":93,"line":33838},[91,44598,33865],{"class":250},[91,44600,44601],{"class":93,"line":33843},[91,44602,2523],{"emptyLinePlaceholder":175},[91,44604,44605],{"class":93,"line":33852},[91,44606,33876],{"class":308},[91,44608,44609,44611,44613,44615,44617],{"class":93,"line":33862},[91,44610,1655],{"class":153},[91,44612,31301],{"class":105},[91,44614,3072],{"class":153},[91,44616,31306],{"class":101},[91,44618,3862],{"class":250},[91,44620,44621],{"class":93,"line":33868},[91,44622,33895],{"class":308},[91,44624,44625,44628,44630],{"class":93,"line":33873},[91,44626,44627],{"class":250},"    GoogLeNet",[91,44629,296],{"class":153},[91,44631,44632],{"class":250},"GoogLeNet(Inception)\n",[91,44634,44635,44637,44639],{"class":93,"line":33879},[91,44636,33912],{"class":250},[91,44638,296],{"class":153},[91,44640,33917],{"class":250},[91,44642,44643,44645,44647,44650,44652,44654,44656],{"class":93,"line":33892},[91,44644,33474],{"class":250},[91,44646,296],{"class":153},[91,44648,44649],{"class":250},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[91,44651,33930],{"class":5339},[91,44653,296],{"class":153},[91,44655,1200],{"class":105},[91,44657,257],{"class":250},[91,44659,44660],{"class":93,"line":33898},[91,44661,33942],{"class":250},[14,44663,44664],{"start":1304},[17,44665,40655],{},[82,44667,44669],{"className":30459,"code":44668,"language":30461,"meta":26,"style":26},"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",[88,44670,44671,44677,44687,44697,44701,44711,44722,44726,44730,44734,44742,44758,44768,44784,44794,44808,44812,44822,44832,44842,44848,44852,44856,44864,44868,44884,44892,44896,44900,44908,44916,44920,44924,44928,44932,44938,44942,44952,44960,44968,44972,44976,44980,44988,44992,45008,45012,45016,45020,45032,45036,45048,45052,45056,45068,45072,45082,45086,45090,45102,45106,45114,45118,45122,45130,45134,45142,45146,45150,45154,45158,45162,45178,45186,45190,45194,45242,45248,45252,45262,45270,45278,45282,45286,45290,45294,45302,45306,45322,45326,45334,45342],{"__ignoreMap":26},[91,44672,44673,44675],{"class":93,"line":94},[91,44674,30473],{"class":153},[91,44676,30476],{"class":250},[91,44678,44679,44681,44683,44685],{"class":93,"line":38},[91,44680,30473],{"class":153},[91,44682,31496],{"class":250},[91,44684,31464],{"class":153},[91,44686,31501],{"class":250},[91,44688,44689,44691,44693,44695],{"class":93,"line":1304},[91,44690,30818],{"class":153},[91,44692,31479],{"class":250},[91,44694,30473],{"class":153},[91,44696,31484],{"class":250},[91,44698,44699],{"class":93,"line":1319},[91,44700,34003],{"class":308},[91,44702,44703,44705,44707,44709],{"class":93,"line":1325},[91,44704,30818],{"class":153},[91,44706,31449],{"class":250},[91,44708,30473],{"class":153},[91,44710,31454],{"class":250},[91,44712,44713,44715,44717,44719],{"class":93,"line":1339},[91,44714,30818],{"class":153},[91,44716,31995],{"class":250},[91,44718,30473],{"class":153},[91,44720,44721],{"class":250}," GoogLeNet,Inception\n",[91,44723,44724],{"class":93,"line":1345},[91,44725,2523],{"emptyLinePlaceholder":175},[91,44727,44728],{"class":93,"line":1436},[91,44729,2523],{"emptyLinePlaceholder":175},[91,44731,44732],{"class":93,"line":1442},[91,44733,34032],{"class":308},[91,44735,44736,44738,44740],{"class":93,"line":1454},[91,44737,32028],{"class":153},[91,44739,34039],{"class":97},[91,44741,32034],{"class":250},[91,44743,44744,44746,44748,44750,44752,44754,44756],{"class":93,"line":1736},[91,44745,34046],{"class":250},[91,44747,296],{"class":153},[91,44749,31536],{"class":250},[91,44751,31539],{"class":5339},[91,44753,296],{"class":153},[91,44755,31544],{"class":101},[91,44757,31547],{"class":250},[91,44759,44760,44762,44764,44766],{"class":93,"line":1741},[91,44761,34063],{"class":5339},[91,44763,296],{"class":153},[91,44765,34068],{"class":105},[91,44767,31547],{"class":250},[91,44769,44770,44772,44774,44776,44778,44780,44782],{"class":93,"line":1747},[91,44771,34075],{"class":5339},[91,44773,296],{"class":153},[91,44775,31574],{"class":250},[91,44777,31577],{"class":5339},[91,44779,296],{"class":153},[91,44781,35530],{"class":105},[91,44783,31585],{"class":250},[91,44785,44786,44788,44790,44792],{"class":93,"line":1752},[91,44787,34092],{"class":5339},[91,44789,296],{"class":153},[91,44791,31557],{"class":105},[91,44793,257],{"class":250},[91,44795,44796,44798,44800,44802,44804,44806],{"class":93,"line":1766},[91,44797,34103],{"class":250},[91,44799,296],{"class":153},[91,44801,31615],{"class":250},[91,44803,31618],{"class":5339},[91,44805,296],{"class":153},[91,44807,34114],{"class":250},[91,44809,44810],{"class":93,"line":1771},[91,44811,34119],{"class":308},[91,44813,44814,44816,44818,44820],{"class":93,"line":1777},[91,44815,34124],{"class":5339},[91,44817,296],{"class":153},[91,44819,466],{"class":105},[91,44821,31547],{"class":250},[91,44823,44824,44826,44828,44830],{"class":93,"line":1798},[91,44825,34135],{"class":5339},[91,44827,296],{"class":153},[91,44829,31557],{"class":105},[91,44831,31547],{"class":250},[91,44833,44834,44836,44838,44840],{"class":93,"line":1803},[91,44835,34146],{"class":5339},[91,44837,296],{"class":153},[91,44839,440],{"class":105},[91,44841,257],{"class":250},[91,44843,44844,44846],{"class":93,"line":1817},[91,44845,4213],{"class":153},[91,44847,34159],{"class":250},[91,44849,44850],{"class":93,"line":1822},[91,44851,2523],{"emptyLinePlaceholder":175},[91,44853,44854],{"class":93,"line":1851},[91,44855,34168],{"class":308},[91,44857,44858,44860,44862],{"class":93,"line":1856},[91,44859,32028],{"class":153},[91,44861,34175],{"class":97},[91,44863,34178],{"class":250},[91,44865,44866],{"class":93,"line":1873},[91,44867,34183],{"class":308},[91,44869,44870,44872,44874,44876,44878,44880,44882],{"class":93,"line":1878},[91,44871,31318],{"class":250},[91,44873,296],{"class":153},[91,44875,31325],{"class":101},[91,44877,1828],{"class":153},[91,44879,31330],{"class":250},[91,44881,1825],{"class":153},[91,44883,34200],{"class":101},[91,44885,44886,44888,44890],{"class":93,"line":1883},[91,44887,31370],{"class":250},[91,44889,296],{"class":153},[91,44891,32370],{"class":250},[91,44893,44894],{"class":93,"line":1888},[91,44895,2523],{"emptyLinePlaceholder":175},[91,44897,44898],{"class":93,"line":1902},[91,44899,34217],{"class":308},[91,44901,44902,44904,44906],{"class":93,"line":1907},[91,44903,34222],{"class":250},[91,44905,296],{"class":153},[91,44907,32423],{"class":105},[91,44909,44910,44912,44914],{"class":93,"line":2700},[91,44911,34231],{"class":250},[91,44913,296],{"class":153},[91,44915,3208],{"class":105},[91,44917,44918],{"class":93,"line":2714},[91,44919,2523],{"emptyLinePlaceholder":175},[91,44921,44922],{"class":93,"line":2722},[91,44923,34244],{"class":308},[91,44925,44926],{"class":93,"line":2727},[91,44927,34249],{"class":308},[91,44929,44930],{"class":93,"line":2733},[91,44931,34254],{"class":308},[91,44933,44934,44936],{"class":93,"line":2739},[91,44935,34259],{"class":153},[91,44937,32965],{"class":250},[91,44939,44940],{"class":93,"line":2744},[91,44941,34266],{"class":308},[91,44943,44944,44946,44948,44950],{"class":93,"line":8071},[91,44945,3526],{"class":153},[91,44947,34273],{"class":250},[91,44949,26165],{"class":153},[91,44951,34278],{"class":250},[91,44953,44954,44956,44958],{"class":93,"line":8095},[91,44955,34283],{"class":250},[91,44957,296],{"class":153},[91,44959,34288],{"class":250},[91,44961,44962,44964,44966],{"class":93,"line":8100},[91,44963,34293],{"class":250},[91,44965,296],{"class":153},[91,44967,34298],{"class":250},[91,44969,44970],{"class":93,"line":8106},[91,44971,34303],{"class":308},[91,44973,44974],{"class":93,"line":8133},[91,44975,32956],{"class":250},[91,44977,44978],{"class":93,"line":8138},[91,44979,34312],{"class":308},[91,44981,44982,44984,44986],{"class":93,"line":8144},[91,44983,32741],{"class":250},[91,44985,296],{"class":153},[91,44987,34321],{"class":250},[91,44989,44990],{"class":93,"line":8156},[91,44991,34326],{"class":308},[91,44993,44994,44996,44998,45000,45002,45004,45006],{"class":93,"line":8168},[91,44995,32758],{"class":250},[91,44997,296],{"class":153},[91,44999,32763],{"class":250},[91,45001,32766],{"class":5339},[91,45003,296],{"class":153},[91,45005,466],{"class":105},[91,45007,257],{"class":250},[91,45009,45010],{"class":93,"line":8180},[91,45011,34347],{"class":308},[91,45013,45014],{"class":93,"line":9839},[91,45015,34352],{"class":308},[91,45017,45018],{"class":93,"line":9864},[91,45019,34357],{"class":308},[91,45021,45022,45024,45026,45028,45030],{"class":93,"line":9887},[91,45023,34362],{"class":250},[91,45025,9600],{"class":153},[91,45027,32868],{"class":250},[91,45029,3072],{"class":153},[91,45031,34371],{"class":250},[91,45033,45034],{"class":93,"line":9911},[91,45035,34376],{"class":308},[91,45037,45038,45040,45042,45044,45046],{"class":93,"line":9916},[91,45039,34381],{"class":250},[91,45041,9600],{"class":153},[91,45043,34386],{"class":250},[91,45045,440],{"class":105},[91,45047,257],{"class":250},[91,45049,45050],{"class":93,"line":9921},[91,45051,2523],{"emptyLinePlaceholder":175},[91,45053,45054],{"class":93,"line":9926},[91,45055,34399],{"class":308},[91,45057,45058,45060,45062,45064,45066],{"class":93,"line":9935},[91,45059,34404],{"class":250},[91,45061,296],{"class":153},[91,45063,34409],{"class":250},[91,45065,833],{"class":153},[91,45067,34414],{"class":250},[91,45069,45070],{"class":93,"line":9940},[91,45071,34419],{"class":308},[91,45073,45074,45076,45078,45080],{"class":93,"line":9946},[91,45075,32532],{"class":105},[91,45077,251],{"class":250},[91,45079,34428],{"class":101},[91,45081,34431],{"class":250},[91,45083,45084],{"class":93,"line":9967},[91,45085,2523],{"emptyLinePlaceholder":175},[91,45087,45088],{"class":93,"line":9973},[91,45089,34440],{"class":308},[91,45091,45092,45094,45096,45098,45100],{"class":93,"line":9987},[91,45093,1655],{"class":153},[91,45095,31301],{"class":105},[91,45097,3072],{"class":153},[91,45099,31306],{"class":101},[91,45101,3862],{"class":250},[91,45103,45104],{"class":93,"line":9993},[91,45105,34457],{"class":308},[91,45107,45108,45110,45112],{"class":93,"line":10020},[91,45109,31370],{"class":250},[91,45111,296],{"class":153},[91,45113,44632],{"class":250},[91,45115,45116],{"class":93,"line":10029},[91,45117,34470],{"class":308},[91,45119,45120],{"class":93,"line":10035},[91,45121,34475],{"class":308},[91,45123,45124,45126,45128],{"class":93,"line":10043},[91,45125,34480],{"class":250},[91,45127,34483],{"class":101},[91,45129,30578],{"class":250},[91,45131,45132],{"class":93,"line":10048},[91,45133,34490],{"class":308},[91,45135,45136,45138,45140],{"class":93,"line":16727},[91,45137,34103],{"class":250},[91,45139,296],{"class":153},[91,45141,34499],{"class":250},[91,45143,45144],{"class":93,"line":16733},[91,45145,34504],{"class":308},[91,45147,45148],{"class":93,"line":16756},[91,45149,34509],{"class":250},[91,45151,45152],{"class":93,"line":16762},[91,45153,2523],{"emptyLinePlaceholder":175},[91,45155,45156],{"class":93,"line":16785},[91,45157,34518],{"class":308},[91,45159,45160],{"class":93,"line":16799},[91,45161,34523],{"class":308},[91,45163,45164,45166,45168,45170,45172,45174,45176],{"class":93,"line":16819},[91,45165,31318],{"class":250},[91,45167,296],{"class":153},[91,45169,31325],{"class":101},[91,45171,1828],{"class":153},[91,45173,31330],{"class":250},[91,45175,1825],{"class":153},[91,45177,34200],{"class":101},[91,45179,45180,45182,45184],{"class":93,"line":16825},[91,45181,31370],{"class":250},[91,45183,296],{"class":153},[91,45185,32370],{"class":250},[91,45187,45188],{"class":93,"line":16836},[91,45189,34552],{"class":308},[91,45191,45192],{"class":93,"line":16859},[91,45193,34557],{"class":308},[91,45195,45196,45198,45200,45202,45204,45206,45208,45210,45212,45214,45216,45218,45220,45222,45224,45226,45228,45230,45232,45234,45236,45238,45240],{"class":93,"line":16881},[91,45197,34562],{"class":250},[91,45199,296],{"class":153},[91,45201,1139],{"class":250},[91,45203,34569],{"class":101},[91,45205,627],{"class":250},[91,45207,34574],{"class":101},[91,45209,627],{"class":250},[91,45211,34579],{"class":101},[91,45213,627],{"class":250},[91,45215,34584],{"class":101},[91,45217,627],{"class":250},[91,45219,34589],{"class":101},[91,45221,627],{"class":250},[91,45223,34594],{"class":101},[91,45225,627],{"class":250},[91,45227,34599],{"class":101},[91,45229,627],{"class":250},[91,45231,34604],{"class":101},[91,45233,627],{"class":250},[91,45235,34609],{"class":101},[91,45237,627],{"class":250},[91,45239,34614],{"class":101},[91,45241,33327],{"class":250},[91,45243,45244,45246],{"class":93,"line":16886},[91,45245,34259],{"class":153},[91,45247,32965],{"class":250},[91,45249,45250],{"class":93,"line":16892},[91,45251,34627],{"class":308},[91,45253,45254,45256,45258,45260],{"class":93,"line":16906},[91,45255,3526],{"class":153},[91,45257,34634],{"class":250},[91,45259,26165],{"class":153},[91,45261,34278],{"class":250},[91,45263,45264,45266,45268],{"class":93,"line":16919},[91,45265,32691],{"class":250},[91,45267,296],{"class":153},[91,45269,32696],{"class":250},[91,45271,45272,45274,45276],{"class":93,"line":16924},[91,45273,32706],{"class":250},[91,45275,296],{"class":153},[91,45277,32711],{"class":250},[91,45279,45280],{"class":93,"line":16938},[91,45281,2523],{"emptyLinePlaceholder":175},[91,45283,45284],{"class":93,"line":16943},[91,45285,34663],{"class":308},[91,45287,45288],{"class":93,"line":16949},[91,45289,32956],{"class":250},[91,45291,45292],{"class":93,"line":16954},[91,45293,34672],{"class":308},[91,45295,45296,45298,45300],{"class":93,"line":16968},[91,45297,32741],{"class":250},[91,45299,296],{"class":153},[91,45301,32746],{"class":250},[91,45303,45304],{"class":93,"line":16973},[91,45305,34685],{"class":308},[91,45307,45308,45310,45312,45314,45316,45318,45320],{"class":93,"line":16978},[91,45309,32758],{"class":250},[91,45311,296],{"class":153},[91,45313,32763],{"class":250},[91,45315,32766],{"class":5339},[91,45317,296],{"class":153},[91,45319,466],{"class":105},[91,45321,257],{"class":250},[91,45323,45324],{"class":93,"line":16992},[91,45325,34706],{"class":308},[91,45327,45328,45330,45332],{"class":93,"line":17004},[91,45329,34711],{"class":250},[91,45331,296],{"class":153},[91,45333,34716],{"class":250},[91,45335,45336,45338,45340],{"class":93,"line":17009},[91,45337,34721],{"class":250},[91,45339,296],{"class":153},[91,45341,34726],{"class":250},[91,45343,45344,45346,45348,45350,45352,45354,45356,45358],{"class":93,"line":17022},[91,45345,34731],{"class":105},[91,45347,251],{"class":250},[91,45349,34736],{"class":101},[91,45351,34739],{"class":250},[91,45353,34742],{"class":101},[91,45355,627],{"class":250},[91,45357,34747],{"class":101},[91,45359,34750],{"class":250},[217,45361,45363],{"id":45362},"_24训练自己的数据集","2.4.训练自己的数据集",[21,45365,45366],{},"猫狗分类任务",[21,45368,45369],{},"划分数据集和验证集",[82,45371,45373],{"className":30459,"code":45372,"language":30461,"meta":26,"style":26},"# 创建脚本，用于划分数据集和验证集\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",[88,45374,45375,45380,45387,45392,45403,45410,45414,45424,45438,45447,45451,45456,45466,45486,45490,45495,45505,45516,45529,45533,45538,45547,45557,45568,45572,45577,45587,45591,45596,45601,45606,45611,45616,45620,45630,45657,45670,45682,45709,45714,45719,45733,45738,45750,45765,45780,45788,45792,45797,45803,45815,45828,45833,45838,45843,45893,45899,45903],{"__ignoreMap":26},[91,45376,45377],{"class":93,"line":94},[91,45378,45379],{"class":308},"# 创建脚本，用于划分数据集和验证集\n",[91,45381,45382,45384],{"class":93,"line":38},[91,45383,30473],{"class":153},[91,45385,45386],{"class":250}," os\n",[91,45388,45389],{"class":93,"line":1304},[91,45390,45391],{"class":308},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[91,45393,45394,45396,45399,45401],{"class":93,"line":1319},[91,45395,30818],{"class":153},[91,45397,45398],{"class":250}," shutil ",[91,45400,30473],{"class":153},[91,45402,31903],{"class":250},[91,45404,45405,45407],{"class":93,"line":1325},[91,45406,30473],{"class":153},[91,45408,45409],{"class":250}," random\n",[91,45411,45412],{"class":93,"line":1339},[91,45413,2523],{"emptyLinePlaceholder":175},[91,45415,45416,45418,45421],{"class":93,"line":1345},[91,45417,32028],{"class":153},[91,45419,45420],{"class":97}," mkfile",[91,45422,45423],{"class":250},"(file):\n",[91,45425,45426,45428,45430,45433,45436],{"class":93,"line":1436},[91,45427,3224],{"class":153},[91,45429,39011],{"class":153},[91,45431,45432],{"class":250}," os.path.exists(",[91,45434,45435],{"class":5339},"file",[91,45437,30867],{"class":250},[91,45439,45440,45443,45445],{"class":93,"line":1442},[91,45441,45442],{"class":250},"        os.makedirs(",[91,45444,45435],{"class":5339},[91,45446,257],{"class":250},[91,45448,45449],{"class":93,"line":1454},[91,45450,2523],{"emptyLinePlaceholder":175},[91,45452,45453],{"class":93,"line":1736},[91,45454,45455],{"class":308},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[91,45457,45458,45461,45463],{"class":93,"line":1741},[91,45459,45460],{"class":250},"file_path",[91,45462,296],{"class":153},[91,45464,45465],{"class":101},"'data_cat_dog'\n",[91,45467,45468,45471,45473,45476,45478,45481,45483],{"class":93,"line":1747},[91,45469,45470],{"class":250},"flower_class",[91,45472,296],{"class":153},[91,45474,45475],{"class":250},"[cla ",[91,45477,3148],{"class":153},[91,45479,45480],{"class":250}," cla ",[91,45482,26165],{"class":153},[91,45484,45485],{"class":250}," os.listdir(file_path)]\n",[91,45487,45488],{"class":93,"line":1752},[91,45489,2523],{"emptyLinePlaceholder":175},[91,45491,45492],{"class":93,"line":1766},[91,45493,45494],{"class":308},"# 创建训练集train文件夹\n",[91,45496,45497,45500,45503],{"class":93,"line":1771},[91,45498,45499],{"class":250},"mkfile(",[91,45501,45502],{"class":101},"'data\u002Ftrain'",[91,45504,257],{"class":250},[91,45506,45507,45509,45511,45513],{"class":93,"line":1777},[91,45508,3148],{"class":153},[91,45510,45480],{"class":250},[91,45512,26165],{"class":153},[91,45514,45515],{"class":250}," flower_class:\n",[91,45517,45518,45521,45524,45526],{"class":93,"line":1798},[91,45519,45520],{"class":250},"    mkfile(",[91,45522,45523],{"class":101},"'data\u002Ftrain\u002F'",[91,45525,730],{"class":153},[91,45527,45528],{"class":250},"cla)\n",[91,45530,45531],{"class":93,"line":1803},[91,45532,2523],{"emptyLinePlaceholder":175},[91,45534,45535],{"class":93,"line":1817},[91,45536,45537],{"class":308},"# 创建验证集val文件夹\n",[91,45539,45540,45542,45545],{"class":93,"line":1822},[91,45541,45499],{"class":250},[91,45543,45544],{"class":101},"'data\u002Ftest'",[91,45546,257],{"class":250},[91,45548,45549,45551,45553,45555],{"class":93,"line":1851},[91,45550,3148],{"class":153},[91,45552,45480],{"class":250},[91,45554,26165],{"class":153},[91,45556,45515],{"class":250},[91,45558,45559,45561,45564,45566],{"class":93,"line":1856},[91,45560,45520],{"class":250},[91,45562,45563],{"class":101},"'data\u002Ftest\u002F'",[91,45565,730],{"class":153},[91,45567,45528],{"class":250},[91,45569,45570],{"class":93,"line":1873},[91,45571,2523],{"emptyLinePlaceholder":175},[91,45573,45574],{"class":93,"line":1878},[91,45575,45576],{"class":308},"# 划分比例，训练集：测试集=9：1\n",[91,45578,45579,45582,45584],{"class":93,"line":1883},[91,45580,45581],{"class":250},"split_rate",[91,45583,296],{"class":153},[91,45585,45586],{"class":105},"0.1\n",[91,45588,45589],{"class":93,"line":1888},[91,45590,2523],{"emptyLinePlaceholder":175},[91,45592,45593],{"class":93,"line":1902},[91,45594,45595],{"class":308},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[91,45597,45598],{"class":93,"line":1907},[91,45599,45600],{"class":308},"# cla_path：当前类别的原始图片路径\n",[91,45602,45603],{"class":93,"line":2700},[91,45604,45605],{"class":308},"# images：当前类别下所有图片的文件名列表\n",[91,45607,45608],{"class":93,"line":2714},[91,45609,45610],{"class":308},"# num：该类别图片总数\n",[91,45612,45613],{"class":93,"line":2722},[91,45614,45615],{"class":308},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[91,45617,45618],{"class":93,"line":2727},[91,45619,2523],{"emptyLinePlaceholder":175},[91,45621,45622,45624,45626,45628],{"class":93,"line":2733},[91,45623,3148],{"class":153},[91,45625,45480],{"class":250},[91,45627,26165],{"class":153},[91,45629,45515],{"class":250},[91,45631,45632,45635,45637,45640,45642,45645,45648,45650,45652,45654],{"class":93,"line":2739},[91,45633,45634],{"class":250},"    cla_path ",[91,45636,296],{"class":153},[91,45638,45639],{"class":250}," file_path ",[91,45641,730],{"class":153},[91,45643,45644],{"class":101}," '\u002F'",[91,45646,45647],{"class":153}," +",[91,45649,45480],{"class":250},[91,45651,730],{"class":153},[91,45653,45644],{"class":101},[91,45655,45656],{"class":308},"  # 某一类别的子目录\n",[91,45658,45659,45662,45664,45667],{"class":93,"line":2744},[91,45660,45661],{"class":250},"    images ",[91,45663,296],{"class":153},[91,45665,45666],{"class":250}," os.listdir(cla_path)  ",[91,45668,45669],{"class":308},"# iamges 列表存储了该目录下所有图像的名称\n",[91,45671,45672,45675,45677,45679],{"class":93,"line":8071},[91,45673,45674],{"class":250},"    num ",[91,45676,296],{"class":153},[91,45678,7454],{"class":105},[91,45680,45681],{"class":250},"(images)\n",[91,45683,45684,45687,45689,45692,45694,45696,45698,45701,45703,45706],{"class":93,"line":8095},[91,45685,45686],{"class":250},"    eval_index ",[91,45688,296],{"class":153},[91,45690,45691],{"class":250}," random.sample(images, ",[91,45693,742],{"class":5339},[91,45695,296],{"class":153},[91,45697,254],{"class":105},[91,45699,45700],{"class":250},"(num ",[91,45702,704],{"class":153},[91,45704,45705],{"class":250}," split_rate))  ",[91,45707,45708],{"class":308},"# 从images列表中随机抽取 k 个图像名称\n",[91,45710,45711],{"class":93,"line":8100},[91,45712,45713],{"class":308},"    # 遍历该类别下的所有图片\n",[91,45715,45716],{"class":93,"line":8106},[91,45717,45718],{"class":308},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[91,45720,45721,45723,45726,45728,45730],{"class":93,"line":8133},[91,45722,3324],{"class":153},[91,45724,45725],{"class":250}," index, image ",[91,45727,26165],{"class":153},[91,45729,31687],{"class":105},[91,45731,45732],{"class":250},"(images):\n",[91,45734,45735],{"class":93,"line":8138},[91,45736,45737],{"class":308},"        # eval_index 中保存验证集val的图像名称\n",[91,45739,45740,45742,45745,45747],{"class":93,"line":8144},[91,45741,2620],{"class":153},[91,45743,45744],{"class":250}," image ",[91,45746,26165],{"class":153},[91,45748,45749],{"class":250}," eval_index:\n",[91,45751,45752,45755,45757,45760,45762],{"class":93,"line":8156},[91,45753,45754],{"class":250},"            image_path ",[91,45756,296],{"class":153},[91,45758,45759],{"class":250}," cla_path ",[91,45761,730],{"class":153},[91,45763,45764],{"class":250}," image\n",[91,45766,45767,45770,45772,45775,45777],{"class":93,"line":8168},[91,45768,45769],{"class":250},"            new_path ",[91,45771,296],{"class":153},[91,45773,45774],{"class":101}," 'data\u002Ftest\u002F'",[91,45776,45647],{"class":153},[91,45778,45779],{"class":250}," cla\n",[91,45781,45782,45785],{"class":93,"line":8180},[91,45783,45784],{"class":250},"            copy(image_path, new_path)  ",[91,45786,45787],{"class":308},"# 将选中的图像复制到新路径\n",[91,45789,45790],{"class":93,"line":9839},[91,45791,2523],{"emptyLinePlaceholder":175},[91,45793,45794],{"class":93,"line":9864},[91,45795,45796],{"class":308},"        # 其余的图像保存在训练集train中\n",[91,45798,45799,45801],{"class":93,"line":9887},[91,45800,2657],{"class":153},[91,45802,3862],{"class":250},[91,45804,45805,45807,45809,45811,45813],{"class":93,"line":9911},[91,45806,45754],{"class":250},[91,45808,296],{"class":153},[91,45810,45759],{"class":250},[91,45812,730],{"class":153},[91,45814,45764],{"class":250},[91,45816,45817,45819,45821,45824,45826],{"class":93,"line":9916},[91,45818,45769],{"class":250},[91,45820,296],{"class":153},[91,45822,45823],{"class":101}," 'data\u002Ftrain\u002F'",[91,45825,45647],{"class":153},[91,45827,45779],{"class":250},[91,45829,45830],{"class":93,"line":9921},[91,45831,45832],{"class":250},"            copy(image_path, new_path)\n",[91,45834,45835],{"class":93,"line":9926},[91,45836,45837],{"class":308},"            # 打印进度条信息\n",[91,45839,45840],{"class":93,"line":9935},[91,45841,45842],{"class":308},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[91,45844,45845,45847,45849,45851,45854,45856,45858,45861,45863,45865,45867,45870,45873,45875,45877,45880,45883,45885,45887,45890],{"class":93,"line":9940},[91,45846,32532],{"class":105},[91,45848,251],{"class":250},[91,45850,500],{"class":101},[91,45852,45853],{"class":105},"\\r",[91,45855,1139],{"class":101},[91,45857,32540],{"class":105},[91,45859,45860],{"class":101},"] processing [",[91,45862,32540],{"class":105},[91,45864,833],{"class":101},[91,45866,32540],{"class":105},[91,45868,45869],{"class":101},"]\"",[91,45871,45872],{"class":250},".format(cla, index ",[91,45874,730],{"class":153},[91,45876,25240],{"class":105},[91,45878,45879],{"class":250},", num), ",[91,45881,45882],{"class":5339},"end",[91,45884,296],{"class":153},[91,45886,7775],{"class":101},[91,45888,45889],{"class":250},")  ",[91,45891,45892],{"class":308},"# processing bar\n",[91,45894,45895,45897],{"class":93,"line":9946},[91,45896,31380],{"class":105},[91,45898,2099],{"class":250},[91,45900,45901],{"class":93,"line":9967},[91,45902,2523],{"emptyLinePlaceholder":175},[91,45904,45905,45907,45909,45912],{"class":93,"line":9973},[91,45906,30496],{"class":105},[91,45908,251],{"class":250},[91,45910,45911],{"class":101},"\"processing done!\"",[91,45913,257],{"class":250},[21,45915,45916],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22121,45918,45920],{"id":45919},"_242模型代码","2.4.2.模型代码",[21,45922,45923],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[82,45925,45927],{"className":30459,"code":45926,"language":30461,"meta":26,"style":26},"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",[88,45928,45929,45935,45945,45955,45959,45975,45983,45997,46007,46011,46041,46045,46079,46125,46129,46163,46209,46213,46217,46251,46281,46285,46293,46307,46329,46351,46369,46373,46387,46391,46395,46411,46415,46423,46437,46447,46491,46495,46523,46527,46537,46565,46569,46605,46609,46637,46641,46651,46683,46715,46743,46747,46757,46789,46821,46853,46885,46917,46945,46949,46959,46991,47023,47035,47039,47051,47055,47059,47071,47079,47099,47103,47107,47111,47115,47119,47123,47137,47145,47153,47165,47179,47187,47191,47199,47209,47219,47229,47239,47249,47255,47259,47263,47275,47295,47303],{"__ignoreMap":26},[91,45930,45931,45933],{"class":93,"line":94},[91,45932,30473],{"class":153},[91,45934,30476],{"class":250},[91,45936,45937,45939,45941,45943],{"class":93,"line":38},[91,45938,30818],{"class":153},[91,45940,30821],{"class":250},[91,45942,30473],{"class":153},[91,45944,30826],{"class":250},[91,45946,45947,45949,45951,45953],{"class":93,"line":1304},[91,45948,30818],{"class":153},[91,45950,30838],{"class":250},[91,45952,30473],{"class":153},[91,45954,30843],{"class":250},[91,45956,45957],{"class":93,"line":1319},[91,45958,2523],{"emptyLinePlaceholder":175},[91,45960,45961,45963,45965,45967,45969,45971,45973],{"class":93,"line":1325},[91,45962,14817],{"class":153},[91,45964,41574],{"class":97},[91,45966,251],{"class":250},[91,45968,30859],{"class":97},[91,45970,807],{"class":250},[91,45972,30864],{"class":97},[91,45974,30867],{"class":250},[91,45976,45977,45979,45981],{"class":93,"line":1339},[91,45978,30882],{"class":153},[91,45980,30885],{"class":105},[91,45982,41593],{"class":250},[91,45984,45985,45987,45989,45991,45993,45995],{"class":93,"line":1345},[91,45986,30898],{"class":105},[91,45988,41600],{"class":250},[91,45990,30904],{"class":105},[91,45992,30907],{"class":250},[91,45994,30910],{"class":105},[91,45996,2099],{"class":250},[91,45998,45999,46001,46003,46005],{"class":93,"line":1436},[91,46000,30926],{"class":105},[91,46002,34852],{"class":250},[91,46004,296],{"class":153},[91,46006,34857],{"class":250},[91,46008,46009],{"class":93,"line":1442},[91,46010,41623],{"class":308},[91,46012,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039],{"class":93,"line":1454},[91,46014,30926],{"class":105},[91,46016,41630],{"class":250},[91,46018,296],{"class":153},[91,46020,30934],{"class":250},[91,46022,30937],{"class":5339},[91,46024,296],{"class":153},[91,46026,41641],{"class":250},[91,46028,30946],{"class":5339},[91,46030,296],{"class":153},[91,46032,41648],{"class":250},[91,46034,30955],{"class":5339},[91,46036,296],{"class":153},[91,46038,466],{"class":105},[91,46040,257],{"class":250},[91,46042,46043],{"class":93,"line":1736},[91,46044,41661],{"class":308},[91,46046,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073,46075,46077],{"class":93,"line":1741},[91,46048,30926],{"class":105},[91,46050,41668],{"class":250},[91,46052,296],{"class":153},[91,46054,30934],{"class":250},[91,46056,30937],{"class":5339},[91,46058,296],{"class":153},[91,46060,41641],{"class":250},[91,46062,30946],{"class":5339},[91,46064,296],{"class":153},[91,46066,41685],{"class":250},[91,46068,440],{"class":105},[91,46070,41690],{"class":250},[91,46072,30955],{"class":5339},[91,46074,296],{"class":153},[91,46076,466],{"class":105},[91,46078,257],{"class":250},[91,46080,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123],{"class":93,"line":1747},[91,46082,30926],{"class":105},[91,46084,41705],{"class":250},[91,46086,296],{"class":153},[91,46088,30934],{"class":250},[91,46090,30937],{"class":5339},[91,46092,296],{"class":153},[91,46094,41685],{"class":250},[91,46096,440],{"class":105},[91,46098,41690],{"class":250},[91,46100,30946],{"class":5339},[91,46102,296],{"class":153},[91,46104,41685],{"class":250},[91,46106,466],{"class":105},[91,46108,41690],{"class":250},[91,46110,30955],{"class":5339},[91,46112,296],{"class":153},[91,46114,321],{"class":105},[91,46116,627],{"class":250},[91,46118,30964],{"class":5339},[91,46120,296],{"class":153},[91,46122,466],{"class":105},[91,46124,257],{"class":250},[91,46126,46127],{"class":93,"line":1752},[91,46128,41750],{"class":308},[91,46130,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161],{"class":93,"line":1766},[91,46132,30926],{"class":105},[91,46134,41757],{"class":250},[91,46136,296],{"class":153},[91,46138,30934],{"class":250},[91,46140,30937],{"class":5339},[91,46142,296],{"class":153},[91,46144,41641],{"class":250},[91,46146,30946],{"class":5339},[91,46148,296],{"class":153},[91,46150,41774],{"class":250},[91,46152,440],{"class":105},[91,46154,41690],{"class":250},[91,46156,30955],{"class":5339},[91,46158,296],{"class":153},[91,46160,466],{"class":105},[91,46162,257],{"class":250},[91,46164,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193,46195,46197,46199,46201,46203,46205,46207],{"class":93,"line":1771},[91,46166,30926],{"class":105},[91,46168,41793],{"class":250},[91,46170,296],{"class":153},[91,46172,30934],{"class":250},[91,46174,30937],{"class":5339},[91,46176,296],{"class":153},[91,46178,41774],{"class":250},[91,46180,440],{"class":105},[91,46182,41690],{"class":250},[91,46184,30946],{"class":5339},[91,46186,296],{"class":153},[91,46188,41774],{"class":250},[91,46190,466],{"class":105},[91,46192,41690],{"class":250},[91,46194,30955],{"class":5339},[91,46196,296],{"class":153},[91,46198,568],{"class":105},[91,46200,627],{"class":250},[91,46202,30964],{"class":5339},[91,46204,296],{"class":153},[91,46206,327],{"class":105},[91,46208,257],{"class":250},[91,46210,46211],{"class":93,"line":1777},[91,46212,41838],{"class":308},[91,46214,46215],{"class":93,"line":1798},[91,46216,41843],{"class":308},[91,46218,46219,46221,46223,46225,46227,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249],{"class":93,"line":1803},[91,46220,30926],{"class":105},[91,46222,41850],{"class":250},[91,46224,296],{"class":153},[91,46226,34910],{"class":250},[91,46228,30955],{"class":5339},[91,46230,296],{"class":153},[91,46232,321],{"class":105},[91,46234,627],{"class":250},[91,46236,31010],{"class":5339},[91,46238,296],{"class":153},[91,46240,466],{"class":105},[91,46242,627],{"class":250},[91,46244,30964],{"class":5339},[91,46246,296],{"class":153},[91,46248,466],{"class":105},[91,46250,257],{"class":250},[91,46252,46253,46255,46257,46259,46261,46263,46265,46267,46269,46271,46273,46275,46277,46279],{"class":93,"line":1817},[91,46254,30926],{"class":105},[91,46256,41885],{"class":250},[91,46258,296],{"class":153},[91,46260,30934],{"class":250},[91,46262,30937],{"class":5339},[91,46264,296],{"class":153},[91,46266,41641],{"class":250},[91,46268,30946],{"class":5339},[91,46270,296],{"class":153},[91,46272,41902],{"class":250},[91,46274,30955],{"class":5339},[91,46276,296],{"class":153},[91,46278,466],{"class":105},[91,46280,257],{"class":250},[91,46282,46283],{"class":93,"line":1822},[91,46284,2523],{"emptyLinePlaceholder":175},[91,46286,46287,46289,46291],{"class":93,"line":1851},[91,46288,30882],{"class":153},[91,46290,31174],{"class":97},[91,46292,31177],{"class":250},[91,46294,46295,46297,46299,46301,46303,46305],{"class":93,"line":1856},[91,46296,41927],{"class":250},[91,46298,296],{"class":153},[91,46300,30904],{"class":105},[91,46302,35265],{"class":250},[91,46304,30904],{"class":105},[91,46306,41938],{"class":250},[91,46308,46309,46311,46313,46315,46317,46319,46321,46323,46325,46327],{"class":93,"line":1873},[91,46310,7208],{"class":250},[91,46312,296],{"class":153},[91,46314,30904],{"class":105},[91,46316,35265],{"class":250},[91,46318,30904],{"class":105},[91,46320,41953],{"class":250},[91,46322,30904],{"class":105},[91,46324,35265],{"class":250},[91,46326,30904],{"class":105},[91,46328,41962],{"class":250},[91,46330,46331,46333,46335,46337,46339,46341,46343,46345,46347,46349],{"class":93,"line":1878},[91,46332,41967],{"class":250},[91,46334,296],{"class":153},[91,46336,30904],{"class":105},[91,46338,35265],{"class":250},[91,46340,30904],{"class":105},[91,46342,41978],{"class":250},[91,46344,30904],{"class":105},[91,46346,35265],{"class":250},[91,46348,30904],{"class":105},[91,46350,41987],{"class":250},[91,46352,46353,46355,46357,46359,46361,46363,46365,46367],{"class":93,"line":1883},[91,46354,41992],{"class":250},[91,46356,296],{"class":153},[91,46358,30904],{"class":105},[91,46360,35265],{"class":250},[91,46362,30904],{"class":105},[91,46364,42003],{"class":250},[91,46366,30904],{"class":105},[91,46368,42008],{"class":250},[91,46370,46371],{"class":93,"line":1888},[91,46372,42013],{"class":308},[91,46374,46375,46377,46379,46381,46383,46385],{"class":93,"line":1902},[91,46376,14875],{"class":153},[91,46378,42020],{"class":250},[91,46380,32766],{"class":5339},[91,46382,296],{"class":153},[91,46384,466],{"class":105},[91,46386,257],{"class":250},[91,46388,46389],{"class":93,"line":1907},[91,46390,2523],{"emptyLinePlaceholder":175},[91,46392,46393],{"class":93,"line":2700},[91,46394,42041],{"class":308},[91,46396,46397,46399,46401,46403,46405,46407,46409],{"class":93,"line":2714},[91,46398,14817],{"class":153},[91,46400,42048],{"class":97},[91,46402,251],{"class":250},[91,46404,30859],{"class":97},[91,46406,807],{"class":250},[91,46408,30864],{"class":97},[91,46410,30867],{"class":250},[91,46412,46413],{"class":93,"line":2722},[91,46414,42063],{"class":308},[91,46416,46417,46419,46421],{"class":93,"line":2727},[91,46418,30882],{"class":153},[91,46420,30885],{"class":105},[91,46422,42072],{"class":250},[91,46424,46425,46427,46429,46431,46433,46435],{"class":93,"line":2733},[91,46426,30898],{"class":105},[91,46428,42079],{"class":250},[91,46430,30904],{"class":105},[91,46432,30907],{"class":250},[91,46434,30910],{"class":105},[91,46436,2099],{"class":250},[91,46438,46439,46441,46443,46445],{"class":93,"line":2739},[91,46440,30926],{"class":105},[91,46442,42094],{"class":250},[91,46444,296],{"class":153},[91,46446,38090],{"class":250},[91,46448,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489],{"class":93,"line":2744},[91,46450,38095],{"class":250},[91,46452,30937],{"class":5339},[91,46454,296],{"class":153},[91,46456,321],{"class":105},[91,46458,627],{"class":250},[91,46460,30946],{"class":5339},[91,46462,296],{"class":153},[91,46464,452],{"class":105},[91,46466,627],{"class":250},[91,46468,30955],{"class":5339},[91,46470,296],{"class":153},[91,46472,618],{"class":105},[91,46474,627],{"class":250},[91,46476,31010],{"class":5339},[91,46478,296],{"class":153},[91,46480,327],{"class":105},[91,46482,627],{"class":250},[91,46484,30964],{"class":5339},[91,46486,296],{"class":153},[91,46488,321],{"class":105},[91,46490,38128],{"class":250},[91,46492,46493],{"class":93,"line":8071},[91,46494,38133],{"class":250},[91,46496,46497,46499,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521],{"class":93,"line":8095},[91,46498,38178],{"class":250},[91,46500,30955],{"class":5339},[91,46502,296],{"class":153},[91,46504,321],{"class":105},[91,46506,627],{"class":250},[91,46508,31010],{"class":5339},[91,46510,296],{"class":153},[91,46512,327],{"class":105},[91,46514,627],{"class":250},[91,46516,30964],{"class":5339},[91,46518,296],{"class":153},[91,46520,466],{"class":105},[91,46522,257],{"class":250},[91,46524,46525],{"class":93,"line":8100},[91,46526,38207],{"class":250},[91,46528,46529,46531,46533,46535],{"class":93,"line":8106},[91,46530,30926],{"class":105},[91,46532,42185],{"class":250},[91,46534,296],{"class":153},[91,46536,38090],{"class":250},[91,46538,46539,46541,46543,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563],{"class":93,"line":8133},[91,46540,38095],{"class":250},[91,46542,30937],{"class":5339},[91,46544,296],{"class":153},[91,46546,452],{"class":105},[91,46548,627],{"class":250},[91,46550,30946],{"class":5339},[91,46552,296],{"class":153},[91,46554,452],{"class":105},[91,46556,627],{"class":250},[91,46558,30955],{"class":5339},[91,46560,296],{"class":153},[91,46562,466],{"class":105},[91,46564,38128],{"class":250},[91,46566,46567],{"class":93,"line":8138},[91,46568,38133],{"class":250},[91,46570,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603],{"class":93,"line":8144},[91,46572,38095],{"class":250},[91,46574,30937],{"class":5339},[91,46576,296],{"class":153},[91,46578,452],{"class":105},[91,46580,627],{"class":250},[91,46582,30946],{"class":5339},[91,46584,296],{"class":153},[91,46586,42240],{"class":105},[91,46588,627],{"class":250},[91,46590,30955],{"class":5339},[91,46592,296],{"class":153},[91,46594,321],{"class":105},[91,46596,627],{"class":250},[91,46598,30964],{"class":5339},[91,46600,296],{"class":153},[91,46602,466],{"class":105},[91,46604,38128],{"class":250},[91,46606,46607],{"class":93,"line":8156},[91,46608,38133],{"class":250},[91,46610,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635],{"class":93,"line":8168},[91,46612,38178],{"class":250},[91,46614,30955],{"class":5339},[91,46616,296],{"class":153},[91,46618,321],{"class":105},[91,46620,627],{"class":250},[91,46622,31010],{"class":5339},[91,46624,296],{"class":153},[91,46626,327],{"class":105},[91,46628,627],{"class":250},[91,46630,30964],{"class":5339},[91,46632,296],{"class":153},[91,46634,466],{"class":105},[91,46636,257],{"class":250},[91,46638,46639],{"class":93,"line":8180},[91,46640,38207],{"class":250},[91,46642,46643,46645,46647,46649],{"class":93,"line":9839},[91,46644,30926],{"class":105},[91,46646,42301],{"class":250},[91,46648,296],{"class":153},[91,46650,38090],{"class":250},[91,46652,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681],{"class":93,"line":9864},[91,46654,42310],{"class":250},[91,46656,42240],{"class":105},[91,46658,627],{"class":250},[91,46660,452],{"class":105},[91,46662,42319],{"class":250},[91,46664,458],{"class":105},[91,46666,627],{"class":250},[91,46668,32151],{"class":105},[91,46670,42328],{"class":250},[91,46672,850],{"class":105},[91,46674,627],{"class":250},[91,46676,446],{"class":105},[91,46678,42337],{"class":250},[91,46680,446],{"class":105},[91,46682,38128],{"class":250},[91,46684,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713],{"class":93,"line":9887},[91,46686,42310],{"class":250},[91,46688,34951],{"class":105},[91,46690,627],{"class":250},[91,46692,32151],{"class":105},[91,46694,42319],{"class":250},[91,46696,32151],{"class":105},[91,46698,627],{"class":250},[91,46700,42240],{"class":105},[91,46702,42328],{"class":250},[91,46704,446],{"class":105},[91,46706,627],{"class":250},[91,46708,458],{"class":105},[91,46710,42337],{"class":250},[91,46712,452],{"class":105},[91,46714,38128],{"class":250},[91,46716,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741],{"class":93,"line":9911},[91,46718,38178],{"class":250},[91,46720,30955],{"class":5339},[91,46722,296],{"class":153},[91,46724,321],{"class":105},[91,46726,627],{"class":250},[91,46728,31010],{"class":5339},[91,46730,296],{"class":153},[91,46732,327],{"class":105},[91,46734,627],{"class":250},[91,46736,30964],{"class":5339},[91,46738,296],{"class":153},[91,46740,466],{"class":105},[91,46742,257],{"class":250},[91,46744,46745],{"class":93,"line":9916},[91,46746,38207],{"class":250},[91,46748,46749,46751,46753,46755],{"class":93,"line":9921},[91,46750,30926],{"class":105},[91,46752,42412],{"class":250},[91,46754,296],{"class":153},[91,46756,38090],{"class":250},[91,46758,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787],{"class":93,"line":9926},[91,46760,42310],{"class":250},[91,46762,42423],{"class":105},[91,46764,627],{"class":250},[91,46766,42240],{"class":105},[91,46768,42319],{"class":250},[91,46770,458],{"class":105},[91,46772,627],{"class":250},[91,46774,42436],{"class":105},[91,46776,42328],{"class":250},[91,46778,850],{"class":105},[91,46780,627],{"class":250},[91,46782,856],{"class":105},[91,46784,42337],{"class":250},[91,46786,452],{"class":105},[91,46788,38128],{"class":250},[91,46790,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819],{"class":93,"line":9935},[91,46792,42310],{"class":250},[91,46794,38538],{"class":105},[91,46796,627],{"class":250},[91,46798,21171],{"class":105},[91,46800,42319],{"class":250},[91,46802,867],{"class":105},[91,46804,627],{"class":250},[91,46806,31582],{"class":105},[91,46808,42328],{"class":250},[91,46810,1049],{"class":105},[91,46812,627],{"class":250},[91,46814,452],{"class":105},[91,46816,42337],{"class":250},[91,46818,452],{"class":105},[91,46820,38128],{"class":250},[91,46822,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851],{"class":93,"line":9940},[91,46824,42310],{"class":250},[91,46826,38538],{"class":105},[91,46828,627],{"class":250},[91,46830,32151],{"class":105},[91,46832,42319],{"class":250},[91,46834,32151],{"class":105},[91,46836,627],{"class":250},[91,46838,34951],{"class":105},[91,46840,42328],{"class":250},[91,46842,1049],{"class":105},[91,46844,627],{"class":250},[91,46846,452],{"class":105},[91,46848,42337],{"class":250},[91,46850,452],{"class":105},[91,46852,38128],{"class":250},[91,46854,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883],{"class":93,"line":9946},[91,46856,42310],{"class":250},[91,46858,38538],{"class":105},[91,46860,627],{"class":250},[91,46862,867],{"class":105},[91,46864,42319],{"class":250},[91,46866,32151],{"class":105},[91,46868,627],{"class":250},[91,46870,42533],{"class":105},[91,46872,42328],{"class":250},[91,46874,446],{"class":105},[91,46876,627],{"class":250},[91,46878,452],{"class":105},[91,46880,42337],{"class":250},[91,46882,452],{"class":105},[91,46884,38128],{"class":250},[91,46886,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915],{"class":93,"line":9967},[91,46888,42310],{"class":250},[91,46890,42554],{"class":105},[91,46892,627],{"class":250},[91,46894,34951],{"class":105},[91,46896,42319],{"class":250},[91,46898,21171],{"class":105},[91,46900,627],{"class":250},[91,46902,42567],{"class":105},[91,46904,42328],{"class":250},[91,46906,446],{"class":105},[91,46908,627],{"class":250},[91,46910,32151],{"class":105},[91,46912,42337],{"class":250},[91,46914,32151],{"class":105},[91,46916,38128],{"class":250},[91,46918,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943],{"class":93,"line":9973},[91,46920,38178],{"class":250},[91,46922,30955],{"class":5339},[91,46924,296],{"class":153},[91,46926,321],{"class":105},[91,46928,627],{"class":250},[91,46930,31010],{"class":5339},[91,46932,296],{"class":153},[91,46934,327],{"class":105},[91,46936,627],{"class":250},[91,46938,30964],{"class":5339},[91,46940,296],{"class":153},[91,46942,466],{"class":105},[91,46944,257],{"class":250},[91,46946,46947],{"class":93,"line":9987},[91,46948,38207],{"class":250},[91,46950,46951,46953,46955,46957],{"class":93,"line":9993},[91,46952,30926],{"class":105},[91,46954,42620],{"class":250},[91,46956,296],{"class":153},[91,46958,38090],{"class":250},[91,46960,46961,46963,46965,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987,46989],{"class":93,"line":10020},[91,46962,42310],{"class":250},[91,46964,42631],{"class":105},[91,46966,627],{"class":250},[91,46968,34951],{"class":105},[91,46970,42319],{"class":250},[91,46972,21171],{"class":105},[91,46974,627],{"class":250},[91,46976,42567],{"class":105},[91,46978,42328],{"class":250},[91,46980,446],{"class":105},[91,46982,627],{"class":250},[91,46984,32151],{"class":105},[91,46986,42337],{"class":250},[91,46988,32151],{"class":105},[91,46990,38128],{"class":250},[91,46992,46993,46995,46997,46999,47001,47003,47005,47007,47009,47011,47013,47015,47017,47019,47021],{"class":93,"line":10029},[91,46994,42310],{"class":250},[91,46996,42631],{"class":105},[91,46998,627],{"class":250},[91,47000,35021],{"class":105},[91,47002,42319],{"class":250},[91,47004,42240],{"class":105},[91,47006,627],{"class":250},[91,47008,35021],{"class":105},[91,47010,42328],{"class":250},[91,47012,856],{"class":105},[91,47014,627],{"class":250},[91,47016,32151],{"class":105},[91,47018,42337],{"class":250},[91,47020,32151],{"class":105},[91,47022,38128],{"class":250},[91,47024,47025,47027,47029,47031,47033],{"class":93,"line":10035},[91,47026,42694],{"class":250},[91,47028,466],{"class":105},[91,47030,627],{"class":250},[91,47032,466],{"class":105},[91,47034,42703],{"class":250},[91,47036,47037],{"class":93,"line":10043},[91,47038,38871],{"class":250},[91,47040,47041,47043,47045,47047,47049],{"class":93,"line":10048},[91,47042,38876],{"class":250},[91,47044,42714],{"class":105},[91,47046,627],{"class":250},[91,47048,327],{"class":105},[91,47050,257],{"class":250},[91,47052,47053],{"class":93,"line":16727},[91,47054,38207],{"class":250},[91,47056,47057],{"class":93,"line":16733},[91,47058,42729],{"class":308},[91,47060,47061,47063,47065,47067,47069],{"class":93,"line":16756},[91,47062,3526],{"class":153},[91,47064,38949],{"class":250},[91,47066,26165],{"class":153},[91,47068,38954],{"class":105},[91,47070,38957],{"class":250},[91,47072,47073,47075,47077],{"class":93,"line":16762},[91,47074,4765],{"class":153},[91,47076,38969],{"class":105},[91,47078,38972],{"class":250},[91,47080,47081,47083,47085,47087,47089,47091,47093,47095,47097],{"class":93,"line":16785},[91,47082,38982],{"class":250},[91,47084,42756],{"class":5339},[91,47086,296],{"class":153},[91,47088,42761],{"class":101},[91,47090,627],{"class":250},[91,47092,38985],{"class":5339},[91,47094,296],{"class":153},[91,47096,38990],{"class":101},[91,47098,257],{"class":250},[91,47100,47101],{"class":93,"line":16799},[91,47102,42776],{"class":308},[91,47104,47105],{"class":93,"line":16819},[91,47106,42781],{"class":308},[91,47108,47109],{"class":93,"line":16825},[91,47110,42786],{"class":308},[91,47112,47113],{"class":93,"line":16836},[91,47114,42791],{"class":308},[91,47116,47117],{"class":93,"line":16859},[91,47118,42796],{"class":308},[91,47120,47121],{"class":93,"line":16881},[91,47122,42801],{"class":308},[91,47124,47125,47127,47129,47131,47133,47135],{"class":93,"line":16886},[91,47126,39002],{"class":153},[91,47128,39005],{"class":250},[91,47130,39008],{"class":153},[91,47132,39011],{"class":153},[91,47134,39014],{"class":105},[91,47136,3862],{"class":250},[91,47138,47139,47141,47143],{"class":93,"line":16892},[91,47140,39026],{"class":250},[91,47142,440],{"class":105},[91,47144,257],{"class":250},[91,47146,47147,47149,47151],{"class":93,"line":16906},[91,47148,42828],{"class":153},[91,47150,38969],{"class":105},[91,47152,39045],{"class":250},[91,47154,47155,47157,47159,47161,47163],{"class":93,"line":16919},[91,47156,42837],{"class":250},[91,47158,440],{"class":105},[91,47160,627],{"class":250},[91,47162,39067],{"class":105},[91,47164,257],{"class":250},[91,47166,47167,47169,47171,47173,47175,47177],{"class":93,"line":16924},[91,47168,42850],{"class":153},[91,47170,39005],{"class":250},[91,47172,39008],{"class":153},[91,47174,39011],{"class":153},[91,47176,39014],{"class":105},[91,47178,3862],{"class":250},[91,47180,47181,47183,47185],{"class":93,"line":16938},[91,47182,42865],{"class":250},[91,47184,440],{"class":105},[91,47186,257],{"class":250},[91,47188,47189],{"class":93,"line":16943},[91,47190,35246],{"class":308},[91,47192,47193,47195,47197],{"class":93,"line":16949},[91,47194,30882],{"class":153},[91,47196,31174],{"class":97},[91,47198,31177],{"class":250},[91,47200,47201,47203,47205,47207],{"class":93,"line":16954},[91,47202,31182],{"class":250},[91,47204,296],{"class":153},[91,47206,30904],{"class":105},[91,47208,42892],{"class":250},[91,47210,47211,47213,47215,47217],{"class":93,"line":16968},[91,47212,31182],{"class":250},[91,47214,296],{"class":153},[91,47216,30904],{"class":105},[91,47218,42903],{"class":250},[91,47220,47221,47223,47225,47227],{"class":93,"line":16973},[91,47222,31182],{"class":250},[91,47224,296],{"class":153},[91,47226,30904],{"class":105},[91,47228,42914],{"class":250},[91,47230,47231,47233,47235,47237],{"class":93,"line":16978},[91,47232,31182],{"class":250},[91,47234,296],{"class":153},[91,47236,30904],{"class":105},[91,47238,42925],{"class":250},[91,47240,47241,47243,47245,47247],{"class":93,"line":16992},[91,47242,31182],{"class":250},[91,47244,296],{"class":153},[91,47246,30904],{"class":105},[91,47248,42936],{"class":250},[91,47250,47251,47253],{"class":93,"line":17004},[91,47252,14875],{"class":153},[91,47254,31290],{"class":250},[91,47256,47257],{"class":93,"line":17009},[91,47258,2523],{"emptyLinePlaceholder":175},[91,47260,47261],{"class":93,"line":17022},[91,47262,42951],{"class":308},[91,47264,47265,47267,47269,47271,47273],{"class":93,"line":17027},[91,47266,1655],{"class":153},[91,47268,31301],{"class":105},[91,47270,3072],{"class":153},[91,47272,31306],{"class":101},[91,47274,3862],{"class":250},[91,47276,47277,47279,47281,47283,47285,47287,47289,47291,47293],{"class":93,"line":17032},[91,47278,31318],{"class":250},[91,47280,296],{"class":153},[91,47282,30532],{"class":250},[91,47284,31325],{"class":101},[91,47286,1828],{"class":153},[91,47288,31330],{"class":250},[91,47290,1825],{"class":153},[91,47292,30557],{"class":101},[91,47294,257],{"class":250},[91,47296,47297,47299,47301],{"class":93,"line":17037},[91,47298,31370],{"class":250},[91,47300,296],{"class":153},[91,47302,42992],{"class":250},[91,47304,47305,47307,47309,47311,47313,47315,47317,47319],{"class":93,"line":17050},[91,47306,31380],{"class":105},[91,47308,31383],{"class":250},[91,47310,466],{"class":105},[91,47312,627],{"class":250},[91,47314,31582],{"class":105},[91,47316,627],{"class":250},[91,47318,31582],{"class":105},[91,47320,31396],{"class":250},[22121,47322,47324],{"id":47323},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[21,47326,47327],{},"计算图片的均值与方差，用于训练中归一化处理操作",[82,47329,47331],{"className":30459,"code":47330,"language":30461,"meta":26,"style":26},"# 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",[88,47332,47333,47338,47351,47356,47362,47367,47377,47381,47386,47396,47400,47405,47415,47432,47436,47441,47453,47465,47496,47505,47515,47525,47529,47534,47549,47553,47558,47563,47568,47578,47583,47608,47612,47617,47632,47636,47649,47653,47658,47663,47668,47673,47678,47688,47698,47721,47729,47737,47745,47749,47761,47765,47770,47774,47778,47785,47805,47829,47836,47850,47855,47860,47864,47878,47882,47894],{"__ignoreMap":26},[91,47334,47335],{"class":93,"line":94},[91,47336,47337],{"class":308},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[91,47339,47340,47342,47345,47348],{"class":93,"line":38},[91,47341,30818],{"class":153},[91,47343,47344],{"class":105}," PIL",[91,47346,47347],{"class":153}," import",[91,47349,47350],{"class":250}," Image\n",[91,47352,47353],{"class":93,"line":1304},[91,47354,47355],{"class":308},"# os 用来处理文件夹和文件路径\n",[91,47357,47358,47360],{"class":93,"line":1319},[91,47359,30473],{"class":153},[91,47361,45386],{"class":250},[91,47363,47364],{"class":93,"line":1325},[91,47365,47366],{"class":308},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[91,47368,47369,47371,47373,47375],{"class":93,"line":1339},[91,47370,30473],{"class":153},[91,47372,31461],{"class":250},[91,47374,31464],{"class":153},[91,47376,31467],{"class":250},[91,47378,47379],{"class":93,"line":1345},[91,47380,2523],{"emptyLinePlaceholder":175},[91,47382,47383],{"class":93,"line":1436},[91,47384,47385],{"class":308},"# 文件夹路径，包含所有图片文件\n",[91,47387,47388,47391,47393],{"class":93,"line":1442},[91,47389,47390],{"class":250},"folder_path ",[91,47392,296],{"class":153},[91,47394,47395],{"class":101}," 'data_cat_dog'\n",[91,47397,47398],{"class":93,"line":1454},[91,47399,2523],{"emptyLinePlaceholder":175},[91,47401,47402],{"class":93,"line":1736},[91,47403,47404],{"class":308},"# 初始化累积变量\n",[91,47406,47407,47410,47412],{"class":93,"line":1741},[91,47408,47409],{"class":250},"total_pixels ",[91,47411,296],{"class":153},[91,47413,47414],{"class":105}," 0\n",[91,47416,47417,47420,47422,47425,47427,47429],{"class":93,"line":1747},[91,47418,47419],{"class":250},"sum_normalized_pixel_values ",[91,47421,296],{"class":153},[91,47423,47424],{"class":250}," np.zeros(",[91,47426,321],{"class":105},[91,47428,45889],{"class":250},[91,47430,47431],{"class":308},"# 如果是RGB图像，需要三个通道的均值和方差\n",[91,47433,47434],{"class":93,"line":1752},[91,47435,2523],{"emptyLinePlaceholder":175},[91,47437,47438],{"class":93,"line":1766},[91,47439,47440],{"class":308},"# 遍历文件夹中的图片文件\n",[91,47442,47443,47445,47448,47450],{"class":93,"line":1771},[91,47444,3148],{"class":153},[91,47446,47447],{"class":250}," root, dirs, files ",[91,47449,26165],{"class":153},[91,47451,47452],{"class":250}," os.walk(folder_path):\n",[91,47454,47455,47457,47460,47462],{"class":93,"line":1777},[91,47456,3324],{"class":153},[91,47458,47459],{"class":250}," filename ",[91,47461,26165],{"class":153},[91,47463,47464],{"class":250}," files:\n",[91,47466,47467,47469,47472,47475,47477,47480,47482,47485,47487,47490,47493],{"class":93,"line":1798},[91,47468,2620],{"class":153},[91,47470,47471],{"class":250}," filename.endswith((",[91,47473,47474],{"class":101},"'.jpg'",[91,47476,12558],{"class":250},[91,47478,47479],{"class":101},"'.jpeg'",[91,47481,12558],{"class":250},[91,47483,47484],{"class":101},"'.png'",[91,47486,12558],{"class":250},[91,47488,47489],{"class":101},"'.bmp'",[91,47491,47492],{"class":250},")):  ",[91,47494,47495],{"class":308},"# 可根据实际情况添加其他格式\n",[91,47497,47498,47500,47502],{"class":93,"line":1803},[91,47499,45754],{"class":250},[91,47501,296],{"class":153},[91,47503,47504],{"class":250}," os.path.join(root, filename)\n",[91,47506,47507,47510,47512],{"class":93,"line":1817},[91,47508,47509],{"class":250},"            image ",[91,47511,296],{"class":153},[91,47513,47514],{"class":250}," Image.open(image_path)\n",[91,47516,47517,47520,47522],{"class":93,"line":1822},[91,47518,47519],{"class":250},"            image_array ",[91,47521,296],{"class":153},[91,47523,47524],{"class":250}," np.array(image)\n",[91,47526,47527],{"class":93,"line":1851},[91,47528,2523],{"emptyLinePlaceholder":175},[91,47530,47531],{"class":93,"line":1856},[91,47532,47533],{"class":308},"            # 归一化像素值到0-1之间\n",[91,47535,47536,47539,47541,47544,47546],{"class":93,"line":1873},[91,47537,47538],{"class":250},"            normalized_image_array ",[91,47540,296],{"class":153},[91,47542,47543],{"class":250}," image_array ",[91,47545,833],{"class":153},[91,47547,47548],{"class":105}," 255.0\n",[91,47550,47551],{"class":93,"line":1878},[91,47552,2523],{"emptyLinePlaceholder":175},[91,47554,47555],{"class":93,"line":1883},[91,47556,47557],{"class":308},"            # print(image_path)\n",[91,47559,47560],{"class":93,"line":1888},[91,47561,47562],{"class":308},"            # print(normalized_image_array.shape)\n",[91,47564,47565],{"class":93,"line":1902},[91,47566,47567],{"class":308},"            # 累积归一化后的像素值和像素数量\n",[91,47569,47570,47573,47575],{"class":93,"line":1907},[91,47571,47572],{"class":250},"            total_pixels ",[91,47574,9600],{"class":153},[91,47576,47577],{"class":250}," normalized_image_array.size\n",[91,47579,47580],{"class":93,"line":2700},[91,47581,47582],{"class":308},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[91,47584,47585,47588,47590,47593,47596,47598,47600,47602,47604,47606],{"class":93,"line":2714},[91,47586,47587],{"class":250},"            sum_normalized_pixel_values ",[91,47589,9600],{"class":153},[91,47591,47592],{"class":250}," np.sum(normalized_image_array, ",[91,47594,47595],{"class":5339},"axis",[91,47597,296],{"class":153},[91,47599,251],{"class":250},[91,47601,440],{"class":105},[91,47603,12558],{"class":250},[91,47605,466],{"class":105},[91,47607,30578],{"class":250},[91,47609,47610],{"class":93,"line":2722},[91,47611,2523],{"emptyLinePlaceholder":175},[91,47613,47614],{"class":93,"line":2727},[91,47615,47616],{"class":308},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[91,47618,47619,47622,47624,47627,47629],{"class":93,"line":2733},[91,47620,47621],{"class":250},"mean ",[91,47623,296],{"class":153},[91,47625,47626],{"class":250}," sum_normalized_pixel_values ",[91,47628,833],{"class":153},[91,47630,47631],{"class":250}," total_pixels\n",[91,47633,47634],{"class":93,"line":2739},[91,47635,2523],{"emptyLinePlaceholder":175},[91,47637,47638,47641,47643,47645,47647],{"class":93,"line":2744},[91,47639,47640],{"class":250},"sum_squared_diff ",[91,47642,296],{"class":153},[91,47644,47424],{"class":250},[91,47646,321],{"class":105},[91,47648,257],{"class":250},[91,47650,47651],{"class":93,"line":8071},[91,47652,2523],{"emptyLinePlaceholder":175},[91,47654,47655],{"class":93,"line":8095},[91,47656,47657],{"class":308},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[91,47659,47660],{"class":93,"line":8100},[91,47661,47662],{"class":308},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[91,47664,47665],{"class":93,"line":8106},[91,47666,47667],{"class":308},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[91,47669,47670],{"class":93,"line":8133},[91,47671,47672],{"class":308},"# Image.open(image_path)：打开图片\n",[91,47674,47675],{"class":93,"line":8138},[91,47676,47677],{"class":308},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[91,47679,47680,47682,47684,47686],{"class":93,"line":8144},[91,47681,3148],{"class":153},[91,47683,47447],{"class":250},[91,47685,26165],{"class":153},[91,47687,47452],{"class":250},[91,47689,47690,47692,47694,47696],{"class":93,"line":8156},[91,47691,3324],{"class":153},[91,47693,47459],{"class":250},[91,47695,26165],{"class":153},[91,47697,47464],{"class":250},[91,47699,47700,47702,47704,47706,47708,47710,47712,47714,47716,47718],{"class":93,"line":8168},[91,47701,2620],{"class":153},[91,47703,47471],{"class":250},[91,47705,47474],{"class":101},[91,47707,12558],{"class":250},[91,47709,47479],{"class":101},[91,47711,12558],{"class":250},[91,47713,47484],{"class":101},[91,47715,12558],{"class":250},[91,47717,47489],{"class":101},[91,47719,47720],{"class":250},")):\n",[91,47722,47723,47725,47727],{"class":93,"line":8180},[91,47724,45754],{"class":250},[91,47726,296],{"class":153},[91,47728,47504],{"class":250},[91,47730,47731,47733,47735],{"class":93,"line":9839},[91,47732,47509],{"class":250},[91,47734,296],{"class":153},[91,47736,47514],{"class":250},[91,47738,47739,47741,47743],{"class":93,"line":9864},[91,47740,47519],{"class":250},[91,47742,296],{"class":153},[91,47744,47524],{"class":250},[91,47746,47747],{"class":93,"line":9887},[91,47748,47533],{"class":308},[91,47750,47751,47753,47755,47757,47759],{"class":93,"line":9911},[91,47752,47538],{"class":250},[91,47754,296],{"class":153},[91,47756,47543],{"class":250},[91,47758,833],{"class":153},[91,47760,47548],{"class":105},[91,47762,47763],{"class":93,"line":9916},[91,47764,47562],{"class":308},[91,47766,47767],{"class":93,"line":9921},[91,47768,47769],{"class":308},"            # print(mean.shape)\n",[91,47771,47772],{"class":93,"line":9926},[91,47773,47557],{"class":308},[91,47775,47776],{"class":93,"line":9935},[91,47777,2523],{"emptyLinePlaceholder":175},[91,47779,47780,47783],{"class":93,"line":9940},[91,47781,47782],{"class":153},"            try",[91,47784,3862],{"class":250},[91,47786,47787,47790,47792,47795,47797,47800,47802],{"class":93,"line":9946},[91,47788,47789],{"class":250},"                diff ",[91,47791,296],{"class":153},[91,47793,47794],{"class":250}," (normalized_image_array ",[91,47796,781],{"class":153},[91,47798,47799],{"class":250}," mean) ",[91,47801,10784],{"class":153},[91,47803,47804],{"class":105}," 2\n",[91,47806,47807,47810,47812,47815,47817,47819,47821,47823,47825,47827],{"class":93,"line":9967},[91,47808,47809],{"class":250},"                sum_squared_diff ",[91,47811,9600],{"class":153},[91,47813,47814],{"class":250}," np.sum(diff, ",[91,47816,47595],{"class":5339},[91,47818,296],{"class":153},[91,47820,251],{"class":250},[91,47822,440],{"class":105},[91,47824,12558],{"class":250},[91,47826,466],{"class":105},[91,47828,30578],{"class":250},[91,47830,47831,47834],{"class":93,"line":9973},[91,47832,47833],{"class":153},"            except",[91,47835,3862],{"class":250},[91,47837,47838,47841,47843,47845,47848],{"class":93,"line":9987},[91,47839,47840],{"class":105},"                print",[91,47842,251],{"class":250},[91,47844,302],{"class":153},[91,47846,47847],{"class":101},"\"捕获到自定义异常\"",[91,47849,257],{"class":250},[91,47851,47852],{"class":93,"line":9993},[91,47853,47854],{"class":308},"            # diff = (normalized_image_array - mean) ** 2\n",[91,47856,47857],{"class":93,"line":10020},[91,47858,47859],{"class":308},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[91,47861,47862],{"class":93,"line":10029},[91,47863,2523],{"emptyLinePlaceholder":175},[91,47865,47866,47869,47871,47874,47876],{"class":93,"line":10035},[91,47867,47868],{"class":250},"variance ",[91,47870,296],{"class":153},[91,47872,47873],{"class":250}," sum_squared_diff ",[91,47875,833],{"class":153},[91,47877,47631],{"class":250},[91,47879,47880],{"class":93,"line":10043},[91,47881,2523],{"emptyLinePlaceholder":175},[91,47883,47884,47886,47888,47891],{"class":93,"line":10048},[91,47885,30496],{"class":105},[91,47887,251],{"class":250},[91,47889,47890],{"class":101},"\"Mean:\"",[91,47892,47893],{"class":250},", mean)\n",[91,47895,47896,47898,47900,47903],{"class":93,"line":16727},[91,47897,30496],{"class":105},[91,47899,251],{"class":250},[91,47901,47902],{"class":101},"\"Variance:\"",[91,47904,47905],{"class":250},", variance)\n",[82,47907,47909],{"className":30459,"code":47908,"language":30461,"meta":26,"style":26},"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",[88,47910,47911,47917,47923,47933,47939,47949,47963,47973,47983,47993,47997,48007,48017,48021,48025,48033,48038,48043,48062,48066,48071,48076,48081,48086,48127,48132,48142,48147,48160,48165,48170,48175,48180,48185,48189,48194,48199,48221,48225,48257,48271,48281,48291,48295,48305,48319,48329,48339,48349,48355,48359,48363,48367,48371,48375,48383,48403,48407,48411,48415,48419,48435,48439,48443,48451,48455,48459,48467,48471,48475,48479,48487,48491,48495,48499,48507,48511,48519,48523,48531,48535,48543,48547,48555,48559,48563,48571,48575,48579,48591,48615,48629,48633,48637,48641,48649,48653,48661,48665,48673,48677,48685,48689,48697,48701,48709,48713,48725,48729,48737,48741,48749,48753,48757,48761,48765,48773,48777,48793,48797,48805,48809,48813,48817,48821,48825,48829,48833,48849,48853,48865,48869,48881,48885,48897,48901,48909,48913,48921,48925,48929,48933,48939,48943,48951,48955,48971,48975,48983,48987,49003,49015,49019,49031,49035,49039,49047,49051,49055,49063,49067,49075,49079,49087,49091,49095,49137,49179,49183,49187,49203,49207,49223,49227,49231,49239,49243,49247,49259,49297,49301,49305,49313,49317,49331,49341,49347,49353,49359,49365,49369,49373,49379,49383,49387,49395,49399,49417,49421,49425,49429,49445,49449,49453,49457,49461,49465,49485,49505,49509,49513,49517,49525,49533,49537,49553,49573,49593,49597,49602,49611,49620,49625,49630,49635,49648,49653,49662,49671,49688],{"__ignoreMap":26},[91,47912,47913,47915],{"class":93,"line":94},[91,47914,30473],{"class":153},[91,47916,31903],{"class":250},[91,47918,47919,47921],{"class":93,"line":38},[91,47920,30473],{"class":153},[91,47922,31910],{"class":250},[91,47924,47925,47927,47929,47931],{"class":93,"line":1304},[91,47926,30473],{"class":153},[91,47928,31921],{"class":250},[91,47930,31464],{"class":153},[91,47932,31926],{"class":250},[91,47934,47935,47937],{"class":93,"line":1319},[91,47936,30473],{"class":153},[91,47938,30476],{"class":250},[91,47940,47941,47943,47945,47947],{"class":93,"line":1325},[91,47942,30818],{"class":153},[91,47944,31496],{"class":250},[91,47946,30473],{"class":153},[91,47948,31943],{"class":250},[91,47950,47951,47953,47955,47957,47960],{"class":93,"line":1339},[91,47952,30818],{"class":153},[91,47954,31449],{"class":250},[91,47956,30473],{"class":153},[91,47958,47959],{"class":250}," ImageFolder ",[91,47961,47962],{"class":308},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[91,47964,47965,47967,47969,47971],{"class":93,"line":1345},[91,47966,30818],{"class":153},[91,47968,31479],{"class":250},[91,47970,30473],{"class":153},[91,47972,31484],{"class":250},[91,47974,47975,47977,47979,47981],{"class":93,"line":1436},[91,47976,30473],{"class":153},[91,47978,31496],{"class":250},[91,47980,31464],{"class":153},[91,47982,31501],{"class":250},[91,47984,47985,47987,47989,47991],{"class":93,"line":1442},[91,47986,30473],{"class":153},[91,47988,31513],{"class":250},[91,47990,31464],{"class":153},[91,47992,31518],{"class":250},[91,47994,47995],{"class":93,"line":1454},[91,47996,31988],{"class":308},[91,47998,47999,48001,48003,48005],{"class":93,"line":1736},[91,48000,30818],{"class":153},[91,48002,31995],{"class":250},[91,48004,30473],{"class":153},[91,48006,43112],{"class":250},[91,48008,48009,48011,48013,48015],{"class":93,"line":1741},[91,48010,30818],{"class":153},[91,48012,30821],{"class":250},[91,48014,30473],{"class":153},[91,48016,30826],{"class":250},[91,48018,48019],{"class":93,"line":1747},[91,48020,2523],{"emptyLinePlaceholder":175},[91,48022,48023],{"class":93,"line":1752},[91,48024,32023],{"class":308},[91,48026,48027,48029,48031],{"class":93,"line":1766},[91,48028,32028],{"class":153},[91,48030,32031],{"class":97},[91,48032,32034],{"class":250},[91,48034,48035],{"class":93,"line":1771},[91,48036,48037],{"class":308},"    # 导入自己的数据集，并进行数据处理\n",[91,48039,48040],{"class":93,"line":1777},[91,48041,48042],{"class":308},"    # 定义数据集的路径\n",[91,48044,48045,48048,48050,48052,48054,48056,48060],{"class":93,"line":1798},[91,48046,48047],{"class":105},"    ROOT_PATH",[91,48049,296],{"class":153},[91,48051,919],{"class":153},[91,48053,500],{"class":101},[91,48055,807],{"class":105},[91,48057,48059],{"class":48058},"sA_wV","\u002Fdata\u002Ftrain",[91,48061,25255],{"class":101},[91,48063,48064],{"class":93,"line":1803},[91,48065,2523],{"emptyLinePlaceholder":175},[91,48067,48068],{"class":93,"line":1817},[91,48069,48070],{"class":308},"    # 定义归一化方法\n",[91,48072,48073],{"class":93,"line":1822},[91,48074,48075],{"class":308},"    # 这里需要先计算一下数据集的均值和方差\n",[91,48077,48078],{"class":93,"line":1851},[91,48079,48080],{"class":308},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[91,48082,48083],{"class":93,"line":1856},[91,48084,48085],{"class":308},"    # 第一个参数是均值，第二个参数是方差\n",[91,48087,48088,48091,48093,48096,48099,48101,48104,48106,48109,48112,48115,48117,48120,48122,48125],{"class":93,"line":1873},[91,48089,48090],{"class":250},"    normalize",[91,48092,296],{"class":153},[91,48094,48095],{"class":250},"transforms.Normalize([",[91,48097,48098],{"class":105},"0.162",[91,48100,627],{"class":250},[91,48102,48103],{"class":105},"0.151",[91,48105,627],{"class":250},[91,48107,48108],{"class":105},"0.138",[91,48110,48111],{"class":250},"],[",[91,48113,48114],{"class":105},"0.058",[91,48116,627],{"class":250},[91,48118,48119],{"class":105},"0.052",[91,48121,627],{"class":250},[91,48123,48124],{"class":105},"0.048",[91,48126,4780],{"class":250},[91,48128,48129],{"class":93,"line":1878},[91,48130,48131],{"class":308},"    # 定义数据集处理方法变量\n",[91,48133,48134,48137,48139],{"class":93,"line":1883},[91,48135,48136],{"class":250},"    train_transform",[91,48138,296],{"class":153},[91,48140,48141],{"class":250},"transforms.Compose([\n",[91,48143,48144],{"class":93,"line":1888},[91,48145,48146],{"class":308},"        # 调整图像大小为224*224\n",[91,48148,48149,48152,48154,48156,48158],{"class":93,"line":1902},[91,48150,48151],{"class":250},"        transforms.Resize((",[91,48153,31582],{"class":105},[91,48155,627],{"class":250},[91,48157,31582],{"class":105},[91,48159,42703],{"class":250},[91,48161,48162],{"class":93,"line":1907},[91,48163,48164],{"class":308},"        # 将图像转换为张量\n",[91,48166,48167],{"class":93,"line":2700},[91,48168,48169],{"class":250},"        transforms.ToTensor(),\n",[91,48171,48172],{"class":93,"line":2714},[91,48173,48174],{"class":250},"        normalize])\n",[91,48176,48177],{"class":93,"line":2722},[91,48178,48179],{"class":308},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[91,48181,48182],{"class":93,"line":2727},[91,48183,48184],{"class":308},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[91,48186,48187],{"class":93,"line":2733},[91,48188,2523],{"emptyLinePlaceholder":175},[91,48190,48191],{"class":93,"line":2739},[91,48192,48193],{"class":308},"    # 加载数据集\n",[91,48195,48196],{"class":93,"line":2744},[91,48197,48198],{"class":308},"    # 传入数据集路径与处理方法\n",[91,48200,48201,48203,48205,48208,48211,48213,48216,48218],{"class":93,"line":8071},[91,48202,32039],{"class":250},[91,48204,296],{"class":153},[91,48206,48207],{"class":250},"ImageFolder(",[91,48209,48210],{"class":105},"ROOT_PATH",[91,48212,627],{"class":250},[91,48214,48215],{"class":5339},"transform",[91,48217,296],{"class":153},[91,48219,48220],{"class":250},"train_transform)\n",[91,48222,48223],{"class":93,"line":8095},[91,48224,2523],{"emptyLinePlaceholder":175},[91,48226,48227,48229,48231,48233,48235,48237,48239,48241,48243,48245,48247,48249,48251,48253,48255],{"class":93,"line":8100},[91,48228,32091],{"class":250},[91,48230,296],{"class":153},[91,48232,32096],{"class":250},[91,48234,32099],{"class":105},[91,48236,251],{"class":250},[91,48238,32104],{"class":105},[91,48240,704],{"class":153},[91,48242,7481],{"class":105},[91,48244,32111],{"class":250},[91,48246,32099],{"class":105},[91,48248,251],{"class":250},[91,48250,32118],{"class":105},[91,48252,704],{"class":153},[91,48254,7481],{"class":105},[91,48256,32125],{"class":250},[91,48258,48259,48261,48263,48265,48267,48269],{"class":93,"line":8106},[91,48260,32130],{"class":250},[91,48262,296],{"class":153},[91,48264,32135],{"class":250},[91,48266,31618],{"class":5339},[91,48268,296],{"class":153},[91,48270,31623],{"class":250},[91,48272,48273,48275,48277,48279],{"class":93,"line":8133},[91,48274,32146],{"class":5339},[91,48276,296],{"class":153},[91,48278,446],{"class":105},[91,48280,31547],{"class":250},[91,48282,48283,48285,48287,48289],{"class":93,"line":8138},[91,48284,32158],{"class":5339},[91,48286,296],{"class":153},[91,48288,31557],{"class":105},[91,48290,31547],{"class":250},[91,48292,48293],{"class":93,"line":8144},[91,48294,32169],{"class":308},[91,48296,48297,48299,48301,48303],{"class":93,"line":8156},[91,48298,32174],{"class":5339},[91,48300,296],{"class":153},[91,48302,644],{"class":105},[91,48304,257],{"class":250},[91,48306,48307,48309,48311,48313,48315,48317],{"class":93,"line":8168},[91,48308,32185],{"class":250},[91,48310,296],{"class":153},[91,48312,31615],{"class":250},[91,48314,31618],{"class":5339},[91,48316,296],{"class":153},[91,48318,32196],{"class":250},[91,48320,48321,48323,48325,48327],{"class":93,"line":8180},[91,48322,32201],{"class":5339},[91,48324,296],{"class":153},[91,48326,446],{"class":105},[91,48328,31547],{"class":250},[91,48330,48331,48333,48335,48337],{"class":93,"line":9839},[91,48332,32212],{"class":5339},[91,48334,296],{"class":153},[91,48336,31557],{"class":105},[91,48338,31547],{"class":250},[91,48340,48341,48343,48345,48347],{"class":93,"line":9864},[91,48342,32223],{"class":5339},[91,48344,296],{"class":153},[91,48346,644],{"class":105},[91,48348,257],{"class":250},[91,48350,48351,48353],{"class":93,"line":9887},[91,48352,4213],{"class":153},[91,48354,32236],{"class":250},[91,48356,48357],{"class":93,"line":9911},[91,48358,2523],{"emptyLinePlaceholder":175},[91,48360,48361],{"class":93,"line":9916},[91,48362,32245],{"class":308},[91,48364,48365],{"class":93,"line":9921},[91,48366,32250],{"class":308},[91,48368,48369],{"class":93,"line":9926},[91,48370,2523],{"emptyLinePlaceholder":175},[91,48372,48373],{"class":93,"line":9935},[91,48374,32259],{"class":308},[91,48376,48377,48379,48381],{"class":93,"line":9940},[91,48378,32028],{"class":153},[91,48380,32266],{"class":97},[91,48382,32269],{"class":250},[91,48384,48385,48387,48389,48391,48393,48395,48397,48399,48401],{"class":93,"line":9946},[91,48386,31318],{"class":250},[91,48388,296],{"class":153},[91,48390,30532],{"class":250},[91,48392,31325],{"class":101},[91,48394,1828],{"class":153},[91,48396,31330],{"class":250},[91,48398,1825],{"class":153},[91,48400,32288],{"class":101},[91,48402,257],{"class":250},[91,48404,48405],{"class":93,"line":9967},[91,48406,2523],{"emptyLinePlaceholder":175},[91,48408,48409],{"class":93,"line":9973},[91,48410,32303],{"class":308},[91,48412,48413],{"class":93,"line":9987},[91,48414,32308],{"class":308},[91,48416,48417],{"class":93,"line":9993},[91,48418,32313],{"class":308},[91,48420,48421,48423,48425,48427,48429,48431,48433],{"class":93,"line":10020},[91,48422,32318],{"class":250},[91,48424,296],{"class":153},[91,48426,32323],{"class":250},[91,48428,32326],{"class":5339},[91,48430,296],{"class":153},[91,48432,32331],{"class":105},[91,48434,257],{"class":250},[91,48436,48437],{"class":93,"line":10029},[91,48438,2523],{"emptyLinePlaceholder":175},[91,48440,48441],{"class":93,"line":10035},[91,48442,32342],{"class":308},[91,48444,48445,48447,48449],{"class":93,"line":10043},[91,48446,32347],{"class":250},[91,48448,296],{"class":153},[91,48450,32352],{"class":250},[91,48452,48453],{"class":93,"line":10048},[91,48454,2523],{"emptyLinePlaceholder":175},[91,48456,48457],{"class":93,"line":16727},[91,48458,32361],{"class":308},[91,48460,48461,48463,48465],{"class":93,"line":16733},[91,48462,31370],{"class":250},[91,48464,296],{"class":153},[91,48466,32370],{"class":250},[91,48468,48469],{"class":93,"line":16756},[91,48470,32375],{"class":308},[91,48472,48473],{"class":93,"line":16762},[91,48474,32380],{"class":308},[91,48476,48477],{"class":93,"line":16785},[91,48478,32385],{"class":308},[91,48480,48481,48483,48485],{"class":93,"line":16799},[91,48482,32390],{"class":250},[91,48484,296],{"class":153},[91,48486,32395],{"class":250},[91,48488,48489],{"class":93,"line":16819},[91,48490,2523],{"emptyLinePlaceholder":175},[91,48492,48493],{"class":93,"line":16825},[91,48494,32408],{"class":308},[91,48496,48497],{"class":93,"line":16836},[91,48498,32413],{"class":308},[91,48500,48501,48503,48505],{"class":93,"line":16859},[91,48502,32418],{"class":250},[91,48504,296],{"class":153},[91,48506,32423],{"class":105},[91,48508,48509],{"class":93,"line":16881},[91,48510,32428],{"class":308},[91,48512,48513,48515,48517],{"class":93,"line":16886},[91,48514,32433],{"class":250},[91,48516,296],{"class":153},[91,48518,32438],{"class":250},[91,48520,48521],{"class":93,"line":16892},[91,48522,32443],{"class":308},[91,48524,48525,48527,48529],{"class":93,"line":16906},[91,48526,32448],{"class":250},[91,48528,296],{"class":153},[91,48530,32438],{"class":250},[91,48532,48533],{"class":93,"line":16919},[91,48534,32457],{"class":308},[91,48536,48537,48539,48541],{"class":93,"line":16924},[91,48538,32462],{"class":250},[91,48540,296],{"class":153},[91,48542,32438],{"class":250},[91,48544,48545],{"class":93,"line":16938},[91,48546,32471],{"class":308},[91,48548,48549,48551,48553],{"class":93,"line":16943},[91,48550,32476],{"class":250},[91,48552,296],{"class":153},[91,48554,32438],{"class":250},[91,48556,48557],{"class":93,"line":16949},[91,48558,2523],{"emptyLinePlaceholder":175},[91,48560,48561],{"class":93,"line":16954},[91,48562,32489],{"class":308},[91,48564,48565,48567,48569],{"class":93,"line":16968},[91,48566,32494],{"class":250},[91,48568,296],{"class":153},[91,48570,32499],{"class":250},[91,48572,48573],{"class":93,"line":16973},[91,48574,2523],{"emptyLinePlaceholder":175},[91,48576,48577],{"class":93,"line":16978},[91,48578,32512],{"class":308},[91,48580,48581,48583,48585,48587,48589],{"class":93,"line":16992},[91,48582,3324],{"class":153},[91,48584,32519],{"class":250},[91,48586,26165],{"class":153},[91,48588,32524],{"class":105},[91,48590,32527],{"class":250},[91,48592,48593,48595,48597,48599,48601,48603,48605,48607,48609,48611,48613],{"class":93,"line":17004},[91,48594,32532],{"class":105},[91,48596,251],{"class":250},[91,48598,32537],{"class":101},[91,48600,32540],{"class":105},[91,48602,833],{"class":101},[91,48604,32540],{"class":105},[91,48606,500],{"class":101},[91,48608,32549],{"class":250},[91,48610,781],{"class":153},[91,48612,466],{"class":105},[91,48614,30578],{"class":250},[91,48616,48617,48619,48621,48623,48625,48627],{"class":93,"line":17009},[91,48618,32532],{"class":105},[91,48620,251],{"class":250},[91,48622,32564],{"class":101},[91,48624,704],{"class":153},[91,48626,695],{"class":105},[91,48628,257],{"class":250},[91,48630,48631],{"class":93,"line":17022},[91,48632,2523],{"emptyLinePlaceholder":175},[91,48634,48635],{"class":93,"line":17027},[91,48636,32579],{"class":308},[91,48638,48639],{"class":93,"line":17032},[91,48640,32584],{"class":308},[91,48642,48643,48645,48647],{"class":93,"line":17037},[91,48644,32589],{"class":250},[91,48646,296],{"class":153},[91,48648,32423],{"class":105},[91,48650,48651],{"class":93,"line":17050},[91,48652,32598],{"class":308},[91,48654,48655,48657,48659],{"class":93,"line":17055},[91,48656,32603],{"class":250},[91,48658,296],{"class":153},[91,48660,3208],{"class":105},[91,48662,48663],{"class":93,"line":32714},[91,48664,32612],{"class":308},[91,48666,48667,48669,48671],{"class":93,"line":32720},[91,48668,32617],{"class":250},[91,48670,296],{"class":153},[91,48672,32423],{"class":105},[91,48674,48675],{"class":93,"line":32726},[91,48676,32626],{"class":308},[91,48678,48679,48681,48683],{"class":93,"line":32732},[91,48680,32631],{"class":250},[91,48682,296],{"class":153},[91,48684,3208],{"class":105},[91,48686,48687],{"class":93,"line":32738},[91,48688,32640],{"class":308},[91,48690,48691,48693,48695],{"class":93,"line":32749},[91,48692,32645],{"class":250},[91,48694,296],{"class":153},[91,48696,3208],{"class":105},[91,48698,48699],{"class":93,"line":32755},[91,48700,32654],{"class":308},[91,48702,48703,48705,48707],{"class":93,"line":32775},[91,48704,32659],{"class":250},[91,48706,296],{"class":153},[91,48708,3208],{"class":105},[91,48710,48711],{"class":93,"line":32781},[91,48712,32668],{"class":308},[91,48714,48715,48717,48719,48721,48723],{"class":93,"line":32792},[91,48716,3526],{"class":153},[91,48718,31682],{"class":250},[91,48720,26165],{"class":153},[91,48722,31687],{"class":105},[91,48724,32681],{"class":250},[91,48726,48727],{"class":93,"line":32798},[91,48728,32686],{"class":308},[91,48730,48731,48733,48735],{"class":93,"line":32804},[91,48732,32691],{"class":250},[91,48734,296],{"class":153},[91,48736,32696],{"class":250},[91,48738,48739],{"class":93,"line":32810},[91,48740,32701],{"class":308},[91,48742,48743,48745,48747],{"class":93,"line":32816},[91,48744,32706],{"class":250},[91,48746,296],{"class":153},[91,48748,32711],{"class":250},[91,48750,48751],{"class":93,"line":32822},[91,48752,32717],{"class":308},[91,48754,48755],{"class":93,"line":32828},[91,48756,32723],{"class":250},[91,48758,48759],{"class":93,"line":32834},[91,48760,32729],{"class":308},[91,48762,48763],{"class":93,"line":32854},[91,48764,32735],{"class":308},[91,48766,48767,48769,48771],{"class":93,"line":32860},[91,48768,32741],{"class":250},[91,48770,296],{"class":153},[91,48772,32746],{"class":250},[91,48774,48775],{"class":93,"line":32876},[91,48776,32752],{"class":308},[91,48778,48779,48781,48783,48785,48787,48789,48791],{"class":93,"line":32882},[91,48780,32758],{"class":250},[91,48782,296],{"class":153},[91,48784,32763],{"class":250},[91,48786,32766],{"class":5339},[91,48788,296],{"class":153},[91,48790,466],{"class":105},[91,48792,257],{"class":250},[91,48794,48795],{"class":93,"line":32896},[91,48796,32778],{"class":308},[91,48798,48799,48801,48803],{"class":93,"line":32902},[91,48800,32784],{"class":250},[91,48802,296],{"class":153},[91,48804,32789],{"class":250},[91,48806,48807],{"class":93,"line":32917},[91,48808,32795],{"class":308},[91,48810,48811],{"class":93,"line":32923},[91,48812,32801],{"class":250},[91,48814,48815],{"class":93,"line":32932},[91,48816,32807],{"class":308},[91,48818,48819],{"class":93,"line":32938},[91,48820,32813],{"class":250},[91,48822,48823],{"class":93,"line":32947},[91,48824,32819],{"class":308},[91,48826,48827],{"class":93,"line":32953},[91,48828,32825],{"class":250},[91,48830,48831],{"class":93,"line":32959},[91,48832,32831],{"class":308},[91,48834,48835,48837,48839,48841,48843,48845,48847],{"class":93,"line":32968},[91,48836,32837],{"class":250},[91,48838,9600],{"class":153},[91,48840,32842],{"class":250},[91,48842,704],{"class":153},[91,48844,32847],{"class":250},[91,48846,440],{"class":105},[91,48848,257],{"class":250},[91,48850,48851],{"class":93,"line":32974},[91,48852,32857],{"class":308},[91,48854,48855,48857,48859,48861,48863],{"class":93,"line":32985},[91,48856,32863],{"class":250},[91,48858,9600],{"class":153},[91,48860,32868],{"class":250},[91,48862,3072],{"class":153},[91,48864,32873],{"class":250},[91,48866,48867],{"class":93,"line":32991},[91,48868,32879],{"class":308},[91,48870,48871,48873,48875,48877,48879],{"class":93,"line":33010},[91,48872,32885],{"class":250},[91,48874,9600],{"class":153},[91,48876,32847],{"class":250},[91,48878,440],{"class":105},[91,48880,257],{"class":250},[91,48882,48883],{"class":93,"line":33016},[91,48884,32899],{"class":308},[91,48886,48887,48889,48891,48893,48895],{"class":93,"line":33027},[91,48888,3526],{"class":153},[91,48890,32907],{"class":250},[91,48892,26165],{"class":153},[91,48894,31687],{"class":105},[91,48896,32914],{"class":250},[91,48898,48899],{"class":93,"line":33033},[91,48900,32920],{"class":308},[91,48902,48903,48905,48907],{"class":93,"line":33053},[91,48904,32691],{"class":250},[91,48906,296],{"class":153},[91,48908,32696],{"class":250},[91,48910,48911],{"class":93,"line":33069},[91,48912,32935],{"class":308},[91,48914,48915,48917,48919],{"class":93,"line":33075},[91,48916,32706],{"class":250},[91,48918,296],{"class":153},[91,48920,32711],{"class":250},[91,48922,48923],{"class":93,"line":33089},[91,48924,32950],{"class":308},[91,48926,48927],{"class":93,"line":33095},[91,48928,32956],{"class":250},[91,48930,48931],{"class":93,"line":33101},[91,48932,36437],{"class":308},[91,48934,48935,48937],{"class":93,"line":33112},[91,48936,32962],{"class":153},[91,48938,32965],{"class":250},[91,48940,48941],{"class":93,"line":33118},[91,48942,32971],{"class":308},[91,48944,48945,48947,48949],{"class":93,"line":33124},[91,48946,36452],{"class":250},[91,48948,296],{"class":153},[91,48950,32746],{"class":250},[91,48952,48953],{"class":93,"line":33134},[91,48954,32988],{"class":308},[91,48956,48957,48959,48961,48963,48965,48967,48969],{"class":93,"line":33140},[91,48958,36465],{"class":250},[91,48960,296],{"class":153},[91,48962,32763],{"class":250},[91,48964,32766],{"class":5339},[91,48966,296],{"class":153},[91,48968,466],{"class":105},[91,48970,257],{"class":250},[91,48972,48973],{"class":93,"line":33151},[91,48974,33013],{"class":308},[91,48976,48977,48979,48981],{"class":93,"line":33157},[91,48978,36486],{"class":250},[91,48980,296],{"class":153},[91,48982,32789],{"class":250},[91,48984,48985],{"class":93,"line":33167},[91,48986,33030],{"class":308},[91,48988,48989,48991,48993,48995,48997,48999,49001],{"class":93,"line":33172},[91,48990,36499],{"class":250},[91,48992,9600],{"class":153},[91,48994,36504],{"class":250},[91,48996,704],{"class":153},[91,48998,32847],{"class":250},[91,49000,440],{"class":105},[91,49002,257],{"class":250},[91,49004,49005,49007,49009,49011,49013],{"class":93,"line":33178},[91,49006,36517],{"class":250},[91,49008,9600],{"class":153},[91,49010,32868],{"class":250},[91,49012,3072],{"class":153},[91,49014,32873],{"class":250},[91,49016,49017],{"class":93,"line":33227},[91,49018,36530],{"class":308},[91,49020,49021,49023,49025,49027,49029],{"class":93,"line":33274},[91,49022,36535],{"class":250},[91,49024,9600],{"class":153},[91,49026,32847],{"class":250},[91,49028,440],{"class":105},[91,49030,257],{"class":250},[91,49032,49033],{"class":93,"line":33279},[91,49034,33092],{"class":308},[91,49036,49037],{"class":93,"line":33285},[91,49038,33098],{"class":308},[91,49040,49041,49043,49045],{"class":93,"line":33304},[91,49042,33104],{"class":250},[91,49044,833],{"class":153},[91,49046,33109],{"class":250},[91,49048,49049],{"class":93,"line":33310},[91,49050,33115],{"class":308},[91,49052,49053],{"class":93,"line":33330},[91,49054,33121],{"class":308},[91,49056,49057,49059,49061],{"class":93,"line":33336},[91,49058,33127],{"class":250},[91,49060,833],{"class":153},[91,49062,33109],{"class":250},[91,49064,49065],{"class":93,"line":33342},[91,49066,33137],{"class":308},[91,49068,49069,49071,49073],{"class":93,"line":33352},[91,49070,33143],{"class":250},[91,49072,833],{"class":153},[91,49074,33148],{"class":250},[91,49076,49077],{"class":93,"line":33357},[91,49078,33154],{"class":308},[91,49080,49081,49083,49085],{"class":93,"line":33363},[91,49082,33160],{"class":250},[91,49084,833],{"class":153},[91,49086,33148],{"class":250},[91,49088,49089],{"class":93,"line":33379},[91,49090,2523],{"emptyLinePlaceholder":175},[91,49092,49093],{"class":93,"line":33424},[91,49094,33175],{"class":308},[91,49096,49097,49099,49101,49103,49105,49107,49109,49111,49113,49115,49117,49119,49121,49123,49125,49127,49129,49131,49133,49135],{"class":93,"line":33430},[91,49098,32532],{"class":105},[91,49100,251],{"class":250},[91,49102,3715],{"class":101},[91,49104,32540],{"class":105},[91,49106,33189],{"class":101},[91,49108,1145],{"class":105},[91,49110,33194],{"class":153},[91,49112,1195],{"class":105},[91,49114,33199],{"class":101},[91,49116,1145],{"class":105},[91,49118,33194],{"class":153},[91,49120,1195],{"class":105},[91,49122,3715],{"class":101},[91,49124,33210],{"class":250},[91,49126,781],{"class":153},[91,49128,466],{"class":105},[91,49130,33217],{"class":250},[91,49132,781],{"class":153},[91,49134,466],{"class":105},[91,49136,33224],{"class":250},[91,49138,49139,49141,49143,49145,49147,49149,49151,49153,49155,49157,49159,49161,49163,49165,49167,49169,49171,49173,49175,49177],{"class":93,"line":33436},[91,49140,32532],{"class":105},[91,49142,251],{"class":250},[91,49144,3715],{"class":101},[91,49146,32540],{"class":105},[91,49148,33238],{"class":101},[91,49150,1145],{"class":105},[91,49152,33194],{"class":153},[91,49154,1195],{"class":105},[91,49156,33247],{"class":101},[91,49158,1145],{"class":105},[91,49160,33194],{"class":153},[91,49162,1195],{"class":105},[91,49164,3715],{"class":101},[91,49166,33258],{"class":250},[91,49168,781],{"class":153},[91,49170,466],{"class":105},[91,49172,33265],{"class":250},[91,49174,781],{"class":153},[91,49176,466],{"class":105},[91,49178,33224],{"class":250},[91,49180,49181],{"class":93,"line":33442},[91,49182,2523],{"emptyLinePlaceholder":175},[91,49184,49185],{"class":93,"line":33453},[91,49186,33282],{"class":308},[91,49188,49189,49191,49193,49195,49197,49199,49201],{"class":93,"line":33459},[91,49190,2620],{"class":153},[91,49192,33290],{"class":250},[91,49194,781],{"class":153},[91,49196,466],{"class":105},[91,49198,1189],{"class":250},[91,49200,1209],{"class":153},[91,49202,33301],{"class":250},[91,49204,49205],{"class":93,"line":33465},[91,49206,33307],{"class":308},[91,49208,49209,49211,49213,49215,49217,49219,49221],{"class":93,"line":33471},[91,49210,33313],{"class":250},[91,49212,290],{"class":105},[91,49214,296],{"class":153},[91,49216,33320],{"class":250},[91,49218,781],{"class":153},[91,49220,466],{"class":105},[91,49222,33327],{"class":250},[91,49224,49225],{"class":93,"line":33489},[91,49226,33333],{"class":308},[91,49228,49229],{"class":93,"line":33503},[91,49230,33339],{"class":308},[91,49232,49233,49235,49237],{"class":93,"line":33512},[91,49234,33345],{"class":250},[91,49236,296],{"class":153},[91,49238,32395],{"class":250},[91,49240,49241],{"class":93,"line":33521},[91,49242,2523],{"emptyLinePlaceholder":175},[91,49244,49245],{"class":93,"line":33530},[91,49246,33360],{"class":308},[91,49248,49249,49251,49253,49255,49257],{"class":93,"line":33539},[91,49250,33366],{"class":250},[91,49252,296],{"class":153},[91,49254,33371],{"class":250},[91,49256,781],{"class":153},[91,49258,33376],{"class":250},[91,49260,49261,49263,49265,49267,49269,49271,49273,49275,49277,49279,49281,49283,49285,49287,49289,49291,49293,49295],{"class":93,"line":33545},[91,49262,32532],{"class":105},[91,49264,251],{"class":250},[91,49266,33386],{"class":101},[91,49268,1145],{"class":105},[91,49270,33391],{"class":153},[91,49272,1195],{"class":105},[91,49274,793],{"class":101},[91,49276,1145],{"class":105},[91,49278,33391],{"class":153},[91,49280,1195],{"class":105},[91,49282,33404],{"class":101},[91,49284,33407],{"class":250},[91,49286,33410],{"class":153},[91,49288,1156],{"class":105},[91,49290,33415],{"class":250},[91,49292,577],{"class":153},[91,49294,1156],{"class":105},[91,49296,30578],{"class":250},[91,49298,49299],{"class":93,"line":33551},[91,49300,36814],{"class":308},[91,49302,49303],{"class":93,"line":33559},[91,49304,36819],{"class":308},[91,49306,49307,49309,49311],{"class":93,"line":33564},[91,49308,36824],{"class":250},[91,49310,33448],{"class":101},[91,49312,257],{"class":250},[91,49314,49315],{"class":93,"line":33570},[91,49316,33468],{"class":308},[91,49318,49319,49321,49323,49325,49327,49329],{"class":93,"line":33581},[91,49320,33474],{"class":250},[91,49322,296],{"class":153},[91,49324,33479],{"class":250},[91,49326,33482],{"class":5339},[91,49328,296],{"class":153},[91,49330,1670],{"class":250},[91,49332,49333,49335,49337,49339],{"class":93,"line":33587},[91,49334,33492],{"class":101},[91,49336,1108],{"class":250},[91,49338,33497],{"class":105},[91,49340,33500],{"class":250},[91,49342,49343,49345],{"class":93,"line":33607},[91,49344,33506],{"class":101},[91,49346,33509],{"class":250},[91,49348,49349,49351],{"class":93,"line":33613},[91,49350,33515],{"class":101},[91,49352,33518],{"class":250},[91,49354,49355,49357],{"class":93,"line":33619},[91,49356,33524],{"class":101},[91,49358,33527],{"class":250},[91,49360,49361,49363],{"class":93,"line":33625},[91,49362,33533],{"class":101},[91,49364,33536],{"class":250},[91,49366,49367],{"class":93,"line":33642},[91,49368,33542],{"class":250},[91,49370,49371],{"class":93,"line":33648},[91,49372,33548],{"class":308},[91,49374,49375,49377],{"class":93,"line":33654},[91,49376,4213],{"class":153},[91,49378,33556],{"class":250},[91,49380,49381],{"class":93,"line":33660},[91,49382,2523],{"emptyLinePlaceholder":175},[91,49384,49385],{"class":93,"line":33666},[91,49386,33567],{"class":308},[91,49388,49389,49391,49393],{"class":93,"line":33672},[91,49390,32028],{"class":153},[91,49392,33575],{"class":97},[91,49394,33578],{"class":250},[91,49396,49397],{"class":93,"line":33699},[91,49398,33584],{"class":308},[91,49400,49401,49403,49405,49407,49409,49411,49413,49415],{"class":93,"line":33723},[91,49402,33590],{"class":250},[91,49404,31774],{"class":5339},[91,49406,296],{"class":153},[91,49408,251],{"class":250},[91,49410,747],{"class":105},[91,49412,627],{"class":250},[91,49414,542],{"class":105},[91,49416,30578],{"class":250},[91,49418,49419],{"class":93,"line":33729},[91,49420,33610],{"class":308},[91,49422,49423],{"class":93,"line":33735},[91,49424,33616],{"class":308},[91,49426,49427],{"class":93,"line":33741},[91,49428,33622],{"class":308},[91,49430,49431,49433,49435,49437,49439,49441,49443],{"class":93,"line":33752},[91,49432,31808],{"class":250},[91,49434,466],{"class":105},[91,49436,627],{"class":250},[91,49438,327],{"class":105},[91,49440,627],{"class":250},[91,49442,466],{"class":105},[91,49444,257],{"class":250},[91,49446,49447],{"class":93,"line":33763},[91,49448,33645],{"class":308},[91,49450,49451],{"class":93,"line":33769},[91,49452,33651],{"class":308},[91,49454,49455],{"class":93,"line":33786},[91,49456,33657],{"class":308},[91,49458,49459],{"class":93,"line":33809},[91,49460,33663],{"class":308},[91,49462,49463],{"class":93,"line":33832},[91,49464,33669],{"class":308},[91,49466,49467,49469,49471,49473,49475,49477,49479,49481,49483],{"class":93,"line":33838},[91,49468,33675],{"class":250},[91,49470,33678],{"class":101},[91,49472,33681],{"class":250},[91,49474,33684],{"class":101},[91,49476,627],{"class":250},[91,49478,33689],{"class":5339},[91,49480,296],{"class":153},[91,49482,33694],{"class":101},[91,49484,257],{"class":250},[91,49486,49487,49489,49491,49493,49495,49497,49499,49501,49503],{"class":93,"line":33843},[91,49488,33675],{"class":250},[91,49490,33678],{"class":101},[91,49492,33706],{"class":250},[91,49494,33709],{"class":101},[91,49496,627],{"class":250},[91,49498,33689],{"class":5339},[91,49500,296],{"class":153},[91,49502,33718],{"class":101},[91,49504,257],{"class":250},[91,49506,49507],{"class":93,"line":33852},[91,49508,33726],{"class":308},[91,49510,49511],{"class":93,"line":33862},[91,49512,33732],{"class":250},[91,49514,49515],{"class":93,"line":33868},[91,49516,33738],{"class":308},[91,49518,49519,49521,49523],{"class":93,"line":33873},[91,49520,33744],{"class":250},[91,49522,33747],{"class":101},[91,49524,257],{"class":250},[91,49526,49527,49529,49531],{"class":93,"line":33879},[91,49528,33755],{"class":250},[91,49530,33758],{"class":101},[91,49532,257],{"class":250},[91,49534,49535],{"class":93,"line":33892},[91,49536,33766],{"class":308},[91,49538,49539,49541,49543,49545,49547,49549,49551],{"class":93,"line":33898},[91,49540,31808],{"class":250},[91,49542,466],{"class":105},[91,49544,627],{"class":250},[91,49546,327],{"class":105},[91,49548,627],{"class":250},[91,49550,327],{"class":105},[91,49552,257],{"class":250},[91,49554,49555,49557,49559,49561,49563,49565,49567,49569,49571],{"class":93,"line":33909},[91,49556,33675],{"class":250},[91,49558,33678],{"class":101},[91,49560,33793],{"class":250},[91,49562,33684],{"class":101},[91,49564,627],{"class":250},[91,49566,33689],{"class":5339},[91,49568,296],{"class":153},[91,49570,33804],{"class":101},[91,49572,257],{"class":250},[91,49574,49575,49577,49579,49581,49583,49585,49587,49589,49591],{"class":93,"line":33920},[91,49576,33675],{"class":250},[91,49578,33678],{"class":101},[91,49580,33816],{"class":250},[91,49582,33709],{"class":101},[91,49584,627],{"class":250},[91,49586,33689],{"class":5339},[91,49588,296],{"class":153},[91,49590,33827],{"class":101},[91,49592,257],{"class":250},[91,49594,49595],{"class":93,"line":33939},[91,49596,33835],{"class":308},[91,49598,49600],{"class":93,"line":49599},219,[91,49601,33732],{"class":250},[91,49603,49605,49607,49609],{"class":93,"line":49604},220,[91,49606,33744],{"class":250},[91,49608,33678],{"class":101},[91,49610,257],{"class":250},[91,49612,49614,49616,49618],{"class":93,"line":49613},221,[91,49615,33755],{"class":250},[91,49617,33857],{"class":101},[91,49619,257],{"class":250},[91,49621,49623],{"class":93,"line":49622},222,[91,49624,33865],{"class":250},[91,49626,49628],{"class":93,"line":49627},223,[91,49629,2523],{"emptyLinePlaceholder":175},[91,49631,49633],{"class":93,"line":49632},224,[91,49634,33876],{"class":308},[91,49636,49638,49640,49642,49644,49646],{"class":93,"line":49637},225,[91,49639,1655],{"class":153},[91,49641,31301],{"class":105},[91,49643,3072],{"class":153},[91,49645,31306],{"class":101},[91,49647,3862],{"class":250},[91,49649,49651],{"class":93,"line":49650},226,[91,49652,33895],{"class":308},[91,49654,49656,49658,49660],{"class":93,"line":49655},227,[91,49657,44627],{"class":250},[91,49659,296],{"class":153},[91,49661,44632],{"class":250},[91,49663,49665,49667,49669],{"class":93,"line":49664},228,[91,49666,33912],{"class":250},[91,49668,296],{"class":153},[91,49670,33917],{"class":250},[91,49672,49674,49676,49678,49680,49682,49684,49686],{"class":93,"line":49673},229,[91,49675,33474],{"class":250},[91,49677,296],{"class":153},[91,49679,44649],{"class":250},[91,49681,33930],{"class":5339},[91,49683,296],{"class":153},[91,49685,1156],{"class":105},[91,49687,257],{"class":250},[91,49689,49691],{"class":93,"line":49690},230,[91,49692,33942],{"class":250},[22121,49694,49696],{"id":49695},"_242测试代码","2.4.2.测试代码",[21,49698,49699],{},"使用测试集进行测试与推理",[82,49701,49703],{"className":30459,"code":49702,"language":30461,"meta":26,"style":26},"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",[88,49704,49705,49711,49721,49731,49742,49752,49756,49760,49768,49773,49777,49794,49798,49802,49806,49810,49814,49846,49850,49858,49862,49874,49878,49882,49886,49890,49894,49898,49902,49906,49924,49938,49942,49952,49962,49972,49978,49982,49986,49994,49998,50014,50022,50026,50030,50038,50046,50050,50054,50058,50062,50068,50072,50082,50090,50098,50102,50106,50110,50118,50122,50138,50142,50146,50150,50162,50166,50178,50182,50186,50198,50202,50212,50216,50220,50232,50236,50244,50248,50252,50260,50264,50272,50276,50280,50284,50288,50292,50308,50316,50320,50324,50342,50348,50352,50362,50370,50378,50382,50386,50390,50394,50402,50406,50422,50426,50434,50442],{"__ignoreMap":26},[91,49706,49707,49709],{"class":93,"line":94},[91,49708,30473],{"class":153},[91,49710,30476],{"class":250},[91,49712,49713,49715,49717,49719],{"class":93,"line":38},[91,49714,30473],{"class":153},[91,49716,31496],{"class":250},[91,49718,31464],{"class":153},[91,49720,31501],{"class":250},[91,49722,49723,49725,49727,49729],{"class":93,"line":1304},[91,49724,30818],{"class":153},[91,49726,31479],{"class":250},[91,49728,30473],{"class":153},[91,49730,31484],{"class":250},[91,49732,49733,49735,49737,49739],{"class":93,"line":1319},[91,49734,30818],{"class":153},[91,49736,31449],{"class":250},[91,49738,30473],{"class":153},[91,49740,49741],{"class":250}," ImageFolder\n",[91,49743,49744,49746,49748,49750],{"class":93,"line":1325},[91,49745,30818],{"class":153},[91,49747,31995],{"class":250},[91,49749,30473],{"class":153},[91,49751,44721],{"class":250},[91,49753,49754],{"class":93,"line":1339},[91,49755,2523],{"emptyLinePlaceholder":175},[91,49757,49758],{"class":93,"line":1345},[91,49759,34032],{"class":308},[91,49761,49762,49764,49766],{"class":93,"line":1436},[91,49763,32028],{"class":153},[91,49765,34039],{"class":97},[91,49767,32034],{"class":250},[91,49769,49770],{"class":93,"line":1442},[91,49771,49772],{"class":308},"   # 导入自己的数据集，并进行数据处理\n",[91,49774,49775],{"class":93,"line":1454},[91,49776,48042],{"class":308},[91,49778,49779,49781,49783,49785,49787,49789,49792],{"class":93,"line":1736},[91,49780,48047],{"class":105},[91,49782,296],{"class":153},[91,49784,919],{"class":153},[91,49786,500],{"class":101},[91,49788,807],{"class":105},[91,49790,49791],{"class":48058},"\u002Fdata\u002Ftest",[91,49793,25255],{"class":101},[91,49795,49796],{"class":93,"line":1741},[91,49797,2523],{"emptyLinePlaceholder":175},[91,49799,49800],{"class":93,"line":1747},[91,49801,48070],{"class":308},[91,49803,49804],{"class":93,"line":1752},[91,49805,48075],{"class":308},[91,49807,49808],{"class":93,"line":1766},[91,49809,48080],{"class":308},[91,49811,49812],{"class":93,"line":1771},[91,49813,48085],{"class":308},[91,49815,49816,49818,49820,49822,49824,49826,49828,49830,49832,49834,49836,49838,49840,49842,49844],{"class":93,"line":1777},[91,49817,48090],{"class":250},[91,49819,296],{"class":153},[91,49821,48095],{"class":250},[91,49823,48098],{"class":105},[91,49825,627],{"class":250},[91,49827,48103],{"class":105},[91,49829,627],{"class":250},[91,49831,48108],{"class":105},[91,49833,48111],{"class":250},[91,49835,48114],{"class":105},[91,49837,627],{"class":250},[91,49839,48119],{"class":105},[91,49841,627],{"class":250},[91,49843,48124],{"class":105},[91,49845,4780],{"class":250},[91,49847,49848],{"class":93,"line":1798},[91,49849,48131],{"class":308},[91,49851,49852,49854,49856],{"class":93,"line":1803},[91,49853,48136],{"class":250},[91,49855,296],{"class":153},[91,49857,48141],{"class":250},[91,49859,49860],{"class":93,"line":1817},[91,49861,48146],{"class":308},[91,49863,49864,49866,49868,49870,49872],{"class":93,"line":1822},[91,49865,48151],{"class":250},[91,49867,31582],{"class":105},[91,49869,627],{"class":250},[91,49871,31582],{"class":105},[91,49873,42703],{"class":250},[91,49875,49876],{"class":93,"line":1851},[91,49877,48164],{"class":308},[91,49879,49880],{"class":93,"line":1856},[91,49881,48169],{"class":250},[91,49883,49884],{"class":93,"line":1873},[91,49885,48174],{"class":250},[91,49887,49888],{"class":93,"line":1878},[91,49889,48179],{"class":308},[91,49891,49892],{"class":93,"line":1883},[91,49893,48184],{"class":308},[91,49895,49896],{"class":93,"line":1888},[91,49897,2523],{"emptyLinePlaceholder":175},[91,49899,49900],{"class":93,"line":1902},[91,49901,48193],{"class":308},[91,49903,49904],{"class":93,"line":1907},[91,49905,48198],{"class":308},[91,49907,49908,49910,49912,49914,49916,49918,49920,49922],{"class":93,"line":2700},[91,49909,34046],{"class":250},[91,49911,296],{"class":153},[91,49913,48207],{"class":250},[91,49915,48210],{"class":105},[91,49917,627],{"class":250},[91,49919,48215],{"class":5339},[91,49921,296],{"class":153},[91,49923,48220],{"class":250},[91,49925,49926,49928,49930,49932,49934,49936],{"class":93,"line":2714},[91,49927,34103],{"class":250},[91,49929,296],{"class":153},[91,49931,31615],{"class":250},[91,49933,31618],{"class":5339},[91,49935,296],{"class":153},[91,49937,34114],{"class":250},[91,49939,49940],{"class":93,"line":2722},[91,49941,34119],{"class":308},[91,49943,49944,49946,49948,49950],{"class":93,"line":2727},[91,49945,34124],{"class":5339},[91,49947,296],{"class":153},[91,49949,466],{"class":105},[91,49951,31547],{"class":250},[91,49953,49954,49956,49958,49960],{"class":93,"line":2733},[91,49955,34135],{"class":5339},[91,49957,296],{"class":153},[91,49959,31557],{"class":105},[91,49961,31547],{"class":250},[91,49963,49964,49966,49968,49970],{"class":93,"line":2739},[91,49965,34146],{"class":5339},[91,49967,296],{"class":153},[91,49969,440],{"class":105},[91,49971,257],{"class":250},[91,49973,49974,49976],{"class":93,"line":2744},[91,49975,4213],{"class":153},[91,49977,34159],{"class":250},[91,49979,49980],{"class":93,"line":8071},[91,49981,2523],{"emptyLinePlaceholder":175},[91,49983,49984],{"class":93,"line":8095},[91,49985,34168],{"class":308},[91,49987,49988,49990,49992],{"class":93,"line":8100},[91,49989,32028],{"class":153},[91,49991,34175],{"class":97},[91,49993,34178],{"class":250},[91,49995,49996],{"class":93,"line":8106},[91,49997,34183],{"class":308},[91,49999,50000,50002,50004,50006,50008,50010,50012],{"class":93,"line":8133},[91,50001,31318],{"class":250},[91,50003,296],{"class":153},[91,50005,31325],{"class":101},[91,50007,1828],{"class":153},[91,50009,31330],{"class":250},[91,50011,1825],{"class":153},[91,50013,34200],{"class":101},[91,50015,50016,50018,50020],{"class":93,"line":8138},[91,50017,31370],{"class":250},[91,50019,296],{"class":153},[91,50021,32370],{"class":250},[91,50023,50024],{"class":93,"line":8144},[91,50025,2523],{"emptyLinePlaceholder":175},[91,50027,50028],{"class":93,"line":8156},[91,50029,34217],{"class":308},[91,50031,50032,50034,50036],{"class":93,"line":8168},[91,50033,34222],{"class":250},[91,50035,296],{"class":153},[91,50037,32423],{"class":105},[91,50039,50040,50042,50044],{"class":93,"line":8180},[91,50041,34231],{"class":250},[91,50043,296],{"class":153},[91,50045,3208],{"class":105},[91,50047,50048],{"class":93,"line":9839},[91,50049,2523],{"emptyLinePlaceholder":175},[91,50051,50052],{"class":93,"line":9864},[91,50053,34244],{"class":308},[91,50055,50056],{"class":93,"line":9887},[91,50057,34249],{"class":308},[91,50059,50060],{"class":93,"line":9911},[91,50061,34254],{"class":308},[91,50063,50064,50066],{"class":93,"line":9916},[91,50065,34259],{"class":153},[91,50067,32965],{"class":250},[91,50069,50070],{"class":93,"line":9921},[91,50071,34266],{"class":308},[91,50073,50074,50076,50078,50080],{"class":93,"line":9926},[91,50075,3526],{"class":153},[91,50077,34273],{"class":250},[91,50079,26165],{"class":153},[91,50081,34278],{"class":250},[91,50083,50084,50086,50088],{"class":93,"line":9935},[91,50085,34283],{"class":250},[91,50087,296],{"class":153},[91,50089,34288],{"class":250},[91,50091,50092,50094,50096],{"class":93,"line":9940},[91,50093,34293],{"class":250},[91,50095,296],{"class":153},[91,50097,34298],{"class":250},[91,50099,50100],{"class":93,"line":9946},[91,50101,34303],{"class":308},[91,50103,50104],{"class":93,"line":9967},[91,50105,32956],{"class":250},[91,50107,50108],{"class":93,"line":9973},[91,50109,34312],{"class":308},[91,50111,50112,50114,50116],{"class":93,"line":9987},[91,50113,32741],{"class":250},[91,50115,296],{"class":153},[91,50117,34321],{"class":250},[91,50119,50120],{"class":93,"line":9993},[91,50121,34326],{"class":308},[91,50123,50124,50126,50128,50130,50132,50134,50136],{"class":93,"line":10020},[91,50125,32758],{"class":250},[91,50127,296],{"class":153},[91,50129,32763],{"class":250},[91,50131,32766],{"class":5339},[91,50133,296],{"class":153},[91,50135,466],{"class":105},[91,50137,257],{"class":250},[91,50139,50140],{"class":93,"line":10029},[91,50141,34347],{"class":308},[91,50143,50144],{"class":93,"line":10035},[91,50145,34352],{"class":308},[91,50147,50148],{"class":93,"line":10043},[91,50149,34357],{"class":308},[91,50151,50152,50154,50156,50158,50160],{"class":93,"line":10048},[91,50153,34362],{"class":250},[91,50155,9600],{"class":153},[91,50157,32868],{"class":250},[91,50159,3072],{"class":153},[91,50161,34371],{"class":250},[91,50163,50164],{"class":93,"line":16727},[91,50165,34376],{"class":308},[91,50167,50168,50170,50172,50174,50176],{"class":93,"line":16733},[91,50169,34381],{"class":250},[91,50171,9600],{"class":153},[91,50173,34386],{"class":250},[91,50175,440],{"class":105},[91,50177,257],{"class":250},[91,50179,50180],{"class":93,"line":16756},[91,50181,2523],{"emptyLinePlaceholder":175},[91,50183,50184],{"class":93,"line":16762},[91,50185,34399],{"class":308},[91,50187,50188,50190,50192,50194,50196],{"class":93,"line":16785},[91,50189,34404],{"class":250},[91,50191,296],{"class":153},[91,50193,34409],{"class":250},[91,50195,833],{"class":153},[91,50197,34414],{"class":250},[91,50199,50200],{"class":93,"line":16799},[91,50201,34419],{"class":308},[91,50203,50204,50206,50208,50210],{"class":93,"line":16819},[91,50205,32532],{"class":105},[91,50207,251],{"class":250},[91,50209,34428],{"class":101},[91,50211,34431],{"class":250},[91,50213,50214],{"class":93,"line":16825},[91,50215,2523],{"emptyLinePlaceholder":175},[91,50217,50218],{"class":93,"line":16836},[91,50219,34440],{"class":308},[91,50221,50222,50224,50226,50228,50230],{"class":93,"line":16859},[91,50223,1655],{"class":153},[91,50225,31301],{"class":105},[91,50227,3072],{"class":153},[91,50229,31306],{"class":101},[91,50231,3862],{"class":250},[91,50233,50234],{"class":93,"line":16881},[91,50235,34457],{"class":308},[91,50237,50238,50240,50242],{"class":93,"line":16886},[91,50239,31370],{"class":250},[91,50241,296],{"class":153},[91,50243,44632],{"class":250},[91,50245,50246],{"class":93,"line":16892},[91,50247,34470],{"class":308},[91,50249,50250],{"class":93,"line":16906},[91,50251,34475],{"class":308},[91,50253,50254,50256,50258],{"class":93,"line":16919},[91,50255,34480],{"class":250},[91,50257,34483],{"class":101},[91,50259,30578],{"class":250},[91,50261,50262],{"class":93,"line":16924},[91,50263,34490],{"class":308},[91,50265,50266,50268,50270],{"class":93,"line":16938},[91,50267,34103],{"class":250},[91,50269,296],{"class":153},[91,50271,34499],{"class":250},[91,50273,50274],{"class":93,"line":16943},[91,50275,34504],{"class":308},[91,50277,50278],{"class":93,"line":16949},[91,50279,34509],{"class":250},[91,50281,50282],{"class":93,"line":16954},[91,50283,2523],{"emptyLinePlaceholder":175},[91,50285,50286],{"class":93,"line":16968},[91,50287,34518],{"class":308},[91,50289,50290],{"class":93,"line":16973},[91,50291,34523],{"class":308},[91,50293,50294,50296,50298,50300,50302,50304,50306],{"class":93,"line":16978},[91,50295,31318],{"class":250},[91,50297,296],{"class":153},[91,50299,31325],{"class":101},[91,50301,1828],{"class":153},[91,50303,31330],{"class":250},[91,50305,1825],{"class":153},[91,50307,34200],{"class":101},[91,50309,50310,50312,50314],{"class":93,"line":16992},[91,50311,31370],{"class":250},[91,50313,296],{"class":153},[91,50315,32370],{"class":250},[91,50317,50318],{"class":93,"line":17004},[91,50319,34552],{"class":308},[91,50321,50322],{"class":93,"line":17009},[91,50323,34557],{"class":308},[91,50325,50326,50328,50330,50332,50335,50337,50340],{"class":93,"line":17022},[91,50327,34562],{"class":250},[91,50329,296],{"class":153},[91,50331,1139],{"class":250},[91,50333,50334],{"class":101},"'猫'",[91,50336,627],{"class":250},[91,50338,50339],{"class":101},"'狗'",[91,50341,33327],{"class":250},[91,50343,50344,50346],{"class":93,"line":17027},[91,50345,34259],{"class":153},[91,50347,32965],{"class":250},[91,50349,50350],{"class":93,"line":17032},[91,50351,34627],{"class":308},[91,50353,50354,50356,50358,50360],{"class":93,"line":17037},[91,50355,3526],{"class":153},[91,50357,34634],{"class":250},[91,50359,26165],{"class":153},[91,50361,34278],{"class":250},[91,50363,50364,50366,50368],{"class":93,"line":17050},[91,50365,32691],{"class":250},[91,50367,296],{"class":153},[91,50369,32696],{"class":250},[91,50371,50372,50374,50376],{"class":93,"line":17055},[91,50373,32706],{"class":250},[91,50375,296],{"class":153},[91,50377,32711],{"class":250},[91,50379,50380],{"class":93,"line":32714},[91,50381,2523],{"emptyLinePlaceholder":175},[91,50383,50384],{"class":93,"line":32720},[91,50385,34663],{"class":308},[91,50387,50388],{"class":93,"line":32726},[91,50389,32956],{"class":250},[91,50391,50392],{"class":93,"line":32732},[91,50393,34672],{"class":308},[91,50395,50396,50398,50400],{"class":93,"line":32738},[91,50397,32741],{"class":250},[91,50399,296],{"class":153},[91,50401,32746],{"class":250},[91,50403,50404],{"class":93,"line":32749},[91,50405,34685],{"class":308},[91,50407,50408,50410,50412,50414,50416,50418,50420],{"class":93,"line":32755},[91,50409,32758],{"class":250},[91,50411,296],{"class":153},[91,50413,32763],{"class":250},[91,50415,32766],{"class":5339},[91,50417,296],{"class":153},[91,50419,466],{"class":105},[91,50421,257],{"class":250},[91,50423,50424],{"class":93,"line":32775},[91,50425,34706],{"class":308},[91,50427,50428,50430,50432],{"class":93,"line":32781},[91,50429,34711],{"class":250},[91,50431,296],{"class":153},[91,50433,34716],{"class":250},[91,50435,50436,50438,50440],{"class":93,"line":32792},[91,50437,34721],{"class":250},[91,50439,296],{"class":153},[91,50441,34726],{"class":250},[91,50443,50444,50446,50448,50450,50452,50454,50456,50458],{"class":93,"line":32798},[91,50445,34731],{"class":105},[91,50447,251],{"class":250},[91,50449,34736],{"class":101},[91,50451,34739],{"class":250},[91,50453,34742],{"class":101},[91,50455,627],{"class":250},[91,50457,34747],{"class":101},[91,50459,34750],{"class":250},[168,50461,50462],{},"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":26,"searchDepth":38,"depth":38,"links":50464},[50465,50466,50467,50468],{"id":30672,"depth":1304,"text":30673},{"id":37920,"depth":1304,"text":37921},{"id":41353,"depth":1304,"text":41354},{"id":45362,"depth":1304,"text":45363},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30664,"description":23500},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50475,"title":50476,"body":50477,"description":23500,"extension":173,"meta":50484,"navigation":175,"path":50485,"seo":50486,"stem":50487,"__hash__":50488},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50478,"toc":50482},[50479],[10,50480,50476],{"id":50481},"_3yolo模型学习",{"title":26,"searchDepth":38,"depth":38,"links":50483},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50476,"description":23500},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50490,"title":50491,"body":50492,"description":50499,"extension":173,"meta":50500,"navigation":175,"path":50502,"seo":50503,"stem":50504,"__hash__":50505},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50493,"toc":50497},[50494],[21,50495,50496],{},"yolo模型还未补充",{"title":26,"searchDepth":38,"depth":38,"links":50498},[],"深度学习学习",{"category":50501},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50491,"description":50499},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50507,"title":50508,"body":50509,"description":23500,"extension":173,"meta":50534,"navigation":175,"path":50535,"seo":50536,"stem":50537,"__hash__":50538},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50510,"toc":50532},[50511,50514,50517,50522,50529],[10,50512,50508],{"id":50513},"_1工具",[21,50515,50516],{},"提示错误插件：有问题会提前报错",[21,50518,50519],{},[24,50520],{"alt":26,"src":50521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[21,50523,50524],{},[487,50525,50528],{"href":50526,"rel":50527},"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",[23987],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[21,50530,50531],{},"alt键加上下箭头可以实现语句的移动",{"title":26,"searchDepth":38,"depth":38,"links":50533},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50508,"description":23500},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50540,"title":50541,"body":50542,"description":23500,"extension":173,"meta":53406,"navigation":175,"path":53407,"seo":53408,"stem":53409,"__hash__":53410},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50543,"toc":53357},[50544,50547,50551,50555,50560,50563,50568,50572,50579,50584,50591,50596,50603,50608,50612,50617,50620,50624,50629,50633,50638,50641,50644,50647,50650,50653,50656,50659,50662,50667,50672,50677,50681,50684,50687,50691,50696,50699,50707,50712,50729,50737,50742,50747,50752,50757,50762,50765,50770,50775,50779,50788,50793,50798,50802,50807,50810,50814,50819,50827,50832,50837,50840,50845,50850,50855,50858,50861,50864,50869,50874,50877,50882,50885,50890,50893,50896,50899,50904,50907,50910,50925,50930,50935,50940,50943,50946,50949,50963,50966,50971,50976,50979,50982,50985,50988,50991,50994,50997,51001,51005,51010,51014,51017,51022,51027,51030,51035,51038,51042,51047,51050,51053,51056,51059,51062,51065,51068,51071,51074,51078,51083,51088,51093,51096,51099,51103,51108,51111,51115,51118,51121,51126,51129,51132,51136,51140,51143,51148,51153,51156,51185,51190,51195,51200,51205,51209,51214,51218,51223,51226,51230,51234,51239,51243,51248,51253,51257,51262,51265,51267,51270,51275,51279,51284,51288,51292,51297,51302,51307,51312,51316,51321,51326,51331,51334,51337,51342,51345,51350,51355,51360,51365,51369,52176,52180,52523,52528,52531,52534,52537,52540,52543,52546,52549,52552,52554,52557,52559,52562,52566,52571,52574,52577,52580,52584,52589,52594,52614,52617,52621,52626,52631,52648,52652,52681,52685,52707,52709,52748,52756,52762,52766,52769,52772,52777,52782,52785,52788,52791,52796,52801,52804,52807,52810,52813,52816,52819,52822,52825,52828,52831,52834,52836,52839,52842,52845,52848,52851,52854,52857,52860,52864,52869,52872,52877,52880,52883,52886,52889,52892,52895,52898,52900,52903,52906,52909,52912,52915,52918,52922,52925,52934,52937,52942,52945,52950,52953,52956,52959,52962,52965,52968,52971,52975,52979,52982,52985,52990,52995,53000,53004,53009,53014,53017,53020,53023,53026,53029,53034,53037,53042,53044,53049,53052,53056,53061,53064,53067,53072,53076,53079,53084,53087,53090,53119,53124,53127,53130,53133,53136,53139,53143,53146,53232,53236,53239,53244,53249,53256,53259,53262,53265,53268,53271,53276,53281,53284,53287,53290,53293,53296,53299,53302,53305,53308,53310,53313,53317,53322,53327,53332,53335,53340,53345,53348,53351,53354],[10,50545,50541],{"id":50546},"_2基础语法",[190,50548,50550],{"id":50549},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[217,50552,50554],{"id":50553},"_211-js组成","2.1.1 js组成",[14,50556,50557],{},[17,50558,50559],{},"js是编程语言，html和css不是编程语言，是标记语言",[21,50561,50562],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[14,50564,50565],{"start":38},[17,50566,50567],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[217,50569,50571],{"id":50570},"_212-js书写位置","2.1.2 js书写位置",[14,50573,50574],{},[17,50575,50576],{},[398,50577,50578],{},"内部 JavaScript",[21,50580,50581],{},[24,50582],{"alt":26,"src":50583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[14,50585,50586],{"start":38},[17,50587,50588],{},[398,50589,50590],{},"外部 JavaScript",[21,50592,50593],{},[24,50594],{"alt":26,"src":50595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[14,50597,50598],{"start":1304},[17,50599,50600],{},[398,50601,50602],{},"内联 JavaScript",[21,50604,50605],{},[24,50606],{"alt":26,"src":50607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[217,50609,50611],{"id":50610},"_213-javascript注释","2.1.3 JavaScript注释",[21,50613,50614],{},[24,50615],{"alt":26,"src":50616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[21,50618,50619],{},"alt+shift+a一定要记住！",[217,50621,50623],{"id":50622},"_214-javascript结束符","2.1.4 JavaScript结束符",[21,50625,50626],{},[24,50627],{"alt":26,"src":50628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[217,50630,50632],{"id":50631},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[14,50634,50635],{},[17,50636,50637],{},"输出语法：",[21,50639,50640],{},"①document.write('要出的内容')",[21,50642,50643],{},"向body内输出内容；",[21,50645,50646],{},"如果输出的内容写的是标签，也会被解析cheng",[21,50648,50649],{},"②alert('要出的内容')",[21,50651,50652],{},"页面弹出警告对话框",[21,50654,50655],{},"③console.log('控制台打印')",[21,50657,50658],{},"控制台输出语法，程序员调试使用",[21,50660,50661],{},"输入log就行，自动生成：",[21,50663,50664],{},[24,50665],{"alt":26,"src":50666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[14,50668,50669],{"start":38},[17,50670,50671],{},"输入语法：",[21,50673,50674],{},[24,50675],{"alt":26,"src":50676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[217,50678,50680],{"id":50679},"_2116-字面量","21.1.6 字面量",[21,50682,50683],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[21,50685,50686],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[190,50688,50690],{"id":50689},"_22-变量","2.2 变量",[14,50692,50693],{},[17,50694,50695],{},"变量声明",[21,50697,50698],{},"let 变量名",[1256,50700,50701,50704],{},[17,50702,50703],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[17,50705,50706],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[14,50708,50709],{"start":38},[17,50710,50711],{},"变量赋值",[82,50713,50717],{"className":50714,"code":50715,"language":50716,"meta":26,"style":26},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[88,50718,50719,50724],{"__ignoreMap":26},[91,50720,50721],{"class":93,"line":94},[91,50722,50723],{"class":250},"let age\n",[91,50725,50726],{"class":93,"line":38},[91,50727,50728],{"class":250},"age=18\n",[14,50730,50731,50734],{"start":1304},[17,50732,50733],{},"连这些（变量的初始化）：let age=18",[17,50735,50736],{},"更新变量",[21,50738,50739],{},[24,50740],{"alt":26,"src":50741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[14,50743,50744],{"start":1325},[17,50745,50746],{},"声明多个变量",[21,50748,50749],{},[24,50750],{"alt":26,"src":50751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[14,50753,50754],{"start":1339},[17,50755,50756],{},"变量命名规则与规范",[21,50758,50759],{},[24,50760],{"alt":26,"src":50761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[21,50763,50764],{},"遵守小驼峰！",[14,50766,50767],{"start":1345},[17,50768,50769],{},"变量拓展-let和var的区别",[21,50771,50772],{},[24,50773],{"alt":26,"src":50774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[190,50776,50778],{"id":50777},"_23-数组","2.3 数组",[82,50780,50782],{"className":50714,"code":50781,"language":50716,"meta":26,"style":26},"let arr = []\n",[88,50783,50784],{"__ignoreMap":26},[91,50785,50786],{"class":93,"line":94},[91,50787,50781],{"class":250},[21,50789,50790],{},[24,50791],{"alt":26,"src":50792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[21,50794,50795],{},[24,50796],{"alt":26,"src":50797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[190,50799,50801],{"id":50800},"_24-常量","2.4 常量",[21,50803,50804],{},[24,50805],{"alt":26,"src":50806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[21,50808,50809],{},"const — 类似于 let ，但是变量的值无法被修改",[190,50811,50813],{"id":50812},"_25-数据类型","2.5 数据类型",[21,50815,50816],{},[24,50817],{"alt":26,"src":50818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[14,50820,50821,50824],{},[17,50822,50823],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[17,50825,50826],{},"算数运算符：",[21,50828,50829],{},[24,50830],{"alt":26,"src":50831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[14,50833,50834],{"start":1304},[17,50835,50836],{},"数字类型（Number）",[21,50838,50839],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[21,50841,50842],{},[24,50843],{"alt":26,"src":50844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[14,50846,50847],{"start":1319},[17,50848,50849],{},"字符串类型（string）",[21,50851,50852],{},[24,50853],{"alt":26,"src":50854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[21,50856,50857],{},"反引号也是可以使用的",[21,50859,50860],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[21,50862,50863],{},"例如：document.write(\"我今年\"+age+\"岁\")",[14,50865,50866],{"start":1325},[17,50867,50868],{},"模板字符串",[21,50870,50871],{},[24,50872],{"alt":26,"src":50873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[21,50875,50876],{},"类似于python的字符串格式化",[14,50878,50879],{"start":1339},[17,50880,50881],{},"布尔类型",[21,50883,50884],{},"true 和 false",[14,50886,50887],{"start":1345},[17,50888,50889],{},"未定义类型（underfined）",[21,50891,50892],{},"表示没有赋值",[21,50894,50895],{},"未定义类型是比较特殊的类型，只有一个值undefined",[21,50897,50898],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[14,50900,50901],{"start":1436},[17,50902,50903],{},"null（空类型）",[21,50905,50906],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[21,50908,50909],{},"赋值了，但是内容为空",[82,50911,50913],{"className":50714,"code":50912,"language":50716,"meta":26,"style":26},"typeof null\n输出的是'object'，是一个对象数据类型\n",[88,50914,50915,50920],{"__ignoreMap":26},[91,50916,50917],{"class":93,"line":94},[91,50918,50919],{"class":250},"typeof null\n",[91,50921,50922],{"class":93,"line":38},[91,50923,50924],{"class":250},"输出的是'object'，是一个对象数据类型\n",[14,50926,50927],{"start":1442},[17,50928,50929],{},"控制台检测数据类型",[21,50931,50932],{},[24,50933],{"alt":26,"src":50934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[14,50936,50937],{"start":1454},[17,50938,50939],{},"类型转换",[21,50941,50942],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[21,50944,50945],{},"转换方式：隐式转换和显示转换",[21,50947,50948],{},"①隐式转换",[1256,50950,50951,50954,50957,50960],{},[17,50952,50953],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[17,50955,50956],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[17,50958,50959],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[17,50961,50962],{},"任何数据和字符串相加结果都是字符串",[21,50964,50965],{},"②显示转换",[21,50967,50968],{},[24,50969],{"alt":26,"src":50970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[21,50972,50973],{},[24,50974],{"alt":26,"src":50975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[21,50977,50978],{},"在输入的时候要用好隐式转换，简单写起来",[21,50980,50981],{},"let num = +prompt(’请输入数字：‘)",[21,50983,50984],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[21,50986,50987],{},"console.log(parseInt('12.333px'))",[21,50989,50990],{},"输出为：12",[21,50992,50993],{},"console.log(parseInt('a'a'a12.333px'))",[21,50995,50996],{},"输出：NaN",[190,50998,51000],{"id":50999},"_26-运算符","2.6 运算符",[217,51002,51004],{"id":51003},"_261-赋值运算符","2.6.1 赋值运算符",[21,51006,51007],{},[24,51008],{"alt":26,"src":51009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[217,51011,51013],{"id":51012},"_262-一元运算符","2.6.2 一元运算符",[21,51015,51016],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[21,51018,51019],{},[24,51020],{"alt":26,"src":51021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[21,51023,51024],{},[24,51025],{"alt":26,"src":51026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[21,51028,51029],{},"两者的区别：",[21,51031,51032],{},[24,51033],{"alt":26,"src":51034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[21,51036,51037],{},"前置先自加；后置后加，代码执行完之后再加",[217,51039,51041],{"id":51040},"_263-比较运算符","2.6.3 比较运算符",[21,51043,51044],{},[24,51045],{"alt":26,"src":51046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[21,51048,51049],{},"比较运算符也有隐式转换",[21,51051,51052],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[21,51054,51055],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[21,51057,51058],{},"要使用三等，开发的时候",[21,51060,51061],{},"NaN不等于任何人，包括它自己",[21,51063,51064],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[21,51066,51067],{},"7\u002F10=0.7",[21,51069,51070],{},"最后：0.5+0.2=0.7",[21,51072,51073],{},"字符串比较，比较的是字符对应的ASCII码",[217,51075,51077],{"id":51076},"_264-逻辑运算符","2.6.4 逻辑运算符",[21,51079,51080],{},[24,51081],{"alt":26,"src":51082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[21,51084,51085],{},[24,51086],{"alt":26,"src":51087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[21,51089,51090],{},[24,51091],{"alt":26,"src":51092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[21,51094,51095],{},"上述题目选D",[21,51097,51098],{},"与真2假1；或真1假2",[217,51100,51102],{"id":51101},"_265-运算符优先级","2.6.5 运算符优先级",[21,51104,51105],{},[24,51106],{"alt":26,"src":51107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[21,51109,51110],{},"先算逻辑与，后算逻辑或",[190,51112,51114],{"id":51113},"_27-语句","2.7 语句",[21,51116,51117],{},"表达式：是可以被求值的代码，会有结果给我们",[21,51119,51120],{},"语句：语句是可以被执行的代码，例如prompt()",[21,51122,51123],{},[24,51124],{"alt":26,"src":51125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[21,51127,51128],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[21,51130,51131],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[217,51133,51135],{"id":51134},"_271-分支语句","2.7.1 分支语句",[22121,51137,51139],{"id":51138},"_2711-if分支语句","2.7.1.1 if分支语句",[21,51141,51142],{},"if语句单行简单的话，可以不写{}，写在一行就行",[14,51144,51145],{},[17,51146,51147],{},"单分支语句",[21,51149,51150],{},[24,51151],{"alt":26,"src":51152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[21,51154,51155],{},"除了0，所有数字都为真",[82,51157,51159],{"className":50714,"code":51158,"language":50716,"meta":26,"style":26},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[88,51160,51161,51166,51171,51176,51180],{"__ignoreMap":26},[91,51162,51163],{"class":93,"line":94},[91,51164,51165],{"class":250},"if（0) {\n",[91,51167,51168],{"class":93,"line":38},[91,51169,51170],{"class":250},"    let a=1\n",[91,51172,51173],{"class":93,"line":1304},[91,51174,51175],{"class":250},"    alert(typeof a)\n",[91,51177,51178],{"class":93,"line":1319},[91,51179,1689],{"class":250},[91,51181,51182],{"class":93,"line":1325},[91,51183,51184],{"class":250},"不输出，括号为假\n",[14,51186,51187],{"start":38},[17,51188,51189],{},"双分支语句",[21,51191,51192],{},[24,51193],{"alt":26,"src":51194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[14,51196,51197],{"start":1304},[17,51198,51199],{},"多分支语句",[21,51201,51202],{},[24,51203],{"alt":26,"src":51204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22121,51206,51208],{"id":51207},"_2712-三元运算符","2.7.1.2 三元运算符",[21,51210,51211],{},[24,51212],{"alt":26,"src":51213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22121,51215,51217],{"id":51216},"_2713-switch语句","2.7.1.3 switch语句",[21,51219,51220],{},[24,51221],{"alt":26,"src":51222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[21,51224,51225],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[217,51227,51229],{"id":51228},"_272-循环语句","2.7.2 循环语句",[22121,51231,51233],{"id":51232},"_2721-断点演示","2.7.2.1 断点演示",[21,51235,51236],{},[24,51237],{"alt":26,"src":51238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22121,51240,51242],{"id":51241},"_2722-while循环","2.7.2.2 while循环",[21,51244,51245],{},[24,51246],{"alt":26,"src":51247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[21,51249,51250],{},[24,51251],{"alt":26,"src":51252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22121,51254,51256],{"id":51255},"_2723-for循环","2.7.2.3 for循环",[21,51258,51259],{},[24,51260],{"alt":26,"src":51261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[21,51263,51264],{},"for(;;) {",[21,51266,1195],{},[21,51268,51269],{},"表示无限循环",[21,51271,51272],{},[24,51273],{"alt":26,"src":51274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22121,51276,51278],{"id":51277},"_2724-循环的退出","2.7.2.4 循环的退出",[21,51280,51281],{},[24,51282],{"alt":26,"src":51283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[190,51285,51287],{"id":51286},"_28-数组","2.8 数组",[217,51289,51291],{"id":51290},"_281-基础认识","2.8.1 基础认识",[21,51293,51294],{},[24,51295],{"alt":26,"src":51296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[21,51298,51299],{},[24,51300],{"alt":26,"src":51301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[21,51303,51304],{},[24,51305],{"alt":26,"src":51306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[21,51308,51309],{},[24,51310],{"alt":26,"src":51311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[217,51313,51315],{"id":51314},"_282-操作数组","2.8.2 操作数组",[21,51317,51318],{},[24,51319],{"alt":26,"src":51320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[14,51322,51323],{},[17,51324,51325],{},"添加元素",[21,51327,51328],{},[24,51329],{"alt":26,"src":51330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[21,51332,51333],{},"console.log(arr.push('green'))",[21,51335,51336],{},"输出结果：为新数组的长度",[21,51338,51339],{},[24,51340],{"alt":26,"src":51341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[21,51343,51344],{},"push用的非常多，一定要记住",[14,51346,51347],{},[17,51348,51349],{},"删除元素",[21,51351,51352],{},[24,51353],{"alt":26,"src":51354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[21,51356,51357],{},[24,51358],{"alt":26,"src":51359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[21,51361,51362],{},[24,51363],{"alt":26,"src":51364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[217,51366,51368],{"id":51367},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[82,51370,51372],{"className":50714,"code":51371,"language":50716,"meta":26,"style":26},"\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",[88,51373,51374,51389,51405,51409,51418,51436,51460,51482,51496,51504,51511,51523,51534,51538,51542,51549,51561,51576,51589,51608,51625,51640,51652,51664,51676,51680,51684,51695,51705,51717,51729,51741,51752,51756,51760,51772,51776,51790,51794,51798,51809,51823,51835,51849,51853,51862,51871,51875,51884,51888,51897,51902,51907,51920,51948,51953,51958,51983,51988,51992,51997,52002,52017,52021,52026,52056,52068,52084,52100,52114,52119,52126,52130,52135,52148,52156,52164,52168],{"__ignoreMap":26},[91,51375,51376,51379,51383,51386],{"class":93,"line":94},[91,51377,51378],{"class":250},"\u003C!",[91,51380,51382],{"class":51381},"s9eBZ","DOCTYPE",[91,51384,51385],{"class":97}," html",[91,51387,51388],{"class":250},">\n",[91,51390,51391,51393,51395,51398,51400,51403],{"class":93,"line":38},[91,51392,1159],{"class":250},[91,51394,50716],{"class":51381},[91,51396,51397],{"class":97}," lang",[91,51399,296],{"class":250},[91,51401,51402],{"class":101},"\"en\"",[91,51404,51388],{"class":250},[91,51406,51407],{"class":93,"line":1304},[91,51408,2523],{"emptyLinePlaceholder":175},[91,51410,51411,51413,51416],{"class":93,"line":1319},[91,51412,1159],{"class":250},[91,51414,51415],{"class":51381},"head",[91,51417,51388],{"class":250},[91,51419,51420,51423,51426,51429,51431,51434],{"class":93,"line":1325},[91,51421,51422],{"class":250},"    \u003C",[91,51424,51425],{"class":51381},"meta",[91,51427,51428],{"class":97}," charset",[91,51430,296],{"class":250},[91,51432,51433],{"class":101},"\"UTF-8\"",[91,51435,51388],{"class":250},[91,51437,51438,51440,51442,51445,51447,51450,51453,51455,51458],{"class":93,"line":1339},[91,51439,51422],{"class":250},[91,51441,51425],{"class":51381},[91,51443,51444],{"class":97}," http-equiv",[91,51446,296],{"class":250},[91,51448,51449],{"class":101},"\"X-UA-Compatible\"",[91,51451,51452],{"class":97}," content",[91,51454,296],{"class":250},[91,51456,51457],{"class":101},"\"IE=edge\"",[91,51459,51388],{"class":250},[91,51461,51462,51464,51466,51468,51470,51473,51475,51477,51480],{"class":93,"line":1345},[91,51463,51422],{"class":250},[91,51465,51425],{"class":51381},[91,51467,15043],{"class":97},[91,51469,296],{"class":250},[91,51471,51472],{"class":101},"\"viewport\"",[91,51474,51452],{"class":97},[91,51476,296],{"class":250},[91,51478,51479],{"class":101},"\"width=device-width, initial-scale=1.0\"",[91,51481,51388],{"class":250},[91,51483,51484,51486,51489,51492,51494],{"class":93,"line":1436},[91,51485,51422],{"class":250},[91,51487,51488],{"class":51381},"title",[91,51490,51491],{"class":250},">Document\u003C\u002F",[91,51493,51488],{"class":51381},[91,51495,51388],{"class":250},[91,51497,51498,51500,51502],{"class":93,"line":1442},[91,51499,51422],{"class":250},[91,51501,168],{"class":51381},[91,51503,51388],{"class":250},[91,51505,51506,51509],{"class":93,"line":1454},[91,51507,51508],{"class":51381},"        *",[91,51510,15695],{"class":250},[91,51512,51513,51516,51519,51521],{"class":93,"line":1736},[91,51514,51515],{"class":105},"            margin",[91,51517,51518],{"class":250},": ",[91,51520,440],{"class":105},[91,51522,1415],{"class":250},[91,51524,51525,51528,51530,51532],{"class":93,"line":1741},[91,51526,51527],{"class":105},"            padding",[91,51529,51518],{"class":250},[91,51531,440],{"class":105},[91,51533,1415],{"class":250},[91,51535,51536],{"class":93,"line":1747},[91,51537,2652],{"class":250},[91,51539,51540],{"class":93,"line":1752},[91,51541,2523],{"emptyLinePlaceholder":175},[91,51543,51544,51547],{"class":93,"line":1766},[91,51545,51546],{"class":97},"        .box",[91,51548,15695],{"class":250},[91,51550,51551,51554,51556,51559],{"class":93,"line":1771},[91,51552,51553],{"class":105},"            display",[91,51555,51518],{"class":250},[91,51557,51558],{"class":105},"flex",[91,51560,1415],{"class":250},[91,51562,51563,51566,51568,51571,51574],{"class":93,"line":1777},[91,51564,51565],{"class":105},"            width",[91,51567,51518],{"class":250},[91,51569,51570],{"class":105},"700",[91,51572,51573],{"class":153},"px",[91,51575,1415],{"class":250},[91,51577,51578,51581,51583,51585,51587],{"class":93,"line":1798},[91,51579,51580],{"class":105},"            height",[91,51582,51518],{"class":250},[91,51584,4096],{"class":105},[91,51586,51573],{"class":153},[91,51588,1415],{"class":250},[91,51590,51591,51594,51596,51598,51600,51603,51606],{"class":93,"line":1803},[91,51592,51593],{"class":105},"            border-left",[91,51595,51518],{"class":250},[91,51597,466],{"class":105},[91,51599,51573],{"class":153},[91,51601,51602],{"class":105}," solid",[91,51604,51605],{"class":105}," pink",[91,51607,1415],{"class":250},[91,51609,51610,51613,51615,51617,51619,51621,51623],{"class":93,"line":1817},[91,51611,51612],{"class":105},"            border-bottom",[91,51614,51518],{"class":250},[91,51616,466],{"class":105},[91,51618,51573],{"class":153},[91,51620,51602],{"class":105},[91,51622,51605],{"class":105},[91,51624,1415],{"class":250},[91,51626,51627,51629,51631,51633,51635,51638],{"class":93,"line":1822},[91,51628,51515],{"class":105},[91,51630,51518],{"class":250},[91,51632,905],{"class":105},[91,51634,51573],{"class":153},[91,51636,51637],{"class":105}," auto",[91,51639,1415],{"class":250},[91,51641,51642,51645,51647,51650],{"class":93,"line":1851},[91,51643,51644],{"class":105},"            justify-content",[91,51646,51518],{"class":250},[91,51648,51649],{"class":105},"space-around",[91,51651,1415],{"class":250},[91,51653,51654,51657,51659,51662],{"class":93,"line":1856},[91,51655,51656],{"class":105},"            align-items",[91,51658,51518],{"class":250},[91,51660,51661],{"class":105},"flex-end",[91,51663,1415],{"class":250},[91,51665,51666,51669,51671,51674],{"class":93,"line":1873},[91,51667,51668],{"class":105},"            text-align",[91,51670,51518],{"class":250},[91,51672,51673],{"class":105},"center",[91,51675,1415],{"class":250},[91,51677,51678],{"class":93,"line":1878},[91,51679,2652],{"class":250},[91,51681,51682],{"class":93,"line":1883},[91,51683,2523],{"emptyLinePlaceholder":175},[91,51685,51686,51688,51690,51693],{"class":93,"line":1888},[91,51687,51546],{"class":97},[91,51689,1209],{"class":153},[91,51691,51692],{"class":51381},"div",[91,51694,15695],{"class":250},[91,51696,51697,51699,51701,51703],{"class":93,"line":1902},[91,51698,51553],{"class":105},[91,51700,51518],{"class":250},[91,51702,51558],{"class":105},[91,51704,1415],{"class":250},[91,51706,51707,51709,51711,51713,51715],{"class":93,"line":1907},[91,51708,51565],{"class":105},[91,51710,51518],{"class":250},[91,51712,905],{"class":105},[91,51714,51573],{"class":153},[91,51716,1415],{"class":250},[91,51718,51719,51722,51724,51727],{"class":93,"line":2700},[91,51720,51721],{"class":105},"            background-color",[91,51723,51518],{"class":250},[91,51725,51726],{"class":105},"pink",[91,51728,1415],{"class":250},[91,51730,51731,51734,51736,51739],{"class":93,"line":2714},[91,51732,51733],{"class":105},"            flex-direction",[91,51735,51518],{"class":250},[91,51737,51738],{"class":105},"column",[91,51740,1415],{"class":250},[91,51742,51743,51745,51747,51750],{"class":93,"line":2722},[91,51744,51644],{"class":105},[91,51746,51518],{"class":250},[91,51748,51749],{"class":105},"space-between",[91,51751,1415],{"class":250},[91,51753,51754],{"class":93,"line":2727},[91,51755,2652],{"class":250},[91,51757,51758],{"class":93,"line":2733},[91,51759,2523],{"emptyLinePlaceholder":175},[91,51761,51762,51764,51767,51770],{"class":93,"line":2739},[91,51763,51546],{"class":97},[91,51765,51766],{"class":51381}," div",[91,51768,51769],{"class":51381}," span",[91,51771,15695],{"class":250},[91,51773,51774],{"class":93,"line":2744},[91,51775,2523],{"emptyLinePlaceholder":175},[91,51777,51778,51781,51783,51786,51788],{"class":93,"line":8071},[91,51779,51780],{"class":105},"            margin-top",[91,51782,51518],{"class":250},[91,51784,51785],{"class":105},"-20",[91,51787,51573],{"class":153},[91,51789,1415],{"class":250},[91,51791,51792],{"class":93,"line":8095},[91,51793,2652],{"class":250},[91,51795,51796],{"class":93,"line":8100},[91,51797,2523],{"emptyLinePlaceholder":175},[91,51799,51800,51802,51804,51807],{"class":93,"line":8106},[91,51801,51546],{"class":97},[91,51803,51766],{"class":51381},[91,51805,51806],{"class":51381}," h4",[91,51808,15695],{"class":250},[91,51810,51811,51814,51816,51819,51821],{"class":93,"line":8133},[91,51812,51813],{"class":105},"            margin-bottom",[91,51815,51518],{"class":250},[91,51817,51818],{"class":105},"-35",[91,51820,51573],{"class":153},[91,51822,1415],{"class":250},[91,51824,51825,51827,51829,51831,51833],{"class":93,"line":8138},[91,51826,51565],{"class":105},[91,51828,51518],{"class":250},[91,51830,605],{"class":105},[91,51832,51573],{"class":153},[91,51834,1415],{"class":250},[91,51836,51837,51840,51842,51845,51847],{"class":93,"line":8144},[91,51838,51839],{"class":105},"            margin-left",[91,51841,51518],{"class":250},[91,51843,51844],{"class":105},"-10",[91,51846,51573],{"class":153},[91,51848,1415],{"class":250},[91,51850,51851],{"class":93,"line":8156},[91,51852,2652],{"class":250},[91,51854,51855,51858,51860],{"class":93,"line":8168},[91,51856,51857],{"class":250},"    \u003C\u002F",[91,51859,168],{"class":51381},[91,51861,51388],{"class":250},[91,51863,51864,51867,51869],{"class":93,"line":8180},[91,51865,51866],{"class":250},"\u003C\u002F",[91,51868,51415],{"class":51381},[91,51870,51388],{"class":250},[91,51872,51873],{"class":93,"line":9839},[91,51874,2523],{"emptyLinePlaceholder":175},[91,51876,51877,51879,51882],{"class":93,"line":9864},[91,51878,1159],{"class":250},[91,51880,51881],{"class":51381},"body",[91,51883,51388],{"class":250},[91,51885,51886],{"class":93,"line":9887},[91,51887,2523],{"emptyLinePlaceholder":175},[91,51889,51890,51892,51895],{"class":93,"line":9911},[91,51891,51422],{"class":250},[91,51893,51894],{"class":51381},"script",[91,51896,51388],{"class":250},[91,51898,51899],{"class":93,"line":9916},[91,51900,51901],{"class":308},"        \u002F\u002F 1. 四次弹框效果\n",[91,51903,51904],{"class":93,"line":9921},[91,51905,51906],{"class":308},"        \u002F\u002F 声明一个新的数组\n",[91,51908,51909,51912,51915,51917],{"class":93,"line":9926},[91,51910,51911],{"class":153},"        let",[91,51913,51914],{"class":250}," arr ",[91,51916,296],{"class":153},[91,51918,51919],{"class":250}," []\n",[91,51921,51922,51924,51926,51929,51931,51933,51935,51937,51939,51942,51944,51946],{"class":93,"line":9935},[91,51923,3526],{"class":153},[91,51925,1782],{"class":250},[91,51927,51928],{"class":153},"let",[91,51930,9561],{"class":250},[91,51932,296],{"class":153},[91,51934,25240],{"class":105},[91,51936,9568],{"class":250},[91,51938,1712],{"class":153},[91,51940,51941],{"class":105}," 4",[91,51943,3337],{"class":250},[91,51945,2415],{"class":153},[91,51947,12565],{"class":250},[91,51949,51950],{"class":93,"line":9940},[91,51951,51952],{"class":308},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[91,51954,51955],{"class":93,"line":9946},[91,51956,51957],{"class":308},"            \u002F\u002F arr.push(num)\n",[91,51959,51960,51963,51966,51968,51971,51973,51976,51978,51981],{"class":93,"line":9967},[91,51961,51962],{"class":250},"            arr.",[91,51964,51965],{"class":97},"push",[91,51967,251],{"class":250},[91,51969,51970],{"class":97},"prompt",[91,51972,251],{"class":250},[91,51974,51975],{"class":101},"`请输入第${",[91,51977,690],{"class":250},[91,51979,51980],{"class":101},"}季度的数据:`",[91,51982,30578],{"class":250},[91,51984,51985],{"class":93,"line":9973},[91,51986,51987],{"class":308},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[91,51989,51990],{"class":93,"line":9987},[91,51991,2652],{"class":250},[91,51993,51994],{"class":93,"line":9993},[91,51995,51996],{"class":308},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[91,51998,51999],{"class":93,"line":10020},[91,52000,52001],{"class":308},"        \u002F\u002F 盒子开头\n",[91,52003,52004,52007,52010,52012,52015],{"class":93,"line":10029},[91,52005,52006],{"class":250},"        document.",[91,52008,52009],{"class":97},"write",[91,52011,251],{"class":250},[91,52013,52014],{"class":101},"` \u003Cdiv class=\"box\">`",[91,52016,257],{"class":250},[91,52018,52019],{"class":93,"line":10035},[91,52020,2523],{"emptyLinePlaceholder":175},[91,52022,52023],{"class":93,"line":10043},[91,52024,52025],{"class":308},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[91,52027,52028,52030,52032,52034,52036,52038,52040,52042,52044,52047,52050,52052,52054],{"class":93,"line":10048},[91,52029,3526],{"class":153},[91,52031,1782],{"class":250},[91,52033,51928],{"class":153},[91,52035,9561],{"class":250},[91,52037,296],{"class":153},[91,52039,4216],{"class":105},[91,52041,9568],{"class":250},[91,52043,1159],{"class":153},[91,52045,52046],{"class":250}," arr.",[91,52048,52049],{"class":105},"length",[91,52051,3337],{"class":250},[91,52053,2415],{"class":153},[91,52055,12565],{"class":250},[91,52057,52058,52061,52063,52065],{"class":93,"line":16727},[91,52059,52060],{"class":250},"            document.",[91,52062,52009],{"class":97},[91,52064,251],{"class":250},[91,52066,52067],{"class":101},"`\n",[91,52069,52070,52073,52075,52077,52079,52081],{"class":93,"line":16733},[91,52071,52072],{"class":101},"              \u003Cdiv style=\"height: ${",[91,52074,4003],{"class":250},[91,52076,1139],{"class":101},[91,52078,690],{"class":250},[91,52080,1189],{"class":101},[91,52082,52083],{"class":101},"}px;\">\n",[91,52085,52086,52089,52091,52093,52095,52097],{"class":93,"line":16756},[91,52087,52088],{"class":101},"                \u003Cspan>${",[91,52090,4003],{"class":250},[91,52092,1139],{"class":101},[91,52094,690],{"class":250},[91,52096,1189],{"class":101},[91,52098,52099],{"class":101},"}\u003C\u002Fspan>\n",[91,52101,52102,52105,52107,52109,52111],{"class":93,"line":16762},[91,52103,52104],{"class":101},"                \u003Ch4>第${",[91,52106,690],{"class":250},[91,52108,45647],{"class":153},[91,52110,25240],{"class":105},[91,52112,52113],{"class":101},"}季度\u003C\u002Fh4>\n",[91,52115,52116],{"class":93,"line":16785},[91,52117,52118],{"class":101},"              \u003C\u002Fdiv>          \n",[91,52120,52121,52124],{"class":93,"line":16799},[91,52122,52123],{"class":101},"            `",[91,52125,257],{"class":250},[91,52127,52128],{"class":93,"line":16819},[91,52129,2652],{"class":250},[91,52131,52132],{"class":93,"line":16825},[91,52133,52134],{"class":308},"        \u002F\u002F 盒子结尾\n",[91,52136,52137,52139,52141,52143,52146],{"class":93,"line":16836},[91,52138,52006],{"class":250},[91,52140,52009],{"class":97},[91,52142,251],{"class":250},[91,52144,52145],{"class":101},"` \u003C\u002Fdiv>`",[91,52147,257],{"class":250},[91,52149,52150,52152,52154],{"class":93,"line":16859},[91,52151,51857],{"class":250},[91,52153,51894],{"class":51381},[91,52155,51388],{"class":250},[91,52157,52158,52160,52162],{"class":93,"line":16881},[91,52159,51866],{"class":250},[91,52161,51881],{"class":51381},[91,52163,51388],{"class":250},[91,52165,52166],{"class":93,"line":16886},[91,52167,2523],{"emptyLinePlaceholder":175},[91,52169,52170,52172,52174],{"class":93,"line":16892},[91,52171,51866],{"class":250},[91,52173,50716],{"class":51381},[91,52175,51388],{"class":250},[217,52177,52179],{"id":52178},"_284-冒泡排序","2.8.4 冒泡排序",[82,52181,52183],{"className":50714,"code":52182,"language":50716,"meta":26,"style":26},"\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",[88,52184,52185,52195,52209,52213,52221,52236,52256,52268,52276,52280,52288,52296,52328,52361,52398,52403,52422,52427,52440,52455,52471,52475,52480,52484,52494,52503,52511,52515],{"__ignoreMap":26},[91,52186,52187,52189,52191,52193],{"class":93,"line":94},[91,52188,51378],{"class":250},[91,52190,51382],{"class":51381},[91,52192,51385],{"class":97},[91,52194,51388],{"class":250},[91,52196,52197,52199,52201,52203,52205,52207],{"class":93,"line":38},[91,52198,1159],{"class":250},[91,52200,50716],{"class":51381},[91,52202,51397],{"class":97},[91,52204,296],{"class":250},[91,52206,51402],{"class":101},[91,52208,51388],{"class":250},[91,52210,52211],{"class":93,"line":1304},[91,52212,2523],{"emptyLinePlaceholder":175},[91,52214,52215,52217,52219],{"class":93,"line":1319},[91,52216,1159],{"class":250},[91,52218,51415],{"class":51381},[91,52220,51388],{"class":250},[91,52222,52223,52226,52228,52230,52232,52234],{"class":93,"line":1325},[91,52224,52225],{"class":250},"  \u003C",[91,52227,51425],{"class":51381},[91,52229,51428],{"class":97},[91,52231,296],{"class":250},[91,52233,51433],{"class":101},[91,52235,51388],{"class":250},[91,52237,52238,52240,52242,52244,52246,52248,52250,52252,52254],{"class":93,"line":1339},[91,52239,52225],{"class":250},[91,52241,51425],{"class":51381},[91,52243,15043],{"class":97},[91,52245,296],{"class":250},[91,52247,51472],{"class":101},[91,52249,51452],{"class":97},[91,52251,296],{"class":250},[91,52253,51479],{"class":101},[91,52255,51388],{"class":250},[91,52257,52258,52260,52262,52264,52266],{"class":93,"line":1345},[91,52259,52225],{"class":250},[91,52261,51488],{"class":51381},[91,52263,51491],{"class":250},[91,52265,51488],{"class":51381},[91,52267,51388],{"class":250},[91,52269,52270,52272,52274],{"class":93,"line":1436},[91,52271,51866],{"class":250},[91,52273,51415],{"class":51381},[91,52275,51388],{"class":250},[91,52277,52278],{"class":93,"line":1442},[91,52279,2523],{"emptyLinePlaceholder":175},[91,52281,52282,52284,52286],{"class":93,"line":1454},[91,52283,1159],{"class":250},[91,52285,51881],{"class":51381},[91,52287,51388],{"class":250},[91,52289,52290,52292,52294],{"class":93,"line":1736},[91,52291,52225],{"class":250},[91,52293,51894],{"class":51381},[91,52295,51388],{"class":250},[91,52297,52298,52301,52303,52305,52308,52310,52312,52314,52316,52318,52320,52322,52324,52326],{"class":93,"line":1741},[91,52299,52300],{"class":153},"    let",[91,52302,51914],{"class":250},[91,52304,296],{"class":153},[91,52306,52307],{"class":250}," [",[91,52309,568],{"class":105},[91,52311,12558],{"class":250},[91,52313,542],{"class":105},[91,52315,12558],{"class":250},[91,52317,321],{"class":105},[91,52319,12558],{"class":250},[91,52321,327],{"class":105},[91,52323,12558],{"class":250},[91,52325,466],{"class":105},[91,52327,33327],{"class":250},[91,52329,52330,52332,52334,52336,52338,52340,52342,52344,52346,52348,52350,52353,52355,52357,52359],{"class":93,"line":1747},[91,52331,3324],{"class":153},[91,52333,1782],{"class":250},[91,52335,51928],{"class":153},[91,52337,9561],{"class":250},[91,52339,296],{"class":153},[91,52341,4216],{"class":105},[91,52343,9568],{"class":250},[91,52345,1159],{"class":153},[91,52347,52046],{"class":250},[91,52349,52049],{"class":105},[91,52351,52352],{"class":153}," -",[91,52354,25240],{"class":105},[91,52356,3337],{"class":250},[91,52358,2415],{"class":153},[91,52360,12565],{"class":250},[91,52362,52363,52366,52368,52370,52372,52374,52376,52378,52380,52382,52384,52386,52388,52390,52392,52394,52396],{"class":93,"line":1752},[91,52364,52365],{"class":153},"      for",[91,52367,1782],{"class":250},[91,52369,51928],{"class":153},[91,52371,9623],{"class":250},[91,52373,296],{"class":153},[91,52375,4216],{"class":105},[91,52377,9630],{"class":250},[91,52379,1159],{"class":153},[91,52381,52046],{"class":250},[91,52383,52049],{"class":105},[91,52385,52352],{"class":153},[91,52387,9561],{"class":250},[91,52389,781],{"class":153},[91,52391,25240],{"class":105},[91,52393,9637],{"class":250},[91,52395,2415],{"class":153},[91,52397,12565],{"class":250},[91,52399,52400],{"class":93,"line":1766},[91,52401,52402],{"class":308},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[91,52404,52405,52407,52410,52412,52415,52417,52419],{"class":93,"line":1771},[91,52406,2620],{"class":153},[91,52408,52409],{"class":250}," (arr[j] ",[91,52411,1209],{"class":153},[91,52413,52414],{"class":250}," arr[j ",[91,52416,730],{"class":153},[91,52418,25240],{"class":105},[91,52420,52421],{"class":250},"]) {\n",[91,52423,52424],{"class":93,"line":1777},[91,52425,52426],{"class":308},"          \u002F\u002F 交换两个变量\n",[91,52428,52429,52432,52435,52437],{"class":93,"line":1798},[91,52430,52431],{"class":153},"          let",[91,52433,52434],{"class":250}," tmp ",[91,52436,296],{"class":153},[91,52438,52439],{"class":250}," arr[j]\n",[91,52441,52442,52445,52447,52449,52451,52453],{"class":93,"line":1803},[91,52443,52444],{"class":250},"          arr[j] ",[91,52446,296],{"class":153},[91,52448,52414],{"class":250},[91,52450,730],{"class":153},[91,52452,25240],{"class":105},[91,52454,33327],{"class":250},[91,52456,52457,52460,52462,52464,52466,52468],{"class":93,"line":1817},[91,52458,52459],{"class":250},"          arr[j ",[91,52461,730],{"class":153},[91,52463,25240],{"class":105},[91,52465,4566],{"class":250},[91,52467,296],{"class":153},[91,52469,52470],{"class":250}," tmp\n",[91,52472,52473],{"class":93,"line":1822},[91,52474,2652],{"class":250},[91,52476,52477],{"class":93,"line":1851},[91,52478,52479],{"class":250},"      }\n",[91,52481,52482],{"class":93,"line":1856},[91,52483,2310],{"class":250},[91,52485,52486,52489,52491],{"class":93,"line":1873},[91,52487,52488],{"class":250},"    document.",[91,52490,52009],{"class":97},[91,52492,52493],{"class":250},"(arr)\n",[91,52495,52496,52499,52501],{"class":93,"line":1878},[91,52497,52498],{"class":250},"  \u003C\u002F",[91,52500,51894],{"class":51381},[91,52502,51388],{"class":250},[91,52504,52505,52507,52509],{"class":93,"line":1883},[91,52506,51866],{"class":250},[91,52508,51881],{"class":51381},[91,52510,51388],{"class":250},[91,52512,52513],{"class":93,"line":1888},[91,52514,2523],{"emptyLinePlaceholder":175},[91,52516,52517,52519,52521],{"class":93,"line":1902},[91,52518,51866],{"class":250},[91,52520,50716],{"class":51381},[91,52522,51388],{"class":250},[21,52524,52525],{},[24,52526],{"alt":26,"src":52527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[21,52529,52530],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[21,52532,52533],{},"let arr = [4, 2, 5, 1, 3]",[21,52535,52536],{},"\u002F\u002F 1.升序排列写法",[21,52538,52539],{},"arr.sort(function (a, b) {",[21,52541,52542],{},"return a - b",[21,52544,52545],{},"})",[21,52547,52548],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[21,52550,52551],{},"\u002F\u002F 降序排列写法",[21,52553,52539],{},[21,52555,52556],{},"return b - a",[21,52558,52545],{},[21,52560,52561],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[190,52563,52565],{"id":52564},"_29-函数","2.9 函数",[21,52567,52568],{},[24,52569],{"alt":26,"src":52570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[21,52572,52573],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[21,52575,52576],{},"函数的声明用function",[21,52578,52579],{},"函数里边可以嵌套函数",[217,52581,52583],{"id":52582},"_291-函数传参","2.9.1 函数传参",[21,52585,52586],{},[24,52587],{"alt":26,"src":52588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[21,52590,52591],{},[24,52592],{"alt":26,"src":52593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1256,52595,52596,52599,52602,52605,52608,52611],{},[17,52597,52598],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[17,52600,52601],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[17,52603,52604],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[17,52606,52607],{},"开发中尽量保持形参和实参个数一致",[17,52609,52610],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[17,52612,52613],{},"形参只在函数中有用，所以不需要进行声明这个变量",[21,52615,52616],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[217,52618,52620],{"id":52619},"_292-函数的返回值","2.9.2 函数的返回值",[21,52622,52623],{},[24,52624],{"alt":26,"src":52625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[21,52627,52628],{},[24,52629],{"alt":26,"src":52630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1256,52632,52633,52636,52639,52642,52645],{},[17,52634,52635],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[17,52637,52638],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[17,52640,52641],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[17,52643,52644],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[17,52646,52647],{},"断点调试:进入函数内部看执行过程F11",[217,52649,52651],{"id":52650},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[82,52653,52655],{"className":50714,"code":52654,"language":50716,"meta":26,"style":26},"    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",[88,52656,52657,52662,52667,52671,52676],{"__ignoreMap":26},[91,52658,52659],{"class":93,"line":94},[91,52660,52661],{"class":250},"    function fn(a, b) {\n",[91,52663,52664],{"class":93,"line":38},[91,52665,52666],{"class":250},"      console.log(a + b);\n",[91,52668,52669],{"class":93,"line":1304},[91,52670,2310],{"class":250},[91,52672,52673],{"class":93,"line":1319},[91,52674,52675],{"class":250},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[91,52677,52678],{"class":93,"line":1325},[91,52679,52680],{"class":250},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[217,52682,52684],{"id":52683},"_294-作用域","2.9.4 作用域",[1256,52686,52687,52693,52698,52701,52704],{},[17,52688,52689,52690],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[398,52691,52692],{},"作用域",[17,52694,52695],{},[398,52696,52697],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[17,52699,52700],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[17,52702,52703],{},"函数内部可以直接所使用全局变量",[17,52705,52706],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[21,52708,14756],{},[82,52710,52712],{"className":50714,"code":52711,"language":50716,"meta":26,"style":26},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[88,52713,52714,52719,52724,52728,52733,52738,52743],{"__ignoreMap":26},[91,52715,52716],{"class":93,"line":94},[91,52717,52718],{"class":250},"    function fun() {\n",[91,52720,52721],{"class":93,"line":38},[91,52722,52723],{"class":250},"      num = 10\n",[91,52725,52726],{"class":93,"line":1304},[91,52727,2310],{"class":250},[91,52729,52730],{"class":93,"line":1319},[91,52731,52732],{"class":250},"    fun()\n",[91,52734,52735],{"class":93,"line":1325},[91,52736,52737],{"class":250},"    console.log(num)\n",[91,52739,52740],{"class":93,"line":1339},[91,52741,52742],{"class":250},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[91,52744,52745],{"class":93,"line":1345},[91,52746,52747],{"class":250},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1256,52749,52750,52753],{},[17,52751,52752],{},"函数内部的形参可以看做是局部变量",[17,52754,52755],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[21,52757,52758,52759],{},"变量访问原则： ",[398,52760,52761],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[217,52763,52765],{"id":52764},"_295-匿名函数","2.9.5 匿名函数",[21,52767,52768],{},"函数可以分为具名函数和匿名函数",[21,52770,52771],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[14,52773,52774],{},[17,52775,52776],{},"函数表达式",[21,52778,52779],{},[24,52780],{"alt":26,"src":52781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[21,52783,52784],{},"里边也可以写参数",[21,52786,52787],{},"具名函数调用位置可以随意调整；",[21,52789,52790],{},"匿名函数函数表达式形式只能在声明后才可以使用",[14,52792,52793],{"start":38},[17,52794,52795],{},"立即执行函数",[21,52797,52798],{},[24,52799],{"alt":26,"src":52800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[21,52802,52803],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[21,52805,52806],{},"写法：两个小括号，然后在第一个小括号中写function",[21,52808,52809],{},"(function () {})();",[21,52811,52812],{},"不要落下最后的;",[21,52814,52815],{},"立即执行函数必须要加;",[21,52817,52818],{},"分号写前写后都没问题",[21,52820,52821],{},"写前：",[21,52823,52824],{},"(function() {})()",[21,52826,52827],{},";(function () {})();",[21,52829,52830],{},"写后:",[21,52832,52833],{},"(function() {})();",[21,52835,52809],{},[21,52837,52838],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[21,52840,52841],{},"还有一种写法：",[21,52843,52844],{},"(function(){}());",[21,52846,52847],{},"或者:",[21,52849,52850],{},"!function(){}();",[21,52852,52853],{},"立即执行函数有时候也是可以加名字的：",[21,52855,52856],{},"(function flexible(window,document) {}(window,document));",[21,52858,52859],{},"省一些调用方法",[217,52861,52863],{"id":52862},"_296-逻辑中断","2.9.6 逻辑中断!!!",[21,52865,52866],{},[24,52867],{"alt":26,"src":52868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[21,52870,52871],{},"这样就不用非得给x,y初始化了",[21,52873,52874],{},[24,52875],{"alt":26,"src":52876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[21,52878,52879],{},"代码执行时先看左边",[21,52881,52882],{},"例如：console.log(false && 3+5)",[21,52884,52885],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[21,52887,52888],{},"&&都是真时，就返回最后一个真值",[21,52890,52891],{},"console.log(11 && 22)",[21,52893,52894],{},"输出22",[21,52896,52897],{},"逻辑与：遇真则真",[21,52899,14756],{},[21,52901,52902],{},"let age=1",[21,52904,52905],{},"console.log(11 || age++)",[21,52907,52908],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[21,52910,52911],{},"console.log(11 || 22)",[21,52913,52914],{},"||逻辑或遇到真就直接输出，输出结果为11",[21,52916,52917],{},"||如果都是假的话，就取最后一个假的值了",[217,52919,52921],{"id":52920},"_297-转换为boolean型","2.9.7 转换为Boolean型",[21,52923,52924],{},"显示转换：",[21,52926,52927,52930,52931],{},[398,52928,52929],{},"记忆","： ",[398,52932,52933],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[21,52935,52936],{},"空字符串为假，其他字符串全为真",[21,52938,52939],{},[24,52940],{"alt":26,"src":52941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[21,52943,52944],{},"隐式转换：",[21,52946,52947],{},[24,52948],{"alt":26,"src":52949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[21,52951,52952],{},"隐式转换:",[21,52954,52955],{},"null+3=3",[21,52957,52958],{},"undefined+3=NaN",[21,52960,52961],{},"null==undefined 输出true,他两个都当0看",[21,52963,52964],{},"null===undefined 输出false",[21,52966,52967],{},"undefined做任何操作都是NaN",[21,52969,52970],{},"NaN不等于NaN，NaN表示计算错误",[190,52972,52974],{"id":52973},"_210-对象","2.10 对象",[217,52976,52978],{"id":52977},"_2101-对象的介绍","2.10.1 对象的介绍",[21,52980,52981],{},"对象也是一种数据类型，里边的数据是无序的",[21,52983,52984],{},"对象由属性和方法组成",[21,52986,52987],{},[24,52988],{"alt":26,"src":52989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[21,52991,52992],{},[24,52993],{"alt":26,"src":52994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[21,52996,52997],{},[24,52998],{"alt":26,"src":52999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[217,53001,53003],{"id":53002},"_2102-对象属性","2.10.2 对象属性",[21,53005,53006],{},[24,53007],{"alt":26,"src":53008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[14,53010,53011],{},[17,53012,53013],{},"查询对象",[21,53015,53016],{},"对象名.属性 goods.uname",[21,53018,53019],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[21,53021,53022],{},"不带字符串的属性名也可以使用 对象名['属性名']",[21,53024,53025],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[21,53027,53028],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[14,53030,53031],{"start":38},[17,53032,53033],{},"重新赋值",[21,53035,53036],{},"对象名.属性=新值",[14,53038,53039],{"start":1304},[17,53040,53041],{},"增加新数据",[21,53043,53036],{},[14,53045,53046],{"start":1319},[17,53047,53048],{},"删除对象中的属性",[21,53050,53051],{},"delete 对象名.属性",[217,53053,53055],{"id":53054},"_2103-对象方法","2.10.3 对象方法",[21,53057,53058],{},[24,53059],{"alt":26,"src":53060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[21,53062,53063],{},"后边跟的是匿名函数",[21,53065,53066],{},"对象外面的叫函数；对象内部的叫方法",[21,53068,53069],{},[24,53070],{"alt":26,"src":53071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[217,53073,53075],{"id":53074},"_2104-遍历对象","2.10.4 遍历对象",[21,53077,53078],{},"理解为加括号的python字典遍历",[21,53080,53081],{},[24,53082],{"alt":26,"src":53083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[21,53085,53086],{},"k是字符串类型",[21,53088,53089],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[82,53091,53093],{"className":50714,"code":53092,"language":50716,"meta":26,"style":26},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[88,53094,53095,53100,53105,53110,53115],{"__ignoreMap":26},[91,53096,53097],{"class":93,"line":94},[91,53098,53099],{"class":250},"   let arr = [1, 2, 3]\n",[91,53101,53102],{"class":93,"line":38},[91,53103,53104],{"class":250},"    for (let k in arr) {\n",[91,53106,53107],{"class":93,"line":1304},[91,53108,53109],{"class":250},"      console.log(k)\n",[91,53111,53112],{"class":93,"line":1319},[91,53113,53114],{"class":250},"      console.log(arr[k])\n",[91,53116,53117],{"class":93,"line":1325},[91,53118,2310],{"class":250},[21,53120,53121],{},[24,53122],{"alt":26,"src":53123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[21,53125,53126],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[21,53128,53129],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[21,53131,53132],{},"for in 得到的k是属性名",[51894,53134,53135],{},"\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",[21,53137,53138],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[217,53140,53142],{"id":53141},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[21,53144,53145],{},"数组中放对象信息",[82,53147,53151],{"className":53148,"code":53149,"language":53150,"meta":26,"style":26},"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",[88,53152,53153,53161,53166,53171,53176,53181,53186,53191,53196,53201,53206,53211,53216,53220,53224],{"__ignoreMap":26},[91,53154,53155,53157,53159],{"class":93,"line":94},[91,53156,1159],{"class":250},[91,53158,51894],{"class":51381},[91,53160,51388],{"class":250},[91,53162,53163],{"class":93,"line":38},[91,53164,53165],{"class":250},"    let students = [\n",[91,53167,53168],{"class":93,"line":1304},[91,53169,53170],{"class":250},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[91,53172,53173],{"class":93,"line":1319},[91,53174,53175],{"class":250},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[91,53177,53178],{"class":93,"line":1325},[91,53179,53180],{"class":250},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[91,53182,53183],{"class":93,"line":1339},[91,53184,53185],{"class":250},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[91,53187,53188],{"class":93,"line":1345},[91,53189,53190],{"class":250},"    ]\n",[91,53192,53193],{"class":93,"line":1436},[91,53194,53195],{"class":250},"    for (let i = 0; i \u003C students.length; i++) {\n",[91,53197,53198],{"class":93,"line":1442},[91,53199,53200],{"class":250},"      for (let k in students[i]) {\n",[91,53202,53203],{"class":93,"line":1454},[91,53204,53205],{"class":250},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[91,53207,53208],{"class":93,"line":1736},[91,53209,53210],{"class":250},"        \u002F\u002F输出每个人的名字：\n",[91,53212,53213],{"class":93,"line":1741},[91,53214,53215],{"class":250},"        \u002F\u002Fconsole.log(students[i].name)\n",[91,53217,53218],{"class":93,"line":1747},[91,53219,52479],{"class":250},[91,53221,53222],{"class":93,"line":1752},[91,53223,2310],{"class":250},[91,53225,53226,53228,53230],{"class":93,"line":1766},[91,53227,52498],{"class":250},[91,53229,51894],{"class":51381},[91,53231,51388],{"class":250},[217,53233,53235],{"id":53234},"_2106-内置对象","2.10.6 内置对象",[21,53237,53238],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[14,53240,53241],{},[17,53242,53243],{},"数学对象Math",[21,53245,53246],{},[24,53247],{"alt":26,"src":53248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[21,53250,53251],{},[487,53252,53255],{"href":53253,"rel":53254},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23987],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[21,53257,53258],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[21,53260,53261],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[21,53263,53264],{},"数组不可以使用Math中的max,min来求最大值与最小值",[21,53266,53267],{},"null是一个空对象，可以认为：null类似于let obj={}",[21,53269,53270],{},"null属于对象数据类型",[14,53272,53273],{"start":38},[17,53274,53275],{},"生成任意范围随机数",[21,53277,53278],{},[24,53279],{"alt":26,"src":53280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[21,53282,53283],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[21,53285,53286],{},"乘以几就取不到几",[21,53288,53289],{},"取数组中的随机元素：",[21,53291,53292],{},"let arr = ['red', 'green', 'blue']",[21,53294,53295],{},"let random = Math.floor(Math.random() * arr.length)",[21,53297,53298],{},"console.log(arr[random])",[21,53300,53301],{},"这个函数得到的是全闭区间",[21,53303,53304],{},"function getRandom(N, M) {",[21,53306,53307],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[21,53309,1195],{},[21,53311,53312],{},"console.log(getRandom(4, 8))",[217,53314,53316],{"id":53315},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[21,53318,53319],{},[24,53320],{"alt":26,"src":53321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[21,53323,53324],{},[24,53325],{"alt":26,"src":53326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[21,53328,53329],{},[24,53330],{"alt":26,"src":53331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[21,53333,53334],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[21,53336,53337],{},[24,53338],{"alt":26,"src":53339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[21,53341,53342],{},[24,53343],{"alt":26,"src":53344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[21,53346,53347],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[21,53349,53350],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[21,53352,53353],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[168,53355,53356],{},"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":26,"searchDepth":38,"depth":38,"links":53358},[53359,53367,53368,53369,53370,53371,53378,53382,53388,53397],{"id":50549,"depth":38,"text":50550,"children":53360},[53361,53362,53363,53364,53365,53366],{"id":50553,"depth":1304,"text":50554},{"id":50570,"depth":1304,"text":50571},{"id":50610,"depth":1304,"text":50611},{"id":50622,"depth":1304,"text":50623},{"id":50631,"depth":1304,"text":50632},{"id":50679,"depth":1304,"text":50680},{"id":50689,"depth":38,"text":50690},{"id":50777,"depth":38,"text":50778},{"id":50800,"depth":38,"text":50801},{"id":50812,"depth":38,"text":50813},{"id":50999,"depth":38,"text":51000,"children":53372},[53373,53374,53375,53376,53377],{"id":51003,"depth":1304,"text":51004},{"id":51012,"depth":1304,"text":51013},{"id":51040,"depth":1304,"text":51041},{"id":51076,"depth":1304,"text":51077},{"id":51101,"depth":1304,"text":51102},{"id":51113,"depth":38,"text":51114,"children":53379},[53380,53381],{"id":51134,"depth":1304,"text":51135},{"id":51228,"depth":1304,"text":51229},{"id":51286,"depth":38,"text":51287,"children":53383},[53384,53385,53386,53387],{"id":51290,"depth":1304,"text":51291},{"id":51314,"depth":1304,"text":51315},{"id":51367,"depth":1304,"text":51368},{"id":52178,"depth":1304,"text":52179},{"id":52564,"depth":38,"text":52565,"children":53389},[53390,53391,53392,53393,53394,53395,53396],{"id":52582,"depth":1304,"text":52583},{"id":52619,"depth":1304,"text":52620},{"id":52650,"depth":1304,"text":52651},{"id":52683,"depth":1304,"text":52684},{"id":52764,"depth":1304,"text":52765},{"id":52862,"depth":1304,"text":52863},{"id":52920,"depth":1304,"text":52921},{"id":52973,"depth":38,"text":52974,"children":53398},[53399,53400,53401,53402,53403,53404,53405],{"id":52977,"depth":1304,"text":52978},{"id":53002,"depth":1304,"text":53003},{"id":53054,"depth":1304,"text":53055},{"id":53074,"depth":1304,"text":53075},{"id":53141,"depth":1304,"text":53142},{"id":53234,"depth":1304,"text":53235},{"id":53315,"depth":1304,"text":53316},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50541,"description":23500},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53412,"title":53413,"body":53414,"description":23500,"extension":173,"meta":76754,"navigation":175,"path":76755,"seo":76756,"stem":76757,"__hash__":76758},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53415,"toc":76694},[53416,53419,53422,53425,53430,53433,53436,53439,53443,53447,53453,53458,53466,53473,53476,53480,53485,53490,53495,53498,53501,53512,53515,53519,53522,53525,53530,53535,53540,53543,53546,53638,53641,53646,53649,53654,53657,53660,53665,53668,53673,53677,53680,53694,53698,53703,53706,53709,53713,53718,53721,53725,53729,53734,53738,53743,53746,53749,53752,53755,53758,53761,53766,53771,53799,53802,53805,53808,53813,53816,53819,53822,53825,53829,53858,53862,53867,53872,53875,53878,53881,53886,54001,54006,54011,54172,54177,54180,54184,54189,54194,54197,54200,54203,54206,54209,54212,54215,54218,54221,54224,54227,54230,54233,54236,54238,54241,54244,54247,54252,54256,54653,54656,54662,54666,54671,55953,55958,55961,55964,55967,55972,57168,57172,57178,57183,57186,57191,57196,57200,57204,57209,57212,57217,57220,57223,57227,58135,58138,58142,58363,58366,58369,58372,58598,58601,58825,58828,58832,58837,58840,58843,59071,59074,59107,59110,59114,59119,59123,59126,59129,59132,59135,59138,59141,59144,59149,60429,60433,60436,61529,61533,61536,61539,61542,61545,61549,61552,61555,61557,61565,63046,63050,63053,63056,63059,63268,63271,63275,63279,63284,63289,63292,63295,63300,63304,63309,63312,63421,63425,63430,63435,63438,63441,63445,63450,63455,63460,63463,63466,63477,63480,63485,63490,63493,63496,63569,63573,63578,63581,63583,63594,63598,63603,64929,64932,64935,64938,64940,64943,64946,64949,64952,64955,64958,64961,64964,64967,64970,64973,64976,64978,64980,64983,64987,66081,66084,66087,66103,66117,66120,66125,66131,66136,66140,66144,66149,66153,66158,66600,66605,66608,66612,66617,66620,66623,66627,66632,66636,66641,66646,66650,66655,66660,66663,66668,66673,66677,66682,66687,66791,66794,66798,66803,67169,67172,67175,67178,67181,67184,67187,67190,67193,68489,68493,68498,68503,68506,68509,68512,68515,68517,68522,68527,68530,68534,68539,68544,68549,68552,68555,68558,68561,68564,68569,68572,68576,68581,68586,68590,68595,68598,68603,68606,68609,68612,68615,68618,68623,68626,68629,68632,68635,68639,68644,68647,68651,68656,68659,68662,68666,68695,68698,68702,68706,68711,68715,68720,68723,68726,68729,68732,68735,68738,68741,68744,68747,68750,68753,68756,68759,68762,68766,68771,68776,68779,68783,68787,68792,68795,68799,68802,68805,68810,68815,68820,68825,68830,68833,68836,68841,68846,68850,68855,68858,68863,68866,68869,68872,68875,68880,68883,68892,68896,68901,68904,68907,68911,68914,68919,68923,68926,68932,68938,68942,68968,68971,70532,70535,71031,71034,71039,71044,71049,71053,71058,71063,71068,71072,71077,71080,71083,71086,71089,71093,71096,71101,71104,71109,71113,71118,71121,71126,71131,71136,71139,71142,71147,71152,71155,71158,71162,71165,71170,71173,71178,71181,71186,71191,71196,71199,71204,71269,71272,71283,71287,71292,71464,71468,71473,71476,71479,71482,71486,71497,71501,71504,71509,71514,71517,71520,71523,71526,71529,71531,71534,71537,71540,71545,71548,71553,71556,71560,71563,71566,71580,71584,71587,71642,71647,71650,71653,71658,71661,71665,71670,71800,71804,71809,71814,71895,71900,71904,71907,71912,71917,71923,71926,71929,71932,71936,71941,71944,71955,71959,71976,75023,75027,75030,75033,75036,75057,75061,75064,75072,75075,75080,75083,75086,75091,75096,75100,75121,75125,75130,75133,75136,75139,75142,75146,75151,75154,75158,75163,75166,75171,75174,75179,75182,75187,76390,76394,76399,76402,76407,76691],[10,53417,53413],{"id":53418},"_3web-apis",[21,53420,53421],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[21,53423,53424],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[21,53426,53427],{},[24,53428],{"alt":26,"src":53429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[21,53431,53432],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[21,53434,53435],{},"建议数组和对象使用 const 来声明",[21,53437,53438],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[190,53440,53442],{"id":53441},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[217,53444,53446],{"id":53445},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[21,53448,53449,53452],{},[88,53450,53451],{},"document"," = HTML 文件解析后的对象化表示；",[21,53454,53455,53457],{},[88,53456,53451],{}," ≠ HTML 文件本身",[21,53459,53460,53465],{},[398,53461,53462],{},[88,53463,53464],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[21,53467,53468,53472],{},[398,53469,53470],{},[88,53471,53451],{}," ：容器里的内容，代表当前加载的网页（DOM）",[21,53474,53475],{},"document实际上为window.document的简写",[217,53477,53479],{"id":53478},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[21,53481,53482],{},[24,53483],{"alt":26,"src":53484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[21,53486,53487],{},[24,53488],{"alt":26,"src":53489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[21,53491,53492],{},[24,53493],{"alt":26,"src":53494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[21,53496,53497],{},"console.dir()",[21,53499,53500],{},"dir用来打印对象",[1256,53502,53503,53506,53509],{},[17,53504,53505],{},"任何一个标签，都是一个对象",[17,53507,53508],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[17,53510,53511],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[21,53513,53514],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[217,53516,53518],{"id":53517},"_312-获取dom对象","3.1.2 获取DoM对象",[21,53520,53521],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[21,53523,53524],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[21,53526,53527],{},[398,53528,53529],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[14,53531,53532],{},[17,53533,53534],{},"利用CSS选择器来获取标签元素",[21,53536,53537],{},[24,53538],{"alt":26,"src":53539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[21,53541,53542],{},"里边的选择器必须必须加引号！！！",[21,53544,53545],{},"只选择第一个元素",[82,53547,53549],{"className":53148,"code":53548,"language":53150,"meta":26,"style":26},"\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",[88,53550,53551,53559,53580,53599,53607,53612,53617,53622,53630],{"__ignoreMap":26},[91,53552,53553,53555,53557],{"class":93,"line":94},[91,53554,1159],{"class":250},[91,53556,51881],{"class":51381},[91,53558,51388],{"class":250},[91,53560,53561,53563,53565,53568,53570,53573,53576,53578],{"class":93,"line":38},[91,53562,52225],{"class":250},[91,53564,51692],{"class":51381},[91,53566,53567],{"class":97}," class",[91,53569,296],{"class":250},[91,53571,53572],{"class":101},"\"box\"",[91,53574,53575],{"class":250},">123\u003C\u002F",[91,53577,51692],{"class":51381},[91,53579,51388],{"class":250},[91,53581,53582,53584,53586,53588,53590,53592,53595,53597],{"class":93,"line":1304},[91,53583,52225],{"class":250},[91,53585,51692],{"class":51381},[91,53587,53567],{"class":97},[91,53589,296],{"class":250},[91,53591,53572],{"class":101},[91,53593,53594],{"class":250},">456\u003C\u002F",[91,53596,51692],{"class":51381},[91,53598,51388],{"class":250},[91,53600,53601,53603,53605],{"class":93,"line":1319},[91,53602,52225],{"class":250},[91,53604,51894],{"class":51381},[91,53606,51388],{"class":250},[91,53608,53609],{"class":93,"line":1325},[91,53610,53611],{"class":250},"    \u002F\u002F 1.获取匹配的第一个元素\n",[91,53613,53614],{"class":93,"line":1339},[91,53615,53616],{"class":250},"    const box = document.querySelector('div')\n",[91,53618,53619],{"class":93,"line":1345},[91,53620,53621],{"class":250},"    console.dir(box)\n",[91,53623,53624,53626,53628],{"class":93,"line":1436},[91,53625,52498],{"class":250},[91,53627,51894],{"class":51381},[91,53629,51388],{"class":250},[91,53631,53632,53634,53636],{"class":93,"line":1442},[91,53633,51866],{"class":250},[91,53635,51881],{"class":51381},[91,53637,51388],{"class":250},[21,53639,53640],{},"只选123，不选456",[21,53642,53643],{},[24,53644],{"alt":26,"src":53645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[21,53647,53648],{},"返回的是一个数组的集合，不能对其进行直接修改",[21,53650,53651],{},[24,53652],{"alt":26,"src":53653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[21,53655,53656],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[21,53658,53659],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[14,53661,53662],{"start":38},[17,53663,53664],{},"其他方法来获取标签元素",[21,53666,53667],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[21,53669,53670],{},[24,53671],{"alt":26,"src":53672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[217,53674,53676],{"id":53675},"_313-操作元素的内容","3.1.3 操作元素的内容",[21,53678,53679],{},"设置修改DOM元素内容有两种方式：",[1256,53681,53682,53685,53688,53691],{},[17,53683,53684],{},"元素.innerText=''",[17,53686,53687],{},"元素.innerHTML=''",[17,53689,53690],{},"不写字符串输出数字也是可以的",[17,53692,53693],{},"元素.innerHtml=1",[22121,53695,53697],{"id":53696},"_3131-innertext","3.1.3.1 innerText",[21,53699,53700],{},[24,53701],{"alt":26,"src":53702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[21,53704,53705],{},"思路：实现了修改盒子中的内容！",[21,53707,53708],{},"它只显示纯文本，不解析标签",[22121,53710,53712],{"id":53711},"_3132-innerhtml","3.1.3.2 innerHTML",[21,53714,53715],{},[24,53716],{"alt":26,"src":53717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[21,53719,53720],{},"相比于innerText，他的强大之处在于可以解析标签",[217,53722,53724],{"id":53723},"_314-操作元素属性","3.1.4 操作元素属性",[22121,53726,53728],{"id":53727},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[21,53730,53731],{},[24,53732],{"alt":26,"src":53733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22121,53735,53737],{"id":53736},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[21,53739,53740],{},[24,53741],{"alt":26,"src":53742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[21,53744,53745],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[21,53747,53748],{},"div.style.backgroundColor = 'hotpink'",[21,53750,53751],{},"如果按照css的写法，-表示减，就会出错",[21,53753,53754],{},"body元素不需要再获取，直接用就行！！！！！！",[21,53756,53757],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[21,53759,53760],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[21,53762,53763],{},[24,53764],{"alt":26,"src":53765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[21,53767,53768],{},[24,53769],{"alt":26,"src":53770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[14,53772,53773,53776,53779,53782,53785,53788],{},[17,53774,53775],{},"className这个方式就是修改很多样式的时候来使用的！",[17,53777,53778],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[17,53780,53781],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[17,53783,53784],{},"className为属性名，如果还用class的话就导致与关键字冲突",[17,53786,53787],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[17,53789,53790,53791,53796],{},"解析标签的时候就变为了",[51692,53792],{"className":53793},[53794,53795],"nav","box",[53797,53798],"br",{},[21,53800,53801],{},"例子：",[51692,53803],{"className":53804},[53794],[51894,53806,53807],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[21,53809,53810],{},[24,53811],{"alt":26,"src":53812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[21,53814,53815],{},"追加和删除类名用classList",[21,53817,53818],{},"常用于类似于开关的操作",[21,53820,53821],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[21,53823,53824],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22121,53826,53828],{"id":53827},"_3143-牢记点","3.1.4.3 牢记点",[14,53830,53831,53834,53837,53840,53843,53846,53849,53852,53855],{},[17,53832,53833],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[17,53835,53836],{},"使用style属性操作css时不要忘记引号",[17,53838,53839],{},"使用className或者classList时也不要忘记引号",[17,53841,53842],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[17,53844,53845],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[17,53847,53848],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[17,53850,53851],{},"若： let arr=['1','2',3] arr[0]=1",[17,53853,53854],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[17,53856,53857],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[217,53859,53861],{"id":53860},"_315-操作表单元素","3.1.5 操作表单元素",[14,53863,53864],{},[17,53865,53866],{},"天生的属性",[21,53868,53869],{},[24,53870],{"alt":26,"src":53871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[21,53873,53874],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[21,53876,53877],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[21,53879,53880],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[21,53882,53883],{},[24,53884],{"alt":26,"src":53885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[82,53887,53889],{"className":50714,"code":53888,"language":50716,"meta":26,"style":26},"在复选框中如果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",[88,53890,53891,53896,53928,53933,53938,53943,53948,53952,53957,53962,53979,53991,53996],{"__ignoreMap":26},[91,53892,53893],{"class":93,"line":94},[91,53894,53895],{"class":250},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[91,53897,53898,53900,53903,53906,53908,53911,53913,53915,53917,53919,53921,53923,53926],{"class":93,"line":38},[91,53899,1159],{"class":250},[91,53901,53902],{"class":51381},"input",[91,53904,53905],{"class":97}," type",[91,53907,296],{"class":250},[91,53909,53910],{"class":101},"\"checkbox\"",[91,53912,15043],{"class":97},[91,53914,296],{"class":250},[91,53916,7775],{"class":101},[91,53918,15082],{"class":97},[91,53920,296],{"class":250},[91,53922,7775],{"class":101},[91,53924,53925],{"class":97}," checked",[91,53927,51388],{"class":250},[91,53929,53930],{"class":93,"line":1304},[91,53931,53932],{"class":250},"不选的话：\n",[91,53934,53935],{"class":93,"line":1319},[91,53936,53937],{"class":250},"const input = document.querySelector('input')\n",[91,53939,53940],{"class":93,"line":1325},[91,53941,53942],{"class":250},"input.checked=false\n",[91,53944,53945],{"class":93,"line":1339},[91,53946,53947],{"class":250},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[91,53949,53950],{"class":93,"line":1345},[91,53951,2523],{"emptyLinePlaceholder":175},[91,53953,53954],{"class":93,"line":1436},[91,53955,53956],{"class":250},"禁用按钮：\n",[91,53958,53959],{"class":93,"line":1442},[91,53960,53961],{"class":250},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[91,53963,53964,53966,53969,53972,53975,53977],{"class":93,"line":1454},[91,53965,1159],{"class":250},[91,53967,53968],{"class":51381},"button",[91,53970,53971],{"class":97}," disabled",[91,53973,53974],{"class":250},">点击\u003C\u002F",[91,53976,53968],{"class":51381},[91,53978,51388],{"class":250},[91,53980,53981,53983,53985,53987,53989],{"class":93,"line":1736},[91,53982,1159],{"class":250},[91,53984,53968],{"class":51381},[91,53986,53974],{"class":250},[91,53988,53968],{"class":51381},[91,53990,51388],{"class":250},[91,53992,53993],{"class":93,"line":1741},[91,53994,53995],{"class":250},"const bt = document.querySelector('button')\n",[91,53997,53998],{"class":93,"line":1747},[91,53999,54000],{"class":250},"bt.disabled = false\n",[14,54002,54003],{"start":38},[17,54004,54005],{},"自定义属性",[21,54007,54008],{},[24,54009],{"alt":26,"src":54010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[82,54012,54014],{"className":53148,"code":54013,"language":53150,"meta":26,"style":26},"\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",[88,54015,54016,54024,54052,54071,54090,54109,54128,54136,54141,54146,54151,54156,54164],{"__ignoreMap":26},[91,54017,54018,54020,54022],{"class":93,"line":94},[91,54019,1159],{"class":250},[91,54021,51881],{"class":51381},[91,54023,51388],{"class":250},[91,54025,54026,54028,54030,54033,54035,54037,54040,54042,54045,54048,54050],{"class":93,"line":38},[91,54027,52225],{"class":250},[91,54029,51692],{"class":51381},[91,54031,54032],{"class":97}," data-id",[91,54034,296],{"class":250},[91,54036,3801],{"class":101},[91,54038,54039],{"class":97}," data-spm",[91,54041,296],{"class":250},[91,54043,54044],{"class":101},"\"我不知道\"",[91,54046,54047],{"class":250},">1\u003C\u002F",[91,54049,51692],{"class":51381},[91,54051,51388],{"class":250},[91,54053,54054,54056,54058,54060,54062,54064,54067,54069],{"class":93,"line":1304},[91,54055,52225],{"class":250},[91,54057,51692],{"class":51381},[91,54059,54032],{"class":97},[91,54061,296],{"class":250},[91,54063,3824],{"class":101},[91,54065,54066],{"class":250},">2\u003C\u002F",[91,54068,51692],{"class":51381},[91,54070,51388],{"class":250},[91,54072,54073,54075,54077,54079,54081,54083,54086,54088],{"class":93,"line":1319},[91,54074,52225],{"class":250},[91,54076,51692],{"class":51381},[91,54078,54032],{"class":97},[91,54080,296],{"class":250},[91,54082,3837],{"class":101},[91,54084,54085],{"class":250},">3\u003C\u002F",[91,54087,51692],{"class":51381},[91,54089,51388],{"class":250},[91,54091,54092,54094,54096,54098,54100,54102,54105,54107],{"class":93,"line":1325},[91,54093,52225],{"class":250},[91,54095,51692],{"class":51381},[91,54097,54032],{"class":97},[91,54099,296],{"class":250},[91,54101,3850],{"class":101},[91,54103,54104],{"class":250},">4\u003C\u002F",[91,54106,51692],{"class":51381},[91,54108,51388],{"class":250},[91,54110,54111,54113,54115,54117,54119,54121,54124,54126],{"class":93,"line":1339},[91,54112,52225],{"class":250},[91,54114,51692],{"class":51381},[91,54116,54032],{"class":97},[91,54118,296],{"class":250},[91,54120,3871],{"class":101},[91,54122,54123],{"class":250},">5\u003C\u002F",[91,54125,51692],{"class":51381},[91,54127,51388],{"class":250},[91,54129,54130,54132,54134],{"class":93,"line":1345},[91,54131,52225],{"class":250},[91,54133,51894],{"class":51381},[91,54135,51388],{"class":250},[91,54137,54138],{"class":93,"line":1436},[91,54139,54140],{"class":250},"    const one = document.querySelector('div')\n",[91,54142,54143],{"class":93,"line":1442},[91,54144,54145],{"class":250},"    console.log(one.dataset)\n",[91,54147,54148],{"class":93,"line":1454},[91,54149,54150],{"class":250},"    console.log(one.dataset.id)\n",[91,54152,54153],{"class":93,"line":1736},[91,54154,54155],{"class":250},"    console.log(one.dataset.spm)\n",[91,54157,54158,54160,54162],{"class":93,"line":1741},[91,54159,52498],{"class":250},[91,54161,51894],{"class":51381},[91,54163,51388],{"class":250},[91,54165,54166,54168,54170],{"class":93,"line":1747},[91,54167,51866],{"class":250},[91,54169,51881],{"class":51381},[91,54171,51388],{"class":250},[21,54173,54174],{},[24,54175],{"alt":26,"src":54176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[21,54178,54179],{},"document.querySelector选择的是第一个对象（元素）",[217,54181,54183],{"id":54182},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[21,54185,54186],{},[24,54187],{"alt":26,"src":54188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[21,54190,54191],{},[24,54192],{"alt":26,"src":54193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[21,54195,54196],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51894,54198,54199],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[21,54201,54202],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51894,54204,54205],{},"\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",[21,54207,54208],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[21,54210,54211],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[21,54213,54214],{},"单位为毫秒！！！",[21,54216,54217],{},"可以搭配匿名函数来用！！！",[21,54219,54220],{},"setInterval(function () {",[21,54222,54223],{},"alert('两秒执行一次')",[21,54225,54226],{},"}, 2000)",[21,54228,54229],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[21,54231,54232],{},"function fn() {",[21,54234,54235],{},"document.write(1)",[21,54237,1195],{},[21,54239,54240],{},"setInterval(fn, 1000)",[21,54242,54243],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[21,54245,54246],{},"setInterval('fn()', 1000)",[21,54248,54249],{},[24,54250],{"alt":26,"src":54251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22121,54253,54255],{"id":54254},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[82,54257,54259],{"className":50714,"code":54258,"language":50716,"meta":26,"style":26},"\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",[88,54260,54261,54271,54285,54289,54297,54311,54331,54343,54351,54355,54363,54400,54405,54410,54415,54423,54431,54453,54461,54466,54488,54493,54498,54509,54514,54534,54542,54557,54572,54583,54588,54598,54608,54612,54621,54625,54633,54641,54645],{"__ignoreMap":26},[91,54262,54263,54265,54267,54269],{"class":93,"line":94},[91,54264,51378],{"class":250},[91,54266,51382],{"class":51381},[91,54268,51385],{"class":97},[91,54270,51388],{"class":250},[91,54272,54273,54275,54277,54279,54281,54283],{"class":93,"line":38},[91,54274,1159],{"class":250},[91,54276,50716],{"class":51381},[91,54278,51397],{"class":97},[91,54280,296],{"class":250},[91,54282,51402],{"class":101},[91,54284,51388],{"class":250},[91,54286,54287],{"class":93,"line":1304},[91,54288,2523],{"emptyLinePlaceholder":175},[91,54290,54291,54293,54295],{"class":93,"line":1319},[91,54292,1159],{"class":250},[91,54294,51415],{"class":51381},[91,54296,51388],{"class":250},[91,54298,54299,54301,54303,54305,54307,54309],{"class":93,"line":1325},[91,54300,52225],{"class":250},[91,54302,51425],{"class":51381},[91,54304,51428],{"class":97},[91,54306,296],{"class":250},[91,54308,51433],{"class":101},[91,54310,51388],{"class":250},[91,54312,54313,54315,54317,54319,54321,54323,54325,54327,54329],{"class":93,"line":1339},[91,54314,52225],{"class":250},[91,54316,51425],{"class":51381},[91,54318,15043],{"class":97},[91,54320,296],{"class":250},[91,54322,51472],{"class":101},[91,54324,51452],{"class":97},[91,54326,296],{"class":250},[91,54328,51479],{"class":101},[91,54330,51388],{"class":250},[91,54332,54333,54335,54337,54339,54341],{"class":93,"line":1345},[91,54334,52225],{"class":250},[91,54336,51488],{"class":51381},[91,54338,51491],{"class":250},[91,54340,51488],{"class":51381},[91,54342,51388],{"class":250},[91,54344,54345,54347,54349],{"class":93,"line":1436},[91,54346,51866],{"class":250},[91,54348,51415],{"class":51381},[91,54350,51388],{"class":250},[91,54352,54353],{"class":93,"line":1442},[91,54354,2523],{"emptyLinePlaceholder":175},[91,54356,54357,54359,54361],{"class":93,"line":1454},[91,54358,1159],{"class":250},[91,54360,51881],{"class":51381},[91,54362,51388],{"class":250},[91,54364,54365,54367,54370,54372,54374,54376,54378,54380,54382,54385,54387,54390,54393,54395,54398],{"class":93,"line":1736},[91,54366,52225],{"class":250},[91,54368,54369],{"class":51381},"textarea",[91,54371,15043],{"class":97},[91,54373,296],{"class":250},[91,54375,7775],{"class":101},[91,54377,15082],{"class":97},[91,54379,296],{"class":250},[91,54381,7775],{"class":101},[91,54383,54384],{"class":97}," cols",[91,54386,296],{"class":250},[91,54388,54389],{"class":101},"\"30\"",[91,54391,54392],{"class":97}," rows",[91,54394,296],{"class":250},[91,54396,54397],{"class":101},"\"10\"",[91,54399,51388],{"class":250},[91,54401,54402],{"class":93,"line":1741},[91,54403,54404],{"class":250},"        用户注册协议\n",[91,54406,54407],{"class":93,"line":1747},[91,54408,54409],{"class":250},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[91,54411,54412],{"class":93,"line":1752},[91,54413,54414],{"class":250},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[91,54416,54417,54419,54421],{"class":93,"line":1766},[91,54418,51857],{"class":250},[91,54420,54369],{"class":51381},[91,54422,51388],{"class":250},[91,54424,54425,54427,54429],{"class":93,"line":1771},[91,54426,52225],{"class":250},[91,54428,53797],{"class":51381},[91,54430,51388],{"class":250},[91,54432,54433,54435,54437,54439,54441,54444,54446,54449,54451],{"class":93,"line":1777},[91,54434,52225],{"class":250},[91,54436,53968],{"class":51381},[91,54438,53567],{"class":97},[91,54440,296],{"class":250},[91,54442,54443],{"class":101},"\"btn\"",[91,54445,53971],{"class":97},[91,54447,54448],{"class":250},">我已经阅读用户协议(5)\u003C\u002F",[91,54450,53968],{"class":51381},[91,54452,51388],{"class":250},[91,54454,54455,54457,54459],{"class":93,"line":1798},[91,54456,52225],{"class":250},[91,54458,51894],{"class":51381},[91,54460,51388],{"class":250},[91,54462,54463],{"class":93,"line":1803},[91,54464,54465],{"class":308},"    \u002F\u002F 1. 获取元素\n",[91,54467,54468,54470,54473,54475,54478,54481,54483,54486],{"class":93,"line":1817},[91,54469,11344],{"class":153},[91,54471,54472],{"class":105}," btn",[91,54474,13687],{"class":153},[91,54476,54477],{"class":250}," document.",[91,54479,54480],{"class":97},"querySelector",[91,54482,251],{"class":250},[91,54484,54485],{"class":101},"'.btn'",[91,54487,257],{"class":250},[91,54489,54490],{"class":93,"line":1822},[91,54491,54492],{"class":308},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[91,54494,54495],{"class":93,"line":1851},[91,54496,54497],{"class":308},"    \u002F\u002F 2. 倒计时\n",[91,54499,54500,54502,54504,54506],{"class":93,"line":1856},[91,54501,52300],{"class":153},[91,54503,9561],{"class":250},[91,54505,296],{"class":153},[91,54507,54508],{"class":105}," 5\n",[91,54510,54511],{"class":93,"line":1873},[91,54512,54513],{"class":308},"    \u002F\u002F 2.1 开启定时器\n",[91,54515,54516,54518,54521,54523,54526,54528,54531],{"class":93,"line":1878},[91,54517,52300],{"class":153},[91,54519,54520],{"class":250}," n ",[91,54522,296],{"class":153},[91,54524,54525],{"class":97}," setInterval",[91,54527,251],{"class":250},[91,54529,54530],{"class":153},"function",[91,54532,54533],{"class":250}," () {\n",[91,54535,54536,54539],{"class":93,"line":1883},[91,54537,54538],{"class":250},"      i",[91,54540,54541],{"class":153},"--\n",[91,54543,54544,54547,54549,54552,54554],{"class":93,"line":1888},[91,54545,54546],{"class":250},"      btn.innerHTML ",[91,54548,296],{"class":153},[91,54550,54551],{"class":101}," `我已经阅读用户协议(${",[91,54553,690],{"class":250},[91,54555,54556],{"class":101},"})`\n",[91,54558,54559,54562,54565,54568,54570],{"class":93,"line":1902},[91,54560,54561],{"class":153},"      if",[91,54563,54564],{"class":250}," (i ",[91,54566,54567],{"class":153},"===",[91,54569,4216],{"class":105},[91,54571,12565],{"class":250},[91,54573,54574,54577,54580],{"class":93,"line":1907},[91,54575,54576],{"class":97},"        clearInterval",[91,54578,54579],{"class":250},"(n)  ",[91,54581,54582],{"class":308},"\u002F\u002F 关闭定时器\n",[91,54584,54585],{"class":93,"line":2700},[91,54586,54587],{"class":308},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[91,54589,54590,54593,54595],{"class":93,"line":2714},[91,54591,54592],{"class":250},"        btn.disabled ",[91,54594,296],{"class":153},[91,54596,54597],{"class":105}," false\n",[91,54599,54600,54603,54605],{"class":93,"line":2722},[91,54601,54602],{"class":250},"        btn.innerHTML ",[91,54604,296],{"class":153},[91,54606,54607],{"class":101}," '同意'\n",[91,54609,54610],{"class":93,"line":2727},[91,54611,52479],{"class":250},[91,54613,54614,54617,54619],{"class":93,"line":2733},[91,54615,54616],{"class":250},"    }, ",[91,54618,6533],{"class":105},[91,54620,257],{"class":250},[91,54622,54623],{"class":93,"line":2739},[91,54624,2523],{"emptyLinePlaceholder":175},[91,54626,54627,54629,54631],{"class":93,"line":2744},[91,54628,52498],{"class":250},[91,54630,51894],{"class":51381},[91,54632,51388],{"class":250},[91,54634,54635,54637,54639],{"class":93,"line":8071},[91,54636,51866],{"class":250},[91,54638,51881],{"class":51381},[91,54640,51388],{"class":250},[91,54642,54643],{"class":93,"line":8095},[91,54644,2523],{"emptyLinePlaceholder":175},[91,54646,54647,54649,54651],{"class":93,"line":8100},[91,54648,51866],{"class":250},[91,54650,50716],{"class":51381},[91,54652,51388],{"class":250},[21,54654,54655],{},"不要一直想着用死循环,避免死循环",[21,54657,54658,54661],{},[88,54659,54660],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22121,54663,54665],{"id":54664},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[14,54667,54668],{},[17,54669,54670],{},"法1",[82,54672,54674],{"className":50714,"code":54673,"language":50716,"meta":26,"style":26},"\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",[88,54675,54676,54686,54700,54704,54712,54726,54746,54758,54766,54772,54783,54794,54798,54802,54809,54821,54825,54829,54836,54848,54862,54875,54889,54893,54897,54904,54915,54926,54937,54949,54961,54973,54977,54981,54989,54999,55012,55024,55037,55041,55045,55052,55062,55074,55086,55097,55108,55118,55130,55142,55146,55150,55159,55171,55183,55211,55224,55228,55232,55239,55250,55254,55262,55270,55274,55282,55296,55311,55335,55343,55358,55371,55379,55400,55412,55424,55436,55448,55460,55472,55484,55493,55501,55509,55517,55529,55552,55571,55590,55609,55628,55647,55666,55686,55690,55710,55729,55749,55770,55781,55798,55808,55818,55828,55833,55838,55843,55848,55873,55886,55890,55913,55917,55925,55933,55941,55945],{"__ignoreMap":26},[91,54677,54678,54680,54682,54684],{"class":93,"line":94},[91,54679,51378],{"class":250},[91,54681,51382],{"class":51381},[91,54683,51385],{"class":97},[91,54685,51388],{"class":250},[91,54687,54688,54690,54692,54694,54696,54698],{"class":93,"line":38},[91,54689,1159],{"class":250},[91,54691,50716],{"class":51381},[91,54693,51397],{"class":97},[91,54695,296],{"class":250},[91,54697,51402],{"class":101},[91,54699,51388],{"class":250},[91,54701,54702],{"class":93,"line":1304},[91,54703,2523],{"emptyLinePlaceholder":175},[91,54705,54706,54708,54710],{"class":93,"line":1319},[91,54707,1159],{"class":250},[91,54709,51415],{"class":51381},[91,54711,51388],{"class":250},[91,54713,54714,54716,54718,54720,54722,54724],{"class":93,"line":1325},[91,54715,52225],{"class":250},[91,54717,51425],{"class":51381},[91,54719,51428],{"class":97},[91,54721,296],{"class":250},[91,54723,51433],{"class":101},[91,54725,51388],{"class":250},[91,54727,54728,54730,54732,54734,54736,54738,54740,54742,54744],{"class":93,"line":1339},[91,54729,52225],{"class":250},[91,54731,51425],{"class":51381},[91,54733,15043],{"class":97},[91,54735,296],{"class":250},[91,54737,51472],{"class":101},[91,54739,51452],{"class":97},[91,54741,296],{"class":250},[91,54743,51479],{"class":101},[91,54745,51388],{"class":250},[91,54747,54748,54750,54752,54754,54756],{"class":93,"line":1345},[91,54749,52225],{"class":250},[91,54751,51488],{"class":51381},[91,54753,51491],{"class":250},[91,54755,51488],{"class":51381},[91,54757,51388],{"class":250},[91,54759,54760,54762,54764],{"class":93,"line":1436},[91,54761,52225],{"class":250},[91,54763,168],{"class":51381},[91,54765,51388],{"class":250},[91,54767,54768,54770],{"class":93,"line":1442},[91,54769,6526],{"class":51381},[91,54771,15695],{"class":250},[91,54773,54774,54777,54779,54781],{"class":93,"line":1454},[91,54775,54776],{"class":105},"      padding",[91,54778,51518],{"class":250},[91,54780,440],{"class":105},[91,54782,1415],{"class":250},[91,54784,54785,54788,54790,54792],{"class":93,"line":1736},[91,54786,54787],{"class":105},"      margin",[91,54789,51518],{"class":250},[91,54791,440],{"class":105},[91,54793,1415],{"class":250},[91,54795,54796],{"class":93,"line":1741},[91,54797,2310],{"class":250},[91,54799,54800],{"class":93,"line":1747},[91,54801,2523],{"emptyLinePlaceholder":175},[91,54803,54804,54807],{"class":93,"line":1752},[91,54805,54806],{"class":51381},"    li",[91,54808,15695],{"class":250},[91,54810,54811,54814,54816,54819],{"class":93,"line":1766},[91,54812,54813],{"class":105},"      list-style",[91,54815,51518],{"class":250},[91,54817,54818],{"class":105},"none",[91,54820,1415],{"class":250},[91,54822,54823],{"class":93,"line":1771},[91,54824,2310],{"class":250},[91,54826,54827],{"class":93,"line":1777},[91,54828,2523],{"emptyLinePlaceholder":175},[91,54830,54831,54834],{"class":93,"line":1798},[91,54832,54833],{"class":97},"    .box",[91,54835,15695],{"class":250},[91,54837,54838,54841,54843,54846],{"class":93,"line":1803},[91,54839,54840],{"class":105},"      position",[91,54842,51518],{"class":250},[91,54844,54845],{"class":105},"relative",[91,54847,1415],{"class":250},[91,54849,54850,54853,54855,54858,54860],{"class":93,"line":1817},[91,54851,54852],{"class":105},"      width",[91,54854,51518],{"class":250},[91,54856,54857],{"class":105},"976",[91,54859,51573],{"class":153},[91,54861,1415],{"class":250},[91,54863,54864,54867,54869,54871,54873],{"class":93,"line":1822},[91,54865,54866],{"class":105},"      height",[91,54868,51518],{"class":250},[91,54870,1663],{"class":105},[91,54872,51573],{"class":153},[91,54874,1415],{"class":250},[91,54876,54877,54879,54881,54883,54885,54887],{"class":93,"line":1851},[91,54878,54787],{"class":105},[91,54880,51518],{"class":250},[91,54882,560],{"class":105},[91,54884,51573],{"class":153},[91,54886,51637],{"class":105},[91,54888,1415],{"class":250},[91,54890,54891],{"class":93,"line":1856},[91,54892,2310],{"class":250},[91,54894,54895],{"class":93,"line":1873},[91,54896,2523],{"emptyLinePlaceholder":175},[91,54898,54899,54902],{"class":93,"line":1878},[91,54900,54901],{"class":97},"    .slider-footer",[91,54903,15695],{"class":250},[91,54905,54906,54908,54910,54913],{"class":93,"line":1883},[91,54907,54840],{"class":105},[91,54909,51518],{"class":250},[91,54911,54912],{"class":105},"absolute",[91,54914,1415],{"class":250},[91,54916,54917,54920,54922,54924],{"class":93,"line":1888},[91,54918,54919],{"class":105},"      left",[91,54921,51518],{"class":250},[91,54923,440],{"class":105},[91,54925,1415],{"class":250},[91,54927,54928,54931,54933,54935],{"class":93,"line":1902},[91,54929,54930],{"class":105},"      bottom",[91,54932,51518],{"class":250},[91,54934,440],{"class":105},[91,54936,1415],{"class":250},[91,54938,54939,54941,54943,54945,54947],{"class":93,"line":1907},[91,54940,54852],{"class":105},[91,54942,51518],{"class":250},[91,54944,560],{"class":105},[91,54946,577],{"class":153},[91,54948,1415],{"class":250},[91,54950,54951,54953,54955,54957,54959],{"class":93,"line":2700},[91,54952,54866],{"class":105},[91,54954,51518],{"class":250},[91,54956,824],{"class":105},[91,54958,577],{"class":153},[91,54960,1415],{"class":250},[91,54962,54963,54966,54968,54971],{"class":93,"line":2714},[91,54964,54965],{"class":105},"      background-color",[91,54967,51518],{"class":250},[91,54969,54970],{"class":105},"skyblue",[91,54972,1415],{"class":250},[91,54974,54975],{"class":93,"line":2722},[91,54976,2310],{"class":250},[91,54978,54979],{"class":93,"line":2727},[91,54980,2523],{"emptyLinePlaceholder":175},[91,54982,54983,54985,54987],{"class":93,"line":2733},[91,54984,54901],{"class":97},[91,54986,6948],{"class":51381},[91,54988,15695],{"class":250},[91,54990,54991,54993,54995,54997],{"class":93,"line":2739},[91,54992,54840],{"class":105},[91,54994,51518],{"class":250},[91,54996,54912],{"class":105},[91,54998,1415],{"class":250},[91,55000,55001,55004,55006,55008,55010],{"class":93,"line":2744},[91,55002,55003],{"class":105},"      font-size",[91,55005,51518],{"class":250},[91,55007,1150],{"class":105},[91,55009,51573],{"class":153},[91,55011,1415],{"class":250},[91,55013,55014,55016,55018,55020,55022],{"class":93,"line":8071},[91,55015,54919],{"class":105},[91,55017,51518],{"class":250},[91,55019,949],{"class":105},[91,55021,51573],{"class":153},[91,55023,1415],{"class":250},[91,55025,55026,55029,55031,55033,55035],{"class":93,"line":8095},[91,55027,55028],{"class":105},"      top",[91,55030,51518],{"class":250},[91,55032,568],{"class":105},[91,55034,51573],{"class":153},[91,55036,1415],{"class":250},[91,55038,55039],{"class":93,"line":8100},[91,55040,2310],{"class":250},[91,55042,55043],{"class":93,"line":8106},[91,55044,2523],{"emptyLinePlaceholder":175},[91,55046,55047,55050],{"class":93,"line":8133},[91,55048,55049],{"class":51381},"    ul",[91,55051,15695],{"class":250},[91,55053,55054,55056,55058,55060],{"class":93,"line":8138},[91,55055,54840],{"class":105},[91,55057,51518],{"class":250},[91,55059,54912],{"class":105},[91,55061,1415],{"class":250},[91,55063,55064,55066,55068,55070,55072],{"class":93,"line":8144},[91,55065,55028],{"class":105},[91,55067,51518],{"class":250},[91,55069,1030],{"class":105},[91,55071,51573],{"class":153},[91,55073,1415],{"class":250},[91,55075,55076,55078,55080,55082,55084],{"class":93,"line":8156},[91,55077,54919],{"class":105},[91,55079,51518],{"class":250},[91,55081,949],{"class":105},[91,55083,51573],{"class":153},[91,55085,1415],{"class":250},[91,55087,55088,55091,55093,55095],{"class":93,"line":8168},[91,55089,55090],{"class":105},"      display",[91,55092,51518],{"class":250},[91,55094,51558],{"class":105},[91,55096,1415],{"class":250},[91,55098,55099,55102,55104,55106],{"class":93,"line":8180},[91,55100,55101],{"class":105},"      justify-content",[91,55103,51518],{"class":250},[91,55105,51749],{"class":105},[91,55107,1415],{"class":250},[91,55109,55110,55112,55114,55116],{"class":93,"line":9839},[91,55111,54840],{"class":105},[91,55113,51518],{"class":250},[91,55115,54912],{"class":105},[91,55117,1415],{"class":250},[91,55119,55120,55122,55124,55126,55128],{"class":93,"line":9864},[91,55121,54852],{"class":105},[91,55123,51518],{"class":250},[91,55125,4115],{"class":105},[91,55127,51573],{"class":153},[91,55129,1415],{"class":250},[91,55131,55132,55134,55136,55138,55140],{"class":93,"line":9887},[91,55133,54866],{"class":105},[91,55135,51518],{"class":250},[91,55137,949],{"class":105},[91,55139,51573],{"class":153},[91,55141,1415],{"class":250},[91,55143,55144],{"class":93,"line":9911},[91,55145,2310],{"class":250},[91,55147,55148],{"class":93,"line":9916},[91,55149,2523],{"emptyLinePlaceholder":175},[91,55151,55152,55154,55157],{"class":93,"line":9921},[91,55153,55049],{"class":51381},[91,55155,55156],{"class":51381}," li",[91,55158,15695],{"class":250},[91,55160,55161,55163,55165,55167,55169],{"class":93,"line":9926},[91,55162,54852],{"class":105},[91,55164,51518],{"class":250},[91,55166,949],{"class":105},[91,55168,51573],{"class":153},[91,55170,1415],{"class":250},[91,55172,55173,55175,55177,55179,55181],{"class":93,"line":9935},[91,55174,54866],{"class":105},[91,55176,51518],{"class":250},[91,55178,949],{"class":105},[91,55180,51573],{"class":153},[91,55182,1415],{"class":250},[91,55184,55185,55187,55189,55192,55194,55196,55198,55200,55202,55204,55206,55209],{"class":93,"line":9940},[91,55186,54965],{"class":105},[91,55188,51518],{"class":250},[91,55190,55191],{"class":105},"rgba",[91,55193,251],{"class":250},[91,55195,440],{"class":105},[91,55197,12558],{"class":250},[91,55199,440],{"class":105},[91,55201,12558],{"class":250},[91,55203,440],{"class":105},[91,55205,12558],{"class":250},[91,55207,55208],{"class":105},".4",[91,55210,2842],{"class":250},[91,55212,55213,55216,55218,55220,55222],{"class":93,"line":9946},[91,55214,55215],{"class":105},"      border-radius",[91,55217,51518],{"class":250},[91,55219,695],{"class":105},[91,55221,51573],{"class":153},[91,55223,1415],{"class":250},[91,55225,55226],{"class":93,"line":9967},[91,55227,2310],{"class":250},[91,55229,55230],{"class":93,"line":9973},[91,55231,2523],{"emptyLinePlaceholder":175},[91,55233,55234,55237],{"class":93,"line":9987},[91,55235,55236],{"class":97},"    .activate",[91,55238,15695],{"class":250},[91,55240,55241,55243,55245,55248],{"class":93,"line":9993},[91,55242,54965],{"class":105},[91,55244,51518],{"class":250},[91,55246,55247],{"class":105},"#f7f7f7",[91,55249,1415],{"class":250},[91,55251,55252],{"class":93,"line":10020},[91,55253,2310],{"class":250},[91,55255,55256,55258,55260],{"class":93,"line":10029},[91,55257,52498],{"class":250},[91,55259,168],{"class":51381},[91,55261,51388],{"class":250},[91,55263,55264,55266,55268],{"class":93,"line":10035},[91,55265,51866],{"class":250},[91,55267,51415],{"class":51381},[91,55269,51388],{"class":250},[91,55271,55272],{"class":93,"line":10043},[91,55273,2523],{"emptyLinePlaceholder":175},[91,55275,55276,55278,55280],{"class":93,"line":10048},[91,55277,1159],{"class":250},[91,55279,51881],{"class":51381},[91,55281,51388],{"class":250},[91,55283,55284,55286,55288,55290,55292,55294],{"class":93,"line":16727},[91,55285,52225],{"class":250},[91,55287,51692],{"class":51381},[91,55289,53567],{"class":97},[91,55291,296],{"class":250},[91,55293,53572],{"class":101},[91,55295,51388],{"class":250},[91,55297,55298,55300,55302,55304,55306,55309],{"class":93,"line":16733},[91,55299,51422],{"class":250},[91,55301,51692],{"class":51381},[91,55303,53567],{"class":97},[91,55305,296],{"class":250},[91,55307,55308],{"class":101},"\"slider-wrapper\"",[91,55310,51388],{"class":250},[91,55312,55313,55316,55318,55321,55323,55326,55329,55331,55333],{"class":93,"line":16756},[91,55314,55315],{"class":250},"      \u003C",[91,55317,24],{"class":51381},[91,55319,55320],{"class":97}," src",[91,55322,296],{"class":250},[91,55324,55325],{"class":101},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[91,55327,55328],{"class":97}," alt",[91,55330,296],{"class":250},[91,55332,7775],{"class":101},[91,55334,51388],{"class":250},[91,55336,55337,55339,55341],{"class":93,"line":16762},[91,55338,51857],{"class":250},[91,55340,51692],{"class":51381},[91,55342,51388],{"class":250},[91,55344,55345,55347,55349,55351,55353,55356],{"class":93,"line":16785},[91,55346,51422],{"class":250},[91,55348,51692],{"class":51381},[91,55350,53567],{"class":97},[91,55352,296],{"class":250},[91,55354,55355],{"class":101},"\"slider-footer\"",[91,55357,51388],{"class":250},[91,55359,55360,55362,55364,55367,55369],{"class":93,"line":16799},[91,55361,55315],{"class":250},[91,55363,21],{"class":51381},[91,55365,55366],{"class":250},">对人类来说会不会太超前了?\u003C\u002F",[91,55368,21],{"class":51381},[91,55370,51388],{"class":250},[91,55372,55373,55375,55377],{"class":93,"line":16819},[91,55374,55315],{"class":250},[91,55376,1256],{"class":51381},[91,55378,51388],{"class":250},[91,55380,55381,55384,55386,55388,55390,55393,55396,55398],{"class":93,"line":16825},[91,55382,55383],{"class":250},"        \u003C",[91,55385,17],{"class":51381},[91,55387,53567],{"class":97},[91,55389,296],{"class":250},[91,55391,55392],{"class":101},"\"activate\"",[91,55394,55395],{"class":250},">\u003C\u002F",[91,55397,17],{"class":51381},[91,55399,51388],{"class":250},[91,55401,55402,55404,55406,55408,55410],{"class":93,"line":16836},[91,55403,55383],{"class":250},[91,55405,17],{"class":51381},[91,55407,55395],{"class":250},[91,55409,17],{"class":51381},[91,55411,51388],{"class":250},[91,55413,55414,55416,55418,55420,55422],{"class":93,"line":16859},[91,55415,55383],{"class":250},[91,55417,17],{"class":51381},[91,55419,55395],{"class":250},[91,55421,17],{"class":51381},[91,55423,51388],{"class":250},[91,55425,55426,55428,55430,55432,55434],{"class":93,"line":16881},[91,55427,55383],{"class":250},[91,55429,17],{"class":51381},[91,55431,55395],{"class":250},[91,55433,17],{"class":51381},[91,55435,51388],{"class":250},[91,55437,55438,55440,55442,55444,55446],{"class":93,"line":16886},[91,55439,55383],{"class":250},[91,55441,17],{"class":51381},[91,55443,55395],{"class":250},[91,55445,17],{"class":51381},[91,55447,51388],{"class":250},[91,55449,55450,55452,55454,55456,55458],{"class":93,"line":16892},[91,55451,55383],{"class":250},[91,55453,17],{"class":51381},[91,55455,55395],{"class":250},[91,55457,17],{"class":51381},[91,55459,51388],{"class":250},[91,55461,55462,55464,55466,55468,55470],{"class":93,"line":16906},[91,55463,55383],{"class":250},[91,55465,17],{"class":51381},[91,55467,55395],{"class":250},[91,55469,17],{"class":51381},[91,55471,51388],{"class":250},[91,55473,55474,55476,55478,55480,55482],{"class":93,"line":16919},[91,55475,55383],{"class":250},[91,55477,17],{"class":51381},[91,55479,55395],{"class":250},[91,55481,17],{"class":51381},[91,55483,51388],{"class":250},[91,55485,55486,55489,55491],{"class":93,"line":16924},[91,55487,55488],{"class":250},"      \u003C\u002F",[91,55490,1256],{"class":51381},[91,55492,51388],{"class":250},[91,55494,55495,55497,55499],{"class":93,"line":16938},[91,55496,51857],{"class":250},[91,55498,51692],{"class":51381},[91,55500,51388],{"class":250},[91,55502,55503,55505,55507],{"class":93,"line":16943},[91,55504,52498],{"class":250},[91,55506,51692],{"class":51381},[91,55508,51388],{"class":250},[91,55510,55511,55513,55515],{"class":93,"line":16949},[91,55512,52225],{"class":250},[91,55514,51894],{"class":51381},[91,55516,51388],{"class":250},[91,55518,55519,55521,55524,55526],{"class":93,"line":16954},[91,55520,11344],{"class":153},[91,55522,55523],{"class":105}," arrImage",[91,55525,13687],{"class":153},[91,55527,55528],{"class":250}," [\n",[91,55530,55531,55534,55537,55540,55543,55546,55549],{"class":93,"line":16968},[91,55532,55533],{"class":250},"      { url: ",[91,55535,55536],{"class":101},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[91,55538,55539],{"class":250},", title: ",[91,55541,55542],{"class":101},"'对人类来说会不会太超前了?'",[91,55544,55545],{"class":250},", color: ",[91,55547,55548],{"class":101},"'rgba(100,67,68)'",[91,55550,55551],{"class":250}," },\n",[91,55553,55554,55556,55559,55561,55564,55566,55569],{"class":93,"line":16973},[91,55555,55533],{"class":250},[91,55557,55558],{"class":101},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[91,55560,55539],{"class":250},[91,55562,55563],{"class":101},"'开启剑与雪的黑暗传说!'",[91,55565,55545],{"class":250},[91,55567,55568],{"class":101},"'rgba(43,35,26)'",[91,55570,55551],{"class":250},[91,55572,55573,55575,55578,55580,55583,55585,55588],{"class":93,"line":16978},[91,55574,55533],{"class":250},[91,55576,55577],{"class":101},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[91,55579,55539],{"class":250},[91,55581,55582],{"class":101},"'真正的jo厨出现了!'",[91,55584,55545],{"class":250},[91,55586,55587],{"class":101},"'rgba(36,31,33)'",[91,55589,55551],{"class":250},[91,55591,55592,55594,55597,55599,55602,55604,55607],{"class":93,"line":16992},[91,55593,55533],{"class":250},[91,55595,55596],{"class":101},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[91,55598,55539],{"class":250},[91,55600,55601],{"class":101},"'李玉刚:让世界通过b站看到东方大国文化'",[91,55603,55545],{"class":250},[91,55605,55606],{"class":101},"'rgba(139,98,66)'",[91,55608,55551],{"class":250},[91,55610,55611,55613,55616,55618,55621,55623,55626],{"class":93,"line":17004},[91,55612,55533],{"class":250},[91,55614,55615],{"class":101},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[91,55617,55539],{"class":250},[91,55619,55620],{"class":101},"'快来分享你的寒假日常吧'",[91,55622,55545],{"class":250},[91,55624,55625],{"class":101},"'rgba(67,90,92)'",[91,55627,55551],{"class":250},[91,55629,55630,55632,55635,55637,55640,55642,55645],{"class":93,"line":17009},[91,55631,55533],{"class":250},[91,55633,55634],{"class":101},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[91,55636,55539],{"class":250},[91,55638,55639],{"class":101},"'哔哩哔哩小年YEAR'",[91,55641,55545],{"class":250},[91,55643,55644],{"class":101},"'rgba(166,131,143)'",[91,55646,55551],{"class":250},[91,55648,55649,55651,55654,55656,55659,55661,55664],{"class":93,"line":17022},[91,55650,55533],{"class":250},[91,55652,55653],{"class":101},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[91,55655,55539],{"class":250},[91,55657,55658],{"class":101},"'一站式解决你的电脑配置问题'",[91,55660,55545],{"class":250},[91,55662,55663],{"class":101},"'rgba(53,29,25)'",[91,55665,55551],{"class":250},[91,55667,55668,55670,55673,55675,55678,55680,55683],{"class":93,"line":17027},[91,55669,55533],{"class":250},[91,55671,55672],{"class":101},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[91,55674,55539],{"class":250},[91,55676,55677],{"class":101},"'谁不想和小猫咪贴贴呢?'",[91,55679,55545],{"class":250},[91,55681,55682],{"class":101},"'rgba(99,72,114)'",[91,55684,55685],{"class":250}," }\n",[91,55687,55688],{"class":93,"line":17032},[91,55689,53190],{"class":250},[91,55691,55692,55694,55697,55699,55701,55703,55705,55708],{"class":93,"line":17037},[91,55693,11344],{"class":153},[91,55695,55696],{"class":105}," img",[91,55698,13687],{"class":153},[91,55700,54477],{"class":250},[91,55702,54480],{"class":97},[91,55704,251],{"class":250},[91,55706,55707],{"class":101},"'.slider-wrapper img'",[91,55709,257],{"class":250},[91,55711,55712,55714,55716,55718,55720,55722,55724,55727],{"class":93,"line":17050},[91,55713,11344],{"class":153},[91,55715,6948],{"class":105},[91,55717,13687],{"class":153},[91,55719,54477],{"class":250},[91,55721,54480],{"class":97},[91,55723,251],{"class":250},[91,55725,55726],{"class":101},"'.slider-footer p'",[91,55728,257],{"class":250},[91,55730,55731,55733,55736,55738,55740,55742,55744,55747],{"class":93,"line":17055},[91,55732,11344],{"class":153},[91,55734,55735],{"class":105}," color",[91,55737,13687],{"class":153},[91,55739,54477],{"class":250},[91,55741,54480],{"class":97},[91,55743,251],{"class":250},[91,55745,55746],{"class":101},"'.slider-footer'",[91,55748,257],{"class":250},[91,55750,55751,55753,55756,55758,55760,55763,55765,55768],{"class":93,"line":32714},[91,55752,11344],{"class":153},[91,55754,55755],{"class":105}," lis",[91,55757,13687],{"class":153},[91,55759,54477],{"class":250},[91,55761,55762],{"class":97},"querySelectorAll",[91,55764,251],{"class":250},[91,55766,55767],{"class":101},"'.slider-footer ul li'",[91,55769,257],{"class":250},[91,55771,55772,55774,55776,55778],{"class":93,"line":32720},[91,55773,52300],{"class":153},[91,55775,9561],{"class":250},[91,55777,296],{"class":153},[91,55779,55780],{"class":105}," 1\n",[91,55782,55783,55785,55788,55790,55792,55794,55796],{"class":93,"line":32726},[91,55784,52300],{"class":153},[91,55786,55787],{"class":250}," timer ",[91,55789,296],{"class":153},[91,55791,54525],{"class":97},[91,55793,251],{"class":250},[91,55795,54530],{"class":153},[91,55797,54533],{"class":250},[91,55799,55800,55803,55805],{"class":93,"line":32732},[91,55801,55802],{"class":250},"      img.src ",[91,55804,296],{"class":153},[91,55806,55807],{"class":250}," arrImage[i].url\n",[91,55809,55810,55813,55815],{"class":93,"line":32738},[91,55811,55812],{"class":250},"      p.innerHTML ",[91,55814,296],{"class":153},[91,55816,55817],{"class":250}," arrImage[i].title\n",[91,55819,55820,55823,55825],{"class":93,"line":32749},[91,55821,55822],{"class":250},"      color.style.backgroundColor ",[91,55824,296],{"class":153},[91,55826,55827],{"class":250}," arrImage[i].color\n",[91,55829,55830],{"class":93,"line":32755},[91,55831,55832],{"class":308},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[91,55834,55835],{"class":93,"line":32775},[91,55836,55837],{"class":308},"      \u002F\u002F li.classList.add('activate')\n",[91,55839,55840],{"class":93,"line":32781},[91,55841,55842],{"class":308},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[91,55844,55845],{"class":93,"line":32792},[91,55846,55847],{"class":308},"      \u002F\u002F lis[i].classList.remove('activate')\n",[91,55849,55850,55853,55855,55857,55860,55863,55866,55868,55871],{"class":93,"line":32798},[91,55851,55852],{"class":250},"      document.",[91,55854,54480],{"class":97},[91,55856,251],{"class":250},[91,55858,55859],{"class":101},"'.activate'",[91,55861,55862],{"class":250},")?.classList.",[91,55864,55865],{"class":97},"toggle",[91,55867,251],{"class":250},[91,55869,55870],{"class":101},"'activate'",[91,55872,257],{"class":250},[91,55874,55875,55878,55880,55882,55884],{"class":93,"line":32804},[91,55876,55877],{"class":250},"      lis[i].classList.",[91,55879,5457],{"class":97},[91,55881,251],{"class":250},[91,55883,55870],{"class":101},[91,55885,257],{"class":250},[91,55887,55888],{"class":93,"line":32810},[91,55889,2523],{"emptyLinePlaceholder":175},[91,55891,55892,55895,55897,55899,55901,55903,55905,55907,55910],{"class":93,"line":32816},[91,55893,55894],{"class":250},"      i ",[91,55896,296],{"class":153},[91,55898,54564],{"class":250},[91,55900,730],{"class":153},[91,55902,25240],{"class":105},[91,55904,13837],{"class":250},[91,55906,577],{"class":153},[91,55908,55909],{"class":250}," arrImage.",[91,55911,55912],{"class":105},"length\n",[91,55914,55915],{"class":93,"line":32822},[91,55916,2523],{"emptyLinePlaceholder":175},[91,55918,55919,55921,55923],{"class":93,"line":32828},[91,55920,54616],{"class":250},[91,55922,6533],{"class":105},[91,55924,257],{"class":250},[91,55926,55927,55929,55931],{"class":93,"line":32834},[91,55928,52498],{"class":250},[91,55930,51894],{"class":51381},[91,55932,51388],{"class":250},[91,55934,55935,55937,55939],{"class":93,"line":32854},[91,55936,51866],{"class":250},[91,55938,51881],{"class":51381},[91,55940,51388],{"class":250},[91,55942,55943],{"class":93,"line":32860},[91,55944,2523],{"emptyLinePlaceholder":175},[91,55946,55947,55949,55951],{"class":93,"line":32876},[91,55948,51866],{"class":250},[91,55950,50716],{"class":51381},[91,55952,51388],{"class":250},[21,55954,55955],{},[24,55956],{"alt":26,"src":55957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[21,55959,55960],{},"?.就是短路保护,确保输出正常进行",[21,55962,55963],{},"不要忘记取余%,有时候可以用",[21,55965,55966],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[14,55968,55969],{"start":38},[17,55970,55971],{},"法2",[82,55973,55975],{"className":50714,"code":55974,"language":50716,"meta":26,"style":26},"\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",[88,55976,55977,55987,56001,56005,56013,56027,56047,56059,56067,56073,56083,56093,56097,56101,56107,56117,56121,56125,56131,56141,56153,56165,56179,56183,56187,56193,56203,56213,56223,56235,56247,56257,56261,56265,56273,56283,56295,56307,56319,56323,56327,56333,56343,56355,56367,56377,56387,56397,56409,56421,56425,56429,56437,56449,56461,56487,56499,56503,56507,56513,56523,56527,56535,56543,56547,56555,56569,56583,56603,56611,56625,56637,56645,56663,56675,56687,56699,56711,56723,56735,56747,56755,56763,56771,56779,56790,56806,56822,56838,56854,56870,56886,56902,56918,56922,56927,56945,56963,56973,56978,56983,56994,57000,57015,57024,57028,57033,57042,57047,57056,57061,57066,57071,57094,57124,57128,57136,57140,57148,57156,57160],{"__ignoreMap":26},[91,55978,55979,55981,55983,55985],{"class":93,"line":94},[91,55980,51378],{"class":250},[91,55982,51382],{"class":51381},[91,55984,51385],{"class":97},[91,55986,51388],{"class":250},[91,55988,55989,55991,55993,55995,55997,55999],{"class":93,"line":38},[91,55990,1159],{"class":250},[91,55992,50716],{"class":51381},[91,55994,51397],{"class":97},[91,55996,296],{"class":250},[91,55998,51402],{"class":101},[91,56000,51388],{"class":250},[91,56002,56003],{"class":93,"line":1304},[91,56004,2523],{"emptyLinePlaceholder":175},[91,56006,56007,56009,56011],{"class":93,"line":1319},[91,56008,1159],{"class":250},[91,56010,51415],{"class":51381},[91,56012,51388],{"class":250},[91,56014,56015,56017,56019,56021,56023,56025],{"class":93,"line":1325},[91,56016,52225],{"class":250},[91,56018,51425],{"class":51381},[91,56020,51428],{"class":97},[91,56022,296],{"class":250},[91,56024,51433],{"class":101},[91,56026,51388],{"class":250},[91,56028,56029,56031,56033,56035,56037,56039,56041,56043,56045],{"class":93,"line":1339},[91,56030,52225],{"class":250},[91,56032,51425],{"class":51381},[91,56034,15043],{"class":97},[91,56036,296],{"class":250},[91,56038,51472],{"class":101},[91,56040,51452],{"class":97},[91,56042,296],{"class":250},[91,56044,51479],{"class":101},[91,56046,51388],{"class":250},[91,56048,56049,56051,56053,56055,56057],{"class":93,"line":1345},[91,56050,52225],{"class":250},[91,56052,51488],{"class":51381},[91,56054,51491],{"class":250},[91,56056,51488],{"class":51381},[91,56058,51388],{"class":250},[91,56060,56061,56063,56065],{"class":93,"line":1436},[91,56062,52225],{"class":250},[91,56064,168],{"class":51381},[91,56066,51388],{"class":250},[91,56068,56069,56071],{"class":93,"line":1442},[91,56070,6526],{"class":51381},[91,56072,15695],{"class":250},[91,56074,56075,56077,56079,56081],{"class":93,"line":1454},[91,56076,54776],{"class":105},[91,56078,51518],{"class":250},[91,56080,440],{"class":105},[91,56082,1415],{"class":250},[91,56084,56085,56087,56089,56091],{"class":93,"line":1736},[91,56086,54787],{"class":105},[91,56088,51518],{"class":250},[91,56090,440],{"class":105},[91,56092,1415],{"class":250},[91,56094,56095],{"class":93,"line":1741},[91,56096,2310],{"class":250},[91,56098,56099],{"class":93,"line":1747},[91,56100,2523],{"emptyLinePlaceholder":175},[91,56102,56103,56105],{"class":93,"line":1752},[91,56104,54806],{"class":51381},[91,56106,15695],{"class":250},[91,56108,56109,56111,56113,56115],{"class":93,"line":1766},[91,56110,54813],{"class":105},[91,56112,51518],{"class":250},[91,56114,54818],{"class":105},[91,56116,1415],{"class":250},[91,56118,56119],{"class":93,"line":1771},[91,56120,2310],{"class":250},[91,56122,56123],{"class":93,"line":1777},[91,56124,2523],{"emptyLinePlaceholder":175},[91,56126,56127,56129],{"class":93,"line":1798},[91,56128,54833],{"class":97},[91,56130,15695],{"class":250},[91,56132,56133,56135,56137,56139],{"class":93,"line":1803},[91,56134,54840],{"class":105},[91,56136,51518],{"class":250},[91,56138,54845],{"class":105},[91,56140,1415],{"class":250},[91,56142,56143,56145,56147,56149,56151],{"class":93,"line":1817},[91,56144,54852],{"class":105},[91,56146,51518],{"class":250},[91,56148,54857],{"class":105},[91,56150,51573],{"class":153},[91,56152,1415],{"class":250},[91,56154,56155,56157,56159,56161,56163],{"class":93,"line":1822},[91,56156,54866],{"class":105},[91,56158,51518],{"class":250},[91,56160,1663],{"class":105},[91,56162,51573],{"class":153},[91,56164,1415],{"class":250},[91,56166,56167,56169,56171,56173,56175,56177],{"class":93,"line":1851},[91,56168,54787],{"class":105},[91,56170,51518],{"class":250},[91,56172,560],{"class":105},[91,56174,51573],{"class":153},[91,56176,51637],{"class":105},[91,56178,1415],{"class":250},[91,56180,56181],{"class":93,"line":1856},[91,56182,2310],{"class":250},[91,56184,56185],{"class":93,"line":1873},[91,56186,2523],{"emptyLinePlaceholder":175},[91,56188,56189,56191],{"class":93,"line":1878},[91,56190,54901],{"class":97},[91,56192,15695],{"class":250},[91,56194,56195,56197,56199,56201],{"class":93,"line":1883},[91,56196,54840],{"class":105},[91,56198,51518],{"class":250},[91,56200,54912],{"class":105},[91,56202,1415],{"class":250},[91,56204,56205,56207,56209,56211],{"class":93,"line":1888},[91,56206,54919],{"class":105},[91,56208,51518],{"class":250},[91,56210,440],{"class":105},[91,56212,1415],{"class":250},[91,56214,56215,56217,56219,56221],{"class":93,"line":1902},[91,56216,54930],{"class":105},[91,56218,51518],{"class":250},[91,56220,440],{"class":105},[91,56222,1415],{"class":250},[91,56224,56225,56227,56229,56231,56233],{"class":93,"line":1907},[91,56226,54852],{"class":105},[91,56228,51518],{"class":250},[91,56230,560],{"class":105},[91,56232,577],{"class":153},[91,56234,1415],{"class":250},[91,56236,56237,56239,56241,56243,56245],{"class":93,"line":2700},[91,56238,54866],{"class":105},[91,56240,51518],{"class":250},[91,56242,824],{"class":105},[91,56244,577],{"class":153},[91,56246,1415],{"class":250},[91,56248,56249,56251,56253,56255],{"class":93,"line":2714},[91,56250,54965],{"class":105},[91,56252,51518],{"class":250},[91,56254,54970],{"class":105},[91,56256,1415],{"class":250},[91,56258,56259],{"class":93,"line":2722},[91,56260,2310],{"class":250},[91,56262,56263],{"class":93,"line":2727},[91,56264,2523],{"emptyLinePlaceholder":175},[91,56266,56267,56269,56271],{"class":93,"line":2733},[91,56268,54901],{"class":97},[91,56270,6948],{"class":51381},[91,56272,15695],{"class":250},[91,56274,56275,56277,56279,56281],{"class":93,"line":2739},[91,56276,54840],{"class":105},[91,56278,51518],{"class":250},[91,56280,54912],{"class":105},[91,56282,1415],{"class":250},[91,56284,56285,56287,56289,56291,56293],{"class":93,"line":2744},[91,56286,55003],{"class":105},[91,56288,51518],{"class":250},[91,56290,1150],{"class":105},[91,56292,51573],{"class":153},[91,56294,1415],{"class":250},[91,56296,56297,56299,56301,56303,56305],{"class":93,"line":8071},[91,56298,54919],{"class":105},[91,56300,51518],{"class":250},[91,56302,949],{"class":105},[91,56304,51573],{"class":153},[91,56306,1415],{"class":250},[91,56308,56309,56311,56313,56315,56317],{"class":93,"line":8095},[91,56310,55028],{"class":105},[91,56312,51518],{"class":250},[91,56314,568],{"class":105},[91,56316,51573],{"class":153},[91,56318,1415],{"class":250},[91,56320,56321],{"class":93,"line":8100},[91,56322,2310],{"class":250},[91,56324,56325],{"class":93,"line":8106},[91,56326,2523],{"emptyLinePlaceholder":175},[91,56328,56329,56331],{"class":93,"line":8133},[91,56330,55049],{"class":51381},[91,56332,15695],{"class":250},[91,56334,56335,56337,56339,56341],{"class":93,"line":8138},[91,56336,54840],{"class":105},[91,56338,51518],{"class":250},[91,56340,54912],{"class":105},[91,56342,1415],{"class":250},[91,56344,56345,56347,56349,56351,56353],{"class":93,"line":8144},[91,56346,55028],{"class":105},[91,56348,51518],{"class":250},[91,56350,1030],{"class":105},[91,56352,51573],{"class":153},[91,56354,1415],{"class":250},[91,56356,56357,56359,56361,56363,56365],{"class":93,"line":8156},[91,56358,54919],{"class":105},[91,56360,51518],{"class":250},[91,56362,949],{"class":105},[91,56364,51573],{"class":153},[91,56366,1415],{"class":250},[91,56368,56369,56371,56373,56375],{"class":93,"line":8168},[91,56370,55090],{"class":105},[91,56372,51518],{"class":250},[91,56374,51558],{"class":105},[91,56376,1415],{"class":250},[91,56378,56379,56381,56383,56385],{"class":93,"line":8180},[91,56380,55101],{"class":105},[91,56382,51518],{"class":250},[91,56384,51749],{"class":105},[91,56386,1415],{"class":250},[91,56388,56389,56391,56393,56395],{"class":93,"line":9839},[91,56390,54840],{"class":105},[91,56392,51518],{"class":250},[91,56394,54912],{"class":105},[91,56396,1415],{"class":250},[91,56398,56399,56401,56403,56405,56407],{"class":93,"line":9864},[91,56400,54852],{"class":105},[91,56402,51518],{"class":250},[91,56404,4115],{"class":105},[91,56406,51573],{"class":153},[91,56408,1415],{"class":250},[91,56410,56411,56413,56415,56417,56419],{"class":93,"line":9887},[91,56412,54866],{"class":105},[91,56414,51518],{"class":250},[91,56416,949],{"class":105},[91,56418,51573],{"class":153},[91,56420,1415],{"class":250},[91,56422,56423],{"class":93,"line":9911},[91,56424,2310],{"class":250},[91,56426,56427],{"class":93,"line":9916},[91,56428,2523],{"emptyLinePlaceholder":175},[91,56430,56431,56433,56435],{"class":93,"line":9921},[91,56432,55049],{"class":51381},[91,56434,55156],{"class":51381},[91,56436,15695],{"class":250},[91,56438,56439,56441,56443,56445,56447],{"class":93,"line":9926},[91,56440,54852],{"class":105},[91,56442,51518],{"class":250},[91,56444,949],{"class":105},[91,56446,51573],{"class":153},[91,56448,1415],{"class":250},[91,56450,56451,56453,56455,56457,56459],{"class":93,"line":9935},[91,56452,54866],{"class":105},[91,56454,51518],{"class":250},[91,56456,949],{"class":105},[91,56458,51573],{"class":153},[91,56460,1415],{"class":250},[91,56462,56463,56465,56467,56469,56471,56473,56475,56477,56479,56481,56483,56485],{"class":93,"line":9940},[91,56464,54965],{"class":105},[91,56466,51518],{"class":250},[91,56468,55191],{"class":105},[91,56470,251],{"class":250},[91,56472,440],{"class":105},[91,56474,12558],{"class":250},[91,56476,440],{"class":105},[91,56478,12558],{"class":250},[91,56480,440],{"class":105},[91,56482,12558],{"class":250},[91,56484,55208],{"class":105},[91,56486,2842],{"class":250},[91,56488,56489,56491,56493,56495,56497],{"class":93,"line":9946},[91,56490,55215],{"class":105},[91,56492,51518],{"class":250},[91,56494,695],{"class":105},[91,56496,51573],{"class":153},[91,56498,1415],{"class":250},[91,56500,56501],{"class":93,"line":9967},[91,56502,2310],{"class":250},[91,56504,56505],{"class":93,"line":9973},[91,56506,2523],{"emptyLinePlaceholder":175},[91,56508,56509,56511],{"class":93,"line":9987},[91,56510,55236],{"class":97},[91,56512,15695],{"class":250},[91,56514,56515,56517,56519,56521],{"class":93,"line":9993},[91,56516,54965],{"class":105},[91,56518,51518],{"class":250},[91,56520,55247],{"class":105},[91,56522,1415],{"class":250},[91,56524,56525],{"class":93,"line":10020},[91,56526,2310],{"class":250},[91,56528,56529,56531,56533],{"class":93,"line":10029},[91,56530,52498],{"class":250},[91,56532,168],{"class":51381},[91,56534,51388],{"class":250},[91,56536,56537,56539,56541],{"class":93,"line":10035},[91,56538,51866],{"class":250},[91,56540,51415],{"class":51381},[91,56542,51388],{"class":250},[91,56544,56545],{"class":93,"line":10043},[91,56546,2523],{"emptyLinePlaceholder":175},[91,56548,56549,56551,56553],{"class":93,"line":10048},[91,56550,1159],{"class":250},[91,56552,51881],{"class":51381},[91,56554,51388],{"class":250},[91,56556,56557,56559,56561,56563,56565,56567],{"class":93,"line":16727},[91,56558,52225],{"class":250},[91,56560,51692],{"class":51381},[91,56562,53567],{"class":97},[91,56564,296],{"class":250},[91,56566,53572],{"class":101},[91,56568,51388],{"class":250},[91,56570,56571,56573,56575,56577,56579,56581],{"class":93,"line":16733},[91,56572,51422],{"class":250},[91,56574,51692],{"class":51381},[91,56576,53567],{"class":97},[91,56578,296],{"class":250},[91,56580,55308],{"class":101},[91,56582,51388],{"class":250},[91,56584,56585,56587,56589,56591,56593,56595,56597,56599,56601],{"class":93,"line":16756},[91,56586,55315],{"class":250},[91,56588,24],{"class":51381},[91,56590,55320],{"class":97},[91,56592,296],{"class":250},[91,56594,55325],{"class":101},[91,56596,55328],{"class":97},[91,56598,296],{"class":250},[91,56600,7775],{"class":101},[91,56602,51388],{"class":250},[91,56604,56605,56607,56609],{"class":93,"line":16762},[91,56606,51857],{"class":250},[91,56608,51692],{"class":51381},[91,56610,51388],{"class":250},[91,56612,56613,56615,56617,56619,56621,56623],{"class":93,"line":16785},[91,56614,51422],{"class":250},[91,56616,51692],{"class":51381},[91,56618,53567],{"class":97},[91,56620,296],{"class":250},[91,56622,55355],{"class":101},[91,56624,51388],{"class":250},[91,56626,56627,56629,56631,56633,56635],{"class":93,"line":16799},[91,56628,55315],{"class":250},[91,56630,21],{"class":51381},[91,56632,55366],{"class":250},[91,56634,21],{"class":51381},[91,56636,51388],{"class":250},[91,56638,56639,56641,56643],{"class":93,"line":16819},[91,56640,55315],{"class":250},[91,56642,1256],{"class":51381},[91,56644,51388],{"class":250},[91,56646,56647,56649,56651,56653,56655,56657,56659,56661],{"class":93,"line":16825},[91,56648,55383],{"class":250},[91,56650,17],{"class":51381},[91,56652,53567],{"class":97},[91,56654,296],{"class":250},[91,56656,55392],{"class":101},[91,56658,55395],{"class":250},[91,56660,17],{"class":51381},[91,56662,51388],{"class":250},[91,56664,56665,56667,56669,56671,56673],{"class":93,"line":16836},[91,56666,55383],{"class":250},[91,56668,17],{"class":51381},[91,56670,55395],{"class":250},[91,56672,17],{"class":51381},[91,56674,51388],{"class":250},[91,56676,56677,56679,56681,56683,56685],{"class":93,"line":16859},[91,56678,55383],{"class":250},[91,56680,17],{"class":51381},[91,56682,55395],{"class":250},[91,56684,17],{"class":51381},[91,56686,51388],{"class":250},[91,56688,56689,56691,56693,56695,56697],{"class":93,"line":16881},[91,56690,55383],{"class":250},[91,56692,17],{"class":51381},[91,56694,55395],{"class":250},[91,56696,17],{"class":51381},[91,56698,51388],{"class":250},[91,56700,56701,56703,56705,56707,56709],{"class":93,"line":16886},[91,56702,55383],{"class":250},[91,56704,17],{"class":51381},[91,56706,55395],{"class":250},[91,56708,17],{"class":51381},[91,56710,51388],{"class":250},[91,56712,56713,56715,56717,56719,56721],{"class":93,"line":16892},[91,56714,55383],{"class":250},[91,56716,17],{"class":51381},[91,56718,55395],{"class":250},[91,56720,17],{"class":51381},[91,56722,51388],{"class":250},[91,56724,56725,56727,56729,56731,56733],{"class":93,"line":16906},[91,56726,55383],{"class":250},[91,56728,17],{"class":51381},[91,56730,55395],{"class":250},[91,56732,17],{"class":51381},[91,56734,51388],{"class":250},[91,56736,56737,56739,56741,56743,56745],{"class":93,"line":16919},[91,56738,55383],{"class":250},[91,56740,17],{"class":51381},[91,56742,55395],{"class":250},[91,56744,17],{"class":51381},[91,56746,51388],{"class":250},[91,56748,56749,56751,56753],{"class":93,"line":16924},[91,56750,55488],{"class":250},[91,56752,1256],{"class":51381},[91,56754,51388],{"class":250},[91,56756,56757,56759,56761],{"class":93,"line":16938},[91,56758,51857],{"class":250},[91,56760,51692],{"class":51381},[91,56762,51388],{"class":250},[91,56764,56765,56767,56769],{"class":93,"line":16943},[91,56766,52498],{"class":250},[91,56768,51692],{"class":51381},[91,56770,51388],{"class":250},[91,56772,56773,56775,56777],{"class":93,"line":16949},[91,56774,52225],{"class":250},[91,56776,51894],{"class":51381},[91,56778,51388],{"class":250},[91,56780,56781,56783,56786,56788],{"class":93,"line":16954},[91,56782,11344],{"class":153},[91,56784,56785],{"class":105}," sliderData",[91,56787,13687],{"class":153},[91,56789,55528],{"class":250},[91,56791,56792,56794,56796,56798,56800,56802,56804],{"class":93,"line":16968},[91,56793,55533],{"class":250},[91,56795,55536],{"class":101},[91,56797,55539],{"class":250},[91,56799,55542],{"class":101},[91,56801,55545],{"class":250},[91,56803,55548],{"class":101},[91,56805,55551],{"class":250},[91,56807,56808,56810,56812,56814,56816,56818,56820],{"class":93,"line":16973},[91,56809,55533],{"class":250},[91,56811,55558],{"class":101},[91,56813,55539],{"class":250},[91,56815,55563],{"class":101},[91,56817,55545],{"class":250},[91,56819,55568],{"class":101},[91,56821,55551],{"class":250},[91,56823,56824,56826,56828,56830,56832,56834,56836],{"class":93,"line":16978},[91,56825,55533],{"class":250},[91,56827,55577],{"class":101},[91,56829,55539],{"class":250},[91,56831,55582],{"class":101},[91,56833,55545],{"class":250},[91,56835,55587],{"class":101},[91,56837,55551],{"class":250},[91,56839,56840,56842,56844,56846,56848,56850,56852],{"class":93,"line":16992},[91,56841,55533],{"class":250},[91,56843,55596],{"class":101},[91,56845,55539],{"class":250},[91,56847,55601],{"class":101},[91,56849,55545],{"class":250},[91,56851,55606],{"class":101},[91,56853,55551],{"class":250},[91,56855,56856,56858,56860,56862,56864,56866,56868],{"class":93,"line":17004},[91,56857,55533],{"class":250},[91,56859,55615],{"class":101},[91,56861,55539],{"class":250},[91,56863,55620],{"class":101},[91,56865,55545],{"class":250},[91,56867,55625],{"class":101},[91,56869,55551],{"class":250},[91,56871,56872,56874,56876,56878,56880,56882,56884],{"class":93,"line":17009},[91,56873,55533],{"class":250},[91,56875,55634],{"class":101},[91,56877,55539],{"class":250},[91,56879,55639],{"class":101},[91,56881,55545],{"class":250},[91,56883,55644],{"class":101},[91,56885,55551],{"class":250},[91,56887,56888,56890,56892,56894,56896,56898,56900],{"class":93,"line":17022},[91,56889,55533],{"class":250},[91,56891,55653],{"class":101},[91,56893,55539],{"class":250},[91,56895,55658],{"class":101},[91,56897,55545],{"class":250},[91,56899,55663],{"class":101},[91,56901,55551],{"class":250},[91,56903,56904,56906,56908,56910,56912,56914,56916],{"class":93,"line":17027},[91,56905,55533],{"class":250},[91,56907,55672],{"class":101},[91,56909,55539],{"class":250},[91,56911,55677],{"class":101},[91,56913,55545],{"class":250},[91,56915,55682],{"class":101},[91,56917,55685],{"class":250},[91,56919,56920],{"class":93,"line":17032},[91,56921,53190],{"class":250},[91,56923,56924],{"class":93,"line":17037},[91,56925,56926],{"class":308},"    \u002F\u002F 1.获取元素\n",[91,56928,56929,56931,56933,56935,56937,56939,56941,56943],{"class":93,"line":17050},[91,56930,11344],{"class":153},[91,56932,55696],{"class":105},[91,56934,13687],{"class":153},[91,56936,54477],{"class":250},[91,56938,54480],{"class":97},[91,56940,251],{"class":250},[91,56942,55707],{"class":101},[91,56944,257],{"class":250},[91,56946,56947,56949,56951,56953,56955,56957,56959,56961],{"class":93,"line":17055},[91,56948,11344],{"class":153},[91,56950,6948],{"class":105},[91,56952,13687],{"class":153},[91,56954,54477],{"class":250},[91,56956,54480],{"class":97},[91,56958,251],{"class":250},[91,56960,55726],{"class":101},[91,56962,257],{"class":250},[91,56964,56965,56967,56969,56971],{"class":93,"line":32714},[91,56966,52300],{"class":153},[91,56968,9561],{"class":250},[91,56970,296],{"class":153},[91,56972,47414],{"class":105},[91,56974,56975],{"class":93,"line":32720},[91,56976,56977],{"class":308},"    \u002F\u002F 2.开启定时器\n",[91,56979,56980],{"class":93,"line":32726},[91,56981,56982],{"class":308},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[91,56984,56985,56988,56990,56992],{"class":93,"line":32732},[91,56986,56987],{"class":97},"    setInterval",[91,56989,251],{"class":250},[91,56991,54530],{"class":153},[91,56993,54533],{"class":250},[91,56995,56996,56998],{"class":93,"line":32738},[91,56997,54538],{"class":250},[91,56999,2825],{"class":153},[91,57001,57002,57004,57006,57008,57011,57013],{"class":93,"line":32749},[91,57003,54561],{"class":153},[91,57005,54564],{"class":250},[91,57007,1834],{"class":153},[91,57009,57010],{"class":250}," sliderData.",[91,57012,52049],{"class":105},[91,57014,12565],{"class":250},[91,57016,57017,57020,57022],{"class":93,"line":32755},[91,57018,57019],{"class":250},"        i ",[91,57021,296],{"class":153},[91,57023,47414],{"class":105},[91,57025,57026],{"class":93,"line":32775},[91,57027,52479],{"class":250},[91,57029,57030],{"class":93,"line":32781},[91,57031,57032],{"class":308},"      \u002F\u002F 更换图片路径\n",[91,57034,57035,57037,57039],{"class":93,"line":32792},[91,57036,55802],{"class":250},[91,57038,296],{"class":153},[91,57040,57041],{"class":250}," sliderData[i].url\n",[91,57043,57044],{"class":93,"line":32798},[91,57045,57046],{"class":308},"      \u002F\u002F 把文字写到p里面\n",[91,57048,57049,57051,57053],{"class":93,"line":32804},[91,57050,55812],{"class":250},[91,57052,296],{"class":153},[91,57054,57055],{"class":250}," sliderData[i].title\n",[91,57057,57058],{"class":93,"line":32810},[91,57059,57060],{"class":308},"      \u002F\u002F 小圆点\n",[91,57062,57063],{"class":93,"line":32816},[91,57064,57065],{"class":308},"      \u002F\u002F 先删除以前的active\n",[91,57067,57068],{"class":93,"line":32822},[91,57069,57070],{"class":308},"      \u002F\u002F 只让当前li添加active\n",[91,57072,57073,57075,57077,57079,57082,57085,57088,57090,57092],{"class":93,"line":32828},[91,57074,55852],{"class":250},[91,57076,54480],{"class":97},[91,57078,251],{"class":250},[91,57080,57081],{"class":101},"'.slider-footer .activate'",[91,57083,57084],{"class":250},").classList.",[91,57086,57087],{"class":97},"remove",[91,57089,251],{"class":250},[91,57091,55870],{"class":101},[91,57093,257],{"class":250},[91,57095,57096,57098,57100,57102,57105,57107,57109,57111,57114,57116,57118,57120,57122],{"class":93,"line":32834},[91,57097,55852],{"class":250},[91,57099,54480],{"class":97},[91,57101,251],{"class":250},[91,57103,57104],{"class":101},"`.slider-footer ul li:nth-child(${",[91,57106,690],{"class":250},[91,57108,45647],{"class":153},[91,57110,25240],{"class":105},[91,57112,57113],{"class":101},"})`",[91,57115,57084],{"class":250},[91,57117,5457],{"class":97},[91,57119,251],{"class":250},[91,57121,55870],{"class":101},[91,57123,257],{"class":250},[91,57125,57126],{"class":93,"line":32854},[91,57127,2523],{"emptyLinePlaceholder":175},[91,57129,57130,57132,57134],{"class":93,"line":32860},[91,57131,54616],{"class":250},[91,57133,6533],{"class":105},[91,57135,257],{"class":250},[91,57137,57138],{"class":93,"line":32876},[91,57139,2523],{"emptyLinePlaceholder":175},[91,57141,57142,57144,57146],{"class":93,"line":32882},[91,57143,52498],{"class":250},[91,57145,51894],{"class":51381},[91,57147,51388],{"class":250},[91,57149,57150,57152,57154],{"class":93,"line":32896},[91,57151,51866],{"class":250},[91,57153,51881],{"class":51381},[91,57155,51388],{"class":250},[91,57157,57158],{"class":93,"line":32902},[91,57159,2523],{"emptyLinePlaceholder":175},[91,57161,57162,57164,57166],{"class":93,"line":32917},[91,57163,51866],{"class":250},[91,57165,50716],{"class":51381},[91,57167,51388],{"class":250},[217,57169,57171],{"id":57170},"_317-重要知识点","3.1.7 重要知识点",[21,57173,57174,57175],{},"浏览器在渲染文本时， ",[398,57176,57177],{},"没有空格或换行符就没有“断行点”",[21,57179,57180],{},[24,57181],{"alt":26,"src":57182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[21,57184,57185],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[21,57187,57188],{},[24,57189],{"alt":26,"src":57190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[21,57192,57193],{},[24,57194],{"alt":26,"src":57195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[190,57197,57199],{"id":57198},"_32-dom事件基础","3.2 DOM事件基础",[217,57201,57203],{"id":57202},"_321-事件监听","3.2.1 事件监听",[21,57205,57206],{},[24,57207],{"alt":26,"src":57208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[21,57210,57211],{},"事件监听有响应的发生",[21,57213,57214],{},[24,57215],{"alt":26,"src":57216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[21,57218,57219],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[21,57221,57222],{},"对于有名函数,要执行的函数名后边不要加()",[217,57224,57226],{"id":57225},"_322-随机点名案例","3.2.2 随机点名案例",[82,57228,57230],{"className":50714,"code":57229,"language":50716,"meta":26,"style":26},"\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",[88,57231,57232,57242,57256,57260,57268,57282,57302,57314,57322,57328,57338,57348,57352,57356,57363,57374,57378,57382,57388,57400,57414,57424,57436,57449,57453,57457,57464,57468,57481,57493,57505,57509,57513,57517,57524,57534,57538,57542,57551,57563,57575,57590,57594,57602,57610,57614,57622,57635,57649,57662,57682,57690,57705,57725,57745,57753,57757,57765,57770,57806,57826,57831,57850,57855,57866,57871,57882,57887,57906,57921,57926,57952,57962,57971,57976,57992,57997,58002,58007,58022,58026,58030,58035,58054,58071,58079,58084,58099,58103,58107,58115,58123,58127],{"__ignoreMap":26},[91,57233,57234,57236,57238,57240],{"class":93,"line":94},[91,57235,51378],{"class":250},[91,57237,51382],{"class":51381},[91,57239,51385],{"class":97},[91,57241,51388],{"class":250},[91,57243,57244,57246,57248,57250,57252,57254],{"class":93,"line":38},[91,57245,1159],{"class":250},[91,57247,50716],{"class":51381},[91,57249,51397],{"class":97},[91,57251,296],{"class":250},[91,57253,51402],{"class":101},[91,57255,51388],{"class":250},[91,57257,57258],{"class":93,"line":1304},[91,57259,2523],{"emptyLinePlaceholder":175},[91,57261,57262,57264,57266],{"class":93,"line":1319},[91,57263,1159],{"class":250},[91,57265,51415],{"class":51381},[91,57267,51388],{"class":250},[91,57269,57270,57272,57274,57276,57278,57280],{"class":93,"line":1325},[91,57271,52225],{"class":250},[91,57273,51425],{"class":51381},[91,57275,51428],{"class":97},[91,57277,296],{"class":250},[91,57279,51433],{"class":101},[91,57281,51388],{"class":250},[91,57283,57284,57286,57288,57290,57292,57294,57296,57298,57300],{"class":93,"line":1339},[91,57285,52225],{"class":250},[91,57287,51425],{"class":51381},[91,57289,15043],{"class":97},[91,57291,296],{"class":250},[91,57293,51472],{"class":101},[91,57295,51452],{"class":97},[91,57297,296],{"class":250},[91,57299,51479],{"class":101},[91,57301,51388],{"class":250},[91,57303,57304,57306,57308,57310,57312],{"class":93,"line":1345},[91,57305,52225],{"class":250},[91,57307,51488],{"class":51381},[91,57309,51491],{"class":250},[91,57311,51488],{"class":51381},[91,57313,51388],{"class":250},[91,57315,57316,57318,57320],{"class":93,"line":1436},[91,57317,52225],{"class":250},[91,57319,168],{"class":51381},[91,57321,51388],{"class":250},[91,57323,57324,57326],{"class":93,"line":1442},[91,57325,6526],{"class":51381},[91,57327,15695],{"class":250},[91,57329,57330,57332,57334,57336],{"class":93,"line":1454},[91,57331,54787],{"class":105},[91,57333,51518],{"class":250},[91,57335,440],{"class":105},[91,57337,1415],{"class":250},[91,57339,57340,57342,57344,57346],{"class":93,"line":1736},[91,57341,54776],{"class":105},[91,57343,51518],{"class":250},[91,57345,440],{"class":105},[91,57347,1415],{"class":250},[91,57349,57350],{"class":93,"line":1741},[91,57351,2310],{"class":250},[91,57353,57354],{"class":93,"line":1747},[91,57355,2523],{"emptyLinePlaceholder":175},[91,57357,57358,57361],{"class":93,"line":1752},[91,57359,57360],{"class":51381},"    h2",[91,57362,15695],{"class":250},[91,57364,57365,57368,57370,57372],{"class":93,"line":1766},[91,57366,57367],{"class":105},"      text-align",[91,57369,51518],{"class":250},[91,57371,51673],{"class":105},[91,57373,1415],{"class":250},[91,57375,57376],{"class":93,"line":1771},[91,57377,2310],{"class":250},[91,57379,57380],{"class":93,"line":1777},[91,57381,2523],{"emptyLinePlaceholder":175},[91,57383,57384,57386],{"class":93,"line":1798},[91,57385,54833],{"class":97},[91,57387,15695],{"class":250},[91,57389,57390,57392,57394,57396,57398],{"class":93,"line":1803},[91,57391,54852],{"class":105},[91,57393,51518],{"class":250},[91,57395,1663],{"class":105},[91,57397,51573],{"class":153},[91,57399,1415],{"class":250},[91,57401,57402,57404,57406,57408,57410,57412],{"class":93,"line":1817},[91,57403,54787],{"class":105},[91,57405,51518],{"class":250},[91,57407,905],{"class":105},[91,57409,51573],{"class":153},[91,57411,51637],{"class":105},[91,57413,1415],{"class":250},[91,57415,57416,57418,57420,57422],{"class":93,"line":1822},[91,57417,55090],{"class":105},[91,57419,51518],{"class":250},[91,57421,51558],{"class":105},[91,57423,1415],{"class":250},[91,57425,57426,57428,57430,57432,57434],{"class":93,"line":1851},[91,57427,55003],{"class":105},[91,57429,51518],{"class":250},[91,57431,1074],{"class":105},[91,57433,51573],{"class":153},[91,57435,1415],{"class":250},[91,57437,57438,57441,57443,57445,57447],{"class":93,"line":1856},[91,57439,57440],{"class":105},"      line-height",[91,57442,51518],{"class":250},[91,57444,650],{"class":105},[91,57446,51573],{"class":153},[91,57448,1415],{"class":250},[91,57450,57451],{"class":93,"line":1873},[91,57452,2310],{"class":250},[91,57454,57455],{"class":93,"line":1878},[91,57456,2523],{"emptyLinePlaceholder":175},[91,57458,57459,57462],{"class":93,"line":1883},[91,57460,57461],{"class":97},"    .qs",[91,57463,15695],{"class":250},[91,57465,57466],{"class":93,"line":1888},[91,57467,2523],{"emptyLinePlaceholder":175},[91,57469,57470,57472,57474,57477,57479],{"class":93,"line":1902},[91,57471,54852],{"class":105},[91,57473,51518],{"class":250},[91,57475,57476],{"class":105},"450",[91,57478,51573],{"class":153},[91,57480,1415],{"class":250},[91,57482,57483,57485,57487,57489,57491],{"class":93,"line":1907},[91,57484,54866],{"class":105},[91,57486,51518],{"class":250},[91,57488,650],{"class":105},[91,57490,51573],{"class":153},[91,57492,1415],{"class":250},[91,57494,57495,57498,57500,57503],{"class":93,"line":2700},[91,57496,57497],{"class":105},"      color",[91,57499,51518],{"class":250},[91,57501,57502],{"class":105},"red",[91,57504,1415],{"class":250},[91,57506,57507],{"class":93,"line":2714},[91,57508,2523],{"emptyLinePlaceholder":175},[91,57510,57511],{"class":93,"line":2722},[91,57512,2310],{"class":250},[91,57514,57515],{"class":93,"line":2727},[91,57516,2523],{"emptyLinePlaceholder":175},[91,57518,57519,57522],{"class":93,"line":2733},[91,57520,57521],{"class":97},"    .btns",[91,57523,15695],{"class":250},[91,57525,57526,57528,57530,57532],{"class":93,"line":2739},[91,57527,57367],{"class":105},[91,57529,51518],{"class":250},[91,57531,51673],{"class":105},[91,57533,1415],{"class":250},[91,57535,57536],{"class":93,"line":2744},[91,57537,2310],{"class":250},[91,57539,57540],{"class":93,"line":8071},[91,57541,2523],{"emptyLinePlaceholder":175},[91,57543,57544,57546,57549],{"class":93,"line":8095},[91,57545,57521],{"class":97},[91,57547,57548],{"class":51381}," button",[91,57550,15695],{"class":250},[91,57552,57553,57555,57557,57559,57561],{"class":93,"line":8100},[91,57554,54852],{"class":105},[91,57556,51518],{"class":250},[91,57558,1066],{"class":105},[91,57560,51573],{"class":153},[91,57562,1415],{"class":250},[91,57564,57565,57567,57569,57571,57573],{"class":93,"line":8106},[91,57566,54866],{"class":105},[91,57568,51518],{"class":250},[91,57570,522],{"class":105},[91,57572,51573],{"class":153},[91,57574,1415],{"class":250},[91,57576,57577,57579,57581,57583,57586,57588],{"class":93,"line":8133},[91,57578,54787],{"class":105},[91,57580,51518],{"class":250},[91,57582,440],{"class":105},[91,57584,57585],{"class":105}," 50",[91,57587,51573],{"class":153},[91,57589,1415],{"class":250},[91,57591,57592],{"class":93,"line":8138},[91,57593,2310],{"class":250},[91,57595,57596,57598,57600],{"class":93,"line":8144},[91,57597,52498],{"class":250},[91,57599,168],{"class":51381},[91,57601,51388],{"class":250},[91,57603,57604,57606,57608],{"class":93,"line":8156},[91,57605,51866],{"class":250},[91,57607,51415],{"class":51381},[91,57609,51388],{"class":250},[91,57611,57612],{"class":93,"line":8168},[91,57613,2523],{"emptyLinePlaceholder":175},[91,57615,57616,57618,57620],{"class":93,"line":8180},[91,57617,1159],{"class":250},[91,57619,51881],{"class":51381},[91,57621,51388],{"class":250},[91,57623,57624,57626,57628,57631,57633],{"class":93,"line":9839},[91,57625,52225],{"class":250},[91,57627,190],{"class":51381},[91,57629,57630],{"class":250},">随机点名\u003C\u002F",[91,57632,190],{"class":51381},[91,57634,51388],{"class":250},[91,57636,57637,57639,57641,57643,57645,57647],{"class":93,"line":9864},[91,57638,52225],{"class":250},[91,57640,51692],{"class":51381},[91,57642,53567],{"class":97},[91,57644,296],{"class":250},[91,57646,53572],{"class":101},[91,57648,51388],{"class":250},[91,57650,57651,57653,57655,57658,57660],{"class":93,"line":9887},[91,57652,51422],{"class":250},[91,57654,91],{"class":51381},[91,57656,57657],{"class":250},">名字是：\u003C\u002F",[91,57659,91],{"class":51381},[91,57661,51388],{"class":250},[91,57663,57664,57666,57668,57670,57672,57675,57678,57680],{"class":93,"line":9911},[91,57665,51422],{"class":250},[91,57667,51692],{"class":51381},[91,57669,53567],{"class":97},[91,57671,296],{"class":250},[91,57673,57674],{"class":101},"\"qs\"",[91,57676,57677],{"class":250},">这里显示姓名\u003C\u002F",[91,57679,51692],{"class":51381},[91,57681,51388],{"class":250},[91,57683,57684,57686,57688],{"class":93,"line":9916},[91,57685,52498],{"class":250},[91,57687,51692],{"class":51381},[91,57689,51388],{"class":250},[91,57691,57692,57694,57696,57698,57700,57703],{"class":93,"line":9921},[91,57693,52225],{"class":250},[91,57695,51692],{"class":51381},[91,57697,53567],{"class":97},[91,57699,296],{"class":250},[91,57701,57702],{"class":101},"\"btns\"",[91,57704,51388],{"class":250},[91,57706,57707,57709,57711,57713,57715,57718,57721,57723],{"class":93,"line":9926},[91,57708,51422],{"class":250},[91,57710,53968],{"class":51381},[91,57712,53567],{"class":97},[91,57714,296],{"class":250},[91,57716,57717],{"class":101},"\"start\"",[91,57719,57720],{"class":250},">开始\u003C\u002F",[91,57722,53968],{"class":51381},[91,57724,51388],{"class":250},[91,57726,57727,57729,57731,57733,57735,57738,57741,57743],{"class":93,"line":9935},[91,57728,51422],{"class":250},[91,57730,53968],{"class":51381},[91,57732,53567],{"class":97},[91,57734,296],{"class":250},[91,57736,57737],{"class":101},"\"end\"",[91,57739,57740],{"class":250},">结束\u003C\u002F",[91,57742,53968],{"class":51381},[91,57744,51388],{"class":250},[91,57746,57747,57749,57751],{"class":93,"line":9940},[91,57748,52498],{"class":250},[91,57750,51692],{"class":51381},[91,57752,51388],{"class":250},[91,57754,57755],{"class":93,"line":9946},[91,57756,2523],{"emptyLinePlaceholder":175},[91,57758,57759,57761,57763],{"class":93,"line":9967},[91,57760,52225],{"class":250},[91,57762,51894],{"class":51381},[91,57764,51388],{"class":250},[91,57766,57767],{"class":93,"line":9973},[91,57768,57769],{"class":308},"    \u002F\u002F 数据数组\n",[91,57771,57772,57774,57777,57779,57781,57784,57786,57789,57791,57794,57796,57799,57801,57804],{"class":93,"line":9987},[91,57773,11344],{"class":153},[91,57775,57776],{"class":105}," arr",[91,57778,13687],{"class":153},[91,57780,52307],{"class":250},[91,57782,57783],{"class":101},"'马超'",[91,57785,12558],{"class":250},[91,57787,57788],{"class":101},"'黄忠'",[91,57790,12558],{"class":250},[91,57792,57793],{"class":101},"'赵云'",[91,57795,12558],{"class":250},[91,57797,57798],{"class":101},"'关羽'",[91,57800,12558],{"class":250},[91,57802,57803],{"class":101},"'张飞'",[91,57805,33327],{"class":250},[91,57807,57808,57810,57813,57815,57817,57819,57821,57824],{"class":93,"line":9993},[91,57809,11344],{"class":153},[91,57811,57812],{"class":105}," qs",[91,57814,13687],{"class":153},[91,57816,54477],{"class":250},[91,57818,54480],{"class":97},[91,57820,251],{"class":250},[91,57822,57823],{"class":101},"'.qs'",[91,57825,257],{"class":250},[91,57827,57828],{"class":93,"line":10020},[91,57829,57830],{"class":308},"    \u002F\u002F 1.业务1.开始按钮模块\n",[91,57832,57833,57835,57837,57839,57841,57843,57845,57848],{"class":93,"line":10029},[91,57834,11344],{"class":153},[91,57836,4307],{"class":105},[91,57838,13687],{"class":153},[91,57840,54477],{"class":250},[91,57842,54480],{"class":97},[91,57844,251],{"class":250},[91,57846,57847],{"class":101},"'.start'",[91,57849,257],{"class":250},[91,57851,57852],{"class":93,"line":10035},[91,57853,57854],{"class":308},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[91,57856,57857,57859,57862,57864],{"class":93,"line":10043},[91,57858,52300],{"class":153},[91,57860,57861],{"class":250}," timerId ",[91,57863,296],{"class":153},[91,57865,47414],{"class":105},[91,57867,57868],{"class":93,"line":10048},[91,57869,57870],{"class":308},"    \u002F\u002F 随机号要全局变量\n",[91,57872,57873,57875,57878,57880],{"class":93,"line":16727},[91,57874,52300],{"class":153},[91,57876,57877],{"class":250}," random ",[91,57879,296],{"class":153},[91,57881,47414],{"class":105},[91,57883,57884],{"class":93,"line":16733},[91,57885,57886],{"class":308},"    \u002F\u002F 1.1 添加点击事件\n",[91,57888,57889,57892,57895,57897,57900,57902,57904],{"class":93,"line":16756},[91,57890,57891],{"class":250},"    start.",[91,57893,57894],{"class":97},"addEventListener",[91,57896,251],{"class":250},[91,57898,57899],{"class":101},"'click'",[91,57901,12558],{"class":250},[91,57903,54530],{"class":153},[91,57905,54533],{"class":250},[91,57907,57908,57911,57913,57915,57917,57919],{"class":93,"line":16762},[91,57909,57910],{"class":250},"      timerId ",[91,57912,296],{"class":153},[91,57914,54525],{"class":97},[91,57916,251],{"class":250},[91,57918,54530],{"class":153},[91,57920,54533],{"class":250},[91,57922,57923],{"class":93,"line":16785},[91,57924,57925],{"class":308},"        \u002F\u002F 随机数\n",[91,57927,57928,57931,57933,57936,57939,57942,57944,57946,57948,57950],{"class":93,"line":16799},[91,57929,57930],{"class":250},"        random ",[91,57932,296],{"class":153},[91,57934,57935],{"class":97}," parseInt",[91,57937,57938],{"class":250},"(Math.",[91,57940,57941],{"class":97},"random",[91,57943,13173],{"class":250},[91,57945,704],{"class":153},[91,57947,52046],{"class":250},[91,57949,52049],{"class":105},[91,57951,257],{"class":250},[91,57953,57954,57957,57959],{"class":93,"line":16819},[91,57955,57956],{"class":250},"        qs.innerHTML ",[91,57958,296],{"class":153},[91,57960,57961],{"class":250}," arr[random]\n",[91,57963,57964,57967,57969],{"class":93,"line":16825},[91,57965,57966],{"class":250},"      }, ",[91,57968,522],{"class":105},[91,57970,257],{"class":250},[91,57972,57973],{"class":93,"line":16836},[91,57974,57975],{"class":308},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[91,57977,57978,57980,57983,57985,57988,57990],{"class":93,"line":16859},[91,57979,54561],{"class":153},[91,57981,57982],{"class":250}," (arr.",[91,57984,52049],{"class":105},[91,57986,57987],{"class":153}," ===",[91,57989,25240],{"class":105},[91,57991,12565],{"class":250},[91,57993,57994],{"class":93,"line":16881},[91,57995,57996],{"class":308},"        \u002F\u002F start.disabled = true\n",[91,57998,57999],{"class":93,"line":16886},[91,58000,58001],{"class":308},"        \u002F\u002F end.disabled = true\n",[91,58003,58004],{"class":93,"line":16892},[91,58005,58006],{"class":308},"        \u002F\u002F 可以合起来写\n",[91,58008,58009,58012,58014,58017,58019],{"class":93,"line":16906},[91,58010,58011],{"class":250},"        start.disabled ",[91,58013,296],{"class":153},[91,58015,58016],{"class":250}," end.disabled ",[91,58018,296],{"class":153},[91,58020,58021],{"class":105}," true\n",[91,58023,58024],{"class":93,"line":16919},[91,58025,52479],{"class":250},[91,58027,58028],{"class":93,"line":16924},[91,58029,33542],{"class":250},[91,58031,58032],{"class":93,"line":16938},[91,58033,58034],{"class":308},"    \u002F\u002F 1.2 关闭按钮模块\n",[91,58036,58037,58039,58041,58043,58045,58047,58049,58052],{"class":93,"line":16943},[91,58038,11344],{"class":153},[91,58040,4323],{"class":105},[91,58042,13687],{"class":153},[91,58044,54477],{"class":250},[91,58046,54480],{"class":97},[91,58048,251],{"class":250},[91,58050,58051],{"class":101},"'.end'",[91,58053,257],{"class":250},[91,58055,58056,58059,58061,58063,58065,58067,58069],{"class":93,"line":16949},[91,58057,58058],{"class":250},"    end.",[91,58060,57894],{"class":97},[91,58062,251],{"class":250},[91,58064,57899],{"class":101},[91,58066,12558],{"class":250},[91,58068,54530],{"class":153},[91,58070,54533],{"class":250},[91,58072,58073,58076],{"class":93,"line":16954},[91,58074,58075],{"class":97},"      clearInterval",[91,58077,58078],{"class":250},"(timerId)\n",[91,58080,58081],{"class":93,"line":16968},[91,58082,58083],{"class":308},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[91,58085,58086,58089,58092,58095,58097],{"class":93,"line":16973},[91,58087,58088],{"class":250},"      arr.",[91,58090,58091],{"class":97},"splice",[91,58093,58094],{"class":250},"(random, ",[91,58096,466],{"class":105},[91,58098,257],{"class":250},[91,58100,58101],{"class":93,"line":16978},[91,58102,33542],{"class":250},[91,58104,58105],{"class":93,"line":16992},[91,58106,2523],{"emptyLinePlaceholder":175},[91,58108,58109,58111,58113],{"class":93,"line":17004},[91,58110,52498],{"class":250},[91,58112,51894],{"class":51381},[91,58114,51388],{"class":250},[91,58116,58117,58119,58121],{"class":93,"line":17009},[91,58118,51866],{"class":250},[91,58120,51881],{"class":51381},[91,58122,51388],{"class":250},[91,58124,58125],{"class":93,"line":17022},[91,58126,2523],{"emptyLinePlaceholder":175},[91,58128,58129,58131,58133],{"class":93,"line":17027},[91,58130,51866],{"class":250},[91,58132,50716],{"class":51381},[91,58134,51388],{"class":250},[21,58136,58137],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[217,58139,58141],{"id":58140},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[82,58143,58145],{"className":50714,"code":58144,"language":50716,"meta":26,"style":26},"\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",[88,58146,58147,58157,58171,58175,58183,58197,58217,58229,58237,58241,58249,58261,58269,58288,58305,58321,58331,58335,58343,58351,58355],{"__ignoreMap":26},[91,58148,58149,58151,58153,58155],{"class":93,"line":94},[91,58150,51378],{"class":250},[91,58152,51382],{"class":51381},[91,58154,51385],{"class":97},[91,58156,51388],{"class":250},[91,58158,58159,58161,58163,58165,58167,58169],{"class":93,"line":38},[91,58160,1159],{"class":250},[91,58162,50716],{"class":51381},[91,58164,51397],{"class":97},[91,58166,296],{"class":250},[91,58168,51402],{"class":101},[91,58170,51388],{"class":250},[91,58172,58173],{"class":93,"line":1304},[91,58174,2523],{"emptyLinePlaceholder":175},[91,58176,58177,58179,58181],{"class":93,"line":1319},[91,58178,1159],{"class":250},[91,58180,51415],{"class":51381},[91,58182,51388],{"class":250},[91,58184,58185,58187,58189,58191,58193,58195],{"class":93,"line":1325},[91,58186,52225],{"class":250},[91,58188,51425],{"class":51381},[91,58190,51428],{"class":97},[91,58192,296],{"class":250},[91,58194,51433],{"class":101},[91,58196,51388],{"class":250},[91,58198,58199,58201,58203,58205,58207,58209,58211,58213,58215],{"class":93,"line":1339},[91,58200,52225],{"class":250},[91,58202,51425],{"class":51381},[91,58204,15043],{"class":97},[91,58206,296],{"class":250},[91,58208,51472],{"class":101},[91,58210,51452],{"class":97},[91,58212,296],{"class":250},[91,58214,51479],{"class":101},[91,58216,51388],{"class":250},[91,58218,58219,58221,58223,58225,58227],{"class":93,"line":1345},[91,58220,52225],{"class":250},[91,58222,51488],{"class":51381},[91,58224,51491],{"class":250},[91,58226,51488],{"class":51381},[91,58228,51388],{"class":250},[91,58230,58231,58233,58235],{"class":93,"line":1436},[91,58232,51866],{"class":250},[91,58234,51415],{"class":51381},[91,58236,51388],{"class":250},[91,58238,58239],{"class":93,"line":1442},[91,58240,2523],{"emptyLinePlaceholder":175},[91,58242,58243,58245,58247],{"class":93,"line":1454},[91,58244,1159],{"class":250},[91,58246,51881],{"class":51381},[91,58248,51388],{"class":250},[91,58250,58251,58253,58255,58257,58259],{"class":93,"line":1736},[91,58252,52225],{"class":250},[91,58254,53968],{"class":51381},[91,58256,53974],{"class":250},[91,58258,53968],{"class":51381},[91,58260,51388],{"class":250},[91,58262,58263,58265,58267],{"class":93,"line":1741},[91,58264,52225],{"class":250},[91,58266,51894],{"class":51381},[91,58268,51388],{"class":250},[91,58270,58271,58273,58275,58277,58279,58281,58283,58286],{"class":93,"line":1747},[91,58272,11344],{"class":153},[91,58274,54472],{"class":105},[91,58276,13687],{"class":153},[91,58278,54477],{"class":250},[91,58280,54480],{"class":97},[91,58282,251],{"class":250},[91,58284,58285],{"class":101},"'button'",[91,58287,257],{"class":250},[91,58289,58290,58293,58295,58297,58299,58301,58303],{"class":93,"line":1752},[91,58291,58292],{"class":250},"    btn.",[91,58294,57894],{"class":97},[91,58296,251],{"class":250},[91,58298,57899],{"class":101},[91,58300,12558],{"class":250},[91,58302,54530],{"class":153},[91,58304,54533],{"class":250},[91,58306,58307,58310,58312,58314,58317,58319],{"class":93,"line":1766},[91,58308,58309],{"class":153},"      const",[91,58311,2363],{"class":105},[91,58313,13687],{"class":153},[91,58315,58316],{"class":250}," Math.",[91,58318,57941],{"class":97},[91,58320,2099],{"class":250},[91,58322,58323,58326,58329],{"class":93,"line":1771},[91,58324,58325],{"class":250},"      console.",[91,58327,58328],{"class":97},"log",[91,58330,264],{"class":250},[91,58332,58333],{"class":93,"line":1777},[91,58334,33542],{"class":250},[91,58336,58337,58339,58341],{"class":93,"line":1798},[91,58338,52498],{"class":250},[91,58340,51894],{"class":51381},[91,58342,51388],{"class":250},[91,58344,58345,58347,58349],{"class":93,"line":1803},[91,58346,51866],{"class":250},[91,58348,51881],{"class":51381},[91,58350,51388],{"class":250},[91,58352,58353],{"class":93,"line":1817},[91,58354,2523],{"emptyLinePlaceholder":175},[91,58356,58357,58359,58361],{"class":93,"line":1822},[91,58358,51866],{"class":250},[91,58360,50716],{"class":51381},[91,58362,51388],{"class":250},[21,58364,58365],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[21,58367,58368],{},"常量不可以重新赋值",[21,58370,58371],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[82,58373,58375],{"className":50714,"code":58374,"language":50716,"meta":26,"style":26},"\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",[88,58376,58377,58387,58401,58405,58413,58427,58447,58459,58467,58471,58479,58491,58499,58510,58528,58544,58558,58566,58570,58578,58586,58590],{"__ignoreMap":26},[91,58378,58379,58381,58383,58385],{"class":93,"line":94},[91,58380,51378],{"class":250},[91,58382,51382],{"class":51381},[91,58384,51385],{"class":97},[91,58386,51388],{"class":250},[91,58388,58389,58391,58393,58395,58397,58399],{"class":93,"line":38},[91,58390,1159],{"class":250},[91,58392,50716],{"class":51381},[91,58394,51397],{"class":97},[91,58396,296],{"class":250},[91,58398,51402],{"class":101},[91,58400,51388],{"class":250},[91,58402,58403],{"class":93,"line":1304},[91,58404,2523],{"emptyLinePlaceholder":175},[91,58406,58407,58409,58411],{"class":93,"line":1319},[91,58408,1159],{"class":250},[91,58410,51415],{"class":51381},[91,58412,51388],{"class":250},[91,58414,58415,58417,58419,58421,58423,58425],{"class":93,"line":1325},[91,58416,52225],{"class":250},[91,58418,51425],{"class":51381},[91,58420,51428],{"class":97},[91,58422,296],{"class":250},[91,58424,51433],{"class":101},[91,58426,51388],{"class":250},[91,58428,58429,58431,58433,58435,58437,58439,58441,58443,58445],{"class":93,"line":1339},[91,58430,52225],{"class":250},[91,58432,51425],{"class":51381},[91,58434,15043],{"class":97},[91,58436,296],{"class":250},[91,58438,51472],{"class":101},[91,58440,51452],{"class":97},[91,58442,296],{"class":250},[91,58444,51479],{"class":101},[91,58446,51388],{"class":250},[91,58448,58449,58451,58453,58455,58457],{"class":93,"line":1345},[91,58450,52225],{"class":250},[91,58452,51488],{"class":51381},[91,58454,51491],{"class":250},[91,58456,51488],{"class":51381},[91,58458,51388],{"class":250},[91,58460,58461,58463,58465],{"class":93,"line":1436},[91,58462,51866],{"class":250},[91,58464,51415],{"class":51381},[91,58466,51388],{"class":250},[91,58468,58469],{"class":93,"line":1442},[91,58470,2523],{"emptyLinePlaceholder":175},[91,58472,58473,58475,58477],{"class":93,"line":1454},[91,58474,1159],{"class":250},[91,58476,51881],{"class":51381},[91,58478,51388],{"class":250},[91,58480,58481,58483,58485,58487,58489],{"class":93,"line":1736},[91,58482,52225],{"class":250},[91,58484,53968],{"class":51381},[91,58486,53974],{"class":250},[91,58488,53968],{"class":51381},[91,58490,51388],{"class":250},[91,58492,58493,58495,58497],{"class":93,"line":1741},[91,58494,52225],{"class":250},[91,58496,51894],{"class":51381},[91,58498,51388],{"class":250},[91,58500,58501,58503,58505,58507],{"class":93,"line":1747},[91,58502,11344],{"class":153},[91,58504,2363],{"class":105},[91,58506,13687],{"class":153},[91,58508,58509],{"class":105}," 10\n",[91,58511,58512,58514,58516,58518,58520,58522,58524,58526],{"class":93,"line":1752},[91,58513,11344],{"class":153},[91,58515,54472],{"class":105},[91,58517,13687],{"class":153},[91,58519,54477],{"class":250},[91,58521,54480],{"class":97},[91,58523,251],{"class":250},[91,58525,58285],{"class":101},[91,58527,257],{"class":250},[91,58529,58530,58532,58534,58536,58538,58540,58542],{"class":93,"line":1766},[91,58531,58292],{"class":250},[91,58533,57894],{"class":97},[91,58535,251],{"class":250},[91,58537,57899],{"class":101},[91,58539,12558],{"class":250},[91,58541,54530],{"class":153},[91,58543,54533],{"class":250},[91,58545,58546,58548,58550,58552,58554,58556],{"class":93,"line":1771},[91,58547,58309],{"class":153},[91,58549,2363],{"class":105},[91,58551,13687],{"class":153},[91,58553,58316],{"class":250},[91,58555,57941],{"class":97},[91,58557,2099],{"class":250},[91,58559,58560,58562,58564],{"class":93,"line":1777},[91,58561,58325],{"class":250},[91,58563,58328],{"class":97},[91,58565,264],{"class":250},[91,58567,58568],{"class":93,"line":1798},[91,58569,33542],{"class":250},[91,58571,58572,58574,58576],{"class":93,"line":1803},[91,58573,52498],{"class":250},[91,58575,51894],{"class":51381},[91,58577,51388],{"class":250},[91,58579,58580,58582,58584],{"class":93,"line":1817},[91,58581,51866],{"class":250},[91,58583,51881],{"class":51381},[91,58585,51388],{"class":250},[91,58587,58588],{"class":93,"line":1822},[91,58589,2523],{"emptyLinePlaceholder":175},[91,58591,58592,58594,58596],{"class":93,"line":1851},[91,58593,51866],{"class":250},[91,58595,50716],{"class":51381},[91,58597,51388],{"class":250},[21,58599,58600],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[82,58602,58604],{"className":50714,"code":58603,"language":50716,"meta":26,"style":26},"\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",[88,58605,58606,58616,58630,58634,58642,58656,58676,58688,58696,58700,58708,58720,58728,58738,58756,58772,58785,58793,58797,58805,58813,58817],{"__ignoreMap":26},[91,58607,58608,58610,58612,58614],{"class":93,"line":94},[91,58609,51378],{"class":250},[91,58611,51382],{"class":51381},[91,58613,51385],{"class":97},[91,58615,51388],{"class":250},[91,58617,58618,58620,58622,58624,58626,58628],{"class":93,"line":38},[91,58619,1159],{"class":250},[91,58621,50716],{"class":51381},[91,58623,51397],{"class":97},[91,58625,296],{"class":250},[91,58627,51402],{"class":101},[91,58629,51388],{"class":250},[91,58631,58632],{"class":93,"line":1304},[91,58633,2523],{"emptyLinePlaceholder":175},[91,58635,58636,58638,58640],{"class":93,"line":1319},[91,58637,1159],{"class":250},[91,58639,51415],{"class":51381},[91,58641,51388],{"class":250},[91,58643,58644,58646,58648,58650,58652,58654],{"class":93,"line":1325},[91,58645,52225],{"class":250},[91,58647,51425],{"class":51381},[91,58649,51428],{"class":97},[91,58651,296],{"class":250},[91,58653,51433],{"class":101},[91,58655,51388],{"class":250},[91,58657,58658,58660,58662,58664,58666,58668,58670,58672,58674],{"class":93,"line":1339},[91,58659,52225],{"class":250},[91,58661,51425],{"class":51381},[91,58663,15043],{"class":97},[91,58665,296],{"class":250},[91,58667,51472],{"class":101},[91,58669,51452],{"class":97},[91,58671,296],{"class":250},[91,58673,51479],{"class":101},[91,58675,51388],{"class":250},[91,58677,58678,58680,58682,58684,58686],{"class":93,"line":1345},[91,58679,52225],{"class":250},[91,58681,51488],{"class":51381},[91,58683,51491],{"class":250},[91,58685,51488],{"class":51381},[91,58687,51388],{"class":250},[91,58689,58690,58692,58694],{"class":93,"line":1436},[91,58691,51866],{"class":250},[91,58693,51415],{"class":51381},[91,58695,51388],{"class":250},[91,58697,58698],{"class":93,"line":1442},[91,58699,2523],{"emptyLinePlaceholder":175},[91,58701,58702,58704,58706],{"class":93,"line":1454},[91,58703,1159],{"class":250},[91,58705,51881],{"class":51381},[91,58707,51388],{"class":250},[91,58709,58710,58712,58714,58716,58718],{"class":93,"line":1736},[91,58711,52225],{"class":250},[91,58713,53968],{"class":51381},[91,58715,53974],{"class":250},[91,58717,53968],{"class":51381},[91,58719,51388],{"class":250},[91,58721,58722,58724,58726],{"class":93,"line":1741},[91,58723,52225],{"class":250},[91,58725,51894],{"class":51381},[91,58727,51388],{"class":250},[91,58729,58730,58732,58734,58736],{"class":93,"line":1747},[91,58731,11344],{"class":153},[91,58733,2363],{"class":105},[91,58735,13687],{"class":153},[91,58737,58509],{"class":105},[91,58739,58740,58742,58744,58746,58748,58750,58752,58754],{"class":93,"line":1752},[91,58741,11344],{"class":153},[91,58743,54472],{"class":105},[91,58745,13687],{"class":153},[91,58747,54477],{"class":250},[91,58749,54480],{"class":97},[91,58751,251],{"class":250},[91,58753,58285],{"class":101},[91,58755,257],{"class":250},[91,58757,58758,58760,58762,58764,58766,58768,58770],{"class":93,"line":1766},[91,58759,58292],{"class":250},[91,58761,57894],{"class":97},[91,58763,251],{"class":250},[91,58765,57899],{"class":101},[91,58767,12558],{"class":250},[91,58769,54530],{"class":153},[91,58771,54533],{"class":250},[91,58773,58774,58777,58779,58781,58783],{"class":93,"line":1771},[91,58775,58776],{"class":250},"      num ",[91,58778,296],{"class":153},[91,58780,58316],{"class":250},[91,58782,57941],{"class":97},[91,58784,2099],{"class":250},[91,58786,58787,58789,58791],{"class":93,"line":1777},[91,58788,58325],{"class":250},[91,58790,58328],{"class":97},[91,58792,264],{"class":250},[91,58794,58795],{"class":93,"line":1798},[91,58796,33542],{"class":250},[91,58798,58799,58801,58803],{"class":93,"line":1803},[91,58800,52498],{"class":250},[91,58802,51894],{"class":51381},[91,58804,51388],{"class":250},[91,58806,58807,58809,58811],{"class":93,"line":1817},[91,58808,51866],{"class":250},[91,58810,51881],{"class":51381},[91,58812,51388],{"class":250},[91,58814,58815],{"class":93,"line":1822},[91,58816,2523],{"emptyLinePlaceholder":175},[91,58818,58819,58821,58823],{"class":93,"line":1851},[91,58820,51866],{"class":250},[91,58822,50716],{"class":51381},[91,58824,51388],{"class":250},[21,58826,58827],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[217,58829,58831],{"id":58830},"_324-事件监听版本","3.2.4 事件监听版本",[21,58833,58834],{},[24,58835],{"alt":26,"src":58836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[21,58838,58839],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[21,58841,58842],{},"这种方式会覆盖前边的事件监听:",[82,58844,58846],{"className":50714,"code":58845,"language":50716,"meta":26,"style":26},"\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",[88,58847,58848,58858,58872,58876,58884,58898,58918,58930,58938,58942,58950,58962,58970,58988,59002,59013,59017,59029,59039,59043,59051,59059,59063],{"__ignoreMap":26},[91,58849,58850,58852,58854,58856],{"class":93,"line":94},[91,58851,51378],{"class":250},[91,58853,51382],{"class":51381},[91,58855,51385],{"class":97},[91,58857,51388],{"class":250},[91,58859,58860,58862,58864,58866,58868,58870],{"class":93,"line":38},[91,58861,1159],{"class":250},[91,58863,50716],{"class":51381},[91,58865,51397],{"class":97},[91,58867,296],{"class":250},[91,58869,51402],{"class":101},[91,58871,51388],{"class":250},[91,58873,58874],{"class":93,"line":1304},[91,58875,2523],{"emptyLinePlaceholder":175},[91,58877,58878,58880,58882],{"class":93,"line":1319},[91,58879,1159],{"class":250},[91,58881,51415],{"class":51381},[91,58883,51388],{"class":250},[91,58885,58886,58888,58890,58892,58894,58896],{"class":93,"line":1325},[91,58887,52225],{"class":250},[91,58889,51425],{"class":51381},[91,58891,51428],{"class":97},[91,58893,296],{"class":250},[91,58895,51433],{"class":101},[91,58897,51388],{"class":250},[91,58899,58900,58902,58904,58906,58908,58910,58912,58914,58916],{"class":93,"line":1339},[91,58901,52225],{"class":250},[91,58903,51425],{"class":51381},[91,58905,15043],{"class":97},[91,58907,296],{"class":250},[91,58909,51472],{"class":101},[91,58911,51452],{"class":97},[91,58913,296],{"class":250},[91,58915,51479],{"class":101},[91,58917,51388],{"class":250},[91,58919,58920,58922,58924,58926,58928],{"class":93,"line":1345},[91,58921,52225],{"class":250},[91,58923,51488],{"class":51381},[91,58925,51491],{"class":250},[91,58927,51488],{"class":51381},[91,58929,51388],{"class":250},[91,58931,58932,58934,58936],{"class":93,"line":1436},[91,58933,51866],{"class":250},[91,58935,51415],{"class":51381},[91,58937,51388],{"class":250},[91,58939,58940],{"class":93,"line":1442},[91,58941,2523],{"emptyLinePlaceholder":175},[91,58943,58944,58946,58948],{"class":93,"line":1454},[91,58945,1159],{"class":250},[91,58947,51881],{"class":51381},[91,58949,51388],{"class":250},[91,58951,58952,58954,58956,58958,58960],{"class":93,"line":1736},[91,58953,52225],{"class":250},[91,58955,53968],{"class":51381},[91,58957,53974],{"class":250},[91,58959,53968],{"class":51381},[91,58961,51388],{"class":250},[91,58963,58964,58966,58968],{"class":93,"line":1741},[91,58965,52225],{"class":250},[91,58967,51894],{"class":51381},[91,58969,51388],{"class":250},[91,58971,58972,58974,58976,58978,58980,58982,58984,58986],{"class":93,"line":1747},[91,58973,11344],{"class":153},[91,58975,54472],{"class":105},[91,58977,13687],{"class":153},[91,58979,54477],{"class":250},[91,58981,54480],{"class":97},[91,58983,251],{"class":250},[91,58985,58285],{"class":101},[91,58987,257],{"class":250},[91,58989,58990,58992,58995,58997,59000],{"class":93,"line":1752},[91,58991,58292],{"class":250},[91,58993,58994],{"class":97},"onclick",[91,58996,13687],{"class":153},[91,58998,58999],{"class":153}," function",[91,59001,54533],{"class":250},[91,59003,59004,59007,59009,59011],{"class":93,"line":1766},[91,59005,59006],{"class":97},"      alert",[91,59008,251],{"class":250},[91,59010,721],{"class":105},[91,59012,257],{"class":250},[91,59014,59015],{"class":93,"line":1771},[91,59016,2310],{"class":250},[91,59018,59019,59021,59023,59025,59027],{"class":93,"line":1777},[91,59020,58292],{"class":250},[91,59022,58994],{"class":97},[91,59024,13687],{"class":153},[91,59026,58999],{"class":153},[91,59028,54533],{"class":250},[91,59030,59031,59033,59035,59037],{"class":93,"line":1798},[91,59032,59006],{"class":97},[91,59034,251],{"class":250},[91,59036,999],{"class":105},[91,59038,257],{"class":250},[91,59040,59041],{"class":93,"line":1803},[91,59042,2310],{"class":250},[91,59044,59045,59047,59049],{"class":93,"line":1817},[91,59046,52498],{"class":250},[91,59048,51894],{"class":51381},[91,59050,51388],{"class":250},[91,59052,59053,59055,59057],{"class":93,"line":1822},[91,59054,51866],{"class":250},[91,59056,51881],{"class":51381},[91,59058,51388],{"class":250},[91,59060,59061],{"class":93,"line":1851},[91,59062,2523],{"emptyLinePlaceholder":175},[91,59064,59065,59067,59069],{"class":93,"line":1856},[91,59066,51866],{"class":250},[91,59068,50716],{"class":51381},[91,59070,51388],{"class":250},[21,59072,59073],{},"只要点击就输出结果为22,前边11被覆盖了",[82,59075,59077],{"className":50714,"code":59076,"language":50716,"meta":26,"style":26},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[88,59078,59079,59084,59089,59093,59098,59103],{"__ignoreMap":26},[91,59080,59081],{"class":93,"line":94},[91,59082,59083],{"class":250},"  btn.addEventListener('click', function () {\n",[91,59085,59086],{"class":93,"line":38},[91,59087,59088],{"class":250},"      alert(11)\n",[91,59090,59091],{"class":93,"line":1304},[91,59092,33542],{"class":250},[91,59094,59095],{"class":93,"line":1319},[91,59096,59097],{"class":250},"    btn.addEventListener('click', function () {\n",[91,59099,59100],{"class":93,"line":1325},[91,59101,59102],{"class":250},"      alert(22)\n",[91,59104,59105],{"class":93,"line":1339},[91,59106,33542],{"class":250},[21,59108,59109],{},"点击第一次输出11,第二次点击为22",[217,59111,59113],{"id":59112},"_325-事件类型","3.2.5 事件类型",[21,59115,59116],{},[24,59117],{"alt":26,"src":59118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22121,59120,59122],{"id":59121},"_3251-鼠标事件","3.2.5.1 鼠标事件",[21,59124,59125],{},"补充知识:",[21,59127,59128],{},"轮播图自动播放模块,可以使用",[21,59130,59131],{},"let timerId = setInterval(function () {",[21,59133,59134],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[21,59136,59137],{},"用js方法模拟进行点击事件,click必须加()",[21,59139,59140],{},"next.click()",[21,59142,59143],{},"}, 1000)",[21,59145,59146],{},[24,59147],{"alt":26,"src":59148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[82,59150,59152],{"className":53148,"code":59151,"language":53150,"meta":26,"style":26},"\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",[88,59153,59154,59158,59168,59182,59186,59194,59209,59229,59249,59262,59270,59275,59280,59284,59288,59293,59298,59303,59308,59312,59316,59321,59326,59331,59335,59339,59344,59348,59353,59358,59362,59366,59371,59376,59381,59386,59391,59395,59399,59404,59409,59414,59419,59424,59428,59432,59437,59442,59447,59452,59457,59462,59467,59472,59477,59482,59486,59490,59495,59500,59504,59508,59513,59518,59522,59527,59532,59536,59540,59545,59549,59554,59559,59563,59568,59572,59576,59581,59586,59591,59596,59601,59606,59611,59615,59619,59623,59628,59633,59638,59643,59647,59655,59663,59667,59675,59690,59704,59725,59733,59747,59760,59775,59794,59806,59818,59830,59842,59854,59866,59878,59886,59901,59925,59949,59957,59965,59973,59981,59986,59991,59996,60001,60006,60011,60016,60021,60026,60031,60035,60040,60045,60050,60055,60060,60065,60070,60075,60080,60084,60089,60094,60099,60104,60109,60114,60119,60124,60129,60134,60139,60144,60148,60152,60157,60162,60167,60171,60176,60181,60186,60191,60196,60200,60205,60209,60213,60217,60221,60225,60229,60234,60239,60244,60249,60254,60259,60264,60269,60274,60278,60282,60287,60292,60297,60302,60307,60311,60316,60321,60326,60331,60336,60341,60345,60349,60354,60358,60363,60367,60372,60377,60382,60387,60392,60397,60401,60409,60417,60421],{"__ignoreMap":26},[91,59155,59156],{"class":93,"line":94},[91,59157,2523],{"emptyLinePlaceholder":175},[91,59159,59160,59162,59164,59166],{"class":93,"line":38},[91,59161,51378],{"class":250},[91,59163,51382],{"class":153},[91,59165,51385],{"class":105},[91,59167,51388],{"class":250},[91,59169,59170,59172,59174,59176,59178,59180],{"class":93,"line":1304},[91,59171,1159],{"class":250},[91,59173,50716],{"class":51381},[91,59175,51397],{"class":97},[91,59177,296],{"class":250},[91,59179,51402],{"class":101},[91,59181,51388],{"class":250},[91,59183,59184],{"class":93,"line":1319},[91,59185,2523],{"emptyLinePlaceholder":175},[91,59187,59188,59190,59192],{"class":93,"line":1325},[91,59189,1159],{"class":250},[91,59191,51415],{"class":51381},[91,59193,51388],{"class":250},[91,59195,59196,59198,59200,59202,59204,59206],{"class":93,"line":1339},[91,59197,52225],{"class":250},[91,59199,51425],{"class":51381},[91,59201,51428],{"class":97},[91,59203,296],{"class":250},[91,59205,51433],{"class":101},[91,59207,59208],{"class":250}," \u002F>\n",[91,59210,59211,59213,59215,59217,59219,59221,59223,59225,59227],{"class":93,"line":1345},[91,59212,52225],{"class":250},[91,59214,51425],{"class":51381},[91,59216,51444],{"class":97},[91,59218,296],{"class":250},[91,59220,51449],{"class":101},[91,59222,51452],{"class":97},[91,59224,296],{"class":250},[91,59226,51457],{"class":101},[91,59228,59208],{"class":250},[91,59230,59231,59233,59235,59237,59239,59241,59243,59245,59247],{"class":93,"line":1436},[91,59232,52225],{"class":250},[91,59234,51425],{"class":51381},[91,59236,15043],{"class":97},[91,59238,296],{"class":250},[91,59240,51472],{"class":101},[91,59242,51452],{"class":97},[91,59244,296],{"class":250},[91,59246,51479],{"class":101},[91,59248,59208],{"class":250},[91,59250,59251,59253,59255,59258,59260],{"class":93,"line":1442},[91,59252,52225],{"class":250},[91,59254,51488],{"class":51381},[91,59256,59257],{"class":250},">轮播图点击切换\u003C\u002F",[91,59259,51488],{"class":51381},[91,59261,51388],{"class":250},[91,59263,59264,59266,59268],{"class":93,"line":1454},[91,59265,52225],{"class":250},[91,59267,168],{"class":51381},[91,59269,51388],{"class":250},[91,59271,59272],{"class":93,"line":1736},[91,59273,59274],{"class":250},"    * {\n",[91,59276,59277],{"class":93,"line":1741},[91,59278,59279],{"class":250},"      box-sizing: border-box;\n",[91,59281,59282],{"class":93,"line":1747},[91,59283,2310],{"class":250},[91,59285,59286],{"class":93,"line":1752},[91,59287,2523],{"emptyLinePlaceholder":175},[91,59289,59290],{"class":93,"line":1766},[91,59291,59292],{"class":250},"    .slider {\n",[91,59294,59295],{"class":93,"line":1771},[91,59296,59297],{"class":250},"      width: 560px;\n",[91,59299,59300],{"class":93,"line":1777},[91,59301,59302],{"class":250},"      height: 400px;\n",[91,59304,59305],{"class":93,"line":1798},[91,59306,59307],{"class":250},"      overflow: hidden;\n",[91,59309,59310],{"class":93,"line":1803},[91,59311,2310],{"class":250},[91,59313,59314],{"class":93,"line":1817},[91,59315,2523],{"emptyLinePlaceholder":175},[91,59317,59318],{"class":93,"line":1822},[91,59319,59320],{"class":250},"    .slider-wrapper {\n",[91,59322,59323],{"class":93,"line":1851},[91,59324,59325],{"class":250},"      width: 100%;\n",[91,59327,59328],{"class":93,"line":1856},[91,59329,59330],{"class":250},"      height: 320px;\n",[91,59332,59333],{"class":93,"line":1873},[91,59334,2310],{"class":250},[91,59336,59337],{"class":93,"line":1878},[91,59338,2523],{"emptyLinePlaceholder":175},[91,59340,59341],{"class":93,"line":1883},[91,59342,59343],{"class":250},"    .slider-wrapper img {\n",[91,59345,59346],{"class":93,"line":1888},[91,59347,59325],{"class":250},[91,59349,59350],{"class":93,"line":1902},[91,59351,59352],{"class":250},"      height: 100%;\n",[91,59354,59355],{"class":93,"line":1907},[91,59356,59357],{"class":250},"      display: block;\n",[91,59359,59360],{"class":93,"line":2700},[91,59361,2310],{"class":250},[91,59363,59364],{"class":93,"line":2714},[91,59365,2523],{"emptyLinePlaceholder":175},[91,59367,59368],{"class":93,"line":2722},[91,59369,59370],{"class":250},"    .slider-footer {\n",[91,59372,59373],{"class":93,"line":2727},[91,59374,59375],{"class":250},"      height: 80px;\n",[91,59377,59378],{"class":93,"line":2733},[91,59379,59380],{"class":250},"      background-color: rgb(100, 67, 68);\n",[91,59382,59383],{"class":93,"line":2739},[91,59384,59385],{"class":250},"      padding: 12px 12px 0 12px;\n",[91,59387,59388],{"class":93,"line":2744},[91,59389,59390],{"class":250},"      position: relative;\n",[91,59392,59393],{"class":93,"line":8071},[91,59394,2310],{"class":250},[91,59396,59397],{"class":93,"line":8095},[91,59398,2523],{"emptyLinePlaceholder":175},[91,59400,59401],{"class":93,"line":8100},[91,59402,59403],{"class":250},"    .slider-footer .toggle {\n",[91,59405,59406],{"class":93,"line":8106},[91,59407,59408],{"class":250},"      position: absolute;\n",[91,59410,59411],{"class":93,"line":8133},[91,59412,59413],{"class":250},"      right: 0;\n",[91,59415,59416],{"class":93,"line":8138},[91,59417,59418],{"class":250},"      top: 12px;\n",[91,59420,59421],{"class":93,"line":8144},[91,59422,59423],{"class":250},"      display: flex;\n",[91,59425,59426],{"class":93,"line":8156},[91,59427,2310],{"class":250},[91,59429,59430],{"class":93,"line":8168},[91,59431,2523],{"emptyLinePlaceholder":175},[91,59433,59434],{"class":93,"line":8180},[91,59435,59436],{"class":250},"    .slider-footer .toggle button {\n",[91,59438,59439],{"class":93,"line":9839},[91,59440,59441],{"class":250},"      margin-right: 12px;\n",[91,59443,59444],{"class":93,"line":9864},[91,59445,59446],{"class":250},"      width: 28px;\n",[91,59448,59449],{"class":93,"line":9887},[91,59450,59451],{"class":250},"      height: 28px;\n",[91,59453,59454],{"class":93,"line":9911},[91,59455,59456],{"class":250},"      appearance: none;\n",[91,59458,59459],{"class":93,"line":9916},[91,59460,59461],{"class":250},"      border: none;\n",[91,59463,59464],{"class":93,"line":9921},[91,59465,59466],{"class":250},"      background: rgba(255, 255, 255, 0.1);\n",[91,59468,59469],{"class":93,"line":9926},[91,59470,59471],{"class":250},"      color: #fff;\n",[91,59473,59474],{"class":93,"line":9935},[91,59475,59476],{"class":250},"      border-radius: 4px;\n",[91,59478,59479],{"class":93,"line":9940},[91,59480,59481],{"class":250},"      cursor: pointer;\n",[91,59483,59484],{"class":93,"line":9946},[91,59485,2310],{"class":250},[91,59487,59488],{"class":93,"line":9967},[91,59489,2523],{"emptyLinePlaceholder":175},[91,59491,59492],{"class":93,"line":9973},[91,59493,59494],{"class":250},"    .slider-footer .toggle button:hover {\n",[91,59496,59497],{"class":93,"line":9987},[91,59498,59499],{"class":250},"      background: rgba(255, 255, 255, 0.2);\n",[91,59501,59502],{"class":93,"line":9993},[91,59503,2310],{"class":250},[91,59505,59506],{"class":93,"line":10020},[91,59507,2523],{"emptyLinePlaceholder":175},[91,59509,59510],{"class":93,"line":10029},[91,59511,59512],{"class":250},"    .slider-footer p {\n",[91,59514,59515],{"class":93,"line":10035},[91,59516,59517],{"class":250},"      margin: 0;\n",[91,59519,59520],{"class":93,"line":10043},[91,59521,59471],{"class":250},[91,59523,59524],{"class":93,"line":10048},[91,59525,59526],{"class":250},"      font-size: 18px;\n",[91,59528,59529],{"class":93,"line":16727},[91,59530,59531],{"class":250},"      margin-bottom: 10px;\n",[91,59533,59534],{"class":93,"line":16733},[91,59535,2310],{"class":250},[91,59537,59538],{"class":93,"line":16756},[91,59539,2523],{"emptyLinePlaceholder":175},[91,59541,59542],{"class":93,"line":16762},[91,59543,59544],{"class":250},"    .slider-indicator {\n",[91,59546,59547],{"class":93,"line":16785},[91,59548,59517],{"class":250},[91,59550,59551],{"class":93,"line":16799},[91,59552,59553],{"class":250},"      padding: 0;\n",[91,59555,59556],{"class":93,"line":16819},[91,59557,59558],{"class":250},"      list-style: none;\n",[91,59560,59561],{"class":93,"line":16825},[91,59562,59423],{"class":250},[91,59564,59565],{"class":93,"line":16836},[91,59566,59567],{"class":250},"      align-items: center;\n",[91,59569,59570],{"class":93,"line":16859},[91,59571,2310],{"class":250},[91,59573,59574],{"class":93,"line":16881},[91,59575,2523],{"emptyLinePlaceholder":175},[91,59577,59578],{"class":93,"line":16886},[91,59579,59580],{"class":250},"    .slider-indicator li {\n",[91,59582,59583],{"class":93,"line":16892},[91,59584,59585],{"class":250},"      width: 8px;\n",[91,59587,59588],{"class":93,"line":16906},[91,59589,59590],{"class":250},"      height: 8px;\n",[91,59592,59593],{"class":93,"line":16919},[91,59594,59595],{"class":250},"      margin: 4px;\n",[91,59597,59598],{"class":93,"line":16924},[91,59599,59600],{"class":250},"      border-radius: 50%;\n",[91,59602,59603],{"class":93,"line":16938},[91,59604,59605],{"class":250},"      background: #fff;\n",[91,59607,59608],{"class":93,"line":16943},[91,59609,59610],{"class":250},"      opacity: 0.4;\n",[91,59612,59613],{"class":93,"line":16949},[91,59614,59481],{"class":250},[91,59616,59617],{"class":93,"line":16954},[91,59618,2310],{"class":250},[91,59620,59621],{"class":93,"line":16968},[91,59622,2523],{"emptyLinePlaceholder":175},[91,59624,59625],{"class":93,"line":16973},[91,59626,59627],{"class":250},"    .slider-indicator li.active {\n",[91,59629,59630],{"class":93,"line":16978},[91,59631,59632],{"class":250},"      width: 12px;\n",[91,59634,59635],{"class":93,"line":16992},[91,59636,59637],{"class":250},"      height: 12px;\n",[91,59639,59640],{"class":93,"line":17004},[91,59641,59642],{"class":250},"      opacity: 1;\n",[91,59644,59645],{"class":93,"line":17009},[91,59646,2310],{"class":250},[91,59648,59649,59651,59653],{"class":93,"line":17022},[91,59650,52498],{"class":250},[91,59652,168],{"class":51381},[91,59654,51388],{"class":250},[91,59656,59657,59659,59661],{"class":93,"line":17027},[91,59658,51866],{"class":250},[91,59660,51415],{"class":51381},[91,59662,51388],{"class":250},[91,59664,59665],{"class":93,"line":17032},[91,59666,2523],{"emptyLinePlaceholder":175},[91,59668,59669,59671,59673],{"class":93,"line":17037},[91,59670,1159],{"class":250},[91,59672,51881],{"class":51381},[91,59674,51388],{"class":250},[91,59676,59677,59679,59681,59683,59685,59688],{"class":93,"line":17050},[91,59678,52225],{"class":250},[91,59680,51692],{"class":51381},[91,59682,53567],{"class":97},[91,59684,296],{"class":250},[91,59686,59687],{"class":101},"\"slider\"",[91,59689,51388],{"class":250},[91,59691,59692,59694,59696,59698,59700,59702],{"class":93,"line":17055},[91,59693,51422],{"class":250},[91,59695,51692],{"class":51381},[91,59697,53567],{"class":97},[91,59699,296],{"class":250},[91,59701,55308],{"class":101},[91,59703,51388],{"class":250},[91,59705,59706,59708,59710,59712,59714,59717,59719,59721,59723],{"class":93,"line":32714},[91,59707,55315],{"class":250},[91,59709,24],{"class":51381},[91,59711,55320],{"class":97},[91,59713,296],{"class":250},[91,59715,59716],{"class":101},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[91,59718,55328],{"class":97},[91,59720,296],{"class":250},[91,59722,7775],{"class":101},[91,59724,59208],{"class":250},[91,59726,59727,59729,59731],{"class":93,"line":32720},[91,59728,51857],{"class":250},[91,59730,51692],{"class":51381},[91,59732,51388],{"class":250},[91,59734,59735,59737,59739,59741,59743,59745],{"class":93,"line":32726},[91,59736,51422],{"class":250},[91,59738,51692],{"class":51381},[91,59740,53567],{"class":97},[91,59742,296],{"class":250},[91,59744,55355],{"class":101},[91,59746,51388],{"class":250},[91,59748,59749,59751,59753,59756,59758],{"class":93,"line":32732},[91,59750,55315],{"class":250},[91,59752,21],{"class":51381},[91,59754,59755],{"class":250},">对人类来说会不会太超前了？\u003C\u002F",[91,59757,21],{"class":51381},[91,59759,51388],{"class":250},[91,59761,59762,59764,59766,59768,59770,59773],{"class":93,"line":32738},[91,59763,55315],{"class":250},[91,59765,1256],{"class":51381},[91,59767,53567],{"class":97},[91,59769,296],{"class":250},[91,59771,59772],{"class":101},"\"slider-indicator\"",[91,59774,51388],{"class":250},[91,59776,59777,59779,59781,59783,59785,59788,59790,59792],{"class":93,"line":32749},[91,59778,55383],{"class":250},[91,59780,17],{"class":51381},[91,59782,53567],{"class":97},[91,59784,296],{"class":250},[91,59786,59787],{"class":101},"\"active\"",[91,59789,55395],{"class":250},[91,59791,17],{"class":51381},[91,59793,51388],{"class":250},[91,59795,59796,59798,59800,59802,59804],{"class":93,"line":32755},[91,59797,55383],{"class":250},[91,59799,17],{"class":51381},[91,59801,55395],{"class":250},[91,59803,17],{"class":51381},[91,59805,51388],{"class":250},[91,59807,59808,59810,59812,59814,59816],{"class":93,"line":32775},[91,59809,55383],{"class":250},[91,59811,17],{"class":51381},[91,59813,55395],{"class":250},[91,59815,17],{"class":51381},[91,59817,51388],{"class":250},[91,59819,59820,59822,59824,59826,59828],{"class":93,"line":32781},[91,59821,55383],{"class":250},[91,59823,17],{"class":51381},[91,59825,55395],{"class":250},[91,59827,17],{"class":51381},[91,59829,51388],{"class":250},[91,59831,59832,59834,59836,59838,59840],{"class":93,"line":32792},[91,59833,55383],{"class":250},[91,59835,17],{"class":51381},[91,59837,55395],{"class":250},[91,59839,17],{"class":51381},[91,59841,51388],{"class":250},[91,59843,59844,59846,59848,59850,59852],{"class":93,"line":32798},[91,59845,55383],{"class":250},[91,59847,17],{"class":51381},[91,59849,55395],{"class":250},[91,59851,17],{"class":51381},[91,59853,51388],{"class":250},[91,59855,59856,59858,59860,59862,59864],{"class":93,"line":32804},[91,59857,55383],{"class":250},[91,59859,17],{"class":51381},[91,59861,55395],{"class":250},[91,59863,17],{"class":51381},[91,59865,51388],{"class":250},[91,59867,59868,59870,59872,59874,59876],{"class":93,"line":32810},[91,59869,55383],{"class":250},[91,59871,17],{"class":51381},[91,59873,55395],{"class":250},[91,59875,17],{"class":51381},[91,59877,51388],{"class":250},[91,59879,59880,59882,59884],{"class":93,"line":32816},[91,59881,55488],{"class":250},[91,59883,1256],{"class":51381},[91,59885,51388],{"class":250},[91,59887,59888,59890,59892,59894,59896,59899],{"class":93,"line":32822},[91,59889,55315],{"class":250},[91,59891,51692],{"class":51381},[91,59893,53567],{"class":97},[91,59895,296],{"class":250},[91,59897,59898],{"class":101},"\"toggle\"",[91,59900,51388],{"class":250},[91,59902,59903,59905,59907,59909,59911,59914,59916,59919,59921,59923],{"class":93,"line":32828},[91,59904,55383],{"class":250},[91,59906,53968],{"class":51381},[91,59908,53567],{"class":97},[91,59910,296],{"class":250},[91,59912,59913],{"class":101},"\"prev\"",[91,59915,1209],{"class":250},[91,59917,59918],{"class":105},"&lt;",[91,59920,51866],{"class":250},[91,59922,53968],{"class":51381},[91,59924,51388],{"class":250},[91,59926,59927,59929,59931,59933,59935,59938,59940,59943,59945,59947],{"class":93,"line":32834},[91,59928,55383],{"class":250},[91,59930,53968],{"class":51381},[91,59932,53567],{"class":97},[91,59934,296],{"class":250},[91,59936,59937],{"class":101},"\"next\"",[91,59939,1209],{"class":250},[91,59941,59942],{"class":105},"&gt;",[91,59944,51866],{"class":250},[91,59946,53968],{"class":51381},[91,59948,51388],{"class":250},[91,59950,59951,59953,59955],{"class":93,"line":32854},[91,59952,55488],{"class":250},[91,59954,51692],{"class":51381},[91,59956,51388],{"class":250},[91,59958,59959,59961,59963],{"class":93,"line":32860},[91,59960,51857],{"class":250},[91,59962,51692],{"class":51381},[91,59964,51388],{"class":250},[91,59966,59967,59969,59971],{"class":93,"line":32876},[91,59968,52498],{"class":250},[91,59970,51692],{"class":51381},[91,59972,51388],{"class":250},[91,59974,59975,59977,59979],{"class":93,"line":32882},[91,59976,52225],{"class":250},[91,59978,51894],{"class":51381},[91,59980,51388],{"class":250},[91,59982,59983],{"class":93,"line":32896},[91,59984,59985],{"class":250},"    \u002F\u002F 1. 初始数据\n",[91,59987,59988],{"class":93,"line":32902},[91,59989,59990],{"class":250},"    const data = [\n",[91,59992,59993],{"class":93,"line":32917},[91,59994,59995],{"class":250},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[91,59997,59998],{"class":93,"line":32923},[91,59999,60000],{"class":250},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[91,60002,60003],{"class":93,"line":32932},[91,60004,60005],{"class":250},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[91,60007,60008],{"class":93,"line":32938},[91,60009,60010],{"class":250},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[91,60012,60013],{"class":93,"line":32947},[91,60014,60015],{"class":250},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[91,60017,60018],{"class":93,"line":32953},[91,60019,60020],{"class":250},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[91,60022,60023],{"class":93,"line":32959},[91,60024,60025],{"class":250},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[91,60027,60028],{"class":93,"line":32968},[91,60029,60030],{"class":250},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[91,60032,60033],{"class":93,"line":32974},[91,60034,53190],{"class":250},[91,60036,60037],{"class":93,"line":32985},[91,60038,60039],{"class":250},"    \u002F\u002F 获取元素\n",[91,60041,60042],{"class":93,"line":32991},[91,60043,60044],{"class":250},"    const img = document.querySelector('.slider-wrapper img')\n",[91,60046,60047],{"class":93,"line":33010},[91,60048,60049],{"class":250},"    const p = document.querySelector('.slider-footer p')\n",[91,60051,60052],{"class":93,"line":33016},[91,60053,60054],{"class":250},"    const footer = document.querySelector('.slider-footer')\n",[91,60056,60057],{"class":93,"line":33027},[91,60058,60059],{"class":250},"    \u002F\u002F 1. 右按钮业务\n",[91,60061,60062],{"class":93,"line":33033},[91,60063,60064],{"class":250},"    \u002F\u002F 1.1 获取右侧按钮 \n",[91,60066,60067],{"class":93,"line":33053},[91,60068,60069],{"class":250},"    const next = document.querySelector('.next')\n",[91,60071,60072],{"class":93,"line":33069},[91,60073,60074],{"class":250},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[91,60076,60077],{"class":93,"line":33075},[91,60078,60079],{"class":250},"    \u002F\u002F 1.2 注册点击事件\n",[91,60081,60082],{"class":93,"line":33089},[91,60083,2523],{"emptyLinePlaceholder":175},[91,60085,60086],{"class":93,"line":33095},[91,60087,60088],{"class":250},"    next.addEventListener('click', function () {\n",[91,60090,60091],{"class":93,"line":33101},[91,60092,60093],{"class":250},"      \u002F\u002F console.log(11)\n",[91,60095,60096],{"class":93,"line":33112},[91,60097,60098],{"class":250},"      i++\n",[91,60100,60101],{"class":93,"line":33118},[91,60102,60103],{"class":250},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[91,60105,60106],{"class":93,"line":33124},[91,60107,60108],{"class":250},"      \u002F\u002F if (i >= 8) {\n",[91,60110,60111],{"class":93,"line":33134},[91,60112,60113],{"class":250},"      \u002F\u002F   i = 0\n",[91,60115,60116],{"class":93,"line":33140},[91,60117,60118],{"class":250},"      \u002F\u002F }\n",[91,60120,60121],{"class":93,"line":33151},[91,60122,60123],{"class":250},"      i = i >= data.length ? 0 : i\n",[91,60125,60126],{"class":93,"line":33157},[91,60127,60128],{"class":250},"      \u002F\u002F 1.3 得到对应的对象\n",[91,60130,60131],{"class":93,"line":33167},[91,60132,60133],{"class":250},"      \u002F\u002F console.log(data[i])\n",[91,60135,60136],{"class":93,"line":33172},[91,60137,60138],{"class":250},"      \u002F\u002F 调用函数\n",[91,60140,60141],{"class":93,"line":33178},[91,60142,60143],{"class":250},"      toggle()\n",[91,60145,60146],{"class":93,"line":33227},[91,60147,33542],{"class":250},[91,60149,60150],{"class":93,"line":33274},[91,60151,2523],{"emptyLinePlaceholder":175},[91,60153,60154],{"class":93,"line":33279},[91,60155,60156],{"class":250},"    \u002F\u002F 2. 左侧按钮业务\n",[91,60158,60159],{"class":93,"line":33285},[91,60160,60161],{"class":250},"    \u002F\u002F 2.1 获取左侧按钮 \n",[91,60163,60164],{"class":93,"line":33304},[91,60165,60166],{"class":250},"    const prev = document.querySelector('.prev')\n",[91,60168,60169],{"class":93,"line":33310},[91,60170,60079],{"class":250},[91,60172,60173],{"class":93,"line":33330},[91,60174,60175],{"class":250},"    prev.addEventListener('click', function () {\n",[91,60177,60178],{"class":93,"line":33336},[91,60179,60180],{"class":250},"      i--\n",[91,60182,60183],{"class":93,"line":33342},[91,60184,60185],{"class":250},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[91,60187,60188],{"class":93,"line":33352},[91,60189,60190],{"class":250},"      \u002F\u002F if (i \u003C 0) {\n",[91,60192,60193],{"class":93,"line":33357},[91,60194,60195],{"class":250},"      \u002F\u002F   i = 7\n",[91,60197,60198],{"class":93,"line":33363},[91,60199,60118],{"class":250},[91,60201,60202],{"class":93,"line":33379},[91,60203,60204],{"class":250},"      i = i \u003C 0 ? data.length - 1 : i\n",[91,60206,60207],{"class":93,"line":33424},[91,60208,60128],{"class":250},[91,60210,60211],{"class":93,"line":33430},[91,60212,60133],{"class":250},[91,60214,60215],{"class":93,"line":33436},[91,60216,60138],{"class":250},[91,60218,60219],{"class":93,"line":33442},[91,60220,60143],{"class":250},[91,60222,60223],{"class":93,"line":33453},[91,60224,33542],{"class":250},[91,60226,60227],{"class":93,"line":33459},[91,60228,2523],{"emptyLinePlaceholder":175},[91,60230,60231],{"class":93,"line":33465},[91,60232,60233],{"class":250},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[91,60235,60236],{"class":93,"line":33471},[91,60237,60238],{"class":250},"    function toggle() {\n",[91,60240,60241],{"class":93,"line":33489},[91,60242,60243],{"class":250},"      \u002F\u002F 1.4 渲染对应的数据\n",[91,60245,60246],{"class":93,"line":33503},[91,60247,60248],{"class":250},"      img.src = data[i].url\n",[91,60250,60251],{"class":93,"line":33512},[91,60252,60253],{"class":250},"      p.innerHTML = data[i].title\n",[91,60255,60256],{"class":93,"line":33521},[91,60257,60258],{"class":250},"      footer.style.backgroundColor = data[i].color\n",[91,60260,60261],{"class":93,"line":33530},[91,60262,60263],{"class":250},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[91,60265,60266],{"class":93,"line":33539},[91,60267,60268],{"class":250},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[91,60270,60271],{"class":93,"line":33545},[91,60272,60273],{"class":250},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[91,60275,60276],{"class":93,"line":33551},[91,60277,2310],{"class":250},[91,60279,60280],{"class":93,"line":33559},[91,60281,2523],{"emptyLinePlaceholder":175},[91,60283,60284],{"class":93,"line":33564},[91,60285,60286],{"class":250},"    \u002F\u002F 3. 自动播放模块\n",[91,60288,60289],{"class":93,"line":33570},[91,60290,60291],{"class":250},"    let timerId = setInterval(function () {\n",[91,60293,60294],{"class":93,"line":33581},[91,60295,60296],{"class":250},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[91,60298,60299],{"class":93,"line":33587},[91,60300,60301],{"class":250},"      next.click()\n",[91,60303,60304],{"class":93,"line":33607},[91,60305,60306],{"class":250},"    }, 1000)\n",[91,60308,60309],{"class":93,"line":33613},[91,60310,2523],{"emptyLinePlaceholder":175},[91,60312,60313],{"class":93,"line":33619},[91,60314,60315],{"class":250},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[91,60317,60318],{"class":93,"line":33625},[91,60319,60320],{"class":250},"    const slider = document.querySelector('.slider')\n",[91,60322,60323],{"class":93,"line":33642},[91,60324,60325],{"class":250},"    \u002F\u002F 注册事件\n",[91,60327,60328],{"class":93,"line":33648},[91,60329,60330],{"class":250},"    slider.addEventListener('mouseenter', function () {\n",[91,60332,60333],{"class":93,"line":33654},[91,60334,60335],{"class":250},"      \u002F\u002F 停止定时器\n",[91,60337,60338],{"class":93,"line":33660},[91,60339,60340],{"class":250},"      clearInterval(timerId)\n",[91,60342,60343],{"class":93,"line":33666},[91,60344,33542],{"class":250},[91,60346,60347],{"class":93,"line":33672},[91,60348,2523],{"emptyLinePlaceholder":175},[91,60350,60351],{"class":93,"line":33699},[91,60352,60353],{"class":250},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[91,60355,60356],{"class":93,"line":33723},[91,60357,60325],{"class":250},[91,60359,60360],{"class":93,"line":33729},[91,60361,60362],{"class":250},"    slider.addEventListener('mouseleave', function () {\n",[91,60364,60365],{"class":93,"line":33735},[91,60366,60335],{"class":250},[91,60368,60369],{"class":93,"line":33741},[91,60370,60371],{"class":250},"      if (timerId) clearInterval(timerId)\n",[91,60373,60374],{"class":93,"line":33752},[91,60375,60376],{"class":250},"      \u002F\u002F 开启定时器\n",[91,60378,60379],{"class":93,"line":33763},[91,60380,60381],{"class":250},"      timerId = setInterval(function () {\n",[91,60383,60384],{"class":93,"line":33769},[91,60385,60386],{"class":250},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[91,60388,60389],{"class":93,"line":33786},[91,60390,60391],{"class":250},"        next.click()\n",[91,60393,60394],{"class":93,"line":33809},[91,60395,60396],{"class":250},"      }, 1000)\n",[91,60398,60399],{"class":93,"line":33832},[91,60400,33542],{"class":250},[91,60402,60403,60405,60407],{"class":93,"line":33838},[91,60404,52498],{"class":250},[91,60406,51894],{"class":51381},[91,60408,51388],{"class":250},[91,60410,60411,60413,60415],{"class":93,"line":33843},[91,60412,51866],{"class":250},[91,60414,51881],{"class":51381},[91,60416,51388],{"class":250},[91,60418,60419],{"class":93,"line":33852},[91,60420,2523],{"emptyLinePlaceholder":175},[91,60422,60423,60425,60427],{"class":93,"line":33862},[91,60424,51866],{"class":250},[91,60426,50716],{"class":51381},[91,60428,51388],{"class":250},[22121,60430,60432],{"id":60431},"_3252-焦点事件","3.2.5.2 焦点事件",[21,60434,60435],{},"小米搜索框案例：",[82,60437,60439],{"className":50714,"code":60438,"language":50716,"meta":26,"style":26},"\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",[88,60440,60441,60451,60465,60469,60477,60491,60511,60531,60543,60551,60557,60567,60577,60589,60593,60597,60604,60608,60619,60623,60627,60634,60645,60658,60672,60676,60680,60689,60701,60713,60727,60740,60753,60771,60782,60786,60790,60799,60816,60820,60824,60831,60841,60851,60862,60875,60887,60903,60914,60926,60930,60934,60942,60953,60970,60982,60994,61005,61009,61013,61024,61035,61039,61047,61051,61059,61063,61071,61086,61109,61124,61155,61182,61209,61236,61263,61290,61317,61326,61334,61342,61347,61367,61387,61392,61397,61415,61420,61430,61435,61449,61454,61459,61476,61485,61497,61501,61509,61517,61521],{"__ignoreMap":26},[91,60442,60443,60445,60447,60449],{"class":93,"line":94},[91,60444,51378],{"class":250},[91,60446,51382],{"class":51381},[91,60448,51385],{"class":97},[91,60450,51388],{"class":250},[91,60452,60453,60455,60457,60459,60461,60463],{"class":93,"line":38},[91,60454,1159],{"class":250},[91,60456,50716],{"class":51381},[91,60458,51397],{"class":97},[91,60460,296],{"class":250},[91,60462,51402],{"class":101},[91,60464,51388],{"class":250},[91,60466,60467],{"class":93,"line":1304},[91,60468,2523],{"emptyLinePlaceholder":175},[91,60470,60471,60473,60475],{"class":93,"line":1319},[91,60472,1159],{"class":250},[91,60474,51415],{"class":51381},[91,60476,51388],{"class":250},[91,60478,60479,60481,60483,60485,60487,60489],{"class":93,"line":1325},[91,60480,51422],{"class":250},[91,60482,51425],{"class":51381},[91,60484,51428],{"class":97},[91,60486,296],{"class":250},[91,60488,51433],{"class":101},[91,60490,51388],{"class":250},[91,60492,60493,60495,60497,60499,60501,60503,60505,60507,60509],{"class":93,"line":1339},[91,60494,51422],{"class":250},[91,60496,51425],{"class":51381},[91,60498,51444],{"class":97},[91,60500,296],{"class":250},[91,60502,51449],{"class":101},[91,60504,51452],{"class":97},[91,60506,296],{"class":250},[91,60508,51457],{"class":101},[91,60510,51388],{"class":250},[91,60512,60513,60515,60517,60519,60521,60523,60525,60527,60529],{"class":93,"line":1345},[91,60514,51422],{"class":250},[91,60516,51425],{"class":51381},[91,60518,15043],{"class":97},[91,60520,296],{"class":250},[91,60522,51472],{"class":101},[91,60524,51452],{"class":97},[91,60526,296],{"class":250},[91,60528,51479],{"class":101},[91,60530,51388],{"class":250},[91,60532,60533,60535,60537,60539,60541],{"class":93,"line":1436},[91,60534,51422],{"class":250},[91,60536,51488],{"class":51381},[91,60538,51491],{"class":250},[91,60540,51488],{"class":51381},[91,60542,51388],{"class":250},[91,60544,60545,60547,60549],{"class":93,"line":1442},[91,60546,51422],{"class":250},[91,60548,168],{"class":51381},[91,60550,51388],{"class":250},[91,60552,60553,60555],{"class":93,"line":1454},[91,60554,51508],{"class":51381},[91,60556,15695],{"class":250},[91,60558,60559,60561,60563,60565],{"class":93,"line":1736},[91,60560,51515],{"class":105},[91,60562,51518],{"class":250},[91,60564,440],{"class":105},[91,60566,1415],{"class":250},[91,60568,60569,60571,60573,60575],{"class":93,"line":1741},[91,60570,51527],{"class":105},[91,60572,51518],{"class":250},[91,60574,440],{"class":105},[91,60576,1415],{"class":250},[91,60578,60579,60582,60584,60587],{"class":93,"line":1747},[91,60580,60581],{"class":105},"            box-sizing",[91,60583,51518],{"class":250},[91,60585,60586],{"class":105},"border-box",[91,60588,1415],{"class":250},[91,60590,60591],{"class":93,"line":1752},[91,60592,2652],{"class":250},[91,60594,60595],{"class":93,"line":1766},[91,60596,2523],{"emptyLinePlaceholder":175},[91,60598,60599,60602],{"class":93,"line":1771},[91,60600,60601],{"class":51381},"        ul",[91,60603,15695],{"class":250},[91,60605,60606],{"class":93,"line":1777},[91,60607,2523],{"emptyLinePlaceholder":175},[91,60609,60610,60613,60615,60617],{"class":93,"line":1798},[91,60611,60612],{"class":105},"            list-style",[91,60614,51518],{"class":250},[91,60616,54818],{"class":105},[91,60618,1415],{"class":250},[91,60620,60621],{"class":93,"line":1803},[91,60622,2652],{"class":250},[91,60624,60625],{"class":93,"line":1817},[91,60626,2523],{"emptyLinePlaceholder":175},[91,60628,60629,60632],{"class":93,"line":1822},[91,60630,60631],{"class":97},"        .mi",[91,60633,15695],{"class":250},[91,60635,60636,60639,60641,60643],{"class":93,"line":1851},[91,60637,60638],{"class":105},"            position",[91,60640,51518],{"class":250},[91,60642,54845],{"class":105},[91,60644,1415],{"class":250},[91,60646,60647,60649,60651,60654,60656],{"class":93,"line":1856},[91,60648,51565],{"class":105},[91,60650,51518],{"class":250},[91,60652,60653],{"class":105},"223",[91,60655,51573],{"class":153},[91,60657,1415],{"class":250},[91,60659,60660,60662,60664,60666,60668,60670],{"class":93,"line":1873},[91,60661,51515],{"class":105},[91,60663,51518],{"class":250},[91,60665,560],{"class":105},[91,60667,51573],{"class":153},[91,60669,51637],{"class":105},[91,60671,1415],{"class":250},[91,60673,60674],{"class":93,"line":1878},[91,60675,2652],{"class":250},[91,60677,60678],{"class":93,"line":1883},[91,60679,2523],{"emptyLinePlaceholder":175},[91,60681,60682,60684,60687],{"class":93,"line":1888},[91,60683,60631],{"class":97},[91,60685,60686],{"class":51381}," input",[91,60688,15695],{"class":250},[91,60690,60691,60693,60695,60697,60699],{"class":93,"line":1902},[91,60692,51565],{"class":105},[91,60694,51518],{"class":250},[91,60696,60653],{"class":105},[91,60698,51573],{"class":153},[91,60700,1415],{"class":250},[91,60702,60703,60705,60707,60709,60711],{"class":93,"line":1907},[91,60704,51580],{"class":105},[91,60706,51518],{"class":250},[91,60708,856],{"class":105},[91,60710,51573],{"class":153},[91,60712,1415],{"class":250},[91,60714,60715,60717,60719,60721,60723,60725],{"class":93,"line":2700},[91,60716,51527],{"class":105},[91,60718,51518],{"class":250},[91,60720,440],{"class":105},[91,60722,2161],{"class":105},[91,60724,51573],{"class":153},[91,60726,1415],{"class":250},[91,60728,60729,60732,60734,60736,60738],{"class":93,"line":2714},[91,60730,60731],{"class":105},"            font-size",[91,60733,51518],{"class":250},[91,60735,798],{"class":105},[91,60737,51573],{"class":153},[91,60739,1415],{"class":250},[91,60741,60742,60745,60747,60749,60751],{"class":93,"line":2722},[91,60743,60744],{"class":105},"            line-height",[91,60746,51518],{"class":250},[91,60748,856],{"class":105},[91,60750,51573],{"class":153},[91,60752,1415],{"class":250},[91,60754,60755,60758,60760,60762,60764,60766,60769],{"class":93,"line":2727},[91,60756,60757],{"class":105},"            border",[91,60759,51518],{"class":250},[91,60761,466],{"class":105},[91,60763,51573],{"class":153},[91,60765,51602],{"class":105},[91,60767,60768],{"class":105}," #e0e0e0",[91,60770,1415],{"class":250},[91,60772,60773,60776,60778,60780],{"class":93,"line":2733},[91,60774,60775],{"class":105},"            outline",[91,60777,51518],{"class":250},[91,60779,54818],{"class":105},[91,60781,1415],{"class":250},[91,60783,60784],{"class":93,"line":2739},[91,60785,2652],{"class":250},[91,60787,60788],{"class":93,"line":2744},[91,60789,2523],{"emptyLinePlaceholder":175},[91,60791,60792,60794,60797],{"class":93,"line":8071},[91,60793,60631],{"class":97},[91,60795,60796],{"class":97}," .search",[91,60798,15695],{"class":250},[91,60800,60801,60803,60805,60807,60809,60811,60814],{"class":93,"line":8095},[91,60802,60757],{"class":105},[91,60804,51518],{"class":250},[91,60806,466],{"class":105},[91,60808,51573],{"class":153},[91,60810,51602],{"class":105},[91,60812,60813],{"class":105}," #ff6700",[91,60815,1415],{"class":250},[91,60817,60818],{"class":93,"line":8100},[91,60819,2652],{"class":250},[91,60821,60822],{"class":93,"line":8106},[91,60823,2523],{"emptyLinePlaceholder":175},[91,60825,60826,60829],{"class":93,"line":8133},[91,60827,60828],{"class":97},"        .result-list",[91,60830,15695],{"class":250},[91,60832,60833,60835,60837,60839],{"class":93,"line":8138},[91,60834,51553],{"class":105},[91,60836,51518],{"class":250},[91,60838,54818],{"class":105},[91,60840,1415],{"class":250},[91,60842,60843,60845,60847,60849],{"class":93,"line":8144},[91,60844,60638],{"class":105},[91,60846,51518],{"class":250},[91,60848,54912],{"class":105},[91,60850,1415],{"class":250},[91,60852,60853,60856,60858,60860],{"class":93,"line":8156},[91,60854,60855],{"class":105},"            left",[91,60857,51518],{"class":250},[91,60859,440],{"class":105},[91,60861,1415],{"class":250},[91,60863,60864,60867,60869,60871,60873],{"class":93,"line":8168},[91,60865,60866],{"class":105},"            top",[91,60868,51518],{"class":250},[91,60870,856],{"class":105},[91,60872,51573],{"class":153},[91,60874,1415],{"class":250},[91,60876,60877,60879,60881,60883,60885],{"class":93,"line":8180},[91,60878,51565],{"class":105},[91,60880,51518],{"class":250},[91,60882,60653],{"class":105},[91,60884,51573],{"class":153},[91,60886,1415],{"class":250},[91,60888,60889,60891,60893,60895,60897,60899,60901],{"class":93,"line":9839},[91,60890,60757],{"class":105},[91,60892,51518],{"class":250},[91,60894,466],{"class":105},[91,60896,51573],{"class":153},[91,60898,51602],{"class":105},[91,60900,60813],{"class":105},[91,60902,1415],{"class":250},[91,60904,60905,60908,60910,60912],{"class":93,"line":9864},[91,60906,60907],{"class":105},"            border-top",[91,60909,51518],{"class":250},[91,60911,440],{"class":105},[91,60913,1415],{"class":250},[91,60915,60916,60919,60921,60924],{"class":93,"line":9887},[91,60917,60918],{"class":105},"            background",[91,60920,51518],{"class":250},[91,60922,60923],{"class":105},"#fff",[91,60925,1415],{"class":250},[91,60927,60928],{"class":93,"line":9911},[91,60929,2652],{"class":250},[91,60931,60932],{"class":93,"line":9916},[91,60933,2523],{"emptyLinePlaceholder":175},[91,60935,60936,60938,60940],{"class":93,"line":9921},[91,60937,60828],{"class":97},[91,60939,1523],{"class":51381},[91,60941,15695],{"class":250},[91,60943,60944,60946,60948,60951],{"class":93,"line":9926},[91,60945,51553],{"class":105},[91,60947,51518],{"class":250},[91,60949,60950],{"class":105},"block",[91,60952,1415],{"class":250},[91,60954,60955,60957,60959,60961,60963,60966,60968],{"class":93,"line":9935},[91,60956,51527],{"class":105},[91,60958,51518],{"class":250},[91,60960,593],{"class":105},[91,60962,51573],{"class":153},[91,60964,60965],{"class":105}," 15",[91,60967,51573],{"class":153},[91,60969,1415],{"class":250},[91,60971,60972,60974,60976,60978,60980],{"class":93,"line":9940},[91,60973,60731],{"class":105},[91,60975,51518],{"class":250},[91,60977,747],{"class":105},[91,60979,51573],{"class":153},[91,60981,1415],{"class":250},[91,60983,60984,60987,60989,60992],{"class":93,"line":9946},[91,60985,60986],{"class":105},"            color",[91,60988,51518],{"class":250},[91,60990,60991],{"class":105},"#424242",[91,60993,1415],{"class":250},[91,60995,60996,60999,61001,61003],{"class":93,"line":9967},[91,60997,60998],{"class":105},"            text-decoration",[91,61000,51518],{"class":250},[91,61002,54818],{"class":105},[91,61004,1415],{"class":250},[91,61006,61007],{"class":93,"line":9973},[91,61008,2652],{"class":250},[91,61010,61011],{"class":93,"line":9987},[91,61012,2523],{"emptyLinePlaceholder":175},[91,61014,61015,61017,61019,61022],{"class":93,"line":9993},[91,61016,60828],{"class":97},[91,61018,1523],{"class":51381},[91,61020,61021],{"class":97},":hover",[91,61023,15695],{"class":250},[91,61025,61026,61028,61030,61033],{"class":93,"line":10020},[91,61027,51721],{"class":105},[91,61029,51518],{"class":250},[91,61031,61032],{"class":105},"#eee",[91,61034,1415],{"class":250},[91,61036,61037],{"class":93,"line":10029},[91,61038,2652],{"class":250},[91,61040,61041,61043,61045],{"class":93,"line":10035},[91,61042,51857],{"class":250},[91,61044,168],{"class":51381},[91,61046,51388],{"class":250},[91,61048,61049],{"class":93,"line":10043},[91,61050,2523],{"emptyLinePlaceholder":175},[91,61052,61053,61055,61057],{"class":93,"line":10048},[91,61054,51866],{"class":250},[91,61056,51415],{"class":51381},[91,61058,51388],{"class":250},[91,61060,61061],{"class":93,"line":16727},[91,61062,2523],{"emptyLinePlaceholder":175},[91,61064,61065,61067,61069],{"class":93,"line":16733},[91,61066,1159],{"class":250},[91,61068,51881],{"class":51381},[91,61070,51388],{"class":250},[91,61072,61073,61075,61077,61079,61081,61084],{"class":93,"line":16756},[91,61074,51422],{"class":250},[91,61076,51692],{"class":51381},[91,61078,53567],{"class":97},[91,61080,296],{"class":250},[91,61082,61083],{"class":101},"\"mi\"",[91,61085,51388],{"class":250},[91,61087,61088,61090,61092,61094,61096,61099,61102,61104,61107],{"class":93,"line":16762},[91,61089,55383],{"class":250},[91,61091,53902],{"class":51381},[91,61093,53905],{"class":97},[91,61095,296],{"class":250},[91,61097,61098],{"class":101},"\"search\"",[91,61100,61101],{"class":97}," placeholder",[91,61103,296],{"class":250},[91,61105,61106],{"class":101},"\"小米笔记本\"",[91,61108,51388],{"class":250},[91,61110,61111,61113,61115,61117,61119,61122],{"class":93,"line":16785},[91,61112,55383],{"class":250},[91,61114,1256],{"class":51381},[91,61116,53567],{"class":97},[91,61118,296],{"class":250},[91,61120,61121],{"class":101},"\"result-list\"",[91,61123,51388],{"class":250},[91,61125,61126,61129,61131,61134,61136,61139,61141,61144,61147,61149,61151,61153],{"class":93,"line":16799},[91,61127,61128],{"class":250},"            \u003C",[91,61130,17],{"class":51381},[91,61132,61133],{"class":250},">\u003C",[91,61135,487],{"class":51381},[91,61137,61138],{"class":97}," href",[91,61140,296],{"class":250},[91,61142,61143],{"class":101},"\"#\"",[91,61145,61146],{"class":250},">全部商品\u003C\u002F",[91,61148,487],{"class":51381},[91,61150,55395],{"class":250},[91,61152,17],{"class":51381},[91,61154,51388],{"class":250},[91,61156,61157,61159,61161,61163,61165,61167,61169,61171,61174,61176,61178,61180],{"class":93,"line":16819},[91,61158,61128],{"class":250},[91,61160,17],{"class":51381},[91,61162,61133],{"class":250},[91,61164,487],{"class":51381},[91,61166,61138],{"class":97},[91,61168,296],{"class":250},[91,61170,61143],{"class":101},[91,61172,61173],{"class":250},">小米11\u003C\u002F",[91,61175,487],{"class":51381},[91,61177,55395],{"class":250},[91,61179,17],{"class":51381},[91,61181,51388],{"class":250},[91,61183,61184,61186,61188,61190,61192,61194,61196,61198,61201,61203,61205,61207],{"class":93,"line":16825},[91,61185,61128],{"class":250},[91,61187,17],{"class":51381},[91,61189,61133],{"class":250},[91,61191,487],{"class":51381},[91,61193,61138],{"class":97},[91,61195,296],{"class":250},[91,61197,61143],{"class":101},[91,61199,61200],{"class":250},">小米10S\u003C\u002F",[91,61202,487],{"class":51381},[91,61204,55395],{"class":250},[91,61206,17],{"class":51381},[91,61208,51388],{"class":250},[91,61210,61211,61213,61215,61217,61219,61221,61223,61225,61228,61230,61232,61234],{"class":93,"line":16836},[91,61212,61128],{"class":250},[91,61214,17],{"class":51381},[91,61216,61133],{"class":250},[91,61218,487],{"class":51381},[91,61220,61138],{"class":97},[91,61222,296],{"class":250},[91,61224,61143],{"class":101},[91,61226,61227],{"class":250},">小米笔记本\u003C\u002F",[91,61229,487],{"class":51381},[91,61231,55395],{"class":250},[91,61233,17],{"class":51381},[91,61235,51388],{"class":250},[91,61237,61238,61240,61242,61244,61246,61248,61250,61252,61255,61257,61259,61261],{"class":93,"line":16859},[91,61239,61128],{"class":250},[91,61241,17],{"class":51381},[91,61243,61133],{"class":250},[91,61245,487],{"class":51381},[91,61247,61138],{"class":97},[91,61249,296],{"class":250},[91,61251,61143],{"class":101},[91,61253,61254],{"class":250},">小米手机\u003C\u002F",[91,61256,487],{"class":51381},[91,61258,55395],{"class":250},[91,61260,17],{"class":51381},[91,61262,51388],{"class":250},[91,61264,61265,61267,61269,61271,61273,61275,61277,61279,61282,61284,61286,61288],{"class":93,"line":16881},[91,61266,61128],{"class":250},[91,61268,17],{"class":51381},[91,61270,61133],{"class":250},[91,61272,487],{"class":51381},[91,61274,61138],{"class":97},[91,61276,296],{"class":250},[91,61278,61143],{"class":101},[91,61280,61281],{"class":250},">黑鲨4\u003C\u002F",[91,61283,487],{"class":51381},[91,61285,55395],{"class":250},[91,61287,17],{"class":51381},[91,61289,51388],{"class":250},[91,61291,61292,61294,61296,61298,61300,61302,61304,61306,61309,61311,61313,61315],{"class":93,"line":16886},[91,61293,61128],{"class":250},[91,61295,17],{"class":51381},[91,61297,61133],{"class":250},[91,61299,487],{"class":51381},[91,61301,61138],{"class":97},[91,61303,296],{"class":250},[91,61305,61143],{"class":101},[91,61307,61308],{"class":250},">空调\u003C\u002F",[91,61310,487],{"class":51381},[91,61312,55395],{"class":250},[91,61314,17],{"class":51381},[91,61316,51388],{"class":250},[91,61318,61319,61322,61324],{"class":93,"line":16892},[91,61320,61321],{"class":250},"        \u003C\u002F",[91,61323,1256],{"class":51381},[91,61325,51388],{"class":250},[91,61327,61328,61330,61332],{"class":93,"line":16906},[91,61329,51857],{"class":250},[91,61331,51692],{"class":51381},[91,61333,51388],{"class":250},[91,61335,61336,61338,61340],{"class":93,"line":16919},[91,61337,51422],{"class":250},[91,61339,51894],{"class":51381},[91,61341,51388],{"class":250},[91,61343,61344],{"class":93,"line":16924},[91,61345,61346],{"class":308},"        \u002F\u002F 1. 获取元素\n",[91,61348,61349,61352,61354,61356,61358,61360,61362,61365],{"class":93,"line":16938},[91,61350,61351],{"class":153},"        const",[91,61353,60686],{"class":105},[91,61355,13687],{"class":153},[91,61357,54477],{"class":250},[91,61359,54480],{"class":97},[91,61361,251],{"class":250},[91,61363,61364],{"class":101},"'[type=search]'",[91,61366,257],{"class":250},[91,61368,61369,61371,61374,61376,61378,61380,61382,61385],{"class":93,"line":16943},[91,61370,61351],{"class":153},[91,61372,61373],{"class":105}," ul",[91,61375,13687],{"class":153},[91,61377,54477],{"class":250},[91,61379,54480],{"class":97},[91,61381,251],{"class":250},[91,61383,61384],{"class":101},"'.result-list'",[91,61386,257],{"class":250},[91,61388,61389],{"class":93,"line":16949},[91,61390,61391],{"class":308},"        \u002F\u002F console.log(input)\n",[91,61393,61394],{"class":93,"line":16954},[91,61395,61396],{"class":308},"        \u002F\u002F 2. 监听事件 获得焦点\n",[91,61398,61399,61402,61404,61406,61409,61411,61413],{"class":93,"line":16968},[91,61400,61401],{"class":250},"        input.",[91,61403,57894],{"class":97},[91,61405,251],{"class":250},[91,61407,61408],{"class":101},"'focus'",[91,61410,12558],{"class":250},[91,61412,54530],{"class":153},[91,61414,54533],{"class":250},[91,61416,61417],{"class":93,"line":16973},[91,61418,61419],{"class":308},"            \u002F\u002F ul显示\n",[91,61421,61422,61425,61427],{"class":93,"line":16978},[91,61423,61424],{"class":250},"            ul.style.display ",[91,61426,296],{"class":153},[91,61428,61429],{"class":101}," 'block'\n",[91,61431,61432],{"class":93,"line":16992},[91,61433,61434],{"class":308},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[91,61436,61437,61440,61442,61444,61447],{"class":93,"line":17004},[91,61438,61439],{"class":250},"            input.classList.",[91,61441,5457],{"class":97},[91,61443,251],{"class":250},[91,61445,61446],{"class":101},"'search'",[91,61448,257],{"class":250},[91,61450,61451],{"class":93,"line":17009},[91,61452,61453],{"class":250},"        })\n",[91,61455,61456],{"class":93,"line":17022},[91,61457,61458],{"class":308},"        \u002F\u002F 3. 监听事件 失去焦点\n",[91,61460,61461,61463,61465,61467,61470,61472,61474],{"class":93,"line":17027},[91,61462,61401],{"class":250},[91,61464,57894],{"class":97},[91,61466,251],{"class":250},[91,61468,61469],{"class":101},"'blur'",[91,61471,12558],{"class":250},[91,61473,54530],{"class":153},[91,61475,54533],{"class":250},[91,61477,61478,61480,61482],{"class":93,"line":17032},[91,61479,61424],{"class":250},[91,61481,296],{"class":153},[91,61483,61484],{"class":101}," 'none'\n",[91,61486,61487,61489,61491,61493,61495],{"class":93,"line":17037},[91,61488,61439],{"class":250},[91,61490,57087],{"class":97},[91,61492,251],{"class":250},[91,61494,61446],{"class":101},[91,61496,257],{"class":250},[91,61498,61499],{"class":93,"line":17050},[91,61500,61453],{"class":250},[91,61502,61503,61505,61507],{"class":93,"line":17055},[91,61504,51857],{"class":250},[91,61506,51894],{"class":51381},[91,61508,51388],{"class":250},[91,61510,61511,61513,61515],{"class":93,"line":32714},[91,61512,51866],{"class":250},[91,61514,51881],{"class":51381},[91,61516,51388],{"class":250},[91,61518,61519],{"class":93,"line":32720},[91,61520,2523],{"emptyLinePlaceholder":175},[91,61522,61523,61525,61527],{"class":93,"line":32726},[91,61524,51866],{"class":250},[91,61526,50716],{"class":51381},[91,61528,51388],{"class":250},[22121,61530,61532],{"id":61531},"_3253-键盘事件","3.2.5.3 键盘事件",[21,61534,61535],{},"评论字数统计案例",[21,61537,61538],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[21,61540,61541],{},"牢记focus伪类选择器",[51425,61543],{"charSet":61544},"UTF-8",[51425,61546],{"name":61547,"content":61548},"viewport","width=device-width, initial-scale=1.0",[51488,61550,61551],{},"Document",[168,61553,61554],{},"\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",[53902,61556],{"type":5310},[1256,61558,61559,61562],{},[17,61560,61561],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[17,61563,61564],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[82,61566,61568],{"className":50714,"code":61567,"language":50716,"meta":26,"style":26},"\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",[88,61569,61570,61580,61594,61598,61606,61620,61640,61660,61673,61681,61688,61701,61715,61725,61735,61739,61743,61750,61762,61774,61786,61798,61827,61840,61844,61848,61857,61868,61880,61891,61902,61914,61925,61937,61953,61965,61969,61973,61984,61995,62005,62017,62021,62025,62033,62044,62054,62065,62077,62090,62102,62114,62118,62122,62131,62143,62154,62167,62178,62192,62196,62200,62207,62219,62231,62241,62245,62249,62258,62270,62280,62284,62288,62299,62309,62328,62341,62345,62349,62359,62369,62373,62377,62388,62399,62411,62423,62427,62431,62442,62453,62467,62471,62475,62486,62496,62508,62512,62520,62528,62532,62540,62555,62574,62614,62627,62635,62649,62669,62677,62692,62715,62733,62748,62768,62788,62808,62816,62824,62832,62840,62860,62880,62885,62902,62911,62915,62920,62936,62944,62948,62953,62970,62975,63000,63004,63008,63013,63018,63026,63034,63038],{"__ignoreMap":26},[91,61571,61572,61574,61576,61578],{"class":93,"line":94},[91,61573,51378],{"class":250},[91,61575,51382],{"class":51381},[91,61577,51385],{"class":97},[91,61579,51388],{"class":250},[91,61581,61582,61584,61586,61588,61590,61592],{"class":93,"line":38},[91,61583,1159],{"class":250},[91,61585,50716],{"class":51381},[91,61587,51397],{"class":97},[91,61589,296],{"class":250},[91,61591,51402],{"class":101},[91,61593,51388],{"class":250},[91,61595,61596],{"class":93,"line":1304},[91,61597,2523],{"emptyLinePlaceholder":175},[91,61599,61600,61602,61604],{"class":93,"line":1319},[91,61601,1159],{"class":250},[91,61603,51415],{"class":51381},[91,61605,51388],{"class":250},[91,61607,61608,61610,61612,61614,61616,61618],{"class":93,"line":1325},[91,61609,52225],{"class":250},[91,61611,51425],{"class":51381},[91,61613,51428],{"class":97},[91,61615,296],{"class":250},[91,61617,51433],{"class":101},[91,61619,51388],{"class":250},[91,61621,61622,61624,61626,61628,61630,61632,61634,61636,61638],{"class":93,"line":1339},[91,61623,52225],{"class":250},[91,61625,51425],{"class":51381},[91,61627,51444],{"class":97},[91,61629,296],{"class":250},[91,61631,51449],{"class":101},[91,61633,51452],{"class":97},[91,61635,296],{"class":250},[91,61637,51457],{"class":101},[91,61639,51388],{"class":250},[91,61641,61642,61644,61646,61648,61650,61652,61654,61656,61658],{"class":93,"line":1345},[91,61643,52225],{"class":250},[91,61645,51425],{"class":51381},[91,61647,15043],{"class":97},[91,61649,296],{"class":250},[91,61651,51472],{"class":101},[91,61653,51452],{"class":97},[91,61655,296],{"class":250},[91,61657,51479],{"class":101},[91,61659,51388],{"class":250},[91,61661,61662,61664,61666,61669,61671],{"class":93,"line":1436},[91,61663,52225],{"class":250},[91,61665,51488],{"class":51381},[91,61667,61668],{"class":250},">评论回车发布\u003C\u002F",[91,61670,51488],{"class":51381},[91,61672,51388],{"class":250},[91,61674,61675,61677,61679],{"class":93,"line":1442},[91,61676,52225],{"class":250},[91,61678,168],{"class":51381},[91,61680,51388],{"class":250},[91,61682,61683,61686],{"class":93,"line":1454},[91,61684,61685],{"class":97},"    .wrapper",[91,61687,15695],{"class":250},[91,61689,61690,61693,61695,61697,61699],{"class":93,"line":1736},[91,61691,61692],{"class":105},"      min-width",[91,61694,51518],{"class":250},[91,61696,4110],{"class":105},[91,61698,51573],{"class":153},[91,61700,1415],{"class":250},[91,61702,61703,61706,61708,61711,61713],{"class":93,"line":1741},[91,61704,61705],{"class":105},"      max-width",[91,61707,51518],{"class":250},[91,61709,61710],{"class":105},"800",[91,61712,51573],{"class":153},[91,61714,1415],{"class":250},[91,61716,61717,61719,61721,61723],{"class":93,"line":1747},[91,61718,55090],{"class":105},[91,61720,51518],{"class":250},[91,61722,51558],{"class":105},[91,61724,1415],{"class":250},[91,61726,61727,61729,61731,61733],{"class":93,"line":1752},[91,61728,55101],{"class":105},[91,61730,51518],{"class":250},[91,61732,51661],{"class":105},[91,61734,1415],{"class":250},[91,61736,61737],{"class":93,"line":1766},[91,61738,2310],{"class":250},[91,61740,61741],{"class":93,"line":1771},[91,61742,2523],{"emptyLinePlaceholder":175},[91,61744,61745,61748],{"class":93,"line":1777},[91,61746,61747],{"class":97},"    .avatar",[91,61749,15695],{"class":250},[91,61751,61752,61754,61756,61758,61760],{"class":93,"line":1798},[91,61753,54852],{"class":105},[91,61755,51518],{"class":250},[91,61757,856],{"class":105},[91,61759,51573],{"class":153},[91,61761,1415],{"class":250},[91,61763,61764,61766,61768,61770,61772],{"class":93,"line":1803},[91,61765,54866],{"class":105},[91,61767,51518],{"class":250},[91,61769,856],{"class":105},[91,61771,51573],{"class":153},[91,61773,1415],{"class":250},[91,61775,61776,61778,61780,61782,61784],{"class":93,"line":1817},[91,61777,55215],{"class":105},[91,61779,51518],{"class":250},[91,61781,905],{"class":105},[91,61783,577],{"class":153},[91,61785,1415],{"class":250},[91,61787,61788,61791,61793,61796],{"class":93,"line":1822},[91,61789,61790],{"class":105},"      overflow",[91,61792,51518],{"class":250},[91,61794,61795],{"class":105},"hidden",[91,61797,1415],{"class":250},[91,61799,61800,61803,61805,61808,61810,61813,61815,61818,61820,61822,61825],{"class":93,"line":1851},[91,61801,61802],{"class":105},"      background",[91,61804,51518],{"class":250},[91,61806,61807],{"class":105},"url",[91,61809,251],{"class":250},[91,61811,61812],{"class":5339},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[91,61814,13837],{"class":250},[91,61816,61817],{"class":105},"no-repeat",[91,61819,17267],{"class":105},[91,61821,25101],{"class":250},[91,61823,61824],{"class":105},"cover",[91,61826,1415],{"class":250},[91,61828,61829,61832,61834,61836,61838],{"class":93,"line":1856},[91,61830,61831],{"class":105},"      margin-right",[91,61833,51518],{"class":250},[91,61835,949],{"class":105},[91,61837,51573],{"class":153},[91,61839,1415],{"class":250},[91,61841,61842],{"class":93,"line":1873},[91,61843,2310],{"class":250},[91,61845,61846],{"class":93,"line":1878},[91,61847,2523],{"emptyLinePlaceholder":175},[91,61849,61850,61852,61855],{"class":93,"line":1883},[91,61851,61685],{"class":97},[91,61853,61854],{"class":51381}," textarea",[91,61856,15695],{"class":250},[91,61858,61859,61862,61864,61866],{"class":93,"line":1888},[91,61860,61861],{"class":105},"      outline",[91,61863,51518],{"class":250},[91,61865,54818],{"class":105},[91,61867,1415],{"class":250},[91,61869,61870,61873,61875,61878],{"class":93,"line":1902},[91,61871,61872],{"class":105},"      border-color",[91,61874,51518],{"class":250},[91,61876,61877],{"class":105},"transparent",[91,61879,1415],{"class":250},[91,61881,61882,61885,61887,61889],{"class":93,"line":1907},[91,61883,61884],{"class":105},"      resize",[91,61886,51518],{"class":250},[91,61888,54818],{"class":105},[91,61890,1415],{"class":250},[91,61892,61893,61895,61897,61900],{"class":93,"line":2700},[91,61894,61802],{"class":105},[91,61896,51518],{"class":250},[91,61898,61899],{"class":105},"#f5f5f5",[91,61901,1415],{"class":250},[91,61903,61904,61906,61908,61910,61912],{"class":93,"line":2714},[91,61905,55215],{"class":105},[91,61907,51518],{"class":250},[91,61909,542],{"class":105},[91,61911,51573],{"class":153},[91,61913,1415],{"class":250},[91,61915,61916,61919,61921,61923],{"class":93,"line":2722},[91,61917,61918],{"class":105},"      flex",[91,61920,51518],{"class":250},[91,61922,466],{"class":105},[91,61924,1415],{"class":250},[91,61926,61927,61929,61931,61933,61935],{"class":93,"line":2727},[91,61928,54776],{"class":105},[91,61930,51518],{"class":250},[91,61932,695],{"class":105},[91,61934,51573],{"class":153},[91,61936,1415],{"class":250},[91,61938,61939,61942,61944,61946,61949,61951],{"class":93,"line":2733},[91,61940,61941],{"class":105},"      transition",[91,61943,51518],{"class":250},[91,61945,28240],{"class":105},[91,61947,61948],{"class":105}," 0.5",[91,61950,944],{"class":153},[91,61952,1415],{"class":250},[91,61954,61955,61957,61959,61961,61963],{"class":93,"line":2739},[91,61956,54866],{"class":105},[91,61958,51518],{"class":250},[91,61960,1200],{"class":105},[91,61962,51573],{"class":153},[91,61964,1415],{"class":250},[91,61966,61967],{"class":93,"line":2744},[91,61968,2310],{"class":250},[91,61970,61971],{"class":93,"line":8071},[91,61972,2523],{"emptyLinePlaceholder":175},[91,61974,61975,61977,61979,61982],{"class":93,"line":8095},[91,61976,61685],{"class":97},[91,61978,61854],{"class":51381},[91,61980,61981],{"class":97},":focus",[91,61983,15695],{"class":250},[91,61985,61986,61988,61990,61993],{"class":93,"line":8100},[91,61987,61872],{"class":105},[91,61989,51518],{"class":250},[91,61991,61992],{"class":105},"#e4e4e4",[91,61994,1415],{"class":250},[91,61996,61997,61999,62001,62003],{"class":93,"line":8106},[91,61998,61802],{"class":105},[91,62000,51518],{"class":250},[91,62002,60923],{"class":105},[91,62004,1415],{"class":250},[91,62006,62007,62009,62011,62013,62015],{"class":93,"line":8133},[91,62008,54866],{"class":105},[91,62010,51518],{"class":250},[91,62012,905],{"class":105},[91,62014,51573],{"class":153},[91,62016,1415],{"class":250},[91,62018,62019],{"class":93,"line":8138},[91,62020,2310],{"class":250},[91,62022,62023],{"class":93,"line":8144},[91,62024,2523],{"emptyLinePlaceholder":175},[91,62026,62027,62029,62031],{"class":93,"line":8156},[91,62028,61685],{"class":97},[91,62030,57548],{"class":51381},[91,62032,15695],{"class":250},[91,62034,62035,62037,62039,62042],{"class":93,"line":8168},[91,62036,61802],{"class":105},[91,62038,51518],{"class":250},[91,62040,62041],{"class":105},"#00aeec",[91,62043,1415],{"class":250},[91,62045,62046,62048,62050,62052],{"class":93,"line":8180},[91,62047,57497],{"class":105},[91,62049,51518],{"class":250},[91,62051,60923],{"class":105},[91,62053,1415],{"class":250},[91,62055,62056,62059,62061,62063],{"class":93,"line":9839},[91,62057,62058],{"class":105},"      border",[91,62060,51518],{"class":250},[91,62062,54818],{"class":105},[91,62064,1415],{"class":250},[91,62066,62067,62069,62071,62073,62075],{"class":93,"line":9864},[91,62068,55215],{"class":105},[91,62070,51518],{"class":250},[91,62072,542],{"class":105},[91,62074,51573],{"class":153},[91,62076,1415],{"class":250},[91,62078,62079,62082,62084,62086,62088],{"class":93,"line":9887},[91,62080,62081],{"class":105},"      margin-left",[91,62083,51518],{"class":250},[91,62085,695],{"class":105},[91,62087,51573],{"class":153},[91,62089,1415],{"class":250},[91,62091,62092,62094,62096,62098,62100],{"class":93,"line":9911},[91,62093,54852],{"class":105},[91,62095,51518],{"class":250},[91,62097,605],{"class":105},[91,62099,51573],{"class":153},[91,62101,1415],{"class":250},[91,62103,62104,62107,62109,62112],{"class":93,"line":9916},[91,62105,62106],{"class":105},"      cursor",[91,62108,51518],{"class":250},[91,62110,62111],{"class":105},"pointer",[91,62113,1415],{"class":250},[91,62115,62116],{"class":93,"line":9921},[91,62117,2310],{"class":250},[91,62119,62120],{"class":93,"line":9926},[91,62121,2523],{"emptyLinePlaceholder":175},[91,62123,62124,62126,62129],{"class":93,"line":9935},[91,62125,61685],{"class":97},[91,62127,62128],{"class":97}," .total",[91,62130,15695],{"class":250},[91,62132,62133,62135,62137,62139,62141],{"class":93,"line":9940},[91,62134,61831],{"class":105},[91,62136,51518],{"class":250},[91,62138,861],{"class":105},[91,62140,51573],{"class":153},[91,62142,1415],{"class":250},[91,62144,62145,62147,62149,62152],{"class":93,"line":9946},[91,62146,57497],{"class":105},[91,62148,51518],{"class":250},[91,62150,62151],{"class":105},"#999",[91,62153,1415],{"class":250},[91,62155,62156,62159,62161,62163,62165],{"class":93,"line":9967},[91,62157,62158],{"class":105},"      margin-top",[91,62160,51518],{"class":250},[91,62162,568],{"class":105},[91,62164,51573],{"class":153},[91,62166,1415],{"class":250},[91,62168,62169,62172,62174,62176],{"class":93,"line":9973},[91,62170,62171],{"class":105},"      opacity",[91,62173,51518],{"class":250},[91,62175,440],{"class":105},[91,62177,1415],{"class":250},[91,62179,62180,62182,62184,62186,62188,62190],{"class":93,"line":9987},[91,62181,61941],{"class":105},[91,62183,51518],{"class":250},[91,62185,28240],{"class":105},[91,62187,61948],{"class":105},[91,62189,944],{"class":153},[91,62191,1415],{"class":250},[91,62193,62194],{"class":93,"line":9993},[91,62195,2310],{"class":250},[91,62197,62198],{"class":93,"line":10020},[91,62199,2523],{"emptyLinePlaceholder":175},[91,62201,62202,62205],{"class":93,"line":10029},[91,62203,62204],{"class":97},"    .list",[91,62206,15695],{"class":250},[91,62208,62209,62211,62213,62215,62217],{"class":93,"line":10035},[91,62210,61692],{"class":105},[91,62212,51518],{"class":250},[91,62214,4110],{"class":105},[91,62216,51573],{"class":153},[91,62218,1415],{"class":250},[91,62220,62221,62223,62225,62227,62229],{"class":93,"line":10043},[91,62222,61705],{"class":105},[91,62224,51518],{"class":250},[91,62226,61710],{"class":105},[91,62228,51573],{"class":153},[91,62230,1415],{"class":250},[91,62232,62233,62235,62237,62239],{"class":93,"line":10048},[91,62234,55090],{"class":105},[91,62236,51518],{"class":250},[91,62238,51558],{"class":105},[91,62240,1415],{"class":250},[91,62242,62243],{"class":93,"line":16727},[91,62244,2310],{"class":250},[91,62246,62247],{"class":93,"line":16733},[91,62248,2523],{"emptyLinePlaceholder":175},[91,62250,62251,62253,62256],{"class":93,"line":16756},[91,62252,62204],{"class":97},[91,62254,62255],{"class":97}," .item",[91,62257,15695],{"class":250},[91,62259,62260,62262,62264,62266,62268],{"class":93,"line":16762},[91,62261,54852],{"class":105},[91,62263,51518],{"class":250},[91,62265,560],{"class":105},[91,62267,577],{"class":153},[91,62269,1415],{"class":250},[91,62271,62272,62274,62276,62278],{"class":93,"line":16785},[91,62273,55090],{"class":105},[91,62275,51518],{"class":250},[91,62277,51558],{"class":105},[91,62279,1415],{"class":250},[91,62281,62282],{"class":93,"line":16799},[91,62283,2310],{"class":250},[91,62285,62286],{"class":93,"line":16819},[91,62287,2523],{"emptyLinePlaceholder":175},[91,62289,62290,62292,62294,62297],{"class":93,"line":16825},[91,62291,62204],{"class":97},[91,62293,62255],{"class":97},[91,62295,62296],{"class":97}," .info",[91,62298,15695],{"class":250},[91,62300,62301,62303,62305,62307],{"class":93,"line":16836},[91,62302,61918],{"class":105},[91,62304,51518],{"class":250},[91,62306,466],{"class":105},[91,62308,1415],{"class":250},[91,62310,62311,62314,62316,62318,62320,62323,62326],{"class":93,"line":16859},[91,62312,62313],{"class":105},"      border-bottom",[91,62315,51518],{"class":250},[91,62317,466],{"class":105},[91,62319,51573],{"class":153},[91,62321,62322],{"class":105}," dashed",[91,62324,62325],{"class":105}," #e4e4e4",[91,62327,1415],{"class":250},[91,62329,62330,62333,62335,62337,62339],{"class":93,"line":16881},[91,62331,62332],{"class":105},"      padding-bottom",[91,62334,51518],{"class":250},[91,62336,695],{"class":105},[91,62338,51573],{"class":153},[91,62340,1415],{"class":250},[91,62342,62343],{"class":93,"line":16886},[91,62344,2310],{"class":250},[91,62346,62347],{"class":93,"line":16892},[91,62348,2523],{"emptyLinePlaceholder":175},[91,62350,62351,62353,62355,62357],{"class":93,"line":16906},[91,62352,62204],{"class":97},[91,62354,62255],{"class":97},[91,62356,6948],{"class":51381},[91,62358,15695],{"class":250},[91,62360,62361,62363,62365,62367],{"class":93,"line":16919},[91,62362,54787],{"class":105},[91,62364,51518],{"class":250},[91,62366,440],{"class":105},[91,62368,1415],{"class":250},[91,62370,62371],{"class":93,"line":16924},[91,62372,2310],{"class":250},[91,62374,62375],{"class":93,"line":16938},[91,62376,2523],{"emptyLinePlaceholder":175},[91,62378,62379,62381,62383,62386],{"class":93,"line":16943},[91,62380,62204],{"class":97},[91,62382,62255],{"class":97},[91,62384,62385],{"class":97}," .name",[91,62387,15695],{"class":250},[91,62389,62390,62392,62394,62397],{"class":93,"line":16949},[91,62391,57497],{"class":105},[91,62393,51518],{"class":250},[91,62395,62396],{"class":105},"#FB7299",[91,62398,1415],{"class":250},[91,62400,62401,62403,62405,62407,62409],{"class":93,"line":16954},[91,62402,55003],{"class":105},[91,62404,51518],{"class":250},[91,62406,798],{"class":105},[91,62408,51573],{"class":153},[91,62410,1415],{"class":250},[91,62412,62413,62416,62418,62421],{"class":93,"line":16968},[91,62414,62415],{"class":105},"      font-weight",[91,62417,51518],{"class":250},[91,62419,62420],{"class":105},"bold",[91,62422,1415],{"class":250},[91,62424,62425],{"class":93,"line":16973},[91,62426,2310],{"class":250},[91,62428,62429],{"class":93,"line":16978},[91,62430,2523],{"emptyLinePlaceholder":175},[91,62432,62433,62435,62437,62440],{"class":93,"line":16992},[91,62434,62204],{"class":97},[91,62436,62255],{"class":97},[91,62438,62439],{"class":97}," .text",[91,62441,15695],{"class":250},[91,62443,62444,62446,62448,62451],{"class":93,"line":17004},[91,62445,57497],{"class":105},[91,62447,51518],{"class":250},[91,62449,62450],{"class":105},"#333",[91,62452,1415],{"class":250},[91,62454,62455,62457,62459,62461,62463,62465],{"class":93,"line":17009},[91,62456,54776],{"class":105},[91,62458,51518],{"class":250},[91,62460,695],{"class":105},[91,62462,51573],{"class":153},[91,62464,4216],{"class":105},[91,62466,1415],{"class":250},[91,62468,62469],{"class":93,"line":17022},[91,62470,2310],{"class":250},[91,62472,62473],{"class":93,"line":17027},[91,62474,2523],{"emptyLinePlaceholder":175},[91,62476,62477,62479,62481,62484],{"class":93,"line":17032},[91,62478,62204],{"class":97},[91,62480,62255],{"class":97},[91,62482,62483],{"class":97}," .time",[91,62485,15695],{"class":250},[91,62487,62488,62490,62492,62494],{"class":93,"line":17037},[91,62489,57497],{"class":105},[91,62491,51518],{"class":250},[91,62493,62151],{"class":105},[91,62495,1415],{"class":250},[91,62497,62498,62500,62502,62504,62506],{"class":93,"line":17050},[91,62499,55003],{"class":105},[91,62501,51518],{"class":250},[91,62503,747],{"class":105},[91,62505,51573],{"class":153},[91,62507,1415],{"class":250},[91,62509,62510],{"class":93,"line":17055},[91,62511,2310],{"class":250},[91,62513,62514,62516,62518],{"class":93,"line":32714},[91,62515,52498],{"class":250},[91,62517,168],{"class":51381},[91,62519,51388],{"class":250},[91,62521,62522,62524,62526],{"class":93,"line":32720},[91,62523,51866],{"class":250},[91,62525,51415],{"class":51381},[91,62527,51388],{"class":250},[91,62529,62530],{"class":93,"line":32726},[91,62531,2523],{"emptyLinePlaceholder":175},[91,62533,62534,62536,62538],{"class":93,"line":32732},[91,62535,1159],{"class":250},[91,62537,51881],{"class":51381},[91,62539,51388],{"class":250},[91,62541,62542,62544,62546,62548,62550,62553],{"class":93,"line":32738},[91,62543,52225],{"class":250},[91,62545,51692],{"class":51381},[91,62547,53567],{"class":97},[91,62549,296],{"class":250},[91,62551,62552],{"class":101},"\"wrapper\"",[91,62554,51388],{"class":250},[91,62556,62557,62559,62561,62563,62565,62568,62570,62572],{"class":93,"line":32749},[91,62558,51422],{"class":250},[91,62560,690],{"class":51381},[91,62562,53567],{"class":97},[91,62564,296],{"class":250},[91,62566,62567],{"class":101},"\"avatar\"",[91,62569,55395],{"class":250},[91,62571,690],{"class":51381},[91,62573,51388],{"class":250},[91,62575,62576,62578,62580,62582,62584,62587,62589,62591,62594,62596,62598,62600,62603,62605,62608,62610,62612],{"class":93,"line":32755},[91,62577,51422],{"class":250},[91,62579,54369],{"class":51381},[91,62581,15082],{"class":97},[91,62583,296],{"class":250},[91,62585,62586],{"class":101},"\"tx\"",[91,62588,61101],{"class":97},[91,62590,296],{"class":250},[91,62592,62593],{"class":101},"\"发一条友善的评论\"",[91,62595,54392],{"class":97},[91,62597,296],{"class":250},[91,62599,3824],{"class":101},[91,62601,62602],{"class":97}," maxlength",[91,62604,296],{"class":250},[91,62606,62607],{"class":101},"\"200\"",[91,62609,55395],{"class":250},[91,62611,54369],{"class":51381},[91,62613,51388],{"class":250},[91,62615,62616,62618,62620,62623,62625],{"class":93,"line":32775},[91,62617,51422],{"class":250},[91,62619,53968],{"class":51381},[91,62621,62622],{"class":250},">发布\u003C\u002F",[91,62624,53968],{"class":51381},[91,62626,51388],{"class":250},[91,62628,62629,62631,62633],{"class":93,"line":32781},[91,62630,52498],{"class":250},[91,62632,51692],{"class":51381},[91,62634,51388],{"class":250},[91,62636,62637,62639,62641,62643,62645,62647],{"class":93,"line":32792},[91,62638,52225],{"class":250},[91,62640,51692],{"class":51381},[91,62642,53567],{"class":97},[91,62644,296],{"class":250},[91,62646,62552],{"class":101},[91,62648,51388],{"class":250},[91,62650,62651,62653,62655,62657,62659,62662,62665,62667],{"class":93,"line":32798},[91,62652,51422],{"class":250},[91,62654,91],{"class":51381},[91,62656,53567],{"class":97},[91,62658,296],{"class":250},[91,62660,62661],{"class":101},"\"total\"",[91,62663,62664],{"class":250},">0\u002F200字\u003C\u002F",[91,62666,91],{"class":51381},[91,62668,51388],{"class":250},[91,62670,62671,62673,62675],{"class":93,"line":32804},[91,62672,52498],{"class":250},[91,62674,51692],{"class":51381},[91,62676,51388],{"class":250},[91,62678,62679,62681,62683,62685,62687,62690],{"class":93,"line":32810},[91,62680,52225],{"class":250},[91,62682,51692],{"class":51381},[91,62684,53567],{"class":97},[91,62686,296],{"class":250},[91,62688,62689],{"class":101},"\"list\"",[91,62691,51388],{"class":250},[91,62693,62694,62696,62698,62700,62702,62705,62708,62710,62713],{"class":93,"line":32816},[91,62695,51422],{"class":250},[91,62697,51692],{"class":51381},[91,62699,53567],{"class":97},[91,62701,296],{"class":250},[91,62703,62704],{"class":101},"\"item\"",[91,62706,62707],{"class":97}," style",[91,62709,296],{"class":250},[91,62711,62712],{"class":101},"\"display: none;\"",[91,62714,51388],{"class":250},[91,62716,62717,62719,62721,62723,62725,62727,62729,62731],{"class":93,"line":32822},[91,62718,55315],{"class":250},[91,62720,690],{"class":51381},[91,62722,53567],{"class":97},[91,62724,296],{"class":250},[91,62726,62567],{"class":101},[91,62728,55395],{"class":250},[91,62730,690],{"class":51381},[91,62732,51388],{"class":250},[91,62734,62735,62737,62739,62741,62743,62746],{"class":93,"line":32828},[91,62736,55315],{"class":250},[91,62738,51692],{"class":51381},[91,62740,53567],{"class":97},[91,62742,296],{"class":250},[91,62744,62745],{"class":101},"\"info\"",[91,62747,51388],{"class":250},[91,62749,62750,62752,62754,62756,62758,62761,62764,62766],{"class":93,"line":32834},[91,62751,55383],{"class":250},[91,62753,21],{"class":51381},[91,62755,53567],{"class":97},[91,62757,296],{"class":250},[91,62759,62760],{"class":101},"\"name\"",[91,62762,62763],{"class":250},">清风徐来\u003C\u002F",[91,62765,21],{"class":51381},[91,62767,51388],{"class":250},[91,62769,62770,62772,62774,62776,62778,62781,62784,62786],{"class":93,"line":32854},[91,62771,55383],{"class":250},[91,62773,21],{"class":51381},[91,62775,53567],{"class":97},[91,62777,296],{"class":250},[91,62779,62780],{"class":101},"\"text\"",[91,62782,62783],{"class":250},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[91,62785,21],{"class":51381},[91,62787,51388],{"class":250},[91,62789,62790,62792,62794,62796,62798,62801,62804,62806],{"class":93,"line":32860},[91,62791,55383],{"class":250},[91,62793,21],{"class":51381},[91,62795,53567],{"class":97},[91,62797,296],{"class":250},[91,62799,62800],{"class":101},"\"time\"",[91,62802,62803],{"class":250},">2022-10-10 20:29:21\u003C\u002F",[91,62805,21],{"class":51381},[91,62807,51388],{"class":250},[91,62809,62810,62812,62814],{"class":93,"line":32876},[91,62811,55488],{"class":250},[91,62813,51692],{"class":51381},[91,62815,51388],{"class":250},[91,62817,62818,62820,62822],{"class":93,"line":32882},[91,62819,51857],{"class":250},[91,62821,51692],{"class":51381},[91,62823,51388],{"class":250},[91,62825,62826,62828,62830],{"class":93,"line":32896},[91,62827,52498],{"class":250},[91,62829,51692],{"class":51381},[91,62831,51388],{"class":250},[91,62833,62834,62836,62838],{"class":93,"line":32902},[91,62835,52225],{"class":250},[91,62837,51894],{"class":51381},[91,62839,51388],{"class":250},[91,62841,62842,62844,62847,62849,62851,62853,62855,62858],{"class":93,"line":32917},[91,62843,11344],{"class":153},[91,62845,62846],{"class":105}," tx",[91,62848,13687],{"class":153},[91,62850,54477],{"class":250},[91,62852,54480],{"class":97},[91,62854,251],{"class":250},[91,62856,62857],{"class":101},"'#tx'",[91,62859,257],{"class":250},[91,62861,62862,62864,62867,62869,62871,62873,62875,62878],{"class":93,"line":32923},[91,62863,11344],{"class":153},[91,62865,62866],{"class":105}," total",[91,62868,13687],{"class":153},[91,62870,54477],{"class":250},[91,62872,54480],{"class":97},[91,62874,251],{"class":250},[91,62876,62877],{"class":101},"'.total'",[91,62879,257],{"class":250},[91,62881,62882],{"class":93,"line":32932},[91,62883,62884],{"class":308},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[91,62886,62887,62890,62892,62894,62896,62898,62900],{"class":93,"line":32938},[91,62888,62889],{"class":250},"    tx.",[91,62891,57894],{"class":97},[91,62893,251],{"class":250},[91,62895,61408],{"class":101},[91,62897,12558],{"class":250},[91,62899,54530],{"class":153},[91,62901,54533],{"class":250},[91,62903,62904,62907,62909],{"class":93,"line":32947},[91,62905,62906],{"class":250},"      total.style.opacity ",[91,62908,296],{"class":153},[91,62910,55780],{"class":105},[91,62912,62913],{"class":93,"line":32953},[91,62914,33542],{"class":250},[91,62916,62917],{"class":93,"line":32959},[91,62918,62919],{"class":308},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[91,62921,62922,62924,62926,62928,62930,62932,62934],{"class":93,"line":32968},[91,62923,62889],{"class":250},[91,62925,57894],{"class":97},[91,62927,251],{"class":250},[91,62929,61469],{"class":101},[91,62931,12558],{"class":250},[91,62933,54530],{"class":153},[91,62935,54533],{"class":250},[91,62937,62938,62940,62942],{"class":93,"line":32974},[91,62939,62906],{"class":250},[91,62941,296],{"class":153},[91,62943,47414],{"class":105},[91,62945,62946],{"class":93,"line":32985},[91,62947,33542],{"class":250},[91,62949,62950],{"class":93,"line":32991},[91,62951,62952],{"class":308},"    \u002F\u002F 3. 检测用户输入\n",[91,62954,62955,62957,62959,62961,62964,62966,62968],{"class":93,"line":33010},[91,62956,62889],{"class":250},[91,62958,57894],{"class":97},[91,62960,251],{"class":250},[91,62962,62963],{"class":101},"'input'",[91,62965,12558],{"class":250},[91,62967,54530],{"class":153},[91,62969,54533],{"class":250},[91,62971,62972],{"class":93,"line":33016},[91,62973,62974],{"class":308},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[91,62976,62977,62980,62982,62985,62988,62990,62993,62995,62997],{"class":93,"line":33027},[91,62978,62979],{"class":250},"      total.innerHTML ",[91,62981,296],{"class":153},[91,62983,62984],{"class":101}," `${",[91,62986,62987],{"class":250},"tx",[91,62989,807],{"class":101},[91,62991,62992],{"class":250},"value",[91,62994,807],{"class":101},[91,62996,52049],{"class":105},[91,62998,62999],{"class":101},"}\u002F200字`\n",[91,63001,63002],{"class":93,"line":33033},[91,63003,33542],{"class":250},[91,63005,63006],{"class":93,"line":33053},[91,63007,2523],{"emptyLinePlaceholder":175},[91,63009,63010],{"class":93,"line":33069},[91,63011,63012],{"class":308},"    \u002F\u002F const str = 'andy'\n",[91,63014,63015],{"class":93,"line":33075},[91,63016,63017],{"class":308},"    \u002F\u002F console.log(str.length)\n",[91,63019,63020,63022,63024],{"class":93,"line":33089},[91,63021,52498],{"class":250},[91,63023,51894],{"class":51381},[91,63025,51388],{"class":250},[91,63027,63028,63030,63032],{"class":93,"line":33095},[91,63029,51866],{"class":250},[91,63031,51881],{"class":51381},[91,63033,51388],{"class":250},[91,63035,63036],{"class":93,"line":33101},[91,63037,2523],{"emptyLinePlaceholder":175},[91,63039,63040,63042,63044],{"class":93,"line":33112},[91,63041,51866],{"class":250},[91,63043,50716],{"class":51381},[91,63045,51388],{"class":250},[22121,63047,63049],{"id":63048},"_3254-change事件","3.2.5.4 change事件",[21,63051,63052],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[21,63054,63055],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[21,63057,63058],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[82,63060,63062],{"className":50714,"code":63061,"language":50716,"meta":26,"style":26},"\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",[88,63063,63064,63074,63088,63092,63100,63114,63134,63146,63154,63158,63166,63180,63188,63206,63224,63236,63240,63248,63256,63260],{"__ignoreMap":26},[91,63065,63066,63068,63070,63072],{"class":93,"line":94},[91,63067,51378],{"class":250},[91,63069,51382],{"class":51381},[91,63071,51385],{"class":97},[91,63073,51388],{"class":250},[91,63075,63076,63078,63080,63082,63084,63086],{"class":93,"line":38},[91,63077,1159],{"class":250},[91,63079,50716],{"class":51381},[91,63081,51397],{"class":97},[91,63083,296],{"class":250},[91,63085,51402],{"class":101},[91,63087,51388],{"class":250},[91,63089,63090],{"class":93,"line":1304},[91,63091,2523],{"emptyLinePlaceholder":175},[91,63093,63094,63096,63098],{"class":93,"line":1319},[91,63095,1159],{"class":250},[91,63097,51415],{"class":51381},[91,63099,51388],{"class":250},[91,63101,63102,63104,63106,63108,63110,63112],{"class":93,"line":1325},[91,63103,52225],{"class":250},[91,63105,51425],{"class":51381},[91,63107,51428],{"class":97},[91,63109,296],{"class":250},[91,63111,51433],{"class":101},[91,63113,51388],{"class":250},[91,63115,63116,63118,63120,63122,63124,63126,63128,63130,63132],{"class":93,"line":1339},[91,63117,52225],{"class":250},[91,63119,51425],{"class":51381},[91,63121,15043],{"class":97},[91,63123,296],{"class":250},[91,63125,51472],{"class":101},[91,63127,51452],{"class":97},[91,63129,296],{"class":250},[91,63131,51479],{"class":101},[91,63133,51388],{"class":250},[91,63135,63136,63138,63140,63142,63144],{"class":93,"line":1345},[91,63137,52225],{"class":250},[91,63139,51488],{"class":51381},[91,63141,51491],{"class":250},[91,63143,51488],{"class":51381},[91,63145,51388],{"class":250},[91,63147,63148,63150,63152],{"class":93,"line":1436},[91,63149,51866],{"class":250},[91,63151,51415],{"class":51381},[91,63153,51388],{"class":250},[91,63155,63156],{"class":93,"line":1442},[91,63157,2523],{"emptyLinePlaceholder":175},[91,63159,63160,63162,63164],{"class":93,"line":1454},[91,63161,1159],{"class":250},[91,63163,51881],{"class":51381},[91,63165,51388],{"class":250},[91,63167,63168,63170,63172,63174,63176,63178],{"class":93,"line":1736},[91,63169,52225],{"class":250},[91,63171,53902],{"class":51381},[91,63173,53905],{"class":97},[91,63175,296],{"class":250},[91,63177,62780],{"class":101},[91,63179,51388],{"class":250},[91,63181,63182,63184,63186],{"class":93,"line":1741},[91,63183,52225],{"class":250},[91,63185,51894],{"class":51381},[91,63187,51388],{"class":250},[91,63189,63190,63192,63194,63196,63198,63200,63202,63204],{"class":93,"line":1747},[91,63191,11344],{"class":153},[91,63193,60686],{"class":105},[91,63195,13687],{"class":153},[91,63197,54477],{"class":250},[91,63199,54480],{"class":97},[91,63201,251],{"class":250},[91,63203,62963],{"class":101},[91,63205,257],{"class":250},[91,63207,63208,63211,63213,63215,63218,63220,63222],{"class":93,"line":1752},[91,63209,63210],{"class":250},"    input.",[91,63212,57894],{"class":97},[91,63214,251],{"class":250},[91,63216,63217],{"class":101},"'change'",[91,63219,12558],{"class":250},[91,63221,54530],{"class":153},[91,63223,54533],{"class":250},[91,63225,63226,63228,63230,63232,63234],{"class":93,"line":1766},[91,63227,58325],{"class":250},[91,63229,58328],{"class":97},[91,63231,251],{"class":250},[91,63233,842],{"class":105},[91,63235,257],{"class":250},[91,63237,63238],{"class":93,"line":1771},[91,63239,33542],{"class":250},[91,63241,63242,63244,63246],{"class":93,"line":1777},[91,63243,52498],{"class":250},[91,63245,51894],{"class":51381},[91,63247,51388],{"class":250},[91,63249,63250,63252,63254],{"class":93,"line":1798},[91,63251,51866],{"class":250},[91,63253,51881],{"class":51381},[91,63255,51388],{"class":250},[91,63257,63258],{"class":93,"line":1803},[91,63259,2523],{"emptyLinePlaceholder":175},[91,63261,63262,63264,63266],{"class":93,"line":1817},[91,63263,51866],{"class":250},[91,63265,50716],{"class":51381},[91,63267,51388],{"class":250},[21,63269,63270],{},"总结：内容发生改变才回去触发",[217,63272,63274],{"id":63273},"_326-事件对象","3.2.6 事件对象",[22121,63276,63278],{"id":63277},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[21,63280,63281],{},[24,63282],{"alt":26,"src":63283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[21,63285,63286],{},[24,63287],{"alt":26,"src":63288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[21,63290,63291],{},"点击一次，就输出了事件对象，它是个对象",[21,63293,63294],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[21,63296,63297],{},[24,63298],{"alt":26,"src":63299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22121,63301,63303],{"id":63302},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[21,63305,63306],{},[24,63307],{"alt":26,"src":63308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[21,63310,63311],{},"实现按特殊字符才是实现打印输出效果：",[82,63313,63315],{"className":53148,"code":63314,"language":53150,"meta":26,"style":26},"\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",[88,63316,63317,63325,63330,63344,63352,63357,63362,63367,63372,63377,63382,63387,63392,63397,63401,63405,63413],{"__ignoreMap":26},[91,63318,63319,63321,63323],{"class":93,"line":94},[91,63320,1159],{"class":250},[91,63322,51881],{"class":51381},[91,63324,51388],{"class":250},[91,63326,63327],{"class":93,"line":38},[91,63328,63329],{"class":308},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[91,63331,63332,63334,63336,63338,63340,63342],{"class":93,"line":1304},[91,63333,52225],{"class":250},[91,63335,53902],{"class":51381},[91,63337,53905],{"class":97},[91,63339,296],{"class":250},[91,63341,62780],{"class":101},[91,63343,51388],{"class":250},[91,63345,63346,63348,63350],{"class":93,"line":1319},[91,63347,52225],{"class":250},[91,63349,51894],{"class":51381},[91,63351,51388],{"class":250},[91,63353,63354],{"class":93,"line":1325},[91,63355,63356],{"class":250},"    \u002F\u002F const btn = document.querySelector('button')\n",[91,63358,63359],{"class":93,"line":1339},[91,63360,63361],{"class":250},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[91,63363,63364],{"class":93,"line":1345},[91,63365,63366],{"class":250},"    \u002F\u002F   console.log(e);\n",[91,63368,63369],{"class":93,"line":1436},[91,63370,63371],{"class":250},"    \u002F\u002F })\n",[91,63373,63374],{"class":93,"line":1442},[91,63375,63376],{"class":250},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[91,63378,63379],{"class":93,"line":1454},[91,63380,63381],{"class":250},"    const input = document.querySelector('input')\n",[91,63383,63384],{"class":93,"line":1736},[91,63385,63386],{"class":250},"    input.addEventListener('keyup', function (e) {\n",[91,63388,63389],{"class":93,"line":1741},[91,63390,63391],{"class":250},"      if (e.key === 'Enter') {\n",[91,63393,63394],{"class":93,"line":1747},[91,63395,63396],{"class":250},"        console.log('我按下了回车键')\n",[91,63398,63399],{"class":93,"line":1752},[91,63400,52479],{"class":250},[91,63402,63403],{"class":93,"line":1766},[91,63404,33542],{"class":250},[91,63406,63407,63409,63411],{"class":93,"line":1771},[91,63408,52498],{"class":250},[91,63410,51894],{"class":51381},[91,63412,51388],{"class":250},[91,63414,63415,63417,63419],{"class":93,"line":1777},[91,63416,51866],{"class":250},[91,63418,51881],{"class":51381},[91,63420,51388],{"class":250},[22121,63422,63424],{"id":63423},"_3263-trim方法","3.2.6.3 trim方法",[21,63426,63427],{},[24,63428],{"alt":26,"src":63429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[21,63431,63432],{},[24,63433],{"alt":26,"src":63434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[21,63436,63437],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[21,63439,63440],{},"str.trim()",[217,63442,63444],{"id":63443},"_327-环境对象","3.2.7 环境对象",[21,63446,63447],{},[24,63448],{"alt":26,"src":63449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[21,63451,63452],{},[24,63453],{"alt":26,"src":63454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[21,63456,63457],{},[24,63458],{"alt":26,"src":63459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[21,63461,63462],{},"实际函数调用是window.fn()",[21,63464,63465],{},"普通函数里面this指向的是window",[1256,63467,63468,63471,63474],{},[17,63469,63470],{},"在普通函数下，this指向的是window",[17,63472,63473],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[17,63475,63476],{},"箭头函数没有this",[21,63478,63479],{},"粗略记法就是：谁调用，this就指向谁",[21,63481,63482],{},[24,63483],{"alt":26,"src":63484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[21,63486,63487],{},[24,63488],{"alt":26,"src":63489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[21,63491,63492],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[21,63494,63495],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[82,63497,63499],{"className":53148,"code":63498,"language":53150,"meta":26,"style":26},"\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",[88,63500,63501,63509,63521,63529,63534,63539,63544,63549,63553,63561],{"__ignoreMap":26},[91,63502,63503,63505,63507],{"class":93,"line":94},[91,63504,1159],{"class":250},[91,63506,51881],{"class":51381},[91,63508,51388],{"class":250},[91,63510,63511,63513,63515,63517,63519],{"class":93,"line":38},[91,63512,52225],{"class":250},[91,63514,53968],{"class":51381},[91,63516,53974],{"class":250},[91,63518,53968],{"class":51381},[91,63520,51388],{"class":250},[91,63522,63523,63525,63527],{"class":93,"line":1304},[91,63524,52225],{"class":250},[91,63526,51894],{"class":51381},[91,63528,51388],{"class":250},[91,63530,63531],{"class":93,"line":1319},[91,63532,63533],{"class":250},"    const button = document.querySelector('button')\n",[91,63535,63536],{"class":93,"line":1325},[91,63537,63538],{"class":250},"    button.addEventListener('click', function () {\n",[91,63540,63541],{"class":93,"line":1339},[91,63542,63543],{"class":250},"      \u002F\u002F console.log(this);\n",[91,63545,63546],{"class":93,"line":1345},[91,63547,63548],{"class":250},"      this.style.color = 'pink'\n",[91,63550,63551],{"class":93,"line":1436},[91,63552,33542],{"class":250},[91,63554,63555,63557,63559],{"class":93,"line":1442},[91,63556,52498],{"class":250},[91,63558,51894],{"class":51381},[91,63560,51388],{"class":250},[91,63562,63563,63565,63567],{"class":93,"line":1454},[91,63564,51866],{"class":250},[91,63566,51881],{"class":51381},[91,63568,51388],{"class":250},[217,63570,63572],{"id":63571},"_328-回调函数","3.2.8 回调函数",[21,63574,63575],{},[24,63576],{"alt":26,"src":63577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[21,63579,63580],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[21,63582,11455],{},[1256,63584,63585,63588,63591],{},[17,63586,63587],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[17,63589,63590],{},"回调函数本质还是函数，只不过把它当成参数使用",[17,63592,63593],{},"使用匿名函数做为回调函数比较常见",[217,63595,63597],{"id":63596},"_329-tab栏切换","3.2.9 tab栏切换",[21,63599,63600],{},[24,63601],{"alt":26,"src":63602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[82,63604,63606],{"className":50714,"code":63605,"language":50716,"meta":26,"style":26},"\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",[88,63607,63608,63618,63632,63636,63644,63658,63678,63698,63711,63719,63725,63735,63745,63749,63753,63760,63773,63786,63798,63814,63818,63822,63829,63841,63853,63865,63875,63885,63889,63893,63902,63914,63925,63937,63941,63945,63953,63963,63973,63983,63987,63991,64001,64015,64027,64031,64035,64047,64058,64075,64085,64089,64093,64108,64119,64129,64133,64137,64144,64159,64163,64167,64175,64185,64189,64193,64202,64212,64216,64224,64232,64236,64244,64259,64274,64287,64295,64329,64356,64383,64410,64437,64445,64453,64468,64505,64540,64575,64610,64645,64653,64661,64669,64674,64679,64699,64704,64733,64738,64743,64761,64766,64771,64776,64798,64803,64819,64823,64828,64833,64854,64859,64888,64892,64897,64901,64909,64917,64921],{"__ignoreMap":26},[91,63609,63610,63612,63614,63616],{"class":93,"line":94},[91,63611,51378],{"class":250},[91,63613,51382],{"class":51381},[91,63615,51385],{"class":97},[91,63617,51388],{"class":250},[91,63619,63620,63622,63624,63626,63628,63630],{"class":93,"line":38},[91,63621,1159],{"class":250},[91,63623,50716],{"class":51381},[91,63625,51397],{"class":97},[91,63627,296],{"class":250},[91,63629,51402],{"class":101},[91,63631,51388],{"class":250},[91,63633,63634],{"class":93,"line":1304},[91,63635,2523],{"emptyLinePlaceholder":175},[91,63637,63638,63640,63642],{"class":93,"line":1319},[91,63639,1159],{"class":250},[91,63641,51415],{"class":51381},[91,63643,51388],{"class":250},[91,63645,63646,63648,63650,63652,63654,63656],{"class":93,"line":1325},[91,63647,52225],{"class":250},[91,63649,51425],{"class":51381},[91,63651,51428],{"class":97},[91,63653,296],{"class":250},[91,63655,51433],{"class":101},[91,63657,59208],{"class":250},[91,63659,63660,63662,63664,63666,63668,63670,63672,63674,63676],{"class":93,"line":1339},[91,63661,52225],{"class":250},[91,63663,51425],{"class":51381},[91,63665,51444],{"class":97},[91,63667,296],{"class":250},[91,63669,51449],{"class":101},[91,63671,51452],{"class":97},[91,63673,296],{"class":250},[91,63675,51457],{"class":101},[91,63677,59208],{"class":250},[91,63679,63680,63682,63684,63686,63688,63690,63692,63694,63696],{"class":93,"line":1345},[91,63681,52225],{"class":250},[91,63683,51425],{"class":51381},[91,63685,15043],{"class":97},[91,63687,296],{"class":250},[91,63689,51472],{"class":101},[91,63691,51452],{"class":97},[91,63693,296],{"class":250},[91,63695,51479],{"class":101},[91,63697,59208],{"class":250},[91,63699,63700,63702,63704,63707,63709],{"class":93,"line":1436},[91,63701,52225],{"class":250},[91,63703,51488],{"class":51381},[91,63705,63706],{"class":250},">tab栏切换\u003C\u002F",[91,63708,51488],{"class":51381},[91,63710,51388],{"class":250},[91,63712,63713,63715,63717],{"class":93,"line":1442},[91,63714,52225],{"class":250},[91,63716,168],{"class":51381},[91,63718,51388],{"class":250},[91,63720,63721,63723],{"class":93,"line":1454},[91,63722,6526],{"class":51381},[91,63724,15695],{"class":250},[91,63726,63727,63729,63731,63733],{"class":93,"line":1736},[91,63728,54787],{"class":105},[91,63730,51518],{"class":250},[91,63732,440],{"class":105},[91,63734,1415],{"class":250},[91,63736,63737,63739,63741,63743],{"class":93,"line":1741},[91,63738,54776],{"class":105},[91,63740,51518],{"class":250},[91,63742,440],{"class":105},[91,63744,1415],{"class":250},[91,63746,63747],{"class":93,"line":1747},[91,63748,2310],{"class":250},[91,63750,63751],{"class":93,"line":1752},[91,63752,2523],{"emptyLinePlaceholder":175},[91,63754,63755,63758],{"class":93,"line":1766},[91,63756,63757],{"class":97},"    .tab",[91,63759,15695],{"class":250},[91,63761,63762,63764,63766,63769,63771],{"class":93,"line":1771},[91,63763,54852],{"class":105},[91,63765,51518],{"class":250},[91,63767,63768],{"class":105},"590",[91,63770,51573],{"class":153},[91,63772,1415],{"class":250},[91,63774,63775,63777,63779,63782,63784],{"class":93,"line":1777},[91,63776,54866],{"class":105},[91,63778,51518],{"class":250},[91,63780,63781],{"class":105},"340",[91,63783,51573],{"class":153},[91,63785,1415],{"class":250},[91,63787,63788,63790,63792,63794,63796],{"class":93,"line":1798},[91,63789,54787],{"class":105},[91,63791,51518],{"class":250},[91,63793,949],{"class":105},[91,63795,51573],{"class":153},[91,63797,1415],{"class":250},[91,63799,63800,63802,63804,63806,63808,63810,63812],{"class":93,"line":1803},[91,63801,62058],{"class":105},[91,63803,51518],{"class":250},[91,63805,466],{"class":105},[91,63807,51573],{"class":153},[91,63809,51602],{"class":105},[91,63811,62325],{"class":105},[91,63813,1415],{"class":250},[91,63815,63816],{"class":93,"line":1817},[91,63817,2310],{"class":250},[91,63819,63820],{"class":93,"line":1822},[91,63821,2523],{"emptyLinePlaceholder":175},[91,63823,63824,63827],{"class":93,"line":1851},[91,63825,63826],{"class":97},"    .tab-nav",[91,63828,15695],{"class":250},[91,63830,63831,63833,63835,63837,63839],{"class":93,"line":1856},[91,63832,54852],{"class":105},[91,63834,51518],{"class":250},[91,63836,560],{"class":105},[91,63838,577],{"class":153},[91,63840,1415],{"class":250},[91,63842,63843,63845,63847,63849,63851],{"class":93,"line":1873},[91,63844,54866],{"class":105},[91,63846,51518],{"class":250},[91,63848,1156],{"class":105},[91,63850,51573],{"class":153},[91,63852,1415],{"class":250},[91,63854,63855,63857,63859,63861,63863],{"class":93,"line":1878},[91,63856,57440],{"class":105},[91,63858,51518],{"class":250},[91,63860,1156],{"class":105},[91,63862,51573],{"class":153},[91,63864,1415],{"class":250},[91,63866,63867,63869,63871,63873],{"class":93,"line":1883},[91,63868,55090],{"class":105},[91,63870,51518],{"class":250},[91,63872,51558],{"class":105},[91,63874,1415],{"class":250},[91,63876,63877,63879,63881,63883],{"class":93,"line":1888},[91,63878,55101],{"class":105},[91,63880,51518],{"class":250},[91,63882,51749],{"class":105},[91,63884,1415],{"class":250},[91,63886,63887],{"class":93,"line":1902},[91,63888,2310],{"class":250},[91,63890,63891],{"class":93,"line":1907},[91,63892,2523],{"emptyLinePlaceholder":175},[91,63894,63895,63897,63900],{"class":93,"line":2700},[91,63896,63826],{"class":97},[91,63898,63899],{"class":51381}," h3",[91,63901,15695],{"class":250},[91,63903,63904,63906,63908,63910,63912],{"class":93,"line":2714},[91,63905,55003],{"class":105},[91,63907,51518],{"class":250},[91,63909,1049],{"class":105},[91,63911,51573],{"class":153},[91,63913,1415],{"class":250},[91,63915,63916,63918,63920,63923],{"class":93,"line":2722},[91,63917,62415],{"class":105},[91,63919,51518],{"class":250},[91,63921,63922],{"class":105},"normal",[91,63924,1415],{"class":250},[91,63926,63927,63929,63931,63933,63935],{"class":93,"line":2727},[91,63928,62081],{"class":105},[91,63930,51518],{"class":250},[91,63932,949],{"class":105},[91,63934,51573],{"class":153},[91,63936,1415],{"class":250},[91,63938,63939],{"class":93,"line":2733},[91,63940,2310],{"class":250},[91,63942,63943],{"class":93,"line":2739},[91,63944,2523],{"emptyLinePlaceholder":175},[91,63946,63947,63949,63951],{"class":93,"line":2744},[91,63948,63826],{"class":97},[91,63950,61373],{"class":51381},[91,63952,15695],{"class":250},[91,63954,63955,63957,63959,63961],{"class":93,"line":8071},[91,63956,54813],{"class":105},[91,63958,51518],{"class":250},[91,63960,54818],{"class":105},[91,63962,1415],{"class":250},[91,63964,63965,63967,63969,63971],{"class":93,"line":8095},[91,63966,55090],{"class":105},[91,63968,51518],{"class":250},[91,63970,51558],{"class":105},[91,63972,1415],{"class":250},[91,63974,63975,63977,63979,63981],{"class":93,"line":8100},[91,63976,55101],{"class":105},[91,63978,51518],{"class":250},[91,63980,51661],{"class":105},[91,63982,1415],{"class":250},[91,63984,63985],{"class":93,"line":8106},[91,63986,2310],{"class":250},[91,63988,63989],{"class":93,"line":8133},[91,63990,2523],{"emptyLinePlaceholder":175},[91,63992,63993,63995,63997,63999],{"class":93,"line":8138},[91,63994,63826],{"class":97},[91,63996,61373],{"class":51381},[91,63998,55156],{"class":51381},[91,64000,15695],{"class":250},[91,64002,64003,64005,64007,64009,64011,64013],{"class":93,"line":8144},[91,64004,54787],{"class":105},[91,64006,51518],{"class":250},[91,64008,440],{"class":105},[91,64010,9073],{"class":105},[91,64012,51573],{"class":153},[91,64014,1415],{"class":250},[91,64016,64017,64019,64021,64023,64025],{"class":93,"line":8156},[91,64018,55003],{"class":105},[91,64020,51518],{"class":250},[91,64022,798],{"class":105},[91,64024,51573],{"class":153},[91,64026,1415],{"class":250},[91,64028,64029],{"class":93,"line":8168},[91,64030,2310],{"class":250},[91,64032,64033],{"class":93,"line":8180},[91,64034,2523],{"emptyLinePlaceholder":175},[91,64036,64037,64039,64041,64043,64045],{"class":93,"line":9839},[91,64038,63826],{"class":97},[91,64040,61373],{"class":51381},[91,64042,55156],{"class":51381},[91,64044,1523],{"class":51381},[91,64046,15695],{"class":250},[91,64048,64049,64052,64054,64056],{"class":93,"line":9864},[91,64050,64051],{"class":105},"      text-decoration",[91,64053,51518],{"class":250},[91,64055,54818],{"class":105},[91,64057,1415],{"class":250},[91,64059,64060,64062,64064,64066,64068,64070,64073],{"class":93,"line":9887},[91,64061,62313],{"class":105},[91,64063,51518],{"class":250},[91,64065,327],{"class":105},[91,64067,51573],{"class":153},[91,64069,51602],{"class":105},[91,64071,64072],{"class":105}," transparent",[91,64074,1415],{"class":250},[91,64076,64077,64079,64081,64083],{"class":93,"line":9911},[91,64078,57497],{"class":105},[91,64080,51518],{"class":250},[91,64082,62450],{"class":105},[91,64084,1415],{"class":250},[91,64086,64087],{"class":93,"line":9916},[91,64088,2310],{"class":250},[91,64090,64091],{"class":93,"line":9921},[91,64092,2523],{"emptyLinePlaceholder":175},[91,64094,64095,64097,64099,64101,64103,64106],{"class":93,"line":9926},[91,64096,63826],{"class":97},[91,64098,61373],{"class":51381},[91,64100,55156],{"class":51381},[91,64102,1523],{"class":51381},[91,64104,64105],{"class":97},".active",[91,64107,15695],{"class":250},[91,64109,64110,64112,64114,64117],{"class":93,"line":9935},[91,64111,61872],{"class":105},[91,64113,51518],{"class":250},[91,64115,64116],{"class":105},"#e1251b",[91,64118,1415],{"class":250},[91,64120,64121,64123,64125,64127],{"class":93,"line":9940},[91,64122,57497],{"class":105},[91,64124,51518],{"class":250},[91,64126,64116],{"class":105},[91,64128,1415],{"class":250},[91,64130,64131],{"class":93,"line":9946},[91,64132,2310],{"class":250},[91,64134,64135],{"class":93,"line":9967},[91,64136,2523],{"emptyLinePlaceholder":175},[91,64138,64139,64142],{"class":93,"line":9973},[91,64140,64141],{"class":97},"    .tab-content",[91,64143,15695],{"class":250},[91,64145,64146,64148,64150,64152,64155,64157],{"class":93,"line":9987},[91,64147,54776],{"class":105},[91,64149,51518],{"class":250},[91,64151,440],{"class":105},[91,64153,64154],{"class":105}," 16",[91,64156,51573],{"class":153},[91,64158,1415],{"class":250},[91,64160,64161],{"class":93,"line":9993},[91,64162,2310],{"class":250},[91,64164,64165],{"class":93,"line":10020},[91,64166,2523],{"emptyLinePlaceholder":175},[91,64168,64169,64171,64173],{"class":93,"line":10029},[91,64170,64141],{"class":97},[91,64172,62255],{"class":97},[91,64174,15695],{"class":250},[91,64176,64177,64179,64181,64183],{"class":93,"line":10035},[91,64178,55090],{"class":105},[91,64180,51518],{"class":250},[91,64182,54818],{"class":105},[91,64184,1415],{"class":250},[91,64186,64187],{"class":93,"line":10043},[91,64188,2310],{"class":250},[91,64190,64191],{"class":93,"line":10048},[91,64192,2523],{"emptyLinePlaceholder":175},[91,64194,64195,64197,64200],{"class":93,"line":16727},[91,64196,64141],{"class":97},[91,64198,64199],{"class":97}," .item.active",[91,64201,15695],{"class":250},[91,64203,64204,64206,64208,64210],{"class":93,"line":16733},[91,64205,55090],{"class":105},[91,64207,51518],{"class":250},[91,64209,60950],{"class":105},[91,64211,1415],{"class":250},[91,64213,64214],{"class":93,"line":16756},[91,64215,2310],{"class":250},[91,64217,64218,64220,64222],{"class":93,"line":16762},[91,64219,52498],{"class":250},[91,64221,168],{"class":51381},[91,64223,51388],{"class":250},[91,64225,64226,64228,64230],{"class":93,"line":16785},[91,64227,51866],{"class":250},[91,64229,51415],{"class":51381},[91,64231,51388],{"class":250},[91,64233,64234],{"class":93,"line":16799},[91,64235,2523],{"emptyLinePlaceholder":175},[91,64237,64238,64240,64242],{"class":93,"line":16819},[91,64239,1159],{"class":250},[91,64241,51881],{"class":51381},[91,64243,51388],{"class":250},[91,64245,64246,64248,64250,64252,64254,64257],{"class":93,"line":16825},[91,64247,52225],{"class":250},[91,64249,51692],{"class":51381},[91,64251,53567],{"class":97},[91,64253,296],{"class":250},[91,64255,64256],{"class":101},"\"tab\"",[91,64258,51388],{"class":250},[91,64260,64261,64263,64265,64267,64269,64272],{"class":93,"line":16836},[91,64262,51422],{"class":250},[91,64264,51692],{"class":51381},[91,64266,53567],{"class":97},[91,64268,296],{"class":250},[91,64270,64271],{"class":101},"\"tab-nav\"",[91,64273,51388],{"class":250},[91,64275,64276,64278,64280,64283,64285],{"class":93,"line":16859},[91,64277,55315],{"class":250},[91,64279,217],{"class":51381},[91,64281,64282],{"class":250},">每日特价\u003C\u002F",[91,64284,217],{"class":51381},[91,64286,51388],{"class":250},[91,64288,64289,64291,64293],{"class":93,"line":16881},[91,64290,55315],{"class":250},[91,64292,1256],{"class":51381},[91,64294,51388],{"class":250},[91,64296,64297,64299,64301,64303,64305,64307,64309,64311,64313,64315,64318,64321,64323,64325,64327],{"class":93,"line":16886},[91,64298,55383],{"class":250},[91,64300,17],{"class":51381},[91,64302,61133],{"class":250},[91,64304,487],{"class":51381},[91,64306,53567],{"class":97},[91,64308,296],{"class":250},[91,64310,59787],{"class":101},[91,64312,61138],{"class":97},[91,64314,296],{"class":250},[91,64316,64317],{"class":101},"\"javascript:;\"",[91,64319,64320],{"class":250},">精选\u003C\u002F",[91,64322,487],{"class":51381},[91,64324,55395],{"class":250},[91,64326,17],{"class":51381},[91,64328,51388],{"class":250},[91,64330,64331,64333,64335,64337,64339,64341,64343,64345,64348,64350,64352,64354],{"class":93,"line":16892},[91,64332,55383],{"class":250},[91,64334,17],{"class":51381},[91,64336,61133],{"class":250},[91,64338,487],{"class":51381},[91,64340,61138],{"class":97},[91,64342,296],{"class":250},[91,64344,64317],{"class":101},[91,64346,64347],{"class":250},">美食\u003C\u002F",[91,64349,487],{"class":51381},[91,64351,55395],{"class":250},[91,64353,17],{"class":51381},[91,64355,51388],{"class":250},[91,64357,64358,64360,64362,64364,64366,64368,64370,64372,64375,64377,64379,64381],{"class":93,"line":16906},[91,64359,55383],{"class":250},[91,64361,17],{"class":51381},[91,64363,61133],{"class":250},[91,64365,487],{"class":51381},[91,64367,61138],{"class":97},[91,64369,296],{"class":250},[91,64371,64317],{"class":101},[91,64373,64374],{"class":250},">百货\u003C\u002F",[91,64376,487],{"class":51381},[91,64378,55395],{"class":250},[91,64380,17],{"class":51381},[91,64382,51388],{"class":250},[91,64384,64385,64387,64389,64391,64393,64395,64397,64399,64402,64404,64406,64408],{"class":93,"line":16919},[91,64386,55383],{"class":250},[91,64388,17],{"class":51381},[91,64390,61133],{"class":250},[91,64392,487],{"class":51381},[91,64394,61138],{"class":97},[91,64396,296],{"class":250},[91,64398,64317],{"class":101},[91,64400,64401],{"class":250},">个护\u003C\u002F",[91,64403,487],{"class":51381},[91,64405,55395],{"class":250},[91,64407,17],{"class":51381},[91,64409,51388],{"class":250},[91,64411,64412,64414,64416,64418,64420,64422,64424,64426,64429,64431,64433,64435],{"class":93,"line":16924},[91,64413,55383],{"class":250},[91,64415,17],{"class":51381},[91,64417,61133],{"class":250},[91,64419,487],{"class":51381},[91,64421,61138],{"class":97},[91,64423,296],{"class":250},[91,64425,64317],{"class":101},[91,64427,64428],{"class":250},">预告\u003C\u002F",[91,64430,487],{"class":51381},[91,64432,55395],{"class":250},[91,64434,17],{"class":51381},[91,64436,51388],{"class":250},[91,64438,64439,64441,64443],{"class":93,"line":16938},[91,64440,55488],{"class":250},[91,64442,1256],{"class":51381},[91,64444,51388],{"class":250},[91,64446,64447,64449,64451],{"class":93,"line":16943},[91,64448,51857],{"class":250},[91,64450,51692],{"class":51381},[91,64452,51388],{"class":250},[91,64454,64455,64457,64459,64461,64463,64466],{"class":93,"line":16949},[91,64456,51422],{"class":250},[91,64458,51692],{"class":51381},[91,64460,53567],{"class":97},[91,64462,296],{"class":250},[91,64464,64465],{"class":101},"\"tab-content\"",[91,64467,51388],{"class":250},[91,64469,64470,64472,64474,64476,64478,64481,64483,64485,64487,64489,64492,64494,64496,64498,64501,64503],{"class":93,"line":16954},[91,64471,55315],{"class":250},[91,64473,51692],{"class":51381},[91,64475,53567],{"class":97},[91,64477,296],{"class":250},[91,64479,64480],{"class":101},"\"item active\"",[91,64482,61133],{"class":250},[91,64484,24],{"class":51381},[91,64486,55320],{"class":97},[91,64488,296],{"class":250},[91,64490,64491],{"class":101},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[91,64493,55328],{"class":97},[91,64495,296],{"class":250},[91,64497,7775],{"class":101},[91,64499,64500],{"class":250}," \u002F>\u003C\u002F",[91,64502,51692],{"class":51381},[91,64504,51388],{"class":250},[91,64506,64507,64509,64511,64513,64515,64517,64519,64521,64523,64525,64528,64530,64532,64534,64536,64538],{"class":93,"line":16968},[91,64508,55315],{"class":250},[91,64510,51692],{"class":51381},[91,64512,53567],{"class":97},[91,64514,296],{"class":250},[91,64516,62704],{"class":101},[91,64518,61133],{"class":250},[91,64520,24],{"class":51381},[91,64522,55320],{"class":97},[91,64524,296],{"class":250},[91,64526,64527],{"class":101},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[91,64529,55328],{"class":97},[91,64531,296],{"class":250},[91,64533,7775],{"class":101},[91,64535,64500],{"class":250},[91,64537,51692],{"class":51381},[91,64539,51388],{"class":250},[91,64541,64542,64544,64546,64548,64550,64552,64554,64556,64558,64560,64563,64565,64567,64569,64571,64573],{"class":93,"line":16973},[91,64543,55315],{"class":250},[91,64545,51692],{"class":51381},[91,64547,53567],{"class":97},[91,64549,296],{"class":250},[91,64551,62704],{"class":101},[91,64553,61133],{"class":250},[91,64555,24],{"class":51381},[91,64557,55320],{"class":97},[91,64559,296],{"class":250},[91,64561,64562],{"class":101},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[91,64564,55328],{"class":97},[91,64566,296],{"class":250},[91,64568,7775],{"class":101},[91,64570,64500],{"class":250},[91,64572,51692],{"class":51381},[91,64574,51388],{"class":250},[91,64576,64577,64579,64581,64583,64585,64587,64589,64591,64593,64595,64598,64600,64602,64604,64606,64608],{"class":93,"line":16978},[91,64578,55315],{"class":250},[91,64580,51692],{"class":51381},[91,64582,53567],{"class":97},[91,64584,296],{"class":250},[91,64586,62704],{"class":101},[91,64588,61133],{"class":250},[91,64590,24],{"class":51381},[91,64592,55320],{"class":97},[91,64594,296],{"class":250},[91,64596,64597],{"class":101},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[91,64599,55328],{"class":97},[91,64601,296],{"class":250},[91,64603,7775],{"class":101},[91,64605,64500],{"class":250},[91,64607,51692],{"class":51381},[91,64609,51388],{"class":250},[91,64611,64612,64614,64616,64618,64620,64622,64624,64626,64628,64630,64633,64635,64637,64639,64641,64643],{"class":93,"line":16992},[91,64613,55315],{"class":250},[91,64615,51692],{"class":51381},[91,64617,53567],{"class":97},[91,64619,296],{"class":250},[91,64621,62704],{"class":101},[91,64623,61133],{"class":250},[91,64625,24],{"class":51381},[91,64627,55320],{"class":97},[91,64629,296],{"class":250},[91,64631,64632],{"class":101},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[91,64634,55328],{"class":97},[91,64636,296],{"class":250},[91,64638,7775],{"class":101},[91,64640,64500],{"class":250},[91,64642,51692],{"class":51381},[91,64644,51388],{"class":250},[91,64646,64647,64649,64651],{"class":93,"line":17004},[91,64648,51857],{"class":250},[91,64650,51692],{"class":51381},[91,64652,51388],{"class":250},[91,64654,64655,64657,64659],{"class":93,"line":17009},[91,64656,52498],{"class":250},[91,64658,51692],{"class":51381},[91,64660,51388],{"class":250},[91,64662,64663,64665,64667],{"class":93,"line":17022},[91,64664,52225],{"class":250},[91,64666,51894],{"class":51381},[91,64668,51388],{"class":250},[91,64670,64671],{"class":93,"line":17027},[91,64672,64673],{"class":308},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[91,64675,64676],{"class":93,"line":17032},[91,64677,64678],{"class":308},"    \u002F\u002F 1.1 获取 a 元素 \n",[91,64680,64681,64683,64686,64688,64690,64692,64694,64697],{"class":93,"line":17037},[91,64682,11344],{"class":153},[91,64684,64685],{"class":105}," as",[91,64687,13687],{"class":153},[91,64689,54477],{"class":250},[91,64691,55762],{"class":97},[91,64693,251],{"class":250},[91,64695,64696],{"class":101},"'.tab-nav a'",[91,64698,257],{"class":250},[91,64700,64701],{"class":93,"line":17050},[91,64702,64703],{"class":308},"    \u002F\u002F console.log(as) \n",[91,64705,64706,64708,64710,64712,64714,64716,64718,64720,64722,64725,64727,64729,64731],{"class":93,"line":17055},[91,64707,3324],{"class":153},[91,64709,1782],{"class":250},[91,64711,51928],{"class":153},[91,64713,9561],{"class":250},[91,64715,296],{"class":153},[91,64717,4216],{"class":105},[91,64719,9568],{"class":250},[91,64721,1159],{"class":153},[91,64723,64724],{"class":250}," as.",[91,64726,52049],{"class":105},[91,64728,3337],{"class":250},[91,64730,2415],{"class":153},[91,64732,12565],{"class":250},[91,64734,64735],{"class":93,"line":32714},[91,64736,64737],{"class":308},"      \u002F\u002F console.log(as[i])\n",[91,64739,64740],{"class":93,"line":32720},[91,64741,64742],{"class":308},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[91,64744,64745,64748,64750,64752,64755,64757,64759],{"class":93,"line":32726},[91,64746,64747],{"class":250},"      as[i].",[91,64749,57894],{"class":97},[91,64751,251],{"class":250},[91,64753,64754],{"class":101},"'mouseenter'",[91,64756,12558],{"class":250},[91,64758,54530],{"class":153},[91,64760,54533],{"class":250},[91,64762,64763],{"class":93,"line":32732},[91,64764,64765],{"class":308},"        \u002F\u002F console.log('鼠标经过')\n",[91,64767,64768],{"class":93,"line":32738},[91,64769,64770],{"class":308},"        \u002F\u002F 排他思想  \n",[91,64772,64773],{"class":93,"line":32749},[91,64774,64775],{"class":308},"        \u002F\u002F 干掉别人 移除类active\n",[91,64777,64778,64780,64782,64784,64787,64789,64791,64793,64796],{"class":93,"line":32755},[91,64779,52006],{"class":250},[91,64781,54480],{"class":97},[91,64783,251],{"class":250},[91,64785,64786],{"class":101},"'.tab-nav .active'",[91,64788,57084],{"class":250},[91,64790,57087],{"class":97},[91,64792,251],{"class":250},[91,64794,64795],{"class":101},"'active'",[91,64797,257],{"class":250},[91,64799,64800],{"class":93,"line":32775},[91,64801,64802],{"class":308},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[91,64804,64805,64808,64811,64813,64815,64817],{"class":93,"line":32781},[91,64806,64807],{"class":105},"        this",[91,64809,64810],{"class":250},".classList.",[91,64812,5457],{"class":97},[91,64814,251],{"class":250},[91,64816,64795],{"class":101},[91,64818,257],{"class":250},[91,64820,64821],{"class":93,"line":32792},[91,64822,2523],{"emptyLinePlaceholder":175},[91,64824,64825],{"class":93,"line":32798},[91,64826,64827],{"class":308},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[91,64829,64830],{"class":93,"line":32804},[91,64831,64832],{"class":308},"        \u002F\u002F 干掉别人\n",[91,64834,64835,64837,64839,64841,64844,64846,64848,64850,64852],{"class":93,"line":32810},[91,64836,52006],{"class":250},[91,64838,54480],{"class":97},[91,64840,251],{"class":250},[91,64842,64843],{"class":101},"'.tab-content .active'",[91,64845,57084],{"class":250},[91,64847,57087],{"class":97},[91,64849,251],{"class":250},[91,64851,64795],{"class":101},[91,64853,257],{"class":250},[91,64855,64856],{"class":93,"line":32816},[91,64857,64858],{"class":308},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[91,64860,64861,64863,64865,64867,64870,64872,64874,64876,64878,64880,64882,64884,64886],{"class":93,"line":32822},[91,64862,52006],{"class":250},[91,64864,54480],{"class":97},[91,64866,251],{"class":250},[91,64868,64869],{"class":101},"`.tab-content .item:nth-child(${",[91,64871,690],{"class":250},[91,64873,45647],{"class":153},[91,64875,25240],{"class":105},[91,64877,57113],{"class":101},[91,64879,57084],{"class":250},[91,64881,5457],{"class":97},[91,64883,251],{"class":250},[91,64885,64795],{"class":101},[91,64887,257],{"class":250},[91,64889,64890],{"class":93,"line":32828},[91,64891,2523],{"emptyLinePlaceholder":175},[91,64893,64894],{"class":93,"line":32834},[91,64895,64896],{"class":250},"      })\n",[91,64898,64899],{"class":93,"line":32854},[91,64900,2310],{"class":250},[91,64902,64903,64905,64907],{"class":93,"line":32860},[91,64904,52498],{"class":250},[91,64906,51894],{"class":51381},[91,64908,51388],{"class":250},[91,64910,64911,64913,64915],{"class":93,"line":32876},[91,64912,51866],{"class":250},[91,64914,51881],{"class":51381},[91,64916,51388],{"class":250},[91,64918,64919],{"class":93,"line":32882},[91,64920,2523],{"emptyLinePlaceholder":175},[91,64922,64923,64925,64927],{"class":93,"line":32896},[91,64924,51866],{"class":250},[91,64926,50716],{"class":51381},[91,64928,51388],{"class":250},[21,64930,64931],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[21,64933,64934],{},"在监听事件中，this指向的就是他的调用者",[21,64936,64937],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[21,64939,53801],{},[21,64941,64942],{},"(function () {",[21,64944,64945],{},"const list = document.querySelector('.xtx-elevator-list')",[21,64947,64948],{},"list.addEventListener('click', function (e) {",[21,64950,64951],{},"if (e.target.tagName === 'A') {",[21,64953,64954],{},"\u002F\u002F 排他思想",[21,64956,64957],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[21,64959,64960],{},"const old = document.querySelector('.xtx-elevator-list .active')",[21,64962,64963],{},"\u002F\u002F console.log(old);",[21,64965,64966],{},"\u002F\u002F 判断",[21,64968,64969],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[21,64971,64972],{},"if (old) old.classList.remove('active')",[21,64974,64975],{},"e.target.classList.add('active')",[21,64977,1195],{},[21,64979,52545],{},[21,64981,64982],{},"})();",[217,64984,64986],{"id":64985},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[82,64988,64990],{"className":50714,"code":64989,"language":50716,"meta":26,"style":26},"\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",[88,64991,64992,65002,65006,65014,65018,65032,65046,65058,65066,65072,65082,65092,65096,65100,65107,65119,65130,65147,65160,65174,65184,65188,65192,65199,65210,65228,65238,65250,65254,65258,65265,65282,65293,65305,65309,65313,65320,65332,65336,65344,65352,65356,65364,65372,65380,65395,65439,65447,65460,65473,65486,65494,65502,65510,65538,65546,65558,65571,65584,65592,65600,65608,65634,65642,65655,65667,65680,65688,65696,65704,65730,65738,65751,65763,65776,65784,65792,65800,65805,65825,65830,65850,65855,65872,65877,65885,65890,65919,65932,65936,65940,65945,65949,65977,65982,65999,66004,66009,66014,66019,66045,66049,66053,66061,66069,66073],{"__ignoreMap":26},[91,64993,64994,64996,64998,65000],{"class":93,"line":94},[91,64995,51378],{"class":250},[91,64997,51382],{"class":51381},[91,64999,51385],{"class":97},[91,65001,51388],{"class":250},[91,65003,65004],{"class":93,"line":38},[91,65005,2523],{"emptyLinePlaceholder":175},[91,65007,65008,65010,65012],{"class":93,"line":1304},[91,65009,1159],{"class":250},[91,65011,50716],{"class":51381},[91,65013,51388],{"class":250},[91,65015,65016],{"class":93,"line":1319},[91,65017,2523],{"emptyLinePlaceholder":175},[91,65019,65020,65022,65024,65026,65028,65030],{"class":93,"line":1325},[91,65021,1159],{"class":250},[91,65023,51415],{"class":51381},[91,65025,51397],{"class":97},[91,65027,296],{"class":250},[91,65029,51402],{"class":101},[91,65031,51388],{"class":250},[91,65033,65034,65036,65038,65040,65042,65044],{"class":93,"line":1339},[91,65035,52225],{"class":250},[91,65037,51425],{"class":51381},[91,65039,51428],{"class":97},[91,65041,296],{"class":250},[91,65043,51433],{"class":101},[91,65045,51388],{"class":250},[91,65047,65048,65050,65052,65054,65056],{"class":93,"line":1345},[91,65049,52225],{"class":250},[91,65051,51488],{"class":51381},[91,65053,55395],{"class":250},[91,65055,51488],{"class":51381},[91,65057,51388],{"class":250},[91,65059,65060,65062,65064],{"class":93,"line":1436},[91,65061,52225],{"class":250},[91,65063,168],{"class":51381},[91,65065,51388],{"class":250},[91,65067,65068,65070],{"class":93,"line":1442},[91,65069,6526],{"class":51381},[91,65071,15695],{"class":250},[91,65073,65074,65076,65078,65080],{"class":93,"line":1454},[91,65075,54787],{"class":105},[91,65077,51518],{"class":250},[91,65079,440],{"class":105},[91,65081,1415],{"class":250},[91,65083,65084,65086,65088,65090],{"class":93,"line":1736},[91,65085,54776],{"class":105},[91,65087,51518],{"class":250},[91,65089,440],{"class":105},[91,65091,1415],{"class":250},[91,65093,65094],{"class":93,"line":1741},[91,65095,2310],{"class":250},[91,65097,65098],{"class":93,"line":1747},[91,65099,2523],{"emptyLinePlaceholder":175},[91,65101,65102,65105],{"class":93,"line":1752},[91,65103,65104],{"class":51381},"    table",[91,65106,15695],{"class":250},[91,65108,65109,65112,65114,65117],{"class":93,"line":1766},[91,65110,65111],{"class":105},"      border-collapse",[91,65113,51518],{"class":250},[91,65115,65116],{"class":105},"collapse",[91,65118,1415],{"class":250},[91,65120,65121,65124,65126,65128],{"class":93,"line":1771},[91,65122,65123],{"class":105},"      border-spacing",[91,65125,51518],{"class":250},[91,65127,440],{"class":105},[91,65129,1415],{"class":250},[91,65131,65132,65134,65136,65138,65140,65142,65145],{"class":93,"line":1777},[91,65133,62058],{"class":105},[91,65135,51518],{"class":250},[91,65137,466],{"class":105},[91,65139,51573],{"class":153},[91,65141,51602],{"class":105},[91,65143,65144],{"class":105}," #c0c0c0",[91,65146,1415],{"class":250},[91,65148,65149,65151,65153,65156,65158],{"class":93,"line":1798},[91,65150,54852],{"class":105},[91,65152,51518],{"class":250},[91,65154,65155],{"class":105},"500",[91,65157,51573],{"class":153},[91,65159,1415],{"class":250},[91,65161,65162,65164,65166,65168,65170,65172],{"class":93,"line":1803},[91,65163,54787],{"class":105},[91,65165,51518],{"class":250},[91,65167,560],{"class":105},[91,65169,51573],{"class":153},[91,65171,51637],{"class":105},[91,65173,1415],{"class":250},[91,65175,65176,65178,65180,65182],{"class":93,"line":1817},[91,65177,57367],{"class":105},[91,65179,51518],{"class":250},[91,65181,51673],{"class":105},[91,65183,1415],{"class":250},[91,65185,65186],{"class":93,"line":1822},[91,65187,2310],{"class":250},[91,65189,65190],{"class":93,"line":1851},[91,65191,2523],{"emptyLinePlaceholder":175},[91,65193,65194,65197],{"class":93,"line":1856},[91,65195,65196],{"class":51381},"    th",[91,65198,15695],{"class":250},[91,65200,65201,65203,65205,65208],{"class":93,"line":1873},[91,65202,54965],{"class":105},[91,65204,51518],{"class":250},[91,65206,65207],{"class":105},"#09c",[91,65209,1415],{"class":250},[91,65211,65212,65215,65217,65219,65221,65223,65226],{"class":93,"line":1878},[91,65213,65214],{"class":105},"      font",[91,65216,51518],{"class":250},[91,65218,62420],{"class":105},[91,65220,64154],{"class":105},[91,65222,51573],{"class":153},[91,65224,65225],{"class":101}," \"微软雅黑\"",[91,65227,1415],{"class":250},[91,65229,65230,65232,65234,65236],{"class":93,"line":1883},[91,65231,57497],{"class":105},[91,65233,51518],{"class":250},[91,65235,60923],{"class":105},[91,65237,1415],{"class":250},[91,65239,65240,65242,65244,65246,65248],{"class":93,"line":1888},[91,65241,54866],{"class":105},[91,65243,51518],{"class":250},[91,65245,1049],{"class":105},[91,65247,51573],{"class":153},[91,65249,1415],{"class":250},[91,65251,65252],{"class":93,"line":1902},[91,65253,2310],{"class":250},[91,65255,65256],{"class":93,"line":1907},[91,65257,2523],{"emptyLinePlaceholder":175},[91,65259,65260,65263],{"class":93,"line":2700},[91,65261,65262],{"class":51381},"    td",[91,65264,15695],{"class":250},[91,65266,65267,65269,65271,65273,65275,65277,65280],{"class":93,"line":2714},[91,65268,62058],{"class":105},[91,65270,51518],{"class":250},[91,65272,466],{"class":105},[91,65274,51573],{"class":153},[91,65276,51602],{"class":105},[91,65278,65279],{"class":105}," #d0d0d0",[91,65281,1415],{"class":250},[91,65283,65284,65286,65288,65291],{"class":93,"line":2722},[91,65285,57497],{"class":105},[91,65287,51518],{"class":250},[91,65289,65290],{"class":105},"#404060",[91,65292,1415],{"class":250},[91,65294,65295,65297,65299,65301,65303],{"class":93,"line":2727},[91,65296,54776],{"class":105},[91,65298,51518],{"class":250},[91,65300,695],{"class":105},[91,65302,51573],{"class":153},[91,65304,1415],{"class":250},[91,65306,65307],{"class":93,"line":2733},[91,65308,2310],{"class":250},[91,65310,65311],{"class":93,"line":2739},[91,65312,2523],{"emptyLinePlaceholder":175},[91,65314,65315,65318],{"class":93,"line":2744},[91,65316,65317],{"class":97},"    .allCheck",[91,65319,15695],{"class":250},[91,65321,65322,65324,65326,65328,65330],{"class":93,"line":8071},[91,65323,54852],{"class":105},[91,65325,51518],{"class":250},[91,65327,861],{"class":105},[91,65329,51573],{"class":153},[91,65331,1415],{"class":250},[91,65333,65334],{"class":93,"line":8095},[91,65335,2310],{"class":250},[91,65337,65338,65340,65342],{"class":93,"line":8100},[91,65339,52498],{"class":250},[91,65341,168],{"class":51381},[91,65343,51388],{"class":250},[91,65345,65346,65348,65350],{"class":93,"line":8106},[91,65347,51866],{"class":250},[91,65349,51415],{"class":51381},[91,65351,51388],{"class":250},[91,65353,65354],{"class":93,"line":8133},[91,65355,2523],{"emptyLinePlaceholder":175},[91,65357,65358,65360,65362],{"class":93,"line":8138},[91,65359,1159],{"class":250},[91,65361,51881],{"class":51381},[91,65363,51388],{"class":250},[91,65365,65366,65368,65370],{"class":93,"line":8144},[91,65367,52225],{"class":250},[91,65369,386],{"class":51381},[91,65371,51388],{"class":250},[91,65373,65374,65376,65378],{"class":93,"line":8156},[91,65375,51422],{"class":250},[91,65377,392],{"class":51381},[91,65379,51388],{"class":250},[91,65381,65382,65384,65386,65388,65390,65393],{"class":93,"line":8168},[91,65383,55315],{"class":250},[91,65385,395],{"class":51381},[91,65387,53567],{"class":97},[91,65389,296],{"class":250},[91,65391,65392],{"class":101},"\"allCheck\"",[91,65394,51388],{"class":250},[91,65396,65397,65399,65401,65403,65405,65407,65409,65411,65413,65415,65417,65420,65423,65425,65427,65429,65432,65435,65437],{"class":93,"line":8180},[91,65398,55383],{"class":250},[91,65400,53902],{"class":51381},[91,65402,53905],{"class":97},[91,65404,296],{"class":250},[91,65406,53910],{"class":101},[91,65408,15043],{"class":97},[91,65410,296],{"class":250},[91,65412,7775],{"class":101},[91,65414,15082],{"class":97},[91,65416,296],{"class":250},[91,65418,65419],{"class":101},"\"checkAll\"",[91,65421,65422],{"class":250},"> \u003C",[91,65424,91],{"class":51381},[91,65426,53567],{"class":97},[91,65428,296],{"class":250},[91,65430,65431],{"class":101},"\"all\"",[91,65433,65434],{"class":250},">全选\u003C\u002F",[91,65436,91],{"class":51381},[91,65438,51388],{"class":250},[91,65440,65441,65443,65445],{"class":93,"line":9839},[91,65442,55488],{"class":250},[91,65444,395],{"class":51381},[91,65446,51388],{"class":250},[91,65448,65449,65451,65453,65456,65458],{"class":93,"line":9864},[91,65450,55315],{"class":250},[91,65452,395],{"class":51381},[91,65454,65455],{"class":250},">商品\u003C\u002F",[91,65457,395],{"class":51381},[91,65459,51388],{"class":250},[91,65461,65462,65464,65466,65469,65471],{"class":93,"line":9887},[91,65463,55315],{"class":250},[91,65465,395],{"class":51381},[91,65467,65468],{"class":250},">商家\u003C\u002F",[91,65470,395],{"class":51381},[91,65472,51388],{"class":250},[91,65474,65475,65477,65479,65482,65484],{"class":93,"line":9911},[91,65476,55315],{"class":250},[91,65478,395],{"class":51381},[91,65480,65481],{"class":250},">价格\u003C\u002F",[91,65483,395],{"class":51381},[91,65485,51388],{"class":250},[91,65487,65488,65490,65492],{"class":93,"line":9916},[91,65489,51857],{"class":250},[91,65491,392],{"class":51381},[91,65493,51388],{"class":250},[91,65495,65496,65498,65500],{"class":93,"line":9921},[91,65497,51422],{"class":250},[91,65499,392],{"class":51381},[91,65501,51388],{"class":250},[91,65503,65504,65506,65508],{"class":93,"line":9926},[91,65505,55315],{"class":250},[91,65507,438],{"class":51381},[91,65509,51388],{"class":250},[91,65511,65512,65514,65516,65518,65520,65522,65524,65526,65529,65531,65533,65536],{"class":93,"line":9935},[91,65513,55383],{"class":250},[91,65515,53902],{"class":51381},[91,65517,53905],{"class":97},[91,65519,296],{"class":250},[91,65521,53910],{"class":101},[91,65523,15043],{"class":97},[91,65525,296],{"class":250},[91,65527,65528],{"class":101},"\"check\"",[91,65530,53567],{"class":97},[91,65532,296],{"class":250},[91,65534,65535],{"class":101},"\"ck\"",[91,65537,51388],{"class":250},[91,65539,65540,65542,65544],{"class":93,"line":9940},[91,65541,55488],{"class":250},[91,65543,438],{"class":51381},[91,65545,51388],{"class":250},[91,65547,65548,65550,65552,65554,65556],{"class":93,"line":9946},[91,65549,55315],{"class":250},[91,65551,438],{"class":51381},[91,65553,61254],{"class":250},[91,65555,438],{"class":51381},[91,65557,51388],{"class":250},[91,65559,65560,65562,65564,65567,65569],{"class":93,"line":9967},[91,65561,55315],{"class":250},[91,65563,438],{"class":51381},[91,65565,65566],{"class":250},">小米\u003C\u002F",[91,65568,438],{"class":51381},[91,65570,51388],{"class":250},[91,65572,65573,65575,65577,65580,65582],{"class":93,"line":9973},[91,65574,55315],{"class":250},[91,65576,438],{"class":51381},[91,65578,65579],{"class":250},">￥1999\u003C\u002F",[91,65581,438],{"class":51381},[91,65583,51388],{"class":250},[91,65585,65586,65588,65590],{"class":93,"line":9987},[91,65587,51857],{"class":250},[91,65589,392],{"class":51381},[91,65591,51388],{"class":250},[91,65593,65594,65596,65598],{"class":93,"line":9993},[91,65595,51422],{"class":250},[91,65597,392],{"class":51381},[91,65599,51388],{"class":250},[91,65601,65602,65604,65606],{"class":93,"line":10020},[91,65603,55315],{"class":250},[91,65605,438],{"class":51381},[91,65607,51388],{"class":250},[91,65609,65610,65612,65614,65616,65618,65620,65622,65624,65626,65628,65630,65632],{"class":93,"line":10029},[91,65611,55383],{"class":250},[91,65613,53902],{"class":51381},[91,65615,53905],{"class":97},[91,65617,296],{"class":250},[91,65619,53910],{"class":101},[91,65621,15043],{"class":97},[91,65623,296],{"class":250},[91,65625,65528],{"class":101},[91,65627,53567],{"class":97},[91,65629,296],{"class":250},[91,65631,65535],{"class":101},[91,65633,51388],{"class":250},[91,65635,65636,65638,65640],{"class":93,"line":10035},[91,65637,55488],{"class":250},[91,65639,438],{"class":51381},[91,65641,51388],{"class":250},[91,65643,65644,65646,65648,65651,65653],{"class":93,"line":10043},[91,65645,55315],{"class":250},[91,65647,438],{"class":51381},[91,65649,65650],{"class":250},">小米净水器\u003C\u002F",[91,65652,438],{"class":51381},[91,65654,51388],{"class":250},[91,65656,65657,65659,65661,65663,65665],{"class":93,"line":10048},[91,65658,55315],{"class":250},[91,65660,438],{"class":51381},[91,65662,65566],{"class":250},[91,65664,438],{"class":51381},[91,65666,51388],{"class":250},[91,65668,65669,65671,65673,65676,65678],{"class":93,"line":16727},[91,65670,55315],{"class":250},[91,65672,438],{"class":51381},[91,65674,65675],{"class":250},">￥4999\u003C\u002F",[91,65677,438],{"class":51381},[91,65679,51388],{"class":250},[91,65681,65682,65684,65686],{"class":93,"line":16733},[91,65683,51857],{"class":250},[91,65685,392],{"class":51381},[91,65687,51388],{"class":250},[91,65689,65690,65692,65694],{"class":93,"line":16756},[91,65691,51422],{"class":250},[91,65693,392],{"class":51381},[91,65695,51388],{"class":250},[91,65697,65698,65700,65702],{"class":93,"line":16762},[91,65699,55315],{"class":250},[91,65701,438],{"class":51381},[91,65703,51388],{"class":250},[91,65705,65706,65708,65710,65712,65714,65716,65718,65720,65722,65724,65726,65728],{"class":93,"line":16785},[91,65707,55383],{"class":250},[91,65709,53902],{"class":51381},[91,65711,53905],{"class":97},[91,65713,296],{"class":250},[91,65715,53910],{"class":101},[91,65717,15043],{"class":97},[91,65719,296],{"class":250},[91,65721,65528],{"class":101},[91,65723,53567],{"class":97},[91,65725,296],{"class":250},[91,65727,65535],{"class":101},[91,65729,51388],{"class":250},[91,65731,65732,65734,65736],{"class":93,"line":16799},[91,65733,55488],{"class":250},[91,65735,438],{"class":51381},[91,65737,51388],{"class":250},[91,65739,65740,65742,65744,65747,65749],{"class":93,"line":16819},[91,65741,55315],{"class":250},[91,65743,438],{"class":51381},[91,65745,65746],{"class":250},">小米电视\u003C\u002F",[91,65748,438],{"class":51381},[91,65750,51388],{"class":250},[91,65752,65753,65755,65757,65759,65761],{"class":93,"line":16825},[91,65754,55315],{"class":250},[91,65756,438],{"class":51381},[91,65758,65566],{"class":250},[91,65760,438],{"class":51381},[91,65762,51388],{"class":250},[91,65764,65765,65767,65769,65772,65774],{"class":93,"line":16836},[91,65766,55315],{"class":250},[91,65768,438],{"class":51381},[91,65770,65771],{"class":250},">￥5999\u003C\u002F",[91,65773,438],{"class":51381},[91,65775,51388],{"class":250},[91,65777,65778,65780,65782],{"class":93,"line":16859},[91,65779,51857],{"class":250},[91,65781,392],{"class":51381},[91,65783,51388],{"class":250},[91,65785,65786,65788,65790],{"class":93,"line":16881},[91,65787,52498],{"class":250},[91,65789,386],{"class":51381},[91,65791,51388],{"class":250},[91,65793,65794,65796,65798],{"class":93,"line":16886},[91,65795,52225],{"class":250},[91,65797,51894],{"class":51381},[91,65799,51388],{"class":250},[91,65801,65802],{"class":93,"line":16892},[91,65803,65804],{"class":308},"    \u002F\u002F 1. 获取大复选框\n",[91,65806,65807,65809,65812,65814,65816,65818,65820,65823],{"class":93,"line":16906},[91,65808,11344],{"class":153},[91,65810,65811],{"class":105}," checkAll",[91,65813,13687],{"class":153},[91,65815,54477],{"class":250},[91,65817,54480],{"class":97},[91,65819,251],{"class":250},[91,65821,65822],{"class":101},"'#checkAll'",[91,65824,257],{"class":250},[91,65826,65827],{"class":93,"line":16919},[91,65828,65829],{"class":308},"    \u002F\u002F 2. 获取所有的小复选框\n",[91,65831,65832,65834,65837,65839,65841,65843,65845,65848],{"class":93,"line":16924},[91,65833,11344],{"class":153},[91,65835,65836],{"class":105}," cks",[91,65838,13687],{"class":153},[91,65840,54477],{"class":250},[91,65842,55762],{"class":97},[91,65844,251],{"class":250},[91,65846,65847],{"class":101},"'.ck'",[91,65849,257],{"class":250},[91,65851,65852],{"class":93,"line":16938},[91,65853,65854],{"class":308},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[91,65856,65857,65860,65862,65864,65866,65868,65870],{"class":93,"line":16943},[91,65858,65859],{"class":250},"    checkAll.",[91,65861,57894],{"class":97},[91,65863,251],{"class":250},[91,65865,57899],{"class":101},[91,65867,12558],{"class":250},[91,65869,54530],{"class":153},[91,65871,54533],{"class":250},[91,65873,65874],{"class":93,"line":16949},[91,65875,65876],{"class":308},"      \u002F\u002F 得到当前大复选框的选中状态\n",[91,65878,65879,65882],{"class":93,"line":16954},[91,65880,65881],{"class":308},"      \u002F\u002F console.log(checkAll.checked)",[91,65883,65884],{"class":308},"  \u002F\u002F 得到 是 true 或者是 false\n",[91,65886,65887],{"class":93,"line":16968},[91,65888,65889],{"class":308},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[91,65891,65892,65894,65896,65898,65900,65902,65904,65906,65908,65911,65913,65915,65917],{"class":93,"line":16973},[91,65893,52365],{"class":153},[91,65895,1782],{"class":250},[91,65897,51928],{"class":153},[91,65899,9561],{"class":250},[91,65901,296],{"class":153},[91,65903,4216],{"class":105},[91,65905,9568],{"class":250},[91,65907,1159],{"class":153},[91,65909,65910],{"class":250}," cks.",[91,65912,52049],{"class":105},[91,65914,3337],{"class":250},[91,65916,2415],{"class":153},[91,65918,12565],{"class":250},[91,65920,65921,65924,65926,65929],{"class":93,"line":16978},[91,65922,65923],{"class":250},"        cks[i].checked ",[91,65925,296],{"class":153},[91,65927,65928],{"class":105}," this",[91,65930,65931],{"class":250},".checked\n",[91,65933,65934],{"class":93,"line":16992},[91,65935,52479],{"class":250},[91,65937,65938],{"class":93,"line":17004},[91,65939,33542],{"class":250},[91,65941,65942],{"class":93,"line":17009},[91,65943,65944],{"class":308},"    \u002F\u002F 5. 小复选框控制大复选框\n",[91,65946,65947],{"class":93,"line":17022},[91,65948,2523],{"emptyLinePlaceholder":175},[91,65950,65951,65953,65955,65957,65959,65961,65963,65965,65967,65969,65971,65973,65975],{"class":93,"line":17027},[91,65952,3324],{"class":153},[91,65954,1782],{"class":250},[91,65956,51928],{"class":153},[91,65958,9561],{"class":250},[91,65960,296],{"class":153},[91,65962,4216],{"class":105},[91,65964,9568],{"class":250},[91,65966,1159],{"class":153},[91,65968,65910],{"class":250},[91,65970,52049],{"class":105},[91,65972,3337],{"class":250},[91,65974,2415],{"class":153},[91,65976,12565],{"class":250},[91,65978,65979],{"class":93,"line":17032},[91,65980,65981],{"class":308},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[91,65983,65984,65987,65989,65991,65993,65995,65997],{"class":93,"line":17037},[91,65985,65986],{"class":250},"      cks[i].",[91,65988,57894],{"class":97},[91,65990,251],{"class":250},[91,65992,57899],{"class":101},[91,65994,12558],{"class":250},[91,65996,54530],{"class":153},[91,65998,54533],{"class":250},[91,66000,66001],{"class":93,"line":17050},[91,66002,66003],{"class":308},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[91,66005,66006],{"class":93,"line":17055},[91,66007,66008],{"class":308},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[91,66010,66011],{"class":93,"line":32714},[91,66012,66013],{"class":308},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[91,66015,66016],{"class":93,"line":32720},[91,66017,66018],{"class":308},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[91,66020,66021,66024,66026,66028,66030,66032,66035,66037,66039,66041,66043],{"class":93,"line":32726},[91,66022,66023],{"class":250},"        checkAll.checked ",[91,66025,296],{"class":153},[91,66027,54477],{"class":250},[91,66029,55762],{"class":97},[91,66031,251],{"class":250},[91,66033,66034],{"class":101},"'.ck:checked'",[91,66036,30907],{"class":250},[91,66038,52049],{"class":105},[91,66040,57987],{"class":153},[91,66042,65910],{"class":250},[91,66044,55912],{"class":105},[91,66046,66047],{"class":93,"line":32732},[91,66048,64896],{"class":250},[91,66050,66051],{"class":93,"line":32738},[91,66052,2310],{"class":250},[91,66054,66055,66057,66059],{"class":93,"line":32749},[91,66056,52498],{"class":250},[91,66058,51894],{"class":51381},[91,66060,51388],{"class":250},[91,66062,66063,66065,66067],{"class":93,"line":32755},[91,66064,51866],{"class":250},[91,66066,51881],{"class":51381},[91,66068,51388],{"class":250},[91,66070,66071],{"class":93,"line":32775},[91,66072,2523],{"emptyLinePlaceholder":175},[91,66074,66075,66077,66079],{"class":93,"line":32781},[91,66076,51866],{"class":250},[91,66078,50716],{"class":51381},[91,66080,51388],{"class":250},[21,66082,66083],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[21,66085,66086],{},"用好之间比较得到的布尔值！！！",[21,66088,66089,66090,66093,66094,1782,66097,833,66099,66102],{},"在 JS 里访问的时候，",[88,66091,66092],{},"checkbox.checked"," 是一个 ",[398,66095,66096],{},"布尔值",[88,66098,1487],{},[88,66100,66101],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[21,66104,66105,66106,66109,66110],{},"HTML 的 ",[88,66107,66108],{},"checked=\"checked\""," 只是 ",[398,66111,66112,66113,66116],{},"初始值；JS 的 ",[88,66114,66115],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[21,66118,66119],{},"：checked是一个伪类选择器",[21,66121,66122],{},[24,66123],{"alt":26,"src":66124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[21,66126,66127,66130],{},[66128,66129],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[21,66132,66133],{},[24,66134],{"alt":26,"src":66135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[190,66137,66139],{"id":66138},"_33-dom事件进阶","3.3 DOM事件进阶",[217,66141,66143],{"id":66142},"_331-事件流","3.3.1 事件流",[21,66145,66146],{},[24,66147],{"alt":26,"src":66148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22121,66150,66152],{"id":66151},"_3311-事件捕获","3.3.1.1 事件捕获",[21,66154,66155],{},[24,66156],{"alt":26,"src":66157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[82,66159,66161],{"className":50714,"code":66160,"language":50716,"meta":26,"style":26},"\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",[88,66162,66163,66173,66187,66191,66199,66213,66233,66245,66253,66260,66272,66284,66294,66298,66302,66309,66321,66333,66343,66347,66355,66363,66367,66375,66390,66409,66417,66425,66445,66465,66481,66492,66500,66517,66528,66536,66553,66564,66572,66580,66588,66592],{"__ignoreMap":26},[91,66164,66165,66167,66169,66171],{"class":93,"line":94},[91,66166,51378],{"class":250},[91,66168,51382],{"class":51381},[91,66170,51385],{"class":97},[91,66172,51388],{"class":250},[91,66174,66175,66177,66179,66181,66183,66185],{"class":93,"line":38},[91,66176,1159],{"class":250},[91,66178,50716],{"class":51381},[91,66180,51397],{"class":97},[91,66182,296],{"class":250},[91,66184,51402],{"class":101},[91,66186,51388],{"class":250},[91,66188,66189],{"class":93,"line":1304},[91,66190,2523],{"emptyLinePlaceholder":175},[91,66192,66193,66195,66197],{"class":93,"line":1319},[91,66194,1159],{"class":250},[91,66196,51415],{"class":51381},[91,66198,51388],{"class":250},[91,66200,66201,66203,66205,66207,66209,66211],{"class":93,"line":1325},[91,66202,52225],{"class":250},[91,66204,51425],{"class":51381},[91,66206,51428],{"class":97},[91,66208,296],{"class":250},[91,66210,51433],{"class":101},[91,66212,51388],{"class":250},[91,66214,66215,66217,66219,66221,66223,66225,66227,66229,66231],{"class":93,"line":1339},[91,66216,52225],{"class":250},[91,66218,51425],{"class":51381},[91,66220,15043],{"class":97},[91,66222,296],{"class":250},[91,66224,51472],{"class":101},[91,66226,51452],{"class":97},[91,66228,296],{"class":250},[91,66230,51479],{"class":101},[91,66232,51388],{"class":250},[91,66234,66235,66237,66239,66241,66243],{"class":93,"line":1345},[91,66236,52225],{"class":250},[91,66238,51488],{"class":51381},[91,66240,51491],{"class":250},[91,66242,51488],{"class":51381},[91,66244,51388],{"class":250},[91,66246,66247,66249,66251],{"class":93,"line":1436},[91,66248,52225],{"class":250},[91,66250,168],{"class":51381},[91,66252,51388],{"class":250},[91,66254,66255,66258],{"class":93,"line":1442},[91,66256,66257],{"class":97},"    .father",[91,66259,15695],{"class":250},[91,66261,66262,66264,66266,66268,66270],{"class":93,"line":1454},[91,66263,54852],{"class":105},[91,66265,51518],{"class":250},[91,66267,65155],{"class":105},[91,66269,51573],{"class":153},[91,66271,1415],{"class":250},[91,66273,66274,66276,66278,66280,66282],{"class":93,"line":1736},[91,66275,54866],{"class":105},[91,66277,51518],{"class":250},[91,66279,65155],{"class":105},[91,66281,51573],{"class":153},[91,66283,1415],{"class":250},[91,66285,66286,66288,66290,66292],{"class":93,"line":1741},[91,66287,54965],{"class":105},[91,66289,51518],{"class":250},[91,66291,51726],{"class":105},[91,66293,1415],{"class":250},[91,66295,66296],{"class":93,"line":1747},[91,66297,2310],{"class":250},[91,66299,66300],{"class":93,"line":1752},[91,66301,2523],{"emptyLinePlaceholder":175},[91,66303,66304,66307],{"class":93,"line":1766},[91,66305,66306],{"class":97},"    .son",[91,66308,15695],{"class":250},[91,66310,66311,66313,66315,66317,66319],{"class":93,"line":1771},[91,66312,54852],{"class":105},[91,66314,51518],{"class":250},[91,66316,1846],{"class":105},[91,66318,51573],{"class":153},[91,66320,1415],{"class":250},[91,66322,66323,66325,66327,66329,66331],{"class":93,"line":1777},[91,66324,54866],{"class":105},[91,66326,51518],{"class":250},[91,66328,1846],{"class":105},[91,66330,51573],{"class":153},[91,66332,1415],{"class":250},[91,66334,66335,66337,66339,66341],{"class":93,"line":1798},[91,66336,54965],{"class":105},[91,66338,51518],{"class":250},[91,66340,54970],{"class":105},[91,66342,1415],{"class":250},[91,66344,66345],{"class":93,"line":1803},[91,66346,2310],{"class":250},[91,66348,66349,66351,66353],{"class":93,"line":1817},[91,66350,52498],{"class":250},[91,66352,168],{"class":51381},[91,66354,51388],{"class":250},[91,66356,66357,66359,66361],{"class":93,"line":1822},[91,66358,51866],{"class":250},[91,66360,51415],{"class":51381},[91,66362,51388],{"class":250},[91,66364,66365],{"class":93,"line":1851},[91,66366,2523],{"emptyLinePlaceholder":175},[91,66368,66369,66371,66373],{"class":93,"line":1856},[91,66370,1159],{"class":250},[91,66372,51881],{"class":51381},[91,66374,51388],{"class":250},[91,66376,66377,66379,66381,66383,66385,66388],{"class":93,"line":1873},[91,66378,52225],{"class":250},[91,66380,51692],{"class":51381},[91,66382,53567],{"class":97},[91,66384,296],{"class":250},[91,66386,66387],{"class":101},"\"father\"",[91,66389,51388],{"class":250},[91,66391,66392,66394,66396,66398,66400,66403,66405,66407],{"class":93,"line":1878},[91,66393,51422],{"class":250},[91,66395,51692],{"class":51381},[91,66397,53567],{"class":97},[91,66399,296],{"class":250},[91,66401,66402],{"class":101},"\"son\"",[91,66404,55395],{"class":250},[91,66406,51692],{"class":51381},[91,66408,51388],{"class":250},[91,66410,66411,66413,66415],{"class":93,"line":1883},[91,66412,52498],{"class":250},[91,66414,51692],{"class":51381},[91,66416,51388],{"class":250},[91,66418,66419,66421,66423],{"class":93,"line":1888},[91,66420,52225],{"class":250},[91,66422,51894],{"class":51381},[91,66424,51388],{"class":250},[91,66426,66427,66429,66432,66434,66436,66438,66440,66443],{"class":93,"line":1902},[91,66428,11344],{"class":153},[91,66430,66431],{"class":105}," fa",[91,66433,13687],{"class":153},[91,66435,54477],{"class":250},[91,66437,54480],{"class":97},[91,66439,251],{"class":250},[91,66441,66442],{"class":101},"'.father'",[91,66444,257],{"class":250},[91,66446,66447,66449,66452,66454,66456,66458,66460,66463],{"class":93,"line":1907},[91,66448,11344],{"class":153},[91,66450,66451],{"class":105}," son",[91,66453,13687],{"class":153},[91,66455,54477],{"class":250},[91,66457,54480],{"class":97},[91,66459,251],{"class":250},[91,66461,66462],{"class":101},"'.son'",[91,66464,257],{"class":250},[91,66466,66467,66469,66471,66473,66475,66477,66479],{"class":93,"line":2700},[91,66468,52488],{"class":250},[91,66470,57894],{"class":97},[91,66472,251],{"class":250},[91,66474,57899],{"class":101},[91,66476,12558],{"class":250},[91,66478,54530],{"class":153},[91,66480,54533],{"class":250},[91,66482,66483,66485,66487,66490],{"class":93,"line":2714},[91,66484,59006],{"class":97},[91,66486,251],{"class":250},[91,66488,66489],{"class":101},"'woshiu1'",[91,66491,257],{"class":250},[91,66493,66494,66496,66498],{"class":93,"line":2722},[91,66495,54616],{"class":250},[91,66497,1487],{"class":105},[91,66499,257],{"class":250},[91,66501,66502,66505,66507,66509,66511,66513,66515],{"class":93,"line":2727},[91,66503,66504],{"class":250},"    fa.",[91,66506,57894],{"class":97},[91,66508,251],{"class":250},[91,66510,57899],{"class":101},[91,66512,12558],{"class":250},[91,66514,54530],{"class":153},[91,66516,54533],{"class":250},[91,66518,66519,66521,66523,66526],{"class":93,"line":2733},[91,66520,59006],{"class":97},[91,66522,251],{"class":250},[91,66524,66525],{"class":101},"'1'",[91,66527,257],{"class":250},[91,66529,66530,66532,66534],{"class":93,"line":2739},[91,66531,54616],{"class":250},[91,66533,1487],{"class":105},[91,66535,257],{"class":250},[91,66537,66538,66541,66543,66545,66547,66549,66551],{"class":93,"line":2744},[91,66539,66540],{"class":250},"    son.",[91,66542,57894],{"class":97},[91,66544,251],{"class":250},[91,66546,57899],{"class":101},[91,66548,12558],{"class":250},[91,66550,54530],{"class":153},[91,66552,54533],{"class":250},[91,66554,66555,66557,66559,66562],{"class":93,"line":8071},[91,66556,59006],{"class":97},[91,66558,251],{"class":250},[91,66560,66561],{"class":101},"'2'",[91,66563,257],{"class":250},[91,66565,66566,66568,66570],{"class":93,"line":8095},[91,66567,54616],{"class":250},[91,66569,1487],{"class":105},[91,66571,257],{"class":250},[91,66573,66574,66576,66578],{"class":93,"line":8100},[91,66575,52498],{"class":250},[91,66577,51894],{"class":51381},[91,66579,51388],{"class":250},[91,66581,66582,66584,66586],{"class":93,"line":8106},[91,66583,51866],{"class":250},[91,66585,51881],{"class":51381},[91,66587,51388],{"class":250},[91,66589,66590],{"class":93,"line":8133},[91,66591,2523],{"emptyLinePlaceholder":175},[91,66593,66594,66596,66598],{"class":93,"line":8138},[91,66595,51866],{"class":250},[91,66597,50716],{"class":51381},[91,66599,51388],{"class":250},[21,66601,66602],{},[24,66603],{"alt":26,"src":66604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[21,66606,66607],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22121,66609,66611],{"id":66610},"_3312-事件冒泡","3.3.1.2 事件冒泡",[21,66613,66614],{},[24,66615],{"alt":26,"src":66616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[21,66618,66619],{},"反着来",[21,66621,66622],{},"注意是同名事件，比如都是‘click’",[22121,66624,66626],{"id":66625},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[21,66628,66629],{},[24,66630],{"alt":26,"src":66631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22121,66633,66635],{"id":66634},"_3314-解绑事件","3.3.1.4 解绑事件",[21,66637,66638],{},[24,66639],{"alt":26,"src":66640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[21,66642,66643],{},[24,66644],{"alt":26,"src":66645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22121,66647,66649],{"id":66648},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[14,66651,66652],{},[17,66653,66654],{},"事件类型的区别",[21,66656,66657],{},[24,66658],{"alt":26,"src":66659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[21,66661,66662],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[14,66664,66665],{"start":38},[17,66666,66667],{},"注册事件的区别",[21,66669,66670],{},[24,66671],{"alt":26,"src":66672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22121,66674,66676],{"id":66675},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[21,66678,66679],{},[24,66680],{"alt":26,"src":66681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[21,66683,66684],{},[24,66685],{"alt":26,"src":66686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[82,66688,66690],{"className":53148,"code":66689,"language":53150,"meta":26,"style":26},"\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",[88,66691,66692,66700,66717,66740,66748,66753,66758,66763,66767,66775,66783],{"__ignoreMap":26},[91,66693,66694,66696,66698],{"class":93,"line":94},[91,66695,1159],{"class":250},[91,66697,51881],{"class":51381},[91,66699,51388],{"class":250},[91,66701,66702,66704,66707,66710,66712,66715],{"class":93,"line":38},[91,66703,52225],{"class":250},[91,66705,66706],{"class":51381},"form",[91,66708,66709],{"class":97}," action",[91,66711,296],{"class":250},[91,66713,66714],{"class":101},"\"http:\u002F\u002Fwww.itcast.cn\"",[91,66716,51388],{"class":250},[91,66718,66719,66721,66723,66725,66727,66730,66733,66735,66738],{"class":93,"line":1304},[91,66720,51422],{"class":250},[91,66722,53902],{"class":51381},[91,66724,53905],{"class":97},[91,66726,296],{"class":250},[91,66728,66729],{"class":101},"\"submit\"",[91,66731,66732],{"class":97}," value",[91,66734,296],{"class":250},[91,66736,66737],{"class":101},"\"免费注册\"",[91,66739,51388],{"class":250},[91,66741,66742,66744,66746],{"class":93,"line":1319},[91,66743,51422],{"class":250},[91,66745,51894],{"class":51381},[91,66747,51388],{"class":250},[91,66749,66750],{"class":93,"line":1325},[91,66751,66752],{"class":250},"      const form = document.querySelector('form')\n",[91,66754,66755],{"class":93,"line":1339},[91,66756,66757],{"class":250},"      form.addEventListener('submit', function (e) {\n",[91,66759,66760],{"class":93,"line":1345},[91,66761,66762],{"class":250},"        e.preventDefault()\n",[91,66764,66765],{"class":93,"line":1436},[91,66766,64896],{"class":250},[91,66768,66769,66771,66773],{"class":93,"line":1442},[91,66770,51857],{"class":250},[91,66772,51894],{"class":51381},[91,66774,51388],{"class":250},[91,66776,66777,66779,66781],{"class":93,"line":1454},[91,66778,52498],{"class":250},[91,66780,66706],{"class":51381},[91,66782,51388],{"class":250},[91,66784,66785,66787,66789],{"class":93,"line":1736},[91,66786,51866],{"class":250},[91,66788,51881],{"class":51381},[91,66790,51388],{"class":250},[21,66792,66793],{},"点击不在跳转！！！",[217,66795,66797],{"id":66796},"_332-事件委托","3.3.2 事件委托",[21,66799,66800],{},[24,66801],{"alt":26,"src":66802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[82,66804,66806],{"className":50714,"code":66805,"language":50716,"meta":26,"style":26},"\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",[88,66807,66808,66818,66832,66836,66844,66858,66878,66890,66898,66902,66910,66918,66930,66942,66954,66966,66978,66991,66999,67007,67012,67031,67052,67057,67062,67067,67072,67081,67085,67095,67099,67104,67109,67123,67133,67137,67141,67149,67157,67161],{"__ignoreMap":26},[91,66809,66810,66812,66814,66816],{"class":93,"line":94},[91,66811,51378],{"class":250},[91,66813,51382],{"class":51381},[91,66815,51385],{"class":97},[91,66817,51388],{"class":250},[91,66819,66820,66822,66824,66826,66828,66830],{"class":93,"line":38},[91,66821,1159],{"class":250},[91,66823,50716],{"class":51381},[91,66825,51397],{"class":97},[91,66827,296],{"class":250},[91,66829,51402],{"class":101},[91,66831,51388],{"class":250},[91,66833,66834],{"class":93,"line":1304},[91,66835,2523],{"emptyLinePlaceholder":175},[91,66837,66838,66840,66842],{"class":93,"line":1319},[91,66839,1159],{"class":250},[91,66841,51415],{"class":51381},[91,66843,51388],{"class":250},[91,66845,66846,66848,66850,66852,66854,66856],{"class":93,"line":1325},[91,66847,52225],{"class":250},[91,66849,51425],{"class":51381},[91,66851,51428],{"class":97},[91,66853,296],{"class":250},[91,66855,51433],{"class":101},[91,66857,51388],{"class":250},[91,66859,66860,66862,66864,66866,66868,66870,66872,66874,66876],{"class":93,"line":1339},[91,66861,52225],{"class":250},[91,66863,51425],{"class":51381},[91,66865,15043],{"class":97},[91,66867,296],{"class":250},[91,66869,51472],{"class":101},[91,66871,51452],{"class":97},[91,66873,296],{"class":250},[91,66875,51479],{"class":101},[91,66877,51388],{"class":250},[91,66879,66880,66882,66884,66886,66888],{"class":93,"line":1345},[91,66881,52225],{"class":250},[91,66883,51488],{"class":51381},[91,66885,51491],{"class":250},[91,66887,51488],{"class":51381},[91,66889,51388],{"class":250},[91,66891,66892,66894,66896],{"class":93,"line":1436},[91,66893,51866],{"class":250},[91,66895,51415],{"class":51381},[91,66897,51388],{"class":250},[91,66899,66900],{"class":93,"line":1442},[91,66901,2523],{"emptyLinePlaceholder":175},[91,66903,66904,66906,66908],{"class":93,"line":1454},[91,66905,1159],{"class":250},[91,66907,51881],{"class":51381},[91,66909,51388],{"class":250},[91,66911,66912,66914,66916],{"class":93,"line":1736},[91,66913,52225],{"class":250},[91,66915,1256],{"class":51381},[91,66917,51388],{"class":250},[91,66919,66920,66922,66924,66926,66928],{"class":93,"line":1741},[91,66921,51422],{"class":250},[91,66923,17],{"class":51381},[91,66925,54047],{"class":250},[91,66927,17],{"class":51381},[91,66929,51388],{"class":250},[91,66931,66932,66934,66936,66938,66940],{"class":93,"line":1747},[91,66933,51422],{"class":250},[91,66935,17],{"class":51381},[91,66937,54066],{"class":250},[91,66939,17],{"class":51381},[91,66941,51388],{"class":250},[91,66943,66944,66946,66948,66950,66952],{"class":93,"line":1752},[91,66945,51422],{"class":250},[91,66947,17],{"class":51381},[91,66949,54085],{"class":250},[91,66951,17],{"class":51381},[91,66953,51388],{"class":250},[91,66955,66956,66958,66960,66962,66964],{"class":93,"line":1766},[91,66957,51422],{"class":250},[91,66959,17],{"class":51381},[91,66961,54104],{"class":250},[91,66963,17],{"class":51381},[91,66965,51388],{"class":250},[91,66967,66968,66970,66972,66974,66976],{"class":93,"line":1771},[91,66969,51422],{"class":250},[91,66971,17],{"class":51381},[91,66973,54123],{"class":250},[91,66975,17],{"class":51381},[91,66977,51388],{"class":250},[91,66979,66980,66982,66984,66987,66989],{"class":93,"line":1777},[91,66981,51422],{"class":250},[91,66983,21],{"class":51381},[91,66985,66986],{"class":250},">我不需要变色\u003C\u002F",[91,66988,21],{"class":51381},[91,66990,51388],{"class":250},[91,66992,66993,66995,66997],{"class":93,"line":1798},[91,66994,52498],{"class":250},[91,66996,1256],{"class":51381},[91,66998,51388],{"class":250},[91,67000,67001,67003,67005],{"class":93,"line":1803},[91,67002,52225],{"class":250},[91,67004,51894],{"class":51381},[91,67006,51388],{"class":250},[91,67008,67009],{"class":93,"line":1817},[91,67010,67011],{"class":308},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[91,67013,67014,67016,67018,67020,67022,67024,67026,67029],{"class":93,"line":1822},[91,67015,11344],{"class":153},[91,67017,61373],{"class":105},[91,67019,13687],{"class":153},[91,67021,54477],{"class":250},[91,67023,54480],{"class":97},[91,67025,251],{"class":250},[91,67027,67028],{"class":101},"'ul'",[91,67030,257],{"class":250},[91,67032,67033,67036,67038,67040,67042,67044,67046,67048,67050],{"class":93,"line":1851},[91,67034,67035],{"class":250},"    ul.",[91,67037,57894],{"class":97},[91,67039,251],{"class":250},[91,67041,57899],{"class":101},[91,67043,12558],{"class":250},[91,67045,54530],{"class":153},[91,67047,1782],{"class":250},[91,67049,324],{"class":5339},[91,67051,12565],{"class":250},[91,67053,67054],{"class":93,"line":1856},[91,67055,67056],{"class":308},"      \u002F\u002F alert(1)\n",[91,67058,67059],{"class":93,"line":1873},[91,67060,67061],{"class":308},"      \u002F\u002F e.target就是我们点击的对象\n",[91,67063,67064],{"class":93,"line":1878},[91,67065,67066],{"class":308},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[91,67068,67069],{"class":93,"line":1883},[91,67070,67071],{"class":308},"      \u002F\u002F e.target.style.color = 'red'\n",[91,67073,67074,67076,67078],{"class":93,"line":1888},[91,67075,58325],{"class":250},[91,67077,58328],{"class":97},[91,67079,67080],{"class":250},"(e)\n",[91,67082,67083],{"class":93,"line":1902},[91,67084,2523],{"emptyLinePlaceholder":175},[91,67086,67087,67089,67092],{"class":93,"line":1907},[91,67088,58325],{"class":250},[91,67090,67091],{"class":97},"dir",[91,67093,67094],{"class":250},"(e.target)\n",[91,67096,67097],{"class":93,"line":2700},[91,67098,2523],{"emptyLinePlaceholder":175},[91,67100,67101],{"class":93,"line":2714},[91,67102,67103],{"class":308},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[91,67105,67106],{"class":93,"line":2722},[91,67107,67108],{"class":308},"      \u002F\u002F 通过tagName来进行判断\n",[91,67110,67111,67113,67116,67118,67121],{"class":93,"line":2727},[91,67112,54561],{"class":153},[91,67114,67115],{"class":250}," (e.target.tagName ",[91,67117,54567],{"class":153},[91,67119,67120],{"class":101}," 'LI'",[91,67122,12565],{"class":250},[91,67124,67125,67128,67130],{"class":93,"line":2733},[91,67126,67127],{"class":250},"        e.target.style.color ",[91,67129,296],{"class":153},[91,67131,67132],{"class":101}," 'red'\n",[91,67134,67135],{"class":93,"line":2739},[91,67136,52479],{"class":250},[91,67138,67139],{"class":93,"line":2744},[91,67140,33542],{"class":250},[91,67142,67143,67145,67147],{"class":93,"line":8071},[91,67144,52498],{"class":250},[91,67146,51894],{"class":51381},[91,67148,51388],{"class":250},[91,67150,67151,67153,67155],{"class":93,"line":8095},[91,67152,51866],{"class":250},[91,67154,51881],{"class":51381},[91,67156,51388],{"class":250},[91,67158,67159],{"class":93,"line":8100},[91,67160,2523],{"emptyLinePlaceholder":175},[91,67162,67163,67165,67167],{"class":93,"line":8106},[91,67164,51866],{"class":250},[91,67166,50716],{"class":51381},[91,67168,51388],{"class":250},[21,67170,67171],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[21,67173,67174],{},"if(e.target.ragName==='P') {}",[21,67176,67177],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[21,67179,67180],{},"通过事件委托的方式实现tab栏切换改造：",[21,67182,67183],{},"一定要记住自定义属性！！！！！！",[21,67185,67186],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[21,67188,67189],{},"id是自定义的属性名",[21,67191,67192],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[82,67194,67196],{"className":50714,"code":67195,"language":50716,"meta":26,"style":26},"\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",[88,67197,67198,67208,67222,67226,67234,67248,67268,67288,67300,67308,67314,67324,67334,67338,67342,67348,67360,67372,67384,67400,67404,67408,67414,67426,67438,67450,67460,67470,67474,67478,67486,67498,67508,67520,67524,67528,67536,67546,67556,67566,67570,67574,67584,67598,67610,67614,67618,67630,67640,67656,67666,67670,67674,67688,67698,67708,67712,67716,67722,67736,67740,67744,67752,67762,67766,67770,67779,67789,67793,67801,67809,67813,67821,67835,67849,67861,67869,67908,67940,67972,68004,68036,68044,68052,68066,68100,68134,68168,68202,68236,68244,68252,68260,68265,68270,68289,68294,68314,68322,68327,68340,68361,68374,68378,68383,68388,68401,68421,68449,68453,68457,68461,68469,68477,68481],{"__ignoreMap":26},[91,67199,67200,67202,67204,67206],{"class":93,"line":94},[91,67201,51378],{"class":250},[91,67203,51382],{"class":51381},[91,67205,51385],{"class":97},[91,67207,51388],{"class":250},[91,67209,67210,67212,67214,67216,67218,67220],{"class":93,"line":38},[91,67211,1159],{"class":250},[91,67213,50716],{"class":51381},[91,67215,51397],{"class":97},[91,67217,296],{"class":250},[91,67219,51402],{"class":101},[91,67221,51388],{"class":250},[91,67223,67224],{"class":93,"line":1304},[91,67225,2523],{"emptyLinePlaceholder":175},[91,67227,67228,67230,67232],{"class":93,"line":1319},[91,67229,1159],{"class":250},[91,67231,51415],{"class":51381},[91,67233,51388],{"class":250},[91,67235,67236,67238,67240,67242,67244,67246],{"class":93,"line":1325},[91,67237,52225],{"class":250},[91,67239,51425],{"class":51381},[91,67241,51428],{"class":97},[91,67243,296],{"class":250},[91,67245,51433],{"class":101},[91,67247,59208],{"class":250},[91,67249,67250,67252,67254,67256,67258,67260,67262,67264,67266],{"class":93,"line":1339},[91,67251,52225],{"class":250},[91,67253,51425],{"class":51381},[91,67255,51444],{"class":97},[91,67257,296],{"class":250},[91,67259,51449],{"class":101},[91,67261,51452],{"class":97},[91,67263,296],{"class":250},[91,67265,51457],{"class":101},[91,67267,59208],{"class":250},[91,67269,67270,67272,67274,67276,67278,67280,67282,67284,67286],{"class":93,"line":1345},[91,67271,52225],{"class":250},[91,67273,51425],{"class":51381},[91,67275,15043],{"class":97},[91,67277,296],{"class":250},[91,67279,51472],{"class":101},[91,67281,51452],{"class":97},[91,67283,296],{"class":250},[91,67285,51479],{"class":101},[91,67287,59208],{"class":250},[91,67289,67290,67292,67294,67296,67298],{"class":93,"line":1436},[91,67291,52225],{"class":250},[91,67293,51488],{"class":51381},[91,67295,63706],{"class":250},[91,67297,51488],{"class":51381},[91,67299,51388],{"class":250},[91,67301,67302,67304,67306],{"class":93,"line":1442},[91,67303,52225],{"class":250},[91,67305,168],{"class":51381},[91,67307,51388],{"class":250},[91,67309,67310,67312],{"class":93,"line":1454},[91,67311,6526],{"class":51381},[91,67313,15695],{"class":250},[91,67315,67316,67318,67320,67322],{"class":93,"line":1736},[91,67317,54787],{"class":105},[91,67319,51518],{"class":250},[91,67321,440],{"class":105},[91,67323,1415],{"class":250},[91,67325,67326,67328,67330,67332],{"class":93,"line":1741},[91,67327,54776],{"class":105},[91,67329,51518],{"class":250},[91,67331,440],{"class":105},[91,67333,1415],{"class":250},[91,67335,67336],{"class":93,"line":1747},[91,67337,2310],{"class":250},[91,67339,67340],{"class":93,"line":1752},[91,67341,2523],{"emptyLinePlaceholder":175},[91,67343,67344,67346],{"class":93,"line":1766},[91,67345,63757],{"class":97},[91,67347,15695],{"class":250},[91,67349,67350,67352,67354,67356,67358],{"class":93,"line":1771},[91,67351,54852],{"class":105},[91,67353,51518],{"class":250},[91,67355,63768],{"class":105},[91,67357,51573],{"class":153},[91,67359,1415],{"class":250},[91,67361,67362,67364,67366,67368,67370],{"class":93,"line":1777},[91,67363,54866],{"class":105},[91,67365,51518],{"class":250},[91,67367,63781],{"class":105},[91,67369,51573],{"class":153},[91,67371,1415],{"class":250},[91,67373,67374,67376,67378,67380,67382],{"class":93,"line":1798},[91,67375,54787],{"class":105},[91,67377,51518],{"class":250},[91,67379,949],{"class":105},[91,67381,51573],{"class":153},[91,67383,1415],{"class":250},[91,67385,67386,67388,67390,67392,67394,67396,67398],{"class":93,"line":1803},[91,67387,62058],{"class":105},[91,67389,51518],{"class":250},[91,67391,466],{"class":105},[91,67393,51573],{"class":153},[91,67395,51602],{"class":105},[91,67397,62325],{"class":105},[91,67399,1415],{"class":250},[91,67401,67402],{"class":93,"line":1817},[91,67403,2310],{"class":250},[91,67405,67406],{"class":93,"line":1822},[91,67407,2523],{"emptyLinePlaceholder":175},[91,67409,67410,67412],{"class":93,"line":1851},[91,67411,63826],{"class":97},[91,67413,15695],{"class":250},[91,67415,67416,67418,67420,67422,67424],{"class":93,"line":1856},[91,67417,54852],{"class":105},[91,67419,51518],{"class":250},[91,67421,560],{"class":105},[91,67423,577],{"class":153},[91,67425,1415],{"class":250},[91,67427,67428,67430,67432,67434,67436],{"class":93,"line":1873},[91,67429,54866],{"class":105},[91,67431,51518],{"class":250},[91,67433,1156],{"class":105},[91,67435,51573],{"class":153},[91,67437,1415],{"class":250},[91,67439,67440,67442,67444,67446,67448],{"class":93,"line":1878},[91,67441,57440],{"class":105},[91,67443,51518],{"class":250},[91,67445,1156],{"class":105},[91,67447,51573],{"class":153},[91,67449,1415],{"class":250},[91,67451,67452,67454,67456,67458],{"class":93,"line":1883},[91,67453,55090],{"class":105},[91,67455,51518],{"class":250},[91,67457,51558],{"class":105},[91,67459,1415],{"class":250},[91,67461,67462,67464,67466,67468],{"class":93,"line":1888},[91,67463,55101],{"class":105},[91,67465,51518],{"class":250},[91,67467,51749],{"class":105},[91,67469,1415],{"class":250},[91,67471,67472],{"class":93,"line":1902},[91,67473,2310],{"class":250},[91,67475,67476],{"class":93,"line":1907},[91,67477,2523],{"emptyLinePlaceholder":175},[91,67479,67480,67482,67484],{"class":93,"line":2700},[91,67481,63826],{"class":97},[91,67483,63899],{"class":51381},[91,67485,15695],{"class":250},[91,67487,67488,67490,67492,67494,67496],{"class":93,"line":2714},[91,67489,55003],{"class":105},[91,67491,51518],{"class":250},[91,67493,1049],{"class":105},[91,67495,51573],{"class":153},[91,67497,1415],{"class":250},[91,67499,67500,67502,67504,67506],{"class":93,"line":2722},[91,67501,62415],{"class":105},[91,67503,51518],{"class":250},[91,67505,63922],{"class":105},[91,67507,1415],{"class":250},[91,67509,67510,67512,67514,67516,67518],{"class":93,"line":2727},[91,67511,62081],{"class":105},[91,67513,51518],{"class":250},[91,67515,949],{"class":105},[91,67517,51573],{"class":153},[91,67519,1415],{"class":250},[91,67521,67522],{"class":93,"line":2733},[91,67523,2310],{"class":250},[91,67525,67526],{"class":93,"line":2739},[91,67527,2523],{"emptyLinePlaceholder":175},[91,67529,67530,67532,67534],{"class":93,"line":2744},[91,67531,63826],{"class":97},[91,67533,61373],{"class":51381},[91,67535,15695],{"class":250},[91,67537,67538,67540,67542,67544],{"class":93,"line":8071},[91,67539,54813],{"class":105},[91,67541,51518],{"class":250},[91,67543,54818],{"class":105},[91,67545,1415],{"class":250},[91,67547,67548,67550,67552,67554],{"class":93,"line":8095},[91,67549,55090],{"class":105},[91,67551,51518],{"class":250},[91,67553,51558],{"class":105},[91,67555,1415],{"class":250},[91,67557,67558,67560,67562,67564],{"class":93,"line":8100},[91,67559,55101],{"class":105},[91,67561,51518],{"class":250},[91,67563,51661],{"class":105},[91,67565,1415],{"class":250},[91,67567,67568],{"class":93,"line":8106},[91,67569,2310],{"class":250},[91,67571,67572],{"class":93,"line":8133},[91,67573,2523],{"emptyLinePlaceholder":175},[91,67575,67576,67578,67580,67582],{"class":93,"line":8138},[91,67577,63826],{"class":97},[91,67579,61373],{"class":51381},[91,67581,55156],{"class":51381},[91,67583,15695],{"class":250},[91,67585,67586,67588,67590,67592,67594,67596],{"class":93,"line":8144},[91,67587,54787],{"class":105},[91,67589,51518],{"class":250},[91,67591,440],{"class":105},[91,67593,9073],{"class":105},[91,67595,51573],{"class":153},[91,67597,1415],{"class":250},[91,67599,67600,67602,67604,67606,67608],{"class":93,"line":8156},[91,67601,55003],{"class":105},[91,67603,51518],{"class":250},[91,67605,798],{"class":105},[91,67607,51573],{"class":153},[91,67609,1415],{"class":250},[91,67611,67612],{"class":93,"line":8168},[91,67613,2310],{"class":250},[91,67615,67616],{"class":93,"line":8180},[91,67617,2523],{"emptyLinePlaceholder":175},[91,67619,67620,67622,67624,67626,67628],{"class":93,"line":9839},[91,67621,63826],{"class":97},[91,67623,61373],{"class":51381},[91,67625,55156],{"class":51381},[91,67627,1523],{"class":51381},[91,67629,15695],{"class":250},[91,67631,67632,67634,67636,67638],{"class":93,"line":9864},[91,67633,64051],{"class":105},[91,67635,51518],{"class":250},[91,67637,54818],{"class":105},[91,67639,1415],{"class":250},[91,67641,67642,67644,67646,67648,67650,67652,67654],{"class":93,"line":9887},[91,67643,62313],{"class":105},[91,67645,51518],{"class":250},[91,67647,327],{"class":105},[91,67649,51573],{"class":153},[91,67651,51602],{"class":105},[91,67653,64072],{"class":105},[91,67655,1415],{"class":250},[91,67657,67658,67660,67662,67664],{"class":93,"line":9911},[91,67659,57497],{"class":105},[91,67661,51518],{"class":250},[91,67663,62450],{"class":105},[91,67665,1415],{"class":250},[91,67667,67668],{"class":93,"line":9916},[91,67669,2310],{"class":250},[91,67671,67672],{"class":93,"line":9921},[91,67673,2523],{"emptyLinePlaceholder":175},[91,67675,67676,67678,67680,67682,67684,67686],{"class":93,"line":9926},[91,67677,63826],{"class":97},[91,67679,61373],{"class":51381},[91,67681,55156],{"class":51381},[91,67683,1523],{"class":51381},[91,67685,64105],{"class":97},[91,67687,15695],{"class":250},[91,67689,67690,67692,67694,67696],{"class":93,"line":9935},[91,67691,61872],{"class":105},[91,67693,51518],{"class":250},[91,67695,64116],{"class":105},[91,67697,1415],{"class":250},[91,67699,67700,67702,67704,67706],{"class":93,"line":9940},[91,67701,57497],{"class":105},[91,67703,51518],{"class":250},[91,67705,64116],{"class":105},[91,67707,1415],{"class":250},[91,67709,67710],{"class":93,"line":9946},[91,67711,2310],{"class":250},[91,67713,67714],{"class":93,"line":9967},[91,67715,2523],{"emptyLinePlaceholder":175},[91,67717,67718,67720],{"class":93,"line":9973},[91,67719,64141],{"class":97},[91,67721,15695],{"class":250},[91,67723,67724,67726,67728,67730,67732,67734],{"class":93,"line":9987},[91,67725,54776],{"class":105},[91,67727,51518],{"class":250},[91,67729,440],{"class":105},[91,67731,64154],{"class":105},[91,67733,51573],{"class":153},[91,67735,1415],{"class":250},[91,67737,67738],{"class":93,"line":9993},[91,67739,2310],{"class":250},[91,67741,67742],{"class":93,"line":10020},[91,67743,2523],{"emptyLinePlaceholder":175},[91,67745,67746,67748,67750],{"class":93,"line":10029},[91,67747,64141],{"class":97},[91,67749,62255],{"class":97},[91,67751,15695],{"class":250},[91,67753,67754,67756,67758,67760],{"class":93,"line":10035},[91,67755,55090],{"class":105},[91,67757,51518],{"class":250},[91,67759,54818],{"class":105},[91,67761,1415],{"class":250},[91,67763,67764],{"class":93,"line":10043},[91,67765,2310],{"class":250},[91,67767,67768],{"class":93,"line":10048},[91,67769,2523],{"emptyLinePlaceholder":175},[91,67771,67772,67774,67777],{"class":93,"line":16727},[91,67773,64141],{"class":97},[91,67775,67776],{"class":97}," .active",[91,67778,15695],{"class":250},[91,67780,67781,67783,67785,67787],{"class":93,"line":16733},[91,67782,55090],{"class":105},[91,67784,51518],{"class":250},[91,67786,60950],{"class":105},[91,67788,1415],{"class":250},[91,67790,67791],{"class":93,"line":16756},[91,67792,2310],{"class":250},[91,67794,67795,67797,67799],{"class":93,"line":16762},[91,67796,52498],{"class":250},[91,67798,168],{"class":51381},[91,67800,51388],{"class":250},[91,67802,67803,67805,67807],{"class":93,"line":16785},[91,67804,51866],{"class":250},[91,67806,51415],{"class":51381},[91,67808,51388],{"class":250},[91,67810,67811],{"class":93,"line":16799},[91,67812,2523],{"emptyLinePlaceholder":175},[91,67814,67815,67817,67819],{"class":93,"line":16819},[91,67816,1159],{"class":250},[91,67818,51881],{"class":51381},[91,67820,51388],{"class":250},[91,67822,67823,67825,67827,67829,67831,67833],{"class":93,"line":16825},[91,67824,52225],{"class":250},[91,67826,51692],{"class":51381},[91,67828,53567],{"class":97},[91,67830,296],{"class":250},[91,67832,64256],{"class":101},[91,67834,51388],{"class":250},[91,67836,67837,67839,67841,67843,67845,67847],{"class":93,"line":16836},[91,67838,51422],{"class":250},[91,67840,51692],{"class":51381},[91,67842,53567],{"class":97},[91,67844,296],{"class":250},[91,67846,64271],{"class":101},[91,67848,51388],{"class":250},[91,67850,67851,67853,67855,67857,67859],{"class":93,"line":16859},[91,67852,55315],{"class":250},[91,67854,217],{"class":51381},[91,67856,64282],{"class":250},[91,67858,217],{"class":51381},[91,67860,51388],{"class":250},[91,67862,67863,67865,67867],{"class":93,"line":16881},[91,67864,55315],{"class":250},[91,67866,1256],{"class":51381},[91,67868,51388],{"class":250},[91,67870,67871,67873,67875,67877,67879,67881,67883,67885,67887,67889,67891,67893,67895,67898,67900,67902,67904,67906],{"class":93,"line":16886},[91,67872,55383],{"class":250},[91,67874,17],{"class":51381},[91,67876,61133],{"class":250},[91,67878,487],{"class":51381},[91,67880,53567],{"class":97},[91,67882,296],{"class":250},[91,67884,59787],{"class":101},[91,67886,61138],{"class":97},[91,67888,296],{"class":250},[91,67890,64317],{"class":101},[91,67892,54032],{"class":97},[91,67894,296],{"class":250},[91,67896,67897],{"class":101},"\"0\"",[91,67899,64320],{"class":250},[91,67901,487],{"class":51381},[91,67903,55395],{"class":250},[91,67905,17],{"class":51381},[91,67907,51388],{"class":250},[91,67909,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930,67932,67934,67936,67938],{"class":93,"line":16892},[91,67911,55383],{"class":250},[91,67913,17],{"class":51381},[91,67915,61133],{"class":250},[91,67917,487],{"class":51381},[91,67919,61138],{"class":97},[91,67921,296],{"class":250},[91,67923,64317],{"class":101},[91,67925,54032],{"class":97},[91,67927,296],{"class":250},[91,67929,3801],{"class":101},[91,67931,64347],{"class":250},[91,67933,487],{"class":51381},[91,67935,55395],{"class":250},[91,67937,17],{"class":51381},[91,67939,51388],{"class":250},[91,67941,67942,67944,67946,67948,67950,67952,67954,67956,67958,67960,67962,67964,67966,67968,67970],{"class":93,"line":16906},[91,67943,55383],{"class":250},[91,67945,17],{"class":51381},[91,67947,61133],{"class":250},[91,67949,487],{"class":51381},[91,67951,61138],{"class":97},[91,67953,296],{"class":250},[91,67955,64317],{"class":101},[91,67957,54032],{"class":97},[91,67959,296],{"class":250},[91,67961,3824],{"class":101},[91,67963,64374],{"class":250},[91,67965,487],{"class":51381},[91,67967,55395],{"class":250},[91,67969,17],{"class":51381},[91,67971,51388],{"class":250},[91,67973,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998,68000,68002],{"class":93,"line":16919},[91,67975,55383],{"class":250},[91,67977,17],{"class":51381},[91,67979,61133],{"class":250},[91,67981,487],{"class":51381},[91,67983,61138],{"class":97},[91,67985,296],{"class":250},[91,67987,64317],{"class":101},[91,67989,54032],{"class":97},[91,67991,296],{"class":250},[91,67993,3837],{"class":101},[91,67995,64401],{"class":250},[91,67997,487],{"class":51381},[91,67999,55395],{"class":250},[91,68001,17],{"class":51381},[91,68003,51388],{"class":250},[91,68005,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034],{"class":93,"line":16924},[91,68007,55383],{"class":250},[91,68009,17],{"class":51381},[91,68011,61133],{"class":250},[91,68013,487],{"class":51381},[91,68015,61138],{"class":97},[91,68017,296],{"class":250},[91,68019,64317],{"class":101},[91,68021,54032],{"class":97},[91,68023,296],{"class":250},[91,68025,3850],{"class":101},[91,68027,64428],{"class":250},[91,68029,487],{"class":51381},[91,68031,55395],{"class":250},[91,68033,17],{"class":51381},[91,68035,51388],{"class":250},[91,68037,68038,68040,68042],{"class":93,"line":16938},[91,68039,55488],{"class":250},[91,68041,1256],{"class":51381},[91,68043,51388],{"class":250},[91,68045,68046,68048,68050],{"class":93,"line":16943},[91,68047,51857],{"class":250},[91,68049,51692],{"class":51381},[91,68051,51388],{"class":250},[91,68053,68054,68056,68058,68060,68062,68064],{"class":93,"line":16949},[91,68055,51422],{"class":250},[91,68057,51692],{"class":51381},[91,68059,53567],{"class":97},[91,68061,296],{"class":250},[91,68063,64465],{"class":101},[91,68065,51388],{"class":250},[91,68067,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098],{"class":93,"line":16954},[91,68069,55315],{"class":250},[91,68071,51692],{"class":51381},[91,68073,53567],{"class":97},[91,68075,296],{"class":250},[91,68077,64480],{"class":101},[91,68079,61133],{"class":250},[91,68081,24],{"class":51381},[91,68083,55320],{"class":97},[91,68085,296],{"class":250},[91,68087,64491],{"class":101},[91,68089,55328],{"class":97},[91,68091,296],{"class":250},[91,68093,7775],{"class":101},[91,68095,64500],{"class":250},[91,68097,51692],{"class":51381},[91,68099,51388],{"class":250},[91,68101,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132],{"class":93,"line":16968},[91,68103,55315],{"class":250},[91,68105,51692],{"class":51381},[91,68107,53567],{"class":97},[91,68109,296],{"class":250},[91,68111,62704],{"class":101},[91,68113,61133],{"class":250},[91,68115,24],{"class":51381},[91,68117,55320],{"class":97},[91,68119,296],{"class":250},[91,68121,64527],{"class":101},[91,68123,55328],{"class":97},[91,68125,296],{"class":250},[91,68127,7775],{"class":101},[91,68129,64500],{"class":250},[91,68131,51692],{"class":51381},[91,68133,51388],{"class":250},[91,68135,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154,68156,68158,68160,68162,68164,68166],{"class":93,"line":16973},[91,68137,55315],{"class":250},[91,68139,51692],{"class":51381},[91,68141,53567],{"class":97},[91,68143,296],{"class":250},[91,68145,62704],{"class":101},[91,68147,61133],{"class":250},[91,68149,24],{"class":51381},[91,68151,55320],{"class":97},[91,68153,296],{"class":250},[91,68155,64562],{"class":101},[91,68157,55328],{"class":97},[91,68159,296],{"class":250},[91,68161,7775],{"class":101},[91,68163,64500],{"class":250},[91,68165,51692],{"class":51381},[91,68167,51388],{"class":250},[91,68169,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188,68190,68192,68194,68196,68198,68200],{"class":93,"line":16978},[91,68171,55315],{"class":250},[91,68173,51692],{"class":51381},[91,68175,53567],{"class":97},[91,68177,296],{"class":250},[91,68179,62704],{"class":101},[91,68181,61133],{"class":250},[91,68183,24],{"class":51381},[91,68185,55320],{"class":97},[91,68187,296],{"class":250},[91,68189,64597],{"class":101},[91,68191,55328],{"class":97},[91,68193,296],{"class":250},[91,68195,7775],{"class":101},[91,68197,64500],{"class":250},[91,68199,51692],{"class":51381},[91,68201,51388],{"class":250},[91,68203,68204,68206,68208,68210,68212,68214,68216,68218,68220,68222,68224,68226,68228,68230,68232,68234],{"class":93,"line":16992},[91,68205,55315],{"class":250},[91,68207,51692],{"class":51381},[91,68209,53567],{"class":97},[91,68211,296],{"class":250},[91,68213,62704],{"class":101},[91,68215,61133],{"class":250},[91,68217,24],{"class":51381},[91,68219,55320],{"class":97},[91,68221,296],{"class":250},[91,68223,64632],{"class":101},[91,68225,55328],{"class":97},[91,68227,296],{"class":250},[91,68229,7775],{"class":101},[91,68231,64500],{"class":250},[91,68233,51692],{"class":51381},[91,68235,51388],{"class":250},[91,68237,68238,68240,68242],{"class":93,"line":17004},[91,68239,51857],{"class":250},[91,68241,51692],{"class":51381},[91,68243,51388],{"class":250},[91,68245,68246,68248,68250],{"class":93,"line":17009},[91,68247,52498],{"class":250},[91,68249,51692],{"class":51381},[91,68251,51388],{"class":250},[91,68253,68254,68256,68258],{"class":93,"line":17022},[91,68255,52225],{"class":250},[91,68257,51894],{"class":51381},[91,68259,51388],{"class":250},[91,68261,68262],{"class":93,"line":17027},[91,68263,68264],{"class":308},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[91,68266,68267],{"class":93,"line":17032},[91,68268,68269],{"class":308},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[91,68271,68272,68274,68276,68278,68280,68282,68284,68287],{"class":93,"line":17037},[91,68273,11344],{"class":153},[91,68275,61373],{"class":105},[91,68277,13687],{"class":153},[91,68279,54477],{"class":250},[91,68281,54480],{"class":97},[91,68283,251],{"class":250},[91,68285,68286],{"class":101},"'.tab-nav ul'",[91,68288,257],{"class":250},[91,68290,68291],{"class":93,"line":17050},[91,68292,68293],{"class":308},"    \u002F\u002F 2.添加事件\n",[91,68295,68296,68298,68300,68302,68304,68306,68308,68310,68312],{"class":93,"line":17055},[91,68297,67035],{"class":250},[91,68299,57894],{"class":97},[91,68301,251],{"class":250},[91,68303,57899],{"class":101},[91,68305,12558],{"class":250},[91,68307,54530],{"class":153},[91,68309,1782],{"class":250},[91,68311,324],{"class":5339},[91,68313,12565],{"class":250},[91,68315,68316,68318,68320],{"class":93,"line":32714},[91,68317,58325],{"class":250},[91,68319,67091],{"class":97},[91,68321,67094],{"class":250},[91,68323,68324],{"class":93,"line":32720},[91,68325,68326],{"class":308},"      \u002F\u002Fe.targer是我们点击的对象\n",[91,68328,68329,68331,68333,68335,68338],{"class":93,"line":32726},[91,68330,54561],{"class":153},[91,68332,67115],{"class":250},[91,68334,54567],{"class":153},[91,68336,68337],{"class":101}," 'A'",[91,68339,12565],{"class":250},[91,68341,68342,68344,68346,68348,68351,68353,68355,68357,68359],{"class":93,"line":32732},[91,68343,52006],{"class":250},[91,68345,54480],{"class":97},[91,68347,251],{"class":250},[91,68349,68350],{"class":101},"'.active'",[91,68352,57084],{"class":250},[91,68354,57087],{"class":97},[91,68356,251],{"class":250},[91,68358,64795],{"class":101},[91,68360,257],{"class":250},[91,68362,68363,68366,68368,68370,68372],{"class":93,"line":32738},[91,68364,68365],{"class":250},"        e.target.classList.",[91,68367,5457],{"class":97},[91,68369,251],{"class":250},[91,68371,64795],{"class":101},[91,68373,257],{"class":250},[91,68375,68376],{"class":93,"line":32749},[91,68377,2523],{"emptyLinePlaceholder":175},[91,68379,68380],{"class":93,"line":32755},[91,68381,68382],{"class":308},"        \u002F\u002F 下面大盒子模块\n",[91,68384,68385],{"class":93,"line":32775},[91,68386,68387],{"class":308},"        \u002F\u002F console.log(e.target.dataset.id)\n",[91,68389,68390,68392,68394,68396,68398],{"class":93,"line":32781},[91,68391,61351],{"class":153},[91,68393,3155],{"class":105},[91,68395,13687],{"class":153},[91,68397,45647],{"class":153},[91,68399,68400],{"class":250},"e.target.dataset.id\n",[91,68402,68403,68405,68407,68409,68411,68413,68415,68417,68419],{"class":93,"line":32792},[91,68404,52006],{"class":250},[91,68406,54480],{"class":97},[91,68408,251],{"class":250},[91,68410,64843],{"class":101},[91,68412,57084],{"class":250},[91,68414,57087],{"class":97},[91,68416,251],{"class":250},[91,68418,64795],{"class":101},[91,68420,257],{"class":250},[91,68422,68423,68425,68427,68429,68431,68433,68435,68437,68439,68441,68443,68445,68447],{"class":93,"line":32798},[91,68424,52006],{"class":250},[91,68426,54480],{"class":97},[91,68428,251],{"class":250},[91,68430,64869],{"class":101},[91,68432,690],{"class":250},[91,68434,45647],{"class":153},[91,68436,25240],{"class":105},[91,68438,57113],{"class":101},[91,68440,57084],{"class":250},[91,68442,5457],{"class":97},[91,68444,251],{"class":250},[91,68446,64795],{"class":101},[91,68448,257],{"class":250},[91,68450,68451],{"class":93,"line":32804},[91,68452,2523],{"emptyLinePlaceholder":175},[91,68454,68455],{"class":93,"line":32810},[91,68456,52479],{"class":250},[91,68458,68459],{"class":93,"line":32816},[91,68460,33542],{"class":250},[91,68462,68463,68465,68467],{"class":93,"line":32822},[91,68464,52498],{"class":250},[91,68466,51894],{"class":51381},[91,68468,51388],{"class":250},[91,68470,68471,68473,68475],{"class":93,"line":32828},[91,68472,51866],{"class":250},[91,68474,51881],{"class":51381},[91,68476,51388],{"class":250},[91,68478,68479],{"class":93,"line":32834},[91,68480,2523],{"emptyLinePlaceholder":175},[91,68482,68483,68485,68487],{"class":93,"line":32854},[91,68484,51866],{"class":250},[91,68486,50716],{"class":51381},[91,68488,51388],{"class":250},[217,68490,68492],{"id":68491},"_333-页面加载事件","3.3.3 页面加载事件",[14,68494,68495],{},[17,68496,68497],{},"load",[21,68499,68500],{},[24,68501],{"alt":26,"src":68502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[21,68504,68505],{},"window代表整个窗口，比document还要大",[21,68507,68508],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[21,68510,68511],{},"img.addEventListener('load', function () {",[21,68513,68514],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[21,68516,52545],{},[14,68518,68519],{"start":38},[17,68520,68521],{},"DOMContentLoaded",[21,68523,68524],{},[24,68525],{"alt":26,"src":68526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[21,68528,68529],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[217,68531,68533],{"id":68532},"_334-元素滚动事件","3.3.4 元素滚动事件",[21,68535,68536],{},[24,68537],{"alt":26,"src":68538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[21,68540,68541],{},[24,68542],{"alt":26,"src":68543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[21,68545,68546],{},[24,68547],{"alt":26,"src":68548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[21,68550,68551],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[21,68553,68554],{},"获得的是数字型数据，不带单位",[21,68556,68557],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[21,68559,68560],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[21,68562,68563],{},"它是通过document.documentElement来获取",[21,68565,68566],{},[24,68567],{"alt":26,"src":68568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[21,68570,68571],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[217,68573,68575],{"id":68574},"_335-页面缩放事件","3.3.5 页面缩放事件",[21,68577,68578],{},[24,68579],{"alt":26,"src":68580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[21,68582,68583],{},[24,68584],{"alt":26,"src":68585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[217,68587,68589],{"id":68588},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[21,68591,68592],{},[24,68593],{"alt":26,"src":68594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[21,68596,68597],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[21,68599,68600],{},[24,68601],{"alt":26,"src":68602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[21,68604,68605],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[21,68607,68608],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[21,68610,68611],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[21,68613,68614],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[21,68616,68617],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[21,68619,68620],{},[24,68621],{"alt":26,"src":68622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[21,68624,68625],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[21,68627,68628],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[21,68630,68631],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[21,68633,68634],{},"e.pageX-box.getBoundingClientRect()",[217,68636,68638],{"id":68637},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[21,68640,68641],{},[24,68642],{"alt":26,"src":68643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[21,68645,68646],{},"这个是相对于视口来说的，它是个方法，不是属性值",[217,68648,68650],{"id":68649},"_338-总结","3.3.8 总结",[21,68652,68653],{},[24,68654],{"alt":26,"src":68655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[21,68657,68658],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[21,68660,68661],{},"修改盒子的宽高只能通过width和height来实现",[217,68663,68665],{"id":68664},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[82,68667,68669],{"className":50714,"code":68668,"language":50716,"meta":26,"style":26},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[88,68670,68671,68676,68681,68686,68691],{"__ignoreMap":26},[91,68672,68673],{"class":93,"line":94},[91,68674,68675],{"class":250},"\u002F* 页面滑动 *\u002F\n",[91,68677,68678],{"class":93,"line":38},[91,68679,68680],{"class":250},"html {\n",[91,68682,68683],{"class":93,"line":1304},[91,68684,68685],{"class":250},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[91,68687,68688],{"class":93,"line":1319},[91,68689,68690],{"class":250},"  scroll-behavior: smooth;\n",[91,68692,68693],{"class":93,"line":1325},[91,68694,1689],{"class":250},[21,68696,68697],{},"默认是auto",[217,68699,68701],{"id":68700},"_3310-日期对象","3.3.10 日期对象",[22121,68703,68705],{"id":68704},"_33101-实例化","3.3.10.1 实例化",[21,68707,68708],{},[24,68709],{"alt":26,"src":68710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22121,68712,68714],{"id":68713},"_33102-时期对象方法","3.3.10.2 时期对象方法",[21,68716,68717],{},[24,68718],{"alt":26,"src":68719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[21,68721,68722],{},"月份+1",[21,68724,68725],{},"老外认为第一天为0，星期天",[21,68727,68728],{},"方法使用的时候必须要跟括号",[21,68730,68731],{},"快速获得日期",[21,68733,68734],{},"\u002F\u002F 得到年月日",[21,68736,68737],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[21,68739,68740],{},"\u002F\u002F 得到当地日期",[21,68742,68743],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[21,68745,68746],{},"\u002F\u002F 得到当地时间",[21,68748,68749],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[21,68751,68752],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[21,68754,68755],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51894,68757,68758],{},"\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",[21,68760,68761],{},"学会去封装函数！",[22121,68763,68765],{"id":68764},"_33103-时间戳","3.3.10.3 时间戳",[21,68767,68768],{},[24,68769],{"alt":26,"src":68770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[21,68772,68773],{},[24,68774],{"alt":26,"src":68775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[21,68777,68778],{},"三种方法记住一个就可以",[217,68780,68782],{"id":68781},"_3311-节点操作","3.3.11 节点操作",[22121,68784,68786],{"id":68785},"_33111-dom节点","3.3.11.1 DOM节点",[21,68788,68789],{},[24,68790],{"alt":26,"src":68791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[21,68793,68794],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22121,68796,68798],{"id":68797},"_33112-查找节点","3.3.11.2 查找节点",[21,68800,68801],{},"前边的document.querySelector()是获取的元素",[21,68803,68804],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[21,68806,68807],{},[24,68808],{"alt":26,"src":68809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[14,68811,68812],{},[17,68813,68814],{},"父节点",[21,68816,68817],{},[24,68818],{"alt":26,"src":68819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[14,68821,68822],{"start":38},[17,68823,68824],{},"子节点",[21,68826,68827],{},[24,68828],{"alt":26,"src":68829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[21,68831,68832],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[21,68834,68835],{},"children获得的是伪数组，是亲儿子",[14,68837,68838],{"start":1304},[17,68839,68840],{},"兄弟节点",[21,68842,68843],{},[24,68844],{"alt":26,"src":68845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22121,68847,68849],{"id":68848},"_33113-增加节点","3.3.11.3 增加节点",[21,68851,68852],{},[24,68853],{"alt":26,"src":68854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[21,68856,68857],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[21,68859,68860],{},[24,68861],{"alt":26,"src":68862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[21,68864,68865],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[21,68867,68868],{},"下面是写法的部分展示，就按照下边的格式来写",[21,68870,68871],{},"例：",[51894,68873,68874],{},"\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",[21,68876,68877],{},[24,68878],{"alt":26,"src":68879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[21,68881,68882],{},"false只克隆标签，里边的内容不会克隆过来",[82,68884,68886],{"className":50714,"code":68885,"language":50716,"meta":26,"style":26},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[88,68887,68888],{"__ignoreMap":26},[91,68889,68890],{"class":93,"line":94},[91,68891,68885],{"class":250},[22121,68893,68895],{"id":68894},"_33114-删除节点","3.3.11.4 删除节点",[21,68897,68898],{},[24,68899],{"alt":26,"src":68900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[21,68902,68903],{},"父亲删儿子",[21,68905,68906],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[217,68908,68910],{"id":68909},"_3312-m端事件","3.3.12 M端事件",[21,68912,68913],{},"M端就是移动端",[21,68915,68916],{},[24,68917],{"alt":26,"src":68918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[217,68920,68922],{"id":68921},"_3313-插件","3.3.13 插件",[21,68924,68925],{},"要熟悉官网！！！",[21,68927,68928],{},[487,68929,68930],{"href":68930,"rel":68931},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23987],[21,68933,68934],{},[487,68935,68936],{"href":68936,"rel":68937},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23987],[217,68939,68941],{"id":68940},"_3314-学生信息表","3.3.14 学生信息表",[14,68943,68944,68947,68950,68953,68956,68959,68962,68965],{},[17,68945,68946],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[17,68948,68949],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[17,68951,68952],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[17,68954,68955],{},"用好表单元素自带的属性，value,name等",[17,68957,68958],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[17,68960,68961],{},"不要忘记事件对象",[17,68963,68964],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[17,68966,68967],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[21,68969,68970],{},"结构：",[82,68972,68974],{"className":50714,"code":68973,"language":50716,"meta":26,"style":26},"\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",[88,68975,68976,68986,69000,69004,69012,69026,69046,69067,69080,69104,69112,69116,69124,69137,69158,69186,69214,69219,69241,69261,69280,69288,69316,69338,69358,69378,69398,69418,69438,69446,69466,69474,69478,69491,69499,69507,69515,69528,69541,69554,69567,69580,69593,69606,69614,69622,69630,69635,69640,69645,69650,69655,69660,69665,69670,69675,69680,69685,69690,69695,69703,69711,69719,69723,69743,69762,69782,69802,69822,69842,69846,69851,69871,69876,69886,69891,69896,69916,69938,69943,69953,69957,69961,69966,69971,70000,70014,70029,70033,70037,70041,70046,70057,70070,70075,70080,70085,70090,70095,70099,70104,70109,70118,70123,70128,70140,70145,70152,70156,70161,70171,70176,70186,70191,70219,70240,70250,70270,70288,70305,70322,70339,70356,70360,70370,70375,70380,70385,70396,70400,70404,70408,70413,70418,70439,70451,70456,70461,70466,70480,70485,70492,70496,70500,70508,70512,70520,70524],{"__ignoreMap":26},[91,68977,68978,68980,68982,68984],{"class":93,"line":94},[91,68979,51378],{"class":250},[91,68981,51382],{"class":51381},[91,68983,51385],{"class":97},[91,68985,51388],{"class":250},[91,68987,68988,68990,68992,68994,68996,68998],{"class":93,"line":38},[91,68989,1159],{"class":250},[91,68991,50716],{"class":51381},[91,68993,51397],{"class":97},[91,68995,296],{"class":250},[91,68997,51402],{"class":101},[91,68999,51388],{"class":250},[91,69001,69002],{"class":93,"line":1304},[91,69003,2523],{"emptyLinePlaceholder":175},[91,69005,69006,69008,69010],{"class":93,"line":1319},[91,69007,1159],{"class":250},[91,69009,51415],{"class":51381},[91,69011,51388],{"class":250},[91,69013,69014,69016,69018,69020,69022,69024],{"class":93,"line":1325},[91,69015,52225],{"class":250},[91,69017,51425],{"class":51381},[91,69019,51428],{"class":97},[91,69021,296],{"class":250},[91,69023,51433],{"class":101},[91,69025,59208],{"class":250},[91,69027,69028,69030,69032,69034,69036,69038,69040,69042,69044],{"class":93,"line":1339},[91,69029,52225],{"class":250},[91,69031,51425],{"class":51381},[91,69033,15043],{"class":97},[91,69035,296],{"class":250},[91,69037,51472],{"class":101},[91,69039,51452],{"class":97},[91,69041,296],{"class":250},[91,69043,51479],{"class":101},[91,69045,59208],{"class":250},[91,69047,69048,69050,69052,69054,69056,69058,69060,69062,69065],{"class":93,"line":1345},[91,69049,52225],{"class":250},[91,69051,51425],{"class":51381},[91,69053,51444],{"class":97},[91,69055,296],{"class":250},[91,69057,51449],{"class":101},[91,69059,51452],{"class":97},[91,69061,296],{"class":250},[91,69063,69064],{"class":101},"\"ie=edge\"",[91,69066,59208],{"class":250},[91,69068,69069,69071,69073,69076,69078],{"class":93,"line":1436},[91,69070,52225],{"class":250},[91,69072,51488],{"class":51381},[91,69074,69075],{"class":250},">学生信息管理\u003C\u002F",[91,69077,51488],{"class":51381},[91,69079,51388],{"class":250},[91,69081,69082,69084,69087,69090,69092,69095,69097,69099,69102],{"class":93,"line":1442},[91,69083,52225],{"class":250},[91,69085,69086],{"class":51381},"link",[91,69088,69089],{"class":97}," rel",[91,69091,296],{"class":250},[91,69093,69094],{"class":101},"\"stylesheet\"",[91,69096,61138],{"class":97},[91,69098,296],{"class":250},[91,69100,69101],{"class":101},"\"css\u002Findex.css\"",[91,69103,59208],{"class":250},[91,69105,69106,69108,69110],{"class":93,"line":1454},[91,69107,51866],{"class":250},[91,69109,51415],{"class":51381},[91,69111,51388],{"class":250},[91,69113,69114],{"class":93,"line":1736},[91,69115,2523],{"emptyLinePlaceholder":175},[91,69117,69118,69120,69122],{"class":93,"line":1741},[91,69119,1159],{"class":250},[91,69121,51881],{"class":51381},[91,69123,51388],{"class":250},[91,69125,69126,69128,69130,69133,69135],{"class":93,"line":1747},[91,69127,52225],{"class":250},[91,69129,10],{"class":51381},[91,69131,69132],{"class":250},">新增学员\u003C\u002F",[91,69134,10],{"class":51381},[91,69136,51388],{"class":250},[91,69138,69139,69141,69143,69145,69147,69149,69152,69154,69156],{"class":93,"line":1752},[91,69140,52225],{"class":250},[91,69142,66706],{"class":51381},[91,69144,53567],{"class":97},[91,69146,296],{"class":250},[91,69148,62745],{"class":101},[91,69150,69151],{"class":97}," autocomplete",[91,69153,296],{"class":250},[91,69155,31857],{"class":101},[91,69157,51388],{"class":250},[91,69159,69160,69163,69165,69167,69169,69171,69173,69175,69178,69180,69182,69184],{"class":93,"line":1766},[91,69161,69162],{"class":250},"    姓名：\u003C",[91,69164,53902],{"class":51381},[91,69166,53905],{"class":97},[91,69168,296],{"class":250},[91,69170,62780],{"class":101},[91,69172,53567],{"class":97},[91,69174,296],{"class":250},[91,69176,69177],{"class":101},"\"uname\"",[91,69179,15043],{"class":97},[91,69181,296],{"class":250},[91,69183,69177],{"class":101},[91,69185,59208],{"class":250},[91,69187,69188,69191,69193,69195,69197,69199,69201,69203,69206,69208,69210,69212],{"class":93,"line":1771},[91,69189,69190],{"class":250},"    年龄：\u003C",[91,69192,53902],{"class":51381},[91,69194,53905],{"class":97},[91,69196,296],{"class":250},[91,69198,62780],{"class":101},[91,69200,53567],{"class":97},[91,69202,296],{"class":250},[91,69204,69205],{"class":101},"\"age\"",[91,69207,15043],{"class":97},[91,69209,296],{"class":250},[91,69211,69205],{"class":101},[91,69213,59208],{"class":250},[91,69215,69216],{"class":93,"line":1777},[91,69217,69218],{"class":250},"    性别:\n",[91,69220,69221,69223,69226,69228,69230,69233,69235,69237,69239],{"class":93,"line":1798},[91,69222,51422],{"class":250},[91,69224,69225],{"class":51381},"select",[91,69227,15043],{"class":97},[91,69229,296],{"class":250},[91,69231,69232],{"class":101},"\"gender\"",[91,69234,53567],{"class":97},[91,69236,296],{"class":250},[91,69238,69232],{"class":101},[91,69240,51388],{"class":250},[91,69242,69243,69245,69248,69250,69252,69254,69257,69259],{"class":93,"line":1803},[91,69244,55315],{"class":250},[91,69246,69247],{"class":51381},"option",[91,69249,66732],{"class":97},[91,69251,296],{"class":250},[91,69253,10084],{"class":101},[91,69255,69256],{"class":250},">男\u003C\u002F",[91,69258,69247],{"class":51381},[91,69260,51388],{"class":250},[91,69262,69263,69265,69267,69269,69271,69273,69276,69278],{"class":93,"line":1817},[91,69264,55315],{"class":250},[91,69266,69247],{"class":51381},[91,69268,66732],{"class":97},[91,69270,296],{"class":250},[91,69272,10153],{"class":101},[91,69274,69275],{"class":250},">女\u003C\u002F",[91,69277,69247],{"class":51381},[91,69279,51388],{"class":250},[91,69281,69282,69284,69286],{"class":93,"line":1822},[91,69283,51857],{"class":250},[91,69285,69225],{"class":51381},[91,69287,51388],{"class":250},[91,69289,69290,69293,69295,69297,69299,69301,69303,69305,69308,69310,69312,69314],{"class":93,"line":1851},[91,69291,69292],{"class":250},"    薪资：\u003C",[91,69294,53902],{"class":51381},[91,69296,53905],{"class":97},[91,69298,296],{"class":250},[91,69300,62780],{"class":101},[91,69302,53567],{"class":97},[91,69304,296],{"class":250},[91,69306,69307],{"class":101},"\"salary\"",[91,69309,15043],{"class":97},[91,69311,296],{"class":250},[91,69313,69307],{"class":101},[91,69315,59208],{"class":250},[91,69317,69318,69321,69323,69325,69327,69330,69332,69334,69336],{"class":93,"line":1856},[91,69319,69320],{"class":250},"    就业城市：\u003C",[91,69322,69225],{"class":51381},[91,69324,15043],{"class":97},[91,69326,296],{"class":250},[91,69328,69329],{"class":101},"\"city\"",[91,69331,53567],{"class":97},[91,69333,296],{"class":250},[91,69335,69329],{"class":101},[91,69337,51388],{"class":250},[91,69339,69340,69342,69344,69346,69348,69351,69354,69356],{"class":93,"line":1873},[91,69341,55315],{"class":250},[91,69343,69247],{"class":51381},[91,69345,66732],{"class":97},[91,69347,296],{"class":250},[91,69349,69350],{"class":101},"\"北京\"",[91,69352,69353],{"class":250},">北京\u003C\u002F",[91,69355,69247],{"class":51381},[91,69357,51388],{"class":250},[91,69359,69360,69362,69364,69366,69368,69371,69374,69376],{"class":93,"line":1878},[91,69361,55315],{"class":250},[91,69363,69247],{"class":51381},[91,69365,66732],{"class":97},[91,69367,296],{"class":250},[91,69369,69370],{"class":101},"\"上海\"",[91,69372,69373],{"class":250},">上海\u003C\u002F",[91,69375,69247],{"class":51381},[91,69377,51388],{"class":250},[91,69379,69380,69382,69384,69386,69388,69391,69394,69396],{"class":93,"line":1883},[91,69381,55315],{"class":250},[91,69383,69247],{"class":51381},[91,69385,66732],{"class":97},[91,69387,296],{"class":250},[91,69389,69390],{"class":101},"\"广州\"",[91,69392,69393],{"class":250},">广州\u003C\u002F",[91,69395,69247],{"class":51381},[91,69397,51388],{"class":250},[91,69399,69400,69402,69404,69406,69408,69411,69414,69416],{"class":93,"line":1888},[91,69401,55315],{"class":250},[91,69403,69247],{"class":51381},[91,69405,66732],{"class":97},[91,69407,296],{"class":250},[91,69409,69410],{"class":101},"\"深圳\"",[91,69412,69413],{"class":250},">深圳\u003C\u002F",[91,69415,69247],{"class":51381},[91,69417,51388],{"class":250},[91,69419,69420,69422,69424,69426,69428,69431,69434,69436],{"class":93,"line":1902},[91,69421,55315],{"class":250},[91,69423,69247],{"class":51381},[91,69425,66732],{"class":97},[91,69427,296],{"class":250},[91,69429,69430],{"class":101},"\"曹县\"",[91,69432,69433],{"class":250},">曹县\u003C\u002F",[91,69435,69247],{"class":51381},[91,69437,51388],{"class":250},[91,69439,69440,69442,69444],{"class":93,"line":1907},[91,69441,51857],{"class":250},[91,69443,69225],{"class":51381},[91,69445,51388],{"class":250},[91,69447,69448,69450,69452,69454,69456,69459,69462,69464],{"class":93,"line":2700},[91,69449,51422],{"class":250},[91,69451,53968],{"class":51381},[91,69453,53567],{"class":97},[91,69455,296],{"class":250},[91,69457,69458],{"class":101},"\"add\"",[91,69460,69461],{"class":250},">录入\u003C\u002F",[91,69463,53968],{"class":51381},[91,69465,51388],{"class":250},[91,69467,69468,69470,69472],{"class":93,"line":2714},[91,69469,52498],{"class":250},[91,69471,66706],{"class":51381},[91,69473,51388],{"class":250},[91,69475,69476],{"class":93,"line":2722},[91,69477,2523],{"emptyLinePlaceholder":175},[91,69479,69480,69482,69484,69487,69489],{"class":93,"line":2727},[91,69481,52225],{"class":250},[91,69483,10],{"class":51381},[91,69485,69486],{"class":250},">就业榜\u003C\u002F",[91,69488,10],{"class":51381},[91,69490,51388],{"class":250},[91,69492,69493,69495,69497],{"class":93,"line":2733},[91,69494,52225],{"class":250},[91,69496,386],{"class":51381},[91,69498,51388],{"class":250},[91,69500,69501,69503,69505],{"class":93,"line":2739},[91,69502,51422],{"class":250},[91,69504,389],{"class":51381},[91,69506,51388],{"class":250},[91,69508,69509,69511,69513],{"class":93,"line":2744},[91,69510,55315],{"class":250},[91,69512,392],{"class":51381},[91,69514,51388],{"class":250},[91,69516,69517,69519,69521,69524,69526],{"class":93,"line":8071},[91,69518,55383],{"class":250},[91,69520,395],{"class":51381},[91,69522,69523],{"class":250},">序号\u003C\u002F",[91,69525,395],{"class":51381},[91,69527,51388],{"class":250},[91,69529,69530,69532,69534,69537,69539],{"class":93,"line":8095},[91,69531,55383],{"class":250},[91,69533,395],{"class":51381},[91,69535,69536],{"class":250},">姓名\u003C\u002F",[91,69538,395],{"class":51381},[91,69540,51388],{"class":250},[91,69542,69543,69545,69547,69550,69552],{"class":93,"line":8100},[91,69544,55383],{"class":250},[91,69546,395],{"class":51381},[91,69548,69549],{"class":250},">年龄\u003C\u002F",[91,69551,395],{"class":51381},[91,69553,51388],{"class":250},[91,69555,69556,69558,69560,69563,69565],{"class":93,"line":8106},[91,69557,55383],{"class":250},[91,69559,395],{"class":51381},[91,69561,69562],{"class":250},">性别\u003C\u002F",[91,69564,395],{"class":51381},[91,69566,51388],{"class":250},[91,69568,69569,69571,69573,69576,69578],{"class":93,"line":8133},[91,69570,55383],{"class":250},[91,69572,395],{"class":51381},[91,69574,69575],{"class":250},">薪资\u003C\u002F",[91,69577,395],{"class":51381},[91,69579,51388],{"class":250},[91,69581,69582,69584,69586,69589,69591],{"class":93,"line":8138},[91,69583,55383],{"class":250},[91,69585,395],{"class":51381},[91,69587,69588],{"class":250},">就业城市\u003C\u002F",[91,69590,395],{"class":51381},[91,69592,51388],{"class":250},[91,69594,69595,69597,69599,69602,69604],{"class":93,"line":8144},[91,69596,55383],{"class":250},[91,69598,395],{"class":51381},[91,69600,69601],{"class":250},">操作\u003C\u002F",[91,69603,395],{"class":51381},[91,69605,51388],{"class":250},[91,69607,69608,69610,69612],{"class":93,"line":8156},[91,69609,55488],{"class":250},[91,69611,392],{"class":51381},[91,69613,51388],{"class":250},[91,69615,69616,69618,69620],{"class":93,"line":8168},[91,69617,51857],{"class":250},[91,69619,389],{"class":51381},[91,69621,51388],{"class":250},[91,69623,69624,69626,69628],{"class":93,"line":8180},[91,69625,51422],{"class":250},[91,69627,433],{"class":51381},[91,69629,51388],{"class":250},[91,69631,69632],{"class":93,"line":9839},[91,69633,69634],{"class":308},"      \u003C!-- \n",[91,69636,69637],{"class":93,"line":9864},[91,69638,69639],{"class":308},"        \u003Ctr>\n",[91,69641,69642],{"class":93,"line":9887},[91,69643,69644],{"class":308},"          \u003Ctd>1001\u003C\u002Ftd>\n",[91,69646,69647],{"class":93,"line":9911},[91,69648,69649],{"class":308},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[91,69651,69652],{"class":93,"line":9916},[91,69653,69654],{"class":308},"          \u003Ctd>19\u003C\u002Ftd>\n",[91,69656,69657],{"class":93,"line":9921},[91,69658,69659],{"class":308},"          \u003Ctd>男\u003C\u002Ftd>\n",[91,69661,69662],{"class":93,"line":9926},[91,69663,69664],{"class":308},"          \u003Ctd>15000\u003C\u002Ftd>\n",[91,69666,69667],{"class":93,"line":9935},[91,69668,69669],{"class":308},"          \u003Ctd>上海\u003C\u002Ftd>\n",[91,69671,69672],{"class":93,"line":9940},[91,69673,69674],{"class":308},"          \u003Ctd>\n",[91,69676,69677],{"class":93,"line":9946},[91,69678,69679],{"class":308},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[91,69681,69682],{"class":93,"line":9967},[91,69683,69684],{"class":308},"          \u003C\u002Ftd>\n",[91,69686,69687],{"class":93,"line":9973},[91,69688,69689],{"class":308},"        \u003C\u002Ftr> \n",[91,69691,69692],{"class":93,"line":9987},[91,69693,69694],{"class":308},"        -->\n",[91,69696,69697,69699,69701],{"class":93,"line":9993},[91,69698,51857],{"class":250},[91,69700,433],{"class":51381},[91,69702,51388],{"class":250},[91,69704,69705,69707,69709],{"class":93,"line":10020},[91,69706,52498],{"class":250},[91,69708,386],{"class":51381},[91,69710,51388],{"class":250},[91,69712,69713,69715,69717],{"class":93,"line":10029},[91,69714,52225],{"class":250},[91,69716,51894],{"class":51381},[91,69718,51388],{"class":250},[91,69720,69721],{"class":93,"line":10035},[91,69722,60039],{"class":308},[91,69724,69725,69727,69730,69732,69734,69736,69738,69741],{"class":93,"line":10043},[91,69726,11344],{"class":153},[91,69728,69729],{"class":105}," uname",[91,69731,13687],{"class":153},[91,69733,54477],{"class":250},[91,69735,54480],{"class":97},[91,69737,251],{"class":250},[91,69739,69740],{"class":101},"'.uname'",[91,69742,257],{"class":250},[91,69744,69745,69747,69749,69751,69753,69755,69757,69760],{"class":93,"line":10048},[91,69746,11344],{"class":153},[91,69748,15812],{"class":105},[91,69750,13687],{"class":153},[91,69752,54477],{"class":250},[91,69754,54480],{"class":97},[91,69756,251],{"class":250},[91,69758,69759],{"class":101},"'.age'",[91,69761,257],{"class":250},[91,69763,69764,69766,69769,69771,69773,69775,69777,69780],{"class":93,"line":16727},[91,69765,11344],{"class":153},[91,69767,69768],{"class":105}," gender",[91,69770,13687],{"class":153},[91,69772,54477],{"class":250},[91,69774,54480],{"class":97},[91,69776,251],{"class":250},[91,69778,69779],{"class":101},"'.gender'",[91,69781,257],{"class":250},[91,69783,69784,69786,69789,69791,69793,69795,69797,69800],{"class":93,"line":16733},[91,69785,11344],{"class":153},[91,69787,69788],{"class":105}," salary",[91,69790,13687],{"class":153},[91,69792,54477],{"class":250},[91,69794,54480],{"class":97},[91,69796,251],{"class":250},[91,69798,69799],{"class":101},"'.salary'",[91,69801,257],{"class":250},[91,69803,69804,69806,69809,69811,69813,69815,69817,69820],{"class":93,"line":16756},[91,69805,11344],{"class":153},[91,69807,69808],{"class":105}," city",[91,69810,13687],{"class":153},[91,69812,54477],{"class":250},[91,69814,54480],{"class":97},[91,69816,251],{"class":250},[91,69818,69819],{"class":101},"'.city'",[91,69821,257],{"class":250},[91,69823,69824,69826,69829,69831,69833,69835,69837,69840],{"class":93,"line":16762},[91,69825,11344],{"class":153},[91,69827,69828],{"class":105}," tbody",[91,69830,13687],{"class":153},[91,69832,54477],{"class":250},[91,69834,54480],{"class":97},[91,69836,251],{"class":250},[91,69838,69839],{"class":101},"'tbody'",[91,69841,257],{"class":250},[91,69843,69844],{"class":93,"line":16785},[91,69845,2523],{"emptyLinePlaceholder":175},[91,69847,69848],{"class":93,"line":16799},[91,69849,69850],{"class":308},"    \u002F\u002F 获取所有带有name属性的元素\n",[91,69852,69853,69855,69858,69860,69862,69864,69866,69869],{"class":93,"line":16819},[91,69854,11344],{"class":153},[91,69856,69857],{"class":105}," items",[91,69859,13687],{"class":153},[91,69861,54477],{"class":250},[91,69863,55762],{"class":97},[91,69865,251],{"class":250},[91,69867,69868],{"class":101},"'[name]'",[91,69870,257],{"class":250},[91,69872,69873],{"class":93,"line":16825},[91,69874,69875],{"class":308},"    \u002F\u002F 声明一个空的数组\n",[91,69877,69878,69880,69882,69884],{"class":93,"line":16836},[91,69879,11344],{"class":153},[91,69881,57776],{"class":105},[91,69883,13687],{"class":153},[91,69885,51919],{"class":250},[91,69887,69888],{"class":93,"line":16859},[91,69889,69890],{"class":308},"    \u002F\u002F 1.录入模块\n",[91,69892,69893],{"class":93,"line":16881},[91,69894,69895],{"class":308},"    \u002F\u002F 1.1这是一个表单提交事件\n",[91,69897,69898,69900,69903,69905,69907,69909,69911,69914],{"class":93,"line":16886},[91,69899,11344],{"class":153},[91,69901,69902],{"class":105}," info",[91,69904,13687],{"class":153},[91,69906,54477],{"class":250},[91,69908,54480],{"class":97},[91,69910,251],{"class":250},[91,69912,69913],{"class":101},"'.info'",[91,69915,257],{"class":250},[91,69917,69918,69921,69923,69925,69928,69930,69932,69934,69936],{"class":93,"line":16892},[91,69919,69920],{"class":250},"    info.",[91,69922,57894],{"class":97},[91,69924,251],{"class":250},[91,69926,69927],{"class":101},"'submit'",[91,69929,12558],{"class":250},[91,69931,54530],{"class":153},[91,69933,1782],{"class":250},[91,69935,324],{"class":5339},[91,69937,12565],{"class":250},[91,69939,69940],{"class":93,"line":16906},[91,69941,69942],{"class":308},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[91,69944,69945,69948,69951],{"class":93,"line":16919},[91,69946,69947],{"class":250},"      e.",[91,69949,69950],{"class":97},"preventDefault",[91,69952,2099],{"class":250},[91,69954,69955],{"class":93,"line":16924},[91,69956,60093],{"class":308},[91,69958,69959],{"class":93,"line":16938},[91,69960,2523],{"emptyLinePlaceholder":175},[91,69962,69963],{"class":93,"line":16943},[91,69964,69965],{"class":308},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[91,69967,69968],{"class":93,"line":16949},[91,69969,69970],{"class":308},"      \u002F\u002F 先遍历循环\n",[91,69972,69973,69975,69977,69979,69981,69983,69985,69987,69989,69992,69994,69996,69998],{"class":93,"line":16954},[91,69974,52365],{"class":153},[91,69976,1782],{"class":250},[91,69978,51928],{"class":153},[91,69980,9561],{"class":250},[91,69982,296],{"class":153},[91,69984,4216],{"class":105},[91,69986,9568],{"class":250},[91,69988,1159],{"class":153},[91,69990,69991],{"class":250}," items.",[91,69993,52049],{"class":105},[91,69995,3337],{"class":250},[91,69997,2415],{"class":153},[91,69999,12565],{"class":250},[91,70001,70002,70004,70007,70009,70012],{"class":93,"line":16968},[91,70003,2620],{"class":153},[91,70005,70006],{"class":250}," (items[i].value ",[91,70008,54567],{"class":153},[91,70010,70011],{"class":101}," ''",[91,70013,12565],{"class":250},[91,70015,70016,70019,70022,70024,70027],{"class":93,"line":16973},[91,70017,70018],{"class":153},"          return",[91,70020,70021],{"class":97}," alert",[91,70023,251],{"class":250},[91,70025,70026],{"class":101},"'输入内容不能为空'",[91,70028,257],{"class":250},[91,70030,70031],{"class":93,"line":16978},[91,70032,2652],{"class":250},[91,70034,70035],{"class":93,"line":16992},[91,70036,52479],{"class":250},[91,70038,70039],{"class":93,"line":17004},[91,70040,2523],{"emptyLinePlaceholder":175},[91,70042,70043],{"class":93,"line":17009},[91,70044,70045],{"class":308},"      \u002F\u002F 创建新的对象\n",[91,70047,70048,70050,70053,70055],{"class":93,"line":17022},[91,70049,58309],{"class":153},[91,70051,70052],{"class":105}," obj",[91,70054,13687],{"class":153},[91,70056,15695],{"class":250},[91,70058,70059,70062,70064,70066,70068],{"class":93,"line":17027},[91,70060,70061],{"class":250},"        stuID: arr.",[91,70063,52049],{"class":105},[91,70065,45647],{"class":153},[91,70067,25240],{"class":105},[91,70069,31547],{"class":250},[91,70071,70072],{"class":93,"line":17032},[91,70073,70074],{"class":250},"        uname: uname.value,\n",[91,70076,70077],{"class":93,"line":17037},[91,70078,70079],{"class":250},"        age: age.value,\n",[91,70081,70082],{"class":93,"line":17050},[91,70083,70084],{"class":250},"        gender: gender.value,\n",[91,70086,70087],{"class":93,"line":17055},[91,70088,70089],{"class":250},"        salary: salary.value,\n",[91,70091,70092],{"class":93,"line":32714},[91,70093,70094],{"class":250},"        city: city.value\n",[91,70096,70097],{"class":93,"line":32720},[91,70098,52479],{"class":250},[91,70100,70101],{"class":93,"line":32726},[91,70102,70103],{"class":308},"      \u002F\u002F console.log(obj);\n",[91,70105,70106],{"class":93,"line":32732},[91,70107,70108],{"class":308},"      \u002F\u002F 追加到数组里面\n",[91,70110,70111,70113,70115],{"class":93,"line":32738},[91,70112,58088],{"class":250},[91,70114,51965],{"class":97},[91,70116,70117],{"class":250},"(obj)\n",[91,70119,70120],{"class":93,"line":32749},[91,70121,70122],{"class":308},"      \u002F\u002F console.log(arr);\n",[91,70124,70125],{"class":93,"line":32755},[91,70126,70127],{"class":308},"      \u002F\u002F 清空表单  reset重置表单\n",[91,70129,70130,70133,70135,70138],{"class":93,"line":32775},[91,70131,70132],{"class":105},"      this",[91,70134,807],{"class":250},[91,70136,70137],{"class":97},"reset",[91,70139,2099],{"class":250},[91,70141,70142],{"class":93,"line":32781},[91,70143,70144],{"class":308},"      \u002F\u002F 调用渲染函数\n",[91,70146,70147,70150],{"class":93,"line":32792},[91,70148,70149],{"class":97},"      render",[91,70151,2099],{"class":250},[91,70153,70154],{"class":93,"line":32798},[91,70155,33542],{"class":250},[91,70157,70158],{"class":93,"line":32804},[91,70159,70160],{"class":308},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[91,70162,70163,70166,70169],{"class":93,"line":32810},[91,70164,70165],{"class":153},"    function",[91,70167,70168],{"class":97}," render",[91,70170,10976],{"class":250},[91,70172,70173],{"class":93,"line":32816},[91,70174,70175],{"class":308},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[91,70177,70178,70181,70183],{"class":93,"line":32822},[91,70179,70180],{"class":250},"      tbody.innerHTML ",[91,70182,296],{"class":153},[91,70184,70185],{"class":101}," ''\n",[91,70187,70188],{"class":93,"line":32828},[91,70189,70190],{"class":308},"      \u002F\u002F 遍历数组\n",[91,70192,70193,70195,70197,70199,70201,70203,70205,70207,70209,70211,70213,70215,70217],{"class":93,"line":32834},[91,70194,52365],{"class":153},[91,70196,1782],{"class":250},[91,70198,51928],{"class":153},[91,70200,9561],{"class":250},[91,70202,296],{"class":153},[91,70204,4216],{"class":105},[91,70206,9568],{"class":250},[91,70208,1159],{"class":153},[91,70210,52046],{"class":250},[91,70212,52049],{"class":105},[91,70214,3337],{"class":250},[91,70216,2415],{"class":153},[91,70218,12565],{"class":250},[91,70220,70221,70223,70226,70228,70230,70233,70235,70238],{"class":93,"line":32854},[91,70222,61351],{"class":153},[91,70224,70225],{"class":105}," tr",[91,70227,13687],{"class":153},[91,70229,54477],{"class":250},[91,70231,70232],{"class":97},"createElement",[91,70234,251],{"class":250},[91,70236,70237],{"class":101},"'tr'",[91,70239,257],{"class":250},[91,70241,70242,70245,70247],{"class":93,"line":32860},[91,70243,70244],{"class":250},"        tr.innerHTML ",[91,70246,296],{"class":153},[91,70248,70249],{"class":101}," `\n",[91,70251,70252,70255,70257,70259,70261,70264,70267],{"class":93,"line":32876},[91,70253,70254],{"class":101},"        \u003Ctd>${",[91,70256,4003],{"class":250},[91,70258,1139],{"class":101},[91,70260,690],{"class":250},[91,70262,70263],{"class":101},"].",[91,70265,70266],{"class":250},"stuID",[91,70268,70269],{"class":101},"}\u003C\u002Ftd>\n",[91,70271,70272,70275,70277,70279,70281,70283,70286],{"class":93,"line":32882},[91,70273,70274],{"class":101},"          \u003Ctd>${",[91,70276,4003],{"class":250},[91,70278,1139],{"class":101},[91,70280,690],{"class":250},[91,70282,70263],{"class":101},[91,70284,70285],{"class":250},"uname",[91,70287,70269],{"class":101},[91,70289,70290,70292,70294,70296,70298,70300,70303],{"class":93,"line":32896},[91,70291,70274],{"class":101},[91,70293,4003],{"class":250},[91,70295,1139],{"class":101},[91,70297,690],{"class":250},[91,70299,70263],{"class":101},[91,70301,70302],{"class":250},"age",[91,70304,70269],{"class":101},[91,70306,70307,70309,70311,70313,70315,70317,70320],{"class":93,"line":32902},[91,70308,70274],{"class":101},[91,70310,4003],{"class":250},[91,70312,1139],{"class":101},[91,70314,690],{"class":250},[91,70316,70263],{"class":101},[91,70318,70319],{"class":250},"gender",[91,70321,70269],{"class":101},[91,70323,70324,70326,70328,70330,70332,70334,70337],{"class":93,"line":32917},[91,70325,70274],{"class":101},[91,70327,4003],{"class":250},[91,70329,1139],{"class":101},[91,70331,690],{"class":250},[91,70333,70263],{"class":101},[91,70335,70336],{"class":250},"salary",[91,70338,70269],{"class":101},[91,70340,70341,70343,70345,70347,70349,70351,70354],{"class":93,"line":32923},[91,70342,70274],{"class":101},[91,70344,4003],{"class":250},[91,70346,1139],{"class":101},[91,70348,690],{"class":250},[91,70350,70263],{"class":101},[91,70352,70353],{"class":250},"city",[91,70355,70269],{"class":101},[91,70357,70358],{"class":93,"line":32932},[91,70359,69674],{"class":101},[91,70361,70362,70365,70367],{"class":93,"line":32938},[91,70363,70364],{"class":101},"            \u003Ca href=\"javascript:\" data-id=${",[91,70366,690],{"class":250},[91,70368,70369],{"class":101},"}>删除\u003C\u002Fa>\n",[91,70371,70372],{"class":93,"line":32947},[91,70373,70374],{"class":101},"          \u003C\u002Ftd> \n",[91,70376,70377],{"class":93,"line":32953},[91,70378,70379],{"class":101},"          `\n",[91,70381,70382],{"class":93,"line":32959},[91,70383,70384],{"class":308},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[91,70386,70387,70390,70393],{"class":93,"line":32968},[91,70388,70389],{"class":250},"        tbody.",[91,70391,70392],{"class":97},"appendChild",[91,70394,70395],{"class":250},"(tr)\n",[91,70397,70398],{"class":93,"line":32974},[91,70399,52479],{"class":250},[91,70401,70402],{"class":93,"line":32985},[91,70403,2310],{"class":250},[91,70405,70406],{"class":93,"line":32991},[91,70407,2523],{"emptyLinePlaceholder":175},[91,70409,70410],{"class":93,"line":33010},[91,70411,70412],{"class":308},"    \u002F\u002F 3.删除委托\n",[91,70414,70415],{"class":93,"line":33016},[91,70416,70417],{"class":308},"    \u002F\u002F 3.1 事件委托 tbody\n",[91,70419,70420,70423,70425,70427,70429,70431,70433,70435,70437],{"class":93,"line":33027},[91,70421,70422],{"class":250},"    tbody.",[91,70424,57894],{"class":97},[91,70426,251],{"class":250},[91,70428,57899],{"class":101},[91,70430,12558],{"class":250},[91,70432,54530],{"class":153},[91,70434,1782],{"class":250},[91,70436,324],{"class":5339},[91,70438,12565],{"class":250},[91,70440,70441,70443,70445,70447,70449],{"class":93,"line":33033},[91,70442,54561],{"class":153},[91,70444,67115],{"class":250},[91,70446,54567],{"class":153},[91,70448,68337],{"class":101},[91,70450,12565],{"class":250},[91,70452,70453],{"class":93,"line":33053},[91,70454,70455],{"class":308},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[91,70457,70458],{"class":93,"line":33069},[91,70459,70460],{"class":308},"        \u002F\u002F console.log(e.target.dataset.id);\n",[91,70462,70463],{"class":93,"line":33075},[91,70464,70465],{"class":308},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[91,70467,70468,70471,70473,70476,70478],{"class":93,"line":33089},[91,70469,70470],{"class":250},"        arr.",[91,70472,58091],{"class":97},[91,70474,70475],{"class":250},"(e.target.dataset.id, ",[91,70477,466],{"class":105},[91,70479,257],{"class":250},[91,70481,70482],{"class":93,"line":33095},[91,70483,70484],{"class":308},"        \u002F\u002F 重新渲染一次\n",[91,70486,70487,70490],{"class":93,"line":33101},[91,70488,70489],{"class":97},"        render",[91,70491,2099],{"class":250},[91,70493,70494],{"class":93,"line":33112},[91,70495,52479],{"class":250},[91,70497,70498],{"class":93,"line":33118},[91,70499,33542],{"class":250},[91,70501,70502,70504,70506],{"class":93,"line":33124},[91,70503,52498],{"class":250},[91,70505,51894],{"class":51381},[91,70507,51388],{"class":250},[91,70509,70510],{"class":93,"line":33134},[91,70511,2523],{"emptyLinePlaceholder":175},[91,70513,70514,70516,70518],{"class":93,"line":33140},[91,70515,51866],{"class":250},[91,70517,51881],{"class":51381},[91,70519,51388],{"class":250},[91,70521,70522],{"class":93,"line":33151},[91,70523,2523],{"emptyLinePlaceholder":175},[91,70525,70526,70528,70530],{"class":93,"line":33157},[91,70527,51866],{"class":250},[91,70529,50716],{"class":51381},[91,70531,51388],{"class":250},[21,70533,70534],{},"样式：",[82,70536,70540],{"className":70537,"code":70538,"language":70539,"meta":26,"style":26},"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",[88,70541,70542,70547,70557,70566,70570,70574,70579,70589,70594,70598,70603,70613,70618,70627,70631,70635,70640,70645,70655,70665,70670,70674,70679,70688,70698,70703,70713,70723,70727,70732,70740,70744,70749,70754,70759,70767,70776,70780,70785,70794,70798,70803,70812,70816,70821,70830,70839,70847,70851,70856,70865,70875,70884,70894,70900,70909,70919,70929,70933,70938,70947,70955,70965,70973,70982,70991,71001,71009,71013,71018,71027],{"__ignoreMap":26},[91,70543,70544],{"class":93,"line":94},[91,70545,70546],{"class":250},"* {\n",[91,70548,70549,70552,70554],{"class":93,"line":38},[91,70550,70551],{"class":51381},"  margin",[91,70553,51518],{"class":250},[91,70555,70556],{"class":101},"0;\n",[91,70558,70559,70562,70564],{"class":93,"line":1304},[91,70560,70561],{"class":101},"  padding",[91,70563,51518],{"class":250},[91,70565,70556],{"class":101},[91,70567,70568],{"class":93,"line":1319},[91,70569,1689],{"class":250},[91,70571,70572],{"class":93,"line":1325},[91,70573,2523],{"emptyLinePlaceholder":175},[91,70575,70576],{"class":93,"line":1339},[91,70577,70578],{"class":101},"a {\n",[91,70580,70581,70584,70586],{"class":93,"line":1345},[91,70582,70583],{"class":51381},"  text-decoration",[91,70585,51518],{"class":250},[91,70587,70588],{"class":101},"none;\n",[91,70590,70591],{"class":93,"line":1436},[91,70592,70593],{"class":101},"  color:#721c24;\n",[91,70595,70596],{"class":93,"line":1442},[91,70597,1689],{"class":250},[91,70599,70600],{"class":93,"line":1454},[91,70601,70602],{"class":101},"h1 {\n",[91,70604,70605,70608,70610],{"class":93,"line":1736},[91,70606,70607],{"class":51381},"  text-align",[91,70609,51518],{"class":250},[91,70611,70612],{"class":101},"center;\n",[91,70614,70615],{"class":93,"line":1741},[91,70616,70617],{"class":101},"  color:#333;\n",[91,70619,70620,70622,70624],{"class":93,"line":1747},[91,70621,70551],{"class":51381},[91,70623,51518],{"class":250},[91,70625,70626],{"class":101},"20px 0;\n",[91,70628,70629],{"class":93,"line":1752},[91,70630,2797],{"class":250},[91,70632,70633],{"class":93,"line":1766},[91,70634,1689],{"class":250},[91,70636,70637],{"class":93,"line":1771},[91,70638,70639],{"class":101},"table {\n",[91,70641,70642],{"class":93,"line":1777},[91,70643,70644],{"class":101},"  margin:0 auto;\n",[91,70646,70647,70650,70652],{"class":93,"line":1798},[91,70648,70649],{"class":51381},"  width",[91,70651,51518],{"class":250},[91,70653,70654],{"class":101},"800px;\n",[91,70656,70657,70660,70662],{"class":93,"line":1803},[91,70658,70659],{"class":51381},"  border-collapse",[91,70661,51518],{"class":250},[91,70663,70664],{"class":101},"collapse;\n",[91,70666,70667],{"class":93,"line":1817},[91,70668,70669],{"class":101},"  color:#004085;\n",[91,70671,70672],{"class":93,"line":1822},[91,70673,1689],{"class":250},[91,70675,70676],{"class":93,"line":1851},[91,70677,70678],{"class":101},"th {\n",[91,70680,70681,70683,70685],{"class":93,"line":1856},[91,70682,70561],{"class":51381},[91,70684,51518],{"class":250},[91,70686,70687],{"class":101},"10px;\n",[91,70689,70690,70693,70695],{"class":93,"line":1873},[91,70691,70692],{"class":51381},"  background",[91,70694,51518],{"class":250},[91,70696,70697],{"class":308},"#cfe5ff;\n",[91,70699,70700],{"class":93,"line":1878},[91,70701,70702],{"class":250},"  \n",[91,70704,70705,70708,70710],{"class":93,"line":1883},[91,70706,70707],{"class":51381},"  font-size",[91,70709,51518],{"class":250},[91,70711,70712],{"class":101},"20px;\n",[91,70714,70715,70718,70720],{"class":93,"line":1888},[91,70716,70717],{"class":51381},"  font-weight",[91,70719,51518],{"class":250},[91,70721,70722],{"class":101},"400;\n",[91,70724,70725],{"class":93,"line":1902},[91,70726,1689],{"class":250},[91,70728,70729],{"class":93,"line":1907},[91,70730,70731],{"class":101},"td,th {\n",[91,70733,70734,70737],{"class":93,"line":2700},[91,70735,70736],{"class":101},"  border:1px solid",[91,70738,70739],{"class":308}," #b8daff;\n",[91,70741,70742],{"class":93,"line":2714},[91,70743,1689],{"class":250},[91,70745,70746],{"class":93,"line":2722},[91,70747,70748],{"class":101},"td {\n",[91,70750,70751],{"class":93,"line":2727},[91,70752,70753],{"class":101},"  padding:10px;\n",[91,70755,70756],{"class":93,"line":2733},[91,70757,70758],{"class":101},"  color:#666;\n",[91,70760,70761,70763,70765],{"class":93,"line":2739},[91,70762,70607],{"class":51381},[91,70764,51518],{"class":250},[91,70766,70612],{"class":101},[91,70768,70769,70771,70773],{"class":93,"line":2744},[91,70770,70707],{"class":51381},[91,70772,51518],{"class":250},[91,70774,70775],{"class":101},"16px;\n",[91,70777,70778],{"class":93,"line":8071},[91,70779,1689],{"class":250},[91,70781,70782],{"class":93,"line":8095},[91,70783,70784],{"class":101},"tbody tr {\n",[91,70786,70787,70789,70791],{"class":93,"line":8100},[91,70788,70692],{"class":51381},[91,70790,51518],{"class":250},[91,70792,70793],{"class":308},"#fff;\n",[91,70795,70796],{"class":93,"line":8106},[91,70797,1689],{"class":250},[91,70799,70800],{"class":93,"line":8133},[91,70801,70802],{"class":101},"tbody tr:hover {\n",[91,70804,70805,70807,70809],{"class":93,"line":8138},[91,70806,70692],{"class":51381},[91,70808,51518],{"class":250},[91,70810,70811],{"class":308},"#e1ecf8;\n",[91,70813,70814],{"class":93,"line":8144},[91,70815,1689],{"class":250},[91,70817,70818],{"class":93,"line":8156},[91,70819,70820],{"class":101},".info {\n",[91,70822,70823,70825,70827],{"class":93,"line":8168},[91,70824,70649],{"class":51381},[91,70826,51518],{"class":250},[91,70828,70829],{"class":101},"900px;\n",[91,70831,70832,70834,70836],{"class":93,"line":8180},[91,70833,70551],{"class":51381},[91,70835,51518],{"class":250},[91,70837,70838],{"class":101},"50px auto;\n",[91,70840,70841,70843,70845],{"class":93,"line":9839},[91,70842,70607],{"class":51381},[91,70844,51518],{"class":250},[91,70846,70612],{"class":101},[91,70848,70849],{"class":93,"line":9864},[91,70850,1689],{"class":250},[91,70852,70853],{"class":93,"line":9887},[91,70854,70855],{"class":101},".info  input, .info select {\n",[91,70857,70858,70860,70862],{"class":93,"line":9911},[91,70859,70649],{"class":51381},[91,70861,51518],{"class":250},[91,70863,70864],{"class":101},"80px;\n",[91,70866,70867,70870,70872],{"class":93,"line":9916},[91,70868,70869],{"class":51381},"  height",[91,70871,51518],{"class":250},[91,70873,70874],{"class":101},"27px;\n",[91,70876,70877,70880,70882],{"class":93,"line":9921},[91,70878,70879],{"class":51381},"  outline",[91,70881,51518],{"class":250},[91,70883,70588],{"class":101},[91,70885,70886,70889,70891],{"class":93,"line":9926},[91,70887,70888],{"class":51381},"  border-radius",[91,70890,51518],{"class":250},[91,70892,70893],{"class":101},"5px;\n",[91,70895,70896,70898],{"class":93,"line":9935},[91,70897,70736],{"class":101},[91,70899,70739],{"class":308},[91,70901,70902,70905,70907],{"class":93,"line":9940},[91,70903,70904],{"class":51381},"  padding-left",[91,70906,51518],{"class":250},[91,70908,70893],{"class":101},[91,70910,70911,70914,70916],{"class":93,"line":9946},[91,70912,70913],{"class":51381},"  box-sizing",[91,70915,51518],{"class":250},[91,70917,70918],{"class":101},"border-box;\n",[91,70920,70921,70924,70926],{"class":93,"line":9967},[91,70922,70923],{"class":51381},"  margin-right",[91,70925,51518],{"class":250},[91,70927,70928],{"class":101},"15px;\n",[91,70930,70931],{"class":93,"line":9973},[91,70932,1689],{"class":250},[91,70934,70935],{"class":93,"line":9987},[91,70936,70937],{"class":101},".info button {\n",[91,70939,70940,70942,70944],{"class":93,"line":9993},[91,70941,70649],{"class":51381},[91,70943,51518],{"class":250},[91,70945,70946],{"class":101},"60px;\n",[91,70948,70949,70951,70953],{"class":93,"line":10020},[91,70950,70869],{"class":51381},[91,70952,51518],{"class":250},[91,70954,70874],{"class":101},[91,70956,70957,70960,70962],{"class":93,"line":10029},[91,70958,70959],{"class":51381},"  background-color",[91,70961,51518],{"class":250},[91,70963,70964],{"class":308},"#004085;\n",[91,70966,70967,70969,70971],{"class":93,"line":10035},[91,70968,70879],{"class":51381},[91,70970,51518],{"class":250},[91,70972,70588],{"class":101},[91,70974,70975,70978,70980],{"class":93,"line":10043},[91,70976,70977],{"class":51381},"  border",[91,70979,51518],{"class":250},[91,70981,70556],{"class":101},[91,70983,70984,70987,70989],{"class":93,"line":10048},[91,70985,70986],{"class":51381},"  color",[91,70988,51518],{"class":250},[91,70990,70793],{"class":308},[91,70992,70993,70996,70998],{"class":93,"line":16727},[91,70994,70995],{"class":51381},"  cursor",[91,70997,51518],{"class":250},[91,70999,71000],{"class":101},"pointer;\n",[91,71002,71003,71005,71007],{"class":93,"line":16733},[91,71004,70888],{"class":51381},[91,71006,51518],{"class":250},[91,71008,70893],{"class":101},[91,71010,71011],{"class":93,"line":16756},[91,71012,1689],{"class":250},[91,71014,71015],{"class":93,"line":16762},[91,71016,71017],{"class":101},".info .age {\n",[91,71019,71020,71022,71024],{"class":93,"line":16785},[91,71021,70649],{"class":51381},[91,71023,51518],{"class":250},[91,71025,71026],{"class":101},"50px;\n",[91,71028,71029],{"class":93,"line":16799},[91,71030,1689],{"class":250},[21,71032,71033],{},"思路：",[21,71035,71036],{},[24,71037],{"alt":26,"src":71038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[21,71040,71041],{},[24,71042],{"alt":26,"src":71043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[21,71045,71046],{},[24,71047],{"alt":26,"src":71048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[217,71050,71052],{"id":71051},"_3315-重绘回流","3.3.15 重绘回流",[21,71054,71055],{},[24,71056],{"alt":26,"src":71057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[21,71059,71060],{},[24,71061],{"alt":26,"src":71062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[21,71064,71065],{},[24,71066],{"alt":26,"src":71067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[190,71069,71071],{"id":71070},"_34-bom","3.4 BOM",[21,71073,71074],{},[24,71075],{"alt":26,"src":71076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[21,71078,71079],{},"平时写的document省略了window而已，实际上是window.document",[21,71081,71082],{},"函数也是这样，调用的时候实际为window.fn()",[21,71084,71085],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[21,71087,71088],{},"window大部分情况下可以省略",[217,71090,71092],{"id":71091},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[21,71094,71095],{},"只执行一次",[21,71097,71098],{},[24,71099],{"alt":26,"src":71100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[21,71102,71103],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[21,71105,71106],{},[24,71107],{"alt":26,"src":71108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[217,71110,71112],{"id":71111},"_342-js执行机制","3.4.2 JS执行机制",[21,71114,71115],{},[24,71116],{"alt":26,"src":71117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[21,71119,71120],{},"两个的结果都是1111 3333 2222",[21,71122,71123],{},[24,71124],{"alt":26,"src":71125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[21,71127,71128],{},[24,71129],{"alt":26,"src":71130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[21,71132,71133],{},[24,71134],{"alt":26,"src":71135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[21,71137,71138],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[21,71140,71141],{},"工作流程：",[21,71143,71144],{},[24,71145],{"alt":26,"src":71146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[21,71148,71149],{},[24,71150],{"alt":26,"src":71151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[21,71153,71154],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[21,71156,71157],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[217,71159,71161],{"id":71160},"_343-location对象","3.4.3 location对象",[21,71163,71164],{},"location对象属于window这个全局对象下的，可以 省略window",[21,71166,71167],{},[24,71168],{"alt":26,"src":71169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[21,71171,71172],{},"href可以跳转页面",[14,71174,71175],{},[17,71176,71177],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[21,71179,71180],{},"search得到提交信息之后网站后边的地址",[21,71182,71183],{},[24,71184],{"alt":26,"src":71185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[21,71187,71188],{},[24,71189],{"alt":26,"src":71190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[14,71192,71193],{"start":38},[17,71194,71195],{},"hash:这个获取单页面应用#后边的地址",[21,71197,71198],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[21,71200,71201],{},[24,71202],{"alt":26,"src":71203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[82,71205,71207],{"className":53148,"code":71206,"language":53150,"meta":26,"style":26},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[88,71208,71209,71229,71249],{"__ignoreMap":26},[91,71210,71211,71213,71215,71217,71219,71222,71225,71227],{"class":93,"line":94},[91,71212,52225],{"class":250},[91,71214,487],{"class":51381},[91,71216,61138],{"class":97},[91,71218,296],{"class":250},[91,71220,71221],{"class":101},"\"#\u002Fmy\"",[91,71223,71224],{"class":250},">我的\u003C\u002F",[91,71226,487],{"class":51381},[91,71228,51388],{"class":250},[91,71230,71231,71233,71235,71237,71239,71242,71245,71247],{"class":93,"line":38},[91,71232,52225],{"class":250},[91,71234,487],{"class":51381},[91,71236,61138],{"class":97},[91,71238,296],{"class":250},[91,71240,71241],{"class":101},"\"#\u002Ffriend\"",[91,71243,71244],{"class":250},">关注\u003C\u002F",[91,71246,487],{"class":51381},[91,71248,51388],{"class":250},[91,71250,71251,71253,71255,71257,71259,71262,71265,71267],{"class":93,"line":1304},[91,71252,52225],{"class":250},[91,71254,487],{"class":51381},[91,71256,61138],{"class":97},[91,71258,296],{"class":250},[91,71260,71261],{"class":101},"\"#\u002Fdownload\"",[91,71263,71264],{"class":250},">下载\u003C\u002F",[91,71266,487],{"class":51381},[91,71268,51388],{"class":250},[21,71270,71271],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[14,71273,71274],{"start":1304},[17,71275,71276,71277,71279,71280,71282],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53797,71278],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53797,71281],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[217,71284,71286],{"id":71285},"_345-navigator对象","3.4.5 navigator对象",[21,71288,71289],{},[24,71290],{"alt":26,"src":71291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[82,71293,71297],{"className":71294,"code":71295,"language":71296,"meta":26,"style":26},"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",[88,71298,71299,71304,71315,71327,71332,71383,71424,71429,71442,71454,71459],{"__ignoreMap":26},[91,71300,71301],{"class":93,"line":94},[91,71302,71303],{"class":308},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[91,71305,71306,71308,71310,71312],{"class":93,"line":38},[91,71307,475],{"class":153},[91,71309,251],{"class":250},[91,71311,54530],{"class":153},[91,71313,71314],{"class":250}," () { \n",[91,71316,71317,71319,71322,71324],{"class":93,"line":1304},[91,71318,6915],{"class":153},[91,71320,71321],{"class":105}," userAgent",[91,71323,13687],{"class":153},[91,71325,71326],{"class":250}," navigator.userAgent \n",[91,71328,71329],{"class":93,"line":1319},[91,71330,71331],{"class":308},"\u002F\u002F 验证是否为Android或iPhone \n",[91,71333,71334,71336,71339,71341,71344,71347,71349,71351,71354,71356,71359,71363,71365,71367,71369,71372,71374,71376,71378,71380],{"class":93,"line":1325},[91,71335,6915],{"class":153},[91,71337,71338],{"class":105}," android",[91,71340,13687],{"class":153},[91,71342,71343],{"class":250}," userAgent.",[91,71345,71346],{"class":97},"match",[91,71348,251],{"class":250},[91,71350,833],{"class":101},[91,71352,71353],{"class":48058},"(Android);",[91,71355,1235],{"class":153},[91,71357,71358],{"class":105},"[\\s",[91,71360,71362],{"class":71361},"snhLl","\\\u002F",[91,71364,1189],{"class":105},[91,71366,730],{"class":153},[91,71368,251],{"class":48058},[91,71370,71371],{"class":105},"[\\d.]",[91,71373,730],{"class":153},[91,71375,678],{"class":48058},[91,71377,1235],{"class":153},[91,71379,833],{"class":101},[91,71381,71382],{"class":250},") \n",[91,71384,71385,71387,71390,71392,71394,71396,71398,71400,71403,71406,71409,71411,71413,71416,71418,71420,71422],{"class":93,"line":1339},[91,71386,6915],{"class":153},[91,71388,71389],{"class":105}," iphone",[91,71391,13687],{"class":153},[91,71393,71343],{"class":250},[91,71395,71346],{"class":97},[91,71397,251],{"class":250},[91,71399,833],{"class":101},[91,71401,71402],{"class":48058},"(iPhone",[91,71404,71405],{"class":105},"\\s",[91,71407,71408],{"class":48058},"OS)",[91,71410,71405],{"class":105},[91,71412,251],{"class":48058},[91,71414,71415],{"class":105},"[\\d_]",[91,71417,730],{"class":153},[91,71419,678],{"class":48058},[91,71421,833],{"class":101},[91,71423,71382],{"class":250},[91,71425,71426],{"class":93,"line":1345},[91,71427,71428],{"class":308},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[91,71430,71431,71433,71436,71439],{"class":93,"line":1436},[91,71432,1655],{"class":153},[91,71434,71435],{"class":250}," (android ",[91,71437,71438],{"class":153},"||",[91,71440,71441],{"class":250}," iphone) { \n",[91,71443,71444,71447,71449,71452],{"class":93,"line":1442},[91,71445,71446],{"class":250},"location.href ",[91,71448,296],{"class":153},[91,71450,71451],{"class":101}," 'http:\u002F\u002Fm.itcast.cn'",[91,71453,2797],{"class":250},[91,71455,71456],{"class":93,"line":1454},[91,71457,71458],{"class":250},"} \n",[91,71460,71461],{"class":93,"line":1736},[91,71462,71463],{"class":250},"})()\n",[217,71465,71467],{"id":71466},"_346-histroy对象","3.4.6 histroy对象",[21,71469,71470],{},[24,71471],{"alt":26,"src":71472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[21,71474,71475],{},"浏览器地址的前进与后退!!!",[21,71477,71478],{},"history.back() 等效于 history.go(-1)",[21,71480,71481],{},"history.forward() 等效于 history.go(1)",[190,71483,71485],{"id":71484},"_35-本地存储","3.5 本地存储",[14,71487,71488,71491,71494],{},[17,71489,71490],{},"数据存储在用户浏览器中",[17,71492,71493],{},"设置、读取方便、甚至页面刷新不丢失数据",[17,71495,71496],{},"容量较大，sessionStorage和localStorage约 5M 左右",[217,71498,71500],{"id":71499},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[21,71502,71503],{},"只能存储字符串",[21,71505,71506],{},[24,71507],{"alt":26,"src":71508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[21,71510,71511],{},[24,71512],{"alt":26,"src":71513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[21,71515,71516],{},"键值对要加引号,不然就会当变量来看了",[21,71518,71519],{},"localStorage.setItem('uname', 'pink')",[21,71521,71522],{},"刷新之后信息不再丢失",[21,71524,71525],{},"操作key,value会跟着变",[21,71527,71528],{},"删除只删除键就可以,即名字",[21,71530,71519],{},[21,71532,71533],{},"改:",[21,71535,71536],{},"localStorage.setItem('uname','red')",[21,71538,71539],{},"有这个键就是改,没有这个键就是改",[21,71541,71542],{},[24,71543],{"alt":26,"src":71544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[21,71546,71547],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[21,71549,71550],{},[24,71551],{"alt":26,"src":71552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[21,71554,71555],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[217,71557,71559],{"id":71558},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[21,71561,71562],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[21,71564,71565],{},"特性:",[14,71567,71568,71571,71574,71577],{},[17,71569,71570],{},"生命周期为关闭浏览器窗口",[17,71572,71573],{},"在同一个窗口(页面)下数据可以共享",[17,71575,71576],{},"以键值对的形式存储使用",[17,71578,71579],{},"用法跟localStorage 基本相同",[217,71581,71583],{"id":71582},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[21,71585,71586],{},"本地只能存储字符串,无法直接存储复杂数据类型",[82,71588,71590],{"className":53148,"code":71589,"language":53150,"meta":26,"style":26},"\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",[88,71591,71592,71600,71605,71610,71615,71620,71624,71629,71634],{"__ignoreMap":26},[91,71593,71594,71596,71598],{"class":93,"line":94},[91,71595,1159],{"class":250},[91,71597,51894],{"class":51381},[91,71599,51388],{"class":250},[91,71601,71602],{"class":93,"line":38},[91,71603,71604],{"class":250},"    const obj = {\n",[91,71606,71607],{"class":93,"line":1304},[91,71608,71609],{"class":250},"      uname: 'pink老师',\n",[91,71611,71612],{"class":93,"line":1319},[91,71613,71614],{"class":250},"      age: 18,\n",[91,71616,71617],{"class":93,"line":1325},[91,71618,71619],{"class":250},"      gender: '女'\n",[91,71621,71622],{"class":93,"line":1339},[91,71623,2310],{"class":250},[91,71625,71626],{"class":93,"line":1345},[91,71627,71628],{"class":250},"    \u002F\u002F 存储复杂数据类型\n",[91,71630,71631],{"class":93,"line":1436},[91,71632,71633],{"class":250},"    localStorage.setItem('obj', obj)\n",[91,71635,71636,71638,71640],{"class":93,"line":1442},[91,71637,52498],{"class":250},[91,71639,51894],{"class":51381},[91,71641,51388],{"class":250},[21,71643,71644],{},[24,71645],{"alt":26,"src":71646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[21,71648,71649],{},"如果获取一下数据:",[21,71651,71652],{},"log(localStorage.getItem('obj'))",[21,71654,71655],{},[24,71656],{"alt":26,"src":71657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[21,71659,71660],{},"发现直接存对象是使用不了的!!!",[22121,71662,71664],{"id":71663},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[21,71666,71667],{},[24,71668],{"alt":26,"src":71669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[82,71671,71673],{"className":50714,"code":71672,"language":50716,"meta":26,"style":26},"\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",[88,71674,71675,71683,71693,71703,71712,71720,71724,71728,71754,71773,71781,71785,71790,71795],{"__ignoreMap":26},[91,71676,71677,71679,71681],{"class":93,"line":94},[91,71678,1159],{"class":250},[91,71680,51894],{"class":51381},[91,71682,51388],{"class":250},[91,71684,71685,71687,71689,71691],{"class":93,"line":38},[91,71686,11344],{"class":153},[91,71688,70052],{"class":105},[91,71690,13687],{"class":153},[91,71692,15695],{"class":250},[91,71694,71695,71698,71701],{"class":93,"line":1304},[91,71696,71697],{"class":250},"      uname: ",[91,71699,71700],{"class":101},"'pink老师'",[91,71702,31547],{"class":250},[91,71704,71705,71708,71710],{"class":93,"line":1319},[91,71706,71707],{"class":250},"      age: ",[91,71709,899],{"class":105},[91,71711,31547],{"class":250},[91,71713,71714,71717],{"class":93,"line":1325},[91,71715,71716],{"class":250},"      gender: ",[91,71718,71719],{"class":101},"'女'\n",[91,71721,71722],{"class":93,"line":1339},[91,71723,2310],{"class":250},[91,71725,71726],{"class":93,"line":1345},[91,71727,71628],{"class":308},[91,71729,71730,71733,71736,71738,71741,71743,71746,71748,71751],{"class":93,"line":1436},[91,71731,71732],{"class":250},"  localStorage.",[91,71734,71735],{"class":97},"setItem",[91,71737,251],{"class":250},[91,71739,71740],{"class":101},"'obj'",[91,71742,12558],{"class":250},[91,71744,71745],{"class":105},"JSON",[91,71747,807],{"class":250},[91,71749,71750],{"class":97},"stringify",[91,71752,71753],{"class":250},"(obj))\n",[91,71755,71756,71759,71761,71764,71767,71769,71771],{"class":93,"line":1442},[91,71757,71758],{"class":250},"  console.",[91,71760,58328],{"class":97},[91,71762,71763],{"class":250},"(localStorage.",[91,71765,71766],{"class":97},"getItem",[91,71768,251],{"class":250},[91,71770,71740],{"class":101},[91,71772,30578],{"class":250},[91,71774,71775,71777,71779],{"class":93,"line":1454},[91,71776,52498],{"class":250},[91,71778,51894],{"class":51381},[91,71780,51388],{"class":250},[91,71782,71783],{"class":93,"line":1736},[91,71784,70702],{"class":250},[91,71786,71787],{"class":93,"line":1741},[91,71788,71789],{"class":250},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[91,71791,71792],{"class":93,"line":1747},[91,71793,71794],{"class":250},"  类型是字符串的\n",[91,71796,71797],{"class":93,"line":1752},[91,71798,71799],{"class":250},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22121,71801,71803],{"id":71802},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[21,71805,71806],{},[24,71807],{"alt":26,"src":71808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[21,71810,71811],{},[24,71812],{"alt":26,"src":71813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[82,71815,71817],{"className":53148,"code":71816,"language":53150,"meta":26,"style":26},"  \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",[88,71818,71819,71827,71831,71835,71839,71843,71847,71852,71857,71862,71867,71872,71877,71882,71887],{"__ignoreMap":26},[91,71820,71821,71823,71825],{"class":93,"line":94},[91,71822,52225],{"class":250},[91,71824,51894],{"class":51381},[91,71826,51388],{"class":250},[91,71828,71829],{"class":93,"line":38},[91,71830,71604],{"class":250},[91,71832,71833],{"class":93,"line":1304},[91,71834,71609],{"class":250},[91,71836,71837],{"class":93,"line":1319},[91,71838,71614],{"class":250},[91,71840,71841],{"class":93,"line":1325},[91,71842,71619],{"class":250},[91,71844,71845],{"class":93,"line":1339},[91,71846,2310],{"class":250},[91,71848,71849],{"class":93,"line":1345},[91,71850,71851],{"class":250},"    \u002F\u002F 1.存储复杂数据类型\n",[91,71853,71854],{"class":93,"line":1436},[91,71855,71856],{"class":250},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[91,71858,71859],{"class":93,"line":1442},[91,71860,71861],{"class":250},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[91,71863,71864],{"class":93,"line":1454},[91,71865,71866],{"class":250},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[91,71868,71869],{"class":93,"line":1736},[91,71870,71871],{"class":250},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[91,71873,71874],{"class":93,"line":1741},[91,71875,71876],{"class":250},"    \u002F\u002F 取\n",[91,71878,71879],{"class":93,"line":1747},[91,71880,71881],{"class":250},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[91,71883,71884],{"class":93,"line":1752},[91,71885,71886],{"class":250},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[91,71888,71889,71891,71893],{"class":93,"line":1766},[91,71890,52498],{"class":250},[91,71892,51894],{"class":51381},[91,71894,51388],{"class":250},[21,71896,71897],{},[24,71898],{"alt":26,"src":71899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[217,71901,71903],{"id":71902},"_356-数组map方法","3.5.6 数组map方法",[21,71905,71906],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[21,71908,71909],{},[24,71910],{"alt":26,"src":71911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[21,71913,71914],{},[24,71915],{"alt":26,"src":71916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[21,71918,71919,71922],{},[398,71920,71921],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[21,71924,71925],{},"map有返回值，但是forEach没有返回值",[21,71927,71928],{},"map是个方法。用的时候要加 ()",[21,71930,71931],{},"map返回的是一个数组",[217,71933,71935],{"id":71934},"_357-数组中join方法","3.5.7 数组中join方法",[21,71937,71938],{},[24,71939],{"alt":26,"src":71940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[21,71942,71943],{},"类似于python中拼接字符串一样！",[14,71945,71946,71949,71952],{},[17,71947,71948],{},"小括号为空则逗号分开",[17,71950,71951],{},"小括号为空字符串 ''，则元素之间没有分隔符",[17,71953,71954],{},"小括号用啥符号就用进行分割",[217,71956,71958],{"id":71957},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[14,71960,71961,71964,71967,71970,71973],{},[17,71962,71963],{},"记住本地时间获取快速方式：new Date().toDateString()",[17,71965,71966],{},"尽量减少DOM操作，用好map+join的渲染方式",[17,71968,71969],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[17,71971,71972],{},"return可以实现函数的结束",[17,71974,71975],{},"禁止跳转是 preventDefault() 不要忘记",[82,71977,71979],{"className":50714,"code":71978,"language":50716,"meta":26,"style":26},"\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",[88,71980,71981,71991,72005,72009,72017,72031,72051,72063,72071,72077,72087,72097,72101,72105,72111,72121,72133,72137,72141,72148,72160,72174,72184,72188,72192,72199,72206,72213,72225,72237,72247,72259,72263,72267,72274,72281,72293,72305,72315,72327,72357,72361,72365,72372,72384,72396,72420,72430,72440,72444,72448,72456,72467,72479,72491,72503,72520,72532,72544,72548,72552,72559,72571,72583,72595,72606,72624,72637,72649,72673,72684,72688,72692,72700,72710,72714,72718,72724,72736,72747,72757,72761,72765,72771,72793,72797,72801,72807,72813,72825,72835,72847,72877,72890,72907,72911,72915,72926,72948,72958,72962,72966,72979,72989,73001,73013,73025,73037,73047,73057,73067,73078,73091,73095,73103,73111,73115,73123,73136,73156,73189,73222,73255,73281,73299,73317,73325,73351,73369,73387,73405,73423,73441,73449,73457,73475,73483,73512,73520,73528,73536,73549,73561,73573,73585,73597,73609,73622,73634,73642,73650,73658,73663,73668,73672,73676,73680,73684,73688,73692,73697,73702,73707,73712,73720,73728,73736,73741,73746,73751,73756,73761,73766,73771,73776,73781,73786,73791,73796,73801,73806,73810,73815,73820,73830,73839,73843,73848,73857,73873,73915,73955,73994,74059,74067,74071,74076,74094,74102,74107,74112,74142,74148,74153,74166,74178,74190,74202,74214,74226,74238,74242,74252,74256,74261,74266,74270,74279,74283,74288,74293,74312,74317,74337,74341,74346,74350,74355,74373,74391,74409,74428,74447,74466,74471,74477,74498,74504,74513,74519,74525,74531,74558,74571,74576,74586,74592,74598,74604,74610,74615,74621,74627,74633,74639,74672,74677,74682,74687,74692,74698,74704,74710,74721,74726,74732,74739,74753,74759,74783,74788,74793,74799,74805,74826,74832,74845,74851,74857,74863,74869,74874,74880,74886,74892,74910,74924,74930,74938,74944,74966,74971,74976,74981,74986,74991,75000,75009,75014],{"__ignoreMap":26},[91,71982,71983,71985,71987,71989],{"class":93,"line":94},[91,71984,51378],{"class":250},[91,71986,51382],{"class":51381},[91,71988,51385],{"class":97},[91,71990,51388],{"class":250},[91,71992,71993,71995,71997,71999,72001,72003],{"class":93,"line":38},[91,71994,1159],{"class":250},[91,71996,50716],{"class":51381},[91,71998,51397],{"class":97},[91,72000,296],{"class":250},[91,72002,51402],{"class":101},[91,72004,51388],{"class":250},[91,72006,72007],{"class":93,"line":1304},[91,72008,2523],{"emptyLinePlaceholder":175},[91,72010,72011,72013,72015],{"class":93,"line":1319},[91,72012,1159],{"class":250},[91,72014,51415],{"class":51381},[91,72016,51388],{"class":250},[91,72018,72019,72021,72023,72025,72027,72029],{"class":93,"line":1325},[91,72020,52225],{"class":250},[91,72022,51425],{"class":51381},[91,72024,51428],{"class":97},[91,72026,296],{"class":250},[91,72028,51433],{"class":101},[91,72030,51388],{"class":250},[91,72032,72033,72035,72037,72039,72041,72043,72045,72047,72049],{"class":93,"line":1339},[91,72034,52225],{"class":250},[91,72036,51425],{"class":51381},[91,72038,15043],{"class":97},[91,72040,296],{"class":250},[91,72042,51472],{"class":101},[91,72044,51452],{"class":97},[91,72046,296],{"class":250},[91,72048,51479],{"class":101},[91,72050,51388],{"class":250},[91,72052,72053,72055,72057,72059,72061],{"class":93,"line":1345},[91,72054,52225],{"class":250},[91,72056,51488],{"class":51381},[91,72058,51491],{"class":250},[91,72060,51488],{"class":51381},[91,72062,51388],{"class":250},[91,72064,72065,72067,72069],{"class":93,"line":1436},[91,72066,52225],{"class":250},[91,72068,168],{"class":51381},[91,72070,51388],{"class":250},[91,72072,72073,72075],{"class":93,"line":1442},[91,72074,6526],{"class":51381},[91,72076,15695],{"class":250},[91,72078,72079,72081,72083,72085],{"class":93,"line":1454},[91,72080,54776],{"class":105},[91,72082,51518],{"class":250},[91,72084,440],{"class":105},[91,72086,1415],{"class":250},[91,72088,72089,72091,72093,72095],{"class":93,"line":1736},[91,72090,54787],{"class":105},[91,72092,51518],{"class":250},[91,72094,440],{"class":105},[91,72096,1415],{"class":250},[91,72098,72099],{"class":93,"line":1741},[91,72100,2310],{"class":250},[91,72102,72103],{"class":93,"line":1747},[91,72104,2523],{"emptyLinePlaceholder":175},[91,72106,72107,72109],{"class":93,"line":1752},[91,72108,57360],{"class":51381},[91,72110,15695],{"class":250},[91,72112,72113,72115,72117,72119],{"class":93,"line":1766},[91,72114,57367],{"class":105},[91,72116,51518],{"class":250},[91,72118,51673],{"class":105},[91,72120,1415],{"class":250},[91,72122,72123,72125,72127,72129,72131],{"class":93,"line":1771},[91,72124,62158],{"class":105},[91,72126,51518],{"class":250},[91,72128,949],{"class":105},[91,72130,51573],{"class":153},[91,72132,1415],{"class":250},[91,72134,72135],{"class":93,"line":1777},[91,72136,2310],{"class":250},[91,72138,72139],{"class":93,"line":1798},[91,72140,2523],{"emptyLinePlaceholder":175},[91,72142,72143,72146],{"class":93,"line":1803},[91,72144,72145],{"class":97},"    .info",[91,72147,15695],{"class":250},[91,72149,72150,72152,72154,72156,72158],{"class":93,"line":1817},[91,72151,54852],{"class":105},[91,72153,51518],{"class":250},[91,72155,51570],{"class":105},[91,72157,51573],{"class":153},[91,72159,1415],{"class":250},[91,72161,72162,72164,72166,72168,72170,72172],{"class":93,"line":1822},[91,72163,54787],{"class":105},[91,72165,51518],{"class":250},[91,72167,695],{"class":105},[91,72169,51573],{"class":153},[91,72171,51637],{"class":105},[91,72173,1415],{"class":250},[91,72175,72176,72178,72180,72182],{"class":93,"line":1851},[91,72177,57367],{"class":105},[91,72179,51518],{"class":250},[91,72181,51673],{"class":105},[91,72183,1415],{"class":250},[91,72185,72186],{"class":93,"line":1856},[91,72187,2310],{"class":250},[91,72189,72190],{"class":93,"line":1873},[91,72191,2523],{"emptyLinePlaceholder":175},[91,72193,72194,72197],{"class":93,"line":1878},[91,72195,72196],{"class":97},"    .uname",[91,72198,31547],{"class":250},[91,72200,72201,72204],{"class":93,"line":1883},[91,72202,72203],{"class":97},"    .age",[91,72205,31547],{"class":250},[91,72207,72208,72211],{"class":93,"line":1888},[91,72209,72210],{"class":97},"    .salary",[91,72212,15695],{"class":250},[91,72214,72215,72217,72219,72221,72223],{"class":93,"line":1902},[91,72216,54852],{"class":105},[91,72218,51518],{"class":250},[91,72220,560],{"class":105},[91,72222,51573],{"class":153},[91,72224,1415],{"class":250},[91,72226,72227,72229,72231,72233,72235],{"class":93,"line":1907},[91,72228,54866],{"class":105},[91,72230,51518],{"class":250},[91,72232,949],{"class":105},[91,72234,51573],{"class":153},[91,72236,1415],{"class":250},[91,72238,72239,72241,72243,72245],{"class":93,"line":2700},[91,72240,61861],{"class":105},[91,72242,51518],{"class":250},[91,72244,54818],{"class":105},[91,72246,1415],{"class":250},[91,72248,72249,72251,72253,72255,72257],{"class":93,"line":2714},[91,72250,61831],{"class":105},[91,72252,51518],{"class":250},[91,72254,824],{"class":105},[91,72256,51573],{"class":153},[91,72258,1415],{"class":250},[91,72260,72261],{"class":93,"line":2722},[91,72262,2310],{"class":250},[91,72264,72265],{"class":93,"line":2727},[91,72266,2523],{"emptyLinePlaceholder":175},[91,72268,72269,72272],{"class":93,"line":2733},[91,72270,72271],{"class":97},"    .gender",[91,72273,31547],{"class":250},[91,72275,72276,72279],{"class":93,"line":2739},[91,72277,72278],{"class":97},"    .city",[91,72280,15695],{"class":250},[91,72282,72283,72285,72287,72289,72291],{"class":93,"line":2744},[91,72284,54852],{"class":105},[91,72286,51518],{"class":250},[91,72288,560],{"class":105},[91,72290,51573],{"class":153},[91,72292,1415],{"class":250},[91,72294,72295,72297,72299,72301,72303],{"class":93,"line":8071},[91,72296,54866],{"class":105},[91,72298,51518],{"class":250},[91,72300,1074],{"class":105},[91,72302,51573],{"class":153},[91,72304,1415],{"class":250},[91,72306,72307,72309,72311,72313],{"class":93,"line":8095},[91,72308,61861],{"class":105},[91,72310,51518],{"class":250},[91,72312,54818],{"class":105},[91,72314,1415],{"class":250},[91,72316,72317,72319,72321,72323,72325],{"class":93,"line":8100},[91,72318,61831],{"class":105},[91,72320,51518],{"class":250},[91,72322,824],{"class":105},[91,72324,51573],{"class":153},[91,72326,1415],{"class":250},[91,72328,72329,72331,72333,72335,72337,72339,72342,72344,72346,72348,72351,72353,72355],{"class":93,"line":8106},[91,72330,62058],{"class":105},[91,72332,51518],{"class":250},[91,72334,466],{"class":105},[91,72336,51573],{"class":153},[91,72338,51602],{"class":105},[91,72340,72341],{"class":105}," rgb",[91,72343,251],{"class":250},[91,72345,1846],{"class":105},[91,72347,12558],{"class":250},[91,72349,72350],{"class":105},"197",[91,72352,12558],{"class":250},[91,72354,72350],{"class":105},[91,72356,2842],{"class":250},[91,72358,72359],{"class":93,"line":8133},[91,72360,2310],{"class":250},[91,72362,72363],{"class":93,"line":8138},[91,72364,2523],{"emptyLinePlaceholder":175},[91,72366,72367,72370],{"class":93,"line":8144},[91,72368,72369],{"class":51381},"    button",[91,72371,15695],{"class":250},[91,72373,72374,72376,72378,72380,72382],{"class":93,"line":8156},[91,72375,54866],{"class":105},[91,72377,51518],{"class":250},[91,72379,1074],{"class":105},[91,72381,51573],{"class":153},[91,72383,1415],{"class":250},[91,72385,72386,72388,72390,72392,72394],{"class":93,"line":8168},[91,72387,54852],{"class":105},[91,72389,51518],{"class":250},[91,72391,733],{"class":105},[91,72393,51573],{"class":153},[91,72395,1415],{"class":250},[91,72397,72398,72400,72402,72405,72407,72409,72411,72414,72416,72418],{"class":93,"line":8180},[91,72399,54965],{"class":105},[91,72401,51518],{"class":250},[91,72403,72404],{"class":105},"rgb",[91,72406,251],{"class":250},[91,72408,1218],{"class":105},[91,72410,12558],{"class":250},[91,72412,72413],{"class":105},"187",[91,72415,12558],{"class":250},[91,72417,548],{"class":105},[91,72419,2842],{"class":250},[91,72421,72422,72424,72426,72428],{"class":93,"line":9839},[91,72423,57497],{"class":105},[91,72425,51518],{"class":250},[91,72427,60923],{"class":105},[91,72429,1415],{"class":250},[91,72431,72432,72434,72436,72438],{"class":93,"line":9864},[91,72433,62058],{"class":105},[91,72435,51518],{"class":250},[91,72437,440],{"class":105},[91,72439,1415],{"class":250},[91,72441,72442],{"class":93,"line":9887},[91,72443,2310],{"class":250},[91,72445,72446],{"class":93,"line":9911},[91,72447,2523],{"emptyLinePlaceholder":175},[91,72449,72450,72452,72454],{"class":93,"line":9916},[91,72451,72369],{"class":51381},[91,72453,51769],{"class":51381},[91,72455,15695],{"class":250},[91,72457,72458,72460,72462,72465],{"class":93,"line":9921},[91,72459,55090],{"class":105},[91,72461,51518],{"class":250},[91,72463,72464],{"class":105},"inline-block",[91,72466,1415],{"class":250},[91,72468,72469,72471,72473,72475,72477],{"class":93,"line":9926},[91,72470,54852],{"class":105},[91,72472,51518],{"class":250},[91,72474,695],{"class":105},[91,72476,51573],{"class":153},[91,72478,1415],{"class":250},[91,72480,72481,72483,72485,72487,72489],{"class":93,"line":9935},[91,72482,54866],{"class":105},[91,72484,51518],{"class":250},[91,72486,695],{"class":105},[91,72488,51573],{"class":153},[91,72490,1415],{"class":250},[91,72492,72493,72495,72497,72499,72501],{"class":93,"line":9940},[91,72494,57440],{"class":105},[91,72496,51518],{"class":250},[91,72498,721],{"class":105},[91,72500,51573],{"class":153},[91,72502,1415],{"class":250},[91,72504,72505,72507,72509,72511,72513,72515,72518],{"class":93,"line":9946},[91,72506,62058],{"class":105},[91,72508,51518],{"class":250},[91,72510,466],{"class":105},[91,72512,51573],{"class":153},[91,72514,51602],{"class":105},[91,72516,72517],{"class":105}," #fff",[91,72519,1415],{"class":250},[91,72521,72522,72524,72526,72528,72530],{"class":93,"line":9967},[91,72523,55215],{"class":105},[91,72525,51518],{"class":250},[91,72527,568],{"class":105},[91,72529,51573],{"class":153},[91,72531,1415],{"class":250},[91,72533,72534,72536,72538,72540,72542],{"class":93,"line":9973},[91,72535,61831],{"class":105},[91,72537,51518],{"class":250},[91,72539,466],{"class":105},[91,72541,51573],{"class":153},[91,72543,1415],{"class":250},[91,72545,72546],{"class":93,"line":9987},[91,72547,2310],{"class":250},[91,72549,72550],{"class":93,"line":9993},[91,72551,2523],{"emptyLinePlaceholder":175},[91,72553,72554,72557],{"class":93,"line":10020},[91,72555,72556],{"class":97},"    .total",[91,72558,15695],{"class":250},[91,72560,72561,72563,72565,72567,72569],{"class":93,"line":10029},[91,72562,54852],{"class":105},[91,72564,51518],{"class":250},[91,72566,61710],{"class":105},[91,72568,51573],{"class":153},[91,72570,1415],{"class":250},[91,72572,72573,72575,72577,72579,72581],{"class":93,"line":10035},[91,72574,54866],{"class":105},[91,72576,51518],{"class":250},[91,72578,650],{"class":105},[91,72580,51573],{"class":153},[91,72582,1415],{"class":250},[91,72584,72585,72587,72589,72591,72593],{"class":93,"line":10043},[91,72586,57440],{"class":105},[91,72588,51518],{"class":250},[91,72590,650],{"class":105},[91,72592,51573],{"class":153},[91,72594,1415],{"class":250},[91,72596,72597,72599,72601,72604],{"class":93,"line":10048},[91,72598,57367],{"class":105},[91,72600,51518],{"class":250},[91,72602,72603],{"class":105},"right",[91,72605,1415],{"class":250},[91,72607,72608,72610,72612,72614,72616,72618,72620,72622],{"class":93,"line":16727},[91,72609,54787],{"class":105},[91,72611,51518],{"class":250},[91,72613,650],{"class":105},[91,72615,51573],{"class":153},[91,72617,51637],{"class":105},[91,72619,2161],{"class":105},[91,72621,51573],{"class":153},[91,72623,1415],{"class":250},[91,72625,72626,72629,72631,72633,72635],{"class":93,"line":16733},[91,72627,72628],{"class":105},"      padding-right",[91,72630,51518],{"class":250},[91,72632,695],{"class":105},[91,72634,51573],{"class":153},[91,72636,1415],{"class":250},[91,72638,72639,72641,72643,72645,72647],{"class":93,"line":16756},[91,72640,55003],{"class":105},[91,72642,51518],{"class":250},[91,72644,772],{"class":105},[91,72646,51573],{"class":153},[91,72648,1415],{"class":250},[91,72650,72651,72653,72655,72657,72659,72662,72664,72667,72669,72671],{"class":93,"line":16762},[91,72652,54965],{"class":105},[91,72654,51518],{"class":250},[91,72656,72404],{"class":105},[91,72658,251],{"class":250},[91,72660,72661],{"class":105},"237",[91,72663,12558],{"class":250},[91,72665,72666],{"class":105},"235",[91,72668,12558],{"class":250},[91,72670,72666],{"class":105},[91,72672,2842],{"class":250},[91,72674,72675,72678,72680,72682],{"class":93,"line":16785},[91,72676,72677],{"class":105},"      box-sizing",[91,72679,51518],{"class":250},[91,72681,60586],{"class":105},[91,72683,1415],{"class":250},[91,72685,72686],{"class":93,"line":16799},[91,72687,2310],{"class":250},[91,72689,72690],{"class":93,"line":16819},[91,72691,2523],{"emptyLinePlaceholder":175},[91,72693,72694,72696,72698],{"class":93,"line":16825},[91,72695,72556],{"class":97},[91,72697,51769],{"class":51381},[91,72699,15695],{"class":250},[91,72701,72702,72704,72706,72708],{"class":93,"line":16836},[91,72703,57497],{"class":105},[91,72705,51518],{"class":250},[91,72707,57502],{"class":105},[91,72709,1415],{"class":250},[91,72711,72712],{"class":93,"line":16859},[91,72713,2310],{"class":250},[91,72715,72716],{"class":93,"line":16881},[91,72717,2523],{"emptyLinePlaceholder":175},[91,72719,72720,72722],{"class":93,"line":16886},[91,72721,65104],{"class":51381},[91,72723,15695],{"class":250},[91,72725,72726,72728,72730,72732,72734],{"class":93,"line":16892},[91,72727,54852],{"class":105},[91,72729,51518],{"class":250},[91,72731,61710],{"class":105},[91,72733,51573],{"class":153},[91,72735,1415],{"class":250},[91,72737,72738,72740,72742,72745],{"class":93,"line":16906},[91,72739,54787],{"class":105},[91,72741,51518],{"class":250},[91,72743,72744],{"class":105},"auto",[91,72746,1415],{"class":250},[91,72748,72749,72751,72753,72755],{"class":93,"line":16919},[91,72750,65111],{"class":105},[91,72752,51518],{"class":250},[91,72754,65116],{"class":105},[91,72756,1415],{"class":250},[91,72758,72759],{"class":93,"line":16924},[91,72760,2310],{"class":250},[91,72762,72763],{"class":93,"line":16938},[91,72764,2523],{"emptyLinePlaceholder":175},[91,72766,72767,72769],{"class":93,"line":16943},[91,72768,65196],{"class":51381},[91,72770,15695],{"class":250},[91,72772,72773,72775,72777,72779,72781,72783,72785,72787,72789,72791],{"class":93,"line":16949},[91,72774,54965],{"class":105},[91,72776,51518],{"class":250},[91,72778,72404],{"class":105},[91,72780,251],{"class":250},[91,72782,72661],{"class":105},[91,72784,12558],{"class":250},[91,72786,72666],{"class":105},[91,72788,12558],{"class":250},[91,72790,72666],{"class":105},[91,72792,2842],{"class":250},[91,72794,72795],{"class":93,"line":16954},[91,72796,2310],{"class":250},[91,72798,72799],{"class":93,"line":16968},[91,72800,2523],{"emptyLinePlaceholder":175},[91,72802,72803,72805],{"class":93,"line":16973},[91,72804,65196],{"class":51381},[91,72806,31547],{"class":250},[91,72808,72809,72811],{"class":93,"line":16978},[91,72810,65262],{"class":51381},[91,72812,15695],{"class":250},[91,72814,72815,72817,72819,72821,72823],{"class":93,"line":16992},[91,72816,54866],{"class":105},[91,72818,51518],{"class":250},[91,72820,522],{"class":105},[91,72822,51573],{"class":153},[91,72824,1415],{"class":250},[91,72826,72827,72829,72831,72833],{"class":93,"line":17004},[91,72828,57367],{"class":105},[91,72830,51518],{"class":250},[91,72832,23860],{"class":105},[91,72834,1415],{"class":250},[91,72836,72837,72839,72841,72843,72845],{"class":93,"line":17009},[91,72838,55003],{"class":105},[91,72840,51518],{"class":250},[91,72842,798],{"class":105},[91,72844,51573],{"class":153},[91,72846,1415],{"class":250},[91,72848,72849,72851,72853,72855,72857,72859,72861,72863,72866,72868,72871,72873,72875],{"class":93,"line":17022},[91,72850,62058],{"class":105},[91,72852,51518],{"class":250},[91,72854,466],{"class":105},[91,72856,51573],{"class":153},[91,72858,51602],{"class":105},[91,72860,72341],{"class":105},[91,72862,251],{"class":250},[91,72864,72865],{"class":105},"228",[91,72867,12558],{"class":250},[91,72869,72870],{"class":105},"225",[91,72872,12558],{"class":250},[91,72874,72870],{"class":105},[91,72876,2842],{"class":250},[91,72878,72879,72882,72884,72886,72888],{"class":93,"line":17027},[91,72880,72881],{"class":105},"      padding-left",[91,72883,51518],{"class":250},[91,72885,568],{"class":105},[91,72887,51573],{"class":153},[91,72889,1415],{"class":250},[91,72891,72892,72894,72896,72898,72901,72903,72905],{"class":93,"line":17032},[91,72893,61941],{"class":105},[91,72895,51518],{"class":250},[91,72897,28240],{"class":105},[91,72899,72900],{"class":105}," linear",[91,72902,61948],{"class":105},[91,72904,944],{"class":153},[91,72906,1415],{"class":250},[91,72908,72909],{"class":93,"line":17037},[91,72910,2310],{"class":250},[91,72912,72913],{"class":93,"line":17050},[91,72914,2523],{"emptyLinePlaceholder":175},[91,72916,72917,72920,72922,72924],{"class":93,"line":17055},[91,72918,72919],{"class":51381},"    tbody",[91,72921,70225],{"class":51381},[91,72923,61021],{"class":97},[91,72925,15695],{"class":250},[91,72927,72928,72930,72932,72934,72936,72938,72940,72942,72944,72946],{"class":93,"line":32714},[91,72929,54965],{"class":105},[91,72931,51518],{"class":250},[91,72933,72404],{"class":105},[91,72935,251],{"class":250},[91,72937,72661],{"class":105},[91,72939,12558],{"class":250},[91,72941,72666],{"class":105},[91,72943,12558],{"class":250},[91,72945,72666],{"class":105},[91,72947,2842],{"class":250},[91,72949,72950,72952,72954,72956],{"class":93,"line":32720},[91,72951,62106],{"class":105},[91,72953,51518],{"class":250},[91,72955,62111],{"class":105},[91,72957,1415],{"class":250},[91,72959,72960],{"class":93,"line":32726},[91,72961,2310],{"class":250},[91,72963,72964],{"class":93,"line":32732},[91,72965,2523],{"emptyLinePlaceholder":175},[91,72967,72968,72970,72972,72975,72977],{"class":93,"line":32738},[91,72969,72919],{"class":51381},[91,72971,70225],{"class":51381},[91,72973,72974],{"class":51381}," td",[91,72976,1523],{"class":51381},[91,72978,15695],{"class":250},[91,72980,72981,72983,72985,72987],{"class":93,"line":32749},[91,72982,55090],{"class":105},[91,72984,51518],{"class":250},[91,72986,60950],{"class":105},[91,72988,1415],{"class":250},[91,72990,72991,72993,72995,72997,72999],{"class":93,"line":32755},[91,72992,54852],{"class":105},[91,72994,51518],{"class":250},[91,72996,1156],{"class":105},[91,72998,51573],{"class":153},[91,73000,1415],{"class":250},[91,73002,73003,73005,73007,73009,73011],{"class":93,"line":32775},[91,73004,54866],{"class":105},[91,73006,51518],{"class":250},[91,73008,1074],{"class":105},[91,73010,51573],{"class":153},[91,73012,1415],{"class":250},[91,73014,73015,73017,73019,73021,73023],{"class":93,"line":32781},[91,73016,57440],{"class":105},[91,73018,51518],{"class":250},[91,73020,1074],{"class":105},[91,73022,51573],{"class":153},[91,73024,1415],{"class":250},[91,73026,73027,73029,73031,73033,73035],{"class":93,"line":32792},[91,73028,62158],{"class":105},[91,73030,51518],{"class":250},[91,73032,327],{"class":105},[91,73034,51573],{"class":153},[91,73036,1415],{"class":250},[91,73038,73039,73041,73043,73045],{"class":93,"line":32798},[91,73040,57497],{"class":105},[91,73042,51518],{"class":250},[91,73044,60923],{"class":105},[91,73046,1415],{"class":250},[91,73048,73049,73051,73053,73055],{"class":93,"line":32804},[91,73050,57367],{"class":105},[91,73052,51518],{"class":250},[91,73054,51673],{"class":105},[91,73056,1415],{"class":250},[91,73058,73059,73061,73063,73065],{"class":93,"line":32810},[91,73060,64051],{"class":105},[91,73062,51518],{"class":250},[91,73064,54818],{"class":105},[91,73066,1415],{"class":250},[91,73068,73069,73071,73073,73076],{"class":93,"line":32816},[91,73070,54965],{"class":105},[91,73072,51518],{"class":250},[91,73074,73075],{"class":105},"orange",[91,73077,1415],{"class":250},[91,73079,73080,73082,73084,73087,73089],{"class":93,"line":32822},[91,73081,55215],{"class":105},[91,73083,51518],{"class":250},[91,73085,73086],{"class":105},"12.5",[91,73088,51573],{"class":153},[91,73090,1415],{"class":250},[91,73092,73093],{"class":93,"line":32828},[91,73094,2310],{"class":250},[91,73096,73097,73099,73101],{"class":93,"line":32834},[91,73098,52498],{"class":250},[91,73100,168],{"class":51381},[91,73102,51388],{"class":250},[91,73104,73105,73107,73109],{"class":93,"line":32854},[91,73106,51866],{"class":250},[91,73108,51415],{"class":51381},[91,73110,51388],{"class":250},[91,73112,73113],{"class":93,"line":32860},[91,73114,2523],{"emptyLinePlaceholder":175},[91,73116,73117,73119,73121],{"class":93,"line":32876},[91,73118,1159],{"class":250},[91,73120,51881],{"class":51381},[91,73122,51388],{"class":250},[91,73124,73125,73127,73129,73132,73134],{"class":93,"line":32882},[91,73126,52225],{"class":250},[91,73128,190],{"class":51381},[91,73130,73131],{"class":250},">学生就业统计表\u003C\u002F",[91,73133,190],{"class":51381},[91,73135,51388],{"class":250},[91,73137,73138,73140,73142,73144,73146,73148,73150,73152,73154],{"class":93,"line":32896},[91,73139,52225],{"class":250},[91,73141,66706],{"class":51381},[91,73143,53567],{"class":97},[91,73145,296],{"class":250},[91,73147,62745],{"class":101},[91,73149,69151],{"class":97},[91,73151,296],{"class":250},[91,73153,31857],{"class":101},[91,73155,51388],{"class":250},[91,73157,73158,73160,73162,73164,73166,73168,73170,73172,73174,73176,73178,73181,73183,73185,73187],{"class":93,"line":32902},[91,73159,51422],{"class":250},[91,73161,53902],{"class":51381},[91,73163,53905],{"class":97},[91,73165,296],{"class":250},[91,73167,62780],{"class":101},[91,73169,15043],{"class":97},[91,73171,296],{"class":250},[91,73173,69177],{"class":101},[91,73175,61101],{"class":97},[91,73177,296],{"class":250},[91,73179,73180],{"class":101},"\"姓名\"",[91,73182,53567],{"class":97},[91,73184,296],{"class":250},[91,73186,69177],{"class":101},[91,73188,51388],{"class":250},[91,73190,73191,73193,73195,73197,73199,73201,73203,73205,73207,73209,73211,73214,73216,73218,73220],{"class":93,"line":32917},[91,73192,51422],{"class":250},[91,73194,53902],{"class":51381},[91,73196,53905],{"class":97},[91,73198,296],{"class":250},[91,73200,62780],{"class":101},[91,73202,15043],{"class":97},[91,73204,296],{"class":250},[91,73206,69205],{"class":101},[91,73208,61101],{"class":97},[91,73210,296],{"class":250},[91,73212,73213],{"class":101},"\"年龄\"",[91,73215,53567],{"class":97},[91,73217,296],{"class":250},[91,73219,69205],{"class":101},[91,73221,51388],{"class":250},[91,73223,73224,73226,73228,73230,73232,73234,73236,73238,73240,73242,73244,73247,73249,73251,73253],{"class":93,"line":32923},[91,73225,51422],{"class":250},[91,73227,53902],{"class":51381},[91,73229,53905],{"class":97},[91,73231,296],{"class":250},[91,73233,62780],{"class":101},[91,73235,15043],{"class":97},[91,73237,296],{"class":250},[91,73239,69307],{"class":101},[91,73241,61101],{"class":97},[91,73243,296],{"class":250},[91,73245,73246],{"class":101},"\"薪资\"",[91,73248,53567],{"class":97},[91,73250,296],{"class":250},[91,73252,69307],{"class":101},[91,73254,51388],{"class":250},[91,73256,73257,73259,73261,73263,73265,73267,73269,73271,73273,73275,73277,73279],{"class":93,"line":32932},[91,73258,51422],{"class":250},[91,73260,69225],{"class":51381},[91,73262,15043],{"class":97},[91,73264,296],{"class":250},[91,73266,69232],{"class":101},[91,73268,15082],{"class":97},[91,73270,296],{"class":250},[91,73272,7775],{"class":101},[91,73274,53567],{"class":97},[91,73276,296],{"class":250},[91,73278,69232],{"class":101},[91,73280,51388],{"class":250},[91,73282,73283,73285,73287,73289,73291,73293,73295,73297],{"class":93,"line":32938},[91,73284,55315],{"class":250},[91,73286,69247],{"class":51381},[91,73288,66732],{"class":97},[91,73290,296],{"class":250},[91,73292,10084],{"class":101},[91,73294,69256],{"class":250},[91,73296,69247],{"class":51381},[91,73298,51388],{"class":250},[91,73300,73301,73303,73305,73307,73309,73311,73313,73315],{"class":93,"line":32947},[91,73302,55315],{"class":250},[91,73304,69247],{"class":51381},[91,73306,66732],{"class":97},[91,73308,296],{"class":250},[91,73310,10153],{"class":101},[91,73312,69275],{"class":250},[91,73314,69247],{"class":51381},[91,73316,51388],{"class":250},[91,73318,73319,73321,73323],{"class":93,"line":32953},[91,73320,51857],{"class":250},[91,73322,69225],{"class":51381},[91,73324,51388],{"class":250},[91,73326,73327,73329,73331,73333,73335,73337,73339,73341,73343,73345,73347,73349],{"class":93,"line":32959},[91,73328,51422],{"class":250},[91,73330,69225],{"class":51381},[91,73332,15043],{"class":97},[91,73334,296],{"class":250},[91,73336,69329],{"class":101},[91,73338,15082],{"class":97},[91,73340,296],{"class":250},[91,73342,7775],{"class":101},[91,73344,53567],{"class":97},[91,73346,296],{"class":250},[91,73348,69329],{"class":101},[91,73350,51388],{"class":250},[91,73352,73353,73355,73357,73359,73361,73363,73365,73367],{"class":93,"line":32968},[91,73354,55315],{"class":250},[91,73356,69247],{"class":51381},[91,73358,66732],{"class":97},[91,73360,296],{"class":250},[91,73362,69350],{"class":101},[91,73364,69353],{"class":250},[91,73366,69247],{"class":51381},[91,73368,51388],{"class":250},[91,73370,73371,73373,73375,73377,73379,73381,73383,73385],{"class":93,"line":32974},[91,73372,55315],{"class":250},[91,73374,69247],{"class":51381},[91,73376,66732],{"class":97},[91,73378,296],{"class":250},[91,73380,69370],{"class":101},[91,73382,69373],{"class":250},[91,73384,69247],{"class":51381},[91,73386,51388],{"class":250},[91,73388,73389,73391,73393,73395,73397,73399,73401,73403],{"class":93,"line":32985},[91,73390,55315],{"class":250},[91,73392,69247],{"class":51381},[91,73394,66732],{"class":97},[91,73396,296],{"class":250},[91,73398,69390],{"class":101},[91,73400,69393],{"class":250},[91,73402,69247],{"class":51381},[91,73404,51388],{"class":250},[91,73406,73407,73409,73411,73413,73415,73417,73419,73421],{"class":93,"line":32991},[91,73408,55315],{"class":250},[91,73410,69247],{"class":51381},[91,73412,66732],{"class":97},[91,73414,296],{"class":250},[91,73416,69410],{"class":101},[91,73418,69413],{"class":250},[91,73420,69247],{"class":51381},[91,73422,51388],{"class":250},[91,73424,73425,73427,73429,73431,73433,73435,73437,73439],{"class":93,"line":33010},[91,73426,55315],{"class":250},[91,73428,69247],{"class":51381},[91,73430,66732],{"class":97},[91,73432,296],{"class":250},[91,73434,69430],{"class":101},[91,73436,69433],{"class":250},[91,73438,69247],{"class":51381},[91,73440,51388],{"class":250},[91,73442,73443,73445,73447],{"class":93,"line":33016},[91,73444,51857],{"class":250},[91,73446,69225],{"class":51381},[91,73448,51388],{"class":250},[91,73450,73451,73453,73455],{"class":93,"line":33027},[91,73452,51422],{"class":250},[91,73454,53968],{"class":51381},[91,73456,51388],{"class":250},[91,73458,73459,73461,73463,73466,73468,73471,73473],{"class":93,"line":33033},[91,73460,55315],{"class":250},[91,73462,91],{"class":51381},[91,73464,73465],{"class":250},">+\u003C\u002F",[91,73467,91],{"class":51381},[91,73469,73470],{"class":250},">添加\u003C\u002F",[91,73472,53968],{"class":51381},[91,73474,51388],{"class":250},[91,73476,73477,73479,73481],{"class":93,"line":33053},[91,73478,52498],{"class":250},[91,73480,66706],{"class":51381},[91,73482,51388],{"class":250},[91,73484,73485,73487,73489,73491,73493,73495,73498,73500,73503,73505,73508,73510],{"class":93,"line":33069},[91,73486,52225],{"class":250},[91,73488,51692],{"class":51381},[91,73490,53567],{"class":97},[91,73492,296],{"class":250},[91,73494,62661],{"class":101},[91,73496,73497],{"class":250},">共有数据 \u003C",[91,73499,91],{"class":51381},[91,73501,73502],{"class":250},">0\u003C\u002F",[91,73504,91],{"class":51381},[91,73506,73507],{"class":250},"> 条\u003C\u002F",[91,73509,51692],{"class":51381},[91,73511,51388],{"class":250},[91,73513,73514,73516,73518],{"class":93,"line":33075},[91,73515,52225],{"class":250},[91,73517,386],{"class":51381},[91,73519,51388],{"class":250},[91,73521,73522,73524,73526],{"class":93,"line":33089},[91,73523,51422],{"class":250},[91,73525,389],{"class":51381},[91,73527,51388],{"class":250},[91,73529,73530,73532,73534],{"class":93,"line":33095},[91,73531,55315],{"class":250},[91,73533,392],{"class":51381},[91,73535,51388],{"class":250},[91,73537,73538,73540,73542,73545,73547],{"class":93,"line":33101},[91,73539,55383],{"class":250},[91,73541,395],{"class":51381},[91,73543,73544],{"class":250},">ID\u003C\u002F",[91,73546,395],{"class":51381},[91,73548,51388],{"class":250},[91,73550,73551,73553,73555,73557,73559],{"class":93,"line":33112},[91,73552,55383],{"class":250},[91,73554,395],{"class":51381},[91,73556,69536],{"class":250},[91,73558,395],{"class":51381},[91,73560,51388],{"class":250},[91,73562,73563,73565,73567,73569,73571],{"class":93,"line":33118},[91,73564,55383],{"class":250},[91,73566,395],{"class":51381},[91,73568,69549],{"class":250},[91,73570,395],{"class":51381},[91,73572,51388],{"class":250},[91,73574,73575,73577,73579,73581,73583],{"class":93,"line":33124},[91,73576,55383],{"class":250},[91,73578,395],{"class":51381},[91,73580,69562],{"class":250},[91,73582,395],{"class":51381},[91,73584,51388],{"class":250},[91,73586,73587,73589,73591,73593,73595],{"class":93,"line":33134},[91,73588,55383],{"class":250},[91,73590,395],{"class":51381},[91,73592,69575],{"class":250},[91,73594,395],{"class":51381},[91,73596,51388],{"class":250},[91,73598,73599,73601,73603,73605,73607],{"class":93,"line":33140},[91,73600,55383],{"class":250},[91,73602,395],{"class":51381},[91,73604,69588],{"class":250},[91,73606,395],{"class":51381},[91,73608,51388],{"class":250},[91,73610,73611,73613,73615,73618,73620],{"class":93,"line":33151},[91,73612,55383],{"class":250},[91,73614,395],{"class":51381},[91,73616,73617],{"class":250},">录入时间\u003C\u002F",[91,73619,395],{"class":51381},[91,73621,51388],{"class":250},[91,73623,73624,73626,73628,73630,73632],{"class":93,"line":33157},[91,73625,55383],{"class":250},[91,73627,395],{"class":51381},[91,73629,69601],{"class":250},[91,73631,395],{"class":51381},[91,73633,51388],{"class":250},[91,73635,73636,73638,73640],{"class":93,"line":33167},[91,73637,55488],{"class":250},[91,73639,392],{"class":51381},[91,73641,51388],{"class":250},[91,73643,73644,73646,73648],{"class":93,"line":33172},[91,73645,51857],{"class":250},[91,73647,389],{"class":51381},[91,73649,51388],{"class":250},[91,73651,73652,73654,73656],{"class":93,"line":33178},[91,73653,51422],{"class":250},[91,73655,433],{"class":51381},[91,73657,51388],{"class":250},[91,73659,73660],{"class":93,"line":33227},[91,73661,73662],{"class":308},"      \u003C!-- \u003Ctr>\n",[91,73664,73665],{"class":93,"line":33274},[91,73666,73667],{"class":308},"        \u003Ctd>1\u003C\u002Ftd>\n",[91,73669,73670],{"class":93,"line":33279},[91,73671,73667],{"class":308},[91,73673,73674],{"class":93,"line":33285},[91,73675,73667],{"class":308},[91,73677,73678],{"class":93,"line":33304},[91,73679,73667],{"class":308},[91,73681,73682],{"class":93,"line":33310},[91,73683,73667],{"class":308},[91,73685,73686],{"class":93,"line":33330},[91,73687,73667],{"class":308},[91,73689,73690],{"class":93,"line":33336},[91,73691,73667],{"class":308},[91,73693,73694],{"class":93,"line":33342},[91,73695,73696],{"class":308},"        \u003Ctd>\n",[91,73698,73699],{"class":93,"line":33352},[91,73700,73701],{"class":308},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[91,73703,73704],{"class":93,"line":33357},[91,73705,73706],{"class":308},"        \u003C\u002Ftd>\n",[91,73708,73709],{"class":93,"line":33363},[91,73710,73711],{"class":308},"      \u003C\u002Ftr> -->\n",[91,73713,73714,73716,73718],{"class":93,"line":33379},[91,73715,51857],{"class":250},[91,73717,433],{"class":51381},[91,73719,51388],{"class":250},[91,73721,73722,73724,73726],{"class":93,"line":33424},[91,73723,52498],{"class":250},[91,73725,386],{"class":51381},[91,73727,51388],{"class":250},[91,73729,73730,73732,73734],{"class":93,"line":33430},[91,73731,52225],{"class":250},[91,73733,51894],{"class":51381},[91,73735,51388],{"class":250},[91,73737,73738],{"class":93,"line":33436},[91,73739,73740],{"class":308},"    \u002F\u002F const initData = [{\n",[91,73742,73743],{"class":93,"line":33442},[91,73744,73745],{"class":308},"    \u002F\u002F   unameId: 1,\n",[91,73747,73748],{"class":93,"line":33453},[91,73749,73750],{"class":308},"    \u002F\u002F   uname: '华晨宇',\n",[91,73752,73753],{"class":93,"line":33459},[91,73754,73755],{"class":308},"    \u002F\u002F   age: 22,\n",[91,73757,73758],{"class":93,"line":33465},[91,73759,73760],{"class":308},"    \u002F\u002F   salary: 12000,\n",[91,73762,73763],{"class":93,"line":33471},[91,73764,73765],{"class":308},"    \u002F\u002F   gender: '男',\n",[91,73767,73768],{"class":93,"line":33489},[91,73769,73770],{"class":308},"    \u002F\u002F   city: '北京',\n",[91,73772,73773],{"class":93,"line":33503},[91,73774,73775],{"class":308},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[91,73777,73778],{"class":93,"line":33512},[91,73779,73780],{"class":308},"    \u002F\u002F }]\n",[91,73782,73783],{"class":93,"line":33521},[91,73784,73785],{"class":308},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[91,73787,73788],{"class":93,"line":33530},[91,73789,73790],{"class":308},"    \u002F\u002F 1.渲染业务\n",[91,73792,73793],{"class":93,"line":33539},[91,73794,73795],{"class":308},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[91,73797,73798],{"class":93,"line":33545},[91,73799,73800],{"class":308},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[91,73802,73803],{"class":93,"line":33551},[91,73804,73805],{"class":308},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[91,73807,73808],{"class":93,"line":33559},[91,73809,2523],{"emptyLinePlaceholder":175},[91,73811,73812],{"class":93,"line":33564},[91,73813,73814],{"class":308},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[91,73816,73817],{"class":93,"line":33570},[91,73818,73819],{"class":308},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[91,73821,73822,73824,73826,73828],{"class":93,"line":33581},[91,73823,11344],{"class":153},[91,73825,57776],{"class":105},[91,73827,13687],{"class":153},[91,73829,51919],{"class":250},[91,73831,73832,73835,73837],{"class":93,"line":33587},[91,73833,73834],{"class":250},"    console.",[91,73836,58328],{"class":97},[91,73838,52493],{"class":250},[91,73840,73841],{"class":93,"line":33607},[91,73842,2523],{"emptyLinePlaceholder":175},[91,73844,73845],{"class":93,"line":33613},[91,73846,73847],{"class":308},"    \u002F\u002F 时间函数\n",[91,73849,73850,73852,73855],{"class":93,"line":33619},[91,73851,70165],{"class":153},[91,73853,73854],{"class":97}," getTime",[91,73856,10976],{"class":250},[91,73858,73859,73861,73864,73866,73868,73871],{"class":93,"line":33625},[91,73860,58309],{"class":153},[91,73862,73863],{"class":105}," date",[91,73865,13687],{"class":153},[91,73867,11701],{"class":153},[91,73869,73870],{"class":97}," Date",[91,73872,2099],{"class":250},[91,73874,73875,73877,73879,73881,73884,73887,73889,73891,73893,73896,73899,73901,73903,73905,73907,73909,73911,73913],{"class":93,"line":33642},[91,73876,58309],{"class":153},[91,73878,16214],{"class":105},[91,73880,13687],{"class":153},[91,73882,73883],{"class":250}," date.",[91,73885,73886],{"class":97},"getHours",[91,73888,13173],{"class":250},[91,73890,1159],{"class":153},[91,73892,2161],{"class":105},[91,73894,73895],{"class":153}," ?",[91,73897,73898],{"class":101}," '0'",[91,73900,45647],{"class":153},[91,73902,73883],{"class":250},[91,73904,73886],{"class":97},[91,73906,13173],{"class":250},[91,73908,1108],{"class":153},[91,73910,73883],{"class":250},[91,73912,73886],{"class":97},[91,73914,2099],{"class":250},[91,73916,73917,73919,73922,73924,73926,73929,73931,73933,73935,73937,73939,73941,73943,73945,73947,73949,73951,73953],{"class":93,"line":33648},[91,73918,58309],{"class":153},[91,73920,73921],{"class":105}," m",[91,73923,13687],{"class":153},[91,73925,73883],{"class":250},[91,73927,73928],{"class":97},"getMinutes",[91,73930,13173],{"class":250},[91,73932,1159],{"class":153},[91,73934,2161],{"class":105},[91,73936,73895],{"class":153},[91,73938,73898],{"class":101},[91,73940,45647],{"class":153},[91,73942,73883],{"class":250},[91,73944,73928],{"class":97},[91,73946,13173],{"class":250},[91,73948,1108],{"class":153},[91,73950,73883],{"class":250},[91,73952,73928],{"class":97},[91,73954,2099],{"class":250},[91,73956,73957,73959,73961,73963,73965,73968,73970,73972,73974,73976,73978,73980,73982,73984,73986,73988,73990,73992],{"class":93,"line":33654},[91,73958,58309],{"class":153},[91,73960,8551],{"class":105},[91,73962,13687],{"class":153},[91,73964,73883],{"class":250},[91,73966,73967],{"class":97},"getSeconds",[91,73969,13173],{"class":250},[91,73971,1159],{"class":153},[91,73973,2161],{"class":105},[91,73975,73895],{"class":153},[91,73977,73898],{"class":101},[91,73979,45647],{"class":153},[91,73981,73883],{"class":250},[91,73983,73967],{"class":97},[91,73985,13173],{"class":250},[91,73987,1108],{"class":153},[91,73989,73883],{"class":250},[91,73991,73967],{"class":97},[91,73993,2099],{"class":250},[91,73995,73996,73998,74001,74003,74005,74008,74010,74013,74015,74018,74020,74022,74025,74027,74029,74031,74033,74035,74037,74040,74042,74045,74047,74050,74052,74054,74056],{"class":93,"line":33660},[91,73997,58309],{"class":153},[91,73999,74000],{"class":105}," str",[91,74002,13687],{"class":153},[91,74004,62984],{"class":101},[91,74006,74007],{"class":250},"date",[91,74009,807],{"class":101},[91,74011,74012],{"class":97},"getFullYear",[91,74014,2550],{"class":101},[91,74016,74017],{"class":101},"}\u002F${",[91,74019,74007],{"class":250},[91,74021,807],{"class":101},[91,74023,74024],{"class":97},"getMonth",[91,74026,13173],{"class":101},[91,74028,730],{"class":153},[91,74030,25240],{"class":105},[91,74032,74017],{"class":101},[91,74034,74007],{"class":250},[91,74036,807],{"class":101},[91,74038,74039],{"class":97},"getDate",[91,74041,2550],{"class":101},[91,74043,74044],{"class":101},"} ${",[91,74046,664],{"class":250},[91,74048,74049],{"class":101},"}:${",[91,74051,793],{"class":250},[91,74053,74049],{"class":101},[91,74055,944],{"class":250},[91,74057,74058],{"class":101},"}`\n",[91,74060,74061,74064],{"class":93,"line":33666},[91,74062,74063],{"class":153},"      return",[91,74065,74066],{"class":250}," str\n",[91,74068,74069],{"class":93,"line":33672},[91,74070,2310],{"class":250},[91,74072,74073],{"class":93,"line":33699},[91,74074,74075],{"class":308},"    \u002F\u002F 渲染函数\n",[91,74077,74078,74080,74082,74084,74086,74088,74090,74092],{"class":93,"line":33723},[91,74079,11344],{"class":153},[91,74081,69828],{"class":105},[91,74083,13687],{"class":153},[91,74085,54477],{"class":250},[91,74087,54480],{"class":97},[91,74089,251],{"class":250},[91,74091,69839],{"class":101},[91,74093,257],{"class":250},[91,74095,74096,74098,74100],{"class":93,"line":33729},[91,74097,70165],{"class":153},[91,74099,70168],{"class":97},[91,74101,10976],{"class":250},[91,74103,74104],{"class":93,"line":33735},[91,74105,74106],{"class":308},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[91,74108,74109],{"class":93,"line":33741},[91,74110,74111],{"class":308},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[91,74113,74114,74116,74119,74121,74123,74126,74128,74130,74132,74135,74137,74140],{"class":93,"line":33752},[91,74115,58309],{"class":153},[91,74117,74118],{"class":105}," trArr",[91,74120,13687],{"class":153},[91,74122,52046],{"class":250},[91,74124,74125],{"class":97},"map",[91,74127,251],{"class":250},[91,74129,54530],{"class":153},[91,74131,1782],{"class":250},[91,74133,74134],{"class":5339},"ele",[91,74136,12558],{"class":250},[91,74138,74139],{"class":5339},"index",[91,74141,12565],{"class":250},[91,74143,74144,74146],{"class":93,"line":33763},[91,74145,14875],{"class":153},[91,74147,70249],{"class":101},[91,74149,74150],{"class":93,"line":33769},[91,74151,74152],{"class":101},"      \u003Ctr>\n",[91,74154,74155,74157,74159,74161,74164],{"class":93,"line":33786},[91,74156,70254],{"class":101},[91,74158,74134],{"class":250},[91,74160,807],{"class":101},[91,74162,74163],{"class":250},"unameId",[91,74165,70269],{"class":101},[91,74167,74168,74170,74172,74174,74176],{"class":93,"line":33809},[91,74169,70254],{"class":101},[91,74171,74134],{"class":250},[91,74173,807],{"class":101},[91,74175,70285],{"class":250},[91,74177,70269],{"class":101},[91,74179,74180,74182,74184,74186,74188],{"class":93,"line":33832},[91,74181,70254],{"class":101},[91,74183,74134],{"class":250},[91,74185,807],{"class":101},[91,74187,70302],{"class":250},[91,74189,70269],{"class":101},[91,74191,74192,74194,74196,74198,74200],{"class":93,"line":33838},[91,74193,70254],{"class":101},[91,74195,74134],{"class":250},[91,74197,807],{"class":101},[91,74199,70319],{"class":250},[91,74201,70269],{"class":101},[91,74203,74204,74206,74208,74210,74212],{"class":93,"line":33843},[91,74205,70254],{"class":101},[91,74207,74134],{"class":250},[91,74209,807],{"class":101},[91,74211,70336],{"class":250},[91,74213,70269],{"class":101},[91,74215,74216,74218,74220,74222,74224],{"class":93,"line":33852},[91,74217,70254],{"class":101},[91,74219,74134],{"class":250},[91,74221,807],{"class":101},[91,74223,70353],{"class":250},[91,74225,70269],{"class":101},[91,74227,74228,74230,74232,74234,74236],{"class":93,"line":33862},[91,74229,70254],{"class":101},[91,74231,74134],{"class":250},[91,74233,807],{"class":101},[91,74235,2510],{"class":250},[91,74237,70269],{"class":101},[91,74239,74240],{"class":93,"line":33868},[91,74241,73696],{"class":101},[91,74243,74244,74247,74249],{"class":93,"line":33873},[91,74245,74246],{"class":101},"          \u003Ca href=\"#\" data-id=\"${",[91,74248,74139],{"class":250},[91,74250,74251],{"class":101},"}\">删除\u003C\u002Fa>\n",[91,74253,74254],{"class":93,"line":33879},[91,74255,73706],{"class":101},[91,74257,74258],{"class":93,"line":33892},[91,74259,74260],{"class":101},"      \u003C\u002Ftr>\n",[91,74262,74263],{"class":93,"line":33898},[91,74264,74265],{"class":101},"  `\n",[91,74267,74268],{"class":93,"line":33909},[91,74269,64896],{"class":250},[91,74271,74272,74274,74276],{"class":93,"line":33920},[91,74273,58325],{"class":250},[91,74275,58328],{"class":97},[91,74277,74278],{"class":250},"(trArr)\n",[91,74280,74281],{"class":93,"line":33939},[91,74282,2523],{"emptyLinePlaceholder":175},[91,74284,74285],{"class":93,"line":49599},[91,74286,74287],{"class":308},"      \u002F\u002F (2) 把数组转换为字符串join\n",[91,74289,74290],{"class":93,"line":49604},[91,74291,74292],{"class":308},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[91,74294,74295,74297,74299,74302,74305,74307,74310],{"class":93,"line":49613},[91,74296,70180],{"class":250},[91,74298,296],{"class":153},[91,74300,74301],{"class":250}," trArr.",[91,74303,74304],{"class":97},"join",[91,74306,251],{"class":250},[91,74308,74309],{"class":101},"''",[91,74311,257],{"class":250},[91,74313,74314],{"class":93,"line":49622},[91,74315,74316],{"class":308},"      \u002F\u002F 显示共有几条\n",[91,74318,74319,74321,74323,74325,74328,74331,74333,74335],{"class":93,"line":49627},[91,74320,55852],{"class":250},[91,74322,54480],{"class":97},[91,74324,251],{"class":250},[91,74326,74327],{"class":101},"'.total span'",[91,74329,74330],{"class":250},").innerHTML ",[91,74332,296],{"class":153},[91,74334,52046],{"class":250},[91,74336,55912],{"class":105},[91,74338,74339],{"class":93,"line":49632},[91,74340,2310],{"class":250},[91,74342,74343],{"class":93,"line":49637},[91,74344,74345],{"class":308},"    \u002F\u002F render()\n",[91,74347,74348],{"class":93,"line":49650},[91,74349,2523],{"emptyLinePlaceholder":175},[91,74351,74352],{"class":93,"line":49655},[91,74353,74354],{"class":308},"    \u002F\u002F 获取DOM对象\n",[91,74356,74357,74359,74361,74363,74365,74367,74369,74371],{"class":93,"line":49664},[91,74358,11344],{"class":153},[91,74360,69902],{"class":105},[91,74362,13687],{"class":153},[91,74364,54477],{"class":250},[91,74366,54480],{"class":97},[91,74368,251],{"class":250},[91,74370,69913],{"class":101},[91,74372,257],{"class":250},[91,74374,74375,74377,74379,74381,74383,74385,74387,74389],{"class":93,"line":49673},[91,74376,11344],{"class":153},[91,74378,69729],{"class":105},[91,74380,13687],{"class":153},[91,74382,54477],{"class":250},[91,74384,54480],{"class":97},[91,74386,251],{"class":250},[91,74388,69740],{"class":101},[91,74390,257],{"class":250},[91,74392,74393,74395,74397,74399,74401,74403,74405,74407],{"class":93,"line":49690},[91,74394,11344],{"class":153},[91,74396,15812],{"class":105},[91,74398,13687],{"class":153},[91,74400,54477],{"class":250},[91,74402,54480],{"class":97},[91,74404,251],{"class":250},[91,74406,69759],{"class":101},[91,74408,257],{"class":250},[91,74410,74412,74414,74416,74418,74420,74422,74424,74426],{"class":93,"line":74411},231,[91,74413,11344],{"class":153},[91,74415,69788],{"class":105},[91,74417,13687],{"class":153},[91,74419,54477],{"class":250},[91,74421,54480],{"class":97},[91,74423,251],{"class":250},[91,74425,69799],{"class":101},[91,74427,257],{"class":250},[91,74429,74431,74433,74435,74437,74439,74441,74443,74445],{"class":93,"line":74430},232,[91,74432,11344],{"class":153},[91,74434,69768],{"class":105},[91,74436,13687],{"class":153},[91,74438,54477],{"class":250},[91,74440,54480],{"class":97},[91,74442,251],{"class":250},[91,74444,69779],{"class":101},[91,74446,257],{"class":250},[91,74448,74450,74452,74454,74456,74458,74460,74462,74464],{"class":93,"line":74449},233,[91,74451,11344],{"class":153},[91,74453,69808],{"class":105},[91,74455,13687],{"class":153},[91,74457,54477],{"class":250},[91,74459,54480],{"class":97},[91,74461,251],{"class":250},[91,74463,69819],{"class":101},[91,74465,257],{"class":250},[91,74467,74469],{"class":93,"line":74468},234,[91,74470,2523],{"emptyLinePlaceholder":175},[91,74472,74474],{"class":93,"line":74473},235,[91,74475,74476],{"class":308},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[91,74478,74480,74482,74484,74486,74488,74490,74492,74494,74496],{"class":93,"line":74479},236,[91,74481,69920],{"class":250},[91,74483,57894],{"class":97},[91,74485,251],{"class":250},[91,74487,69927],{"class":101},[91,74489,12558],{"class":250},[91,74491,54530],{"class":153},[91,74493,1782],{"class":250},[91,74495,324],{"class":5339},[91,74497,12565],{"class":250},[91,74499,74501],{"class":93,"line":74500},237,[91,74502,74503],{"class":308},"      \u002F\u002F 禁止浏览器跳转\n",[91,74505,74507,74509,74511],{"class":93,"line":74506},238,[91,74508,69947],{"class":250},[91,74510,69950],{"class":97},[91,74512,2099],{"class":250},[91,74514,74516],{"class":93,"line":74515},239,[91,74517,74518],{"class":308},"      \u002F\u002F 非空判断\n",[91,74520,74522],{"class":93,"line":74521},240,[91,74523,74524],{"class":308},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[91,74526,74528],{"class":93,"line":74527},241,[91,74529,74530],{"class":308},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[91,74532,74534,74536,74538,74540,74543,74545,74548,74551,74553,74555],{"class":93,"line":74533},242,[91,74535,54561],{"class":153},[91,74537,1782],{"class":250},[91,74539,475],{"class":153},[91,74541,74542],{"class":250},"uname.value ",[91,74544,71438],{"class":153},[91,74546,74547],{"class":153}," !",[91,74549,74550],{"class":250},"age.value ",[91,74552,71438],{"class":153},[91,74554,74547],{"class":153},[91,74556,74557],{"class":250},"salary.value) {\n",[91,74559,74561,74563,74565,74567,74569],{"class":93,"line":74560},243,[91,74562,14875],{"class":153},[91,74564,70021],{"class":97},[91,74566,251],{"class":250},[91,74568,70026],{"class":101},[91,74570,257],{"class":250},[91,74572,74574],{"class":93,"line":74573},244,[91,74575,52479],{"class":250},[91,74577,74579,74581,74583],{"class":93,"line":74578},245,[91,74580,58088],{"class":250},[91,74582,51965],{"class":97},[91,74584,74585],{"class":250},"({\n",[91,74587,74589],{"class":93,"line":74588},246,[91,74590,74591],{"class":308},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[91,74593,74595],{"class":93,"line":74594},247,[91,74596,74597],{"class":308},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[91,74599,74601],{"class":93,"line":74600},248,[91,74602,74603],{"class":308},"        \u002F\u002F 对象的序号应为数组长度+1\n",[91,74605,74607],{"class":93,"line":74606},249,[91,74608,74609],{"class":308},"        \u002F\u002F unameId: arr.length + 1,\n",[91,74611,74613],{"class":93,"line":74612},250,[91,74614,2523],{"emptyLinePlaceholder":175},[91,74616,74618],{"class":93,"line":74617},251,[91,74619,74620],{"class":308},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[91,74622,74624],{"class":93,"line":74623},252,[91,74625,74626],{"class":308},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[91,74628,74630],{"class":93,"line":74629},253,[91,74631,74632],{"class":308},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[91,74634,74636],{"class":93,"line":74635},254,[91,74637,74638],{"class":308},"        \u002F\u002F 0当假看\n",[91,74640,74642,74645,74647,74649,74652,74654,74656,74658,74661,74663,74665,74668,74670],{"class":93,"line":74641},255,[91,74643,74644],{"class":250},"        unameId: arr.",[91,74646,52049],{"class":105},[91,74648,73895],{"class":153},[91,74650,74651],{"class":250}," arr[arr.",[91,74653,52049],{"class":105},[91,74655,52352],{"class":153},[91,74657,25240],{"class":105},[91,74659,74660],{"class":250},"].unameId ",[91,74662,730],{"class":153},[91,74664,25240],{"class":105},[91,74666,74667],{"class":153}," :",[91,74669,25240],{"class":105},[91,74671,31547],{"class":250},[91,74673,74675],{"class":93,"line":74674},256,[91,74676,70074],{"class":250},[91,74678,74680],{"class":93,"line":74679},257,[91,74681,70079],{"class":250},[91,74683,74685],{"class":93,"line":74684},258,[91,74686,70089],{"class":250},[91,74688,74690],{"class":93,"line":74689},259,[91,74691,70084],{"class":250},[91,74693,74695],{"class":93,"line":74694},260,[91,74696,74697],{"class":250},"        city: city.value,\n",[91,74699,74701],{"class":93,"line":74700},261,[91,74702,74703],{"class":308},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[91,74705,74707],{"class":93,"line":74706},262,[91,74708,74709],{"class":308},"        \u002F\u002F time: new Date().toDateString()\n",[91,74711,74713,74716,74719],{"class":93,"line":74712},263,[91,74714,74715],{"class":250},"        time: ",[91,74717,74718],{"class":97},"getTime",[91,74720,2099],{"class":250},[91,74722,74724],{"class":93,"line":74723},264,[91,74725,64896],{"class":250},[91,74727,74729],{"class":93,"line":74728},265,[91,74730,74731],{"class":308},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[91,74733,74735,74737],{"class":93,"line":74734},266,[91,74736,70149],{"class":97},[91,74738,2099],{"class":250},[91,74740,74742,74744,74746,74748,74750],{"class":93,"line":74741},267,[91,74743,70132],{"class":105},[91,74745,807],{"class":250},[91,74747,70137],{"class":97},[91,74749,13173],{"class":250},[91,74751,74752],{"class":308},"\u002F\u002F重置表单\n",[91,74754,74756],{"class":93,"line":74755},268,[91,74757,74758],{"class":308},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[91,74760,74762,74765,74767,74769,74772,74774,74776,74778,74780],{"class":93,"line":74761},269,[91,74763,74764],{"class":250},"      localStorage.",[91,74766,71735],{"class":97},[91,74768,251],{"class":250},[91,74770,74771],{"class":101},"'data'",[91,74773,12558],{"class":250},[91,74775,71745],{"class":105},[91,74777,807],{"class":250},[91,74779,71750],{"class":97},[91,74781,74782],{"class":250},"(arr))\n",[91,74784,74786],{"class":93,"line":74785},270,[91,74787,33542],{"class":250},[91,74789,74791],{"class":93,"line":74790},271,[91,74792,2523],{"emptyLinePlaceholder":175},[91,74794,74796],{"class":93,"line":74795},272,[91,74797,74798],{"class":308},"    \u002F\u002F 3.删除业务\n",[91,74800,74802],{"class":93,"line":74801},273,[91,74803,74804],{"class":308},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[91,74806,74808,74810,74812,74814,74816,74818,74820,74822,74824],{"class":93,"line":74807},274,[91,74809,70422],{"class":250},[91,74811,57894],{"class":97},[91,74813,251],{"class":250},[91,74815,57899],{"class":101},[91,74817,12558],{"class":250},[91,74819,54530],{"class":153},[91,74821,1782],{"class":250},[91,74823,324],{"class":5339},[91,74825,12565],{"class":250},[91,74827,74829],{"class":93,"line":74828},275,[91,74830,74831],{"class":308},"      \u002F\u002F 判断是否点击的是删除按钮\n",[91,74833,74835,74837,74839,74841,74843],{"class":93,"line":74834},276,[91,74836,54561],{"class":153},[91,74838,67115],{"class":250},[91,74840,54567],{"class":153},[91,74842,68337],{"class":101},[91,74844,12565],{"class":250},[91,74846,74848],{"class":93,"line":74847},277,[91,74849,74850],{"class":308},"        \u002F\u002F alert(1)\n",[91,74852,74854],{"class":93,"line":74853},278,[91,74855,74856],{"class":308},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[91,74858,74860],{"class":93,"line":74859},279,[91,74861,74862],{"class":308},"        \u002F\u002F console.log(e.target)\n",[91,74864,74866],{"class":93,"line":74865},280,[91,74867,74868],{"class":308},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[91,74870,74872],{"class":93,"line":74871},281,[91,74873,2523],{"emptyLinePlaceholder":175},[91,74875,74877],{"class":93,"line":74876},282,[91,74878,74879],{"class":308},"        \u002F\u002F 确认框，确然是否真的要删除\n",[91,74881,74883],{"class":93,"line":74882},283,[91,74884,74885],{"class":308},"        \u002F\u002F confirm()为确认框\n",[91,74887,74889],{"class":93,"line":74888},284,[91,74890,74891],{"class":308},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[91,74893,74895,74897,74899,74902,74904,74907],{"class":93,"line":74894},285,[91,74896,2620],{"class":153},[91,74898,1782],{"class":250},[91,74900,74901],{"class":97},"confirm",[91,74903,251],{"class":250},[91,74905,74906],{"class":101},"'您确定要删除这条数据吗？'",[91,74908,74909],{"class":250},")) {\n",[91,74911,74913,74916,74918,74920,74922],{"class":93,"line":74912},286,[91,74914,74915],{"class":250},"          arr.",[91,74917,58091],{"class":97},[91,74919,70475],{"class":250},[91,74921,466],{"class":105},[91,74923,257],{"class":250},[91,74925,74927],{"class":93,"line":74926},287,[91,74928,74929],{"class":308},"          \u002F\u002F 3.4 重新渲染页面\n",[91,74931,74933,74936],{"class":93,"line":74932},288,[91,74934,74935],{"class":97},"          render",[91,74937,2099],{"class":250},[91,74939,74941],{"class":93,"line":74940},289,[91,74942,74943],{"class":308},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[91,74945,74947,74950,74952,74954,74956,74958,74960,74962,74964],{"class":93,"line":74946},290,[91,74948,74949],{"class":250},"          localStorage.",[91,74951,71735],{"class":97},[91,74953,251],{"class":250},[91,74955,74771],{"class":101},[91,74957,12558],{"class":250},[91,74959,71745],{"class":105},[91,74961,807],{"class":250},[91,74963,71750],{"class":97},[91,74965,74782],{"class":250},[91,74967,74969],{"class":93,"line":74968},291,[91,74970,2652],{"class":250},[91,74972,74974],{"class":93,"line":74973},292,[91,74975,52479],{"class":250},[91,74977,74979],{"class":93,"line":74978},293,[91,74980,2523],{"emptyLinePlaceholder":175},[91,74982,74984],{"class":93,"line":74983},294,[91,74985,33542],{"class":250},[91,74987,74989],{"class":93,"line":74988},295,[91,74990,2523],{"emptyLinePlaceholder":175},[91,74992,74994,74996,74998],{"class":93,"line":74993},296,[91,74995,52498],{"class":250},[91,74997,51894],{"class":51381},[91,74999,51388],{"class":250},[91,75001,75003,75005,75007],{"class":93,"line":75002},297,[91,75004,51866],{"class":250},[91,75006,51881],{"class":51381},[91,75008,51388],{"class":250},[91,75010,75012],{"class":93,"line":75011},298,[91,75013,2523],{"emptyLinePlaceholder":175},[91,75015,75017,75019,75021],{"class":93,"line":75016},299,[91,75018,51866],{"class":250},[91,75020,50716],{"class":51381},[91,75022,51388],{"class":250},[190,75024,75026],{"id":75025},"_36-正则表达式","3.6 正则表达式",[21,75028,75029],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[21,75031,75032],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[21,75034,75035],{},"正则表达式的作用：",[1256,75037,75038,75045,75051],{},[17,75039,75040,75041,75044],{},"表单验证（ ",[398,75042,75043],{},"匹配"," ）",[17,75046,75047,75048,75044],{},"过滤敏感词（ ",[398,75049,75050],{},"替换",[17,75052,75053,75054,75044],{},"字符串中提取我们想要的部分（ ",[398,75055,75056],{},"提取",[217,75058,75060],{"id":75059},"_361-语法","3.6.1 语法",[21,75062,75063],{},"正则表达式使用步骤：",[14,75065,75066,75069],{},[17,75067,75068],{},"定义规则",[17,75070,75071],{},"查找是否匹配",[21,75073,75074],{},"正则表达式里边不需要写引号",[21,75076,75077],{},[24,75078],{"alt":26,"src":75079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[21,75081,75082],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[21,75084,75085],{},"reg.test(str)",[21,75087,75088],{},[24,75089],{"alt":26,"src":75090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[21,75092,75093],{},[24,75094],{"alt":26,"src":75095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[217,75097,75099],{"id":75098},"_362-元字符","3.6.2 元字符",[14,75101,75102,75105,75108,75111,75118],{},[17,75103,75104],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[17,75106,75107],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[17,75109,75110],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[17,75112,75113,75114],{},"正则验证工具：",[487,75115,75116],{"href":75116,"rel":75117},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23987],[17,75119,75120],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22121,75122,75124],{"id":75123},"_3621-边界符","3.6.2.1 边界符",[21,75126,75127],{},[24,75128],{"alt":26,"src":75129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[21,75131,75132],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[21,75134,75135],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[21,75137,75138],{},"只匹配一次",[21,75140,75141],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22121,75143,75145],{"id":75144},"_3622-量词","3.6.2.2 量词",[21,75147,75148],{},[24,75149],{"alt":26,"src":75150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[21,75152,75153],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22121,75155,75157],{"id":75156},"_3623-元字符","3.6.2.3 元字符",[21,75159,75160],{},[24,75161],{"alt":26,"src":75162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[21,75164,75165],{},"匹配的是a或b或c []只选一个",[21,75167,75168],{},[24,75169],{"alt":26,"src":75170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[21,75172,75173],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[21,75175,75176],{},[24,75177],{"alt":26,"src":75178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[21,75180,75181],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[21,75183,75184],{},[24,75185],{"alt":26,"src":75186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[82,75188,75190],{"className":50714,"code":75189,"language":50716,"meta":26,"style":26},"\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",[88,75191,75192,75202,75216,75220,75228,75242,75262,75274,75282,75286,75294,75302,75307,75338,75365,75393,75397,75402,75430,75461,75466,75471,75502,75534,75566,75570,75575,75606,75636,75666,75670,75675,75706,75737,75767,75797,75801,75806,75839,75843,75848,75879,75910,75914,75919,75950,75980,76011,76015,76020,76052,76083,76114,76141,76172,76204,76237,76268,76299,76331,76362,76370,76378,76382],{"__ignoreMap":26},[91,75193,75194,75196,75198,75200],{"class":93,"line":94},[91,75195,51378],{"class":250},[91,75197,51382],{"class":51381},[91,75199,51385],{"class":97},[91,75201,51388],{"class":250},[91,75203,75204,75206,75208,75210,75212,75214],{"class":93,"line":38},[91,75205,1159],{"class":250},[91,75207,50716],{"class":51381},[91,75209,51397],{"class":97},[91,75211,296],{"class":250},[91,75213,51402],{"class":101},[91,75215,51388],{"class":250},[91,75217,75218],{"class":93,"line":1304},[91,75219,2523],{"emptyLinePlaceholder":175},[91,75221,75222,75224,75226],{"class":93,"line":1319},[91,75223,1159],{"class":250},[91,75225,51415],{"class":51381},[91,75227,51388],{"class":250},[91,75229,75230,75232,75234,75236,75238,75240],{"class":93,"line":1325},[91,75231,52225],{"class":250},[91,75233,51425],{"class":51381},[91,75235,51428],{"class":97},[91,75237,296],{"class":250},[91,75239,51433],{"class":101},[91,75241,51388],{"class":250},[91,75243,75244,75246,75248,75250,75252,75254,75256,75258,75260],{"class":93,"line":1339},[91,75245,52225],{"class":250},[91,75247,51425],{"class":51381},[91,75249,15043],{"class":97},[91,75251,296],{"class":250},[91,75253,51472],{"class":101},[91,75255,51452],{"class":97},[91,75257,296],{"class":250},[91,75259,51479],{"class":101},[91,75261,51388],{"class":250},[91,75263,75264,75266,75268,75270,75272],{"class":93,"line":1345},[91,75265,52225],{"class":250},[91,75267,51488],{"class":51381},[91,75269,51491],{"class":250},[91,75271,51488],{"class":51381},[91,75273,51388],{"class":250},[91,75275,75276,75278,75280],{"class":93,"line":1436},[91,75277,51866],{"class":250},[91,75279,51415],{"class":51381},[91,75281,51388],{"class":250},[91,75283,75284],{"class":93,"line":1442},[91,75285,2523],{"emptyLinePlaceholder":175},[91,75287,75288,75290,75292],{"class":93,"line":1454},[91,75289,1159],{"class":250},[91,75291,51881],{"class":51381},[91,75293,51388],{"class":250},[91,75295,75296,75298,75300],{"class":93,"line":1736},[91,75297,52225],{"class":250},[91,75299,51894],{"class":51381},[91,75301,51388],{"class":250},[91,75303,75304],{"class":93,"line":1741},[91,75305,75306],{"class":308},"    \u002F\u002F 元字符中\n",[91,75308,75309,75311,75313,75315,75317,75320,75322,75324,75327,75329,75332,75335],{"class":93,"line":1747},[91,75310,73834],{"class":250},[91,75312,58328],{"class":97},[91,75314,251],{"class":250},[91,75316,833],{"class":101},[91,75318,75319],{"class":48058},"哈",[91,75321,833],{"class":101},[91,75323,807],{"class":250},[91,75325,75326],{"class":97},"test",[91,75328,251],{"class":250},[91,75330,75331],{"class":101},"'哈'",[91,75333,75334],{"class":250},"))  ",[91,75336,75337],{"class":308},"\u002F\u002Ftrue\n",[91,75339,75340,75342,75344,75346,75348,75350,75352,75354,75356,75358,75361,75363],{"class":93,"line":1752},[91,75341,73834],{"class":250},[91,75343,58328],{"class":97},[91,75345,251],{"class":250},[91,75347,833],{"class":101},[91,75349,75319],{"class":48058},[91,75351,833],{"class":101},[91,75353,807],{"class":250},[91,75355,75326],{"class":97},[91,75357,251],{"class":250},[91,75359,75360],{"class":101},"'哈哈'",[91,75362,75334],{"class":250},[91,75364,75337],{"class":308},[91,75366,75367,75369,75371,75373,75375,75377,75379,75381,75383,75385,75388,75391],{"class":93,"line":1766},[91,75368,73834],{"class":250},[91,75370,58328],{"class":97},[91,75372,251],{"class":250},[91,75374,833],{"class":101},[91,75376,75319],{"class":48058},[91,75378,833],{"class":101},[91,75380,807],{"class":250},[91,75382,75326],{"class":97},[91,75384,251],{"class":250},[91,75386,75387],{"class":101},"'二哈'",[91,75389,75390],{"class":250},"))   ",[91,75392,75337],{"class":308},[91,75394,75395],{"class":93,"line":1771},[91,75396,2523],{"emptyLinePlaceholder":175},[91,75398,75399],{"class":93,"line":1777},[91,75400,75401],{"class":308},"    \u002F\u002F 1.边界符\n",[91,75403,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422,75424,75426,75428],{"class":93,"line":1798},[91,75405,73834],{"class":250},[91,75407,58328],{"class":97},[91,75409,251],{"class":250},[91,75411,833],{"class":101},[91,75413,1215],{"class":153},[91,75415,75319],{"class":48058},[91,75417,833],{"class":101},[91,75419,807],{"class":250},[91,75421,75326],{"class":97},[91,75423,251],{"class":250},[91,75425,75331],{"class":101},[91,75427,75334],{"class":250},[91,75429,75337],{"class":308},[91,75431,75432,75434,75436,75438,75440,75442,75444,75446,75448,75450,75452,75454,75456,75458],{"class":93,"line":1803},[91,75433,73834],{"class":250},[91,75435,58328],{"class":97},[91,75437,251],{"class":250},[91,75439,833],{"class":101},[91,75441,1215],{"class":153},[91,75443,75319],{"class":48058},[91,75445,551],{"class":153},[91,75447,833],{"class":101},[91,75449,807],{"class":250},[91,75451,75326],{"class":97},[91,75453,251],{"class":250},[91,75455,75360],{"class":101},[91,75457,75334],{"class":250},[91,75459,75460],{"class":308},"\u002F\u002Ffalse\n",[91,75462,75463],{"class":93,"line":1817},[91,75464,75465],{"class":308},"    \u002F\u002F 2.量词\n",[91,75467,75468],{"class":93,"line":1822},[91,75469,75470],{"class":308},"    \u002F\u002F 量词 * 类似于 >= 0\n",[91,75472,75473,75475,75477,75479,75481,75483,75485,75488,75490,75492,75494,75496,75498,75500],{"class":93,"line":1851},[91,75474,73834],{"class":250},[91,75476,58328],{"class":97},[91,75478,251],{"class":250},[91,75480,833],{"class":101},[91,75482,1215],{"class":153},[91,75484,75319],{"class":48058},[91,75486,75487],{"class":153},"*$",[91,75489,833],{"class":101},[91,75491,807],{"class":250},[91,75493,75326],{"class":97},[91,75495,251],{"class":250},[91,75497,75360],{"class":101},[91,75499,75334],{"class":250},[91,75501,75337],{"class":308},[91,75503,75504,75506,75508,75510,75512,75514,75516,75518,75520,75522,75524,75526,75529,75531],{"class":93,"line":1856},[91,75505,73834],{"class":250},[91,75507,58328],{"class":97},[91,75509,251],{"class":250},[91,75511,833],{"class":101},[91,75513,1215],{"class":153},[91,75515,75319],{"class":48058},[91,75517,75487],{"class":153},[91,75519,833],{"class":101},[91,75521,807],{"class":250},[91,75523,75326],{"class":97},[91,75525,251],{"class":250},[91,75527,75528],{"class":101},"'二哈好傻'",[91,75530,75334],{"class":250},[91,75532,75533],{"class":308},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[91,75535,75536,75538,75540,75542,75544,75546,75548,75550,75552,75554,75556,75558,75561,75563],{"class":93,"line":1873},[91,75537,73834],{"class":250},[91,75539,58328],{"class":97},[91,75541,251],{"class":250},[91,75543,833],{"class":101},[91,75545,1215],{"class":153},[91,75547,75319],{"class":48058},[91,75549,75487],{"class":153},[91,75551,833],{"class":101},[91,75553,807],{"class":250},[91,75555,75326],{"class":97},[91,75557,251],{"class":250},[91,75559,75560],{"class":101},"'哈好哈'",[91,75562,75390],{"class":250},[91,75564,75565],{"class":308},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[91,75567,75568],{"class":93,"line":1878},[91,75569,2523],{"emptyLinePlaceholder":175},[91,75571,75572],{"class":93,"line":1883},[91,75573,75574],{"class":308},"    \u002F\u002F +类似于>=1\n",[91,75576,75577,75579,75581,75583,75585,75587,75589,75592,75594,75596,75598,75600,75602,75604],{"class":93,"line":1888},[91,75578,73834],{"class":250},[91,75580,58328],{"class":97},[91,75582,251],{"class":250},[91,75584,833],{"class":101},[91,75586,1215],{"class":153},[91,75588,75319],{"class":48058},[91,75590,75591],{"class":153},"+$",[91,75593,833],{"class":101},[91,75595,807],{"class":250},[91,75597,75326],{"class":97},[91,75599,251],{"class":250},[91,75601,75360],{"class":101},[91,75603,75334],{"class":250},[91,75605,75337],{"class":308},[91,75607,75608,75610,75612,75614,75616,75618,75620,75622,75624,75626,75628,75630,75632,75634],{"class":93,"line":1902},[91,75609,73834],{"class":250},[91,75611,58328],{"class":97},[91,75613,251],{"class":250},[91,75615,833],{"class":101},[91,75617,1215],{"class":153},[91,75619,75319],{"class":48058},[91,75621,75591],{"class":153},[91,75623,833],{"class":101},[91,75625,807],{"class":250},[91,75627,75326],{"class":97},[91,75629,251],{"class":250},[91,75631,75528],{"class":101},[91,75633,75334],{"class":250},[91,75635,75533],{"class":308},[91,75637,75638,75640,75642,75644,75646,75648,75650,75652,75654,75656,75658,75660,75662,75664],{"class":93,"line":1907},[91,75639,73834],{"class":250},[91,75641,58328],{"class":97},[91,75643,251],{"class":250},[91,75645,833],{"class":101},[91,75647,1215],{"class":153},[91,75649,75319],{"class":48058},[91,75651,75591],{"class":153},[91,75653,833],{"class":101},[91,75655,807],{"class":250},[91,75657,75326],{"class":97},[91,75659,251],{"class":250},[91,75661,75560],{"class":101},[91,75663,75390],{"class":250},[91,75665,75460],{"class":308},[91,75667,75668],{"class":93,"line":2700},[91,75669,2523],{"emptyLinePlaceholder":175},[91,75671,75672],{"class":93,"line":2714},[91,75673,75674],{"class":308},"    \u002F\u002F ?类似于0次或一次\n",[91,75676,75677,75679,75681,75683,75685,75687,75690,75692,75694,75696,75698,75700,75702,75704],{"class":93,"line":2722},[91,75678,73834],{"class":250},[91,75680,58328],{"class":97},[91,75682,251],{"class":250},[91,75684,833],{"class":101},[91,75686,1215],{"class":153},[91,75688,75689],{"class":48058},"哈？",[91,75691,551],{"class":153},[91,75693,833],{"class":101},[91,75695,807],{"class":250},[91,75697,75326],{"class":97},[91,75699,251],{"class":250},[91,75701,74309],{"class":101},[91,75703,75390],{"class":250},[91,75705,75337],{"class":308},[91,75707,75708,75710,75712,75714,75716,75718,75720,75723,75725,75727,75729,75731,75733,75735],{"class":93,"line":2727},[91,75709,73834],{"class":250},[91,75711,58328],{"class":97},[91,75713,251],{"class":250},[91,75715,833],{"class":101},[91,75717,1215],{"class":153},[91,75719,75319],{"class":48058},[91,75721,75722],{"class":153},"?$",[91,75724,833],{"class":101},[91,75726,807],{"class":250},[91,75728,75326],{"class":97},[91,75730,251],{"class":250},[91,75732,75360],{"class":101},[91,75734,75334],{"class":250},[91,75736,75460],{"class":308},[91,75738,75739,75741,75743,75745,75747,75749,75751,75753,75755,75757,75759,75761,75763,75765],{"class":93,"line":2733},[91,75740,73834],{"class":250},[91,75742,58328],{"class":97},[91,75744,251],{"class":250},[91,75746,833],{"class":101},[91,75748,1215],{"class":153},[91,75750,75319],{"class":48058},[91,75752,75722],{"class":153},[91,75754,833],{"class":101},[91,75756,807],{"class":250},[91,75758,75326],{"class":97},[91,75760,251],{"class":250},[91,75762,75528],{"class":101},[91,75764,75334],{"class":250},[91,75766,75533],{"class":308},[91,75768,75769,75771,75773,75775,75777,75779,75781,75783,75785,75787,75789,75791,75793,75795],{"class":93,"line":2739},[91,75770,73834],{"class":250},[91,75772,58328],{"class":97},[91,75774,251],{"class":250},[91,75776,833],{"class":101},[91,75778,1215],{"class":153},[91,75780,75319],{"class":48058},[91,75782,75722],{"class":153},[91,75784,833],{"class":101},[91,75786,807],{"class":250},[91,75788,75326],{"class":97},[91,75790,251],{"class":250},[91,75792,75560],{"class":101},[91,75794,75334],{"class":250},[91,75796,75460],{"class":308},[91,75798,75799],{"class":93,"line":2744},[91,75800,2523],{"emptyLinePlaceholder":175},[91,75802,75803],{"class":93,"line":8071},[91,75804,75805],{"class":308},"    \u002F\u002F {n}写几，就必须出现几次\n",[91,75807,75808,75810,75812,75814,75816,75818,75820,75823,75825,75827,75829,75831,75834,75837],{"class":93,"line":8095},[91,75809,73834],{"class":250},[91,75811,58328],{"class":97},[91,75813,251],{"class":250},[91,75815,833],{"class":101},[91,75817,1215],{"class":153},[91,75819,75319],{"class":48058},[91,75821,75822],{"class":153},"{4}$",[91,75824,833],{"class":101},[91,75826,807],{"class":250},[91,75828,75326],{"class":97},[91,75830,251],{"class":250},[91,75832,75833],{"class":101},"'哈哈哈哈'",[91,75835,75836],{"class":250},")) ",[91,75838,75337],{"class":308},[91,75840,75841],{"class":93,"line":8100},[91,75842,2523],{"emptyLinePlaceholder":175},[91,75844,75845],{"class":93,"line":8106},[91,75846,75847],{"class":308},"    \u002F\u002F {n,}大于等于n次\n",[91,75849,75850,75852,75854,75856,75858,75860,75862,75865,75867,75869,75871,75873,75875,75877],{"class":93,"line":8133},[91,75851,73834],{"class":250},[91,75853,58328],{"class":97},[91,75855,251],{"class":250},[91,75857,833],{"class":101},[91,75859,1215],{"class":153},[91,75861,75319],{"class":48058},[91,75863,75864],{"class":153},"{4,}$",[91,75866,833],{"class":101},[91,75868,807],{"class":250},[91,75870,75326],{"class":97},[91,75872,251],{"class":250},[91,75874,75833],{"class":101},[91,75876,75836],{"class":250},[91,75878,75337],{"class":308},[91,75880,75881,75883,75885,75887,75889,75891,75893,75895,75897,75899,75901,75903,75906,75908],{"class":93,"line":8138},[91,75882,73834],{"class":250},[91,75884,58328],{"class":97},[91,75886,251],{"class":250},[91,75888,833],{"class":101},[91,75890,1215],{"class":153},[91,75892,75319],{"class":48058},[91,75894,75864],{"class":153},[91,75896,833],{"class":101},[91,75898,807],{"class":250},[91,75900,75326],{"class":97},[91,75902,251],{"class":250},[91,75904,75905],{"class":101},"'哈哈哈哈哈'",[91,75907,75836],{"class":250},[91,75909,75337],{"class":308},[91,75911,75912],{"class":93,"line":8144},[91,75913,2523],{"emptyLinePlaceholder":175},[91,75915,75916],{"class":93,"line":8156},[91,75917,75918],{"class":308},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[91,75920,75921,75923,75925,75927,75929,75931,75933,75936,75938,75940,75942,75944,75946,75948],{"class":93,"line":8168},[91,75922,73834],{"class":250},[91,75924,58328],{"class":97},[91,75926,251],{"class":250},[91,75928,833],{"class":101},[91,75930,1215],{"class":153},[91,75932,75319],{"class":48058},[91,75934,75935],{"class":153},"{4,6}$",[91,75937,833],{"class":101},[91,75939,807],{"class":250},[91,75941,75326],{"class":97},[91,75943,251],{"class":250},[91,75945,75833],{"class":101},[91,75947,75836],{"class":250},[91,75949,75337],{"class":308},[91,75951,75952,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75976,75978],{"class":93,"line":8180},[91,75953,73834],{"class":250},[91,75955,58328],{"class":97},[91,75957,251],{"class":250},[91,75959,833],{"class":101},[91,75961,1215],{"class":153},[91,75963,75319],{"class":48058},[91,75965,75935],{"class":153},[91,75967,833],{"class":101},[91,75969,807],{"class":250},[91,75971,75326],{"class":97},[91,75973,251],{"class":250},[91,75975,75905],{"class":101},[91,75977,75836],{"class":250},[91,75979,75337],{"class":308},[91,75981,75982,75984,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76007,76009],{"class":93,"line":9839},[91,75983,73834],{"class":250},[91,75985,58328],{"class":97},[91,75987,251],{"class":250},[91,75989,833],{"class":101},[91,75991,1215],{"class":153},[91,75993,75319],{"class":48058},[91,75995,75935],{"class":153},[91,75997,833],{"class":101},[91,75999,807],{"class":250},[91,76001,75326],{"class":97},[91,76003,251],{"class":250},[91,76005,76006],{"class":101},"'哈哈哈哈哈哈哈'",[91,76008,75836],{"class":250},[91,76010,75460],{"class":308},[91,76012,76013],{"class":93,"line":9864},[91,76014,2523],{"emptyLinePlaceholder":175},[91,76016,76017],{"class":93,"line":9887},[91,76018,76019],{"class":308},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[91,76021,76022,76024,76026,76028,76030,76032,76035,76037,76039,76041,76043,76045,76048,76050],{"class":93,"line":9911},[91,76023,73834],{"class":250},[91,76025,58328],{"class":97},[91,76027,251],{"class":250},[91,76029,833],{"class":101},[91,76031,1215],{"class":153},[91,76033,76034],{"class":105},"[abc]",[91,76036,551],{"class":153},[91,76038,833],{"class":101},[91,76040,807],{"class":250},[91,76042,75326],{"class":97},[91,76044,251],{"class":250},[91,76046,76047],{"class":101},"'a'",[91,76049,75334],{"class":250},[91,76051,75337],{"class":308},[91,76053,76054,76056,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76079,76081],{"class":93,"line":9916},[91,76055,73834],{"class":250},[91,76057,58328],{"class":97},[91,76059,251],{"class":250},[91,76061,833],{"class":101},[91,76063,1215],{"class":153},[91,76065,76034],{"class":105},[91,76067,551],{"class":153},[91,76069,833],{"class":101},[91,76071,807],{"class":250},[91,76073,75326],{"class":97},[91,76075,251],{"class":250},[91,76077,76078],{"class":101},"'b'",[91,76080,75334],{"class":250},[91,76082,75337],{"class":308},[91,76084,76085,76087,76089,76091,76093,76095,76097,76099,76101,76103,76105,76107,76110,76112],{"class":93,"line":9921},[91,76086,73834],{"class":250},[91,76088,58328],{"class":97},[91,76090,251],{"class":250},[91,76092,833],{"class":101},[91,76094,1215],{"class":153},[91,76096,76034],{"class":105},[91,76098,551],{"class":153},[91,76100,833],{"class":101},[91,76102,807],{"class":250},[91,76104,75326],{"class":97},[91,76106,251],{"class":250},[91,76108,76109],{"class":101},"'c'",[91,76111,75334],{"class":250},[91,76113,75337],{"class":308},[91,76115,76116,76118,76120,76122,76124,76126,76128,76130,76132,76134,76137,76139],{"class":93,"line":9926},[91,76117,73834],{"class":250},[91,76119,58328],{"class":97},[91,76121,251],{"class":250},[91,76123,833],{"class":101},[91,76125,76034],{"class":105},[91,76127,833],{"class":101},[91,76129,807],{"class":250},[91,76131,75326],{"class":97},[91,76133,251],{"class":250},[91,76135,76136],{"class":101},"'ab'",[91,76138,75334],{"class":250},[91,76140,75337],{"class":308},[91,76142,76143,76145,76147,76149,76151,76153,76155,76157,76159,76161,76163,76165,76167,76169],{"class":93,"line":9935},[91,76144,73834],{"class":250},[91,76146,58328],{"class":97},[91,76148,251],{"class":250},[91,76150,833],{"class":101},[91,76152,1215],{"class":153},[91,76154,76034],{"class":105},[91,76156,551],{"class":153},[91,76158,833],{"class":101},[91,76160,807],{"class":250},[91,76162,75326],{"class":97},[91,76164,251],{"class":250},[91,76166,76136],{"class":101},[91,76168,75334],{"class":250},[91,76170,76171],{"class":308},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[91,76173,76174,76176,76178,76180,76182,76184,76186,76189,76191,76193,76195,76197,76199,76201],{"class":93,"line":9940},[91,76175,73834],{"class":250},[91,76177,58328],{"class":97},[91,76179,251],{"class":250},[91,76181,833],{"class":101},[91,76183,1215],{"class":153},[91,76185,76034],{"class":105},[91,76187,76188],{"class":153},"{2}$",[91,76190,833],{"class":101},[91,76192,807],{"class":250},[91,76194,75326],{"class":97},[91,76196,251],{"class":250},[91,76198,76136],{"class":101},[91,76200,75334],{"class":250},[91,76202,76203],{"class":308},"\u002F\u002Ftrue   可以选两个\n",[91,76205,76206,76208,76210,76212,76214,76216,76219,76221,76223,76225,76227,76229,76232,76234],{"class":93,"line":9946},[91,76207,73834],{"class":250},[91,76209,58328],{"class":97},[91,76211,251],{"class":250},[91,76213,833],{"class":101},[91,76215,1215],{"class":153},[91,76217,76218],{"class":105},"[a-z]",[91,76220,551],{"class":153},[91,76222,833],{"class":101},[91,76224,807],{"class":250},[91,76226,75326],{"class":97},[91,76228,251],{"class":250},[91,76230,76231],{"class":101},"'p'",[91,76233,75390],{"class":250},[91,76235,76236],{"class":308},"\u002F\u002Ftrue   依然只能选一个\n",[91,76238,76239,76241,76243,76245,76247,76249,76252,76254,76256,76258,76260,76262,76264,76266],{"class":93,"line":9967},[91,76240,73834],{"class":250},[91,76242,58328],{"class":97},[91,76244,251],{"class":250},[91,76246,833],{"class":101},[91,76248,1215],{"class":153},[91,76250,76251],{"class":105},"[A-Z]",[91,76253,551],{"class":153},[91,76255,833],{"class":101},[91,76257,807],{"class":250},[91,76259,75326],{"class":97},[91,76261,251],{"class":250},[91,76263,76231],{"class":101},[91,76265,75390],{"class":250},[91,76267,75460],{"class":308},[91,76269,76270,76272,76274,76276,76278,76280,76282,76284,76286,76288,76290,76292,76295,76297],{"class":93,"line":9973},[91,76271,73834],{"class":250},[91,76273,58328],{"class":97},[91,76275,251],{"class":250},[91,76277,833],{"class":101},[91,76279,1215],{"class":153},[91,76281,76251],{"class":105},[91,76283,551],{"class":153},[91,76285,833],{"class":101},[91,76287,807],{"class":250},[91,76289,75326],{"class":97},[91,76291,251],{"class":250},[91,76293,76294],{"class":101},"'P'",[91,76296,75390],{"class":250},[91,76298,75337],{"class":308},[91,76300,76301,76303,76305,76307,76309,76311,76314,76316,76318,76320,76322,76324,76327,76329],{"class":93,"line":9987},[91,76302,73834],{"class":250},[91,76304,58328],{"class":97},[91,76306,251],{"class":250},[91,76308,833],{"class":101},[91,76310,1215],{"class":153},[91,76312,76313],{"class":105},"[0-9]",[91,76315,551],{"class":153},[91,76317,833],{"class":101},[91,76319,807],{"class":250},[91,76321,75326],{"class":97},[91,76323,251],{"class":250},[91,76325,76326],{"class":101},"'0'",[91,76328,75390],{"class":250},[91,76330,75337],{"class":308},[91,76332,76333,76335,76337,76339,76341,76343,76346,76348,76350,76352,76354,76356,76358,76360],{"class":93,"line":9993},[91,76334,73834],{"class":250},[91,76336,58328],{"class":97},[91,76338,251],{"class":250},[91,76340,833],{"class":101},[91,76342,1215],{"class":153},[91,76344,76345],{"class":105},"[a-zA-Z0-9]",[91,76347,551],{"class":153},[91,76349,833],{"class":101},[91,76351,807],{"class":250},[91,76353,75326],{"class":97},[91,76355,251],{"class":250},[91,76357,76231],{"class":101},[91,76359,75334],{"class":250},[91,76361,75337],{"class":308},[91,76363,76364,76366,76368],{"class":93,"line":10020},[91,76365,52498],{"class":250},[91,76367,51894],{"class":51381},[91,76369,51388],{"class":250},[91,76371,76372,76374,76376],{"class":93,"line":10029},[91,76373,51866],{"class":250},[91,76375,51881],{"class":51381},[91,76377,51388],{"class":250},[91,76379,76380],{"class":93,"line":10035},[91,76381,2523],{"emptyLinePlaceholder":175},[91,76383,76384,76386,76388],{"class":93,"line":10043},[91,76385,51866],{"class":250},[91,76387,50716],{"class":51381},[91,76389,51388],{"class":250},[22121,76391,76393],{"id":76392},"_3624-修饰符","3.6.2.4 修饰符",[21,76395,76396],{},[24,76397],{"alt":26,"src":76398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[21,76400,76401],{},"replace是个方法，使用的时候一定不要忘记括号()",[21,76403,76404],{},[24,76405],{"alt":26,"src":76406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[82,76408,76410],{"className":50714,"code":76409,"language":50716,"meta":26,"style":26},"\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",[88,76411,76412,76422,76436,76444,76458,76478,76490,76498,76506,76514,76546,76577,76582,76614,76625,76658,76667,76675,76683],{"__ignoreMap":26},[91,76413,76414,76416,76418,76420],{"class":93,"line":94},[91,76415,51378],{"class":250},[91,76417,51382],{"class":51381},[91,76419,51385],{"class":97},[91,76421,51388],{"class":250},[91,76423,76424,76426,76428,76430,76432,76434],{"class":93,"line":38},[91,76425,1159],{"class":250},[91,76427,50716],{"class":51381},[91,76429,51397],{"class":97},[91,76431,296],{"class":250},[91,76433,51402],{"class":101},[91,76435,51388],{"class":250},[91,76437,76438,76440,76442],{"class":93,"line":1304},[91,76439,1159],{"class":250},[91,76441,51415],{"class":51381},[91,76443,51388],{"class":250},[91,76445,76446,76448,76450,76452,76454,76456],{"class":93,"line":1319},[91,76447,52225],{"class":250},[91,76449,51425],{"class":51381},[91,76451,51428],{"class":97},[91,76453,296],{"class":250},[91,76455,51433],{"class":101},[91,76457,51388],{"class":250},[91,76459,76460,76462,76464,76466,76468,76470,76472,76474,76476],{"class":93,"line":1325},[91,76461,52225],{"class":250},[91,76463,51425],{"class":51381},[91,76465,15043],{"class":97},[91,76467,296],{"class":250},[91,76469,51472],{"class":101},[91,76471,51452],{"class":97},[91,76473,296],{"class":250},[91,76475,51479],{"class":101},[91,76477,51388],{"class":250},[91,76479,76480,76482,76484,76486,76488],{"class":93,"line":1339},[91,76481,52225],{"class":250},[91,76483,51488],{"class":51381},[91,76485,51491],{"class":250},[91,76487,51488],{"class":51381},[91,76489,51388],{"class":250},[91,76491,76492,76494,76496],{"class":93,"line":1345},[91,76493,51866],{"class":250},[91,76495,51415],{"class":51381},[91,76497,51388],{"class":250},[91,76499,76500,76502,76504],{"class":93,"line":1436},[91,76501,1159],{"class":250},[91,76503,51881],{"class":51381},[91,76505,51388],{"class":250},[91,76507,76508,76510,76512],{"class":93,"line":1442},[91,76509,52225],{"class":250},[91,76511,51894],{"class":51381},[91,76513,51388],{"class":250},[91,76515,76516,76518,76520,76522,76524,76526,76529,76531,76533,76535,76537,76539,76542,76544],{"class":93,"line":1454},[91,76517,73834],{"class":250},[91,76519,58328],{"class":97},[91,76521,251],{"class":250},[91,76523,833],{"class":101},[91,76525,1215],{"class":153},[91,76527,76528],{"class":48058},"java",[91,76530,551],{"class":153},[91,76532,833],{"class":101},[91,76534,807],{"class":250},[91,76536,75326],{"class":97},[91,76538,251],{"class":250},[91,76540,76541],{"class":101},"'java'",[91,76543,75836],{"class":250},[91,76545,75337],{"class":308},[91,76547,76548,76550,76552,76554,76556,76558,76560,76562,76564,76566,76568,76570,76573,76575],{"class":93,"line":1736},[91,76549,73834],{"class":250},[91,76551,58328],{"class":97},[91,76553,251],{"class":250},[91,76555,833],{"class":101},[91,76557,1215],{"class":153},[91,76559,76528],{"class":48058},[91,76561,551],{"class":153},[91,76563,833],{"class":101},[91,76565,807],{"class":250},[91,76567,75326],{"class":97},[91,76569,251],{"class":250},[91,76571,76572],{"class":101},"'Java'",[91,76574,75836],{"class":250},[91,76576,75460],{"class":308},[91,76578,76579],{"class":93,"line":1741},[91,76580,76581],{"class":308},"    \u002F\u002F 不区分大小写、\n",[91,76583,76584,76586,76588,76590,76592,76594,76596,76598,76600,76602,76604,76606,76608,76610,76612],{"class":93,"line":1747},[91,76585,73834],{"class":250},[91,76587,58328],{"class":97},[91,76589,251],{"class":250},[91,76591,833],{"class":101},[91,76593,1215],{"class":153},[91,76595,76528],{"class":48058},[91,76597,551],{"class":153},[91,76599,833],{"class":101},[91,76601,690],{"class":153},[91,76603,807],{"class":250},[91,76605,75326],{"class":97},[91,76607,251],{"class":250},[91,76609,76572],{"class":101},[91,76611,75836],{"class":250},[91,76613,75337],{"class":308},[91,76615,76616,76618,76620,76622],{"class":93,"line":1752},[91,76617,11344],{"class":153},[91,76619,74000],{"class":105},[91,76621,13687],{"class":153},[91,76623,76624],{"class":101}," 'java是一门编程语言，学完java工资很高'\n",[91,76626,76627,76629,76632,76634,76637,76640,76642,76644,76646,76648,76651,76653,76656],{"class":93,"line":1766},[91,76628,11344],{"class":153},[91,76630,76631],{"class":105}," result",[91,76633,13687],{"class":153},[91,76635,76636],{"class":250}," str.",[91,76638,76639],{"class":97},"replace",[91,76641,251],{"class":250},[91,76643,833],{"class":101},[91,76645,76528],{"class":48058},[91,76647,833],{"class":101},[91,76649,76650],{"class":153},"ig",[91,76652,12558],{"class":250},[91,76654,76655],{"class":101},"'前端'",[91,76657,257],{"class":250},[91,76659,76660,76662,76664],{"class":93,"line":1771},[91,76661,73834],{"class":250},[91,76663,58328],{"class":97},[91,76665,76666],{"class":250},"(result)\n",[91,76668,76669,76671,76673],{"class":93,"line":1777},[91,76670,52498],{"class":250},[91,76672,51894],{"class":51381},[91,76674,51388],{"class":250},[91,76676,76677,76679,76681],{"class":93,"line":1798},[91,76678,51866],{"class":250},[91,76680,51881],{"class":51381},[91,76682,51388],{"class":250},[91,76684,76685,76687,76689],{"class":93,"line":1803},[91,76686,51866],{"class":250},[91,76688,50716],{"class":51381},[91,76690,51388],{"class":250},[168,76692,76693],{},"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":26,"searchDepth":38,"depth":38,"links":76695},[76696,76706,76718,76735,76742,76750],{"id":53441,"depth":38,"text":53442,"children":76697},[76698,76699,76700,76701,76702,76703,76704,76705],{"id":53445,"depth":1304,"text":53446},{"id":53478,"depth":1304,"text":53479},{"id":53517,"depth":1304,"text":53518},{"id":53675,"depth":1304,"text":53676},{"id":53723,"depth":1304,"text":53724},{"id":53860,"depth":1304,"text":53861},{"id":54182,"depth":1304,"text":54183},{"id":57170,"depth":1304,"text":57171},{"id":57198,"depth":38,"text":57199,"children":76707},[76708,76709,76710,76711,76712,76713,76714,76715,76716,76717],{"id":57202,"depth":1304,"text":57203},{"id":57225,"depth":1304,"text":57226},{"id":58140,"depth":1304,"text":58141},{"id":58830,"depth":1304,"text":58831},{"id":59112,"depth":1304,"text":59113},{"id":63273,"depth":1304,"text":63274},{"id":63443,"depth":1304,"text":63444},{"id":63571,"depth":1304,"text":63572},{"id":63596,"depth":1304,"text":63597},{"id":64985,"depth":1304,"text":64986},{"id":66138,"depth":38,"text":66139,"children":76719},[76720,76721,76722,76723,76724,76725,76726,76727,76728,76729,76730,76731,76732,76733,76734],{"id":66142,"depth":1304,"text":66143},{"id":66796,"depth":1304,"text":66797},{"id":68491,"depth":1304,"text":68492},{"id":68532,"depth":1304,"text":68533},{"id":68574,"depth":1304,"text":68575},{"id":68588,"depth":1304,"text":68589},{"id":68637,"depth":1304,"text":68638},{"id":68649,"depth":1304,"text":68650},{"id":68664,"depth":1304,"text":68665},{"id":68700,"depth":1304,"text":68701},{"id":68781,"depth":1304,"text":68782},{"id":68909,"depth":1304,"text":68910},{"id":68921,"depth":1304,"text":68922},{"id":68940,"depth":1304,"text":68941},{"id":71051,"depth":1304,"text":71052},{"id":71070,"depth":38,"text":71071,"children":76736},[76737,76738,76739,76740,76741],{"id":71091,"depth":1304,"text":71092},{"id":71111,"depth":1304,"text":71112},{"id":71160,"depth":1304,"text":71161},{"id":71285,"depth":1304,"text":71286},{"id":71466,"depth":1304,"text":71467},{"id":71484,"depth":38,"text":71485,"children":76743},[76744,76745,76746,76747,76748,76749],{"id":71499,"depth":1304,"text":71500},{"id":71558,"depth":1304,"text":71559},{"id":71582,"depth":1304,"text":71583},{"id":71902,"depth":1304,"text":71903},{"id":71934,"depth":1304,"text":71935},{"id":71957,"depth":1304,"text":71958},{"id":75025,"depth":38,"text":75026,"children":76751},[76752,76753],{"id":75059,"depth":1304,"text":75060},{"id":75098,"depth":1304,"text":75099},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53413,"description":23500},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76760,"title":76761,"body":76762,"description":23500,"extension":173,"meta":92899,"navigation":175,"path":92900,"seo":92901,"stem":92902,"__hash__":92903},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76763,"toc":92835},[76764,76767,76770,76774,76778,76783,76788,76799,76803,76808,76811,76815,76818,76823,76827,76831,76834,76839,76842,76846,76849,76857,76860,76864,76869,76874,76877,76881,76886,76891,76894,76898,76903,76906,76911,76914,76919,76922,76927,76932,76935,76938,76942,76947,76952,76955,76959,76963,76966,76969,76972,76976,76980,76985,76990,76993,76997,77002,77007,77010,77013,77016,77019,77022,77025,77028,77031,77034,77039,77043,77048,77053,77056,77059,77062,77065,77068,77071,77074,77077,77081,77085,77088,77091,77094,77099,77101,77104,77107,77110,77113,77116,77119,77122,77125,77128,77131,77134,77137,77140,77145,77150,77155,77158,77162,77165,77170,77174,77176,77187,77192,77293,77296,77299,77302,77305,77308,77311,77314,77317,77319,77322,77325,77328,77331,77334,77336,77339,77342,77345,77348,77351,77354,77356,77359,77361,77363,77366,77370,77374,77377,77380,77383,77386,77389,77392,77395,77398,77401,77406,77526,77529,77532,77537,77540,77543,77546,77549,77554,77557,77560,77563,77566,77571,77574,77674,77739,77813,77817,77820,77823,77827,77830,77844,77873,77876,77879,77882,77885,77888,77891,77894,77896,77899,77902,77905,77908,77912,77917,77921,77926,78001,78004,78187,78190,78193,78196,78199,78202,78204,78207,78210,78213,78216,78219,78222,78224,78228,78231,78236,78239,78242,78245,78248,78250,78255,78258,78261,78264,78267,78269,78274,78277,78280,78282,78284,78287,78291,78294,78297,78302,78305,78308,78311,78361,78366,78370,78375,78378,78447,78450,78459,78463,78468,78471,78474,78482,78485,78502,80304,80308,80312,80317,80320,80324,80330,80336,80488,80493,80498,80501,80504,80507,80510,80513,80516,80519,80522,80525,80528,80531,80534,80539,80543,80546,80557,80561,80566,80569,80572,80575,80578,80581,80583,80586,80589,80592,80595,80597,80614,80617,80621,80624,80629,80634,80637,80640,80644,80647,80650,80659,80662,80666,80669,80674,80679,80746,80750,80753,80756,80761,80766,80852,80857,80861,80864,80867,80882,80885,80890,80894,80899,81008,81011,81022,81172,81176,81181,81290,81294,81299,81304,81309,81312,81319,81339,81375,81539,81544,81547,81552,81559,81562,81565,81568,81627,81683,81739,81743,81748,82063,82066,82070,82073,82078,82187,82192,82196,82201,82205,82276,82280,82282,82285,82288,82326,82602,82606,82623,82689,82723,82727,82730,82735,82764,82771,82780,82785,82800,82805,82814,82817,82954,82958,83020,83024,83029,83274,83278,83283,83286,83289,83292,83295,83299,83304,84885,84889,84893,84899,84902,84907,84911,84914,84919,84922,84933,84937,84942,84946,84951,84956,84959,84964,84968,84972,84975,84980,84985,84988,84991,84994,85116,85121,85223,85226,85229,85233,85238,85410,85415,85419,85422,85427,85493,85498,85501,85632,85635,85640,85643,85646,85737,85742,85745,85748,85751,85754,85759,85764,85767,85772,85777,85782,85786,85789,85792,85797,85802,85807,85812,85866,85869,85872,85877,85880,85883,85888,85893,85898,85902,85907,85921,85926,85929,85934,85938,85943,85948,85953,85958,85963,85968,85973,85978,85981,85985,85990,85993,85996,85999,86004,86009,86012,86015,86019,86022,86025,86030,86035,86040,86045,86048,86053,86058,86119,86124,86127,86132,87373,87378,87382,87386,87391,87394,87399,87404,87407,87412,87414,87419,87423,87426,87429,87440,87444,87449,87454,87509,87514,87519,87524,87735,87740,87744,87749,87752,87754,87757,87760,88207,88212,88219,88225,88228,88231,88495,88500,88504,88769,88774,88778,88783,88788,88793,88798,89129,89132,89137,89142,89145,89149,89153,89158,89163,89168,89173,89178,89183,89187,89190,89195,89200,89203,89277,89282,89287,89292,89294,89297,89667,89672,89677,89682,89685,89688,89790,89795,89800,89903,89907,89912,89916,89920,89925,89930,89933,89938,89941,89944,90337,90342,90345,90348,90351,90354,90874,90878,90883,90888,90893,90896,90901,90904,90907,91289,91294,91296,91298,91301,91304,91816,91820,91881,91884,91887,91890,91894,91897,91902,91907,92832],[10,76765,76761],{"id":76766},"_4js进阶",[21,76768,76769],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[190,76771,76773],{"id":76772},"_41-作用域","4.1 作用域",[217,76775,76777],{"id":76776},"_411-局部作用域","4.1.1 局部作用域",[21,76779,76780],{},[24,76781],{"alt":26,"src":76782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[21,76784,76785],{},[24,76786],{"alt":26,"src":76787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1256,76789,76790,76793,76796],{},[17,76791,76792],{},"函数作用域在函数内部",[17,76794,76795],{},"块级作用域在{}",[17,76797,76798],{},"对象的那个{}不是作用域，不是块作用域",[217,76800,76802],{"id":76801},"_412-全局作用域","4.1.2 全局作用域",[21,76804,76805],{},[24,76806],{"alt":26,"src":76807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[21,76809,76810],{},"window.a=10不要这样写",[217,76812,76814],{"id":76813},"_413-作用域链","4.1.3 作用域链",[21,76816,76817],{},"变量查找机制",[21,76819,76820],{},[24,76821],{"alt":26,"src":76822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[190,76824,76826],{"id":76825},"_42-垃圾回收机制","4.2 垃圾回收机制",[217,76828,76830],{"id":76829},"_421-大体介绍","4.2.1 大体介绍",[21,76832,76833],{},"垃圾回收机制(Garbage Collection) 简称 GC",[21,76835,76836],{},[24,76837],{"alt":26,"src":76838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[21,76840,76841],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[217,76843,76845],{"id":76844},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[21,76847,76848],{},"堆栈空间分配区别：",[14,76850,76851,76854],{},[17,76852,76853],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[17,76855,76856],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[21,76858,76859],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22121,76861,76863],{"id":76862},"_4221-引用计数","4.2.2.1 引用计数",[21,76865,76866],{},[24,76867],{"alt":26,"src":76868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[21,76870,76871],{},[24,76872],{"alt":26,"src":76873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[21,76875,76876],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22121,76878,76880],{"id":76879},"_4222-标记清除法","4.2.2.2 标记清除法",[21,76882,76883],{},[24,76884],{"alt":26,"src":76885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[21,76887,76888],{},[24,76889],{"alt":26,"src":76890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[21,76892,76893],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[190,76895,76897],{"id":76896},"_43-闭包","4.3 闭包",[21,76899,76900],{},[24,76901],{"alt":26,"src":76902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[21,76904,76905],{},"闭包：内层函数+外层函数的变量",[21,76907,76908],{},[24,76909],{"alt":26,"src":76910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[21,76912,76913],{},"closure就是闭包",[21,76915,76916],{},[24,76917],{"alt":26,"src":76918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[21,76920,76921],{},"内层函数必须包含外层函数的变量才是闭包",[21,76923,76924],{},[24,76925],{"alt":26,"src":76926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[21,76928,76929],{},[24,76930],{"alt":26,"src":76931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[21,76933,76934],{},"闭包可能会引起内存泄漏",[21,76936,76937],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[190,76939,76941],{"id":76940},"_44-变量提升","4.4 变量提升",[21,76943,76944],{},[24,76945],{"alt":26,"src":76946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[21,76948,76949],{},[24,76950],{"alt":26,"src":76951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[21,76953,76954],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[190,76956,76958],{"id":76957},"_45-函数进阶","4.5 函数进阶",[217,76960,76962],{"id":76961},"_451-函数提升","4.5.1 函数提升",[21,76964,76965],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[21,76967,76968],{},"只提升函数声明，不提升函数调用",[51894,76970,76971],{},"\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",[217,76973,76975],{"id":76974},"_452-函数参数","4.5.2 函数参数",[22121,76977,76979],{"id":76978},"_4521-动态参数","4.5.2.1 动态参数",[21,76981,76982],{},[24,76983],{"alt":26,"src":76984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[21,76986,76987],{},[24,76988],{"alt":26,"src":76989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[21,76991,76992],{},"箭头函数里边没有arguments",[22121,76994,76996],{"id":76995},"_4522-剩余参数","4.5.2.2 剩余参数",[21,76998,76999],{},[24,77000],{"alt":26,"src":77001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[21,77003,77004],{},[24,77005],{"alt":26,"src":77006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[21,77008,77009],{},"剩余参数使用的时候不需要写...",[21,77011,77012],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[21,77014,77015],{},"  function getSum(a,b,...arr) {",[21,77017,77018],{},"  console.log(11)",[21,77020,77021],{},"  }",[21,77023,77024],{},"  getSum(1,2,3,4)",[21,77026,77027],{},"  将1传给a，2传给b，剩下的传给剩余参数",[21,77029,77030],{},"  getSum(1,2)",[21,77032,77033],{},"  将1传给a，2传给b，剩余参数为一个空数组",[21,77035,77036],{},[24,77037],{"alt":26,"src":77038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22121,77040,77042],{"id":77041},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[21,77044,77045],{},[24,77046],{"alt":26,"src":77047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[21,77049,77050],{},[24,77051],{"alt":26,"src":77052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[21,77054,77055],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[21,77057,77058],{},"展开运算符可以用于数组之间的合并：",[21,77060,77061],{},"const arr1 = [1, 2, 3]",[21,77063,77064],{},"const arr2 = [3, 4, 5]",[21,77066,77067],{},"const arr = [...arr1, ...arr2]",[21,77069,77070],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[21,77072,77073],{},"剩余参数：函数参数使用，得到真数组",[21,77075,77076],{},"展开运算符：数组中使用，数组展开",[217,77078,77080],{"id":77079},"_453-箭头函数","4.5.3 箭头函数",[22121,77082,77084],{"id":77083},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[21,77086,77087],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[21,77089,77090],{},"它不是万能的！！！",[21,77092,77093],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[21,77095,77096],{},[24,77097],{"alt":26,"src":77098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[21,77100,280],{},[21,77102,77103],{},"① 只有一个形参的时候，可以省略小括号：",[21,77105,77106],{},"const fn=x=>{console.log(x)}",[21,77108,77109],{},"② 只有一行代码时可以省略大括号：",[21,77111,77112],{},"const fn=x=>console.log(11)",[21,77114,77115],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[21,77117,77118],{},"const fn=x=>x+x",[21,77120,77121],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[21,77123,77124],{},"⑤ 阻止表单默认提交：",[21,77126,77127],{},"const form = document.querySelector('form')",[21,77129,77130],{},"form.addEventListener('click', ev => ev.preventDefault())",[21,77132,77133],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[21,77135,77136],{},"const fn=uname=>({uname:uname})",[21,77138,77139],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[21,77141,77142],{},[24,77143],{"alt":26,"src":77144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[21,77146,77147],{},[24,77148],{"alt":26,"src":77149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[21,77151,77152],{},[24,77153],{"alt":26,"src":77154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[21,77156,77157],{},"一定不要忘记用()，有()就理解为自带return",[22121,77159,77161],{"id":77160},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[21,77163,77164],{},"箭头函数是没有动态参数的arguments",[21,77166,77167],{},[24,77168],{"alt":26,"src":77169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22121,77171,77173],{"id":77172},"_4533-箭头函数this","4.5.3.3 箭头函数this",[21,77175,11455],{},[14,77177,77178,77181,77184],{},[17,77179,77180],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[17,77182,77183],{},"事件回调函数使用箭头函数时，this 为全局的 window",[17,77185,77186],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[21,77188,77189],{},[24,77190],{"alt":26,"src":77191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[82,77193,77195],{"className":53148,"code":77194,"language":53150,"meta":26,"style":26},"  \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",[88,77196,77197,77205,77210,77215,77220,77225,77230,77234,77239,77243,77247,77252,77257,77262,77266,77270,77275,77280,77285],{"__ignoreMap":26},[91,77198,77199,77201,77203],{"class":93,"line":94},[91,77200,52225],{"class":250},[91,77202,51894],{"class":51381},[91,77204,51388],{"class":250},[91,77206,77207],{"class":93,"line":38},[91,77208,77209],{"class":250},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[91,77211,77212],{"class":93,"line":1304},[91,77213,77214],{"class":250},"    console.log(this) \u002F\u002F指向window\n",[91,77216,77217],{"class":93,"line":1319},[91,77218,77219],{"class":250},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[91,77221,77222],{"class":93,"line":1325},[91,77223,77224],{"class":250},"    function fn() {\n",[91,77226,77227],{"class":93,"line":1339},[91,77228,77229],{"class":250},"      console.log(this)  \u002F\u002F指向window\n",[91,77231,77232],{"class":93,"line":1345},[91,77233,2310],{"class":250},[91,77235,77236],{"class":93,"line":1436},[91,77237,77238],{"class":250},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[91,77240,77241],{"class":93,"line":1442},[91,77242,2523],{"emptyLinePlaceholder":175},[91,77244,77245],{"class":93,"line":1454},[91,77246,71604],{"class":250},[91,77248,77249],{"class":93,"line":1736},[91,77250,77251],{"class":250},"      name: 'andy',\n",[91,77253,77254],{"class":93,"line":1741},[91,77255,77256],{"class":250},"      sayHai: function () {\n",[91,77258,77259],{"class":93,"line":1747},[91,77260,77261],{"class":250},"        console.log(this)\n",[91,77263,77264],{"class":93,"line":1752},[91,77265,52479],{"class":250},[91,77267,77268],{"class":93,"line":1766},[91,77269,2310],{"class":250},[91,77271,77272],{"class":93,"line":1771},[91,77273,77274],{"class":250},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[91,77276,77277],{"class":93,"line":1777},[91,77278,77279],{"class":250},"    \u002F\u002F 2.箭头函数的this\n",[91,77281,77282],{"class":93,"line":1798},[91,77283,77284],{"class":250},"    const fn = () => console.log(this)\n",[91,77286,77287,77289,77291],{"class":93,"line":1803},[91,77288,52498],{"class":250},[91,77290,51894],{"class":51381},[91,77292,51388],{"class":250},[21,77294,77295],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[21,77297,77298],{},"const fn = () => console.log(this)",[21,77300,77301],{},"fn() \u002F\u002F指向window",[21,77303,77304],{},"\u002F\u002F 3.对象方法箭头函数 this",[21,77306,77307],{},"①",[21,77309,77310],{},"const obj = {",[21,77312,77313],{},"uname: 'pink老师',",[21,77315,77316],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[21,77318,1195],{},[21,77320,77321],{},"调用对象里边的函数",[21,77323,77324],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[21,77326,77327],{},"obj.sayHai()",[21,77329,77330],{},"②",[21,77332,77333],{},"const obj1 = {",[21,77335,77313],{},[21,77337,77338],{},"sayHai: function () {",[21,77340,77341],{},"let i = 10",[21,77343,77344],{},"const count = () => {",[21,77346,77347],{},"console.log(this)",[21,77349,77350],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[21,77352,77353],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[21,77355,1195],{},[21,77357,77358],{},"count()",[21,77360,1195],{},[21,77362,1195],{},[21,77364,77365],{},"obj1.sayHai()",[190,77367,77369],{"id":77368},"_46-解构赋值","4.6 解构赋值",[217,77371,77373],{"id":77372},"_461-数组解构","4.6.1 数组解构",[21,77375,77376],{},"以前要是使用数组中的值的话：",[21,77378,77379],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[21,77381,77382],{},"const arr=[100,60,80]",[21,77384,77385],{},"const max=arr[0]",[21,77387,77388],{},"const min=arr[1]",[21,77390,77391],{},"const avg=arr[2]",[21,77393,77394],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[21,77396,77397],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[21,77399,77400],{},"这个写法就类似于上边的那种用很多const的方法",[21,77402,77403],{},[24,77404],{"alt":26,"src":77405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[82,77407,77409],{"className":50714,"code":77408,"language":50716,"meta":26,"style":26},"①变量之间交换值:\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",[88,77410,77411,77416,77421,77426,77431,77436,77440,77444,77449,77453,77458,77463,77467,77472,77477,77488,77498,77503,77508,77513,77517,77521],{"__ignoreMap":26},[91,77412,77413],{"class":93,"line":94},[91,77414,77415],{"class":250},"①变量之间交换值:\n",[91,77417,77418],{"class":93,"line":38},[91,77419,77420],{"class":250},"let a=1\n",[91,77422,77423],{"class":93,"line":1304},[91,77424,77425],{"class":250},"let b=2;\n",[91,77427,77428],{"class":93,"line":1319},[91,77429,77430],{"class":250},"必须加这行代码，不然就会报错\n",[91,77432,77433],{"class":93,"line":1325},[91,77434,77435],{"class":250},"[b,a]=[a,b]\n",[91,77437,77438],{"class":93,"line":1339},[91,77439,2523],{"emptyLinePlaceholder":175},[91,77441,77442],{"class":93,"line":1345},[91,77443,2523],{"emptyLinePlaceholder":175},[91,77445,77446],{"class":93,"line":1436},[91,77447,77448],{"class":250},"可以写成下面的方式：\n",[91,77450,77451],{"class":93,"line":1442},[91,77452,77420],{"class":250},[91,77454,77455],{"class":93,"line":1454},[91,77456,77457],{"class":250},"let b=2\n",[91,77459,77460],{"class":93,"line":1736},[91,77461,77462],{"class":250},";[b,a]=[a,b]\n",[91,77464,77465],{"class":93,"line":1741},[91,77466,2523],{"emptyLinePlaceholder":175},[91,77468,77469],{"class":93,"line":1747},[91,77470,77471],{"class":250},"②排序\n",[91,77473,77474],{"class":93,"line":1752},[91,77475,77476],{"class":250},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[91,77478,77479,77482,77485],{"class":93,"line":1766},[91,77480,77481],{"class":250},"for (let i = 0; i ",[91,77483,1159],{"class":77484},"s7hpK",[91,77486,77487],{"class":250}," arr1.length; i++) {\n",[91,77489,77490,77493,77495],{"class":93,"line":1771},[91,77491,77492],{"class":250},"   for (let j = 0; j ",[91,77494,1159],{"class":77484},[91,77496,77497],{"class":250}," arr1.length - 1; j++) {\n",[91,77499,77500],{"class":93,"line":1777},[91,77501,77502],{"class":250},"      if (arr1[j] > arr1[j + 1]) {\n",[91,77504,77505],{"class":93,"line":1798},[91,77506,77507],{"class":250},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[91,77509,77510],{"class":93,"line":1803},[91,77511,77512],{"class":250},"       }\n",[91,77514,77515],{"class":93,"line":1817},[91,77516,4432],{"class":250},[91,77518,77519],{"class":93,"line":1822},[91,77520,1689],{"class":250},[91,77522,77523],{"class":93,"line":1851},[91,77524,77525],{"class":250},"console.log(arr1)\n",[21,77527,77528],{},"数组解构的细节：",[21,77530,77531],{},"①变量多，单元值少",[21,77533,77534],{},[24,77535],{"alt":26,"src":77536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[21,77538,77539],{},"防止出现undefined的方法：",[21,77541,77542],{},"const [a=0,b=0] =[1]",[21,77544,77545],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[21,77547,77548],{},"②变量少，单元值多",[21,77550,77551],{},[24,77552],{"alt":26,"src":77553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[21,77555,77556],{},"此时可以使用剩余参数来接收多余的值",[21,77558,77559],{},"const [a,b,...c]=[1,2,3,4]",[21,77561,77562],{},"console.log(c) 输出[3,4]",[21,77564,77565],{},"③可以按需导入，忽略某些返回值",[21,77567,77568],{},[24,77569],{"alt":26,"src":77570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[21,77572,77573],{},"④支持多维数组的结构",[82,77575,77579],{"className":77576,"code":77577,"language":77578,"meta":26,"style":26},"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",[88,77580,77581,77609,77625,77640,77655],{"__ignoreMap":26},[91,77582,77583,77585,77587,77589,77591,77593,77595,77597,77600,77602,77604,77606],{"class":93,"line":94},[91,77584,6915],{"class":153},[91,77586,51914],{"class":250},[91,77588,296],{"class":153},[91,77590,52307],{"class":250},[91,77592,466],{"class":105},[91,77594,12558],{"class":250},[91,77596,327],{"class":105},[91,77598,77599],{"class":250},", [",[91,77601,321],{"class":105},[91,77603,12558],{"class":250},[91,77605,542],{"class":105},[91,77607,77608],{"class":250},"]]\n",[91,77610,77611,77614,77616,77618,77620,77622],{"class":93,"line":38},[91,77612,77613],{"class":250},"console.",[91,77615,58328],{"class":97},[91,77617,3974],{"class":250},[91,77619,440],{"class":105},[91,77621,4339],{"class":250},[91,77623,77624],{"class":308},"  \u002F\u002F1\n",[91,77626,77627,77629,77631,77633,77635,77637],{"class":93,"line":1304},[91,77628,77613],{"class":250},[91,77630,58328],{"class":97},[91,77632,3974],{"class":250},[91,77634,466],{"class":105},[91,77636,4339],{"class":250},[91,77638,77639],{"class":308},"  \u002F\u002F2\n",[91,77641,77642,77644,77646,77648,77650,77652],{"class":93,"line":1319},[91,77643,77613],{"class":250},[91,77645,58328],{"class":97},[91,77647,3974],{"class":250},[91,77649,327],{"class":105},[91,77651,4339],{"class":250},[91,77653,77654],{"class":308},"  \u002F\u002F[3,4]\n",[91,77656,77657,77659,77661,77663,77665,77667,77669,77671],{"class":93,"line":1325},[91,77658,77613],{"class":250},[91,77660,58328],{"class":97},[91,77662,3974],{"class":250},[91,77664,327],{"class":105},[91,77666,5024],{"class":250},[91,77668,440],{"class":105},[91,77670,4339],{"class":250},[91,77672,77673],{"class":308},"  \u002F\u002F3\n",[82,77675,77677],{"className":77576,"code":77676,"language":77578,"meta":26,"style":26},"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",[88,77678,77679,77706,77717,77728],{"__ignoreMap":26},[91,77680,77681,77683,77686,77688,77690,77692,77694,77696,77698,77700,77702,77704],{"class":93,"line":94},[91,77682,6915],{"class":153},[91,77684,77685],{"class":250}," [a, b, c] ",[91,77687,296],{"class":153},[91,77689,52307],{"class":250},[91,77691,466],{"class":105},[91,77693,12558],{"class":250},[91,77695,327],{"class":105},[91,77697,77599],{"class":250},[91,77699,321],{"class":105},[91,77701,12558],{"class":250},[91,77703,542],{"class":105},[91,77705,77608],{"class":250},[91,77707,77708,77710,77712,77715],{"class":93,"line":38},[91,77709,77613],{"class":250},[91,77711,58328],{"class":97},[91,77713,77714],{"class":250},"(a)",[91,77716,77624],{"class":308},[91,77718,77719,77721,77723,77726],{"class":93,"line":1304},[91,77720,77613],{"class":250},[91,77722,58328],{"class":97},[91,77724,77725],{"class":250},"(b)",[91,77727,77639],{"class":308},[91,77729,77730,77732,77734,77737],{"class":93,"line":1319},[91,77731,77613],{"class":250},[91,77733,58328],{"class":97},[91,77735,77736],{"class":250},"(c)",[91,77738,77654],{"class":308},[82,77740,77742],{"className":77576,"code":77741,"language":77578,"meta":26,"style":26},"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",[88,77743,77744,77771,77781,77791,77801],{"__ignoreMap":26},[91,77745,77746,77748,77751,77753,77755,77757,77759,77761,77763,77765,77767,77769],{"class":93,"line":94},[91,77747,6915],{"class":153},[91,77749,77750],{"class":250}," [a, b, [c, d]] ",[91,77752,296],{"class":153},[91,77754,52307],{"class":250},[91,77756,466],{"class":105},[91,77758,12558],{"class":250},[91,77760,327],{"class":105},[91,77762,77599],{"class":250},[91,77764,321],{"class":105},[91,77766,12558],{"class":250},[91,77768,542],{"class":105},[91,77770,77608],{"class":250},[91,77772,77773,77775,77777,77779],{"class":93,"line":38},[91,77774,77613],{"class":250},[91,77776,58328],{"class":97},[91,77778,77714],{"class":250},[91,77780,77624],{"class":308},[91,77782,77783,77785,77787,77789],{"class":93,"line":1304},[91,77784,77613],{"class":250},[91,77786,58328],{"class":97},[91,77788,77725],{"class":250},[91,77790,77639],{"class":308},[91,77792,77793,77795,77797,77799],{"class":93,"line":1319},[91,77794,77613],{"class":250},[91,77796,58328],{"class":97},[91,77798,77736],{"class":250},[91,77800,77673],{"class":308},[91,77802,77803,77805,77807,77810],{"class":93,"line":1325},[91,77804,77613],{"class":250},[91,77806,58328],{"class":97},[91,77808,77809],{"class":250},"(d)",[91,77811,77812],{"class":308},"  \u002F\u002F4\n",[217,77814,77816],{"id":77815},"_462-对象解构","4.6.2 对象解构",[21,77818,77819],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[21,77821,77822],{},"用的非常非常多！！！！！！",[22121,77824,77826],{"id":77825},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[21,77828,77829],{},"基本语法：",[14,77831,77832,77835,77838,77841],{},[17,77833,77834],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[17,77836,77837],{},"对象属性的值将被赋值给与属性名相同的变量",[17,77839,77840],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[17,77842,77843],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[82,77845,77847],{"className":50714,"code":77846,"language":50716,"meta":26,"style":26},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[88,77848,77849,77854,77859,77864,77868],{"__ignoreMap":26},[91,77850,77851],{"class":93,"line":94},[91,77852,77853],{"class":250},"const obj = {\n",[91,77855,77856],{"class":93,"line":38},[91,77857,77858],{"class":250},"   uname: 'pink老师',\n",[91,77860,77861],{"class":93,"line":1304},[91,77862,77863],{"class":250},"   age: 18,\n",[91,77865,77866],{"class":93,"line":1319},[91,77867,1689],{"class":250},[91,77869,77870],{"class":93,"line":1325},[91,77871,77872],{"class":250},"const { uname, age } = obj\n",[21,77874,77875],{},"上方代码这样写等价于：",[21,77877,77878],{},"const uname等价于obj.uname",[21,77880,77881],{},"变量名可以重新改名：",[21,77883,77884],{},"const uname='red老师'",[21,77886,77887],{},"const user={",[21,77889,77890],{},"  uname:'pink老师',",[21,77892,77893],{},"  age:18",[21,77895,1195],{},[21,77897,77898],{},"const {uname,age}=user",[21,77900,77901],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[21,77903,77904],{},"const {旧变量名：新变量名}=对象",[21,77906,77907],{},"const {uname:username,age}=user",[22121,77909,77911],{"id":77910},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[21,77913,77914],{},[24,77915],{"alt":26,"src":77916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22121,77918,77920],{"id":77919},"_4623-多级对象解构","4.6.2.3 多级对象解构",[21,77922,77923],{},[24,77924],{"alt":26,"src":77925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[82,77927,77929],{"className":53148,"code":77928,"language":53150,"meta":26,"style":26},"  \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",[88,77930,77931,77939,77944,77949,77954,77959,77964,77969,77974,77979,77983,77988,77993],{"__ignoreMap":26},[91,77932,77933,77935,77937],{"class":93,"line":94},[91,77934,52225],{"class":250},[91,77936,51894],{"class":51381},[91,77938,51388],{"class":250},[91,77940,77941],{"class":93,"line":38},[91,77942,77943],{"class":250},"    const pig = {\n",[91,77945,77946],{"class":93,"line":1304},[91,77947,77948],{"class":250},"      name: '佩奇',\n",[91,77950,77951],{"class":93,"line":1319},[91,77952,77953],{"class":250},"      family: {\n",[91,77955,77956],{"class":93,"line":1325},[91,77957,77958],{"class":250},"        mother: '猪妈妈',\n",[91,77960,77961],{"class":93,"line":1339},[91,77962,77963],{"class":250},"        father: '猪爸爸',\n",[91,77965,77966],{"class":93,"line":1345},[91,77967,77968],{"class":250},"        sister: '乔治'\n",[91,77970,77971],{"class":93,"line":1436},[91,77972,77973],{"class":250},"      },\n",[91,77975,77976],{"class":93,"line":1442},[91,77977,77978],{"class":250},"      age: 6\n",[91,77980,77981],{"class":93,"line":1454},[91,77982,2310],{"class":250},[91,77984,77985],{"class":93,"line":1736},[91,77986,77987],{"class":250},"    \u002F\u002F 多级对象解构\n",[91,77989,77990],{"class":93,"line":1741},[91,77991,77992],{"class":250},"    const { name, family: { mother, father, sister }, age } = pig\n",[91,77994,77995,77997,77999],{"class":93,"line":1747},[91,77996,52498],{"class":250},[91,77998,51894],{"class":51381},[91,78000,51388],{"class":250},[21,78002,78003],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[82,78005,78008],{"className":78006,"code":78007,"language":76528,"meta":26,"style":26},"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",[88,78009,78010,78015,78026,78038,78050,78059,78063,78074,78086,78096,78101,78105,78115,78126,78135,78139,78143,78154,78165,78174,78178,78183],{"__ignoreMap":26},[91,78011,78012],{"class":93,"line":94},[91,78013,78014],{"class":308},"    \u002F\u002F 这是后台传递过来的数据\n",[91,78016,78017,78019,78022,78024],{"class":93,"line":38},[91,78018,11344],{"class":153},[91,78020,78021],{"class":250}," msg ",[91,78023,296],{"class":153},[91,78025,15695],{"class":250},[91,78027,78028,78031,78033,78036],{"class":93,"line":1304},[91,78029,78030],{"class":101},"      \"code\"",[91,78032,1108],{"class":153},[91,78034,78035],{"class":105}," 200",[91,78037,31547],{"class":250},[91,78039,78040,78043,78045,78048],{"class":93,"line":1319},[91,78041,78042],{"class":101},"      \"msg\"",[91,78044,1108],{"class":153},[91,78046,78047],{"class":101}," \"获取新闻列表成功\"",[91,78049,31547],{"class":250},[91,78051,78052,78055,78057],{"class":93,"line":1325},[91,78053,78054],{"class":101},"      \"data\"",[91,78056,1108],{"class":153},[91,78058,55528],{"class":250},[91,78060,78061],{"class":93,"line":1339},[91,78062,2633],{"class":250},[91,78064,78065,78068,78070,78072],{"class":93,"line":1345},[91,78066,78067],{"class":101},"          \"id\"",[91,78069,1108],{"class":153},[91,78071,25240],{"class":105},[91,78073,31547],{"class":250},[91,78075,78076,78079,78081,78084],{"class":93,"line":1436},[91,78077,78078],{"class":101},"          \"title\"",[91,78080,1108],{"class":153},[91,78082,78083],{"class":101}," \"5G商用自己，三大运用商收入下降\"",[91,78085,31547],{"class":250},[91,78087,78088,78091,78093],{"class":93,"line":1442},[91,78089,78090],{"class":101},"          \"count\"",[91,78092,1108],{"class":153},[91,78094,78095],{"class":105}," 58\n",[91,78097,78098],{"class":93,"line":1454},[91,78099,78100],{"class":250},"        },\n",[91,78102,78103],{"class":93,"line":1736},[91,78104,2633],{"class":250},[91,78106,78107,78109,78111,78113],{"class":93,"line":1741},[91,78108,78067],{"class":101},[91,78110,1108],{"class":153},[91,78112,14878],{"class":105},[91,78114,31547],{"class":250},[91,78116,78117,78119,78121,78124],{"class":93,"line":1747},[91,78118,78078],{"class":101},[91,78120,1108],{"class":153},[91,78122,78123],{"class":101}," \"国际媒体头条速览\"",[91,78125,31547],{"class":250},[91,78127,78128,78130,78132],{"class":93,"line":1752},[91,78129,78090],{"class":101},[91,78131,1108],{"class":153},[91,78133,78134],{"class":105}," 56\n",[91,78136,78137],{"class":93,"line":1766},[91,78138,78100],{"class":250},[91,78140,78141],{"class":93,"line":1771},[91,78142,2633],{"class":250},[91,78144,78145,78147,78149,78152],{"class":93,"line":1777},[91,78146,78067],{"class":101},[91,78148,1108],{"class":153},[91,78150,78151],{"class":105}," 3",[91,78153,31547],{"class":250},[91,78155,78156,78158,78160,78163],{"class":93,"line":1798},[91,78157,78078],{"class":101},[91,78159,1108],{"class":153},[91,78161,78162],{"class":101}," \"乌克兰和俄罗斯持续冲突\"",[91,78164,31547],{"class":250},[91,78166,78167,78169,78171],{"class":93,"line":1803},[91,78168,78090],{"class":101},[91,78170,1108],{"class":153},[91,78172,78173],{"class":105}," 1669\n",[91,78175,78176],{"class":93,"line":1817},[91,78177,78100],{"class":250},[91,78179,78180],{"class":93,"line":1822},[91,78181,78182],{"class":250},"      ]\n",[91,78184,78185],{"class":93,"line":1851},[91,78186,2310],{"class":250},[21,78188,78189],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[21,78191,78192],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[21,78194,78195],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[21,78197,78198],{},"function({data}) {",[21,78200,78201],{},"console.log(data)",[21,78203,1195],{},[21,78205,78206],{},"render(msg)",[21,78208,78209],{},"实参传递给形参的时候解构了",[21,78211,78212],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[21,78214,78215],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[21,78217,78218],{},"function render({data:mydata}) {",[21,78220,78221],{},"  console.log(data)",[21,78223,1195],{},[217,78225,78227],{"id":78226},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[21,78229,78230],{},"有两种情况：一个是数组结构，一个是立即执行函数",[14,78232,78233],{},[17,78234,78235],{},"如果对一个数组进行遍历，有两种方式：",[21,78237,78238],{},"①法1",[21,78240,78241],{},"const arr=[1,2,3]",[21,78243,78244],{},"arr.map(function(item,index) {",[21,78246,78247],{},"  console.log(item)",[21,78249,52545],{},[21,78251,78252],{},[24,78253],{"alt":26,"src":78254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[21,78256,78257],{},"②法2",[21,78259,78260],{},"const str='pink'",[21,78262,78263],{},"[1,2,3].map(function(item,index) {",[21,78265,78266],{},"console.log(item)",[21,78268,52545],{},[21,78270,78271],{},[24,78272],{"alt":26,"src":78273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[21,78275,78276],{},"此时会报错",[21,78278,78279],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[21,78281,78266],{},[21,78283,52545],{},[21,78285,78286],{},"内部会当成这样处理，所以我们用分号进行隔开",[190,78288,78290],{"id":78289},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[21,78292,78293],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[21,78295,78296],{},"可以理解为加强版的for循环",[21,78298,78299],{},[24,78300],{"alt":26,"src":78301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[21,78303,78304],{},"里边不写return，不返回数组，只遍历不返回",[21,78306,78307],{},"map是返回数组",[21,78309,78310],{},"forEach主要用于遍历数组对象",[82,78312,78314],{"className":53148,"code":78313,"language":53150,"meta":26,"style":26},"  \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",[88,78315,78316,78324,78329,78334,78339,78344,78348,78353],{"__ignoreMap":26},[91,78317,78318,78320,78322],{"class":93,"line":94},[91,78319,52225],{"class":250},[91,78321,51894],{"class":51381},[91,78323,51388],{"class":250},[91,78325,78326],{"class":93,"line":38},[91,78327,78328],{"class":250},"    const arr = ['red', 'green', 'pink']\n",[91,78330,78331],{"class":93,"line":1304},[91,78332,78333],{"class":250},"    const result = arr.forEach(function (item, index) {\n",[91,78335,78336],{"class":93,"line":1319},[91,78337,78338],{"class":250},"      console.log(item)\n",[91,78340,78341],{"class":93,"line":1325},[91,78342,78343],{"class":250},"      console.log(index)\n",[91,78345,78346],{"class":93,"line":1339},[91,78347,33542],{"class":250},[91,78349,78350],{"class":93,"line":1345},[91,78351,78352],{"class":250},"    console.log(result)\n",[91,78354,78355,78357,78359],{"class":93,"line":1436},[91,78356,52498],{"class":250},[91,78358,51894],{"class":51381},[91,78360,51388],{"class":250},[21,78362,78363],{},[24,78364],{"alt":26,"src":78365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[190,78367,78369],{"id":78368},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[21,78371,78372],{},[24,78373],{"alt":26,"src":78374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[21,78376,78377],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[82,78379,78381],{"className":53148,"code":78380,"language":53150,"meta":26,"style":26},"\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",[88,78382,78383,78391,78399,78404,78409,78413,78417,78422,78426,78431,78439],{"__ignoreMap":26},[91,78384,78385,78387,78389],{"class":93,"line":94},[91,78386,1159],{"class":250},[91,78388,51881],{"class":51381},[91,78390,51388],{"class":250},[91,78392,78393,78395,78397],{"class":93,"line":38},[91,78394,52225],{"class":250},[91,78396,51894],{"class":51381},[91,78398,51388],{"class":250},[91,78400,78401],{"class":93,"line":1304},[91,78402,78403],{"class":250},"    const arr = [10, 20, 30]\n",[91,78405,78406],{"class":93,"line":1319},[91,78407,78408],{"class":250},"    const newArr = arr.filter(function (item, index) {\n",[91,78410,78411],{"class":93,"line":1325},[91,78412,78338],{"class":250},[91,78414,78415],{"class":93,"line":1339},[91,78416,78343],{"class":250},[91,78418,78419],{"class":93,"line":1345},[91,78420,78421],{"class":250},"      return item >= 20\n",[91,78423,78424],{"class":93,"line":1436},[91,78425,33542],{"class":250},[91,78427,78428],{"class":93,"line":1442},[91,78429,78430],{"class":250},"    console.log(newArr)\n",[91,78432,78433,78435,78437],{"class":93,"line":1454},[91,78434,52498],{"class":250},[91,78436,51894],{"class":51381},[91,78438,51388],{"class":250},[91,78440,78441,78443,78445],{"class":93,"line":1736},[91,78442,51866],{"class":250},[91,78444,51881],{"class":51381},[91,78446,51388],{"class":250},[21,78448,78449],{},"这个也可以写成箭头函数：",[82,78451,78453],{"className":50714,"code":78452,"language":50716,"meta":26,"style":26},"const newArr = arr.filter(item => item >= 20)\n",[88,78454,78455],{"__ignoreMap":26},[91,78456,78457],{"class":93,"line":94},[91,78458,78452],{"class":250},[190,78460,78462],{"id":78461},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[21,78464,78465],{},[24,78466],{"alt":26,"src":78467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[21,78469,78470],{},"步骤：",[21,78472,78473],{},"①：渲染页面模块",[1256,78475,78476,78479],{},[17,78477,78478],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[17,78480,78481],{},"用forEach+字符串的形式",[21,78483,78484],{},"②：点击不同需求，显示不同页面内容",[1256,78486,78487,78490,78493,78496,78499],{},[17,78488,78489],{},"点击采取事件委托方式 .filter",[17,78491,78492],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[17,78494,78495],{},"筛选条件是根据点击的 data-index 来判断",[17,78497,78498],{},"可以使用对象解构，把事件对象解构",[17,78500,78501],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[82,78503,78505],{"className":50714,"code":78504,"language":50716,"meta":26,"style":26},"\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",[88,78506,78507,78517,78531,78535,78543,78557,78577,78589,78597,78603,78613,78623,78633,78637,78641,78647,78660,78672,78682,78694,78698,78702,78709,78722,78734,78751,78769,78782,78786,78790,78802,78812,78816,78820,78827,78868,78895,78905,78909,78913,78921,78933,78937,78941,78949,78961,78973,78984,78988,78992,79001,79013,79024,79028,79032,79041,79053,79065,79069,79073,79080,79090,79102,79114,79129,79133,79137,79145,79161,79171,79181,79191,79203,79207,79211,79221,79232,79242,79246,79254,79262,79266,79274,79289,79315,79340,79365,79384,79392,79406,79411,79416,79421,79426,79431,79439,79447,79452,79463,79468,79478,79488,79498,79508,79512,79516,79525,79534,79543,79552,79556,79560,79569,79578,79587,79596,79600,79604,79613,79622,79631,79640,79644,79648,79657,79666,79675,79684,79688,79692,79701,79710,79719,79728,79732,79736,79745,79754,79763,79772,79776,79780,79789,79798,79806,79815,79819,79823,79827,79832,79844,79849,79861,79865,79882,79910,79919,79924,79934,79944,79953,79958,79963,79967,79972,79989,79993,79998,80006,80011,80038,80043,80063,80068,80080,80085,80090,80095,80106,80120,80157,80175,80208,80225,80249,80253,80258,80264,80268,80272,80276,80284,80292,80296],{"__ignoreMap":26},[91,78508,78509,78511,78513,78515],{"class":93,"line":94},[91,78510,51378],{"class":250},[91,78512,51382],{"class":51381},[91,78514,51385],{"class":97},[91,78516,51388],{"class":250},[91,78518,78519,78521,78523,78525,78527,78529],{"class":93,"line":38},[91,78520,1159],{"class":250},[91,78522,50716],{"class":51381},[91,78524,51397],{"class":97},[91,78526,296],{"class":250},[91,78528,51402],{"class":101},[91,78530,51388],{"class":250},[91,78532,78533],{"class":93,"line":1304},[91,78534,2523],{"emptyLinePlaceholder":175},[91,78536,78537,78539,78541],{"class":93,"line":1319},[91,78538,1159],{"class":250},[91,78540,51415],{"class":51381},[91,78542,51388],{"class":250},[91,78544,78545,78547,78549,78551,78553,78555],{"class":93,"line":1325},[91,78546,52225],{"class":250},[91,78548,51425],{"class":51381},[91,78550,51428],{"class":97},[91,78552,296],{"class":250},[91,78554,51433],{"class":101},[91,78556,51388],{"class":250},[91,78558,78559,78561,78563,78565,78567,78569,78571,78573,78575],{"class":93,"line":1339},[91,78560,52225],{"class":250},[91,78562,51425],{"class":51381},[91,78564,15043],{"class":97},[91,78566,296],{"class":250},[91,78568,51472],{"class":101},[91,78570,51452],{"class":97},[91,78572,296],{"class":250},[91,78574,51479],{"class":101},[91,78576,51388],{"class":250},[91,78578,78579,78581,78583,78585,78587],{"class":93,"line":1345},[91,78580,52225],{"class":250},[91,78582,51488],{"class":51381},[91,78584,51491],{"class":250},[91,78586,51488],{"class":51381},[91,78588,51388],{"class":250},[91,78590,78591,78593,78595],{"class":93,"line":1436},[91,78592,52225],{"class":250},[91,78594,168],{"class":51381},[91,78596,51388],{"class":250},[91,78598,78599,78601],{"class":93,"line":1442},[91,78600,6526],{"class":51381},[91,78602,15695],{"class":250},[91,78604,78605,78607,78609,78611],{"class":93,"line":1454},[91,78606,54776],{"class":105},[91,78608,51518],{"class":250},[91,78610,440],{"class":105},[91,78612,1415],{"class":250},[91,78614,78615,78617,78619,78621],{"class":93,"line":1736},[91,78616,54787],{"class":105},[91,78618,51518],{"class":250},[91,78620,440],{"class":105},[91,78622,1415],{"class":250},[91,78624,78625,78627,78629,78631],{"class":93,"line":1741},[91,78626,72677],{"class":105},[91,78628,51518],{"class":250},[91,78630,60586],{"class":105},[91,78632,1415],{"class":250},[91,78634,78635],{"class":93,"line":1747},[91,78636,2310],{"class":250},[91,78638,78639],{"class":93,"line":1752},[91,78640,2523],{"emptyLinePlaceholder":175},[91,78642,78643,78645],{"class":93,"line":1766},[91,78644,62204],{"class":97},[91,78646,15695],{"class":250},[91,78648,78649,78651,78653,78656,78658],{"class":93,"line":1771},[91,78650,54852],{"class":105},[91,78652,51518],{"class":250},[91,78654,78655],{"class":105},"990",[91,78657,51573],{"class":153},[91,78659,1415],{"class":250},[91,78661,78662,78664,78666,78668,78670],{"class":93,"line":1777},[91,78663,54787],{"class":105},[91,78665,51518],{"class":250},[91,78667,440],{"class":105},[91,78669,51637],{"class":105},[91,78671,1415],{"class":250},[91,78673,78674,78676,78678,78680],{"class":93,"line":1798},[91,78675,55090],{"class":105},[91,78677,51518],{"class":250},[91,78679,51558],{"class":105},[91,78681,1415],{"class":250},[91,78683,78684,78687,78689,78692],{"class":93,"line":1803},[91,78685,78686],{"class":105},"      flex-wrap",[91,78688,51518],{"class":250},[91,78690,78691],{"class":105},"wrap",[91,78693,1415],{"class":250},[91,78695,78696],{"class":93,"line":1817},[91,78697,2310],{"class":250},[91,78699,78700],{"class":93,"line":1822},[91,78701,2523],{"emptyLinePlaceholder":175},[91,78703,78704,78707],{"class":93,"line":1851},[91,78705,78706],{"class":97},"    .item",[91,78708,15695],{"class":250},[91,78710,78711,78713,78715,78718,78720],{"class":93,"line":1856},[91,78712,54852],{"class":105},[91,78714,51518],{"class":250},[91,78716,78717],{"class":105},"240",[91,78719,51573],{"class":153},[91,78721,1415],{"class":250},[91,78723,78724,78726,78728,78730,78732],{"class":93,"line":1873},[91,78725,62081],{"class":105},[91,78727,51518],{"class":250},[91,78729,695],{"class":105},[91,78731,51573],{"class":153},[91,78733,1415],{"class":250},[91,78735,78736,78738,78740,78742,78744,78747,78749],{"class":93,"line":1878},[91,78737,54776],{"class":105},[91,78739,51518],{"class":250},[91,78741,949],{"class":105},[91,78743,51573],{"class":153},[91,78745,78746],{"class":105}," 30",[91,78748,51573],{"class":153},[91,78750,1415],{"class":250},[91,78752,78753,78755,78757,78759,78762,78765,78767],{"class":93,"line":1883},[91,78754,61941],{"class":105},[91,78756,51518],{"class":250},[91,78758,28240],{"class":105},[91,78760,78761],{"class":105}," ease",[91,78763,78764],{"class":105}," .5",[91,78766,944],{"class":153},[91,78768,1415],{"class":250},[91,78770,78771,78774,78776,78778,78780],{"class":93,"line":1888},[91,78772,78773],{"class":105},"      margin-bottom",[91,78775,51518],{"class":250},[91,78777,949],{"class":105},[91,78779,51573],{"class":153},[91,78781,1415],{"class":250},[91,78783,78784],{"class":93,"line":1902},[91,78785,2310],{"class":250},[91,78787,78788],{"class":93,"line":1907},[91,78789,2523],{"emptyLinePlaceholder":175},[91,78791,78792,78795,78797,78800],{"class":93,"line":2700},[91,78793,78794],{"class":97},"    .item:nth-child",[91,78796,251],{"class":250},[91,78798,78799],{"class":105},"4n",[91,78801,12565],{"class":250},[91,78803,78804,78806,78808,78810],{"class":93,"line":2714},[91,78805,62081],{"class":105},[91,78807,51518],{"class":250},[91,78809,440],{"class":105},[91,78811,1415],{"class":250},[91,78813,78814],{"class":93,"line":2722},[91,78815,2310],{"class":250},[91,78817,78818],{"class":93,"line":2727},[91,78819,2523],{"emptyLinePlaceholder":175},[91,78821,78822,78825],{"class":93,"line":2733},[91,78823,78824],{"class":97},"    .item:hover",[91,78826,15695],{"class":250},[91,78828,78829,78832,78834,78836,78838,78840,78842,78844,78846,78849,78851,78853,78855,78857,78859,78861,78863,78866],{"class":93,"line":2739},[91,78830,78831],{"class":105},"      box-shadow",[91,78833,51518],{"class":250},[91,78835,440],{"class":105},[91,78837,51573],{"class":153},[91,78839,4216],{"class":105},[91,78841,51573],{"class":153},[91,78843,2271],{"class":105},[91,78845,51573],{"class":153},[91,78847,78848],{"class":105}," rgba",[91,78850,251],{"class":250},[91,78852,440],{"class":105},[91,78854,12558],{"class":250},[91,78856,440],{"class":105},[91,78858,12558],{"class":250},[91,78860,440],{"class":105},[91,78862,12558],{"class":250},[91,78864,78865],{"class":105},".2",[91,78867,2842],{"class":250},[91,78869,78870,78873,78875,78878,78880,78882,78884,78887,78889,78891,78893],{"class":93,"line":2744},[91,78871,78872],{"class":105},"      transform",[91,78874,51518],{"class":250},[91,78876,78877],{"class":105},"translate3d",[91,78879,251],{"class":250},[91,78881,440],{"class":105},[91,78883,12558],{"class":250},[91,78885,78886],{"class":105},"-4",[91,78888,51573],{"class":153},[91,78890,12558],{"class":250},[91,78892,440],{"class":105},[91,78894,2842],{"class":250},[91,78896,78897,78899,78901,78903],{"class":93,"line":8071},[91,78898,62106],{"class":105},[91,78900,51518],{"class":250},[91,78902,62111],{"class":105},[91,78904,1415],{"class":250},[91,78906,78907],{"class":93,"line":8095},[91,78908,2310],{"class":250},[91,78910,78911],{"class":93,"line":8100},[91,78912,2523],{"emptyLinePlaceholder":175},[91,78914,78915,78917,78919],{"class":93,"line":8106},[91,78916,78706],{"class":97},[91,78918,55696],{"class":51381},[91,78920,15695],{"class":250},[91,78922,78923,78925,78927,78929,78931],{"class":93,"line":8133},[91,78924,54852],{"class":105},[91,78926,51518],{"class":250},[91,78928,560],{"class":105},[91,78930,577],{"class":153},[91,78932,1415],{"class":250},[91,78934,78935],{"class":93,"line":8138},[91,78936,2310],{"class":250},[91,78938,78939],{"class":93,"line":8144},[91,78940,2523],{"emptyLinePlaceholder":175},[91,78942,78943,78945,78947],{"class":93,"line":8156},[91,78944,78706],{"class":97},[91,78946,62385],{"class":97},[91,78948,15695],{"class":250},[91,78950,78951,78953,78955,78957,78959],{"class":93,"line":8168},[91,78952,55003],{"class":105},[91,78954,51518],{"class":250},[91,78956,899],{"class":105},[91,78958,51573],{"class":153},[91,78960,1415],{"class":250},[91,78962,78963,78965,78967,78969,78971],{"class":93,"line":8180},[91,78964,78773],{"class":105},[91,78966,51518],{"class":250},[91,78968,695],{"class":105},[91,78970,51573],{"class":153},[91,78972,1415],{"class":250},[91,78974,78975,78977,78979,78982],{"class":93,"line":9839},[91,78976,57497],{"class":105},[91,78978,51518],{"class":250},[91,78980,78981],{"class":105},"#666",[91,78983,1415],{"class":250},[91,78985,78986],{"class":93,"line":9864},[91,78987,2310],{"class":250},[91,78989,78990],{"class":93,"line":9887},[91,78991,2523],{"emptyLinePlaceholder":175},[91,78993,78994,78996,78999],{"class":93,"line":9911},[91,78995,78706],{"class":97},[91,78997,78998],{"class":97}," .price",[91,79000,15695],{"class":250},[91,79002,79003,79005,79007,79009,79011],{"class":93,"line":9916},[91,79004,55003],{"class":105},[91,79006,51518],{"class":250},[91,79008,999],{"class":105},[91,79010,51573],{"class":153},[91,79012,1415],{"class":250},[91,79014,79015,79017,79019,79022],{"class":93,"line":9921},[91,79016,57497],{"class":105},[91,79018,51518],{"class":250},[91,79020,79021],{"class":105},"firebrick",[91,79023,1415],{"class":250},[91,79025,79026],{"class":93,"line":9926},[91,79027,2310],{"class":250},[91,79029,79030],{"class":93,"line":9935},[91,79031,2523],{"emptyLinePlaceholder":175},[91,79033,79034,79036,79039],{"class":93,"line":9940},[91,79035,78706],{"class":97},[91,79037,79038],{"class":97}," .price::before",[91,79040,15695],{"class":250},[91,79042,79043,79046,79048,79051],{"class":93,"line":9946},[91,79044,79045],{"class":105},"      content",[91,79047,51518],{"class":250},[91,79049,79050],{"class":101},"'￥'",[91,79052,1415],{"class":250},[91,79054,79055,79057,79059,79061,79063],{"class":93,"line":9967},[91,79056,55003],{"class":105},[91,79058,51518],{"class":250},[91,79060,798],{"class":105},[91,79062,51573],{"class":153},[91,79064,1415],{"class":250},[91,79066,79067],{"class":93,"line":9973},[91,79068,2310],{"class":250},[91,79070,79071],{"class":93,"line":9987},[91,79072,2523],{"emptyLinePlaceholder":175},[91,79074,79075,79078],{"class":93,"line":9993},[91,79076,79077],{"class":97},"    .filter",[91,79079,15695],{"class":250},[91,79081,79082,79084,79086,79088],{"class":93,"line":10020},[91,79083,55090],{"class":105},[91,79085,51518],{"class":250},[91,79087,51558],{"class":105},[91,79089,1415],{"class":250},[91,79091,79092,79094,79096,79098,79100],{"class":93,"line":10029},[91,79093,54852],{"class":105},[91,79095,51518],{"class":250},[91,79097,78655],{"class":105},[91,79099,51573],{"class":153},[91,79101,1415],{"class":250},[91,79103,79104,79106,79108,79110,79112],{"class":93,"line":10035},[91,79105,54787],{"class":105},[91,79107,51518],{"class":250},[91,79109,440],{"class":105},[91,79111,51637],{"class":105},[91,79113,1415],{"class":250},[91,79115,79116,79118,79120,79122,79124,79126],{"class":93,"line":10043},[91,79117,54776],{"class":105},[91,79119,51518],{"class":250},[91,79121,905],{"class":105},[91,79123,51573],{"class":153},[91,79125,78746],{"class":105},[91,79127,79128],{"class":153},"px\n",[91,79130,79131],{"class":93,"line":10048},[91,79132,2310],{"class":250},[91,79134,79135],{"class":93,"line":16727},[91,79136,2523],{"emptyLinePlaceholder":175},[91,79138,79139,79141,79143],{"class":93,"line":16733},[91,79140,79077],{"class":97},[91,79142,1523],{"class":51381},[91,79144,15695],{"class":250},[91,79146,79147,79149,79151,79153,79155,79157,79159],{"class":93,"line":16756},[91,79148,54776],{"class":105},[91,79150,51518],{"class":250},[91,79152,695],{"class":105},[91,79154,51573],{"class":153},[91,79156,9073],{"class":105},[91,79158,51573],{"class":153},[91,79160,1415],{"class":250},[91,79162,79163,79165,79167,79169],{"class":93,"line":16762},[91,79164,61802],{"class":105},[91,79166,51518],{"class":250},[91,79168,61899],{"class":105},[91,79170,1415],{"class":250},[91,79172,79173,79175,79177,79179],{"class":93,"line":16785},[91,79174,57497],{"class":105},[91,79176,51518],{"class":250},[91,79178,78981],{"class":105},[91,79180,1415],{"class":250},[91,79182,79183,79185,79187,79189],{"class":93,"line":16799},[91,79184,64051],{"class":105},[91,79186,51518],{"class":250},[91,79188,54818],{"class":105},[91,79190,1415],{"class":250},[91,79192,79193,79195,79197,79199,79201],{"class":93,"line":16819},[91,79194,61831],{"class":105},[91,79196,51518],{"class":250},[91,79198,949],{"class":105},[91,79200,51573],{"class":153},[91,79202,1415],{"class":250},[91,79204,79205],{"class":93,"line":16825},[91,79206,2310],{"class":250},[91,79208,79209],{"class":93,"line":16836},[91,79210,2523],{"emptyLinePlaceholder":175},[91,79212,79213,79215,79217,79219],{"class":93,"line":16859},[91,79214,79077],{"class":97},[91,79216,1523],{"class":51381},[91,79218,61981],{"class":97},[91,79220,15695],{"class":250},[91,79222,79223,79225,79227,79230],{"class":93,"line":16881},[91,79224,54965],{"class":105},[91,79226,51518],{"class":250},[91,79228,79229],{"class":105},"#05943c",[91,79231,1415],{"class":250},[91,79233,79234,79236,79238,79240],{"class":93,"line":16886},[91,79235,57497],{"class":105},[91,79237,51518],{"class":250},[91,79239,60923],{"class":105},[91,79241,1415],{"class":250},[91,79243,79244],{"class":93,"line":16892},[91,79245,2310],{"class":250},[91,79247,79248,79250,79252],{"class":93,"line":16906},[91,79249,52498],{"class":250},[91,79251,168],{"class":51381},[91,79253,51388],{"class":250},[91,79255,79256,79258,79260],{"class":93,"line":16919},[91,79257,51866],{"class":250},[91,79259,51415],{"class":51381},[91,79261,51388],{"class":250},[91,79263,79264],{"class":93,"line":16924},[91,79265,2523],{"emptyLinePlaceholder":175},[91,79267,79268,79270,79272],{"class":93,"line":16938},[91,79269,1159],{"class":250},[91,79271,51881],{"class":51381},[91,79273,51388],{"class":250},[91,79275,79276,79278,79280,79282,79284,79287],{"class":93,"line":16943},[91,79277,52225],{"class":250},[91,79279,51692],{"class":51381},[91,79281,53567],{"class":97},[91,79283,296],{"class":250},[91,79285,79286],{"class":101},"\"filter\"",[91,79288,51388],{"class":250},[91,79290,79291,79293,79295,79297,79299,79301,79304,79306,79308,79311,79313],{"class":93,"line":16949},[91,79292,51422],{"class":250},[91,79294,487],{"class":51381},[91,79296,61138],{"class":97},[91,79298,296],{"class":250},[91,79300,61143],{"class":101},[91,79302,79303],{"class":97}," data-index",[91,79305,296],{"class":250},[91,79307,3801],{"class":101},[91,79309,79310],{"class":250},">0-100元\u003C\u002F",[91,79312,487],{"class":51381},[91,79314,51388],{"class":250},[91,79316,79317,79319,79321,79323,79325,79327,79329,79331,79333,79336,79338],{"class":93,"line":16954},[91,79318,51422],{"class":250},[91,79320,487],{"class":51381},[91,79322,61138],{"class":97},[91,79324,296],{"class":250},[91,79326,61143],{"class":101},[91,79328,79303],{"class":97},[91,79330,296],{"class":250},[91,79332,3824],{"class":101},[91,79334,79335],{"class":250},">100-300元\u003C\u002F",[91,79337,487],{"class":51381},[91,79339,51388],{"class":250},[91,79341,79342,79344,79346,79348,79350,79352,79354,79356,79358,79361,79363],{"class":93,"line":16968},[91,79343,51422],{"class":250},[91,79345,487],{"class":51381},[91,79347,61138],{"class":97},[91,79349,296],{"class":250},[91,79351,61143],{"class":101},[91,79353,79303],{"class":97},[91,79355,296],{"class":250},[91,79357,3837],{"class":101},[91,79359,79360],{"class":250},">300元以上\u003C\u002F",[91,79362,487],{"class":51381},[91,79364,51388],{"class":250},[91,79366,79367,79369,79371,79373,79375,79377,79380,79382],{"class":93,"line":16973},[91,79368,51422],{"class":250},[91,79370,487],{"class":51381},[91,79372,61138],{"class":97},[91,79374,296],{"class":250},[91,79376,61143],{"class":101},[91,79378,79379],{"class":250},">全部区间\u003C\u002F",[91,79381,487],{"class":51381},[91,79383,51388],{"class":250},[91,79385,79386,79388,79390],{"class":93,"line":16978},[91,79387,52498],{"class":250},[91,79389,51692],{"class":51381},[91,79391,51388],{"class":250},[91,79393,79394,79396,79398,79400,79402,79404],{"class":93,"line":16992},[91,79395,52225],{"class":250},[91,79397,51692],{"class":51381},[91,79399,53567],{"class":97},[91,79401,296],{"class":250},[91,79403,62689],{"class":101},[91,79405,51388],{"class":250},[91,79407,79408],{"class":93,"line":17004},[91,79409,79410],{"class":308},"    \u003C!-- \u003Cdiv class=\"item\">\n",[91,79412,79413],{"class":93,"line":17009},[91,79414,79415],{"class":308},"      \u003Cimg src=\"\" alt=\"\">\n",[91,79417,79418],{"class":93,"line":17022},[91,79419,79420],{"class":308},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[91,79422,79423],{"class":93,"line":17027},[91,79424,79425],{"class":308},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[91,79427,79428],{"class":93,"line":17032},[91,79429,79430],{"class":308},"    \u003C\u002Fdiv> -->\n",[91,79432,79433,79435,79437],{"class":93,"line":17037},[91,79434,52498],{"class":250},[91,79436,51692],{"class":51381},[91,79438,51388],{"class":250},[91,79440,79441,79443,79445],{"class":93,"line":17050},[91,79442,52225],{"class":250},[91,79444,51894],{"class":51381},[91,79446,51388],{"class":250},[91,79448,79449],{"class":93,"line":17055},[91,79450,79451],{"class":308},"    \u002F\u002F 2. 初始化数据\n",[91,79453,79454,79456,79459,79461],{"class":93,"line":32714},[91,79455,11344],{"class":153},[91,79457,79458],{"class":105}," goodsList",[91,79460,13687],{"class":153},[91,79462,55528],{"class":250},[91,79464,79465],{"class":93,"line":32720},[91,79466,79467],{"class":250},"      {\n",[91,79469,79470,79473,79476],{"class":93,"line":32726},[91,79471,79472],{"class":250},"        id: ",[91,79474,79475],{"class":101},"'4001172'",[91,79477,31547],{"class":250},[91,79479,79480,79483,79486],{"class":93,"line":32732},[91,79481,79482],{"class":250},"        name: ",[91,79484,79485],{"class":101},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[91,79487,31547],{"class":250},[91,79489,79490,79493,79496],{"class":93,"line":32738},[91,79491,79492],{"class":250},"        price: ",[91,79494,79495],{"class":101},"'289.00'",[91,79497,31547],{"class":250},[91,79499,79500,79503,79506],{"class":93,"line":32749},[91,79501,79502],{"class":250},"        picture: ",[91,79504,79505],{"class":101},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[91,79507,31547],{"class":250},[91,79509,79510],{"class":93,"line":32755},[91,79511,77973],{"class":250},[91,79513,79514],{"class":93,"line":32775},[91,79515,79467],{"class":250},[91,79517,79518,79520,79523],{"class":93,"line":32781},[91,79519,79472],{"class":250},[91,79521,79522],{"class":101},"'4001594'",[91,79524,31547],{"class":250},[91,79526,79527,79529,79532],{"class":93,"line":32792},[91,79528,79482],{"class":250},[91,79530,79531],{"class":101},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[91,79533,31547],{"class":250},[91,79535,79536,79538,79541],{"class":93,"line":32798},[91,79537,79492],{"class":250},[91,79539,79540],{"class":101},"'288.00'",[91,79542,31547],{"class":250},[91,79544,79545,79547,79550],{"class":93,"line":32804},[91,79546,79502],{"class":250},[91,79548,79549],{"class":101},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[91,79551,31547],{"class":250},[91,79553,79554],{"class":93,"line":32810},[91,79555,77973],{"class":250},[91,79557,79558],{"class":93,"line":32816},[91,79559,79467],{"class":250},[91,79561,79562,79564,79567],{"class":93,"line":32822},[91,79563,79472],{"class":250},[91,79565,79566],{"class":101},"'4001009'",[91,79568,31547],{"class":250},[91,79570,79571,79573,79576],{"class":93,"line":32828},[91,79572,79482],{"class":250},[91,79574,79575],{"class":101},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[91,79577,31547],{"class":250},[91,79579,79580,79582,79585],{"class":93,"line":32834},[91,79581,79492],{"class":250},[91,79583,79584],{"class":101},"'109.00'",[91,79586,31547],{"class":250},[91,79588,79589,79591,79594],{"class":93,"line":32854},[91,79590,79502],{"class":250},[91,79592,79593],{"class":101},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[91,79595,31547],{"class":250},[91,79597,79598],{"class":93,"line":32860},[91,79599,77973],{"class":250},[91,79601,79602],{"class":93,"line":32876},[91,79603,79467],{"class":250},[91,79605,79606,79608,79611],{"class":93,"line":32882},[91,79607,79472],{"class":250},[91,79609,79610],{"class":101},"'4001874'",[91,79612,31547],{"class":250},[91,79614,79615,79617,79620],{"class":93,"line":32896},[91,79616,79482],{"class":250},[91,79618,79619],{"class":101},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[91,79621,31547],{"class":250},[91,79623,79624,79626,79629],{"class":93,"line":32902},[91,79625,79492],{"class":250},[91,79627,79628],{"class":101},"'488.00'",[91,79630,31547],{"class":250},[91,79632,79633,79635,79638],{"class":93,"line":32917},[91,79634,79502],{"class":250},[91,79636,79637],{"class":101},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[91,79639,31547],{"class":250},[91,79641,79642],{"class":93,"line":32923},[91,79643,77973],{"class":250},[91,79645,79646],{"class":93,"line":32932},[91,79647,79467],{"class":250},[91,79649,79650,79652,79655],{"class":93,"line":32938},[91,79651,79472],{"class":250},[91,79653,79654],{"class":101},"'4001649'",[91,79656,31547],{"class":250},[91,79658,79659,79661,79664],{"class":93,"line":32947},[91,79660,79482],{"class":250},[91,79662,79663],{"class":101},"'大师监制龙泉青瓷茶叶罐'",[91,79665,31547],{"class":250},[91,79667,79668,79670,79673],{"class":93,"line":32953},[91,79669,79492],{"class":250},[91,79671,79672],{"class":101},"'139.00'",[91,79674,31547],{"class":250},[91,79676,79677,79679,79682],{"class":93,"line":32959},[91,79678,79502],{"class":250},[91,79680,79681],{"class":101},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[91,79683,31547],{"class":250},[91,79685,79686],{"class":93,"line":32968},[91,79687,77973],{"class":250},[91,79689,79690],{"class":93,"line":32974},[91,79691,79467],{"class":250},[91,79693,79694,79696,79699],{"class":93,"line":32985},[91,79695,79472],{"class":250},[91,79697,79698],{"class":101},"'3997185'",[91,79700,31547],{"class":250},[91,79702,79703,79705,79708],{"class":93,"line":32991},[91,79704,79482],{"class":250},[91,79706,79707],{"class":101},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[91,79709,31547],{"class":250},[91,79711,79712,79714,79717],{"class":93,"line":33010},[91,79713,79492],{"class":250},[91,79715,79716],{"class":101},"'108.00'",[91,79718,31547],{"class":250},[91,79720,79721,79723,79726],{"class":93,"line":33016},[91,79722,79502],{"class":250},[91,79724,79725],{"class":101},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[91,79727,31547],{"class":250},[91,79729,79730],{"class":93,"line":33027},[91,79731,77973],{"class":250},[91,79733,79734],{"class":93,"line":33033},[91,79735,79467],{"class":250},[91,79737,79738,79740,79743],{"class":93,"line":33053},[91,79739,79472],{"class":250},[91,79741,79742],{"class":101},"'3997403'",[91,79744,31547],{"class":250},[91,79746,79747,79749,79752],{"class":93,"line":33069},[91,79748,79482],{"class":250},[91,79750,79751],{"class":101},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[91,79753,31547],{"class":250},[91,79755,79756,79758,79761],{"class":93,"line":33075},[91,79757,79492],{"class":250},[91,79759,79760],{"class":101},"'100.00'",[91,79762,31547],{"class":250},[91,79764,79765,79767,79770],{"class":93,"line":33089},[91,79766,79502],{"class":250},[91,79768,79769],{"class":101},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[91,79771,31547],{"class":250},[91,79773,79774],{"class":93,"line":33095},[91,79775,77973],{"class":250},[91,79777,79778],{"class":93,"line":33101},[91,79779,79467],{"class":250},[91,79781,79782,79784,79787],{"class":93,"line":33112},[91,79783,79472],{"class":250},[91,79785,79786],{"class":101},"'3998274'",[91,79788,31547],{"class":250},[91,79790,79791,79793,79796],{"class":93,"line":33118},[91,79792,79482],{"class":250},[91,79794,79795],{"class":101},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[91,79797,31547],{"class":250},[91,79799,79800,79802,79804],{"class":93,"line":33124},[91,79801,79492],{"class":250},[91,79803,79672],{"class":101},[91,79805,31547],{"class":250},[91,79807,79808,79810,79813],{"class":93,"line":33134},[91,79809,79502],{"class":250},[91,79811,79812],{"class":101},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[91,79814,31547],{"class":250},[91,79816,79817],{"class":93,"line":33140},[91,79818,77973],{"class":250},[91,79820,79821],{"class":93,"line":33151},[91,79822,53190],{"class":250},[91,79824,79825],{"class":93,"line":33157},[91,79826,2523],{"emptyLinePlaceholder":175},[91,79828,79829],{"class":93,"line":33167},[91,79830,79831],{"class":308},"    \u002F\u002F 1.渲染函数\n",[91,79833,79834,79836,79838,79840,79842],{"class":93,"line":33172},[91,79835,70165],{"class":153},[91,79837,70168],{"class":97},[91,79839,251],{"class":250},[91,79841,4003],{"class":5339},[91,79843,12565],{"class":250},[91,79845,79846],{"class":93,"line":33178},[91,79847,79848],{"class":308},"      \u002F\u002F 声明空字符串\n",[91,79850,79851,79854,79857,79859],{"class":93,"line":33227},[91,79852,79853],{"class":153},"      let",[91,79855,79856],{"class":250}," str ",[91,79858,296],{"class":153},[91,79860,70185],{"class":101},[91,79862,79863],{"class":93,"line":33274},[91,79864,70190],{"class":308},[91,79866,79867,79869,79872,79874,79877,79880],{"class":93,"line":33279},[91,79868,58088],{"class":250},[91,79870,79871],{"class":97},"forEach",[91,79873,251],{"class":250},[91,79875,79876],{"class":5339},"item",[91,79878,79879],{"class":153}," =>",[91,79881,15695],{"class":250},[91,79883,79884,79886,79889,79892,79894,79897,79899,79902,79905,79907],{"class":93,"line":33285},[91,79885,61351],{"class":153},[91,79887,79888],{"class":250}," { ",[91,79890,79891],{"class":105},"name",[91,79893,12558],{"class":250},[91,79895,79896],{"class":105},"price",[91,79898,12558],{"class":250},[91,79900,79901],{"class":105},"picture",[91,79903,79904],{"class":250}," } ",[91,79906,296],{"class":153},[91,79908,79909],{"class":250}," item\n",[91,79911,79912,79915,79917],{"class":93,"line":33304},[91,79913,79914],{"class":250},"        str ",[91,79916,9600],{"class":153},[91,79918,70249],{"class":101},[91,79920,79921],{"class":93,"line":33310},[91,79922,79923],{"class":101},"          \u003Cdiv class=\"item\">\n",[91,79925,79926,79929,79931],{"class":93,"line":33330},[91,79927,79928],{"class":101},"            \u003Cimg src=\"${",[91,79930,79901],{"class":250},[91,79932,79933],{"class":101},"}\" alt=\"\">\n",[91,79935,79936,79939,79941],{"class":93,"line":33336},[91,79937,79938],{"class":101},"            \u003Cp class=\"name\">${",[91,79940,79891],{"class":250},[91,79942,79943],{"class":101},"}\u003C\u002Fp>\n",[91,79945,79946,79949,79951],{"class":93,"line":33342},[91,79947,79948],{"class":101},"            \u003Cp class=\"price\">${",[91,79950,79896],{"class":250},[91,79952,79943],{"class":101},[91,79954,79955],{"class":93,"line":33352},[91,79956,79957],{"class":101},"          \u003C\u002Fdiv>\n",[91,79959,79960],{"class":93,"line":33357},[91,79961,79962],{"class":101},"        `\n",[91,79964,79965],{"class":93,"line":33363},[91,79966,64896],{"class":250},[91,79968,79969],{"class":93,"line":33379},[91,79970,79971],{"class":308},"      \u002F\u002F 追加给List\n",[91,79973,79974,79976,79978,79980,79983,79985,79987],{"class":93,"line":33424},[91,79975,55852],{"class":250},[91,79977,54480],{"class":97},[91,79979,251],{"class":250},[91,79981,79982],{"class":101},"'.list'",[91,79984,74330],{"class":250},[91,79986,296],{"class":153},[91,79988,74066],{"class":250},[91,79990,79991],{"class":93,"line":33430},[91,79992,2310],{"class":250},[91,79994,79995],{"class":93,"line":33436},[91,79996,79997],{"class":308},"    \u002F\u002F 页面一打开就需要渲染\n",[91,79999,80000,80003],{"class":93,"line":33442},[91,80001,80002],{"class":97},"    render",[91,80004,80005],{"class":250},"(goodsList)\n",[91,80007,80008],{"class":93,"line":33453},[91,80009,80010],{"class":308},"    \u002F\u002F 2.过滤筛选\n",[91,80012,80013,80015,80017,80019,80022,80024,80026,80028,80030,80032,80034,80036],{"class":93,"line":33459},[91,80014,52488],{"class":250},[91,80016,54480],{"class":97},[91,80018,251],{"class":250},[91,80020,80021],{"class":101},"'.filter'",[91,80023,30907],{"class":250},[91,80025,57894],{"class":97},[91,80027,251],{"class":250},[91,80029,57899],{"class":101},[91,80031,12558],{"class":250},[91,80033,324],{"class":5339},[91,80035,79879],{"class":153},[91,80037,15695],{"class":250},[91,80039,80040],{"class":93,"line":33465},[91,80041,80042],{"class":308},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[91,80044,80045,80047,80049,80052,80054,80056,80058,80060],{"class":93,"line":33471},[91,80046,58309],{"class":153},[91,80048,79888],{"class":250},[91,80050,80051],{"class":105},"tagName",[91,80053,12558],{"class":250},[91,80055,31618],{"class":105},[91,80057,79904],{"class":250},[91,80059,296],{"class":153},[91,80061,80062],{"class":250}," e.target\n",[91,80064,80065],{"class":93,"line":33489},[91,80066,80067],{"class":308},"      \u002F\u002F 判断\n",[91,80069,80070,80072,80074,80076,80078],{"class":93,"line":33503},[91,80071,54561],{"class":153},[91,80073,67115],{"class":250},[91,80075,54567],{"class":153},[91,80077,68337],{"class":101},[91,80079,12565],{"class":250},[91,80081,80082],{"class":93,"line":33512},[91,80083,80084],{"class":308},"        \u002F\u002F console.log(11)\n",[91,80086,80087],{"class":93,"line":33521},[91,80088,80089],{"class":308},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[91,80091,80092],{"class":93,"line":33530},[91,80093,80094],{"class":308},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[91,80096,80097,80099,80101,80103],{"class":93,"line":33539},[91,80098,51911],{"class":153},[91,80100,51914],{"class":250},[91,80102,296],{"class":153},[91,80104,80105],{"class":250}," goodsList\n",[91,80107,80108,80110,80113,80115,80118],{"class":93,"line":33545},[91,80109,2620],{"class":153},[91,80111,80112],{"class":250}," (dataset.index ",[91,80114,54567],{"class":153},[91,80116,80117],{"class":101}," '1'",[91,80119,12565],{"class":250},[91,80121,80122,80125,80127,80130,80133,80135,80137,80139,80142,80144,80146,80149,80151,80153,80155],{"class":93,"line":33551},[91,80123,80124],{"class":250},"          arr ",[91,80126,296],{"class":153},[91,80128,80129],{"class":250}," goodsList.",[91,80131,80132],{"class":97},"filter",[91,80134,251],{"class":250},[91,80136,79876],{"class":5339},[91,80138,79879],{"class":153},[91,80140,80141],{"class":250}," item.price ",[91,80143,1834],{"class":153},[91,80145,4216],{"class":105},[91,80147,80148],{"class":153}," &&",[91,80150,80141],{"class":250},[91,80152,1712],{"class":153},[91,80154,5877],{"class":105},[91,80156,257],{"class":250},[91,80158,80159,80162,80164,80166,80168,80170,80173],{"class":93,"line":33559},[91,80160,80161],{"class":250},"        } ",[91,80163,1825],{"class":153},[91,80165,1828],{"class":153},[91,80167,80112],{"class":250},[91,80169,54567],{"class":153},[91,80171,80172],{"class":101}," '2'",[91,80174,12565],{"class":250},[91,80176,80177,80179,80181,80183,80185,80187,80189,80191,80193,80195,80197,80199,80201,80203,80206],{"class":93,"line":33564},[91,80178,80124],{"class":250},[91,80180,296],{"class":153},[91,80182,80129],{"class":250},[91,80184,80132],{"class":97},[91,80186,251],{"class":250},[91,80188,79876],{"class":5339},[91,80190,79879],{"class":153},[91,80192,80141],{"class":250},[91,80194,1834],{"class":153},[91,80196,5877],{"class":105},[91,80198,80148],{"class":153},[91,80200,80141],{"class":250},[91,80202,1712],{"class":153},[91,80204,80205],{"class":105}," 300",[91,80207,257],{"class":250},[91,80209,80210,80212,80214,80216,80218,80220,80223],{"class":93,"line":33570},[91,80211,80161],{"class":250},[91,80213,1825],{"class":153},[91,80215,1828],{"class":153},[91,80217,80112],{"class":250},[91,80219,54567],{"class":153},[91,80221,80222],{"class":101}," '3'",[91,80224,12565],{"class":250},[91,80226,80227,80229,80231,80233,80235,80237,80239,80241,80243,80245,80247],{"class":93,"line":33581},[91,80228,80124],{"class":250},[91,80230,296],{"class":153},[91,80232,80129],{"class":250},[91,80234,80132],{"class":97},[91,80236,251],{"class":250},[91,80238,79876],{"class":5339},[91,80240,79879],{"class":153},[91,80242,80141],{"class":250},[91,80244,1834],{"class":153},[91,80246,80205],{"class":105},[91,80248,257],{"class":250},[91,80250,80251],{"class":93,"line":33587},[91,80252,2652],{"class":250},[91,80254,80255],{"class":93,"line":33607},[91,80256,80257],{"class":308},"        \u002F\u002F 渲染函数\n",[91,80259,80260,80262],{"class":93,"line":33613},[91,80261,70489],{"class":97},[91,80263,52493],{"class":250},[91,80265,80266],{"class":93,"line":33619},[91,80267,52479],{"class":250},[91,80269,80270],{"class":93,"line":33625},[91,80271,2523],{"emptyLinePlaceholder":175},[91,80273,80274],{"class":93,"line":33642},[91,80275,33542],{"class":250},[91,80277,80278,80280,80282],{"class":93,"line":33648},[91,80279,52498],{"class":250},[91,80281,51894],{"class":51381},[91,80283,51388],{"class":250},[91,80285,80286,80288,80290],{"class":93,"line":33654},[91,80287,51866],{"class":250},[91,80289,51881],{"class":51381},[91,80291,51388],{"class":250},[91,80293,80294],{"class":93,"line":33660},[91,80295,2523],{"emptyLinePlaceholder":175},[91,80297,80298,80300,80302],{"class":93,"line":33666},[91,80299,51866],{"class":250},[91,80301,50716],{"class":51381},[91,80303,51388],{"class":250},[190,80305,80307],{"id":80306},"_410-深入了解对象","4.10 深入了解对象",[217,80309,80311],{"id":80310},"_4101-创建对象","4.10.1 创建对象",[21,80313,80314],{},[24,80315],{"alt":26,"src":80316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[21,80318,80319],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[217,80321,80323],{"id":80322},"_4102-构造函数","4.10.2 构造函数",[21,80325,80326,80329],{},[398,80327,80328],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[21,80331,80332,80335],{},[398,80333,80334],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[82,80337,80339],{"className":50714,"code":80338,"language":50716,"meta":26,"style":26},"\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",[88,80340,80341,80349,80354,80375,80388,80400,80412,80416,80421,80448,80453,80480],{"__ignoreMap":26},[91,80342,80343,80345,80347],{"class":93,"line":94},[91,80344,1159],{"class":250},[91,80346,51894],{"class":51381},[91,80348,51388],{"class":250},[91,80350,80351],{"class":93,"line":38},[91,80352,80353],{"class":308},"\u002F\u002F例：\n",[91,80355,80356,80358,80361,80363,80365,80367,80369,80371,80373],{"class":93,"line":1304},[91,80357,54530],{"class":153},[91,80359,80360],{"class":97}," Pig",[91,80362,251],{"class":250},[91,80364,79891],{"class":5339},[91,80366,627],{"class":250},[91,80368,70302],{"class":5339},[91,80370,627],{"class":250},[91,80372,70319],{"class":5339},[91,80374,12565],{"class":250},[91,80376,80377,80380,80383,80385],{"class":93,"line":1319},[91,80378,80379],{"class":105},"    this",[91,80381,80382],{"class":250},".name",[91,80384,296],{"class":153},[91,80386,80387],{"class":250},"name\n",[91,80389,80390,80392,80395,80397],{"class":93,"line":1325},[91,80391,80379],{"class":105},[91,80393,80394],{"class":250},".age",[91,80396,296],{"class":153},[91,80398,80399],{"class":250},"age\n",[91,80401,80402,80404,80407,80409],{"class":93,"line":1339},[91,80403,80379],{"class":105},[91,80405,80406],{"class":250},".gender",[91,80408,296],{"class":153},[91,80410,80411],{"class":250},"gender    \n",[91,80413,80414],{"class":93,"line":1345},[91,80415,1689],{"class":250},[91,80417,80418],{"class":93,"line":1436},[91,80419,80420],{"class":308},"\u002F\u002F创建佩奇对象\n",[91,80422,80423,80425,80428,80430,80432,80434,80437,80439,80441,80443,80446],{"class":93,"line":1442},[91,80424,6915],{"class":153},[91,80426,80427],{"class":105}," Peppa",[91,80429,11840],{"class":153},[91,80431,80360],{"class":97},[91,80433,251],{"class":250},[91,80435,80436],{"class":101},"'佩奇'",[91,80438,627],{"class":250},[91,80440,593],{"class":105},[91,80442,627],{"class":250},[91,80444,80445],{"class":101},"'女'",[91,80447,257],{"class":250},[91,80449,80450],{"class":93,"line":1454},[91,80451,80452],{"class":308},"\u002F\u002F创建乔治对象\n",[91,80454,80455,80457,80460,80462,80464,80466,80469,80471,80473,80475,80478],{"class":93,"line":1736},[91,80456,6915],{"class":153},[91,80458,80459],{"class":105}," George",[91,80461,11840],{"class":153},[91,80463,80360],{"class":97},[91,80465,251],{"class":250},[91,80467,80468],{"class":101},"'乔治'",[91,80470,627],{"class":250},[91,80472,321],{"class":105},[91,80474,627],{"class":250},[91,80476,80477],{"class":101},"'男'",[91,80479,257],{"class":250},[91,80481,80482,80484,80486],{"class":93,"line":1741},[91,80483,51866],{"class":250},[91,80485,51894],{"class":51381},[91,80487,51388],{"class":250},[21,80489,80490],{},[24,80491],{"alt":26,"src":80492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[21,80494,80495],{},[24,80496],{"alt":26,"src":80497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[21,80499,80500],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[21,80502,80503],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[21,80505,80506],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[21,80508,80509],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[21,80511,80512],{},"这里用等号是因为：对象.属性=值",[21,80514,80515],{},"①利用对象字面量创建对象",[21,80517,80518],{},"const o={",[21,80520,80521],{},"name:'pink'",[21,80523,80524],{},"} ②利用new Object创建对象",[21,80526,80527],{},"const o=new Object({name:'pink'})",[21,80529,80530],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[21,80532,80533],{},"构造函数创建对象的执行过程：",[21,80535,80536],{},[24,80537],{"alt":26,"src":80538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[217,80540,80542],{"id":80541},"_4103-实例成员","4.10.3 实例成员",[21,80544,80545],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[14,80547,80548,80551,80554],{},[17,80549,80550],{},"实例对象的属性和方法即为实例成员",[17,80552,80553],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[17,80555,80556],{},"构造函数创建的实例对象彼此独立互不影响",[217,80558,80560],{"id":80559},"_4104-静态成员","4.10.4 静态成员",[21,80562,80563],{},[24,80564],{"alt":26,"src":80565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[21,80567,80568],{},"静态成员有Date.now() Math.PI Math.random()",[21,80570,80571],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[21,80573,80574],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[21,80576,80577],{},"function Pig(name) n {",[21,80579,80580],{},"this.name=name",[21,80582,1195],{},[21,80584,80585],{},"Pig.eyes=2",[21,80587,80588],{},"Pig.sayHai=function () { console.log(this) }",[21,80590,80591],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[21,80593,80594],{},"console.log(Pig.eyes) \u002F\u002F2",[21,80596,11455],{},[14,80598,80599,80602,80605,80608,80611],{},[17,80600,80601],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[17,80603,80604],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[17,80606,80607],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[17,80609,80610],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[17,80612,80613],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[21,80615,80616],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[217,80618,80620],{"id":80619},"_4105-内置构造函数","4.10.5 内置构造函数",[21,80622,80623],{},"内置构造函数包含：",[21,80625,80626],{},[24,80627],{"alt":26,"src":80628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[21,80630,80631],{},[24,80632],{"alt":26,"src":80633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[21,80635,80636],{},"这些基本数据类型，js对他们进行了包装",[51894,80638,80639],{},"\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",[22121,80641,80643],{"id":80642},"_41051-object","4.10.5.1 Object",[21,80645,80646],{},"Object 是内置的构造函数，用于创建普通对象",[21,80648,80649],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[82,80651,80653],{"className":50714,"code":80652,"language":50716,"meta":26,"style":26},"const user=new Object({name:'小明',age:15})\n",[88,80654,80655],{"__ignoreMap":26},[91,80656,80657],{"class":93,"line":94},[91,80658,80652],{"class":250},[21,80660,80661],{},"三个常用的静态方法：",[23033,80663,80665],{"id":80664},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[21,80667,80668],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[21,80670,80671],{},[24,80672],{"alt":26,"src":80673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[21,80675,80676],{},[24,80677],{"alt":26,"src":80678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[82,80680,80682],{"className":53148,"code":80681,"language":53150,"meta":26,"style":26},"\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",[88,80683,80684,80692,80700,80705,80710,80715,80720,80725,80730,80738],{"__ignoreMap":26},[91,80685,80686,80688,80690],{"class":93,"line":94},[91,80687,1159],{"class":250},[91,80689,51881],{"class":51381},[91,80691,51388],{"class":250},[91,80693,80694,80696,80698],{"class":93,"line":38},[91,80695,52225],{"class":250},[91,80697,51894],{"class":51381},[91,80699,51388],{"class":250},[91,80701,80702],{"class":93,"line":1304},[91,80703,80704],{"class":250},"    const o = { name: 'pink', age: 6 }\n",[91,80706,80707],{"class":93,"line":1319},[91,80708,80709],{"class":250},"    \u002F\u002F 获得所有属性名\n",[91,80711,80712],{"class":93,"line":1325},[91,80713,80714],{"class":250},"    const arr = Object.keys(o)\n",[91,80716,80717],{"class":93,"line":1339},[91,80718,80719],{"class":250},"    console.log(arr)\n",[91,80721,80722],{"class":93,"line":1345},[91,80723,80724],{"class":250},"    \u002F\u002F 获得所有属性值\n",[91,80726,80727],{"class":93,"line":1436},[91,80728,80729],{"class":250},"    console.log(Object.values(o))\n",[91,80731,80732,80734,80736],{"class":93,"line":1442},[91,80733,52498],{"class":250},[91,80735,51894],{"class":51381},[91,80737,51388],{"class":250},[91,80739,80740,80742,80744],{"class":93,"line":1454},[91,80741,51866],{"class":250},[91,80743,51881],{"class":51381},[91,80745,51388],{"class":250},[23033,80747,80749],{"id":80748},"_410512-object-assign","4.10.5.1.2 Object. assign",[21,80751,80752],{},"Object.assign(oo,o)",[21,80754,80755],{},"后的东西添加给前 是追加",[21,80757,80758],{},[24,80759],{"alt":26,"src":80760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[21,80762,80763],{},[24,80764],{"alt":26,"src":80765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[82,80767,80769],{"className":53148,"code":80768,"language":53150,"meta":26,"style":26},"\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",[88,80770,80771,80779,80787,80791,80795,80799,80803,80807,80811,80816,80821,80826,80831,80836,80844],{"__ignoreMap":26},[91,80772,80773,80775,80777],{"class":93,"line":94},[91,80774,1159],{"class":250},[91,80776,51881],{"class":51381},[91,80778,51388],{"class":250},[91,80780,80781,80783,80785],{"class":93,"line":38},[91,80782,52225],{"class":250},[91,80784,51894],{"class":51381},[91,80786,51388],{"class":250},[91,80788,80789],{"class":93,"line":1304},[91,80790,80704],{"class":250},[91,80792,80793],{"class":93,"line":1319},[91,80794,80709],{"class":250},[91,80796,80797],{"class":93,"line":1325},[91,80798,80714],{"class":250},[91,80800,80801],{"class":93,"line":1339},[91,80802,80719],{"class":250},[91,80804,80805],{"class":93,"line":1345},[91,80806,80724],{"class":250},[91,80808,80809],{"class":93,"line":1436},[91,80810,80729],{"class":250},[91,80812,80813],{"class":93,"line":1442},[91,80814,80815],{"class":250},"    const oo = {}\n",[91,80817,80818],{"class":93,"line":1454},[91,80819,80820],{"class":250},"    Object.assign(oo, o)\n",[91,80822,80823],{"class":93,"line":1736},[91,80824,80825],{"class":250},"    console.log(oo)\n",[91,80827,80828],{"class":93,"line":1741},[91,80829,80830],{"class":250},"    Object.assign(o, { gender: '女' })\n",[91,80832,80833],{"class":93,"line":1747},[91,80834,80835],{"class":250},"    console.log(o)\n",[91,80837,80838,80840,80842],{"class":93,"line":1752},[91,80839,52498],{"class":250},[91,80841,51894],{"class":51381},[91,80843,51388],{"class":250},[91,80845,80846,80848,80850],{"class":93,"line":1766},[91,80847,51866],{"class":250},[91,80849,51881],{"class":51381},[91,80851,51388],{"class":250},[21,80853,80854],{},[24,80855],{"alt":26,"src":80856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22121,80858,80860],{"id":80859},"_41052-array","4.10.5.2 Array",[21,80862,80863],{},"Array 是内置的构造函数，用于创建数组",[21,80865,80866],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[82,80868,80870],{"className":50714,"code":80869,"language":50716,"meta":26,"style":26},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[88,80871,80872,80877],{"__ignoreMap":26},[91,80873,80874],{"class":93,"line":94},[91,80875,80876],{"class":250},"const arr=new Array(3,5)\n",[91,80878,80879],{"class":93,"line":38},[91,80880,80881],{"class":250},"console.log(arr)  \u002F\u002F[3,5]\n",[21,80883,80884],{},"Array的实例方法，这个方法是实例成员",[21,80886,80887],{},[24,80888],{"alt":26,"src":80889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23033,80891,80893],{"id":80892},"_410521-reduce","4.10.5.2.1 reduce",[21,80895,80896],{},[24,80897],{"alt":26,"src":80898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[82,80900,80902],{"className":53148,"code":80901,"language":53150,"meta":26,"style":26},"\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",[88,80903,80904,80912,80920,80925,80930,80935,80940,80944,80949,80954,80959,80963,80968,80973,80977,80982,80987,80992,81000],{"__ignoreMap":26},[91,80905,80906,80908,80910],{"class":93,"line":94},[91,80907,1159],{"class":250},[91,80909,51881],{"class":51381},[91,80911,51388],{"class":250},[91,80913,80914,80916,80918],{"class":93,"line":38},[91,80915,52225],{"class":250},[91,80917,51894],{"class":51381},[91,80919,51388],{"class":250},[91,80921,80922],{"class":93,"line":1304},[91,80923,80924],{"class":250},"    const arr = [1, 5, 8]\n",[91,80926,80927],{"class":93,"line":1319},[91,80928,80929],{"class":250},"    \u002F\u002F 1.没有初始值\n",[91,80931,80932],{"class":93,"line":1325},[91,80933,80934],{"class":250},"    const total = arr.reduce(function (prev, current) {\n",[91,80936,80937],{"class":93,"line":1339},[91,80938,80939],{"class":250},"      return prev + current\n",[91,80941,80942],{"class":93,"line":1345},[91,80943,33542],{"class":250},[91,80945,80946],{"class":93,"line":1436},[91,80947,80948],{"class":250},"    console.log(total)   \u002F\u002F14\n",[91,80950,80951],{"class":93,"line":1442},[91,80952,80953],{"class":250},"    \u002F\u002F 2.有初始值\n",[91,80955,80956],{"class":93,"line":1454},[91,80957,80958],{"class":250},"    const total1 = arr.reduce(function (prev, current) {\n",[91,80960,80961],{"class":93,"line":1736},[91,80962,80939],{"class":250},[91,80964,80965],{"class":93,"line":1741},[91,80966,80967],{"class":250},"    }, 10)\n",[91,80969,80970],{"class":93,"line":1747},[91,80971,80972],{"class":250},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[91,80974,80975],{"class":93,"line":1752},[91,80976,2523],{"emptyLinePlaceholder":175},[91,80978,80979],{"class":93,"line":1766},[91,80980,80981],{"class":250},"    \u002F\u002F 3.箭头函数写法\n",[91,80983,80984],{"class":93,"line":1771},[91,80985,80986],{"class":250},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[91,80988,80989],{"class":93,"line":1777},[91,80990,80991],{"class":250},"    console.log(total2)   \u002F\u002F24\n",[91,80993,80994,80996,80998],{"class":93,"line":1798},[91,80995,52498],{"class":250},[91,80997,51894],{"class":51381},[91,80999,51388],{"class":250},[91,81001,81002,81004,81006],{"class":93,"line":1803},[91,81003,51866],{"class":250},[91,81005,51881],{"class":51381},[91,81007,51388],{"class":250},[21,81009,81010],{},"执行过程：",[14,81012,81013,81016,81019],{},[17,81014,81015],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[17,81017,81018],{},"每一次循环，把返回值给作为下一次循环的上一次值",[17,81020,81021],{},"如果有起始值，则起始值作为上一次值",[82,81023,81025],{"className":53148,"code":81024,"language":53150,"meta":26,"style":26},"\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",[88,81026,81027,81035,81043,81047,81051,81055,81059,81063,81067,81072,81077,81082,81087,81092,81096,81100,81104,81108,81112,81116,81121,81125,81130,81134,81139,81144,81148,81152,81156,81164],{"__ignoreMap":26},[91,81028,81029,81031,81033],{"class":93,"line":94},[91,81030,1159],{"class":250},[91,81032,51881],{"class":51381},[91,81034,51388],{"class":250},[91,81036,81037,81039,81041],{"class":93,"line":38},[91,81038,52225],{"class":250},[91,81040,51894],{"class":51381},[91,81042,51388],{"class":250},[91,81044,81045],{"class":93,"line":1304},[91,81046,80924],{"class":250},[91,81048,81049],{"class":93,"line":1319},[91,81050,80929],{"class":250},[91,81052,81053],{"class":93,"line":1325},[91,81054,80934],{"class":250},[91,81056,81057],{"class":93,"line":1339},[91,81058,80939],{"class":250},[91,81060,81061],{"class":93,"line":1345},[91,81062,33542],{"class":250},[91,81064,81065],{"class":93,"line":1436},[91,81066,80948],{"class":250},[91,81068,81069],{"class":93,"line":1442},[91,81070,81071],{"class":250},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[91,81073,81074],{"class":93,"line":1454},[91,81075,81076],{"class":250},"    \u002F\u002F     1              5                    6\n",[91,81078,81079],{"class":93,"line":1736},[91,81080,81081],{"class":250},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[91,81083,81084],{"class":93,"line":1741},[91,81085,81086],{"class":250},"    \u002F\u002F     6              8                    14\n",[91,81088,81089],{"class":93,"line":1747},[91,81090,81091],{"class":250},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[91,81093,81094],{"class":93,"line":1752},[91,81095,80953],{"class":250},[91,81097,81098],{"class":93,"line":1766},[91,81099,80958],{"class":250},[91,81101,81102],{"class":93,"line":1771},[91,81103,80939],{"class":250},[91,81105,81106],{"class":93,"line":1777},[91,81107,80967],{"class":250},[91,81109,81110],{"class":93,"line":1798},[91,81111,80972],{"class":250},[91,81113,81114],{"class":93,"line":1803},[91,81115,81071],{"class":250},[91,81117,81118],{"class":93,"line":1817},[91,81119,81120],{"class":250},"    \u002F\u002F     10             1                     11\n",[91,81122,81123],{"class":93,"line":1822},[91,81124,81081],{"class":250},[91,81126,81127],{"class":93,"line":1851},[91,81128,81129],{"class":250},"    \u002F\u002F     11             5                    16\n",[91,81131,81132],{"class":93,"line":1856},[91,81133,81081],{"class":250},[91,81135,81136],{"class":93,"line":1873},[91,81137,81138],{"class":250},"    \u002F\u002F     16             8                    24\n",[91,81140,81141],{"class":93,"line":1878},[91,81142,81143],{"class":250},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[91,81145,81146],{"class":93,"line":1883},[91,81147,80981],{"class":250},[91,81149,81150],{"class":93,"line":1888},[91,81151,80986],{"class":250},[91,81153,81154],{"class":93,"line":1902},[91,81155,80991],{"class":250},[91,81157,81158,81160,81162],{"class":93,"line":1907},[91,81159,52498],{"class":250},[91,81161,51894],{"class":51381},[91,81163,51388],{"class":250},[91,81165,81166,81168,81170],{"class":93,"line":2700},[91,81167,51866],{"class":250},[91,81169,51881],{"class":51381},[91,81171,51388],{"class":250},[23033,81173,81175],{"id":81174},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[21,81177,81178],{},[24,81179],{"alt":26,"src":81180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[82,81182,81184],{"className":53148,"code":81183,"language":53150,"meta":26,"style":26},"\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",[88,81185,81186,81194,81202,81207,81212,81217,81222,81226,81231,81236,81241,81246,81251,81256,81260,81265,81269,81274,81282],{"__ignoreMap":26},[91,81187,81188,81190,81192],{"class":93,"line":94},[91,81189,1159],{"class":250},[91,81191,51881],{"class":51381},[91,81193,51388],{"class":250},[91,81195,81196,81198,81200],{"class":93,"line":38},[91,81197,52225],{"class":250},[91,81199,51894],{"class":51381},[91,81201,51388],{"class":250},[91,81203,81204],{"class":93,"line":1304},[91,81205,81206],{"class":250},"    const arr = [\n",[91,81208,81209],{"class":93,"line":1319},[91,81210,81211],{"class":250},"      { name: '张三', salary: 10000 },\n",[91,81213,81214],{"class":93,"line":1325},[91,81215,81216],{"class":250},"      { name: '李四', salary: 10000 },\n",[91,81218,81219],{"class":93,"line":1339},[91,81220,81221],{"class":250},"      { name: '王五', salary: 10000 }\n",[91,81223,81224],{"class":93,"line":1345},[91,81225,53190],{"class":250},[91,81227,81228],{"class":93,"line":1436},[91,81229,81230],{"class":250},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[91,81232,81233],{"class":93,"line":1442},[91,81234,81235],{"class":250},"    \u002F\u002F prev是累计值\n",[91,81237,81238],{"class":93,"line":1454},[91,81239,81240],{"class":250},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[91,81242,81243],{"class":93,"line":1736},[91,81244,81245],{"class":250},"    console.log(total)\n",[91,81247,81248],{"class":93,"line":1741},[91,81249,81250],{"class":250},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[91,81252,81253],{"class":93,"line":1747},[91,81254,81255],{"class":250},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[91,81257,81258],{"class":93,"line":1752},[91,81259,81250],{"class":250},[91,81261,81262],{"class":93,"line":1766},[91,81263,81264],{"class":250},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[91,81266,81267],{"class":93,"line":1771},[91,81268,81250],{"class":250},[91,81270,81271],{"class":93,"line":1777},[91,81272,81273],{"class":250},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[91,81275,81276,81278,81280],{"class":93,"line":1798},[91,81277,52498],{"class":250},[91,81279,51894],{"class":51381},[91,81281,51388],{"class":250},[91,81283,81284,81286,81288],{"class":93,"line":1803},[91,81285,51866],{"class":250},[91,81287,51881],{"class":51381},[91,81289,51388],{"class":250},[23033,81291,81293],{"id":81292},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[21,81295,81296],{},[24,81297],{"alt":26,"src":81298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[21,81300,81301],{},[24,81302],{"alt":26,"src":81303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[14,81305,81306],{},[17,81307,81308],{},"find()",[21,81310,81311],{},"循环查找，找到第一个就ok",[21,81313,81314],{},[487,81315,81318],{"href":81316,"rel":81317},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23987],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[82,81320,81322],{"className":50714,"code":81321,"language":50716,"meta":26,"style":26},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[88,81323,81324,81329,81334],{"__ignoreMap":26},[91,81325,81326],{"class":93,"line":94},[91,81327,81328],{"class":250},"const array1 = [5, 12, 8, 130, 44]\n",[91,81330,81331],{"class":93,"line":38},[91,81332,81333],{"class":250},"const found = array1.find((element) => element > 10)\n",[91,81335,81336],{"class":93,"line":1304},[91,81337,81338],{"class":250},"console.log(found)  \u002F\u002F12\n",[21,81340,81341,81343,81344,81349,81350,81353,81354,81356,81357,81362,81363,81365,81366,81368,81369,81371,81372],{},[88,81342,81308],{}," 方法是一个",[487,81345,81348],{"href":81346,"rel":81347},"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",[23987],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[88,81351,81352],{},"callbackFn"," 函数，直到 ",[88,81355,81352],{}," 返回一个",[487,81358,81361],{"href":81359,"rel":81360},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23987],"真值","。然后 ",[88,81364,81308],{}," 返回该元素并停止迭代数组。如果 ",[88,81367,81352],{}," 从未返回真值，则 ",[88,81370,81308],{}," 返回 ",[88,81373,81374],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[82,81376,81378],{"className":53148,"code":81377,"language":53150,"meta":26,"style":26},"\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",[88,81379,81380,81388,81396,81401,81406,81411,81415,81420,81425,81429,81434,81439,81443,81447,81452,81457,81461,81465,81470,81475,81480,81485,81490,81494,81499,81504,81509,81514,81518,81523,81531],{"__ignoreMap":26},[91,81381,81382,81384,81386],{"class":93,"line":94},[91,81383,1159],{"class":250},[91,81385,51881],{"class":51381},[91,81387,51388],{"class":250},[91,81389,81390,81392,81394],{"class":93,"line":38},[91,81391,52225],{"class":250},[91,81393,51894],{"class":51381},[91,81395,51388],{"class":250},[91,81397,81398],{"class":93,"line":1304},[91,81399,81400],{"class":250},"    const arr = ['red', 'blue', 'green']\n",[91,81402,81403],{"class":93,"line":1319},[91,81404,81405],{"class":250},"    const found = arr.find(item => item === 'pink')\n",[91,81407,81408],{"class":93,"line":1325},[91,81409,81410],{"class":250},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[91,81412,81413],{"class":93,"line":1339},[91,81414,2523],{"emptyLinePlaceholder":175},[91,81416,81417],{"class":93,"line":1345},[91,81418,81419],{"class":250},"    \u002F\u002F 使用场景，用于查找数据\n",[91,81421,81422],{"class":93,"line":1436},[91,81423,81424],{"class":250},"    const arr1 = [\n",[91,81426,81427],{"class":93,"line":1442},[91,81428,79467],{"class":250},[91,81430,81431],{"class":93,"line":1454},[91,81432,81433],{"class":250},"        name: '小米',\n",[91,81435,81436],{"class":93,"line":1736},[91,81437,81438],{"class":250},"        price: 1999\n",[91,81440,81441],{"class":93,"line":1741},[91,81442,77973],{"class":250},[91,81444,81445],{"class":93,"line":1747},[91,81446,79467],{"class":250},[91,81448,81449],{"class":93,"line":1752},[91,81450,81451],{"class":250},"        name: '华为',\n",[91,81453,81454],{"class":93,"line":1766},[91,81455,81456],{"class":250},"        price: 3999\n",[91,81458,81459],{"class":93,"line":1771},[91,81460,52479],{"class":250},[91,81462,81463],{"class":93,"line":1777},[91,81464,53190],{"class":250},[91,81466,81467],{"class":93,"line":1798},[91,81468,81469],{"class":250},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[91,81471,81472],{"class":93,"line":1803},[91,81473,81474],{"class":250},"    \u002F\u002F const found1 = arr1.find(item => {\n",[91,81476,81477],{"class":93,"line":1817},[91,81478,81479],{"class":250},"    \u002F\u002F   if (item.name === '小米') {\n",[91,81481,81482],{"class":93,"line":1822},[91,81483,81484],{"class":250},"    \u002F\u002F     return item\n",[91,81486,81487],{"class":93,"line":1851},[91,81488,81489],{"class":250},"    \u002F\u002F   }\n",[91,81491,81492],{"class":93,"line":1856},[91,81493,63371],{"class":250},[91,81495,81496],{"class":93,"line":1873},[91,81497,81498],{"class":250},"    \u002F\u002F 另一种写法\n",[91,81500,81501],{"class":93,"line":1878},[91,81502,81503],{"class":250},"    const found1 = arr1.find(item => {\n",[91,81505,81506],{"class":93,"line":1883},[91,81507,81508],{"class":250},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[91,81510,81511],{"class":93,"line":1888},[91,81512,81513],{"class":250},"      return item.name = '小米'\n",[91,81515,81516],{"class":93,"line":1902},[91,81517,33542],{"class":250},[91,81519,81520],{"class":93,"line":1907},[91,81521,81522],{"class":250},"    console.log(found1)\n",[91,81524,81525,81527,81529],{"class":93,"line":2700},[91,81526,52498],{"class":250},[91,81528,51894],{"class":51381},[91,81530,51388],{"class":250},[91,81532,81533,81535,81537],{"class":93,"line":2714},[91,81534,51866],{"class":250},[91,81536,51881],{"class":51381},[91,81538,51388],{"class":250},[21,81540,81541],{},[24,81542],{"alt":26,"src":81543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[21,81545,81546],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[14,81548,81549],{"start":38},[17,81550,81551],{},"every()返回的是布尔值",[21,81553,81554],{},[487,81555,81558],{"href":81556,"rel":81557},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23987],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[21,81560,81561],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[21,81563,81564],{},"some是只有有一个就没问题",[21,81566,81567],{},"every是必须全是才行",[82,81569,81573],{"className":81570,"code":81571,"language":81572,"meta":26,"style":26},"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",[88,81574,81575,81591,81605,81609,81618],{"__ignoreMap":26},[91,81576,81577,81579,81582,81584,81586,81589],{"class":93,"line":94},[91,81578,54530],{"class":153},[91,81580,81581],{"class":250}," isBigEnough(element, ",[91,81583,74139],{"class":153},[91,81585,12558],{"class":250},[91,81587,81588],{"class":153},"array",[91,81590,12565],{"class":250},[91,81592,81593,81596,81599,81601,81603],{"class":93,"line":38},[91,81594,81595],{"class":153},"  return",[91,81597,81598],{"class":250}," element ",[91,81600,1834],{"class":153},[91,81602,2161],{"class":105},[91,81604,1415],{"class":250},[91,81606,81607],{"class":93,"line":1304},[91,81608,1689],{"class":250},[91,81610,81611,81614,81616],{"class":93,"line":1319},[91,81612,81613],{"class":250},"[12, 5, 8, 130, 44].every(isBigEnough); ",[91,81615,33410],{"class":153},[91,81617,54597],{"class":250},[91,81619,81620,81623,81625],{"class":93,"line":1325},[91,81621,81622],{"class":250},"[12, 54, 18, 130, 44].every(isBigEnough); ",[91,81624,33410],{"class":153},[91,81626,58021],{"class":250},[82,81628,81630],{"className":53148,"code":81629,"language":53150,"meta":26,"style":26},"\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",[88,81631,81632,81640,81648,81653,81657,81662,81667,81675],{"__ignoreMap":26},[91,81633,81634,81636,81638],{"class":93,"line":94},[91,81635,1159],{"class":250},[91,81637,51881],{"class":51381},[91,81639,51388],{"class":250},[91,81641,81642,81644,81646],{"class":93,"line":38},[91,81643,52225],{"class":250},[91,81645,51894],{"class":51381},[91,81647,51388],{"class":250},[91,81649,81650],{"class":93,"line":1304},[91,81651,81652],{"class":250},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[91,81654,81655],{"class":93,"line":1319},[91,81656,78403],{"class":250},[91,81658,81659],{"class":93,"line":1325},[91,81660,81661],{"class":250},"    const flag = arr.every(item => item >= 10)\n",[91,81663,81664],{"class":93,"line":1339},[91,81665,81666],{"class":250},"    console.log(flag)    \u002F\u002Ftrue\n",[91,81668,81669,81671,81673],{"class":93,"line":1345},[91,81670,52498],{"class":250},[91,81672,51894],{"class":51381},[91,81674,51388],{"class":250},[91,81676,81677,81679,81681],{"class":93,"line":1436},[91,81678,51866],{"class":250},[91,81680,51881],{"class":51381},[91,81682,51388],{"class":250},[82,81684,81686],{"className":53148,"code":81685,"language":53150,"meta":26,"style":26},"\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",[88,81687,81688,81696,81704,81708,81713,81718,81723,81731],{"__ignoreMap":26},[91,81689,81690,81692,81694],{"class":93,"line":94},[91,81691,1159],{"class":250},[91,81693,51881],{"class":51381},[91,81695,51388],{"class":250},[91,81697,81698,81700,81702],{"class":93,"line":38},[91,81699,52225],{"class":250},[91,81701,51894],{"class":51381},[91,81703,51388],{"class":250},[91,81705,81706],{"class":93,"line":1304},[91,81707,81652],{"class":250},[91,81709,81710],{"class":93,"line":1319},[91,81711,81712],{"class":250},"    const arr = [10, 0, 5]\n",[91,81714,81715],{"class":93,"line":1325},[91,81716,81717],{"class":250},"    const flag = arr.some(item => item >= 10)\n",[91,81719,81720],{"class":93,"line":1339},[91,81721,81722],{"class":250},"    console.log(flag)   \u002F\u002Ftrue\n",[91,81724,81725,81727,81729],{"class":93,"line":1345},[91,81726,52498],{"class":250},[91,81728,51894],{"class":51381},[91,81730,51388],{"class":250},[91,81732,81733,81735,81737],{"class":93,"line":1436},[91,81734,51866],{"class":250},[91,81736,51881],{"class":51381},[91,81738,51388],{"class":250},[23033,81740,81742],{"id":81741},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[21,81744,81745],{},[24,81746],{"alt":26,"src":81747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[82,81749,81751],{"className":50714,"code":81750,"language":50716,"meta":26,"style":26},"\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",[88,81752,81753,81763,81777,81781,81789,81803,81823,81835,81843,81850,81862,81874,81886,81898,81908,81918,81922,81930,81938,81942,81950,81962,81970,81992,81997,82002,82035,82043,82051,82055],{"__ignoreMap":26},[91,81754,81755,81757,81759,81761],{"class":93,"line":94},[91,81756,51378],{"class":250},[91,81758,51382],{"class":51381},[91,81760,51385],{"class":97},[91,81762,51388],{"class":250},[91,81764,81765,81767,81769,81771,81773,81775],{"class":93,"line":38},[91,81766,1159],{"class":250},[91,81768,50716],{"class":51381},[91,81770,51397],{"class":97},[91,81772,296],{"class":250},[91,81774,51402],{"class":101},[91,81776,51388],{"class":250},[91,81778,81779],{"class":93,"line":1304},[91,81780,2523],{"emptyLinePlaceholder":175},[91,81782,81783,81785,81787],{"class":93,"line":1319},[91,81784,1159],{"class":250},[91,81786,51415],{"class":51381},[91,81788,51388],{"class":250},[91,81790,81791,81793,81795,81797,81799,81801],{"class":93,"line":1325},[91,81792,52225],{"class":250},[91,81794,51425],{"class":51381},[91,81796,51428],{"class":97},[91,81798,296],{"class":250},[91,81800,51433],{"class":101},[91,81802,51388],{"class":250},[91,81804,81805,81807,81809,81811,81813,81815,81817,81819,81821],{"class":93,"line":1339},[91,81806,52225],{"class":250},[91,81808,51425],{"class":51381},[91,81810,15043],{"class":97},[91,81812,296],{"class":250},[91,81814,51472],{"class":101},[91,81816,51452],{"class":97},[91,81818,296],{"class":250},[91,81820,51479],{"class":101},[91,81822,51388],{"class":250},[91,81824,81825,81827,81829,81831,81833],{"class":93,"line":1345},[91,81826,52225],{"class":250},[91,81828,51488],{"class":51381},[91,81830,51491],{"class":250},[91,81832,51488],{"class":51381},[91,81834,51388],{"class":250},[91,81836,81837,81839,81841],{"class":93,"line":1436},[91,81838,52225],{"class":250},[91,81840,168],{"class":51381},[91,81842,51388],{"class":250},[91,81844,81845,81848],{"class":93,"line":1442},[91,81846,81847],{"class":51381},"    div",[91,81849,15695],{"class":250},[91,81851,81852,81854,81856,81858,81860],{"class":93,"line":1454},[91,81853,54852],{"class":105},[91,81855,51518],{"class":250},[91,81857,1846],{"class":105},[91,81859,51573],{"class":153},[91,81861,1415],{"class":250},[91,81863,81864,81866,81868,81870,81872],{"class":93,"line":1736},[91,81865,54866],{"class":105},[91,81867,51518],{"class":250},[91,81869,650],{"class":105},[91,81871,51573],{"class":153},[91,81873,1415],{"class":250},[91,81875,81876,81878,81880,81882,81884],{"class":93,"line":1741},[91,81877,57440],{"class":105},[91,81879,51518],{"class":250},[91,81881,650],{"class":105},[91,81883,51573],{"class":153},[91,81885,1415],{"class":250},[91,81887,81888,81890,81892,81894,81896],{"class":93,"line":1747},[91,81889,65214],{"class":105},[91,81891,51518],{"class":250},[91,81893,747],{"class":105},[91,81895,51573],{"class":153},[91,81897,1415],{"class":250},[91,81899,81900,81902,81904,81906],{"class":93,"line":1752},[91,81901,57367],{"class":105},[91,81903,51518],{"class":250},[91,81905,51673],{"class":105},[91,81907,1415],{"class":250},[91,81909,81910,81912,81914,81916],{"class":93,"line":1766},[91,81911,54965],{"class":105},[91,81913,51518],{"class":250},[91,81915,51726],{"class":105},[91,81917,1415],{"class":250},[91,81919,81920],{"class":93,"line":1771},[91,81921,2310],{"class":250},[91,81923,81924,81926,81928],{"class":93,"line":1777},[91,81925,52498],{"class":250},[91,81927,168],{"class":51381},[91,81929,51388],{"class":250},[91,81931,81932,81934,81936],{"class":93,"line":1798},[91,81933,51866],{"class":250},[91,81935,51415],{"class":51381},[91,81937,51388],{"class":250},[91,81939,81940],{"class":93,"line":1803},[91,81941,2523],{"emptyLinePlaceholder":175},[91,81943,81944,81946,81948],{"class":93,"line":1817},[91,81945,1159],{"class":250},[91,81947,51881],{"class":51381},[91,81949,51388],{"class":250},[91,81951,81952,81954,81956,81958,81960],{"class":93,"line":1822},[91,81953,52225],{"class":250},[91,81955,51692],{"class":51381},[91,81957,55395],{"class":250},[91,81959,51692],{"class":51381},[91,81961,51388],{"class":250},[91,81963,81964,81966,81968],{"class":93,"line":1851},[91,81965,52225],{"class":250},[91,81967,51894],{"class":51381},[91,81969,51388],{"class":250},[91,81971,81972,81974,81977,81979,81982,81985,81987,81990],{"class":93,"line":1856},[91,81973,11344],{"class":153},[91,81975,81976],{"class":105}," spec",[91,81978,13687],{"class":153},[91,81980,81981],{"class":250}," { size: ",[91,81983,81984],{"class":101},"'40cm*40cm'",[91,81986,55545],{"class":250},[91,81988,81989],{"class":101},"'黑色'",[91,81991,55685],{"class":250},[91,81993,81994],{"class":93,"line":1873},[91,81995,81996],{"class":308},"    \u002F\u002F const arr = Object.values(spec)\n",[91,81998,81999],{"class":93,"line":1878},[91,82000,82001],{"class":308},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[91,82003,82004,82006,82008,82010,82013,82015,82017,82020,82023,82026,82028,82030,82033],{"class":93,"line":1883},[91,82005,52488],{"class":250},[91,82007,54480],{"class":97},[91,82009,251],{"class":250},[91,82011,82012],{"class":101},"'div'",[91,82014,74330],{"class":250},[91,82016,296],{"class":153},[91,82018,82019],{"class":250}," Object.",[91,82021,82022],{"class":97},"values",[91,82024,82025],{"class":250},"(spec).",[91,82027,74304],{"class":97},[91,82029,251],{"class":250},[91,82031,82032],{"class":101},"'\u002F'",[91,82034,257],{"class":250},[91,82036,82037,82039,82041],{"class":93,"line":1888},[91,82038,52498],{"class":250},[91,82040,51894],{"class":51381},[91,82042,51388],{"class":250},[91,82044,82045,82047,82049],{"class":93,"line":1902},[91,82046,51866],{"class":250},[91,82048,51881],{"class":51381},[91,82050,51388],{"class":250},[91,82052,82053],{"class":93,"line":1907},[91,82054,2523],{"emptyLinePlaceholder":175},[91,82056,82057,82059,82061],{"class":93,"line":2700},[91,82058,51866],{"class":250},[91,82060,50716],{"class":51381},[91,82062,51388],{"class":250},[21,82064,82065],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23033,82067,82069],{"id":82068},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[21,82071,82072],{},"静态方法，将伪数组转换为真数组",[21,82074,82075],{},[24,82076],{"alt":26,"src":82077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[82,82079,82081],{"className":53148,"code":82080,"language":53150,"meta":26,"style":26},"\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",[88,82082,82083,82091,82099,82111,82123,82135,82143,82151,82156,82161,82166,82171,82179],{"__ignoreMap":26},[91,82084,82085,82087,82089],{"class":93,"line":94},[91,82086,1159],{"class":250},[91,82088,51881],{"class":51381},[91,82090,51388],{"class":250},[91,82092,82093,82095,82097],{"class":93,"line":38},[91,82094,52225],{"class":250},[91,82096,1256],{"class":51381},[91,82098,51388],{"class":250},[91,82100,82101,82103,82105,82107,82109],{"class":93,"line":1304},[91,82102,51422],{"class":250},[91,82104,17],{"class":51381},[91,82106,55395],{"class":250},[91,82108,17],{"class":51381},[91,82110,51388],{"class":250},[91,82112,82113,82115,82117,82119,82121],{"class":93,"line":1319},[91,82114,51422],{"class":250},[91,82116,17],{"class":51381},[91,82118,55395],{"class":250},[91,82120,17],{"class":51381},[91,82122,51388],{"class":250},[91,82124,82125,82127,82129,82131,82133],{"class":93,"line":1325},[91,82126,51422],{"class":250},[91,82128,17],{"class":51381},[91,82130,55395],{"class":250},[91,82132,17],{"class":51381},[91,82134,51388],{"class":250},[91,82136,82137,82139,82141],{"class":93,"line":1339},[91,82138,52498],{"class":250},[91,82140,1256],{"class":51381},[91,82142,51388],{"class":250},[91,82144,82145,82147,82149],{"class":93,"line":1345},[91,82146,52225],{"class":250},[91,82148,51894],{"class":51381},[91,82150,51388],{"class":250},[91,82152,82153],{"class":93,"line":1436},[91,82154,82155],{"class":250},"    const lis = document.querySelectorAll('li')\n",[91,82157,82158],{"class":93,"line":1442},[91,82159,82160],{"class":250},"    const liss = Array.from(lis)\n",[91,82162,82163],{"class":93,"line":1454},[91,82164,82165],{"class":250},"    liss.pop()\n",[91,82167,82168],{"class":93,"line":1736},[91,82169,82170],{"class":250},"    console.log(liss)\n",[91,82172,82173,82175,82177],{"class":93,"line":1741},[91,82174,52498],{"class":250},[91,82176,51894],{"class":51381},[91,82178,51388],{"class":250},[91,82180,82181,82183,82185],{"class":93,"line":1747},[91,82182,51866],{"class":250},[91,82184,51881],{"class":51381},[91,82186,51388],{"class":250},[21,82188,82189],{},[24,82190],{"alt":26,"src":82191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22121,82193,82195],{"id":82194},"_41053-string","4.10.5.3 String",[21,82197,82198],{},[24,82199],{"alt":26,"src":82200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23033,82202,82204],{"id":82203},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[82,82206,82208],{"className":53148,"code":82207,"language":53150,"meta":26,"style":26},"\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",[88,82209,82210,82218,82226,82231,82236,82241,82245,82250,82255,82260,82268],{"__ignoreMap":26},[91,82211,82212,82214,82216],{"class":93,"line":94},[91,82213,1159],{"class":250},[91,82215,51881],{"class":51381},[91,82217,51388],{"class":250},[91,82219,82220,82222,82224],{"class":93,"line":38},[91,82221,52225],{"class":250},[91,82223,51894],{"class":51381},[91,82225,51388],{"class":250},[91,82227,82228],{"class":93,"line":1304},[91,82229,82230],{"class":250},"    \u002F\u002F 把字符串转化为数组\n",[91,82232,82233],{"class":93,"line":1319},[91,82234,82235],{"class":250},"    const str = 'pink,red'\n",[91,82237,82238],{"class":93,"line":1325},[91,82239,82240],{"class":250},"    const arr = str.split(',')\n",[91,82242,82243],{"class":93,"line":1339},[91,82244,80719],{"class":250},[91,82246,82247],{"class":93,"line":1345},[91,82248,82249],{"class":250},"    const str1 = '2025-8-25'\n",[91,82251,82252],{"class":93,"line":1436},[91,82253,82254],{"class":250},"    const arr1 = str1.split('-')\n",[91,82256,82257],{"class":93,"line":1442},[91,82258,82259],{"class":250},"    console.log(arr1)\n",[91,82261,82262,82264,82266],{"class":93,"line":1454},[91,82263,52498],{"class":250},[91,82265,51894],{"class":51381},[91,82267,51388],{"class":250},[91,82269,82270,82272,82274],{"class":93,"line":1736},[91,82271,51866],{"class":250},[91,82273,51881],{"class":51381},[91,82275,51388],{"class":250},[23033,82277,82279],{"id":82278},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[21,82281,5304],{},[21,82283,82284],{},"substring(indexStart)",[21,82286,82287],{},"substring(indexStart, indexEnd)",[1256,82289,82290,82301,82313,82323],{},[17,82291,82292,82293,82296,82297,82300],{},"如果省略了 ",[88,82294,82295],{},"indexEnd","，则 ",[88,82298,82299],{},"substring()"," 提取字符直到字符串的末尾",[17,82302,82303,82304,82307,82308,82296,82310,82312],{},"如果 ",[88,82305,82306],{},"indexStart"," 等于 ",[88,82309,82295],{},[88,82311,82299],{}," 返回一个空字符串",[17,82314,82303,82315,82317,82318,82296,82320,82322],{},[88,82316,82306],{}," 大于 ",[88,82319,82295],{},[88,82321,82299],{}," 的效果就像交换了这两个参数一样",[17,82324,82325],{},"结束的索引号不包含想要截取的部分",[82,82327,82329],{"className":81570,"code":82328,"language":81572,"meta":26,"style":26},"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",[88,82330,82331,82343,82347,82381,82411,82415,82446,82450,82477,82507,82537,82541,82572],{"__ignoreMap":26},[91,82332,82333,82336,82338,82341],{"class":93,"line":94},[91,82334,82335],{"class":250},"const anyString ",[91,82337,296],{"class":153},[91,82339,82340],{"class":101}," \"Mozilla\"",[91,82342,1415],{"class":250},[91,82344,82345],{"class":93,"line":38},[91,82346,2523],{"emptyLinePlaceholder":175},[91,82348,82349,82352,82354,82356,82358,82361,82363,82366,82368,82370,82372,82374,82376,82378],{"class":93,"line":1304},[91,82350,82351],{"class":105},"console",[91,82353,807],{"class":250},[91,82355,58328],{"class":105},[91,82357,251],{"class":250},[91,82359,82360],{"class":105},"anyString",[91,82362,807],{"class":250},[91,82364,82365],{"class":105},"substring",[91,82367,251],{"class":250},[91,82369,440],{"class":105},[91,82371,12558],{"class":250},[91,82373,466],{"class":105},[91,82375,75334],{"class":250},[91,82377,33410],{"class":153},[91,82379,82380],{"class":101}," 'M'\n",[91,82382,82383,82385,82387,82389,82391,82393,82395,82397,82399,82401,82403,82405,82407,82409],{"class":93,"line":1319},[91,82384,82351],{"class":105},[91,82386,807],{"class":250},[91,82388,58328],{"class":105},[91,82390,251],{"class":250},[91,82392,82360],{"class":105},[91,82394,807],{"class":250},[91,82396,82365],{"class":105},[91,82398,251],{"class":250},[91,82400,466],{"class":105},[91,82402,12558],{"class":250},[91,82404,440],{"class":105},[91,82406,75334],{"class":250},[91,82408,33410],{"class":153},[91,82410,82380],{"class":101},[91,82412,82413],{"class":93,"line":1325},[91,82414,2523],{"emptyLinePlaceholder":175},[91,82416,82417,82419,82421,82423,82425,82427,82429,82431,82433,82435,82437,82439,82441,82443],{"class":93,"line":1339},[91,82418,82351],{"class":105},[91,82420,807],{"class":250},[91,82422,58328],{"class":105},[91,82424,251],{"class":250},[91,82426,82360],{"class":105},[91,82428,807],{"class":250},[91,82430,82365],{"class":105},[91,82432,251],{"class":250},[91,82434,440],{"class":105},[91,82436,12558],{"class":250},[91,82438,593],{"class":105},[91,82440,75334],{"class":250},[91,82442,33410],{"class":153},[91,82444,82445],{"class":101}," 'Mozill'\n",[91,82447,82448],{"class":93,"line":1345},[91,82449,2523],{"emptyLinePlaceholder":175},[91,82451,82452,82454,82456,82458,82460,82462,82464,82466,82468,82470,82472,82474],{"class":93,"line":1436},[91,82453,82351],{"class":105},[91,82455,807],{"class":250},[91,82457,58328],{"class":105},[91,82459,251],{"class":250},[91,82461,82360],{"class":105},[91,82463,807],{"class":250},[91,82465,82365],{"class":105},[91,82467,251],{"class":250},[91,82469,542],{"class":105},[91,82471,75334],{"class":250},[91,82473,33410],{"class":153},[91,82475,82476],{"class":101}," 'lla'\n",[91,82478,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501,82503,82505],{"class":93,"line":1442},[91,82480,82351],{"class":105},[91,82482,807],{"class":250},[91,82484,58328],{"class":105},[91,82486,251],{"class":250},[91,82488,82360],{"class":105},[91,82490,807],{"class":250},[91,82492,82365],{"class":105},[91,82494,251],{"class":250},[91,82496,542],{"class":105},[91,82498,12558],{"class":250},[91,82500,618],{"class":105},[91,82502,75390],{"class":250},[91,82504,33410],{"class":153},[91,82506,82476],{"class":101},[91,82508,82509,82511,82513,82515,82517,82519,82521,82523,82525,82527,82529,82531,82533,82535],{"class":93,"line":1454},[91,82510,82351],{"class":105},[91,82512,807],{"class":250},[91,82514,58328],{"class":105},[91,82516,251],{"class":250},[91,82518,82360],{"class":105},[91,82520,807],{"class":250},[91,82522,82365],{"class":105},[91,82524,251],{"class":250},[91,82526,618],{"class":105},[91,82528,12558],{"class":250},[91,82530,542],{"class":105},[91,82532,75334],{"class":250},[91,82534,33410],{"class":153},[91,82536,82476],{"class":101},[91,82538,82539],{"class":93,"line":1736},[91,82540,2523],{"emptyLinePlaceholder":175},[91,82542,82543,82545,82547,82549,82551,82553,82555,82557,82559,82561,82563,82565,82567,82569],{"class":93,"line":1741},[91,82544,82351],{"class":105},[91,82546,807],{"class":250},[91,82548,58328],{"class":105},[91,82550,251],{"class":250},[91,82552,82360],{"class":105},[91,82554,807],{"class":250},[91,82556,82365],{"class":105},[91,82558,251],{"class":250},[91,82560,440],{"class":105},[91,82562,12558],{"class":250},[91,82564,618],{"class":105},[91,82566,75334],{"class":250},[91,82568,33410],{"class":153},[91,82570,82571],{"class":101}," 'Mozilla'\n",[91,82573,82574,82576,82578,82580,82582,82584,82586,82588,82590,82592,82594,82596,82598,82600],{"class":93,"line":1747},[91,82575,82351],{"class":105},[91,82577,807],{"class":250},[91,82579,58328],{"class":105},[91,82581,251],{"class":250},[91,82583,82360],{"class":105},[91,82585,807],{"class":250},[91,82587,82365],{"class":105},[91,82589,251],{"class":250},[91,82591,440],{"class":105},[91,82593,12558],{"class":250},[91,82595,695],{"class":105},[91,82597,75334],{"class":250},[91,82599,33410],{"class":153},[91,82601,82571],{"class":101},[23033,82603,82605],{"id":82604},"_410533-startswith","4.10.5.3.3 startsWith",[21,82607,82608,82611,82612,82617,82618,82620,82621],{},[88,82609,82610],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[398,82613,82614],{},[88,82615,82616],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[88,82619,1487],{}," 或 ",[88,82622,66101],{},[82,82624,82626],{"className":77576,"code":82625,"language":77578,"meta":26,"style":26},"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",[88,82627,82628,82640,82659,82664,82684],{"__ignoreMap":26},[91,82629,82630,82632,82635,82637],{"class":93,"line":94},[91,82631,6915],{"class":153},[91,82633,82634],{"class":250}," str1 ",[91,82636,296],{"class":153},[91,82638,82639],{"class":101}," \"Saturday night plans\"\n",[91,82641,82642,82644,82646,82649,82652,82654,82657],{"class":93,"line":38},[91,82643,77613],{"class":250},[91,82645,58328],{"class":97},[91,82647,82648],{"class":250},"(str1.",[91,82650,82651],{"class":97},"startsWith",[91,82653,251],{"class":250},[91,82655,82656],{"class":101},"\"Sat\"",[91,82658,30578],{"class":250},[91,82660,82661],{"class":93,"line":1304},[91,82662,82663],{"class":308},"\u002F\u002F Expected output: true\n",[91,82665,82666,82668,82670,82672,82674,82676,82678,82680,82682],{"class":93,"line":1319},[91,82667,77613],{"class":250},[91,82669,58328],{"class":97},[91,82671,82648],{"class":250},[91,82673,82651],{"class":97},[91,82675,251],{"class":250},[91,82677,82656],{"class":101},[91,82679,12558],{"class":250},[91,82681,321],{"class":105},[91,82683,30578],{"class":250},[91,82685,82686],{"class":93,"line":1325},[91,82687,82688],{"class":308},"\u002F\u002F Expected output: false\n",[82,82690,82692],{"className":50714,"code":82691,"language":50716,"meta":26,"style":26},"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",[88,82693,82694,82699,82704,82708,82713,82718],{"__ignoreMap":26},[91,82695,82696],{"class":93,"line":94},[91,82697,82698],{"class":250},"startsWith(searchString)\n",[91,82700,82701],{"class":93,"line":38},[91,82702,82703],{"class":250},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[91,82705,82706],{"class":93,"line":1304},[91,82707,2523],{"emptyLinePlaceholder":175},[91,82709,82710],{"class":93,"line":1319},[91,82711,82712],{"class":250},"const str3 = 'pink老师上课中'\n",[91,82714,82715],{"class":93,"line":1325},[91,82716,82717],{"class":250},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[91,82719,82720],{"class":93,"line":1339},[91,82721,82722],{"class":250},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23033,82724,82726],{"id":82725},"_410534-includes","4.10.5.3.4 includes",[21,82728,82729],{},"includes(searchString) includes(searchString, position)",[14,82731,82732],{},[17,82733,82734],{},"searchString:",[21,82736,82737,82738,82740,82741,82746,82747,82752,82753,21623,82756,82759,82760,82763],{},"一个要在 ",[88,82739,1424],{}," 中查找的字符串。",[487,82742,82745],{"href":82743,"rel":82744},"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",[23987],"不能是正则表达式","。所有非正则表达式的值都会被",[487,82748,82751],{"href":82749,"rel":82750},"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",[23987],"强制转换为字符串","，因此如果该参数被省略或传入 ",[88,82754,82755],{},"undefined",[88,82757,82758],{},"includes()"," 方法会在字符串中搜索 ",[88,82761,82762],{},"\"undefined\"","，这通常不是你想要的",[14,82765,82766],{"start":38},[17,82767,82768,1108],{},[88,82769,82770],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[21,82772,82773,82774,82777,82778],{},"在字符串中开始搜索 ",[88,82775,82776],{},"searchString"," 的位置。默认值为 ",[88,82779,440],{},[14,82781,82782],{"start":1304},[17,82783,82784],{},"返回值：",[21,82786,82787,82788,82790,82791,82795,82796],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[88,82789,82776],{}," 为空字符串的情况），则返回 ",[398,82792,82793],{},[88,82794,1487],{}," ，否则返回 ",[398,82797,82798],{},[88,82799,66101],{},[14,82801,82802],{"start":1319},[17,82803,82804],{},"异常：",[21,82806,82303,82807,13918,82809,82813],{},[88,82808,82776],{},[487,82810,82812],{"href":82743,"rel":82811},[23987],"是一个正则表达式","，则会抛出",[21,82815,82816],{},"只要是有就是true，不需要非得以谁开头结尾",[82,82818,82820],{"className":77576,"code":82819,"language":77578,"meta":26,"style":26},"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",[88,82821,82822,82833,82856,82875,82895,82917,82936],{"__ignoreMap":26},[91,82823,82824,82826,82828,82830],{"class":93,"line":94},[91,82825,6915],{"class":153},[91,82827,79856],{"class":250},[91,82829,296],{"class":153},[91,82831,82832],{"class":101}," \"To be, or not to be, that is the question.\"\n",[91,82834,82835,82837,82839,82842,82845,82847,82850,82853],{"class":93,"line":38},[91,82836,77613],{"class":250},[91,82838,58328],{"class":97},[91,82840,82841],{"class":250},"(str.",[91,82843,82844],{"class":97},"includes",[91,82846,251],{"class":250},[91,82848,82849],{"class":101},"\"To be\"",[91,82851,82852],{"class":250},"))",[91,82854,82855],{"class":308},"  \u002F\u002F true\n",[91,82857,82858,82860,82862,82864,82866,82868,82871,82873],{"class":93,"line":1304},[91,82859,77613],{"class":250},[91,82861,58328],{"class":97},[91,82863,82841],{"class":250},[91,82865,82844],{"class":97},[91,82867,251],{"class":250},[91,82869,82870],{"class":101},"\"question\"",[91,82872,82852],{"class":250},[91,82874,82855],{"class":308},[91,82876,82877,82879,82881,82883,82885,82887,82890,82892],{"class":93,"line":1319},[91,82878,77613],{"class":250},[91,82880,58328],{"class":97},[91,82882,82841],{"class":250},[91,82884,82844],{"class":97},[91,82886,251],{"class":250},[91,82888,82889],{"class":101},"\"nonexistent\"",[91,82891,82852],{"class":250},[91,82893,82894],{"class":308},"  \u002F\u002F false\n",[91,82896,82897,82899,82901,82903,82905,82907,82909,82911,82913,82915],{"class":93,"line":1325},[91,82898,77613],{"class":250},[91,82900,58328],{"class":97},[91,82902,82841],{"class":250},[91,82904,82844],{"class":97},[91,82906,251],{"class":250},[91,82908,82849],{"class":101},[91,82910,12558],{"class":250},[91,82912,466],{"class":105},[91,82914,82852],{"class":250},[91,82916,82894],{"class":308},[91,82918,82919,82921,82923,82925,82927,82929,82932,82934],{"class":93,"line":1339},[91,82920,77613],{"class":250},[91,82922,58328],{"class":97},[91,82924,82841],{"class":250},[91,82926,82844],{"class":97},[91,82928,251],{"class":250},[91,82930,82931],{"class":101},"\"TO BE\"",[91,82933,82852],{"class":250},[91,82935,82894],{"class":308},[91,82937,82938,82940,82942,82944,82946,82948,82950,82952],{"class":93,"line":1345},[91,82939,77613],{"class":250},[91,82941,58328],{"class":97},[91,82943,82841],{"class":250},[91,82945,82844],{"class":97},[91,82947,251],{"class":250},[91,82949,7775],{"class":101},[91,82951,82852],{"class":250},[91,82953,82855],{"class":308},[23033,82955,82957],{"id":82956},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[82,82959,82961],{"className":53148,"code":82960,"language":53150,"meta":26,"style":26},"\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",[88,82962,82963,82971,82979,82984,82989,82994,82999,83004,83012],{"__ignoreMap":26},[91,82964,82965,82967,82969],{"class":93,"line":94},[91,82966,1159],{"class":250},[91,82968,51881],{"class":51381},[91,82970,51388],{"class":250},[91,82972,82973,82975,82977],{"class":93,"line":38},[91,82974,52225],{"class":250},[91,82976,51894],{"class":51381},[91,82978,51388],{"class":250},[91,82980,82981],{"class":93,"line":1304},[91,82982,82983],{"class":250},"    const num = 10\n",[91,82985,82986],{"class":93,"line":1319},[91,82987,82988],{"class":250},"    \u002F\u002F 强制转换\n",[91,82990,82991],{"class":93,"line":1325},[91,82992,82993],{"class":250},"    console.log(String(num))\n",[91,82995,82996],{"class":93,"line":1339},[91,82997,82998],{"class":250},"    \u002F\u002F toString()方法转换\n",[91,83000,83001],{"class":93,"line":1345},[91,83002,83003],{"class":250},"    console.log(num.toString())\n",[91,83005,83006,83008,83010],{"class":93,"line":1436},[91,83007,52498],{"class":250},[91,83009,51894],{"class":51381},[91,83011,51388],{"class":250},[91,83013,83014,83016,83018],{"class":93,"line":1442},[91,83015,51866],{"class":250},[91,83017,51881],{"class":51381},[91,83019,51388],{"class":250},[23033,83021,83023],{"id":83022},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[21,83025,83026],{},[24,83027],{"alt":26,"src":83028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[82,83030,83032],{"className":50714,"code":83031,"language":50716,"meta":26,"style":26},"\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",[88,83033,83034,83044,83058,83062,83070,83084,83104,83116,83124,83128,83136,83148,83156,83168,83173,83178,83183,83230,83246,83254,83262,83266],{"__ignoreMap":26},[91,83035,83036,83038,83040,83042],{"class":93,"line":94},[91,83037,51378],{"class":250},[91,83039,51382],{"class":51381},[91,83041,51385],{"class":97},[91,83043,51388],{"class":250},[91,83045,83046,83048,83050,83052,83054,83056],{"class":93,"line":38},[91,83047,1159],{"class":250},[91,83049,50716],{"class":51381},[91,83051,51397],{"class":97},[91,83053,296],{"class":250},[91,83055,51402],{"class":101},[91,83057,51388],{"class":250},[91,83059,83060],{"class":93,"line":1304},[91,83061,2523],{"emptyLinePlaceholder":175},[91,83063,83064,83066,83068],{"class":93,"line":1319},[91,83065,1159],{"class":250},[91,83067,51415],{"class":51381},[91,83069,51388],{"class":250},[91,83071,83072,83074,83076,83078,83080,83082],{"class":93,"line":1325},[91,83073,52225],{"class":250},[91,83075,51425],{"class":51381},[91,83077,51428],{"class":97},[91,83079,296],{"class":250},[91,83081,51433],{"class":101},[91,83083,51388],{"class":250},[91,83085,83086,83088,83090,83092,83094,83096,83098,83100,83102],{"class":93,"line":1339},[91,83087,52225],{"class":250},[91,83089,51425],{"class":51381},[91,83091,15043],{"class":97},[91,83093,296],{"class":250},[91,83095,51472],{"class":101},[91,83097,51452],{"class":97},[91,83099,296],{"class":250},[91,83101,51479],{"class":101},[91,83103,51388],{"class":250},[91,83105,83106,83108,83110,83112,83114],{"class":93,"line":1345},[91,83107,52225],{"class":250},[91,83109,51488],{"class":51381},[91,83111,51491],{"class":250},[91,83113,51488],{"class":51381},[91,83115,51388],{"class":250},[91,83117,83118,83120,83122],{"class":93,"line":1436},[91,83119,51866],{"class":250},[91,83121,51415],{"class":51381},[91,83123,51388],{"class":250},[91,83125,83126],{"class":93,"line":1442},[91,83127,2523],{"emptyLinePlaceholder":175},[91,83129,83130,83132,83134],{"class":93,"line":1454},[91,83131,1159],{"class":250},[91,83133,51881],{"class":51381},[91,83135,51388],{"class":250},[91,83137,83138,83140,83142,83144,83146],{"class":93,"line":1736},[91,83139,52225],{"class":250},[91,83141,51692],{"class":51381},[91,83143,55395],{"class":250},[91,83145,51692],{"class":51381},[91,83147,51388],{"class":250},[91,83149,83150,83152,83154],{"class":93,"line":1741},[91,83151,52225],{"class":250},[91,83153,51894],{"class":51381},[91,83155,51388],{"class":250},[91,83157,83158,83160,83163,83165],{"class":93,"line":1747},[91,83159,11344],{"class":153},[91,83161,83162],{"class":105}," gift",[91,83164,13687],{"class":153},[91,83166,83167],{"class":101}," '50g的茶叶，清洗球'\n",[91,83169,83170],{"class":93,"line":1752},[91,83171,83172],{"class":308},"    \u002F\u002F 1.把字符串拆分为数组\n",[91,83174,83175],{"class":93,"line":1766},[91,83176,83177],{"class":308},"    \u002F\u002F console.log(gift.split(','))\n",[91,83179,83180],{"class":93,"line":1771},[91,83181,83182],{"class":308},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[91,83184,83185,83187,83189,83191,83194,83197,83199,83202,83204,83206,83208,83210,83212,83215,83217,83220,83222,83224,83226,83228],{"class":93,"line":1777},[91,83186,11344],{"class":153},[91,83188,74000],{"class":105},[91,83190,13687],{"class":153},[91,83192,83193],{"class":250}," gift.",[91,83195,83196],{"class":97},"split",[91,83198,251],{"class":250},[91,83200,83201],{"class":101},"'，'",[91,83203,30907],{"class":250},[91,83205,74125],{"class":97},[91,83207,251],{"class":250},[91,83209,79876],{"class":5339},[91,83211,79879],{"class":153},[91,83213,83214],{"class":101}," `\u003Cspan>【赠品】${",[91,83216,79876],{"class":250},[91,83218,83219],{"class":101},"}\u003C\u002Fspan>\u003Cbr>`",[91,83221,30907],{"class":250},[91,83223,74304],{"class":97},[91,83225,251],{"class":250},[91,83227,74309],{"class":101},[91,83229,257],{"class":250},[91,83231,83232,83234,83236,83238,83240,83242,83244],{"class":93,"line":1798},[91,83233,52488],{"class":250},[91,83235,54480],{"class":97},[91,83237,251],{"class":250},[91,83239,82012],{"class":101},[91,83241,74330],{"class":250},[91,83243,296],{"class":153},[91,83245,74066],{"class":250},[91,83247,83248,83250,83252],{"class":93,"line":1803},[91,83249,52498],{"class":250},[91,83251,51894],{"class":51381},[91,83253,51388],{"class":250},[91,83255,83256,83258,83260],{"class":93,"line":1817},[91,83257,51866],{"class":250},[91,83259,51881],{"class":51381},[91,83261,51388],{"class":250},[91,83263,83264],{"class":93,"line":1822},[91,83265,2523],{"emptyLinePlaceholder":175},[91,83267,83268,83270,83272],{"class":93,"line":1851},[91,83269,51866],{"class":250},[91,83271,50716],{"class":51381},[91,83273,51388],{"class":250},[22121,83275,83277],{"id":83276},"_41054-number","4.10.5.4 Number",[21,83279,83280],{},[24,83281],{"alt":26,"src":83282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[21,83284,83285],{},"整数也可以进行toFixed来保留小数",[21,83287,83288],{},"比如：",[21,83290,83291],{},"const price=10",[21,83293,83294],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22121,83296,83298],{"id":83297},"_41055-购物车展示","4.10.5.5 购物车展示",[21,83300,83301],{},[24,83302],{"alt":26,"src":83303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[82,83305,83307],{"className":50714,"code":83306,"language":50716,"meta":26,"style":26},"\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",[88,83308,83309,83319,83333,83337,83345,83359,83379,83391,83399,83405,83415,83425,83435,83439,83443,83449,83461,83475,83479,83483,83489,83501,83517,83527,83543,83547,83551,83557,83567,83577,83581,83585,83593,83605,83617,83629,83633,83637,83645,83657,83661,83665,83676,83686,83698,83710,83720,83724,83728,83736,83745,83757,83767,83777,83781,83785,83793,83802,83809,83819,83831,83835,83839,83848,83858,83869,83881,83893,83897,83901,83910,83920,83931,83935,83939,83945,83957,83969,83979,83989,84007,84019,84023,84027,84036,84048,84058,84068,84080,84084,84092,84100,84104,84112,84126,84134,84148,84176,84184,84192,84202,84206,84214,84222,84231,84239,84248,84258,84262,84266,84274,84282,84291,84299,84307,84320,84324,84328,84336,84344,84353,84361,84369,84384,84388,84392,84400,84408,84417,84425,84433,84447,84455,84459,84463,84468,84494,84499,84536,84541,84564,84569,84623,84628,84664,84668,84674,84679,84688,84702,84711,84730,84739,84749,84754,84759,84772,84777,84831,84857,84865,84873,84877],{"__ignoreMap":26},[91,83310,83311,83313,83315,83317],{"class":93,"line":94},[91,83312,51378],{"class":250},[91,83314,51382],{"class":51381},[91,83316,51385],{"class":97},[91,83318,51388],{"class":250},[91,83320,83321,83323,83325,83327,83329,83331],{"class":93,"line":38},[91,83322,1159],{"class":250},[91,83324,50716],{"class":51381},[91,83326,51397],{"class":97},[91,83328,296],{"class":250},[91,83330,51402],{"class":101},[91,83332,51388],{"class":250},[91,83334,83335],{"class":93,"line":1304},[91,83336,2523],{"emptyLinePlaceholder":175},[91,83338,83339,83341,83343],{"class":93,"line":1319},[91,83340,1159],{"class":250},[91,83342,51415],{"class":51381},[91,83344,51388],{"class":250},[91,83346,83347,83349,83351,83353,83355,83357],{"class":93,"line":1325},[91,83348,52225],{"class":250},[91,83350,51425],{"class":51381},[91,83352,51428],{"class":97},[91,83354,296],{"class":250},[91,83356,51433],{"class":101},[91,83358,51388],{"class":250},[91,83360,83361,83363,83365,83367,83369,83371,83373,83375,83377],{"class":93,"line":1339},[91,83362,52225],{"class":250},[91,83364,51425],{"class":51381},[91,83366,15043],{"class":97},[91,83368,296],{"class":250},[91,83370,51472],{"class":101},[91,83372,51452],{"class":97},[91,83374,296],{"class":250},[91,83376,51479],{"class":101},[91,83378,51388],{"class":250},[91,83380,83381,83383,83385,83387,83389],{"class":93,"line":1345},[91,83382,52225],{"class":250},[91,83384,51488],{"class":51381},[91,83386,51491],{"class":250},[91,83388,51488],{"class":51381},[91,83390,51388],{"class":250},[91,83392,83393,83395,83397],{"class":93,"line":1436},[91,83394,52225],{"class":250},[91,83396,168],{"class":51381},[91,83398,51388],{"class":250},[91,83400,83401,83403],{"class":93,"line":1442},[91,83402,6526],{"class":51381},[91,83404,15695],{"class":250},[91,83406,83407,83409,83411,83413],{"class":93,"line":1454},[91,83408,54776],{"class":105},[91,83410,51518],{"class":250},[91,83412,440],{"class":105},[91,83414,1415],{"class":250},[91,83416,83417,83419,83421,83423],{"class":93,"line":1736},[91,83418,54787],{"class":105},[91,83420,51518],{"class":250},[91,83422,440],{"class":105},[91,83424,1415],{"class":250},[91,83426,83427,83429,83431,83433],{"class":93,"line":1741},[91,83428,72677],{"class":105},[91,83430,51518],{"class":250},[91,83432,60586],{"class":105},[91,83434,1415],{"class":250},[91,83436,83437],{"class":93,"line":1747},[91,83438,2310],{"class":250},[91,83440,83441],{"class":93,"line":1752},[91,83442,2523],{"emptyLinePlaceholder":175},[91,83444,83445,83447],{"class":93,"line":1766},[91,83446,62204],{"class":97},[91,83448,15695],{"class":250},[91,83450,83451,83453,83455,83457,83459],{"class":93,"line":1771},[91,83452,54852],{"class":105},[91,83454,51518],{"class":250},[91,83456,78655],{"class":105},[91,83458,51573],{"class":153},[91,83460,1415],{"class":250},[91,83462,83463,83465,83467,83469,83471,83473],{"class":93,"line":1777},[91,83464,54787],{"class":105},[91,83466,51518],{"class":250},[91,83468,560],{"class":105},[91,83470,51573],{"class":153},[91,83472,51637],{"class":105},[91,83474,1415],{"class":250},[91,83476,83477],{"class":93,"line":1798},[91,83478,2310],{"class":250},[91,83480,83481],{"class":93,"line":1803},[91,83482,2523],{"emptyLinePlaceholder":175},[91,83484,83485,83487],{"class":93,"line":1817},[91,83486,78706],{"class":97},[91,83488,15695],{"class":250},[91,83490,83491,83493,83495,83497,83499],{"class":93,"line":1822},[91,83492,54776],{"class":105},[91,83494,51518],{"class":250},[91,83496,824],{"class":105},[91,83498,51573],{"class":153},[91,83500,1415],{"class":250},[91,83502,83503,83505,83507,83509,83511,83513,83515],{"class":93,"line":1851},[91,83504,61941],{"class":105},[91,83506,51518],{"class":250},[91,83508,28240],{"class":105},[91,83510,78761],{"class":105},[91,83512,78764],{"class":105},[91,83514,944],{"class":153},[91,83516,1415],{"class":250},[91,83518,83519,83521,83523,83525],{"class":93,"line":1856},[91,83520,55090],{"class":105},[91,83522,51518],{"class":250},[91,83524,51558],{"class":105},[91,83526,1415],{"class":250},[91,83528,83529,83531,83533,83535,83537,83539,83541],{"class":93,"line":1873},[91,83530,62058],{"class":105},[91,83532,51518],{"class":250},[91,83534,466],{"class":105},[91,83536,51573],{"class":153},[91,83538,51602],{"class":105},[91,83540,62325],{"class":105},[91,83542,1415],{"class":250},[91,83544,83545],{"class":93,"line":1878},[91,83546,2310],{"class":250},[91,83548,83549],{"class":93,"line":1883},[91,83550,2523],{"emptyLinePlaceholder":175},[91,83552,83553,83555],{"class":93,"line":1888},[91,83554,78824],{"class":97},[91,83556,15695],{"class":250},[91,83558,83559,83561,83563,83565],{"class":93,"line":1902},[91,83560,62106],{"class":105},[91,83562,51518],{"class":250},[91,83564,62111],{"class":105},[91,83566,1415],{"class":250},[91,83568,83569,83571,83573,83575],{"class":93,"line":1907},[91,83570,54965],{"class":105},[91,83572,51518],{"class":250},[91,83574,61899],{"class":105},[91,83576,1415],{"class":250},[91,83578,83579],{"class":93,"line":2700},[91,83580,2310],{"class":250},[91,83582,83583],{"class":93,"line":2714},[91,83584,2523],{"emptyLinePlaceholder":175},[91,83586,83587,83589,83591],{"class":93,"line":2722},[91,83588,78706],{"class":97},[91,83590,55696],{"class":51381},[91,83592,15695],{"class":250},[91,83594,83595,83597,83599,83601,83603],{"class":93,"line":2727},[91,83596,54852],{"class":105},[91,83598,51518],{"class":250},[91,83600,861],{"class":105},[91,83602,51573],{"class":153},[91,83604,1415],{"class":250},[91,83606,83607,83609,83611,83613,83615],{"class":93,"line":2733},[91,83608,54866],{"class":105},[91,83610,51518],{"class":250},[91,83612,861],{"class":105},[91,83614,51573],{"class":153},[91,83616,1415],{"class":250},[91,83618,83619,83621,83623,83625,83627],{"class":93,"line":2739},[91,83620,61831],{"class":105},[91,83622,51518],{"class":250},[91,83624,568],{"class":105},[91,83626,51573],{"class":153},[91,83628,1415],{"class":250},[91,83630,83631],{"class":93,"line":2744},[91,83632,2310],{"class":250},[91,83634,83635],{"class":93,"line":8071},[91,83636,2523],{"emptyLinePlaceholder":175},[91,83638,83639,83641,83643],{"class":93,"line":8095},[91,83640,78706],{"class":97},[91,83642,62385],{"class":97},[91,83644,15695],{"class":250},[91,83646,83647,83649,83651,83653,83655],{"class":93,"line":8100},[91,83648,54852],{"class":105},[91,83650,51518],{"class":250},[91,83652,1846],{"class":105},[91,83654,51573],{"class":153},[91,83656,1415],{"class":250},[91,83658,83659],{"class":93,"line":8106},[91,83660,2310],{"class":250},[91,83662,83663],{"class":93,"line":8133},[91,83664,2523],{"emptyLinePlaceholder":175},[91,83666,83667,83669,83671,83674],{"class":93,"line":8138},[91,83668,78706],{"class":97},[91,83670,62385],{"class":97},[91,83672,83673],{"class":97}," .tag",[91,83675,15695],{"class":250},[91,83677,83678,83680,83682,83684],{"class":93,"line":8144},[91,83679,55090],{"class":105},[91,83681,51518],{"class":250},[91,83683,60950],{"class":105},[91,83685,1415],{"class":250},[91,83687,83688,83690,83692,83694,83696],{"class":93,"line":8156},[91,83689,54776],{"class":105},[91,83691,51518],{"class":250},[91,83693,327],{"class":105},[91,83695,51573],{"class":153},[91,83697,1415],{"class":250},[91,83699,83700,83702,83704,83706,83708],{"class":93,"line":8168},[91,83701,55003],{"class":105},[91,83703,51518],{"class":250},[91,83705,747],{"class":105},[91,83707,51573],{"class":153},[91,83709,1415],{"class":250},[91,83711,83712,83714,83716,83718],{"class":93,"line":8180},[91,83713,57497],{"class":105},[91,83715,51518],{"class":250},[91,83717,62151],{"class":105},[91,83719,1415],{"class":250},[91,83721,83722],{"class":93,"line":9839},[91,83723,2310],{"class":250},[91,83725,83726],{"class":93,"line":9864},[91,83727,2523],{"emptyLinePlaceholder":175},[91,83729,83730,83732,83734],{"class":93,"line":9887},[91,83731,78706],{"class":97},[91,83733,78998],{"class":97},[91,83735,31547],{"class":250},[91,83737,83738,83740,83743],{"class":93,"line":9911},[91,83739,78706],{"class":97},[91,83741,83742],{"class":97}," .sub-total",[91,83744,15695],{"class":250},[91,83746,83747,83749,83751,83753,83755],{"class":93,"line":9916},[91,83748,55003],{"class":105},[91,83750,51518],{"class":250},[91,83752,899],{"class":105},[91,83754,51573],{"class":153},[91,83756,1415],{"class":250},[91,83758,83759,83761,83763,83765],{"class":93,"line":9921},[91,83760,57497],{"class":105},[91,83762,51518],{"class":250},[91,83764,79021],{"class":105},[91,83766,1415],{"class":250},[91,83768,83769,83771,83773,83775],{"class":93,"line":9926},[91,83770,61918],{"class":105},[91,83772,51518],{"class":250},[91,83774,466],{"class":105},[91,83776,1415],{"class":250},[91,83778,83779],{"class":93,"line":9935},[91,83780,2310],{"class":250},[91,83782,83783],{"class":93,"line":9940},[91,83784,2523],{"emptyLinePlaceholder":175},[91,83786,83787,83789,83791],{"class":93,"line":9946},[91,83788,78706],{"class":97},[91,83790,79038],{"class":97},[91,83792,31547],{"class":250},[91,83794,83795,83797,83800],{"class":93,"line":9967},[91,83796,78706],{"class":97},[91,83798,83799],{"class":97}," .sub-total::before",[91,83801,31547],{"class":250},[91,83803,83804,83807],{"class":93,"line":9973},[91,83805,83806],{"class":97},"    .amount::before",[91,83808,15695],{"class":250},[91,83810,83811,83813,83815,83817],{"class":93,"line":9987},[91,83812,79045],{"class":105},[91,83814,51518],{"class":250},[91,83816,79050],{"class":101},[91,83818,1415],{"class":250},[91,83820,83821,83823,83825,83827,83829],{"class":93,"line":9993},[91,83822,55003],{"class":105},[91,83824,51518],{"class":250},[91,83826,747],{"class":105},[91,83828,51573],{"class":153},[91,83830,1415],{"class":250},[91,83832,83833],{"class":93,"line":10020},[91,83834,2310],{"class":250},[91,83836,83837],{"class":93,"line":10029},[91,83838,2523],{"emptyLinePlaceholder":175},[91,83840,83841,83843,83846],{"class":93,"line":10035},[91,83842,78706],{"class":97},[91,83844,83845],{"class":97}," .spec",[91,83847,15695],{"class":250},[91,83849,83850,83852,83854,83856],{"class":93,"line":10043},[91,83851,61918],{"class":105},[91,83853,51518],{"class":250},[91,83855,327],{"class":105},[91,83857,1415],{"class":250},[91,83859,83860,83862,83864,83867],{"class":93,"line":10048},[91,83861,57497],{"class":105},[91,83863,51518],{"class":250},[91,83865,83866],{"class":105},"#888",[91,83868,1415],{"class":250},[91,83870,83871,83873,83875,83877,83879],{"class":93,"line":16727},[91,83872,55003],{"class":105},[91,83874,51518],{"class":250},[91,83876,798],{"class":105},[91,83878,51573],{"class":153},[91,83880,1415],{"class":250},[91,83882,83883,83885,83887,83889,83891],{"class":93,"line":16733},[91,83884,62081],{"class":105},[91,83886,51518],{"class":250},[91,83888,949],{"class":105},[91,83890,51573],{"class":153},[91,83892,1415],{"class":250},[91,83894,83895],{"class":93,"line":16756},[91,83896,2310],{"class":250},[91,83898,83899],{"class":93,"line":16762},[91,83900,2523],{"emptyLinePlaceholder":175},[91,83902,83903,83905,83908],{"class":93,"line":16785},[91,83904,78706],{"class":97},[91,83906,83907],{"class":97}," .count",[91,83909,15695],{"class":250},[91,83911,83912,83914,83916,83918],{"class":93,"line":16799},[91,83913,61918],{"class":105},[91,83915,51518],{"class":250},[91,83917,466],{"class":105},[91,83919,1415],{"class":250},[91,83921,83922,83924,83926,83929],{"class":93,"line":16819},[91,83923,57497],{"class":105},[91,83925,51518],{"class":250},[91,83927,83928],{"class":105},"#aaa",[91,83930,1415],{"class":250},[91,83932,83933],{"class":93,"line":16825},[91,83934,2310],{"class":250},[91,83936,83937],{"class":93,"line":16836},[91,83938,2523],{"emptyLinePlaceholder":175},[91,83940,83941,83943],{"class":93,"line":16859},[91,83942,72556],{"class":97},[91,83944,15695],{"class":250},[91,83946,83947,83949,83951,83953,83955],{"class":93,"line":16881},[91,83948,54852],{"class":105},[91,83950,51518],{"class":250},[91,83952,78655],{"class":105},[91,83954,51573],{"class":153},[91,83956,1415],{"class":250},[91,83958,83959,83961,83963,83965,83967],{"class":93,"line":16886},[91,83960,54787],{"class":105},[91,83962,51518],{"class":250},[91,83964,440],{"class":105},[91,83966,51637],{"class":105},[91,83968,1415],{"class":250},[91,83970,83971,83973,83975,83977],{"class":93,"line":16892},[91,83972,55090],{"class":105},[91,83974,51518],{"class":250},[91,83976,51558],{"class":105},[91,83978,1415],{"class":250},[91,83980,83981,83983,83985,83987],{"class":93,"line":16906},[91,83982,55101],{"class":105},[91,83984,51518],{"class":250},[91,83986,51661],{"class":105},[91,83988,1415],{"class":250},[91,83990,83991,83994,83996,83998,84000,84002,84005],{"class":93,"line":16919},[91,83992,83993],{"class":105},"      border-top",[91,83995,51518],{"class":250},[91,83997,466],{"class":105},[91,83999,51573],{"class":153},[91,84001,51602],{"class":105},[91,84003,84004],{"class":105}," #4e4e4e",[91,84006,1415],{"class":250},[91,84008,84009,84011,84013,84015,84017],{"class":93,"line":16924},[91,84010,54776],{"class":105},[91,84012,51518],{"class":250},[91,84014,949],{"class":105},[91,84016,51573],{"class":153},[91,84018,1415],{"class":250},[91,84020,84021],{"class":93,"line":16938},[91,84022,2310],{"class":250},[91,84024,84025],{"class":93,"line":16943},[91,84026,2523],{"emptyLinePlaceholder":175},[91,84028,84029,84031,84034],{"class":93,"line":16949},[91,84030,72556],{"class":97},[91,84032,84033],{"class":97}," .amount",[91,84035,15695],{"class":250},[91,84037,84038,84040,84042,84044,84046],{"class":93,"line":16954},[91,84039,55003],{"class":105},[91,84041,51518],{"class":250},[91,84043,899],{"class":105},[91,84045,51573],{"class":153},[91,84047,1415],{"class":250},[91,84049,84050,84052,84054,84056],{"class":93,"line":16968},[91,84051,57497],{"class":105},[91,84053,51518],{"class":250},[91,84055,79021],{"class":105},[91,84057,1415],{"class":250},[91,84059,84060,84062,84064,84066],{"class":93,"line":16973},[91,84061,62415],{"class":105},[91,84063,51518],{"class":250},[91,84065,51570],{"class":105},[91,84067,1415],{"class":250},[91,84069,84070,84072,84074,84076,84078],{"class":93,"line":16978},[91,84071,61831],{"class":105},[91,84073,51518],{"class":250},[91,84075,905],{"class":105},[91,84077,51573],{"class":153},[91,84079,1415],{"class":250},[91,84081,84082],{"class":93,"line":16992},[91,84083,2310],{"class":250},[91,84085,84086,84088,84090],{"class":93,"line":17004},[91,84087,52498],{"class":250},[91,84089,168],{"class":51381},[91,84091,51388],{"class":250},[91,84093,84094,84096,84098],{"class":93,"line":17009},[91,84095,51866],{"class":250},[91,84097,51415],{"class":51381},[91,84099,51388],{"class":250},[91,84101,84102],{"class":93,"line":17022},[91,84103,2523],{"emptyLinePlaceholder":175},[91,84105,84106,84108,84110],{"class":93,"line":17027},[91,84107,1159],{"class":250},[91,84109,51881],{"class":51381},[91,84111,51388],{"class":250},[91,84113,84114,84116,84118,84120,84122,84124],{"class":93,"line":17032},[91,84115,52225],{"class":250},[91,84117,51692],{"class":51381},[91,84119,53567],{"class":97},[91,84121,296],{"class":250},[91,84123,62689],{"class":101},[91,84125,51388],{"class":250},[91,84127,84128,84130,84132],{"class":93,"line":17037},[91,84129,52498],{"class":250},[91,84131,51692],{"class":51381},[91,84133,51388],{"class":250},[91,84135,84136,84138,84140,84142,84144,84146],{"class":93,"line":17050},[91,84137,52225],{"class":250},[91,84139,51692],{"class":51381},[91,84141,53567],{"class":97},[91,84143,296],{"class":250},[91,84145,62661],{"class":101},[91,84147,51388],{"class":250},[91,84149,84150,84152,84154,84157,84159,84161,84163,84166,84168,84170,84172,84174],{"class":93,"line":17055},[91,84151,51422],{"class":250},[91,84153,51692],{"class":51381},[91,84155,84156],{"class":250},">合计：\u003C",[91,84158,91],{"class":51381},[91,84160,53567],{"class":97},[91,84162,296],{"class":250},[91,84164,84165],{"class":101},"\"amount\"",[91,84167,55395],{"class":250},[91,84169,91],{"class":51381},[91,84171,55395],{"class":250},[91,84173,51692],{"class":51381},[91,84175,51388],{"class":250},[91,84177,84178,84180,84182],{"class":93,"line":32714},[91,84179,52498],{"class":250},[91,84181,51692],{"class":51381},[91,84183,51388],{"class":250},[91,84185,84186,84188,84190],{"class":93,"line":32720},[91,84187,52225],{"class":250},[91,84189,51894],{"class":51381},[91,84191,51388],{"class":250},[91,84193,84194,84196,84198,84200],{"class":93,"line":32726},[91,84195,11344],{"class":153},[91,84197,79458],{"class":105},[91,84199,13687],{"class":153},[91,84201,55528],{"class":250},[91,84203,84204],{"class":93,"line":32732},[91,84205,79467],{"class":250},[91,84207,84208,84210,84212],{"class":93,"line":32738},[91,84209,79472],{"class":250},[91,84211,79475],{"class":101},[91,84213,31547],{"class":250},[91,84215,84216,84218,84220],{"class":93,"line":32749},[91,84217,79482],{"class":250},[91,84219,79485],{"class":101},[91,84221,31547],{"class":250},[91,84223,84224,84226,84229],{"class":93,"line":32755},[91,84225,79492],{"class":250},[91,84227,84228],{"class":105},"289.9",[91,84230,31547],{"class":250},[91,84232,84233,84235,84237],{"class":93,"line":32775},[91,84234,79502],{"class":250},[91,84236,79505],{"class":101},[91,84238,31547],{"class":250},[91,84240,84241,84244,84246],{"class":93,"line":32781},[91,84242,84243],{"class":250},"        count: ",[91,84245,327],{"class":105},[91,84247,31547],{"class":250},[91,84249,84250,84253,84256],{"class":93,"line":32792},[91,84251,84252],{"class":250},"        spec: { color: ",[91,84254,84255],{"class":101},"'白色'",[91,84257,55685],{"class":250},[91,84259,84260],{"class":93,"line":32798},[91,84261,77973],{"class":250},[91,84263,84264],{"class":93,"line":32804},[91,84265,79467],{"class":250},[91,84267,84268,84270,84272],{"class":93,"line":32810},[91,84269,79472],{"class":250},[91,84271,79566],{"class":101},[91,84273,31547],{"class":250},[91,84275,84276,84278,84280],{"class":93,"line":32816},[91,84277,79482],{"class":250},[91,84279,79575],{"class":101},[91,84281,31547],{"class":250},[91,84283,84284,84286,84289],{"class":93,"line":32822},[91,84285,79492],{"class":250},[91,84287,84288],{"class":105},"109.8",[91,84290,31547],{"class":250},[91,84292,84293,84295,84297],{"class":93,"line":32828},[91,84294,79502],{"class":250},[91,84296,79593],{"class":101},[91,84298,31547],{"class":250},[91,84300,84301,84303,84305],{"class":93,"line":32834},[91,84302,84243],{"class":250},[91,84304,321],{"class":105},[91,84306,31547],{"class":250},[91,84308,84309,84312,84314,84316,84318],{"class":93,"line":32854},[91,84310,84311],{"class":250},"        spec: { size: ",[91,84313,81984],{"class":101},[91,84315,55545],{"class":250},[91,84317,81989],{"class":101},[91,84319,55685],{"class":250},[91,84321,84322],{"class":93,"line":32860},[91,84323,77973],{"class":250},[91,84325,84326],{"class":93,"line":32876},[91,84327,79467],{"class":250},[91,84329,84330,84332,84334],{"class":93,"line":32882},[91,84331,79472],{"class":250},[91,84333,79610],{"class":101},[91,84335,31547],{"class":250},[91,84337,84338,84340,84342],{"class":93,"line":32896},[91,84339,79482],{"class":250},[91,84341,79619],{"class":101},[91,84343,31547],{"class":250},[91,84345,84346,84348,84351],{"class":93,"line":32902},[91,84347,79492],{"class":250},[91,84349,84350],{"class":105},"488",[91,84352,31547],{"class":250},[91,84354,84355,84357,84359],{"class":93,"line":32917},[91,84356,79502],{"class":250},[91,84358,79637],{"class":101},[91,84360,31547],{"class":250},[91,84362,84363,84365,84367],{"class":93,"line":32923},[91,84364,84243],{"class":250},[91,84366,466],{"class":105},[91,84368,31547],{"class":250},[91,84370,84371,84373,84376,84379,84382],{"class":93,"line":32932},[91,84372,84252],{"class":250},[91,84374,84375],{"class":101},"'青色'",[91,84377,84378],{"class":250},", sum: ",[91,84380,84381],{"class":101},"'一大四小'",[91,84383,55685],{"class":250},[91,84385,84386],{"class":93,"line":32938},[91,84387,77973],{"class":250},[91,84389,84390],{"class":93,"line":32947},[91,84391,79467],{"class":250},[91,84393,84394,84396,84398],{"class":93,"line":32953},[91,84395,79472],{"class":250},[91,84397,79654],{"class":101},[91,84399,31547],{"class":250},[91,84401,84402,84404,84406],{"class":93,"line":32959},[91,84403,79482],{"class":250},[91,84405,79663],{"class":101},[91,84407,31547],{"class":250},[91,84409,84410,84412,84415],{"class":93,"line":32968},[91,84411,79492],{"class":250},[91,84413,84414],{"class":105},"139",[91,84416,31547],{"class":250},[91,84418,84419,84421,84423],{"class":93,"line":32974},[91,84420,79502],{"class":250},[91,84422,79681],{"class":101},[91,84424,31547],{"class":250},[91,84426,84427,84429,84431],{"class":93,"line":32985},[91,84428,84243],{"class":250},[91,84430,466],{"class":105},[91,84432,31547],{"class":250},[91,84434,84435,84437,84440,84442,84445],{"class":93,"line":32991},[91,84436,84311],{"class":250},[91,84438,84439],{"class":101},"'小号'",[91,84441,55545],{"class":250},[91,84443,84444],{"class":101},"'紫色'",[91,84446,55551],{"class":250},[91,84448,84449,84452],{"class":93,"line":33010},[91,84450,84451],{"class":250},"        gift: ",[91,84453,84454],{"class":101},"'50g茶叶,清洗球'\n",[91,84456,84457],{"class":93,"line":33016},[91,84458,52479],{"class":250},[91,84460,84461],{"class":93,"line":33027},[91,84462,53190],{"class":250},[91,84464,84465],{"class":93,"line":33033},[91,84466,84467],{"class":308},"    \u002F\u002F  1.根据数据渲染页面\n",[91,84469,84470,84472,84474,84476,84478,84480,84482,84484,84486,84488,84490,84492],{"class":93,"line":33053},[91,84471,52488],{"class":250},[91,84473,54480],{"class":97},[91,84475,251],{"class":250},[91,84477,79982],{"class":101},[91,84479,74330],{"class":250},[91,84481,296],{"class":153},[91,84483,80129],{"class":250},[91,84485,74125],{"class":97},[91,84487,251],{"class":250},[91,84489,79876],{"class":5339},[91,84491,79879],{"class":153},[91,84493,15695],{"class":250},[91,84495,84496],{"class":93,"line":33069},[91,84497,84498],{"class":308},"      \u002F\u002F 对象解构\n",[91,84500,84501,84503,84505,84507,84509,84511,84513,84516,84518,84520,84522,84525,84527,84530,84532,84534],{"class":93,"line":33075},[91,84502,58309],{"class":153},[91,84504,79888],{"class":250},[91,84506,79901],{"class":105},[91,84508,12558],{"class":250},[91,84510,79891],{"class":105},[91,84512,12558],{"class":250},[91,84514,84515],{"class":105},"count",[91,84517,12558],{"class":250},[91,84519,79896],{"class":105},[91,84521,12558],{"class":250},[91,84523,84524],{"class":105},"spec",[91,84526,12558],{"class":250},[91,84528,84529],{"class":105},"gift",[91,84531,79904],{"class":250},[91,84533,296],{"class":153},[91,84535,79909],{"class":250},[91,84537,84538],{"class":93,"line":33089},[91,84539,84540],{"class":308},"      \u002F\u002F 规格文字模块处理\n",[91,84542,84543,84545,84548,84550,84552,84554,84556,84558,84560,84562],{"class":93,"line":33095},[91,84544,58309],{"class":153},[91,84546,84547],{"class":105}," text",[91,84549,13687],{"class":153},[91,84551,82019],{"class":250},[91,84553,82022],{"class":97},[91,84555,82025],{"class":250},[91,84557,74304],{"class":97},[91,84559,251],{"class":250},[91,84561,82032],{"class":101},[91,84563,257],{"class":250},[91,84565,84566],{"class":93,"line":33101},[91,84567,84568],{"class":308},"      \u002F\u002F 处理赠品模块\n",[91,84570,84571,84573,84575,84577,84580,84582,84584,84586,84588,84591,84593,84595,84597,84599,84601,84604,84606,84609,84611,84613,84615,84617,84619,84621],{"class":93,"line":33112},[91,84572,58309],{"class":153},[91,84574,74000],{"class":105},[91,84576,13687],{"class":153},[91,84578,84579],{"class":250}," gift ",[91,84581,1235],{"class":153},[91,84583,83193],{"class":250},[91,84585,83196],{"class":97},[91,84587,251],{"class":250},[91,84589,84590],{"class":101},"','",[91,84592,30907],{"class":250},[91,84594,74125],{"class":97},[91,84596,251],{"class":250},[91,84598,79876],{"class":5339},[91,84600,79879],{"class":153},[91,84602,84603],{"class":101}," `\u003Cspan class=\"tag\">【赠品】${",[91,84605,79876],{"class":250},[91,84607,84608],{"class":101},"}\u003C\u002Fspan>`",[91,84610,30907],{"class":250},[91,84612,74304],{"class":97},[91,84614,251],{"class":250},[91,84616,74309],{"class":101},[91,84618,13837],{"class":250},[91,84620,1108],{"class":153},[91,84622,70185],{"class":101},[91,84624,84625],{"class":93,"line":33118},[91,84626,84627],{"class":308},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[91,84629,84630,84632,84635,84637,84640,84642,84644,84646,84649,84651,84653,84655,84658,84660,84662],{"class":93,"line":33124},[91,84631,58309],{"class":153},[91,84633,84634],{"class":105}," subtotal",[91,84636,13687],{"class":153},[91,84638,84639],{"class":250}," ((price ",[91,84641,704],{"class":153},[91,84643,5877],{"class":105},[91,84645,6641],{"class":153},[91,84647,84648],{"class":250}," count) ",[91,84650,833],{"class":153},[91,84652,5877],{"class":105},[91,84654,30907],{"class":250},[91,84656,84657],{"class":97},"toFixed",[91,84659,251],{"class":250},[91,84661,327],{"class":105},[91,84663,257],{"class":250},[91,84665,84666],{"class":93,"line":33134},[91,84667,2523],{"emptyLinePlaceholder":175},[91,84669,84670,84672],{"class":93,"line":33140},[91,84671,74063],{"class":153},[91,84673,70249],{"class":101},[91,84675,84676],{"class":93,"line":33151},[91,84677,84678],{"class":101},"        \u003Cdiv class=\"item\">\n",[91,84680,84681,84684,84686],{"class":93,"line":33157},[91,84682,84683],{"class":101},"          \u003Cimg src=\"${",[91,84685,79901],{"class":250},[91,84687,79933],{"class":101},[91,84689,84690,84693,84695,84698,84700],{"class":93,"line":33167},[91,84691,84692],{"class":101},"          \u003Cp class=\"name\">${",[91,84694,79891],{"class":250},[91,84696,84697],{"class":101},"}${",[91,84699,1424],{"class":250},[91,84701,79943],{"class":101},[91,84703,84704,84707,84709],{"class":93,"line":33172},[91,84705,84706],{"class":101},"          \u003Cp class=\"spec\">${",[91,84708,5310],{"class":250},[91,84710,79943],{"class":101},[91,84712,84713,84716,84718,84720,84722,84724,84726,84728],{"class":93,"line":33178},[91,84714,84715],{"class":101},"          \u003Cp class=\"price\">${",[91,84717,79896],{"class":250},[91,84719,807],{"class":101},[91,84721,84657],{"class":97},[91,84723,251],{"class":101},[91,84725,327],{"class":105},[91,84727,678],{"class":101},[91,84729,79943],{"class":101},[91,84731,84732,84735,84737],{"class":93,"line":33227},[91,84733,84734],{"class":101},"          \u003Cp class=\"count\">x${",[91,84736,84515],{"class":250},[91,84738,79943],{"class":101},[91,84740,84741,84744,84747],{"class":93,"line":33274},[91,84742,84743],{"class":101},"          \u003Cp class=\"sub-total\">${",[91,84745,84746],{"class":250},"subtotal",[91,84748,79943],{"class":101},[91,84750,84751],{"class":93,"line":33279},[91,84752,84753],{"class":101},"        \u003C\u002Fdiv> \n",[91,84755,84756],{"class":93,"line":33285},[91,84757,84758],{"class":101},"             `\n",[91,84760,84761,84764,84766,84768,84770],{"class":93,"line":33304},[91,84762,84763],{"class":250},"    }).",[91,84765,74304],{"class":97},[91,84767,251],{"class":250},[91,84769,74309],{"class":101},[91,84771,257],{"class":250},[91,84773,84774],{"class":93,"line":33310},[91,84775,84776],{"class":308},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[91,84778,84779,84781,84783,84785,84787,84790,84792,84795,84797,84799,84801,84804,84807,84809,84812,84814,84816,84818,84821,84823,84825,84827,84829],{"class":93,"line":33330},[91,84780,11344],{"class":153},[91,84782,62866],{"class":105},[91,84784,13687],{"class":153},[91,84786,80129],{"class":250},[91,84788,84789],{"class":97},"reduce",[91,84791,2499],{"class":250},[91,84793,84794],{"class":5339},"prev",[91,84796,12558],{"class":250},[91,84798,79876],{"class":5339},[91,84800,13837],{"class":250},[91,84802,84803],{"class":153},"=>",[91,84805,84806],{"class":250}," prev ",[91,84808,730],{"class":153},[91,84810,84811],{"class":250}," (item.price ",[91,84813,704],{"class":153},[91,84815,5877],{"class":105},[91,84817,6641],{"class":153},[91,84819,84820],{"class":250}," item.count) ",[91,84822,833],{"class":153},[91,84824,5877],{"class":105},[91,84826,12558],{"class":250},[91,84828,440],{"class":105},[91,84830,257],{"class":250},[91,84832,84833,84835,84837,84839,84842,84844,84846,84849,84851,84853,84855],{"class":93,"line":33336},[91,84834,52488],{"class":250},[91,84836,54480],{"class":97},[91,84838,251],{"class":250},[91,84840,84841],{"class":101},"'.amount'",[91,84843,74330],{"class":250},[91,84845,296],{"class":153},[91,84847,84848],{"class":250}," total.",[91,84850,84657],{"class":97},[91,84852,251],{"class":250},[91,84854,327],{"class":105},[91,84856,257],{"class":250},[91,84858,84859,84861,84863],{"class":93,"line":33342},[91,84860,52498],{"class":250},[91,84862,51894],{"class":51381},[91,84864,51388],{"class":250},[91,84866,84867,84869,84871],{"class":93,"line":33352},[91,84868,51866],{"class":250},[91,84870,51881],{"class":51381},[91,84872,51388],{"class":250},[91,84874,84875],{"class":93,"line":33357},[91,84876,2523],{"emptyLinePlaceholder":175},[91,84878,84879,84881,84883],{"class":93,"line":33363},[91,84880,51866],{"class":250},[91,84882,50716],{"class":51381},[91,84884,51388],{"class":250},[190,84886,84888],{"id":84887},"_411-编程思想","4.11 编程思想",[217,84890,84892],{"id":84891},"_4111-面向过程介绍","4.11.1 面向过程介绍",[21,84894,84895,84898],{},[398,84896,84897],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[21,84900,84901],{},"调用就可以了",[21,84903,84904],{},[24,84905],{"alt":26,"src":84906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[217,84908,84910],{"id":84909},"_4112-面向对象","4.11.2 面向对象",[21,84912,84913],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[21,84915,84916],{},[24,84917],{"alt":26,"src":84918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[21,84920,84921],{},"面向对象的特性：",[1256,84923,84924,84927,84930],{},[17,84925,84926],{},"封装性",[17,84928,84929],{},"继承性",[17,84931,84932],{},"多态性",[217,84934,84936],{"id":84935},"_4113-两者比较","4.11.3 两者比较",[21,84938,84939],{},[24,84940],{"alt":26,"src":84941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[190,84943,84945],{"id":84944},"_412-构造函数回顾","4.12 构造函数回顾",[21,84947,84948],{},[24,84949],{"alt":26,"src":84950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[21,84952,84953],{},[24,84954],{"alt":26,"src":84955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[21,84957,84958],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[21,84960,84961],{},[24,84962],{"alt":26,"src":84963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[190,84965,84967],{"id":84966},"_413-原型","4.13 原型",[217,84969,84971],{"id":84970},"_4131-原型对象的认识","4.13.1 原型对象的认识",[21,84973,84974],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[21,84976,84977],{},[24,84978],{"alt":26,"src":84979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[21,84981,84982],{},[24,84983],{"alt":26,"src":84984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[21,84986,84987],{},"原型是构造函数的属性，它也是一个对象",[21,84989,84990],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[21,84992,84993],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[82,84995,84997],{"className":53148,"code":84996,"language":53150,"meta":26,"style":26},"\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",[88,84998,84999,85007,85012,85020,85025,85030,85035,85040,85045,85049,85053,85057,85062,85067,85071,85076,85081,85086,85091,85096,85100,85108],{"__ignoreMap":26},[91,85000,85001,85003,85005],{"class":93,"line":94},[91,85002,1159],{"class":250},[91,85004,51881],{"class":51381},[91,85006,51388],{"class":250},[91,85008,85009],{"class":93,"line":38},[91,85010,85011],{"class":308},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[91,85013,85014,85016,85018],{"class":93,"line":1304},[91,85015,52225],{"class":250},[91,85017,51894],{"class":51381},[91,85019,51388],{"class":250},[91,85021,85022],{"class":93,"line":1319},[91,85023,85024],{"class":250},"    function Star(uname, age) {\n",[91,85026,85027],{"class":93,"line":1325},[91,85028,85029],{"class":250},"      this.uname = uname,\n",[91,85031,85032],{"class":93,"line":1339},[91,85033,85034],{"class":250},"        this.age = age\n",[91,85036,85037],{"class":93,"line":1345},[91,85038,85039],{"class":250},"      \u002F\u002F this.sing = function () {\n",[91,85041,85042],{"class":93,"line":1436},[91,85043,85044],{"class":250},"      \u002F\u002F   console.log('唱歌')\n",[91,85046,85047],{"class":93,"line":1442},[91,85048,2523],{"emptyLinePlaceholder":175},[91,85050,85051],{"class":93,"line":1454},[91,85052,60118],{"class":250},[91,85054,85055],{"class":93,"line":1736},[91,85056,2310],{"class":250},[91,85058,85059],{"class":93,"line":1741},[91,85060,85061],{"class":250},"    Star.prototype.sing = function () {\n",[91,85063,85064],{"class":93,"line":1747},[91,85065,85066],{"class":250},"      console.log('唱歌')\n",[91,85068,85069],{"class":93,"line":1752},[91,85070,2310],{"class":250},[91,85072,85073],{"class":93,"line":1766},[91,85074,85075],{"class":250},"    \u002F\u002F console.dir(Star.prototype)\n",[91,85077,85078],{"class":93,"line":1771},[91,85079,85080],{"class":250},"    const pink = new Star('pink', 18)\n",[91,85082,85083],{"class":93,"line":1777},[91,85084,85085],{"class":250},"    const red = new Star('red', 20)\n",[91,85087,85088],{"class":93,"line":1798},[91,85089,85090],{"class":250},"    pink.sing()\n",[91,85092,85093],{"class":93,"line":1803},[91,85094,85095],{"class":250},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[91,85097,85098],{"class":93,"line":1817},[91,85099,2523],{"emptyLinePlaceholder":175},[91,85101,85102,85104,85106],{"class":93,"line":1822},[91,85103,52498],{"class":250},[91,85105,51894],{"class":51381},[91,85107,51388],{"class":250},[91,85109,85110,85112,85114],{"class":93,"line":1851},[91,85111,51866],{"class":250},[91,85113,51881],{"class":51381},[91,85115,51388],{"class":250},[21,85117,85118],{},[24,85119],{"alt":26,"src":85120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[82,85122,85124],{"className":53148,"code":85123,"language":53150,"meta":26,"style":26},"\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",[88,85125,85126,85134,85142,85147,85152,85157,85162,85166,85171,85176,85181,85185,85190,85194,85198,85203,85207,85215],{"__ignoreMap":26},[91,85127,85128,85130,85132],{"class":93,"line":94},[91,85129,1159],{"class":250},[91,85131,51881],{"class":51381},[91,85133,51388],{"class":250},[91,85135,85136,85138,85140],{"class":93,"line":38},[91,85137,52225],{"class":250},[91,85139,51894],{"class":51381},[91,85141,51388],{"class":250},[91,85143,85144],{"class":93,"line":1304},[91,85145,85146],{"class":250},"    let that\n",[91,85148,85149],{"class":93,"line":1319},[91,85150,85151],{"class":250},"    function Star(uname) {\n",[91,85153,85154],{"class":93,"line":1325},[91,85155,85156],{"class":250},"      this.uname = uname\n",[91,85158,85159],{"class":93,"line":1339},[91,85160,85161],{"class":250},"      that = this\n",[91,85163,85164],{"class":93,"line":1345},[91,85165,2310],{"class":250},[91,85167,85168],{"class":93,"line":1436},[91,85169,85170],{"class":250},"    \u002F\u002F 实例对象是 ldh\n",[91,85172,85173],{"class":93,"line":1442},[91,85174,85175],{"class":250},"    const ldh = new Star('刘德华')\n",[91,85177,85178],{"class":93,"line":1454},[91,85179,85180],{"class":250},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[91,85182,85183],{"class":93,"line":1736},[91,85184,2523],{"emptyLinePlaceholder":175},[91,85186,85187],{"class":93,"line":1741},[91,85188,85189],{"class":250},"    Star.sing = function () {\n",[91,85191,85192],{"class":93,"line":1747},[91,85193,85066],{"class":250},[91,85195,85196],{"class":93,"line":1752},[91,85197,2310],{"class":250},[91,85199,85200],{"class":93,"line":1766},[91,85201,85202],{"class":250},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[91,85204,85205],{"class":93,"line":1771},[91,85206,2523],{"emptyLinePlaceholder":175},[91,85208,85209,85211,85213],{"class":93,"line":1777},[91,85210,52498],{"class":250},[91,85212,51894],{"class":51381},[91,85214,51388],{"class":250},[91,85216,85217,85219,85221],{"class":93,"line":1798},[91,85218,51866],{"class":250},[91,85220,51881],{"class":51381},[91,85222,51388],{"class":250},[21,85224,85225],{},"构造函数的this指向的是实例对象；",[21,85227,85228],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[217,85230,85232],{"id":85231},"_4132-数组扩展方法","4.13.2 数组扩展方法",[21,85234,85235],{},[24,85236],{"alt":26,"src":85237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[82,85239,85241],{"className":53148,"code":85240,"language":53150,"meta":26,"style":26},"\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",[88,85242,85243,85251,85259,85264,85269,85274,85279,85284,85289,85294,85299,85304,85309,85313,85318,85323,85328,85333,85337,85342,85347,85352,85357,85361,85366,85371,85376,85381,85385,85390,85394,85402],{"__ignoreMap":26},[91,85244,85245,85247,85249],{"class":93,"line":94},[91,85246,1159],{"class":250},[91,85248,51881],{"class":51381},[91,85250,51388],{"class":250},[91,85252,85253,85255,85257],{"class":93,"line":38},[91,85254,52225],{"class":250},[91,85256,51894],{"class":51381},[91,85258,51388],{"class":250},[91,85260,85261],{"class":93,"line":1304},[91,85262,85263],{"class":250},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[91,85265,85266],{"class":93,"line":1319},[91,85267,85268],{"class":250},"    const arr = [1, 2, 3]\n",[91,85270,85271],{"class":93,"line":1325},[91,85272,85273],{"class":250},"    \u002F\u002F 自己定义数组的扩展方法\n",[91,85275,85276],{"class":93,"line":1339},[91,85277,85278],{"class":250},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[91,85280,85281],{"class":93,"line":1345},[91,85282,85283],{"class":250},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[91,85285,85286],{"class":93,"line":1436},[91,85287,85288],{"class":250},"    \u002F\u002F ①.最大值\n",[91,85290,85291],{"class":93,"line":1442},[91,85292,85293],{"class":250},"    Array.prototype.max = function () {\n",[91,85295,85296],{"class":93,"line":1454},[91,85297,85298],{"class":250},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[91,85300,85301],{"class":93,"line":1736},[91,85302,85303],{"class":250},"      return Math.max(...this)\n",[91,85305,85306],{"class":93,"line":1741},[91,85307,85308],{"class":250},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[91,85310,85311],{"class":93,"line":1747},[91,85312,2310],{"class":250},[91,85314,85315],{"class":93,"line":1752},[91,85316,85317],{"class":250},"    console.log(arr.max())\n",[91,85319,85320],{"class":93,"line":1766},[91,85321,85322],{"class":250},"    \u002F\u002F ②最小值\n",[91,85324,85325],{"class":93,"line":1771},[91,85326,85327],{"class":250},"    Array.prototype.min = function () {\n",[91,85329,85330],{"class":93,"line":1777},[91,85331,85332],{"class":250},"      return Math.min(...this)\n",[91,85334,85335],{"class":93,"line":1798},[91,85336,2310],{"class":250},[91,85338,85339],{"class":93,"line":1803},[91,85340,85341],{"class":250},"    console.log(arr.min())\n",[91,85343,85344],{"class":93,"line":1817},[91,85345,85346],{"class":250},"    \u002F\u002F③求和\n",[91,85348,85349],{"class":93,"line":1822},[91,85350,85351],{"class":250},"    Array.prototype.sum = function () {\n",[91,85353,85354],{"class":93,"line":1851},[91,85355,85356],{"class":250},"      return this.reduce((prev, current) => prev + current, 0)\n",[91,85358,85359],{"class":93,"line":1856},[91,85360,2310],{"class":250},[91,85362,85363],{"class":93,"line":1873},[91,85364,85365],{"class":250},"    console.log(arr.sum())\n",[91,85367,85368],{"class":93,"line":1878},[91,85369,85370],{"class":250},"    \u002F\u002F ③排序\n",[91,85372,85373],{"class":93,"line":1883},[91,85374,85375],{"class":250},"    Array.prototype.rever = function () {\n",[91,85377,85378],{"class":93,"line":1888},[91,85379,85380],{"class":250},"      return this.reverse()\n",[91,85382,85383],{"class":93,"line":1902},[91,85384,2310],{"class":250},[91,85386,85387],{"class":93,"line":1907},[91,85388,85389],{"class":250},"    console.log(arr.rever())\n",[91,85391,85392],{"class":93,"line":2700},[91,85393,2523],{"emptyLinePlaceholder":175},[91,85395,85396,85398,85400],{"class":93,"line":2714},[91,85397,52498],{"class":250},[91,85399,51894],{"class":51381},[91,85401,51388],{"class":250},[91,85403,85404,85406,85408],{"class":93,"line":2722},[91,85405,51866],{"class":250},[91,85407,51881],{"class":51381},[91,85409,51388],{"class":250},[21,85411,85412],{},[24,85413],{"alt":26,"src":85414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[217,85416,85418],{"id":85417},"_4133-constructor-属性","4.13.3 constructor 属性",[21,85420,85421],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[21,85423,85424],{},[24,85425],{"alt":26,"src":85426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[82,85428,85430],{"className":53148,"code":85429,"language":53150,"meta":26,"style":26},"\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",[88,85431,85432,85440,85448,85453,85458,85462,85467,85472,85477,85485],{"__ignoreMap":26},[91,85433,85434,85436,85438],{"class":93,"line":94},[91,85435,1159],{"class":250},[91,85437,51881],{"class":51381},[91,85439,51388],{"class":250},[91,85441,85442,85444,85446],{"class":93,"line":38},[91,85443,52225],{"class":250},[91,85445,51894],{"class":51381},[91,85447,51388],{"class":250},[91,85449,85450],{"class":93,"line":1304},[91,85451,85452],{"class":250},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[91,85454,85455],{"class":93,"line":1319},[91,85456,85457],{"class":250},"    function Star() {\n",[91,85459,85460],{"class":93,"line":1325},[91,85461,2310],{"class":250},[91,85463,85464],{"class":93,"line":1339},[91,85465,85466],{"class":250},"    const ldh = new Star()\n",[91,85468,85469],{"class":93,"line":1345},[91,85470,85471],{"class":250},"    console.log(Star.prototype)\n",[91,85473,85474],{"class":93,"line":1436},[91,85475,85476],{"class":250},"    console.log(Star.prototype.constructor === Star)\n",[91,85478,85479,85481,85483],{"class":93,"line":1442},[91,85480,52498],{"class":250},[91,85482,51894],{"class":51381},[91,85484,51388],{"class":250},[91,85486,85487,85489,85491],{"class":93,"line":1454},[91,85488,51866],{"class":250},[91,85490,51881],{"class":51381},[91,85492,51388],{"class":250},[21,85494,85495],{},[24,85496],{"alt":26,"src":85497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[21,85499,85500],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[82,85502,85504],{"className":53148,"code":85503,"language":53150,"meta":26,"style":26},"  \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",[88,85505,85506,85514,85518,85522,85526,85531,85536,85541,85545,85550,85555,85560,85565,85570,85575,85579,85583,85588,85593,85598,85602,85607,85612,85616,85620,85624],{"__ignoreMap":26},[91,85507,85508,85510,85512],{"class":93,"line":94},[91,85509,52225],{"class":250},[91,85511,51894],{"class":51381},[91,85513,51388],{"class":250},[91,85515,85516],{"class":93,"line":38},[91,85517,85452],{"class":250},[91,85519,85520],{"class":93,"line":1304},[91,85521,85457],{"class":250},[91,85523,85524],{"class":93,"line":1319},[91,85525,2310],{"class":250},[91,85527,85528],{"class":93,"line":1325},[91,85529,85530],{"class":250},"    \u002F\u002F const ldh = new Star()\n",[91,85532,85533],{"class":93,"line":1339},[91,85534,85535],{"class":250},"    \u002F\u002F console.log(Star.prototype)\n",[91,85537,85538],{"class":93,"line":1345},[91,85539,85540],{"class":250},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[91,85542,85543],{"class":93,"line":1436},[91,85544,2523],{"emptyLinePlaceholder":175},[91,85546,85547],{"class":93,"line":1442},[91,85548,85549],{"class":250},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[91,85551,85552],{"class":93,"line":1454},[91,85553,85554],{"class":250},"    \u002F\u002F Star.prototype.sing = function () {\n",[91,85556,85557],{"class":93,"line":1736},[91,85558,85559],{"class":250},"    \u002F\u002F   console.log('唱歌')\n",[91,85561,85562],{"class":93,"line":1741},[91,85563,85564],{"class":250},"    \u002F\u002F }\n",[91,85566,85567],{"class":93,"line":1747},[91,85568,85569],{"class":250},"    \u002F\u002F Star.prototype.dance = function () {\n",[91,85571,85572],{"class":93,"line":1752},[91,85573,85574],{"class":250},"    \u002F\u002F   console.log('跳舞')\n",[91,85576,85577],{"class":93,"line":1766},[91,85578,85564],{"class":250},[91,85580,85581],{"class":93,"line":1771},[91,85582,85471],{"class":250},[91,85584,85585],{"class":93,"line":1777},[91,85586,85587],{"class":250},"    Star.prototype = {\n",[91,85589,85590],{"class":93,"line":1798},[91,85591,85592],{"class":250},"      sing: function () {\n",[91,85594,85595],{"class":93,"line":1803},[91,85596,85597],{"class":250},"        console.log('唱歌')\n",[91,85599,85600],{"class":93,"line":1817},[91,85601,77973],{"class":250},[91,85603,85604],{"class":93,"line":1822},[91,85605,85606],{"class":250},"      dance: function () {\n",[91,85608,85609],{"class":93,"line":1851},[91,85610,85611],{"class":250},"        console.log('跳舞')\n",[91,85613,85614],{"class":93,"line":1856},[91,85615,52479],{"class":250},[91,85617,85618],{"class":93,"line":1873},[91,85619,2310],{"class":250},[91,85621,85622],{"class":93,"line":1878},[91,85623,85471],{"class":250},[91,85625,85626,85628,85630],{"class":93,"line":1883},[91,85627,52498],{"class":250},[91,85629,51894],{"class":51381},[91,85631,51388],{"class":250},[21,85633,85634],{},"进行输出结果后会发现：",[21,85636,85637],{},[24,85638],{"alt":26,"src":85639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[21,85641,85642],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[21,85644,85645],{},"所以，要重新指回创造这个原型对象的构造函数",[82,85647,85649],{"className":71294,"code":85648,"language":71296,"meta":26,"style":26},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[88,85650,85651,85665,85670,85675,85686,85699,85704,85715,85729,85733],{"__ignoreMap":26},[91,85652,85653,85656,85658,85661,85663],{"class":93,"line":94},[91,85654,85655],{"class":105},"Star",[91,85657,807],{"class":250},[91,85659,85660],{"class":105},"prototype",[91,85662,13687],{"class":153},[91,85664,15695],{"class":250},[91,85666,85667],{"class":93,"line":38},[91,85668,85669],{"class":308},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[91,85671,85672],{"class":93,"line":1304},[91,85673,85674],{"class":250},"  constructor: Star,\n",[91,85676,85677,85680,85682,85684],{"class":93,"line":1319},[91,85678,85679],{"class":97},"  sing",[91,85681,51518],{"class":250},[91,85683,54530],{"class":153},[91,85685,54533],{"class":250},[91,85687,85688,85690,85692,85694,85697],{"class":93,"line":1325},[91,85689,73834],{"class":250},[91,85691,58328],{"class":97},[91,85693,251],{"class":250},[91,85695,85696],{"class":101},"'唱歌'",[91,85698,257],{"class":250},[91,85700,85701],{"class":93,"line":1339},[91,85702,85703],{"class":250},"   },\n",[91,85705,85706,85709,85711,85713],{"class":93,"line":1345},[91,85707,85708],{"class":97},"   dance",[91,85710,51518],{"class":250},[91,85712,54530],{"class":153},[91,85714,54533],{"class":250},[91,85716,85717,85720,85722,85724,85727],{"class":93,"line":1436},[91,85718,85719],{"class":250},"     console.",[91,85721,58328],{"class":97},[91,85723,251],{"class":250},[91,85725,85726],{"class":101},"'跳舞'",[91,85728,257],{"class":250},[91,85730,85731],{"class":93,"line":1442},[91,85732,4432],{"class":250},[91,85734,85735],{"class":93,"line":1454},[91,85736,1689],{"class":250},[21,85738,85739],{},[24,85740],{"alt":26,"src":85741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[21,85743,85744],{},"总结1：",[21,85746,85747],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[21,85749,85750],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[21,85752,85753],{},"constructor指的是他的来源",[21,85755,85756],{},[24,85757],{"alt":26,"src":85758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[21,85760,85761],{},[24,85762],{"alt":26,"src":85763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[21,85765,85766],{},"总结2：",[21,85768,85769],{},[24,85770],{"alt":26,"src":85771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[21,85773,85774],{},[24,85775],{"alt":26,"src":85776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[21,85778,85779],{},[24,85780],{"alt":26,"src":85781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[217,85783,85785],{"id":85784},"_4134-对象原型","4.13.4 对象原型",[21,85787,85788],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[21,85790,85791],{},"对象原型就是__proto__这个属性",[21,85793,85794],{},[24,85795],{"alt":26,"src":85796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[21,85798,85799],{},[24,85800],{"alt":26,"src":85801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[21,85803,85804],{},[24,85805],{"alt":26,"src":85806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[21,85808,85809],{},[24,85810],{"alt":26,"src":85811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[82,85813,85815],{"className":53148,"code":85814,"language":53150,"meta":26,"style":26},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[88,85816,85817,85825,85833,85837,85841,85845,85850,85858],{"__ignoreMap":26},[91,85818,85819,85821,85823],{"class":93,"line":94},[91,85820,1159],{"class":250},[91,85822,51881],{"class":51381},[91,85824,51388],{"class":250},[91,85826,85827,85829,85831],{"class":93,"line":38},[91,85828,52225],{"class":250},[91,85830,51894],{"class":51381},[91,85832,51388],{"class":250},[91,85834,85835],{"class":93,"line":1304},[91,85836,85457],{"class":250},[91,85838,85839],{"class":93,"line":1319},[91,85840,2310],{"class":250},[91,85842,85843],{"class":93,"line":1325},[91,85844,85466],{"class":250},[91,85846,85847],{"class":93,"line":1339},[91,85848,85849],{"class":250},"    console.log(ldh)\n",[91,85851,85852,85854,85856],{"class":93,"line":1345},[91,85853,52498],{"class":250},[91,85855,51894],{"class":51381},[91,85857,51388],{"class":250},[91,85859,85860,85862,85864],{"class":93,"line":1436},[91,85861,51866],{"class":250},[91,85863,51881],{"class":51381},[91,85865,51388],{"class":250},[21,85867,85868],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[21,85870,85871],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[21,85873,85874],{},[24,85875],{"alt":26,"src":85876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[21,85878,85879],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[21,85881,85882],{},"对象原型指向原型对象",[21,85884,85885],{},[24,85886],{"alt":26,"src":85887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[21,85889,85890],{},[24,85891],{"alt":26,"src":85892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[21,85894,85895],{},[24,85896],{"alt":26,"src":85897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[217,85899,85901],{"id":85900},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[21,85903,85904],{},[24,85905],{"alt":26,"src":85906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[14,85908,85909,85912,85915,85918],{},[17,85910,85911],{},"构造函数通过new的形式实例化得到实例对象",[17,85913,85914],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[17,85916,85917],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[17,85919,85920],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[21,85922,85923],{},[24,85924],{"alt":26,"src":85925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[21,85927,85928],{},"题目梳理：",[21,85930,85931],{},[24,85932],{"alt":26,"src":85933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[217,85935,85937],{"id":85936},"_4136-原型继承","4.13.6 原型继承",[21,85939,85940],{},[24,85941],{"alt":26,"src":85942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[21,85944,85945],{},[24,85946],{"alt":26,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[21,85949,85950],{},[24,85951],{"alt":26,"src":85952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[21,85954,85955],{},[24,85956],{"alt":26,"src":85957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[21,85959,85960],{},[24,85961],{"alt":26,"src":85962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[21,85964,85965],{},[24,85966],{"alt":26,"src":85967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[21,85969,85970],{},[24,85971],{"alt":26,"src":85972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[21,85974,85975],{},[24,85976],{"alt":26,"src":85977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[21,85979,85980],{},"回顾：构造函数每次new得到对象都是不同的",[217,85982,85984],{"id":85983},"_4137-原型链","4.13.7 原型链",[21,85986,85987],{},[24,85988],{"alt":26,"src":85989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[21,85991,85992],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[21,85994,85995],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[21,85997,85998],{},"大哥是Object",[21,86000,86001],{},[24,86002],{"alt":26,"src":86003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[21,86005,86006],{},[24,86007],{"alt":26,"src":86008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[21,86010,86011],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[21,86013,86014],{},"万物皆对象",[217,86016,86018],{"id":86017},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[21,86020,86021],{},"模态框",[21,86023,86024],{},"以后遇见这个效果直接使用这个就行",[21,86026,86027],{},[24,86028],{"alt":26,"src":86029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[21,86031,86032],{},[24,86033],{"alt":26,"src":86034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[21,86036,86037],{},[24,86038],{"alt":26,"src":86039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[21,86041,86042],{},[24,86043],{"alt":26,"src":86044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[21,86046,86047],{},"补充知识点：",[14,86049,86050],{},[17,86051,86052],{},"append()",[21,86054,86055],{},[24,86056],{"alt":26,"src":86057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[82,86059,86061],{"className":50714,"code":86060,"language":50716,"meta":26,"style":26},"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",[88,86062,86063,86068,86073,86078,86082,86086,86090,86095,86100,86105,86109],{"__ignoreMap":26},[91,86064,86065],{"class":93,"line":94},[91,86066,86067],{"class":250},"append(param1)\n",[91,86069,86070],{"class":93,"line":38},[91,86071,86072],{"class":250},"append(param1, param2)\n",[91,86074,86075],{"class":93,"line":1304},[91,86076,86077],{"class":250},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[91,86079,86080],{"class":93,"line":1319},[91,86081,2523],{"emptyLinePlaceholder":175},[91,86083,86084],{"class":93,"line":1325},[91,86085,2523],{"emptyLinePlaceholder":175},[91,86087,86088],{"class":93,"line":1339},[91,86089,2523],{"emptyLinePlaceholder":175},[91,86091,86092],{"class":93,"line":1345},[91,86093,86094],{"class":250},"let div = document.createElement(\"div\");\n",[91,86096,86097],{"class":93,"line":1436},[91,86098,86099],{"class":250},"let p = document.createElement(\"p\");\n",[91,86101,86102],{"class":93,"line":1442},[91,86103,86104],{"class":250},"div.append(p);\n",[91,86106,86107],{"class":93,"line":1454},[91,86108,2523],{"emptyLinePlaceholder":175},[91,86110,86111,86114,86116],{"class":93,"line":1736},[91,86112,86113],{"class":250},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[91,86115,21],{"class":51381},[91,86117,86118],{"class":250},"> ]\n",[14,86120,86121],{"start":38},[17,86122,86123],{},"remove()",[21,86125,86126],{},"自己删自己",[21,86128,86129],{},[24,86130],{"alt":26,"src":86131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[82,86133,86135],{"className":50714,"code":86134,"language":50716,"meta":26,"style":26},"\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",[88,86136,86137,86147,86161,86165,86173,86187,86207,86219,86227,86234,86246,86259,86294,86306,86317,86329,86341,86353,86380,86390,86394,86398,86407,86419,86433,86443,86455,86459,86463,86473,86484,86494,86504,86517,86530,86540,86544,86548,86557,86567,86579,86583,86587,86596,86606,86616,86628,86632,86636,86646,86662,86673,86683,86693,86705,86717,86729,86733,86737,86750,86761,86765,86773,86781,86785,86793,86813,86833,86841,86846,86872,86877,86882,86901,86906,86918,86923,86934,86944,86954,86959,86964,86968,86973,86978,86983,87003,87008,87028,87033,87047,87052,87057,87062,87078,87082,87087,87116,87121,87126,87131,87142,87146,87150,87154,87159,87184,87189,87214,87219,87228,87232,87237,87262,87266,87291,87295,87304,87308,87313,87331,87341,87345,87353,87361,87365],{"__ignoreMap":26},[91,86138,86139,86141,86143,86145],{"class":93,"line":94},[91,86140,51378],{"class":250},[91,86142,51382],{"class":51381},[91,86144,51385],{"class":97},[91,86146,51388],{"class":250},[91,86148,86149,86151,86153,86155,86157,86159],{"class":93,"line":38},[91,86150,1159],{"class":250},[91,86152,50716],{"class":51381},[91,86154,51397],{"class":97},[91,86156,296],{"class":250},[91,86158,51402],{"class":101},[91,86160,51388],{"class":250},[91,86162,86163],{"class":93,"line":1304},[91,86164,2523],{"emptyLinePlaceholder":175},[91,86166,86167,86169,86171],{"class":93,"line":1319},[91,86168,1159],{"class":250},[91,86170,51415],{"class":51381},[91,86172,51388],{"class":250},[91,86174,86175,86177,86179,86181,86183,86185],{"class":93,"line":1325},[91,86176,52225],{"class":250},[91,86178,51425],{"class":51381},[91,86180,51428],{"class":97},[91,86182,296],{"class":250},[91,86184,51433],{"class":101},[91,86186,51388],{"class":250},[91,86188,86189,86191,86193,86195,86197,86199,86201,86203,86205],{"class":93,"line":1339},[91,86190,52225],{"class":250},[91,86192,51425],{"class":51381},[91,86194,15043],{"class":97},[91,86196,296],{"class":250},[91,86198,51472],{"class":101},[91,86200,51452],{"class":97},[91,86202,296],{"class":250},[91,86204,51479],{"class":101},[91,86206,51388],{"class":250},[91,86208,86209,86211,86213,86215,86217],{"class":93,"line":1345},[91,86210,52225],{"class":250},[91,86212,51488],{"class":51381},[91,86214,51491],{"class":250},[91,86216,51488],{"class":51381},[91,86218,51388],{"class":250},[91,86220,86221,86223,86225],{"class":93,"line":1436},[91,86222,52225],{"class":250},[91,86224,168],{"class":51381},[91,86226,51388],{"class":250},[91,86228,86229,86232],{"class":93,"line":1442},[91,86230,86231],{"class":97},"    .modal",[91,86233,15695],{"class":250},[91,86235,86236,86238,86240,86242,86244],{"class":93,"line":1454},[91,86237,54852],{"class":105},[91,86239,51518],{"class":250},[91,86241,4096],{"class":105},[91,86243,51573],{"class":153},[91,86245,1415],{"class":250},[91,86247,86248,86251,86253,86255,86257],{"class":93,"line":1736},[91,86249,86250],{"class":105},"      min-height",[91,86252,51518],{"class":250},[91,86254,560],{"class":105},[91,86256,51573],{"class":153},[91,86258,1415],{"class":250},[91,86260,86261,86263,86265,86267,86269,86271,86273,86275,86277,86279,86281,86283,86285,86287,86289,86292],{"class":93,"line":1741},[91,86262,78831],{"class":105},[91,86264,51518],{"class":250},[91,86266,440],{"class":105},[91,86268,4216],{"class":105},[91,86270,2161],{"class":105},[91,86272,51573],{"class":153},[91,86274,78848],{"class":105},[91,86276,251],{"class":250},[91,86278,440],{"class":105},[91,86280,12558],{"class":250},[91,86282,440],{"class":105},[91,86284,12558],{"class":250},[91,86286,440],{"class":105},[91,86288,12558],{"class":250},[91,86290,86291],{"class":105},"0.1",[91,86293,2842],{"class":250},[91,86295,86296,86298,86300,86302,86304],{"class":93,"line":1747},[91,86297,55215],{"class":105},[91,86299,51518],{"class":250},[91,86301,542],{"class":105},[91,86303,51573],{"class":153},[91,86305,1415],{"class":250},[91,86307,86308,86310,86312,86315],{"class":93,"line":1752},[91,86309,54840],{"class":105},[91,86311,51518],{"class":250},[91,86313,86314],{"class":105},"fixed",[91,86316,1415],{"class":250},[91,86318,86319,86322,86324,86327],{"class":93,"line":1766},[91,86320,86321],{"class":105},"      z-index",[91,86323,51518],{"class":250},[91,86325,86326],{"class":105},"999",[91,86328,1415],{"class":250},[91,86330,86331,86333,86335,86337,86339],{"class":93,"line":1771},[91,86332,54919],{"class":105},[91,86334,51518],{"class":250},[91,86336,905],{"class":105},[91,86338,577],{"class":153},[91,86340,1415],{"class":250},[91,86342,86343,86345,86347,86349,86351],{"class":93,"line":1777},[91,86344,55028],{"class":105},[91,86346,51518],{"class":250},[91,86348,905],{"class":105},[91,86350,577],{"class":153},[91,86352,1415],{"class":250},[91,86354,86355,86357,86359,86361,86363,86366,86368,86370,86372,86374,86376,86378],{"class":93,"line":1798},[91,86356,78872],{"class":105},[91,86358,51518],{"class":250},[91,86360,78877],{"class":105},[91,86362,251],{"class":250},[91,86364,86365],{"class":105},"-50",[91,86367,577],{"class":153},[91,86369,12558],{"class":250},[91,86371,86365],{"class":105},[91,86373,577],{"class":153},[91,86375,12558],{"class":250},[91,86377,440],{"class":105},[91,86379,2842],{"class":250},[91,86381,86382,86384,86386,86388],{"class":93,"line":1803},[91,86383,54965],{"class":105},[91,86385,51518],{"class":250},[91,86387,60923],{"class":105},[91,86389,1415],{"class":250},[91,86391,86392],{"class":93,"line":1817},[91,86393,2310],{"class":250},[91,86395,86396],{"class":93,"line":1822},[91,86397,2523],{"emptyLinePlaceholder":175},[91,86399,86400,86402,86405],{"class":93,"line":1851},[91,86401,86231],{"class":97},[91,86403,86404],{"class":97}," .header",[91,86406,15695],{"class":250},[91,86408,86409,86411,86413,86415,86417],{"class":93,"line":1856},[91,86410,57440],{"class":105},[91,86412,51518],{"class":250},[91,86414,650],{"class":105},[91,86416,51573],{"class":153},[91,86418,1415],{"class":250},[91,86420,86421,86423,86425,86427,86429,86431],{"class":93,"line":1873},[91,86422,54776],{"class":105},[91,86424,51518],{"class":250},[91,86426,440],{"class":105},[91,86428,2161],{"class":105},[91,86430,51573],{"class":153},[91,86432,1415],{"class":250},[91,86434,86435,86437,86439,86441],{"class":93,"line":1878},[91,86436,54840],{"class":105},[91,86438,51518],{"class":250},[91,86440,54845],{"class":105},[91,86442,1415],{"class":250},[91,86444,86445,86447,86449,86451,86453],{"class":93,"line":1883},[91,86446,55003],{"class":105},[91,86448,51518],{"class":250},[91,86450,949],{"class":105},[91,86452,51573],{"class":153},[91,86454,1415],{"class":250},[91,86456,86457],{"class":93,"line":1888},[91,86458,2310],{"class":250},[91,86460,86461],{"class":93,"line":1902},[91,86462,2523],{"emptyLinePlaceholder":175},[91,86464,86465,86467,86469,86471],{"class":93,"line":1907},[91,86466,86231],{"class":97},[91,86468,86404],{"class":97},[91,86470,3155],{"class":51381},[91,86472,15695],{"class":250},[91,86474,86475,86478,86480,86482],{"class":93,"line":2700},[91,86476,86477],{"class":105},"      font-style",[91,86479,51518],{"class":250},[91,86481,63922],{"class":105},[91,86483,1415],{"class":250},[91,86485,86486,86488,86490,86492],{"class":93,"line":2714},[91,86487,57497],{"class":105},[91,86489,51518],{"class":250},[91,86491,62151],{"class":105},[91,86493,1415],{"class":250},[91,86495,86496,86498,86500,86502],{"class":93,"line":2722},[91,86497,54840],{"class":105},[91,86499,51518],{"class":250},[91,86501,54912],{"class":105},[91,86503,1415],{"class":250},[91,86505,86506,86509,86511,86513,86515],{"class":93,"line":2727},[91,86507,86508],{"class":105},"      right",[91,86510,51518],{"class":250},[91,86512,824],{"class":105},[91,86514,51573],{"class":153},[91,86516,1415],{"class":250},[91,86518,86519,86521,86523,86526,86528],{"class":93,"line":2733},[91,86520,55028],{"class":105},[91,86522,51518],{"class":250},[91,86524,86525],{"class":105},"-2",[91,86527,51573],{"class":153},[91,86529,1415],{"class":250},[91,86531,86532,86534,86536,86538],{"class":93,"line":2739},[91,86533,62106],{"class":105},[91,86535,51518],{"class":250},[91,86537,62111],{"class":105},[91,86539,1415],{"class":250},[91,86541,86542],{"class":93,"line":2744},[91,86543,2310],{"class":250},[91,86545,86546],{"class":93,"line":8071},[91,86547,2523],{"emptyLinePlaceholder":175},[91,86549,86550,86552,86555],{"class":93,"line":8095},[91,86551,86231],{"class":97},[91,86553,86554],{"class":97}," .body",[91,86556,15695],{"class":250},[91,86558,86559,86561,86563,86565],{"class":93,"line":8100},[91,86560,57367],{"class":105},[91,86562,51518],{"class":250},[91,86564,51673],{"class":105},[91,86566,1415],{"class":250},[91,86568,86569,86571,86573,86575,86577],{"class":93,"line":8106},[91,86570,54776],{"class":105},[91,86572,51518],{"class":250},[91,86574,695],{"class":105},[91,86576,51573],{"class":153},[91,86578,1415],{"class":250},[91,86580,86581],{"class":93,"line":8133},[91,86582,2310],{"class":250},[91,86584,86585],{"class":93,"line":8138},[91,86586,2523],{"emptyLinePlaceholder":175},[91,86588,86589,86591,86594],{"class":93,"line":8144},[91,86590,86231],{"class":97},[91,86592,86593],{"class":97}," .footer",[91,86595,15695],{"class":250},[91,86597,86598,86600,86602,86604],{"class":93,"line":8156},[91,86599,55090],{"class":105},[91,86601,51518],{"class":250},[91,86603,51558],{"class":105},[91,86605,1415],{"class":250},[91,86607,86608,86610,86612,86614],{"class":93,"line":8168},[91,86609,55101],{"class":105},[91,86611,51518],{"class":250},[91,86613,51661],{"class":105},[91,86615,1415],{"class":250},[91,86617,86618,86620,86622,86624,86626],{"class":93,"line":8180},[91,86619,54776],{"class":105},[91,86621,51518],{"class":250},[91,86623,695],{"class":105},[91,86625,51573],{"class":153},[91,86627,1415],{"class":250},[91,86629,86630],{"class":93,"line":9839},[91,86631,2310],{"class":250},[91,86633,86634],{"class":93,"line":9864},[91,86635,2523],{"emptyLinePlaceholder":175},[91,86637,86638,86640,86642,86644],{"class":93,"line":9887},[91,86639,86231],{"class":97},[91,86641,86593],{"class":97},[91,86643,1523],{"class":51381},[91,86645,15695],{"class":250},[91,86647,86648,86650,86652,86654,86656,86658,86660],{"class":93,"line":9911},[91,86649,54776],{"class":105},[91,86651,51518],{"class":250},[91,86653,321],{"class":105},[91,86655,51573],{"class":153},[91,86657,2206],{"class":105},[91,86659,51573],{"class":153},[91,86661,1415],{"class":250},[91,86663,86664,86666,86668,86671],{"class":93,"line":9916},[91,86665,61802],{"class":105},[91,86667,51518],{"class":250},[91,86669,86670],{"class":105},"#ccc",[91,86672,1415],{"class":250},[91,86674,86675,86677,86679,86681],{"class":93,"line":9921},[91,86676,64051],{"class":105},[91,86678,51518],{"class":250},[91,86680,54818],{"class":105},[91,86682,1415],{"class":250},[91,86684,86685,86687,86689,86691],{"class":93,"line":9926},[91,86686,57497],{"class":105},[91,86688,51518],{"class":250},[91,86690,60923],{"class":105},[91,86692,1415],{"class":250},[91,86694,86695,86697,86699,86701,86703],{"class":93,"line":9935},[91,86696,55215],{"class":105},[91,86698,51518],{"class":250},[91,86700,327],{"class":105},[91,86702,51573],{"class":153},[91,86704,1415],{"class":250},[91,86706,86707,86709,86711,86713,86715],{"class":93,"line":9940},[91,86708,61831],{"class":105},[91,86710,51518],{"class":250},[91,86712,695],{"class":105},[91,86714,51573],{"class":153},[91,86716,1415],{"class":250},[91,86718,86719,86721,86723,86725,86727],{"class":93,"line":9946},[91,86720,55003],{"class":105},[91,86722,51518],{"class":250},[91,86724,798],{"class":105},[91,86726,51573],{"class":153},[91,86728,1415],{"class":250},[91,86730,86731],{"class":93,"line":9967},[91,86732,2310],{"class":250},[91,86734,86735],{"class":93,"line":9973},[91,86736,2523],{"emptyLinePlaceholder":175},[91,86738,86739,86741,86743,86745,86748],{"class":93,"line":9987},[91,86740,86231],{"class":97},[91,86742,86593],{"class":97},[91,86744,1523],{"class":51381},[91,86746,86747],{"class":97},".submit",[91,86749,15695],{"class":250},[91,86751,86752,86754,86756,86759],{"class":93,"line":9993},[91,86753,54965],{"class":105},[91,86755,51518],{"class":250},[91,86757,86758],{"class":105},"#369",[91,86760,1415],{"class":250},[91,86762,86763],{"class":93,"line":10020},[91,86764,2310],{"class":250},[91,86766,86767,86769,86771],{"class":93,"line":10029},[91,86768,52498],{"class":250},[91,86770,168],{"class":51381},[91,86772,51388],{"class":250},[91,86774,86775,86777,86779],{"class":93,"line":10035},[91,86776,51866],{"class":250},[91,86778,51415],{"class":51381},[91,86780,51388],{"class":250},[91,86782,86783],{"class":93,"line":10043},[91,86784,2523],{"emptyLinePlaceholder":175},[91,86786,86787,86789,86791],{"class":93,"line":10048},[91,86788,1159],{"class":250},[91,86790,51881],{"class":51381},[91,86792,51388],{"class":250},[91,86794,86795,86797,86799,86801,86803,86806,86809,86811],{"class":93,"line":16727},[91,86796,52225],{"class":250},[91,86798,53968],{"class":51381},[91,86800,15082],{"class":97},[91,86802,296],{"class":250},[91,86804,86805],{"class":101},"\"delete\"",[91,86807,86808],{"class":250},">删除\u003C\u002F",[91,86810,53968],{"class":51381},[91,86812,51388],{"class":250},[91,86814,86815,86817,86819,86821,86823,86826,86829,86831],{"class":93,"line":16733},[91,86816,52225],{"class":250},[91,86818,53968],{"class":51381},[91,86820,15082],{"class":97},[91,86822,296],{"class":250},[91,86824,86825],{"class":101},"\"login\"",[91,86827,86828],{"class":250},">登录\u003C\u002F",[91,86830,53968],{"class":51381},[91,86832,51388],{"class":250},[91,86834,86835,86837,86839],{"class":93,"line":16756},[91,86836,52225],{"class":250},[91,86838,51894],{"class":51381},[91,86840,51388],{"class":250},[91,86842,86843],{"class":93,"line":16762},[91,86844,86845],{"class":308},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[91,86847,86848,86850,86853,86855,86857,86859,86861,86863,86866,86868,86870],{"class":93,"line":16785},[91,86849,70165],{"class":153},[91,86851,86852],{"class":97}," Modal",[91,86854,251],{"class":250},[91,86856,51488],{"class":5339},[91,86858,13687],{"class":153},[91,86860,70011],{"class":101},[91,86862,12558],{"class":250},[91,86864,86865],{"class":5339},"message",[91,86867,13687],{"class":153},[91,86869,70011],{"class":101},[91,86871,12565],{"class":250},[91,86873,86874],{"class":93,"line":16799},[91,86875,86876],{"class":308},"      \u002F\u002F 创建Model 模态框盒子\n",[91,86878,86879],{"class":93,"line":16819},[91,86880,86881],{"class":308},"      \u002F\u002F 1.1 创建div标签\n",[91,86883,86884,86886,86889,86891,86893,86895,86897,86899],{"class":93,"line":16825},[91,86885,70132],{"class":105},[91,86887,86888],{"class":250},".modalBox ",[91,86890,296],{"class":153},[91,86892,54477],{"class":250},[91,86894,70232],{"class":97},[91,86896,251],{"class":250},[91,86898,82012],{"class":101},[91,86900,257],{"class":250},[91,86902,86903],{"class":93,"line":16836},[91,86904,86905],{"class":308},"      \u002F\u002F 1.2 给div 添加类名为model\n",[91,86907,86908,86910,86913,86915],{"class":93,"line":16859},[91,86909,70132],{"class":105},[91,86911,86912],{"class":250},".modalBox.className ",[91,86914,296],{"class":153},[91,86916,86917],{"class":101}," 'modal'\n",[91,86919,86920],{"class":93,"line":16881},[91,86921,86922],{"class":308},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[91,86924,86925,86927,86930,86932],{"class":93,"line":16886},[91,86926,70132],{"class":105},[91,86928,86929],{"class":250},".modalBox.innerHTML ",[91,86931,296],{"class":153},[91,86933,70249],{"class":101},[91,86935,86936,86939,86941],{"class":93,"line":16892},[91,86937,86938],{"class":101},"        \u003Cdiv class=\"header\">${",[91,86940,51488],{"class":250},[91,86942,86943],{"class":101},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[91,86945,86946,86949,86951],{"class":93,"line":16906},[91,86947,86948],{"class":101},"        \u003Cdiv class=\"body\">${",[91,86950,86865],{"class":250},[91,86952,86953],{"class":101},"}\u003C\u002Fdiv>\n",[91,86955,86956],{"class":93,"line":16919},[91,86957,86958],{"class":101},"      `\n",[91,86960,86961],{"class":93,"line":16924},[91,86962,86963],{"class":308},"      \u002F\u002F console.log(this.modalBox)\n",[91,86965,86966],{"class":93,"line":16938},[91,86967,2310],{"class":250},[91,86969,86970],{"class":93,"line":16943},[91,86971,86972],{"class":308},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[91,86974,86975],{"class":93,"line":16949},[91,86976,86977],{"class":308},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[91,86979,86980],{"class":93,"line":16954},[91,86981,86982],{"class":308},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[91,86984,86985,86988,86990,86992,86994,86997,86999,87001],{"class":93,"line":16968},[91,86986,86987],{"class":105},"    Modal",[91,86989,807],{"class":250},[91,86991,85660],{"class":105},[91,86993,807],{"class":250},[91,86995,86996],{"class":97},"open",[91,86998,13687],{"class":153},[91,87000,58999],{"class":153},[91,87002,54533],{"class":250},[91,87004,87005],{"class":93,"line":16973},[91,87006,87007],{"class":308},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[91,87009,87010,87012,87015,87017,87019,87021,87023,87026],{"class":93,"line":16978},[91,87011,58309],{"class":153},[91,87013,87014],{"class":105}," box",[91,87016,13687],{"class":153},[91,87018,54477],{"class":250},[91,87020,54480],{"class":97},[91,87022,251],{"class":250},[91,87024,87025],{"class":101},"'.modal'",[91,87027,257],{"class":250},[91,87029,87030],{"class":93,"line":16992},[91,87031,87032],{"class":308},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[91,87034,87035,87038,87040,87043,87045],{"class":93,"line":17004},[91,87036,87037],{"class":250},"      box ",[91,87039,1839],{"class":153},[91,87041,87042],{"class":250}," box.",[91,87044,57087],{"class":97},[91,87046,2099],{"class":250},[91,87048,87049],{"class":93,"line":17009},[91,87050,87051],{"class":308},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[91,87053,87054],{"class":93,"line":17022},[91,87055,87056],{"class":308},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[91,87058,87059],{"class":93,"line":17027},[91,87060,87061],{"class":308},"      \u002F\u002F append可以增加对象\n",[91,87063,87064,87067,87070,87072,87075],{"class":93,"line":17032},[91,87065,87066],{"class":250},"      document.body.",[91,87068,87069],{"class":97},"append",[91,87071,251],{"class":250},[91,87073,87074],{"class":105},"this",[91,87076,87077],{"class":250},".modalBox)\n",[91,87079,87080],{"class":93,"line":17037},[91,87081,2523],{"emptyLinePlaceholder":175},[91,87083,87084],{"class":93,"line":17050},[91,87085,87086],{"class":308},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[91,87088,87089,87091,87094,87096,87098,87101,87103,87105,87107,87109,87112,87114],{"class":93,"line":17055},[91,87090,70132],{"class":105},[91,87092,87093],{"class":250},".modalBox.",[91,87095,54480],{"class":97},[91,87097,251],{"class":250},[91,87099,87100],{"class":101},"'i'",[91,87102,30907],{"class":250},[91,87104,57894],{"class":97},[91,87106,251],{"class":250},[91,87108,57899],{"class":101},[91,87110,87111],{"class":250},", () ",[91,87113,84803],{"class":153},[91,87115,15695],{"class":250},[91,87117,87118],{"class":93,"line":32714},[91,87119,87120],{"class":308},"        \u002F\u002F 这个地方需要用到箭头函数\n",[91,87122,87123],{"class":93,"line":32720},[91,87124,87125],{"class":308},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[91,87127,87128],{"class":93,"line":32726},[91,87129,87130],{"class":308},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[91,87132,87133,87135,87137,87140],{"class":93,"line":32732},[91,87134,64807],{"class":105},[91,87136,807],{"class":250},[91,87138,87139],{"class":97},"close",[91,87141,2099],{"class":250},[91,87143,87144],{"class":93,"line":32738},[91,87145,64896],{"class":250},[91,87147,87148],{"class":93,"line":32749},[91,87149,2310],{"class":250},[91,87151,87152],{"class":93,"line":32755},[91,87153,2523],{"emptyLinePlaceholder":175},[91,87155,87156],{"class":93,"line":32775},[91,87157,87158],{"class":308},"    \u002F\u002F 测试一下 点击 删除按钮\n",[91,87160,87161,87163,87165,87167,87170,87172,87174,87176,87178,87180,87182],{"class":93,"line":32781},[91,87162,52488],{"class":250},[91,87164,54480],{"class":97},[91,87166,251],{"class":250},[91,87168,87169],{"class":101},"'#delete'",[91,87171,30907],{"class":250},[91,87173,57894],{"class":97},[91,87175,251],{"class":250},[91,87177,57899],{"class":101},[91,87179,87111],{"class":250},[91,87181,84803],{"class":153},[91,87183,15695],{"class":250},[91,87185,87186],{"class":93,"line":32792},[91,87187,87188],{"class":308},"      \u002F\u002F 先调用Model构造函数\n",[91,87190,87191,87193,87196,87198,87200,87202,87204,87207,87209,87212],{"class":93,"line":32798},[91,87192,58309],{"class":153},[91,87194,87195],{"class":105}," del",[91,87197,13687],{"class":153},[91,87199,11701],{"class":153},[91,87201,86852],{"class":97},[91,87203,251],{"class":250},[91,87205,87206],{"class":101},"'温馨的提示'",[91,87208,12558],{"class":250},[91,87210,87211],{"class":101},"'您没有删除权限操作'",[91,87213,257],{"class":250},[91,87215,87216],{"class":93,"line":32804},[91,87217,87218],{"class":308},"      \u002F\u002F 实例对象调用open方法\n",[91,87220,87221,87224,87226],{"class":93,"line":32810},[91,87222,87223],{"class":250},"      del.",[91,87225,86996],{"class":97},[91,87227,2099],{"class":250},[91,87229,87230],{"class":93,"line":32816},[91,87231,33542],{"class":250},[91,87233,87234],{"class":93,"line":32822},[91,87235,87236],{"class":308},"    \u002F\u002F 测试一下 点击 登录按钮\n",[91,87238,87239,87241,87243,87245,87248,87250,87252,87254,87256,87258,87260],{"class":93,"line":32828},[91,87240,52488],{"class":250},[91,87242,54480],{"class":97},[91,87244,251],{"class":250},[91,87246,87247],{"class":101},"'#login'",[91,87249,30907],{"class":250},[91,87251,57894],{"class":97},[91,87253,251],{"class":250},[91,87255,57899],{"class":101},[91,87257,87111],{"class":250},[91,87259,84803],{"class":153},[91,87261,15695],{"class":250},[91,87263,87264],{"class":93,"line":32834},[91,87265,87188],{"class":308},[91,87267,87268,87270,87273,87275,87277,87279,87281,87284,87286,87289],{"class":93,"line":32854},[91,87269,58309],{"class":153},[91,87271,87272],{"class":105}," log",[91,87274,13687],{"class":153},[91,87276,11701],{"class":153},[91,87278,86852],{"class":97},[91,87280,251],{"class":250},[91,87282,87283],{"class":101},"'友情提示'",[91,87285,12558],{"class":250},[91,87287,87288],{"class":101},"'您还没有登录呢'",[91,87290,257],{"class":250},[91,87292,87293],{"class":93,"line":32860},[91,87294,87218],{"class":308},[91,87296,87297,87300,87302],{"class":93,"line":32876},[91,87298,87299],{"class":250},"      log.",[91,87301,86996],{"class":97},[91,87303,2099],{"class":250},[91,87305,87306],{"class":93,"line":32882},[91,87307,33542],{"class":250},[91,87309,87310],{"class":93,"line":32896},[91,87311,87312],{"class":308},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[91,87314,87315,87317,87319,87321,87323,87325,87327,87329],{"class":93,"line":32902},[91,87316,86987],{"class":105},[91,87318,807],{"class":250},[91,87320,85660],{"class":105},[91,87322,807],{"class":250},[91,87324,87139],{"class":97},[91,87326,13687],{"class":153},[91,87328,58999],{"class":153},[91,87330,54533],{"class":250},[91,87332,87333,87335,87337,87339],{"class":93,"line":32917},[91,87334,70132],{"class":105},[91,87336,87093],{"class":250},[91,87338,57087],{"class":97},[91,87340,2099],{"class":250},[91,87342,87343],{"class":93,"line":32923},[91,87344,2310],{"class":250},[91,87346,87347,87349,87351],{"class":93,"line":32932},[91,87348,52498],{"class":250},[91,87350,51894],{"class":51381},[91,87352,51388],{"class":250},[91,87354,87355,87357,87359],{"class":93,"line":32938},[91,87356,51866],{"class":250},[91,87358,51881],{"class":51381},[91,87360,51388],{"class":250},[91,87362,87363],{"class":93,"line":32947},[91,87364,2523],{"emptyLinePlaceholder":175},[91,87366,87367,87369,87371],{"class":93,"line":32953},[91,87368,51866],{"class":250},[91,87370,50716],{"class":51381},[91,87372,51388],{"class":250},[21,87374,87375],{},[24,87376],{"alt":26,"src":87377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[190,87379,87381],{"id":87380},"_414-深浅拷贝","4.14 深浅拷贝",[217,87383,87385],{"id":87384},"_4141-浅拷贝","4.14.1 浅拷贝",[21,87387,87388],{},[24,87389],{"alt":26,"src":87390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[21,87392,87393],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[21,87395,87396],{},[24,87397],{"alt":26,"src":87398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[21,87400,87401],{},[24,87402],{"alt":26,"src":87403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[21,87405,87406],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[21,87408,87409],{},[24,87410],{"alt":26,"src":87411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[21,87413,11455],{},[21,87415,87416],{},[24,87417],{"alt":26,"src":87418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[217,87420,87422],{"id":87421},"_4142-深拷贝","4.14.2 深拷贝",[21,87424,87425],{},"深拷贝：拷贝的是对象，不是地址",[21,87427,87428],{},"常用的三种方法：",[14,87430,87431,87434,87437],{},[17,87432,87433],{},"通过递归实现深拷贝",[17,87435,87436],{},"lodash\u002FcloneDeep",[17,87438,87439],{},"通过JSON.stringify()实现",[22121,87441,87443],{"id":87442},"_41421-递归函数","4.14.2.1 递归函数",[21,87445,87446],{},[24,87447],{"alt":26,"src":87448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[14,87450,87451],{},[17,87452,87453],{},"死递归占溢出：",[82,87455,87457],{"className":53148,"code":87456,"language":53150,"meta":26,"style":26},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[88,87458,87459,87467,87475,87479,87484,87488,87493,87501],{"__ignoreMap":26},[91,87460,87461,87463,87465],{"class":93,"line":94},[91,87462,1159],{"class":250},[91,87464,51881],{"class":51381},[91,87466,51388],{"class":250},[91,87468,87469,87471,87473],{"class":93,"line":38},[91,87470,52225],{"class":250},[91,87472,51894],{"class":51381},[91,87474,51388],{"class":250},[91,87476,87477],{"class":93,"line":1304},[91,87478,77224],{"class":250},[91,87480,87481],{"class":93,"line":1319},[91,87482,87483],{"class":250},"      fn()\n",[91,87485,87486],{"class":93,"line":1325},[91,87487,2310],{"class":250},[91,87489,87490],{"class":93,"line":1339},[91,87491,87492],{"class":250},"    fn()\n",[91,87494,87495,87497,87499],{"class":93,"line":1345},[91,87496,52498],{"class":250},[91,87498,51894],{"class":51381},[91,87500,51388],{"class":250},[91,87502,87503,87505,87507],{"class":93,"line":1436},[91,87504,51866],{"class":250},[91,87506,51881],{"class":51381},[91,87508,51388],{"class":250},[14,87510,87511],{"start":38},[17,87512,87513],{},"递归函数要加判断条件：",[21,87515,87516],{},[24,87517],{"alt":26,"src":87518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[14,87520,87521],{"start":1304},[17,87522,87523],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[82,87525,87527],{"className":50714,"code":87526,"language":50716,"meta":26,"style":26},"\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",[88,87528,87529,87539,87553,87557,87565,87579,87599,87611,87619,87623,87631,87643,87651,87659,87684,87696,87700,87707,87715,87723,87727],{"__ignoreMap":26},[91,87530,87531,87533,87535,87537],{"class":93,"line":94},[91,87532,51378],{"class":250},[91,87534,51382],{"class":51381},[91,87536,51385],{"class":97},[91,87538,51388],{"class":250},[91,87540,87541,87543,87545,87547,87549,87551],{"class":93,"line":38},[91,87542,1159],{"class":250},[91,87544,50716],{"class":51381},[91,87546,51397],{"class":97},[91,87548,296],{"class":250},[91,87550,51402],{"class":101},[91,87552,51388],{"class":250},[91,87554,87555],{"class":93,"line":1304},[91,87556,2523],{"emptyLinePlaceholder":175},[91,87558,87559,87561,87563],{"class":93,"line":1319},[91,87560,1159],{"class":250},[91,87562,51415],{"class":51381},[91,87564,51388],{"class":250},[91,87566,87567,87569,87571,87573,87575,87577],{"class":93,"line":1325},[91,87568,52225],{"class":250},[91,87570,51425],{"class":51381},[91,87572,51428],{"class":97},[91,87574,296],{"class":250},[91,87576,51433],{"class":101},[91,87578,51388],{"class":250},[91,87580,87581,87583,87585,87587,87589,87591,87593,87595,87597],{"class":93,"line":1339},[91,87582,52225],{"class":250},[91,87584,51425],{"class":51381},[91,87586,15043],{"class":97},[91,87588,296],{"class":250},[91,87590,51472],{"class":101},[91,87592,51452],{"class":97},[91,87594,296],{"class":250},[91,87596,51479],{"class":101},[91,87598,51388],{"class":250},[91,87600,87601,87603,87605,87607,87609],{"class":93,"line":1345},[91,87602,52225],{"class":250},[91,87604,51488],{"class":51381},[91,87606,51491],{"class":250},[91,87608,51488],{"class":51381},[91,87610,51388],{"class":250},[91,87612,87613,87615,87617],{"class":93,"line":1436},[91,87614,51866],{"class":250},[91,87616,51415],{"class":51381},[91,87618,51388],{"class":250},[91,87620,87621],{"class":93,"line":1442},[91,87622,2523],{"emptyLinePlaceholder":175},[91,87624,87625,87627,87629],{"class":93,"line":1454},[91,87626,1159],{"class":250},[91,87628,51881],{"class":51381},[91,87630,51388],{"class":250},[91,87632,87633,87635,87637,87639,87641],{"class":93,"line":1736},[91,87634,52225],{"class":250},[91,87636,51692],{"class":51381},[91,87638,55395],{"class":250},[91,87640,51692],{"class":51381},[91,87642,51388],{"class":250},[91,87644,87645,87647,87649],{"class":93,"line":1741},[91,87646,52225],{"class":250},[91,87648,51894],{"class":51381},[91,87650,51388],{"class":250},[91,87652,87653,87655,87657],{"class":93,"line":1747},[91,87654,70165],{"class":153},[91,87656,73854],{"class":97},[91,87658,10976],{"class":250},[91,87660,87661,87663,87665,87667,87669,87671,87673,87675,87677,87679,87682],{"class":93,"line":1752},[91,87662,55852],{"class":250},[91,87664,54480],{"class":97},[91,87666,251],{"class":250},[91,87668,82012],{"class":101},[91,87670,74330],{"class":250},[91,87672,296],{"class":153},[91,87674,11701],{"class":153},[91,87676,73870],{"class":97},[91,87678,17384],{"class":250},[91,87680,87681],{"class":97},"toLocaleString",[91,87683,2099],{"class":250},[91,87685,87686,87689,87692,87694],{"class":93,"line":1766},[91,87687,87688],{"class":97},"      setTimeout",[91,87690,87691],{"class":250},"(getTime, ",[91,87693,6533],{"class":105},[91,87695,257],{"class":250},[91,87697,87698],{"class":93,"line":1771},[91,87699,2310],{"class":250},[91,87701,87702,87705],{"class":93,"line":1777},[91,87703,87704],{"class":97},"    getTime",[91,87706,2099],{"class":250},[91,87708,87709,87711,87713],{"class":93,"line":1798},[91,87710,52498],{"class":250},[91,87712,51894],{"class":51381},[91,87714,51388],{"class":250},[91,87716,87717,87719,87721],{"class":93,"line":1803},[91,87718,51866],{"class":250},[91,87720,51881],{"class":51381},[91,87722,51388],{"class":250},[91,87724,87725],{"class":93,"line":1817},[91,87726,2523],{"emptyLinePlaceholder":175},[91,87728,87729,87731,87733],{"class":93,"line":1822},[91,87730,51866],{"class":250},[91,87732,50716],{"class":51381},[91,87734,51388],{"class":250},[21,87736,87737],{},[24,87738],{"alt":26,"src":87739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[14,87741,87742],{"start":1319},[17,87743,87433],{},[21,87745,87746],{},[24,87747],{"alt":26,"src":87748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[21,87750,87751],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[21,87753,39270],{},[21,87755,87756],{},"这个是简易版的递归函数深拷贝",[21,87758,87759],{},"一定要注意先数组再对象，因为万物皆可对象",[82,87761,87763],{"className":50714,"code":87762,"language":50716,"meta":26,"style":26},"\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",[88,87764,87765,87775,87789,87793,87801,87815,87835,87847,87855,87859,87867,87875,87885,87894,87902,87918,87922,87930,87934,87938,87950,87955,87974,87990,87995,88000,88005,88020,88025,88030,88039,88047,88064,88072,88078,88086,88091,88096,88105,88109,88113,88117,88128,88137,88147,88161,88171,88179,88187,88195,88199],{"__ignoreMap":26},[91,87766,87767,87769,87771,87773],{"class":93,"line":94},[91,87768,51378],{"class":250},[91,87770,51382],{"class":51381},[91,87772,51385],{"class":97},[91,87774,51388],{"class":250},[91,87776,87777,87779,87781,87783,87785,87787],{"class":93,"line":38},[91,87778,1159],{"class":250},[91,87780,50716],{"class":51381},[91,87782,51397],{"class":97},[91,87784,296],{"class":250},[91,87786,51402],{"class":101},[91,87788,51388],{"class":250},[91,87790,87791],{"class":93,"line":1304},[91,87792,2523],{"emptyLinePlaceholder":175},[91,87794,87795,87797,87799],{"class":93,"line":1319},[91,87796,1159],{"class":250},[91,87798,51415],{"class":51381},[91,87800,51388],{"class":250},[91,87802,87803,87805,87807,87809,87811,87813],{"class":93,"line":1325},[91,87804,52225],{"class":250},[91,87806,51425],{"class":51381},[91,87808,51428],{"class":97},[91,87810,296],{"class":250},[91,87812,51433],{"class":101},[91,87814,51388],{"class":250},[91,87816,87817,87819,87821,87823,87825,87827,87829,87831,87833],{"class":93,"line":1339},[91,87818,52225],{"class":250},[91,87820,51425],{"class":51381},[91,87822,15043],{"class":97},[91,87824,296],{"class":250},[91,87826,51472],{"class":101},[91,87828,51452],{"class":97},[91,87830,296],{"class":250},[91,87832,51479],{"class":101},[91,87834,51388],{"class":250},[91,87836,87837,87839,87841,87843,87845],{"class":93,"line":1345},[91,87838,52225],{"class":250},[91,87840,51488],{"class":51381},[91,87842,51491],{"class":250},[91,87844,51488],{"class":51381},[91,87846,51388],{"class":250},[91,87848,87849,87851,87853],{"class":93,"line":1436},[91,87850,51866],{"class":250},[91,87852,51415],{"class":51381},[91,87854,51388],{"class":250},[91,87856,87857],{"class":93,"line":1442},[91,87858,2523],{"emptyLinePlaceholder":175},[91,87860,87861,87863,87865],{"class":93,"line":1454},[91,87862,1159],{"class":250},[91,87864,51881],{"class":51381},[91,87866,51388],{"class":250},[91,87868,87869,87871,87873],{"class":93,"line":1736},[91,87870,52225],{"class":250},[91,87872,51894],{"class":51381},[91,87874,51388],{"class":250},[91,87876,87877,87879,87881,87883],{"class":93,"line":1741},[91,87878,11344],{"class":153},[91,87880,70052],{"class":105},[91,87882,13687],{"class":153},[91,87884,15695],{"class":250},[91,87886,87887,87889,87892],{"class":93,"line":1747},[91,87888,71697],{"class":250},[91,87890,87891],{"class":101},"'pink'",[91,87893,31547],{"class":250},[91,87895,87896,87898,87900],{"class":93,"line":1752},[91,87897,71707],{"class":250},[91,87899,899],{"class":105},[91,87901,31547],{"class":250},[91,87903,87904,87907,87910,87912,87915],{"class":93,"line":1766},[91,87905,87906],{"class":250},"      hobby: [",[91,87908,87909],{"class":101},"'乒乓球'",[91,87911,12558],{"class":250},[91,87913,87914],{"class":101},"'足球'",[91,87916,87917],{"class":250},"],\n",[91,87919,87920],{"class":93,"line":1771},[91,87921,77953],{"class":250},[91,87923,87924,87927],{"class":93,"line":1777},[91,87925,87926],{"class":250},"        baby: ",[91,87928,87929],{"class":101},"'小pink'\n",[91,87931,87932],{"class":93,"line":1798},[91,87933,52479],{"class":250},[91,87935,87936],{"class":93,"line":1803},[91,87937,2310],{"class":250},[91,87939,87940,87942,87945,87947],{"class":93,"line":1817},[91,87941,11344],{"class":153},[91,87943,87944],{"class":105}," o",[91,87946,13687],{"class":153},[91,87948,87949],{"class":250}," {}\n",[91,87951,87952],{"class":93,"line":1822},[91,87953,87954],{"class":308},"    \u002F\u002F 拷贝函数\n",[91,87956,87957,87959,87962,87964,87967,87969,87972],{"class":93,"line":1851},[91,87958,70165],{"class":153},[91,87960,87961],{"class":97}," deepCopy",[91,87963,251],{"class":250},[91,87965,87966],{"class":5339},"newObj",[91,87968,12558],{"class":250},[91,87970,87971],{"class":5339},"oldObj",[91,87973,12565],{"class":250},[91,87975,87976,87978,87980,87982,87985,87987],{"class":93,"line":1856},[91,87977,52365],{"class":153},[91,87979,1782],{"class":250},[91,87981,51928],{"class":153},[91,87983,87984],{"class":250}," k ",[91,87986,26165],{"class":153},[91,87988,87989],{"class":250}," oldObj) {\n",[91,87991,87992],{"class":93,"line":1873},[91,87993,87994],{"class":308},"        \u002F\u002F 处理数组的问题\n",[91,87996,87997],{"class":93,"line":1878},[91,87998,87999],{"class":308},"        \u002F\u002F 判断是否属于数组\n",[91,88001,88002],{"class":93,"line":1883},[91,88003,88004],{"class":308},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[91,88006,88007,88009,88012,88015,88018],{"class":93,"line":1888},[91,88008,2620],{"class":153},[91,88010,88011],{"class":250}," (oldObj[k] ",[91,88013,88014],{"class":153},"instanceof",[91,88016,88017],{"class":97}," Array",[91,88019,12565],{"class":250},[91,88021,88022],{"class":93,"line":1902},[91,88023,88024],{"class":308},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[91,88026,88027],{"class":93,"line":1907},[91,88028,88029],{"class":308},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[91,88031,88032,88035,88037],{"class":93,"line":2700},[91,88033,88034],{"class":250},"          newObj[k] ",[91,88036,296],{"class":153},[91,88038,51919],{"class":250},[91,88040,88041,88044],{"class":93,"line":2714},[91,88042,88043],{"class":97},"          deepCopy",[91,88045,88046],{"class":250},"(newObj[k], oldObj[k])\n",[91,88048,88049,88051,88053,88055,88057,88059,88062],{"class":93,"line":2722},[91,88050,80161],{"class":250},[91,88052,1825],{"class":153},[91,88054,1828],{"class":153},[91,88056,88011],{"class":250},[91,88058,88014],{"class":153},[91,88060,88061],{"class":97}," Object",[91,88063,12565],{"class":250},[91,88065,88066,88068,88070],{"class":93,"line":2727},[91,88067,88034],{"class":250},[91,88069,296],{"class":153},[91,88071,87949],{"class":250},[91,88073,88074,88076],{"class":93,"line":2733},[91,88075,88043],{"class":97},[91,88077,88046],{"class":250},[91,88079,88080,88082,88084],{"class":93,"line":2739},[91,88081,80161],{"class":250},[91,88083,1825],{"class":153},[91,88085,15695],{"class":250},[91,88087,88088],{"class":93,"line":2744},[91,88089,88090],{"class":308},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[91,88092,88093],{"class":93,"line":8071},[91,88094,88095],{"class":308},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[91,88097,88098,88100,88102],{"class":93,"line":8095},[91,88099,88034],{"class":250},[91,88101,296],{"class":153},[91,88103,88104],{"class":250}," oldObj[k]\n",[91,88106,88107],{"class":93,"line":8100},[91,88108,2652],{"class":250},[91,88110,88111],{"class":93,"line":8106},[91,88112,52479],{"class":250},[91,88114,88115],{"class":93,"line":8133},[91,88116,2310],{"class":250},[91,88118,88119,88122,88125],{"class":93,"line":8138},[91,88120,88121],{"class":97},"    deepCopy",[91,88123,88124],{"class":250},"(o, obj) ",[91,88126,88127],{"class":308},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[91,88129,88130,88132,88134],{"class":93,"line":8144},[91,88131,73834],{"class":250},[91,88133,58328],{"class":97},[91,88135,88136],{"class":250},"(o)\n",[91,88138,88139,88142,88144],{"class":93,"line":8156},[91,88140,88141],{"class":250},"    o.age ",[91,88143,296],{"class":153},[91,88145,88146],{"class":105}," 20\n",[91,88148,88149,88152,88154,88156,88158],{"class":93,"line":8168},[91,88150,88151],{"class":250},"    o.hobby[",[91,88153,440],{"class":105},[91,88155,4566],{"class":250},[91,88157,296],{"class":153},[91,88159,88160],{"class":101}," '篮球'\n",[91,88162,88163,88166,88168],{"class":93,"line":8180},[91,88164,88165],{"class":250},"    o.family ",[91,88167,296],{"class":153},[91,88169,88170],{"class":101}," '老pink'\n",[91,88172,88173,88175,88177],{"class":93,"line":9839},[91,88174,73834],{"class":250},[91,88176,58328],{"class":97},[91,88178,70117],{"class":250},[91,88180,88181,88183,88185],{"class":93,"line":9864},[91,88182,52498],{"class":250},[91,88184,51894],{"class":51381},[91,88186,51388],{"class":250},[91,88188,88189,88191,88193],{"class":93,"line":9887},[91,88190,51866],{"class":250},[91,88192,51881],{"class":51381},[91,88194,51388],{"class":250},[91,88196,88197],{"class":93,"line":9911},[91,88198,2523],{"emptyLinePlaceholder":175},[91,88200,88201,88203,88205],{"class":93,"line":9916},[91,88202,51866],{"class":250},[91,88204,50716],{"class":51381},[91,88206,51388],{"class":250},[21,88208,88209],{},[24,88210],{"alt":26,"src":88211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22121,88213,88215,88216],{"id":88214},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[398,88217,88218],{},"js库lodash里面cloneDeep内部实现了深拷贝",[21,88220,88221],{},[487,88222,88223],{"href":88223,"rel":88224},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23987],[21,88226,88227],{},"lodash里边的方法都要加上一个下划线_",[21,88229,88230],{},"_.cloneDeep()",[82,88232,88234],{"className":50714,"code":88233,"language":50716,"meta":26,"style":26},"\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",[88,88235,88236,88246,88260,88264,88272,88286,88306,88318,88326,88330,88338,88343,88362,88370,88380,88388,88396,88408,88412,88418,88422,88426,88442,88450,88459,88467,88475,88483,88487],{"__ignoreMap":26},[91,88237,88238,88240,88242,88244],{"class":93,"line":94},[91,88239,51378],{"class":250},[91,88241,51382],{"class":51381},[91,88243,51385],{"class":97},[91,88245,51388],{"class":250},[91,88247,88248,88250,88252,88254,88256,88258],{"class":93,"line":38},[91,88249,1159],{"class":250},[91,88251,50716],{"class":51381},[91,88253,51397],{"class":97},[91,88255,296],{"class":250},[91,88257,51402],{"class":101},[91,88259,51388],{"class":250},[91,88261,88262],{"class":93,"line":1304},[91,88263,2523],{"emptyLinePlaceholder":175},[91,88265,88266,88268,88270],{"class":93,"line":1319},[91,88267,1159],{"class":250},[91,88269,51415],{"class":51381},[91,88271,51388],{"class":250},[91,88273,88274,88276,88278,88280,88282,88284],{"class":93,"line":1325},[91,88275,52225],{"class":250},[91,88277,51425],{"class":51381},[91,88279,51428],{"class":97},[91,88281,296],{"class":250},[91,88283,51433],{"class":101},[91,88285,51388],{"class":250},[91,88287,88288,88290,88292,88294,88296,88298,88300,88302,88304],{"class":93,"line":1339},[91,88289,52225],{"class":250},[91,88291,51425],{"class":51381},[91,88293,15043],{"class":97},[91,88295,296],{"class":250},[91,88297,51472],{"class":101},[91,88299,51452],{"class":97},[91,88301,296],{"class":250},[91,88303,51479],{"class":101},[91,88305,51388],{"class":250},[91,88307,88308,88310,88312,88314,88316],{"class":93,"line":1345},[91,88309,52225],{"class":250},[91,88311,51488],{"class":51381},[91,88313,51491],{"class":250},[91,88315,51488],{"class":51381},[91,88317,51388],{"class":250},[91,88319,88320,88322,88324],{"class":93,"line":1436},[91,88321,51866],{"class":250},[91,88323,51415],{"class":51381},[91,88325,51388],{"class":250},[91,88327,88328],{"class":93,"line":1442},[91,88329,2523],{"emptyLinePlaceholder":175},[91,88331,88332,88334,88336],{"class":93,"line":1454},[91,88333,1159],{"class":250},[91,88335,51881],{"class":51381},[91,88337,51388],{"class":250},[91,88339,88340],{"class":93,"line":1736},[91,88341,88342],{"class":308},"  \u003C!-- 先引用这个库 -->\n",[91,88344,88345,88347,88349,88351,88353,88356,88358,88360],{"class":93,"line":1741},[91,88346,52225],{"class":250},[91,88348,51894],{"class":51381},[91,88350,55320],{"class":97},[91,88352,296],{"class":250},[91,88354,88355],{"class":101},"\"lodash.min.js\"",[91,88357,55395],{"class":250},[91,88359,51894],{"class":51381},[91,88361,51388],{"class":250},[91,88363,88364,88366,88368],{"class":93,"line":1747},[91,88365,52225],{"class":250},[91,88367,51894],{"class":51381},[91,88369,51388],{"class":250},[91,88371,88372,88374,88376,88378],{"class":93,"line":1752},[91,88373,11344],{"class":153},[91,88375,70052],{"class":105},[91,88377,13687],{"class":153},[91,88379,15695],{"class":250},[91,88381,88382,88384,88386],{"class":93,"line":1766},[91,88383,71697],{"class":250},[91,88385,87891],{"class":101},[91,88387,31547],{"class":250},[91,88389,88390,88392,88394],{"class":93,"line":1771},[91,88391,71707],{"class":250},[91,88393,899],{"class":105},[91,88395,31547],{"class":250},[91,88397,88398,88400,88402,88404,88406],{"class":93,"line":1777},[91,88399,87906],{"class":250},[91,88401,87909],{"class":101},[91,88403,12558],{"class":250},[91,88405,87914],{"class":101},[91,88407,87917],{"class":250},[91,88409,88410],{"class":93,"line":1798},[91,88411,77953],{"class":250},[91,88413,88414,88416],{"class":93,"line":1803},[91,88415,87926],{"class":250},[91,88417,87929],{"class":101},[91,88419,88420],{"class":93,"line":1817},[91,88421,52479],{"class":250},[91,88423,88424],{"class":93,"line":1822},[91,88425,2310],{"class":250},[91,88427,88428,88430,88432,88434,88437,88440],{"class":93,"line":1851},[91,88429,11344],{"class":153},[91,88431,87944],{"class":105},[91,88433,13687],{"class":153},[91,88435,88436],{"class":250}," _.",[91,88438,88439],{"class":97},"cloneDeep",[91,88441,70117],{"class":250},[91,88443,88444,88446,88448],{"class":93,"line":1856},[91,88445,73834],{"class":250},[91,88447,58328],{"class":97},[91,88449,88136],{"class":250},[91,88451,88452,88455,88457],{"class":93,"line":1873},[91,88453,88454],{"class":250},"    o.family.baby ",[91,88456,296],{"class":153},[91,88458,88170],{"class":101},[91,88460,88461,88463,88465],{"class":93,"line":1878},[91,88462,73834],{"class":250},[91,88464,58328],{"class":97},[91,88466,70117],{"class":250},[91,88468,88469,88471,88473],{"class":93,"line":1883},[91,88470,52498],{"class":250},[91,88472,51894],{"class":51381},[91,88474,51388],{"class":250},[91,88476,88477,88479,88481],{"class":93,"line":1888},[91,88478,51866],{"class":250},[91,88480,51881],{"class":51381},[91,88482,51388],{"class":250},[91,88484,88485],{"class":93,"line":1902},[91,88486,2523],{"emptyLinePlaceholder":175},[91,88488,88489,88491,88493],{"class":93,"line":1907},[91,88490,51866],{"class":250},[91,88492,50716],{"class":51381},[91,88494,51388],{"class":250},[21,88496,88497],{},[24,88498],{"alt":26,"src":88499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22121,88501,88503],{"id":88502},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[82,88505,88507],{"className":50714,"code":88506,"language":50716,"meta":26,"style":26},"\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",[88,88508,88509,88519,88533,88537,88545,88559,88579,88591,88599,88603,88611,88619,88629,88637,88645,88657,88661,88667,88671,88675,88680,88685,88690,88716,88724,88733,88741,88749,88757,88761],{"__ignoreMap":26},[91,88510,88511,88513,88515,88517],{"class":93,"line":94},[91,88512,51378],{"class":250},[91,88514,51382],{"class":51381},[91,88516,51385],{"class":97},[91,88518,51388],{"class":250},[91,88520,88521,88523,88525,88527,88529,88531],{"class":93,"line":38},[91,88522,1159],{"class":250},[91,88524,50716],{"class":51381},[91,88526,51397],{"class":97},[91,88528,296],{"class":250},[91,88530,51402],{"class":101},[91,88532,51388],{"class":250},[91,88534,88535],{"class":93,"line":1304},[91,88536,2523],{"emptyLinePlaceholder":175},[91,88538,88539,88541,88543],{"class":93,"line":1319},[91,88540,1159],{"class":250},[91,88542,51415],{"class":51381},[91,88544,51388],{"class":250},[91,88546,88547,88549,88551,88553,88555,88557],{"class":93,"line":1325},[91,88548,52225],{"class":250},[91,88550,51425],{"class":51381},[91,88552,51428],{"class":97},[91,88554,296],{"class":250},[91,88556,51433],{"class":101},[91,88558,51388],{"class":250},[91,88560,88561,88563,88565,88567,88569,88571,88573,88575,88577],{"class":93,"line":1339},[91,88562,52225],{"class":250},[91,88564,51425],{"class":51381},[91,88566,15043],{"class":97},[91,88568,296],{"class":250},[91,88570,51472],{"class":101},[91,88572,51452],{"class":97},[91,88574,296],{"class":250},[91,88576,51479],{"class":101},[91,88578,51388],{"class":250},[91,88580,88581,88583,88585,88587,88589],{"class":93,"line":1345},[91,88582,52225],{"class":250},[91,88584,51488],{"class":51381},[91,88586,51491],{"class":250},[91,88588,51488],{"class":51381},[91,88590,51388],{"class":250},[91,88592,88593,88595,88597],{"class":93,"line":1436},[91,88594,51866],{"class":250},[91,88596,51415],{"class":51381},[91,88598,51388],{"class":250},[91,88600,88601],{"class":93,"line":1442},[91,88602,2523],{"emptyLinePlaceholder":175},[91,88604,88605,88607,88609],{"class":93,"line":1454},[91,88606,1159],{"class":250},[91,88608,51881],{"class":51381},[91,88610,51388],{"class":250},[91,88612,88613,88615,88617],{"class":93,"line":1736},[91,88614,52225],{"class":250},[91,88616,51894],{"class":51381},[91,88618,51388],{"class":250},[91,88620,88621,88623,88625,88627],{"class":93,"line":1741},[91,88622,11344],{"class":153},[91,88624,70052],{"class":105},[91,88626,13687],{"class":153},[91,88628,15695],{"class":250},[91,88630,88631,88633,88635],{"class":93,"line":1747},[91,88632,71697],{"class":250},[91,88634,87891],{"class":101},[91,88636,31547],{"class":250},[91,88638,88639,88641,88643],{"class":93,"line":1752},[91,88640,71707],{"class":250},[91,88642,899],{"class":105},[91,88644,31547],{"class":250},[91,88646,88647,88649,88651,88653,88655],{"class":93,"line":1766},[91,88648,87906],{"class":250},[91,88650,87909],{"class":101},[91,88652,12558],{"class":250},[91,88654,87914],{"class":101},[91,88656,87917],{"class":250},[91,88658,88659],{"class":93,"line":1771},[91,88660,77953],{"class":250},[91,88662,88663,88665],{"class":93,"line":1777},[91,88664,87926],{"class":250},[91,88666,87929],{"class":101},[91,88668,88669],{"class":93,"line":1798},[91,88670,52479],{"class":250},[91,88672,88673],{"class":93,"line":1803},[91,88674,2310],{"class":250},[91,88676,88677],{"class":93,"line":1817},[91,88678,88679],{"class":308},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[91,88681,88682],{"class":93,"line":1822},[91,88683,88684],{"class":308},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[91,88686,88687],{"class":93,"line":1851},[91,88688,88689],{"class":308},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[91,88691,88692,88694,88696,88698,88701,88703,88706,88708,88710,88712,88714],{"class":93,"line":1856},[91,88693,11344],{"class":153},[91,88695,87944],{"class":105},[91,88697,13687],{"class":153},[91,88699,88700],{"class":105}," JSON",[91,88702,807],{"class":250},[91,88704,88705],{"class":97},"parse",[91,88707,251],{"class":250},[91,88709,71745],{"class":105},[91,88711,807],{"class":250},[91,88713,71750],{"class":97},[91,88715,71753],{"class":250},[91,88717,88718,88720,88722],{"class":93,"line":1873},[91,88719,73834],{"class":250},[91,88721,58328],{"class":97},[91,88723,88136],{"class":250},[91,88725,88726,88728,88730],{"class":93,"line":1878},[91,88727,88454],{"class":250},[91,88729,296],{"class":153},[91,88731,88732],{"class":101}," '123'\n",[91,88734,88735,88737,88739],{"class":93,"line":1883},[91,88736,73834],{"class":250},[91,88738,58328],{"class":97},[91,88740,70117],{"class":250},[91,88742,88743,88745,88747],{"class":93,"line":1888},[91,88744,52498],{"class":250},[91,88746,51894],{"class":51381},[91,88748,51388],{"class":250},[91,88750,88751,88753,88755],{"class":93,"line":1902},[91,88752,51866],{"class":250},[91,88754,51881],{"class":51381},[91,88756,51388],{"class":250},[91,88758,88759],{"class":93,"line":1907},[91,88760,2523],{"emptyLinePlaceholder":175},[91,88762,88763,88765,88767],{"class":93,"line":2700},[91,88764,51866],{"class":250},[91,88766,50716],{"class":51381},[91,88768,51388],{"class":250},[21,88770,88771],{},[24,88772],{"alt":26,"src":88773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[190,88775,88777],{"id":88776},"_415-异常处理","4.15 异常处理",[14,88779,88780],{},[17,88781,88782],{},"throw抛异常",[21,88784,88785],{},[24,88786],{"alt":26,"src":88787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[14,88789,88790],{"start":38},[17,88791,88792],{},"try\u002Fcatch 捕获错误信息",[21,88794,88795],{},[24,88796],{"alt":26,"src":88797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[82,88799,88801],{"className":50714,"code":88800,"language":50716,"meta":26,"style":26},"\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",[88,88802,88803,88813,88827,88831,88839,88853,88873,88885,88893,88897,88905,88917,88925,88934,88941,88946,88965,88974,88985,88990,89000,89005,89010,89015,89032,89036,89041,89048,89060,89064,89076,89080,89084,89089,89094,89101,89109,89117,89121],{"__ignoreMap":26},[91,88804,88805,88807,88809,88811],{"class":93,"line":94},[91,88806,51378],{"class":250},[91,88808,51382],{"class":51381},[91,88810,51385],{"class":97},[91,88812,51388],{"class":250},[91,88814,88815,88817,88819,88821,88823,88825],{"class":93,"line":38},[91,88816,1159],{"class":250},[91,88818,50716],{"class":51381},[91,88820,51397],{"class":97},[91,88822,296],{"class":250},[91,88824,51402],{"class":101},[91,88826,51388],{"class":250},[91,88828,88829],{"class":93,"line":1304},[91,88830,2523],{"emptyLinePlaceholder":175},[91,88832,88833,88835,88837],{"class":93,"line":1319},[91,88834,1159],{"class":250},[91,88836,51415],{"class":51381},[91,88838,51388],{"class":250},[91,88840,88841,88843,88845,88847,88849,88851],{"class":93,"line":1325},[91,88842,52225],{"class":250},[91,88844,51425],{"class":51381},[91,88846,51428],{"class":97},[91,88848,296],{"class":250},[91,88850,51433],{"class":101},[91,88852,51388],{"class":250},[91,88854,88855,88857,88859,88861,88863,88865,88867,88869,88871],{"class":93,"line":1339},[91,88856,52225],{"class":250},[91,88858,51425],{"class":51381},[91,88860,15043],{"class":97},[91,88862,296],{"class":250},[91,88864,51472],{"class":101},[91,88866,51452],{"class":97},[91,88868,296],{"class":250},[91,88870,51479],{"class":101},[91,88872,51388],{"class":250},[91,88874,88875,88877,88879,88881,88883],{"class":93,"line":1345},[91,88876,52225],{"class":250},[91,88878,51488],{"class":51381},[91,88880,51491],{"class":250},[91,88882,51488],{"class":51381},[91,88884,51388],{"class":250},[91,88886,88887,88889,88891],{"class":93,"line":1436},[91,88888,51866],{"class":250},[91,88890,51415],{"class":51381},[91,88892,51388],{"class":250},[91,88894,88895],{"class":93,"line":1442},[91,88896,2523],{"emptyLinePlaceholder":175},[91,88898,88899,88901,88903],{"class":93,"line":1454},[91,88900,1159],{"class":250},[91,88902,51881],{"class":51381},[91,88904,51388],{"class":250},[91,88906,88907,88909,88911,88913,88915],{"class":93,"line":1736},[91,88908,52225],{"class":250},[91,88910,21],{"class":51381},[91,88912,53575],{"class":250},[91,88914,21],{"class":51381},[91,88916,51388],{"class":250},[91,88918,88919,88921,88923],{"class":93,"line":1741},[91,88920,52225],{"class":250},[91,88922,51894],{"class":51381},[91,88924,51388],{"class":250},[91,88926,88927,88929,88932],{"class":93,"line":1747},[91,88928,70165],{"class":153},[91,88930,88931],{"class":97}," fn",[91,88933,10976],{"class":250},[91,88935,88936,88939],{"class":93,"line":1752},[91,88937,88938],{"class":153},"      try",[91,88940,15695],{"class":250},[91,88942,88943],{"class":93,"line":1766},[91,88944,88945],{"class":308},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[91,88947,88948,88950,88952,88954,88956,88958,88960,88963],{"class":93,"line":1771},[91,88949,61351],{"class":153},[91,88951,6948],{"class":105},[91,88953,13687],{"class":153},[91,88955,54477],{"class":250},[91,88957,54480],{"class":97},[91,88959,251],{"class":250},[91,88961,88962],{"class":101},"'.p'",[91,88964,257],{"class":250},[91,88966,88967,88970,88972],{"class":93,"line":1777},[91,88968,88969],{"class":250},"        p.style.color ",[91,88971,296],{"class":153},[91,88973,67132],{"class":101},[91,88975,88976,88979,88982],{"class":93,"line":1798},[91,88977,88978],{"class":250},"      } ",[91,88980,88981],{"class":153},"catch",[91,88983,88984],{"class":250}," (err) {\n",[91,88986,88987],{"class":93,"line":1803},[91,88988,88989],{"class":308},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[91,88991,88992,88995,88997],{"class":93,"line":1817},[91,88993,88994],{"class":250},"        console.",[91,88996,58328],{"class":97},[91,88998,88999],{"class":250},"(err.message)\n",[91,89001,89002],{"class":93,"line":1822},[91,89003,89004],{"class":308},"        \u002F\u002F 想要中断程序，需要加return\n",[91,89006,89007],{"class":93,"line":1851},[91,89008,89009],{"class":308},"        \u002F\u002F return\n",[91,89011,89012],{"class":93,"line":1856},[91,89013,89014],{"class":308},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[91,89016,89017,89020,89022,89025,89027,89030],{"class":93,"line":1873},[91,89018,89019],{"class":153},"        throw",[91,89021,11701],{"class":153},[91,89023,89024],{"class":97}," Error",[91,89026,251],{"class":250},[91,89028,89029],{"class":101},"'你看看，选择器错误了吧'",[91,89031,257],{"class":250},[91,89033,89034],{"class":93,"line":1878},[91,89035,52479],{"class":250},[91,89037,89038],{"class":93,"line":1883},[91,89039,89040],{"class":308},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[91,89042,89043,89046],{"class":93,"line":1888},[91,89044,89045],{"class":153},"      finally",[91,89047,15695],{"class":250},[91,89049,89050,89053,89055,89058],{"class":93,"line":1902},[91,89051,89052],{"class":97},"        alert",[91,89054,251],{"class":250},[91,89056,89057],{"class":101},"'弹出对话框'",[91,89059,257],{"class":250},[91,89061,89062],{"class":93,"line":1907},[91,89063,52479],{"class":250},[91,89065,89066,89068,89070,89072,89074],{"class":93,"line":2700},[91,89067,58325],{"class":250},[91,89069,58328],{"class":97},[91,89071,251],{"class":250},[91,89073,721],{"class":105},[91,89075,257],{"class":250},[91,89077,89078],{"class":93,"line":2714},[91,89079,2523],{"emptyLinePlaceholder":175},[91,89081,89082],{"class":93,"line":2722},[91,89083,2310],{"class":250},[91,89085,89086],{"class":93,"line":2727},[91,89087,89088],{"class":308},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[91,89090,89091],{"class":93,"line":2733},[91,89092,89093],{"class":308},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[91,89095,89096,89099],{"class":93,"line":2739},[91,89097,89098],{"class":97},"    fn",[91,89100,2099],{"class":250},[91,89102,89103,89105,89107],{"class":93,"line":2744},[91,89104,52498],{"class":250},[91,89106,51894],{"class":51381},[91,89108,51388],{"class":250},[91,89110,89111,89113,89115],{"class":93,"line":8071},[91,89112,51866],{"class":250},[91,89114,51881],{"class":51381},[91,89116,51388],{"class":250},[91,89118,89119],{"class":93,"line":8095},[91,89120,2523],{"emptyLinePlaceholder":175},[91,89122,89123,89125,89127],{"class":93,"line":8100},[91,89124,51866],{"class":250},[91,89126,50716],{"class":51381},[91,89128,51388],{"class":250},[21,89130,89131],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[14,89133,89134],{"start":1304},[17,89135,89136],{},"debugger",[21,89138,89139],{},[24,89140],{"alt":26,"src":89141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[21,89143,89144],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[190,89146,89148],{"id":89147},"_416-处理this","4.16 处理this",[217,89150,89152],{"id":89151},"_4161-this的指向","4.16.1 this的指向",[14,89154,89155],{},[17,89156,89157],{},"普通函数的this",[21,89159,89160],{},[24,89161],{"alt":26,"src":89162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[14,89164,89165],{"start":38},[17,89166,89167],{},"箭头函数的this",[21,89169,89170],{},[24,89171],{"alt":26,"src":89172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[21,89174,89175],{},[24,89176],{"alt":26,"src":89177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[21,89179,89180],{},[24,89181],{"alt":26,"src":89182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[217,89184,89186],{"id":89185},"_4162-this的改变","4.16.2 this的改变",[21,89188,89189],{},"call() apply() bind()",[14,89191,89192],{},[17,89193,89194],{},"call()",[21,89196,89197],{},[24,89198],{"alt":26,"src":89199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[21,89201,89202],{},"两个作用：①调用函数；②改变this指向",[82,89204,89206],{"className":53148,"code":89205,"language":53150,"meta":26,"style":26},"\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",[88,89207,89208,89216,89224,89228,89233,89237,89242,89247,89252,89256,89261,89269],{"__ignoreMap":26},[91,89209,89210,89212,89214],{"class":93,"line":94},[91,89211,1159],{"class":250},[91,89213,51881],{"class":51381},[91,89215,51388],{"class":250},[91,89217,89218,89220,89222],{"class":93,"line":38},[91,89219,52225],{"class":250},[91,89221,51894],{"class":51381},[91,89223,51388],{"class":250},[91,89225,89226],{"class":93,"line":1304},[91,89227,71604],{"class":250},[91,89229,89230],{"class":93,"line":1319},[91,89231,89232],{"class":250},"      uname: 'pink'\n",[91,89234,89235],{"class":93,"line":1325},[91,89236,2310],{"class":250},[91,89238,89239],{"class":93,"line":1339},[91,89240,89241],{"class":250},"    function fn(x, y) {\n",[91,89243,89244],{"class":93,"line":1345},[91,89245,89246],{"class":250},"      console.log(this)  \u002F\u002Fwindow\n",[91,89248,89249],{"class":93,"line":1436},[91,89250,89251],{"class":250},"      console.log(x + y)\n",[91,89253,89254],{"class":93,"line":1442},[91,89255,2310],{"class":250},[91,89257,89258],{"class":93,"line":1454},[91,89259,89260],{"class":250},"    fn.call(obj, 1, 2)\n",[91,89262,89263,89265,89267],{"class":93,"line":1736},[91,89264,52498],{"class":250},[91,89266,51894],{"class":51381},[91,89268,51388],{"class":250},[91,89270,89271,89273,89275],{"class":93,"line":1741},[91,89272,51866],{"class":250},[91,89274,51881],{"class":51381},[91,89276,51388],{"class":250},[21,89278,89279],{},[24,89280],{"alt":26,"src":89281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[14,89283,89284],{"start":38},[17,89285,89286],{},"apply()",[21,89288,89289],{},[24,89290],{"alt":26,"src":89291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[21,89293,89202],{},[21,89295,89296],{},"call传递的是普通参数，而apply必须传递的是数组",[82,89298,89300],{"className":50714,"code":89299,"language":50716,"meta":26,"style":26},"\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",[88,89301,89302,89312,89326,89330,89338,89352,89372,89384,89392,89396,89404,89412,89422,89429,89433,89438,89454,89466,89480,89484,89489,89508,89513,89517,89522,89527,89535,89540,89562,89567,89583,89599,89611,89615,89620,89639,89647,89655,89659],{"__ignoreMap":26},[91,89303,89304,89306,89308,89310],{"class":93,"line":94},[91,89305,51378],{"class":250},[91,89307,51382],{"class":51381},[91,89309,51385],{"class":97},[91,89311,51388],{"class":250},[91,89313,89314,89316,89318,89320,89322,89324],{"class":93,"line":38},[91,89315,1159],{"class":250},[91,89317,50716],{"class":51381},[91,89319,51397],{"class":97},[91,89321,296],{"class":250},[91,89323,51402],{"class":101},[91,89325,51388],{"class":250},[91,89327,89328],{"class":93,"line":1304},[91,89329,2523],{"emptyLinePlaceholder":175},[91,89331,89332,89334,89336],{"class":93,"line":1319},[91,89333,1159],{"class":250},[91,89335,51415],{"class":51381},[91,89337,51388],{"class":250},[91,89339,89340,89342,89344,89346,89348,89350],{"class":93,"line":1325},[91,89341,52225],{"class":250},[91,89343,51425],{"class":51381},[91,89345,51428],{"class":97},[91,89347,296],{"class":250},[91,89349,51433],{"class":101},[91,89351,51388],{"class":250},[91,89353,89354,89356,89358,89360,89362,89364,89366,89368,89370],{"class":93,"line":1339},[91,89355,52225],{"class":250},[91,89357,51425],{"class":51381},[91,89359,15043],{"class":97},[91,89361,296],{"class":250},[91,89363,51472],{"class":101},[91,89365,51452],{"class":97},[91,89367,296],{"class":250},[91,89369,51479],{"class":101},[91,89371,51388],{"class":250},[91,89373,89374,89376,89378,89380,89382],{"class":93,"line":1345},[91,89375,52225],{"class":250},[91,89377,51488],{"class":51381},[91,89379,51491],{"class":250},[91,89381,51488],{"class":51381},[91,89383,51388],{"class":250},[91,89385,89386,89388,89390],{"class":93,"line":1436},[91,89387,51866],{"class":250},[91,89389,51415],{"class":51381},[91,89391,51388],{"class":250},[91,89393,89394],{"class":93,"line":1442},[91,89395,2523],{"emptyLinePlaceholder":175},[91,89397,89398,89400,89402],{"class":93,"line":1454},[91,89399,1159],{"class":250},[91,89401,51881],{"class":51381},[91,89403,51388],{"class":250},[91,89405,89406,89408,89410],{"class":93,"line":1736},[91,89407,52225],{"class":250},[91,89409,51894],{"class":51381},[91,89411,51388],{"class":250},[91,89413,89414,89416,89418,89420],{"class":93,"line":1741},[91,89415,11344],{"class":153},[91,89417,70052],{"class":105},[91,89419,13687],{"class":153},[91,89421,15695],{"class":250},[91,89423,89424,89426],{"class":93,"line":1747},[91,89425,71707],{"class":250},[91,89427,89428],{"class":105},"18\n",[91,89430,89431],{"class":93,"line":1752},[91,89432,2310],{"class":250},[91,89434,89435],{"class":93,"line":1766},[91,89436,89437],{"class":308},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[91,89439,89440,89442,89444,89446,89448,89450,89452],{"class":93,"line":1771},[91,89441,70165],{"class":153},[91,89443,88931],{"class":97},[91,89445,251],{"class":250},[91,89447,1069],{"class":5339},[91,89449,12558],{"class":250},[91,89451,1094],{"class":5339},[91,89453,12565],{"class":250},[91,89455,89456,89458,89460,89462,89464],{"class":93,"line":1777},[91,89457,58325],{"class":250},[91,89459,58328],{"class":97},[91,89461,251],{"class":250},[91,89463,87074],{"class":105},[91,89465,257],{"class":250},[91,89467,89468,89470,89472,89475,89477],{"class":93,"line":1798},[91,89469,58325],{"class":250},[91,89471,58328],{"class":97},[91,89473,89474],{"class":250},"(x ",[91,89476,730],{"class":153},[91,89478,89479],{"class":250}," y)\n",[91,89481,89482],{"class":93,"line":1803},[91,89483,2310],{"class":250},[91,89485,89486],{"class":93,"line":1817},[91,89487,89488],{"class":308},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[91,89490,89491,89494,89497,89500,89502,89504,89506],{"class":93,"line":1822},[91,89492,89493],{"class":250},"    fn.",[91,89495,89496],{"class":97},"apply",[91,89498,89499],{"class":250},"(obj, [",[91,89501,466],{"class":105},[91,89503,12558],{"class":250},[91,89505,327],{"class":105},[91,89507,4780],{"class":250},[91,89509,89510],{"class":93,"line":1851},[91,89511,89512],{"class":308},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[91,89514,89515],{"class":93,"line":1856},[91,89516,2523],{"emptyLinePlaceholder":175},[91,89518,89519],{"class":93,"line":1873},[91,89520,89521],{"class":308},"    \u002F\u002F 使用场景：求数组最大值\n",[91,89523,89524],{"class":93,"line":1878},[91,89525,89526],{"class":308},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[91,89528,89529,89532],{"class":93,"line":1883},[91,89530,89531],{"class":308},"    \u002F\u002F console.log(max)",[91,89533,89534],{"class":308},"   \u002F\u002F3\n",[91,89536,89537],{"class":93,"line":1888},[91,89538,89539],{"class":308},"    \u002F\u002F 指向空或者Math都是可以的\n",[91,89541,89542,89544,89546,89548,89550,89552,89554,89556,89558,89560],{"class":93,"line":1902},[91,89543,11344],{"class":153},[91,89545,57776],{"class":105},[91,89547,13687],{"class":153},[91,89549,52307],{"class":250},[91,89551,560],{"class":105},[91,89553,12558],{"class":250},[91,89555,753],{"class":105},[91,89557,12558],{"class":250},[91,89559,784],{"class":105},[91,89561,33327],{"class":250},[91,89563,89564],{"class":93,"line":1907},[91,89565,89566],{"class":308},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[91,89568,89569,89571,89573,89575,89578,89580],{"class":93,"line":2700},[91,89570,11344],{"class":153},[91,89572,6074],{"class":105},[91,89574,13687],{"class":153},[91,89576,89577],{"class":250}," Math.max.",[91,89579,89496],{"class":97},[91,89581,89582],{"class":250},"(Math, arr)\n",[91,89584,89585,89587,89590,89592,89595,89597],{"class":93,"line":2714},[91,89586,11344],{"class":153},[91,89588,89589],{"class":105}," min",[91,89591,13687],{"class":153},[91,89593,89594],{"class":250}," Math.min.",[91,89596,89496],{"class":97},[91,89598,89582],{"class":250},[91,89600,89601,89603,89605,89608],{"class":93,"line":2722},[91,89602,73834],{"class":250},[91,89604,58328],{"class":97},[91,89606,89607],{"class":250},"(max, min)     ",[91,89609,89610],{"class":308},"\u002F\u002F100,4\n",[91,89612,89613],{"class":93,"line":2727},[91,89614,2523],{"emptyLinePlaceholder":175},[91,89616,89617],{"class":93,"line":2733},[91,89618,89619],{"class":308},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[91,89621,89622,89624,89626,89629,89631,89633,89636],{"class":93,"line":2739},[91,89623,73834],{"class":250},[91,89625,58328],{"class":97},[91,89627,89628],{"class":250},"(Max.",[91,89630,6138],{"class":97},[91,89632,251],{"class":250},[91,89634,89635],{"class":153},"...",[91,89637,89638],{"class":250},"arr))\n",[91,89640,89641,89643,89645],{"class":93,"line":2744},[91,89642,52498],{"class":250},[91,89644,51894],{"class":51381},[91,89646,51388],{"class":250},[91,89648,89649,89651,89653],{"class":93,"line":8071},[91,89650,51866],{"class":250},[91,89652,51881],{"class":51381},[91,89654,51388],{"class":250},[91,89656,89657],{"class":93,"line":8095},[91,89658,2523],{"emptyLinePlaceholder":175},[91,89660,89661,89663,89665],{"class":93,"line":8100},[91,89662,51866],{"class":250},[91,89664,50716],{"class":51381},[91,89666,51388],{"class":250},[21,89668,89669],{},[24,89670],{"alt":26,"src":89671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[14,89673,89674],{"start":1304},[17,89675,89676],{},"bind()",[21,89678,89679],{},[24,89680],{"alt":26,"src":89681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[21,89683,89684],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[21,89686,89687],{},"bind的语法跟call很相似",[82,89689,89691],{"className":53148,"code":89690,"language":53150,"meta":26,"style":26},"\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",[88,89692,89693,89701,89709,89713,89718,89722,89726,89731,89735,89740,89745,89750,89755,89760,89765,89770,89774,89782],{"__ignoreMap":26},[91,89694,89695,89697,89699],{"class":93,"line":94},[91,89696,1159],{"class":250},[91,89698,51881],{"class":51381},[91,89700,51388],{"class":250},[91,89702,89703,89705,89707],{"class":93,"line":38},[91,89704,52225],{"class":250},[91,89706,51894],{"class":51381},[91,89708,51388],{"class":250},[91,89710,89711],{"class":93,"line":1304},[91,89712,71604],{"class":250},[91,89714,89715],{"class":93,"line":1319},[91,89716,89717],{"class":250},"      age: 18\n",[91,89719,89720],{"class":93,"line":1325},[91,89721,2310],{"class":250},[91,89723,89724],{"class":93,"line":1339},[91,89725,77224],{"class":250},[91,89727,89728],{"class":93,"line":1345},[91,89729,89730],{"class":250},"      console.log(this)\n",[91,89732,89733],{"class":93,"line":1436},[91,89734,2310],{"class":250},[91,89736,89737],{"class":93,"line":1442},[91,89738,89739],{"class":250},"    \u002F\u002F 1.bind 不会调用函数\n",[91,89741,89742],{"class":93,"line":1454},[91,89743,89744],{"class":250},"    \u002F\u002F 2.bind能改变this的指向\n",[91,89746,89747],{"class":93,"line":1736},[91,89748,89749],{"class":250},"    fn.bind()\n",[91,89751,89752],{"class":93,"line":1741},[91,89753,89754],{"class":250},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[91,89756,89757],{"class":93,"line":1747},[91,89758,89759],{"class":250},"    const fun = fn.bind(obj)\n",[91,89761,89762],{"class":93,"line":1752},[91,89763,89764],{"class":250},"    \u002F\u002F console.log(fun)\n",[91,89766,89767],{"class":93,"line":1766},[91,89768,89769],{"class":250},"    \u002F\u002F 调用,查看this的指向\n",[91,89771,89772],{"class":93,"line":1771},[91,89773,52732],{"class":250},[91,89775,89776,89778,89780],{"class":93,"line":1777},[91,89777,52498],{"class":250},[91,89779,51894],{"class":51381},[91,89781,51388],{"class":250},[91,89783,89784,89786,89788],{"class":93,"line":1798},[91,89785,51866],{"class":250},[91,89787,51881],{"class":51381},[91,89789,51388],{"class":250},[21,89791,89792],{},[24,89793],{"alt":26,"src":89794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[14,89796,89797],{"start":1319},[17,89798,89799],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[82,89801,89803],{"className":53148,"code":89802,"language":53150,"meta":26,"style":26},"\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",[88,89804,89805,89813,89826,89834,89839,89843,89848,89853,89858,89863,89868,89873,89878,89883,89887,89895],{"__ignoreMap":26},[91,89806,89807,89809,89811],{"class":93,"line":94},[91,89808,1159],{"class":250},[91,89810,51881],{"class":51381},[91,89812,51388],{"class":250},[91,89814,89815,89817,89819,89822,89824],{"class":93,"line":38},[91,89816,52225],{"class":250},[91,89818,53968],{"class":51381},[91,89820,89821],{"class":250},">禁用\u003C\u002F",[91,89823,53968],{"class":51381},[91,89825,51388],{"class":250},[91,89827,89828,89830,89832],{"class":93,"line":1304},[91,89829,52225],{"class":250},[91,89831,51894],{"class":51381},[91,89833,51388],{"class":250},[91,89835,89836],{"class":93,"line":1319},[91,89837,89838],{"class":250},"    const btn = document.querySelector('button')\n",[91,89840,89841],{"class":93,"line":1325},[91,89842,59097],{"class":250},[91,89844,89845],{"class":93,"line":1339},[91,89846,89847],{"class":250},"      this.disabled = true\n",[91,89849,89850],{"class":93,"line":1345},[91,89851,89852],{"class":250},"      \u002F\u002F 定时器是window进行调用的\n",[91,89854,89855],{"class":93,"line":1436},[91,89856,89857],{"class":250},"      setTimeout(function () {\n",[91,89859,89860],{"class":93,"line":1442},[91,89861,89862],{"class":250},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[91,89864,89865],{"class":93,"line":1454},[91,89866,89867],{"class":250},"        this.disabled = false\n",[91,89869,89870],{"class":93,"line":1736},[91,89871,89872],{"class":250},"      }.bind(this), 2000)\n",[91,89874,89875],{"class":93,"line":1741},[91,89876,89877],{"class":250},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[91,89879,89880],{"class":93,"line":1747},[91,89881,89882],{"class":250},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[91,89884,89885],{"class":93,"line":1752},[91,89886,33542],{"class":250},[91,89888,89889,89891,89893],{"class":93,"line":1766},[91,89890,52498],{"class":250},[91,89892,51894],{"class":51381},[91,89894,51388],{"class":250},[91,89896,89897,89899,89901],{"class":93,"line":1771},[91,89898,51866],{"class":250},[91,89900,51881],{"class":51381},[91,89902,51388],{"class":250},[14,89904,89905],{"start":1325},[17,89906,22076],{},[21,89908,89909],{},[24,89910],{"alt":26,"src":89911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[190,89913,89915],{"id":89914},"_417-性能优化","4.17 性能优化",[217,89917,89919],{"id":89918},"_4171-防抖","4.17.1 防抖",[21,89921,89922],{},[24,89923],{"alt":26,"src":89924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[21,89926,89927],{},[398,89928,89929],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[21,89931,89932],{},"防抖实现方式：",[1256,89934,89935],{},[17,89936,89937],{},"lodash 提供了防抖处理",[21,89939,89940],{},"_.debounce(func,[wait=0],[options={}])",[21,89942,89943],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[82,89945,89947],{"className":50714,"code":89946,"language":50716,"meta":26,"style":26},"\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",[88,89948,89949,89959,89973,89977,89985,89999,90019,90031,90039,90045,90055,90067,90079,90090,90102,90112,90122,90135,90139,90147,90155,90159,90167,90185,90203,90211,90230,90240,90249,90260,90265,90269,90274,90279,90284,90309,90317,90325,90329],{"__ignoreMap":26},[91,89950,89951,89953,89955,89957],{"class":93,"line":94},[91,89952,51378],{"class":250},[91,89954,51382],{"class":51381},[91,89956,51385],{"class":97},[91,89958,51388],{"class":250},[91,89960,89961,89963,89965,89967,89969,89971],{"class":93,"line":38},[91,89962,1159],{"class":250},[91,89964,50716],{"class":51381},[91,89966,51397],{"class":97},[91,89968,296],{"class":250},[91,89970,51402],{"class":101},[91,89972,51388],{"class":250},[91,89974,89975],{"class":93,"line":1304},[91,89976,2523],{"emptyLinePlaceholder":175},[91,89978,89979,89981,89983],{"class":93,"line":1319},[91,89980,1159],{"class":250},[91,89982,51415],{"class":51381},[91,89984,51388],{"class":250},[91,89986,89987,89989,89991,89993,89995,89997],{"class":93,"line":1325},[91,89988,52225],{"class":250},[91,89990,51425],{"class":51381},[91,89992,51428],{"class":97},[91,89994,296],{"class":250},[91,89996,51433],{"class":101},[91,89998,51388],{"class":250},[91,90000,90001,90003,90005,90007,90009,90011,90013,90015,90017],{"class":93,"line":1339},[91,90002,52225],{"class":250},[91,90004,51425],{"class":51381},[91,90006,15043],{"class":97},[91,90008,296],{"class":250},[91,90010,51472],{"class":101},[91,90012,51452],{"class":97},[91,90014,296],{"class":250},[91,90016,51479],{"class":101},[91,90018,51388],{"class":250},[91,90020,90021,90023,90025,90027,90029],{"class":93,"line":1345},[91,90022,52225],{"class":250},[91,90024,51488],{"class":51381},[91,90026,51491],{"class":250},[91,90028,51488],{"class":51381},[91,90030,51388],{"class":250},[91,90032,90033,90035,90037],{"class":93,"line":1436},[91,90034,52225],{"class":250},[91,90036,168],{"class":51381},[91,90038,51388],{"class":250},[91,90040,90041,90043],{"class":93,"line":1442},[91,90042,54833],{"class":97},[91,90044,15695],{"class":250},[91,90046,90047,90049,90051,90053],{"class":93,"line":1454},[91,90048,72677],{"class":105},[91,90050,51518],{"class":250},[91,90052,60586],{"class":105},[91,90054,1415],{"class":250},[91,90056,90057,90059,90061,90063,90065],{"class":93,"line":1736},[91,90058,54852],{"class":105},[91,90060,51518],{"class":250},[91,90062,1846],{"class":105},[91,90064,51573],{"class":153},[91,90066,1415],{"class":250},[91,90068,90069,90071,90073,90075,90077],{"class":93,"line":1741},[91,90070,54866],{"class":105},[91,90072,51518],{"class":250},[91,90074,1846],{"class":105},[91,90076,51573],{"class":153},[91,90078,1415],{"class":250},[91,90080,90081,90083,90085,90088],{"class":93,"line":1747},[91,90082,54965],{"class":105},[91,90084,51518],{"class":250},[91,90086,90087],{"class":105},"gray",[91,90089,1415],{"class":250},[91,90091,90092,90094,90096,90098,90100],{"class":93,"line":1752},[91,90093,55003],{"class":105},[91,90095,51518],{"class":250},[91,90097,1074],{"class":105},[91,90099,51573],{"class":153},[91,90101,1415],{"class":250},[91,90103,90104,90106,90108,90110],{"class":93,"line":1766},[91,90105,57497],{"class":105},[91,90107,51518],{"class":250},[91,90109,60923],{"class":105},[91,90111,1415],{"class":250},[91,90113,90114,90116,90118,90120],{"class":93,"line":1771},[91,90115,57367],{"class":105},[91,90117,51518],{"class":250},[91,90119,51673],{"class":105},[91,90121,1415],{"class":250},[91,90123,90124,90127,90129,90131,90133],{"class":93,"line":1777},[91,90125,90126],{"class":105},"      padding-top",[91,90128,51518],{"class":250},[91,90130,568],{"class":105},[91,90132,51573],{"class":153},[91,90134,1415],{"class":250},[91,90136,90137],{"class":93,"line":1798},[91,90138,2310],{"class":250},[91,90140,90141,90143,90145],{"class":93,"line":1803},[91,90142,52498],{"class":250},[91,90144,168],{"class":51381},[91,90146,51388],{"class":250},[91,90148,90149,90151,90153],{"class":93,"line":1817},[91,90150,51866],{"class":250},[91,90152,51415],{"class":51381},[91,90154,51388],{"class":250},[91,90156,90157],{"class":93,"line":1822},[91,90158,2523],{"emptyLinePlaceholder":175},[91,90160,90161,90163,90165],{"class":93,"line":1851},[91,90162,1159],{"class":250},[91,90164,51881],{"class":51381},[91,90166,51388],{"class":250},[91,90168,90169,90171,90173,90175,90177,90179,90181,90183],{"class":93,"line":1856},[91,90170,52225],{"class":250},[91,90172,51692],{"class":51381},[91,90174,53567],{"class":97},[91,90176,296],{"class":250},[91,90178,53572],{"class":101},[91,90180,55395],{"class":250},[91,90182,51692],{"class":51381},[91,90184,51388],{"class":250},[91,90186,90187,90189,90191,90193,90195,90197,90199,90201],{"class":93,"line":1873},[91,90188,52225],{"class":250},[91,90190,51894],{"class":51381},[91,90192,55320],{"class":97},[91,90194,296],{"class":250},[91,90196,88355],{"class":101},[91,90198,55395],{"class":250},[91,90200,51894],{"class":51381},[91,90202,51388],{"class":250},[91,90204,90205,90207,90209],{"class":93,"line":1878},[91,90206,52225],{"class":250},[91,90208,51894],{"class":51381},[91,90210,51388],{"class":250},[91,90212,90213,90215,90217,90219,90221,90223,90225,90228],{"class":93,"line":1883},[91,90214,11344],{"class":153},[91,90216,87014],{"class":105},[91,90218,13687],{"class":153},[91,90220,54477],{"class":250},[91,90222,54480],{"class":97},[91,90224,251],{"class":250},[91,90226,90227],{"class":101},"'.box'",[91,90229,257],{"class":250},[91,90231,90232,90234,90236,90238],{"class":93,"line":1888},[91,90233,52300],{"class":153},[91,90235,9561],{"class":250},[91,90237,296],{"class":153},[91,90239,47414],{"class":105},[91,90241,90242,90244,90247],{"class":93,"line":1902},[91,90243,70165],{"class":153},[91,90245,90246],{"class":97}," mouseMove",[91,90248,10976],{"class":250},[91,90250,90251,90254,90256,90258],{"class":93,"line":1907},[91,90252,90253],{"class":250},"      box.innerHTML ",[91,90255,296],{"class":153},[91,90257,3155],{"class":250},[91,90259,2825],{"class":153},[91,90261,90262],{"class":93,"line":2700},[91,90263,90264],{"class":308},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[91,90266,90267],{"class":93,"line":2714},[91,90268,2310],{"class":250},[91,90270,90271],{"class":93,"line":2722},[91,90272,90273],{"class":308},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[91,90275,90276],{"class":93,"line":2727},[91,90277,90278],{"class":308},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[91,90280,90281],{"class":93,"line":2733},[91,90282,90283],{"class":308},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[91,90285,90286,90289,90291,90293,90296,90299,90302,90305,90307],{"class":93,"line":2739},[91,90287,90288],{"class":250},"    box.",[91,90290,57894],{"class":97},[91,90292,251],{"class":250},[91,90294,90295],{"class":101},"'mousemove'",[91,90297,90298],{"class":250},", _.",[91,90300,90301],{"class":97},"debounce",[91,90303,90304],{"class":250},"(mouseMove, ",[91,90306,65155],{"class":105},[91,90308,30578],{"class":250},[91,90310,90311,90313,90315],{"class":93,"line":2744},[91,90312,52498],{"class":250},[91,90314,51894],{"class":51381},[91,90316,51388],{"class":250},[91,90318,90319,90321,90323],{"class":93,"line":8071},[91,90320,51866],{"class":250},[91,90322,51881],{"class":51381},[91,90324,51388],{"class":250},[91,90326,90327],{"class":93,"line":8095},[91,90328,2523],{"emptyLinePlaceholder":175},[91,90330,90331,90333,90335],{"class":93,"line":8100},[91,90332,51866],{"class":250},[91,90334,50716],{"class":51381},[91,90336,51388],{"class":250},[1256,90338,90339],{},[17,90340,90341],{},"手写一个防抖函数来处理",[21,90343,90344],{},"防抖的核心就是利用定时器来实现的：",[21,90346,90347],{},"①声明一个定时器变量",[21,90349,90350],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[21,90352,90353],{},"③如果没有定时器则开启定时器，记得存到变量里面",[82,90355,90357],{"className":50714,"code":90356,"language":50716,"meta":26,"style":26},"\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",[88,90358,90359,90369,90383,90387,90395,90409,90429,90441,90449,90455,90465,90477,90489,90499,90511,90521,90531,90543,90547,90555,90563,90567,90575,90593,90611,90619,90637,90647,90655,90665,90669,90673,90677,90682,90687,90692,90697,90702,90707,90725,90732,90737,90745,90750,90763,90779,90789,90794,90798,90802,90822,90826,90831,90836,90841,90846,90854,90862,90866],{"__ignoreMap":26},[91,90360,90361,90363,90365,90367],{"class":93,"line":94},[91,90362,51378],{"class":250},[91,90364,51382],{"class":51381},[91,90366,51385],{"class":97},[91,90368,51388],{"class":250},[91,90370,90371,90373,90375,90377,90379,90381],{"class":93,"line":38},[91,90372,1159],{"class":250},[91,90374,50716],{"class":51381},[91,90376,51397],{"class":97},[91,90378,296],{"class":250},[91,90380,51402],{"class":101},[91,90382,51388],{"class":250},[91,90384,90385],{"class":93,"line":1304},[91,90386,2523],{"emptyLinePlaceholder":175},[91,90388,90389,90391,90393],{"class":93,"line":1319},[91,90390,1159],{"class":250},[91,90392,51415],{"class":51381},[91,90394,51388],{"class":250},[91,90396,90397,90399,90401,90403,90405,90407],{"class":93,"line":1325},[91,90398,52225],{"class":250},[91,90400,51425],{"class":51381},[91,90402,51428],{"class":97},[91,90404,296],{"class":250},[91,90406,51433],{"class":101},[91,90408,51388],{"class":250},[91,90410,90411,90413,90415,90417,90419,90421,90423,90425,90427],{"class":93,"line":1339},[91,90412,52225],{"class":250},[91,90414,51425],{"class":51381},[91,90416,15043],{"class":97},[91,90418,296],{"class":250},[91,90420,51472],{"class":101},[91,90422,51452],{"class":97},[91,90424,296],{"class":250},[91,90426,51479],{"class":101},[91,90428,51388],{"class":250},[91,90430,90431,90433,90435,90437,90439],{"class":93,"line":1345},[91,90432,52225],{"class":250},[91,90434,51488],{"class":51381},[91,90436,51491],{"class":250},[91,90438,51488],{"class":51381},[91,90440,51388],{"class":250},[91,90442,90443,90445,90447],{"class":93,"line":1436},[91,90444,52225],{"class":250},[91,90446,168],{"class":51381},[91,90448,51388],{"class":250},[91,90450,90451,90453],{"class":93,"line":1442},[91,90452,54833],{"class":97},[91,90454,15695],{"class":250},[91,90456,90457,90459,90461,90463],{"class":93,"line":1454},[91,90458,72677],{"class":105},[91,90460,51518],{"class":250},[91,90462,60586],{"class":105},[91,90464,1415],{"class":250},[91,90466,90467,90469,90471,90473,90475],{"class":93,"line":1736},[91,90468,54852],{"class":105},[91,90470,51518],{"class":250},[91,90472,1846],{"class":105},[91,90474,51573],{"class":153},[91,90476,1415],{"class":250},[91,90478,90479,90481,90483,90485,90487],{"class":93,"line":1741},[91,90480,54866],{"class":105},[91,90482,51518],{"class":250},[91,90484,1846],{"class":105},[91,90486,51573],{"class":153},[91,90488,1415],{"class":250},[91,90490,90491,90493,90495,90497],{"class":93,"line":1747},[91,90492,54965],{"class":105},[91,90494,51518],{"class":250},[91,90496,90087],{"class":105},[91,90498,1415],{"class":250},[91,90500,90501,90503,90505,90507,90509],{"class":93,"line":1752},[91,90502,55003],{"class":105},[91,90504,51518],{"class":250},[91,90506,1074],{"class":105},[91,90508,51573],{"class":153},[91,90510,1415],{"class":250},[91,90512,90513,90515,90517,90519],{"class":93,"line":1766},[91,90514,57497],{"class":105},[91,90516,51518],{"class":250},[91,90518,60923],{"class":105},[91,90520,1415],{"class":250},[91,90522,90523,90525,90527,90529],{"class":93,"line":1771},[91,90524,57367],{"class":105},[91,90526,51518],{"class":250},[91,90528,51673],{"class":105},[91,90530,1415],{"class":250},[91,90532,90533,90535,90537,90539,90541],{"class":93,"line":1777},[91,90534,90126],{"class":105},[91,90536,51518],{"class":250},[91,90538,568],{"class":105},[91,90540,51573],{"class":153},[91,90542,1415],{"class":250},[91,90544,90545],{"class":93,"line":1798},[91,90546,2310],{"class":250},[91,90548,90549,90551,90553],{"class":93,"line":1803},[91,90550,52498],{"class":250},[91,90552,168],{"class":51381},[91,90554,51388],{"class":250},[91,90556,90557,90559,90561],{"class":93,"line":1817},[91,90558,51866],{"class":250},[91,90560,51415],{"class":51381},[91,90562,51388],{"class":250},[91,90564,90565],{"class":93,"line":1822},[91,90566,2523],{"emptyLinePlaceholder":175},[91,90568,90569,90571,90573],{"class":93,"line":1851},[91,90570,1159],{"class":250},[91,90572,51881],{"class":51381},[91,90574,51388],{"class":250},[91,90576,90577,90579,90581,90583,90585,90587,90589,90591],{"class":93,"line":1856},[91,90578,52225],{"class":250},[91,90580,51692],{"class":51381},[91,90582,53567],{"class":97},[91,90584,296],{"class":250},[91,90586,53572],{"class":101},[91,90588,55395],{"class":250},[91,90590,51692],{"class":51381},[91,90592,51388],{"class":250},[91,90594,90595,90597,90599,90601,90603,90605,90607,90609],{"class":93,"line":1873},[91,90596,52225],{"class":250},[91,90598,51894],{"class":51381},[91,90600,55320],{"class":97},[91,90602,296],{"class":250},[91,90604,88355],{"class":101},[91,90606,55395],{"class":250},[91,90608,51894],{"class":51381},[91,90610,51388],{"class":250},[91,90612,90613,90615,90617],{"class":93,"line":1878},[91,90614,52225],{"class":250},[91,90616,51894],{"class":51381},[91,90618,51388],{"class":250},[91,90620,90621,90623,90625,90627,90629,90631,90633,90635],{"class":93,"line":1883},[91,90622,11344],{"class":153},[91,90624,87014],{"class":105},[91,90626,13687],{"class":153},[91,90628,54477],{"class":250},[91,90630,54480],{"class":97},[91,90632,251],{"class":250},[91,90634,90227],{"class":101},[91,90636,257],{"class":250},[91,90638,90639,90641,90643,90645],{"class":93,"line":1888},[91,90640,52300],{"class":153},[91,90642,9561],{"class":250},[91,90644,296],{"class":153},[91,90646,47414],{"class":105},[91,90648,90649,90651,90653],{"class":93,"line":1902},[91,90650,70165],{"class":153},[91,90652,90246],{"class":97},[91,90654,10976],{"class":250},[91,90656,90657,90659,90661,90663],{"class":93,"line":1907},[91,90658,90253],{"class":250},[91,90660,296],{"class":153},[91,90662,3155],{"class":250},[91,90664,2825],{"class":153},[91,90666,90667],{"class":93,"line":2700},[91,90668,90264],{"class":308},[91,90670,90671],{"class":93,"line":2714},[91,90672,2310],{"class":250},[91,90674,90675],{"class":93,"line":2722},[91,90676,90273],{"class":308},[91,90678,90679],{"class":93,"line":2727},[91,90680,90681],{"class":308},"    \u002F\u002F 手写防抖函数\n",[91,90683,90684],{"class":93,"line":2733},[91,90685,90686],{"class":308},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[91,90688,90689],{"class":93,"line":2739},[91,90690,90691],{"class":308},"    \u002F\u002F 1.声明定时器变量\n",[91,90693,90694],{"class":93,"line":2744},[91,90695,90696],{"class":308},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[91,90698,90699],{"class":93,"line":8071},[91,90700,90701],{"class":308},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[91,90703,90704],{"class":93,"line":8095},[91,90705,90706],{"class":308},"    \u002F\u002F 4.定时器里面写函数调用\n",[91,90708,90709,90711,90714,90716,90719,90721,90723],{"class":93,"line":8100},[91,90710,70165],{"class":153},[91,90712,90713],{"class":97}," debounce",[91,90715,251],{"class":250},[91,90717,90718],{"class":5339},"fn",[91,90720,12558],{"class":250},[91,90722,969],{"class":5339},[91,90724,12565],{"class":250},[91,90726,90727,90729],{"class":93,"line":8106},[91,90728,79853],{"class":153},[91,90730,90731],{"class":250}," timer\n",[91,90733,90734],{"class":93,"line":8133},[91,90735,90736],{"class":308},"      \u002F\u002F return 返回一个匿名函数\n",[91,90738,90739,90741,90743],{"class":93,"line":8138},[91,90740,74063],{"class":153},[91,90742,58999],{"class":153},[91,90744,54533],{"class":250},[91,90746,90747],{"class":93,"line":8144},[91,90748,90749],{"class":308},"        \u002F\u002F 这里边写第二三四步\n",[91,90751,90752,90754,90757,90760],{"class":93,"line":8156},[91,90753,2620],{"class":153},[91,90755,90756],{"class":250}," (timer) ",[91,90758,90759],{"class":97},"clearTimeout",[91,90761,90762],{"class":250},"(timer)\n",[91,90764,90765,90768,90770,90773,90775,90777],{"class":93,"line":8168},[91,90766,90767],{"class":250},"        timer ",[91,90769,296],{"class":153},[91,90771,90772],{"class":97}," setTimeout",[91,90774,251],{"class":250},[91,90776,54530],{"class":153},[91,90778,54533],{"class":250},[91,90780,90781,90784,90786],{"class":93,"line":8180},[91,90782,90783],{"class":97},"          fn",[91,90785,13173],{"class":250},[91,90787,90788],{"class":308},"\u002F\u002F加小括号调用fn }, t)\n",[91,90790,90791],{"class":93,"line":9839},[91,90792,90793],{"class":250},"        }, t)\n",[91,90795,90796],{"class":93,"line":9864},[91,90797,52479],{"class":250},[91,90799,90800],{"class":93,"line":9887},[91,90801,2310],{"class":250},[91,90803,90804,90806,90808,90810,90812,90814,90816,90818,90820],{"class":93,"line":9911},[91,90805,90288],{"class":250},[91,90807,57894],{"class":97},[91,90809,251],{"class":250},[91,90811,90295],{"class":101},[91,90813,12558],{"class":250},[91,90815,90301],{"class":97},[91,90817,90304],{"class":250},[91,90819,65155],{"class":105},[91,90821,30578],{"class":250},[91,90823,90824],{"class":93,"line":9916},[91,90825,2523],{"emptyLinePlaceholder":175},[91,90827,90828],{"class":93,"line":9921},[91,90829,90830],{"class":308},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[91,90832,90833],{"class":93,"line":9926},[91,90834,90835],{"class":308},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[91,90837,90838],{"class":93,"line":9935},[91,90839,90840],{"class":308},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[91,90842,90843],{"class":93,"line":9940},[91,90844,90845],{"class":308},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[91,90847,90848,90850,90852],{"class":93,"line":9946},[91,90849,52498],{"class":250},[91,90851,51894],{"class":51381},[91,90853,51388],{"class":250},[91,90855,90856,90858,90860],{"class":93,"line":9967},[91,90857,51866],{"class":250},[91,90859,51881],{"class":51381},[91,90861,51388],{"class":250},[91,90863,90864],{"class":93,"line":9973},[91,90865,2523],{"emptyLinePlaceholder":175},[91,90867,90868,90870,90872],{"class":93,"line":9987},[91,90869,51866],{"class":250},[91,90871,50716],{"class":51381},[91,90873,51388],{"class":250},[217,90875,90877],{"id":90876},"_4172-节流","4.17.2 节流",[21,90879,90880],{},[24,90881],{"alt":26,"src":90882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[21,90884,90885],{},[24,90886],{"alt":26,"src":90887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[21,90889,90890],{},[398,90891,90892],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[21,90894,90895],{},"实现方式：",[1256,90897,90898],{},[17,90899,90900],{},"lodash 提供的节流函数来处理",[21,90902,90903],{},"_.throttle(func,[wait=0],[options=])",[21,90905,90906],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[82,90908,90910],{"className":50714,"code":90909,"language":50716,"meta":26,"style":26},"\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",[88,90911,90912,90922,90936,90940,90948,90962,90982,90994,91002,91008,91018,91030,91042,91052,91064,91074,91084,91096,91100,91108,91116,91120,91128,91146,91164,91172,91190,91200,91208,91218,91222,91226,91230,91235,91240,91261,91269,91277,91281],{"__ignoreMap":26},[91,90913,90914,90916,90918,90920],{"class":93,"line":94},[91,90915,51378],{"class":250},[91,90917,51382],{"class":51381},[91,90919,51385],{"class":97},[91,90921,51388],{"class":250},[91,90923,90924,90926,90928,90930,90932,90934],{"class":93,"line":38},[91,90925,1159],{"class":250},[91,90927,50716],{"class":51381},[91,90929,51397],{"class":97},[91,90931,296],{"class":250},[91,90933,51402],{"class":101},[91,90935,51388],{"class":250},[91,90937,90938],{"class":93,"line":1304},[91,90939,2523],{"emptyLinePlaceholder":175},[91,90941,90942,90944,90946],{"class":93,"line":1319},[91,90943,1159],{"class":250},[91,90945,51415],{"class":51381},[91,90947,51388],{"class":250},[91,90949,90950,90952,90954,90956,90958,90960],{"class":93,"line":1325},[91,90951,52225],{"class":250},[91,90953,51425],{"class":51381},[91,90955,51428],{"class":97},[91,90957,296],{"class":250},[91,90959,51433],{"class":101},[91,90961,51388],{"class":250},[91,90963,90964,90966,90968,90970,90972,90974,90976,90978,90980],{"class":93,"line":1339},[91,90965,52225],{"class":250},[91,90967,51425],{"class":51381},[91,90969,15043],{"class":97},[91,90971,296],{"class":250},[91,90973,51472],{"class":101},[91,90975,51452],{"class":97},[91,90977,296],{"class":250},[91,90979,51479],{"class":101},[91,90981,51388],{"class":250},[91,90983,90984,90986,90988,90990,90992],{"class":93,"line":1345},[91,90985,52225],{"class":250},[91,90987,51488],{"class":51381},[91,90989,51491],{"class":250},[91,90991,51488],{"class":51381},[91,90993,51388],{"class":250},[91,90995,90996,90998,91000],{"class":93,"line":1436},[91,90997,52225],{"class":250},[91,90999,168],{"class":51381},[91,91001,51388],{"class":250},[91,91003,91004,91006],{"class":93,"line":1442},[91,91005,54833],{"class":97},[91,91007,15695],{"class":250},[91,91009,91010,91012,91014,91016],{"class":93,"line":1454},[91,91011,72677],{"class":105},[91,91013,51518],{"class":250},[91,91015,60586],{"class":105},[91,91017,1415],{"class":250},[91,91019,91020,91022,91024,91026,91028],{"class":93,"line":1736},[91,91021,54852],{"class":105},[91,91023,51518],{"class":250},[91,91025,1846],{"class":105},[91,91027,51573],{"class":153},[91,91029,1415],{"class":250},[91,91031,91032,91034,91036,91038,91040],{"class":93,"line":1741},[91,91033,54866],{"class":105},[91,91035,51518],{"class":250},[91,91037,1846],{"class":105},[91,91039,51573],{"class":153},[91,91041,1415],{"class":250},[91,91043,91044,91046,91048,91050],{"class":93,"line":1747},[91,91045,54965],{"class":105},[91,91047,51518],{"class":250},[91,91049,90087],{"class":105},[91,91051,1415],{"class":250},[91,91053,91054,91056,91058,91060,91062],{"class":93,"line":1752},[91,91055,55003],{"class":105},[91,91057,51518],{"class":250},[91,91059,1074],{"class":105},[91,91061,51573],{"class":153},[91,91063,1415],{"class":250},[91,91065,91066,91068,91070,91072],{"class":93,"line":1766},[91,91067,57497],{"class":105},[91,91069,51518],{"class":250},[91,91071,60923],{"class":105},[91,91073,1415],{"class":250},[91,91075,91076,91078,91080,91082],{"class":93,"line":1771},[91,91077,57367],{"class":105},[91,91079,51518],{"class":250},[91,91081,51673],{"class":105},[91,91083,1415],{"class":250},[91,91085,91086,91088,91090,91092,91094],{"class":93,"line":1777},[91,91087,90126],{"class":105},[91,91089,51518],{"class":250},[91,91091,568],{"class":105},[91,91093,51573],{"class":153},[91,91095,1415],{"class":250},[91,91097,91098],{"class":93,"line":1798},[91,91099,2310],{"class":250},[91,91101,91102,91104,91106],{"class":93,"line":1803},[91,91103,52498],{"class":250},[91,91105,168],{"class":51381},[91,91107,51388],{"class":250},[91,91109,91110,91112,91114],{"class":93,"line":1817},[91,91111,51866],{"class":250},[91,91113,51415],{"class":51381},[91,91115,51388],{"class":250},[91,91117,91118],{"class":93,"line":1822},[91,91119,2523],{"emptyLinePlaceholder":175},[91,91121,91122,91124,91126],{"class":93,"line":1851},[91,91123,1159],{"class":250},[91,91125,51881],{"class":51381},[91,91127,51388],{"class":250},[91,91129,91130,91132,91134,91136,91138,91140,91142,91144],{"class":93,"line":1856},[91,91131,52225],{"class":250},[91,91133,51692],{"class":51381},[91,91135,53567],{"class":97},[91,91137,296],{"class":250},[91,91139,53572],{"class":101},[91,91141,55395],{"class":250},[91,91143,51692],{"class":51381},[91,91145,51388],{"class":250},[91,91147,91148,91150,91152,91154,91156,91158,91160,91162],{"class":93,"line":1873},[91,91149,52225],{"class":250},[91,91151,51894],{"class":51381},[91,91153,55320],{"class":97},[91,91155,296],{"class":250},[91,91157,88355],{"class":101},[91,91159,55395],{"class":250},[91,91161,51894],{"class":51381},[91,91163,51388],{"class":250},[91,91165,91166,91168,91170],{"class":93,"line":1878},[91,91167,52225],{"class":250},[91,91169,51894],{"class":51381},[91,91171,51388],{"class":250},[91,91173,91174,91176,91178,91180,91182,91184,91186,91188],{"class":93,"line":1883},[91,91175,11344],{"class":153},[91,91177,87014],{"class":105},[91,91179,13687],{"class":153},[91,91181,54477],{"class":250},[91,91183,54480],{"class":97},[91,91185,251],{"class":250},[91,91187,90227],{"class":101},[91,91189,257],{"class":250},[91,91191,91192,91194,91196,91198],{"class":93,"line":1888},[91,91193,52300],{"class":153},[91,91195,9561],{"class":250},[91,91197,296],{"class":153},[91,91199,47414],{"class":105},[91,91201,91202,91204,91206],{"class":93,"line":1902},[91,91203,70165],{"class":153},[91,91205,90246],{"class":97},[91,91207,10976],{"class":250},[91,91209,91210,91212,91214,91216],{"class":93,"line":1907},[91,91211,90253],{"class":250},[91,91213,296],{"class":153},[91,91215,3155],{"class":250},[91,91217,2825],{"class":153},[91,91219,91220],{"class":93,"line":2700},[91,91221,90264],{"class":308},[91,91223,91224],{"class":93,"line":2714},[91,91225,2310],{"class":250},[91,91227,91228],{"class":93,"line":2722},[91,91229,90273],{"class":308},[91,91231,91232],{"class":93,"line":2727},[91,91233,91234],{"class":308},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[91,91236,91237],{"class":93,"line":2733},[91,91238,91239],{"class":308},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[91,91241,91242,91244,91246,91248,91250,91252,91255,91257,91259],{"class":93,"line":2739},[91,91243,90288],{"class":250},[91,91245,57894],{"class":97},[91,91247,251],{"class":250},[91,91249,90295],{"class":101},[91,91251,90298],{"class":250},[91,91253,91254],{"class":97},"throttle",[91,91256,90304],{"class":250},[91,91258,65155],{"class":105},[91,91260,30578],{"class":250},[91,91262,91263,91265,91267],{"class":93,"line":2744},[91,91264,52498],{"class":250},[91,91266,51894],{"class":51381},[91,91268,51388],{"class":250},[91,91270,91271,91273,91275],{"class":93,"line":8071},[91,91272,51866],{"class":250},[91,91274,51881],{"class":51381},[91,91276,51388],{"class":250},[91,91278,91279],{"class":93,"line":8095},[91,91280,2523],{"emptyLinePlaceholder":175},[91,91282,91283,91285,91287],{"class":93,"line":8100},[91,91284,51866],{"class":250},[91,91286,50716],{"class":51381},[91,91288,51388],{"class":250},[1256,91290,91291],{},[17,91292,91293],{},"手写一个节流函数来处理",[21,91295,71033],{},[21,91297,90347],{},[21,91299,91300],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[21,91302,91303],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[82,91305,91307],{"className":50714,"code":91306,"language":50716,"meta":26,"style":26},"\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",[88,91308,91309,91319,91333,91337,91345,91359,91379,91391,91399,91405,91415,91427,91439,91449,91461,91471,91481,91493,91497,91505,91513,91517,91525,91543,91561,91569,91587,91597,91605,91615,91619,91623,91627,91632,91637,91642,91647,91652,91657,91674,91680,91688,91699,91714,91721,91726,91731,91741,91746,91751,91756,91760,91764,91768,91788,91796,91804,91808],{"__ignoreMap":26},[91,91310,91311,91313,91315,91317],{"class":93,"line":94},[91,91312,51378],{"class":250},[91,91314,51382],{"class":51381},[91,91316,51385],{"class":97},[91,91318,51388],{"class":250},[91,91320,91321,91323,91325,91327,91329,91331],{"class":93,"line":38},[91,91322,1159],{"class":250},[91,91324,50716],{"class":51381},[91,91326,51397],{"class":97},[91,91328,296],{"class":250},[91,91330,51402],{"class":101},[91,91332,51388],{"class":250},[91,91334,91335],{"class":93,"line":1304},[91,91336,2523],{"emptyLinePlaceholder":175},[91,91338,91339,91341,91343],{"class":93,"line":1319},[91,91340,1159],{"class":250},[91,91342,51415],{"class":51381},[91,91344,51388],{"class":250},[91,91346,91347,91349,91351,91353,91355,91357],{"class":93,"line":1325},[91,91348,52225],{"class":250},[91,91350,51425],{"class":51381},[91,91352,51428],{"class":97},[91,91354,296],{"class":250},[91,91356,51433],{"class":101},[91,91358,51388],{"class":250},[91,91360,91361,91363,91365,91367,91369,91371,91373,91375,91377],{"class":93,"line":1339},[91,91362,52225],{"class":250},[91,91364,51425],{"class":51381},[91,91366,15043],{"class":97},[91,91368,296],{"class":250},[91,91370,51472],{"class":101},[91,91372,51452],{"class":97},[91,91374,296],{"class":250},[91,91376,51479],{"class":101},[91,91378,51388],{"class":250},[91,91380,91381,91383,91385,91387,91389],{"class":93,"line":1345},[91,91382,52225],{"class":250},[91,91384,51488],{"class":51381},[91,91386,51491],{"class":250},[91,91388,51488],{"class":51381},[91,91390,51388],{"class":250},[91,91392,91393,91395,91397],{"class":93,"line":1436},[91,91394,52225],{"class":250},[91,91396,168],{"class":51381},[91,91398,51388],{"class":250},[91,91400,91401,91403],{"class":93,"line":1442},[91,91402,54833],{"class":97},[91,91404,15695],{"class":250},[91,91406,91407,91409,91411,91413],{"class":93,"line":1454},[91,91408,72677],{"class":105},[91,91410,51518],{"class":250},[91,91412,60586],{"class":105},[91,91414,1415],{"class":250},[91,91416,91417,91419,91421,91423,91425],{"class":93,"line":1736},[91,91418,54852],{"class":105},[91,91420,51518],{"class":250},[91,91422,1846],{"class":105},[91,91424,51573],{"class":153},[91,91426,1415],{"class":250},[91,91428,91429,91431,91433,91435,91437],{"class":93,"line":1741},[91,91430,54866],{"class":105},[91,91432,51518],{"class":250},[91,91434,1846],{"class":105},[91,91436,51573],{"class":153},[91,91438,1415],{"class":250},[91,91440,91441,91443,91445,91447],{"class":93,"line":1747},[91,91442,54965],{"class":105},[91,91444,51518],{"class":250},[91,91446,90087],{"class":105},[91,91448,1415],{"class":250},[91,91450,91451,91453,91455,91457,91459],{"class":93,"line":1752},[91,91452,55003],{"class":105},[91,91454,51518],{"class":250},[91,91456,1074],{"class":105},[91,91458,51573],{"class":153},[91,91460,1415],{"class":250},[91,91462,91463,91465,91467,91469],{"class":93,"line":1766},[91,91464,57497],{"class":105},[91,91466,51518],{"class":250},[91,91468,60923],{"class":105},[91,91470,1415],{"class":250},[91,91472,91473,91475,91477,91479],{"class":93,"line":1771},[91,91474,57367],{"class":105},[91,91476,51518],{"class":250},[91,91478,51673],{"class":105},[91,91480,1415],{"class":250},[91,91482,91483,91485,91487,91489,91491],{"class":93,"line":1777},[91,91484,90126],{"class":105},[91,91486,51518],{"class":250},[91,91488,568],{"class":105},[91,91490,51573],{"class":153},[91,91492,1415],{"class":250},[91,91494,91495],{"class":93,"line":1798},[91,91496,2310],{"class":250},[91,91498,91499,91501,91503],{"class":93,"line":1803},[91,91500,52498],{"class":250},[91,91502,168],{"class":51381},[91,91504,51388],{"class":250},[91,91506,91507,91509,91511],{"class":93,"line":1817},[91,91508,51866],{"class":250},[91,91510,51415],{"class":51381},[91,91512,51388],{"class":250},[91,91514,91515],{"class":93,"line":1822},[91,91516,2523],{"emptyLinePlaceholder":175},[91,91518,91519,91521,91523],{"class":93,"line":1851},[91,91520,1159],{"class":250},[91,91522,51881],{"class":51381},[91,91524,51388],{"class":250},[91,91526,91527,91529,91531,91533,91535,91537,91539,91541],{"class":93,"line":1856},[91,91528,52225],{"class":250},[91,91530,51692],{"class":51381},[91,91532,53567],{"class":97},[91,91534,296],{"class":250},[91,91536,53572],{"class":101},[91,91538,55395],{"class":250},[91,91540,51692],{"class":51381},[91,91542,51388],{"class":250},[91,91544,91545,91547,91549,91551,91553,91555,91557,91559],{"class":93,"line":1873},[91,91546,52225],{"class":250},[91,91548,51894],{"class":51381},[91,91550,55320],{"class":97},[91,91552,296],{"class":250},[91,91554,88355],{"class":101},[91,91556,55395],{"class":250},[91,91558,51894],{"class":51381},[91,91560,51388],{"class":250},[91,91562,91563,91565,91567],{"class":93,"line":1878},[91,91564,52225],{"class":250},[91,91566,51894],{"class":51381},[91,91568,51388],{"class":250},[91,91570,91571,91573,91575,91577,91579,91581,91583,91585],{"class":93,"line":1883},[91,91572,11344],{"class":153},[91,91574,87014],{"class":105},[91,91576,13687],{"class":153},[91,91578,54477],{"class":250},[91,91580,54480],{"class":97},[91,91582,251],{"class":250},[91,91584,90227],{"class":101},[91,91586,257],{"class":250},[91,91588,91589,91591,91593,91595],{"class":93,"line":1888},[91,91590,52300],{"class":153},[91,91592,9561],{"class":250},[91,91594,296],{"class":153},[91,91596,47414],{"class":105},[91,91598,91599,91601,91603],{"class":93,"line":1902},[91,91600,70165],{"class":153},[91,91602,90246],{"class":97},[91,91604,10976],{"class":250},[91,91606,91607,91609,91611,91613],{"class":93,"line":1907},[91,91608,90253],{"class":250},[91,91610,296],{"class":153},[91,91612,3155],{"class":250},[91,91614,2825],{"class":153},[91,91616,91617],{"class":93,"line":2700},[91,91618,90264],{"class":308},[91,91620,91621],{"class":93,"line":2714},[91,91622,2310],{"class":250},[91,91624,91625],{"class":93,"line":2722},[91,91626,90273],{"class":308},[91,91628,91629],{"class":93,"line":2727},[91,91630,91631],{"class":308},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[91,91633,91634],{"class":93,"line":2733},[91,91635,91636],{"class":308},"    \u002F\u002F 1.声明一个定时器变量\n",[91,91638,91639],{"class":93,"line":2739},[91,91640,91641],{"class":308},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[91,91643,91644],{"class":93,"line":2744},[91,91645,91646],{"class":308},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[91,91648,91649],{"class":93,"line":8071},[91,91650,91651],{"class":308},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[91,91653,91654],{"class":93,"line":8095},[91,91655,91656],{"class":308},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[91,91658,91659,91661,91664,91666,91668,91670,91672],{"class":93,"line":8100},[91,91660,70165],{"class":153},[91,91662,91663],{"class":97}," throttle",[91,91665,251],{"class":250},[91,91667,90718],{"class":5339},[91,91669,12558],{"class":250},[91,91671,969],{"class":5339},[91,91673,12565],{"class":250},[91,91675,91676,91678],{"class":93,"line":8106},[91,91677,79853],{"class":153},[91,91679,90731],{"class":250},[91,91681,91682,91684,91686],{"class":93,"line":8133},[91,91683,74063],{"class":153},[91,91685,58999],{"class":153},[91,91687,54533],{"class":250},[91,91689,91690,91692,91694,91696],{"class":93,"line":8138},[91,91691,2620],{"class":153},[91,91693,1782],{"class":250},[91,91695,475],{"class":153},[91,91697,91698],{"class":250},"timer) {\n",[91,91700,91701,91704,91706,91708,91710,91712],{"class":93,"line":8144},[91,91702,91703],{"class":250},"          timer ",[91,91705,296],{"class":153},[91,91707,90772],{"class":97},[91,91709,251],{"class":250},[91,91711,54530],{"class":153},[91,91713,54533],{"class":250},[91,91715,91716,91719],{"class":93,"line":8156},[91,91717,91718],{"class":97},"            fn",[91,91720,2099],{"class":250},[91,91722,91723],{"class":93,"line":8168},[91,91724,91725],{"class":308},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[91,91727,91728],{"class":93,"line":8180},[91,91729,91730],{"class":308},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[91,91732,91733,91736,91738],{"class":93,"line":9839},[91,91734,91735],{"class":250},"            timer ",[91,91737,296],{"class":153},[91,91739,91740],{"class":105}," null\n",[91,91742,91743],{"class":93,"line":9864},[91,91744,91745],{"class":308},"            \u002F\u002F 不能用clearTimeout(timer)\n",[91,91747,91748],{"class":93,"line":9887},[91,91749,91750],{"class":308},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[91,91752,91753],{"class":93,"line":9911},[91,91754,91755],{"class":250},"          }, t)\n",[91,91757,91758],{"class":93,"line":9916},[91,91759,2652],{"class":250},[91,91761,91762],{"class":93,"line":9921},[91,91763,52479],{"class":250},[91,91765,91766],{"class":93,"line":9926},[91,91767,2310],{"class":250},[91,91769,91770,91772,91774,91776,91778,91780,91782,91784,91786],{"class":93,"line":9935},[91,91771,90288],{"class":250},[91,91773,57894],{"class":97},[91,91775,251],{"class":250},[91,91777,90295],{"class":101},[91,91779,12558],{"class":250},[91,91781,91254],{"class":97},[91,91783,90304],{"class":250},[91,91785,65155],{"class":105},[91,91787,30578],{"class":250},[91,91789,91790,91792,91794],{"class":93,"line":9940},[91,91791,52498],{"class":250},[91,91793,51894],{"class":51381},[91,91795,51388],{"class":250},[91,91797,91798,91800,91802],{"class":93,"line":9946},[91,91799,51866],{"class":250},[91,91801,51881],{"class":51381},[91,91803,51388],{"class":250},[91,91805,91806],{"class":93,"line":9967},[91,91807,2523],{"emptyLinePlaceholder":175},[91,91809,91810,91812,91814],{"class":93,"line":9973},[91,91811,51866],{"class":250},[91,91813,50716],{"class":51381},[91,91815,51388],{"class":250},[217,91817,91819],{"id":91818},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[82,91821,91823],{"className":53148,"code":91822,"language":53150,"meta":26,"style":26},"\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",[88,91824,91825,91833,91841,91846,91851,91856,91861,91865,91873],{"__ignoreMap":26},[91,91826,91827,91829,91831],{"class":93,"line":94},[91,91828,1159],{"class":250},[91,91830,51881],{"class":51381},[91,91832,51388],{"class":250},[91,91834,91835,91837,91839],{"class":93,"line":38},[91,91836,52225],{"class":250},[91,91838,51894],{"class":51381},[91,91840,51388],{"class":250},[91,91842,91843],{"class":93,"line":1304},[91,91844,91845],{"class":250},"    let timer = null\n",[91,91847,91848],{"class":93,"line":1319},[91,91849,91850],{"class":250},"    timer = setTimeout(() => {\n",[91,91852,91853],{"class":93,"line":1325},[91,91854,91855],{"class":250},"      clearTimeout(timer)\n",[91,91857,91858],{"class":93,"line":1339},[91,91859,91860],{"class":250},"      console.log(timer)\n",[91,91862,91863],{"class":93,"line":1345},[91,91864,60306],{"class":250},[91,91866,91867,91869,91871],{"class":93,"line":1436},[91,91868,52498],{"class":250},[91,91870,51894],{"class":51381},[91,91872,51388],{"class":250},[91,91874,91875,91877,91879],{"class":93,"line":1442},[91,91876,51866],{"class":250},[91,91878,51881],{"class":51381},[91,91880,51388],{"class":250},[21,91882,91883],{},"输出为1",[21,91885,91886],{},"在开启的定时器里边写清除定时器",[21,91888,91889],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[217,91891,91893],{"id":91892},"_4174-节流综合案例","4.17.4 节流综合案例",[21,91895,91896],{},"页面打开，可以记录上一次的视频播放位置",[21,91898,91899],{},[24,91900],{"alt":26,"src":91901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[21,91903,91904],{},[24,91905],{"alt":26,"src":91906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[82,91908,91910],{"className":50714,"code":91909,"language":50716,"meta":26,"style":26},"\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",[88,91911,91912,91922,91936,91940,91948,91962,91982,92002,92024,92037,92045,92051,92061,92071,92081,92085,92089,92096,92109,92121,92125,92129,92139,92151,92165,92169,92173,92180,92190,92203,92215,92225,92235,92251,92263,92267,92271,92279,92289,92301,92311,92321,92331,92335,92339,92349,92360,92364,92372,92380,92384,92392,92407,92422,92437,92458,92466,92474,92489,92511,92519,92534,92560,92586,92612,92620,92628,92647,92655,92660,92679,92684,92702,92707,92712,92720,92725,92739,92747,92752,92769,92773,92778,92800,92804,92812,92820,92824],{"__ignoreMap":26},[91,91913,91914,91916,91918,91920],{"class":93,"line":94},[91,91915,51378],{"class":250},[91,91917,51382],{"class":51381},[91,91919,51385],{"class":97},[91,91921,51388],{"class":250},[91,91923,91924,91926,91928,91930,91932,91934],{"class":93,"line":38},[91,91925,1159],{"class":250},[91,91927,50716],{"class":51381},[91,91929,51397],{"class":97},[91,91931,296],{"class":250},[91,91933,51402],{"class":101},[91,91935,51388],{"class":250},[91,91937,91938],{"class":93,"line":1304},[91,91939,2523],{"emptyLinePlaceholder":175},[91,91941,91942,91944,91946],{"class":93,"line":1319},[91,91943,1159],{"class":250},[91,91945,51415],{"class":51381},[91,91947,51388],{"class":250},[91,91949,91950,91952,91954,91956,91958,91960],{"class":93,"line":1325},[91,91951,52225],{"class":250},[91,91953,51425],{"class":51381},[91,91955,51428],{"class":97},[91,91957,296],{"class":250},[91,91959,51433],{"class":101},[91,91961,59208],{"class":250},[91,91963,91964,91966,91968,91970,91972,91974,91976,91978,91980],{"class":93,"line":1339},[91,91965,52225],{"class":250},[91,91967,51425],{"class":51381},[91,91969,51444],{"class":97},[91,91971,296],{"class":250},[91,91973,51449],{"class":101},[91,91975,51452],{"class":97},[91,91977,296],{"class":250},[91,91979,51457],{"class":101},[91,91981,59208],{"class":250},[91,91983,91984,91986,91988,91990,91992,91994,91996,91998,92000],{"class":93,"line":1345},[91,91985,52225],{"class":250},[91,91987,51425],{"class":51381},[91,91989,15043],{"class":97},[91,91991,296],{"class":250},[91,91993,51472],{"class":101},[91,91995,51452],{"class":97},[91,91997,296],{"class":250},[91,91999,51479],{"class":101},[91,92001,59208],{"class":250},[91,92003,92004,92006,92008,92010,92012,92015,92017,92019,92022],{"class":93,"line":1436},[91,92005,52225],{"class":250},[91,92007,51425],{"class":51381},[91,92009,15043],{"class":97},[91,92011,296],{"class":250},[91,92013,92014],{"class":101},"\"referrer\"",[91,92016,51452],{"class":97},[91,92018,296],{"class":250},[91,92020,92021],{"class":101},"\"never\"",[91,92023,59208],{"class":250},[91,92025,92026,92028,92030,92033,92035],{"class":93,"line":1442},[91,92027,52225],{"class":250},[91,92029,51488],{"class":51381},[91,92031,92032],{"class":250},">综合案例\u003C\u002F",[91,92034,51488],{"class":51381},[91,92036,51388],{"class":250},[91,92038,92039,92041,92043],{"class":93,"line":1454},[91,92040,52225],{"class":250},[91,92042,168],{"class":51381},[91,92044,51388],{"class":250},[91,92046,92047,92049],{"class":93,"line":1736},[91,92048,6526],{"class":51381},[91,92050,15695],{"class":250},[91,92052,92053,92055,92057,92059],{"class":93,"line":1741},[91,92054,54776],{"class":105},[91,92056,51518],{"class":250},[91,92058,440],{"class":105},[91,92060,1415],{"class":250},[91,92062,92063,92065,92067,92069],{"class":93,"line":1747},[91,92064,54787],{"class":105},[91,92066,51518],{"class":250},[91,92068,440],{"class":105},[91,92070,1415],{"class":250},[91,92072,92073,92075,92077,92079],{"class":93,"line":1752},[91,92074,72677],{"class":105},[91,92076,51518],{"class":250},[91,92078,60586],{"class":105},[91,92080,1415],{"class":250},[91,92082,92083],{"class":93,"line":1766},[91,92084,2310],{"class":250},[91,92086,92087],{"class":93,"line":1771},[91,92088,2523],{"emptyLinePlaceholder":175},[91,92090,92091,92094],{"class":93,"line":1777},[91,92092,92093],{"class":97},"    .container",[91,92095,15695],{"class":250},[91,92097,92098,92100,92102,92105,92107],{"class":93,"line":1798},[91,92099,54852],{"class":105},[91,92101,51518],{"class":250},[91,92103,92104],{"class":105},"1200",[91,92106,51573],{"class":153},[91,92108,1415],{"class":250},[91,92110,92111,92113,92115,92117,92119],{"class":93,"line":1803},[91,92112,54787],{"class":105},[91,92114,51518],{"class":250},[91,92116,440],{"class":105},[91,92118,51637],{"class":105},[91,92120,1415],{"class":250},[91,92122,92123],{"class":93,"line":1817},[91,92124,2310],{"class":250},[91,92126,92127],{"class":93,"line":1822},[91,92128,2523],{"emptyLinePlaceholder":175},[91,92130,92131,92134,92137],{"class":93,"line":1851},[91,92132,92133],{"class":97},"    .video",[91,92135,92136],{"class":51381}," video",[91,92138,15695],{"class":250},[91,92140,92141,92143,92145,92147,92149],{"class":93,"line":1856},[91,92142,54852],{"class":105},[91,92144,51518],{"class":250},[91,92146,560],{"class":105},[91,92148,577],{"class":153},[91,92150,1415],{"class":250},[91,92152,92153,92155,92157,92159,92161,92163],{"class":93,"line":1873},[91,92154,54776],{"class":105},[91,92156,51518],{"class":250},[91,92158,949],{"class":105},[91,92160,51573],{"class":153},[91,92162,4216],{"class":105},[91,92164,1415],{"class":250},[91,92166,92167],{"class":93,"line":1878},[91,92168,2310],{"class":250},[91,92170,92171],{"class":93,"line":1883},[91,92172,2523],{"emptyLinePlaceholder":175},[91,92174,92175,92178],{"class":93,"line":1888},[91,92176,92177],{"class":97},"    .elevator",[91,92179,15695],{"class":250},[91,92181,92182,92184,92186,92188],{"class":93,"line":1902},[91,92183,54840],{"class":105},[91,92185,51518],{"class":250},[91,92187,86314],{"class":105},[91,92189,1415],{"class":250},[91,92191,92192,92194,92196,92199,92201],{"class":93,"line":1907},[91,92193,55028],{"class":105},[91,92195,51518],{"class":250},[91,92197,92198],{"class":105},"280",[91,92200,51573],{"class":153},[91,92202,1415],{"class":250},[91,92204,92205,92207,92209,92211,92213],{"class":93,"line":2700},[91,92206,86508],{"class":105},[91,92208,51518],{"class":250},[91,92210,949],{"class":105},[91,92212,51573],{"class":153},[91,92214,1415],{"class":250},[91,92216,92217,92219,92221,92223],{"class":93,"line":2714},[91,92218,86321],{"class":105},[91,92220,51518],{"class":250},[91,92222,86326],{"class":105},[91,92224,1415],{"class":250},[91,92226,92227,92229,92231,92233],{"class":93,"line":2722},[91,92228,61802],{"class":105},[91,92230,51518],{"class":250},[91,92232,60923],{"class":105},[91,92234,1415],{"class":250},[91,92236,92237,92239,92241,92243,92245,92247,92249],{"class":93,"line":2727},[91,92238,62058],{"class":105},[91,92240,51518],{"class":250},[91,92242,466],{"class":105},[91,92244,51573],{"class":153},[91,92246,51602],{"class":105},[91,92248,62325],{"class":105},[91,92250,1415],{"class":250},[91,92252,92253,92255,92257,92259,92261],{"class":93,"line":2733},[91,92254,54852],{"class":105},[91,92256,51518],{"class":250},[91,92258,1156],{"class":105},[91,92260,51573],{"class":153},[91,92262,1415],{"class":250},[91,92264,92265],{"class":93,"line":2739},[91,92266,2310],{"class":250},[91,92268,92269],{"class":93,"line":2744},[91,92270,2523],{"emptyLinePlaceholder":175},[91,92272,92273,92275,92277],{"class":93,"line":8071},[91,92274,92177],{"class":97},[91,92276,1523],{"class":51381},[91,92278,15695],{"class":250},[91,92280,92281,92283,92285,92287],{"class":93,"line":8095},[91,92282,55090],{"class":105},[91,92284,51518],{"class":250},[91,92286,60950],{"class":105},[91,92288,1415],{"class":250},[91,92290,92291,92293,92295,92297,92299],{"class":93,"line":8100},[91,92292,54776],{"class":105},[91,92294,51518],{"class":250},[91,92296,695],{"class":105},[91,92298,51573],{"class":153},[91,92300,1415],{"class":250},[91,92302,92303,92305,92307,92309],{"class":93,"line":8106},[91,92304,64051],{"class":105},[91,92306,51518],{"class":250},[91,92308,54818],{"class":105},[91,92310,1415],{"class":250},[91,92312,92313,92315,92317,92319],{"class":93,"line":8133},[91,92314,57367],{"class":105},[91,92316,51518],{"class":250},[91,92318,51673],{"class":105},[91,92320,1415],{"class":250},[91,92322,92323,92325,92327,92329],{"class":93,"line":8138},[91,92324,57497],{"class":105},[91,92326,51518],{"class":250},[91,92328,62151],{"class":105},[91,92330,1415],{"class":250},[91,92332,92333],{"class":93,"line":8144},[91,92334,2310],{"class":250},[91,92336,92337],{"class":93,"line":8156},[91,92338,2523],{"emptyLinePlaceholder":175},[91,92340,92341,92343,92345,92347],{"class":93,"line":8168},[91,92342,92177],{"class":97},[91,92344,1523],{"class":51381},[91,92346,64105],{"class":97},[91,92348,15695],{"class":250},[91,92350,92351,92353,92355,92358],{"class":93,"line":8180},[91,92352,57497],{"class":105},[91,92354,51518],{"class":250},[91,92356,92357],{"class":105},"#1286ff",[91,92359,1415],{"class":250},[91,92361,92362],{"class":93,"line":9839},[91,92363,2310],{"class":250},[91,92365,92366,92368,92370],{"class":93,"line":9864},[91,92367,52498],{"class":250},[91,92369,168],{"class":51381},[91,92371,51388],{"class":250},[91,92373,92374,92376,92378],{"class":93,"line":9887},[91,92375,51866],{"class":250},[91,92377,51415],{"class":51381},[91,92379,51388],{"class":250},[91,92381,92382],{"class":93,"line":9911},[91,92383,2523],{"emptyLinePlaceholder":175},[91,92385,92386,92388,92390],{"class":93,"line":9916},[91,92387,1159],{"class":250},[91,92389,51881],{"class":51381},[91,92391,51388],{"class":250},[91,92393,92394,92396,92398,92400,92402,92405],{"class":93,"line":9921},[91,92395,52225],{"class":250},[91,92397,51692],{"class":51381},[91,92399,53567],{"class":97},[91,92401,296],{"class":250},[91,92403,92404],{"class":101},"\"container\"",[91,92406,51388],{"class":250},[91,92408,92409,92411,92413,92415,92417,92420],{"class":93,"line":9926},[91,92410,51422],{"class":250},[91,92412,51692],{"class":51381},[91,92414,53567],{"class":97},[91,92416,296],{"class":250},[91,92418,92419],{"class":101},"\"header\"",[91,92421,51388],{"class":250},[91,92423,92424,92426,92428,92430,92432,92435],{"class":93,"line":9935},[91,92425,55315],{"class":250},[91,92427,487],{"class":51381},[91,92429,61138],{"class":97},[91,92431,296],{"class":250},[91,92433,92434],{"class":101},"\"http:\u002F\u002Fpip.itcast.cn\"",[91,92436,51388],{"class":250},[91,92438,92439,92441,92443,92445,92447,92450,92452,92454,92456],{"class":93,"line":9940},[91,92440,55383],{"class":250},[91,92442,24],{"class":51381},[91,92444,55320],{"class":97},[91,92446,296],{"class":250},[91,92448,92449],{"class":101},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[91,92451,55328],{"class":97},[91,92453,296],{"class":250},[91,92455,7775],{"class":101},[91,92457,59208],{"class":250},[91,92459,92460,92462,92464],{"class":93,"line":9946},[91,92461,55488],{"class":250},[91,92463,487],{"class":51381},[91,92465,51388],{"class":250},[91,92467,92468,92470,92472],{"class":93,"line":9967},[91,92469,51857],{"class":250},[91,92471,51692],{"class":51381},[91,92473,51388],{"class":250},[91,92475,92476,92478,92480,92482,92484,92487],{"class":93,"line":9973},[91,92477,51422],{"class":250},[91,92479,51692],{"class":51381},[91,92481,53567],{"class":97},[91,92483,296],{"class":250},[91,92485,92486],{"class":101},"\"video\"",[91,92488,51388],{"class":250},[91,92490,92491,92493,92495,92497,92499,92502,92505,92507,92509],{"class":93,"line":9987},[91,92492,55315],{"class":250},[91,92494,28302],{"class":51381},[91,92496,55320],{"class":97},[91,92498,296],{"class":250},[91,92500,92501],{"class":101},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[91,92503,92504],{"class":97}," controls",[91,92506,55395],{"class":250},[91,92508,28302],{"class":51381},[91,92510,51388],{"class":250},[91,92512,92513,92515,92517],{"class":93,"line":9993},[91,92514,51857],{"class":250},[91,92516,51692],{"class":51381},[91,92518,51388],{"class":250},[91,92520,92521,92523,92525,92527,92529,92532],{"class":93,"line":10020},[91,92522,51422],{"class":250},[91,92524,51692],{"class":51381},[91,92526,53567],{"class":97},[91,92528,296],{"class":250},[91,92530,92531],{"class":101},"\"elevator\"",[91,92533,51388],{"class":250},[91,92535,92536,92538,92540,92542,92544,92546,92549,92551,92553,92556,92558],{"class":93,"line":10029},[91,92537,55315],{"class":250},[91,92539,487],{"class":51381},[91,92541,61138],{"class":97},[91,92543,296],{"class":250},[91,92545,64317],{"class":101},[91,92547,92548],{"class":97}," data-ref",[91,92550,296],{"class":250},[91,92552,92486],{"class":101},[91,92554,92555],{"class":250},">视频介绍\u003C\u002F",[91,92557,487],{"class":51381},[91,92559,51388],{"class":250},[91,92561,92562,92564,92566,92568,92570,92572,92574,92576,92579,92582,92584],{"class":93,"line":10035},[91,92563,55315],{"class":250},[91,92565,487],{"class":51381},[91,92567,61138],{"class":97},[91,92569,296],{"class":250},[91,92571,64317],{"class":101},[91,92573,92548],{"class":97},[91,92575,296],{"class":250},[91,92577,92578],{"class":101},"\"intro\"",[91,92580,92581],{"class":250},">课程简介\u003C\u002F",[91,92583,487],{"class":51381},[91,92585,51388],{"class":250},[91,92587,92588,92590,92592,92594,92596,92598,92600,92602,92605,92608,92610],{"class":93,"line":10043},[91,92589,55315],{"class":250},[91,92591,487],{"class":51381},[91,92593,61138],{"class":97},[91,92595,296],{"class":250},[91,92597,64317],{"class":101},[91,92599,92548],{"class":97},[91,92601,296],{"class":250},[91,92603,92604],{"class":101},"\"outline\"",[91,92606,92607],{"class":250},">评论列表\u003C\u002F",[91,92609,487],{"class":51381},[91,92611,51388],{"class":250},[91,92613,92614,92616,92618],{"class":93,"line":10048},[91,92615,51857],{"class":250},[91,92617,51692],{"class":51381},[91,92619,51388],{"class":250},[91,92621,92622,92624,92626],{"class":93,"line":16727},[91,92623,52498],{"class":250},[91,92625,51692],{"class":51381},[91,92627,51388],{"class":250},[91,92629,92630,92632,92634,92636,92638,92641,92643,92645],{"class":93,"line":16733},[91,92631,52225],{"class":250},[91,92633,51894],{"class":51381},[91,92635,55320],{"class":97},[91,92637,296],{"class":250},[91,92639,92640],{"class":101},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[91,92642,55395],{"class":250},[91,92644,51894],{"class":51381},[91,92646,51388],{"class":250},[91,92648,92649,92651,92653],{"class":93,"line":16756},[91,92650,52225],{"class":250},[91,92652,51894],{"class":51381},[91,92654,51388],{"class":250},[91,92656,92657],{"class":93,"line":16762},[91,92658,92659],{"class":308},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[91,92661,92662,92664,92666,92668,92670,92672,92674,92677],{"class":93,"line":16785},[91,92663,11344],{"class":153},[91,92665,92136],{"class":105},[91,92667,13687],{"class":153},[91,92669,54477],{"class":250},[91,92671,54480],{"class":97},[91,92673,251],{"class":250},[91,92675,92676],{"class":101},"'video'",[91,92678,257],{"class":250},[91,92680,92681],{"class":93,"line":16799},[91,92682,92683],{"class":308},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[91,92685,92686,92689,92691,92693,92695,92698,92700],{"class":93,"line":16819},[91,92687,92688],{"class":250},"    video.ontimeupdate ",[91,92690,296],{"class":153},[91,92692,88436],{"class":250},[91,92694,91254],{"class":97},[91,92696,92697],{"class":250},"(() ",[91,92699,84803],{"class":153},[91,92701,15695],{"class":250},[91,92703,92704],{"class":93,"line":16825},[91,92705,92706],{"class":308},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[91,92708,92709],{"class":93,"line":16836},[91,92710,92711],{"class":308},"      \u002F\u002F 控制台输出当前的时间\n",[91,92713,92714,92717],{"class":93,"line":16859},[91,92715,92716],{"class":308},"      \u002F\u002F console.log(video.currentTime)",[91,92718,92719],{"class":308},"  \u002F\u002F获得当前的视频时间\n",[91,92721,92722],{"class":93,"line":16881},[91,92723,92724],{"class":308},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[91,92726,92727,92729,92731,92733,92736],{"class":93,"line":16886},[91,92728,74764],{"class":250},[91,92730,71735],{"class":97},[91,92732,251],{"class":250},[91,92734,92735],{"class":101},"'currentTime'",[91,92737,92738],{"class":250},", video.currentTime)\n",[91,92740,92741,92743,92745],{"class":93,"line":16892},[91,92742,54616],{"class":250},[91,92744,6533],{"class":105},[91,92746,257],{"class":250},[91,92748,92749],{"class":93,"line":16906},[91,92750,92751],{"class":308},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[91,92753,92754,92757,92760,92762,92765,92767],{"class":93,"line":16919},[91,92755,92756],{"class":250},"    video.",[91,92758,92759],{"class":97},"onloadeddata",[91,92761,13687],{"class":153},[91,92763,92764],{"class":250}," () ",[91,92766,84803],{"class":153},[91,92768,15695],{"class":250},[91,92770,92771],{"class":93,"line":16924},[91,92772,60093],{"class":308},[91,92774,92775],{"class":93,"line":16938},[91,92776,92777],{"class":308},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[91,92779,92780,92783,92785,92788,92790,92792,92794,92796,92798],{"class":93,"line":16943},[91,92781,92782],{"class":250},"      video.currentTime ",[91,92784,296],{"class":153},[91,92786,92787],{"class":250}," localStorage.",[91,92789,71766],{"class":97},[91,92791,251],{"class":250},[91,92793,92735],{"class":101},[91,92795,13837],{"class":250},[91,92797,71438],{"class":153},[91,92799,47414],{"class":105},[91,92801,92802],{"class":93,"line":16949},[91,92803,2310],{"class":250},[91,92805,92806,92808,92810],{"class":93,"line":16954},[91,92807,52498],{"class":250},[91,92809,51894],{"class":51381},[91,92811,51388],{"class":250},[91,92813,92814,92816,92818],{"class":93,"line":16968},[91,92815,51866],{"class":250},[91,92817,51881],{"class":51381},[91,92819,51388],{"class":250},[91,92821,92822],{"class":93,"line":16973},[91,92823,2523],{"emptyLinePlaceholder":175},[91,92825,92826,92828,92830],{"class":93,"line":16978},[91,92827,51866],{"class":250},[91,92829,50716],{"class":51381},[91,92831,51388],{"class":250},[168,92833,92834],{},"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":26,"searchDepth":38,"depth":38,"links":92836},[92837,92842,92846,92847,92848,92853,92858,92859,92860,92861,92868,92873,92874,92884,92888,92889,92893],{"id":76772,"depth":38,"text":76773,"children":92838},[92839,92840,92841],{"id":76776,"depth":1304,"text":76777},{"id":76801,"depth":1304,"text":76802},{"id":76813,"depth":1304,"text":76814},{"id":76825,"depth":38,"text":76826,"children":92843},[92844,92845],{"id":76829,"depth":1304,"text":76830},{"id":76844,"depth":1304,"text":76845},{"id":76896,"depth":38,"text":76897},{"id":76940,"depth":38,"text":76941},{"id":76957,"depth":38,"text":76958,"children":92849},[92850,92851,92852],{"id":76961,"depth":1304,"text":76962},{"id":76974,"depth":1304,"text":76975},{"id":77079,"depth":1304,"text":77080},{"id":77368,"depth":38,"text":77369,"children":92854},[92855,92856,92857],{"id":77372,"depth":1304,"text":77373},{"id":77815,"depth":1304,"text":77816},{"id":78226,"depth":1304,"text":78227},{"id":78289,"depth":38,"text":78290},{"id":78368,"depth":38,"text":78369},{"id":78461,"depth":38,"text":78462},{"id":80306,"depth":38,"text":80307,"children":92862},[92863,92864,92865,92866,92867],{"id":80310,"depth":1304,"text":80311},{"id":80322,"depth":1304,"text":80323},{"id":80541,"depth":1304,"text":80542},{"id":80559,"depth":1304,"text":80560},{"id":80619,"depth":1304,"text":80620},{"id":84887,"depth":38,"text":84888,"children":92869},[92870,92871,92872],{"id":84891,"depth":1304,"text":84892},{"id":84909,"depth":1304,"text":84910},{"id":84935,"depth":1304,"text":84936},{"id":84944,"depth":38,"text":84945},{"id":84966,"depth":38,"text":84967,"children":92875},[92876,92877,92878,92879,92880,92881,92882,92883],{"id":84970,"depth":1304,"text":84971},{"id":85231,"depth":1304,"text":85232},{"id":85417,"depth":1304,"text":85418},{"id":85784,"depth":1304,"text":85785},{"id":85900,"depth":1304,"text":85901},{"id":85936,"depth":1304,"text":85937},{"id":85983,"depth":1304,"text":85984},{"id":86017,"depth":1304,"text":86018},{"id":87380,"depth":38,"text":87381,"children":92885},[92886,92887],{"id":87384,"depth":1304,"text":87385},{"id":87421,"depth":1304,"text":87422},{"id":88776,"depth":38,"text":88777},{"id":89147,"depth":38,"text":89148,"children":92890},[92891,92892],{"id":89151,"depth":1304,"text":89152},{"id":89185,"depth":1304,"text":89186},{"id":89914,"depth":38,"text":89915,"children":92894},[92895,92896,92897,92898],{"id":89918,"depth":1304,"text":89919},{"id":90876,"depth":1304,"text":90877},{"id":91818,"depth":1304,"text":91819},{"id":91892,"depth":1304,"text":91893},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76761,"description":23500},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92905,"title":92906,"body":92907,"description":92918,"extension":173,"meta":92919,"navigation":175,"path":92921,"seo":92922,"stem":92923,"__hash__":92924},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92908,"toc":92916},[92909],[21,92910,92911,92912],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[487,92913,92914],{"href":92914,"rel":92915},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23987],{"title":26,"searchDepth":38,"depth":38,"links":92917},[],"三件套第三套学习",{"category":92920},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92906,"description":92918},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92926,"title":92927,"body":92928,"description":23500,"extension":173,"meta":93033,"navigation":175,"path":93034,"seo":93035,"stem":93036,"__hash__":93037},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92929,"toc":93028},[92930,92937,92940,92943,92946,92950,92959,92962,92965,92969,92978,92981,92985,92988,93008,93011,93025],[21,92931,92932],{},[487,92933,92936],{"href":92934,"rel":92935},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23987],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92938,92927],{"id":92939},"_1安装",[21,92941,92942],{},"numpy是科学计算基础库,底层是C语言",[21,92944,92945],{},"三种方式：",[190,92947,92949],{"id":92948},"_11-通过pip安装","1.1 通过pip安装",[82,92951,92953],{"className":30459,"code":92952,"language":30461,"meta":26,"style":26},"pip install numpy\n",[88,92954,92955],{"__ignoreMap":26},[91,92956,92957],{"class":93,"line":94},[91,92958,92952],{"class":250},[21,92960,92961],{},"首选方式，自动处理依赖项",[21,92963,92964],{},"在提示系统命令符中使用cmd",[190,92966,92968],{"id":92967},"_12-通过anaconda安装","1.2 通过Anaconda安装",[82,92970,92972],{"className":30459,"code":92971,"language":30461,"meta":26,"style":26},"conda install numpy\n",[88,92973,92974],{"__ignoreMap":26},[91,92975,92976],{"class":93,"line":94},[91,92977,92971],{"class":250},[21,92979,92980],{},"自动解决环境依赖",[190,92982,92984],{"id":92983},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[21,92986,92987],{},"对于Debian\u002FUbuntu",[82,92989,92991],{"className":30459,"code":92990,"language":30461,"meta":26,"style":26},"sudo apt-get install python3-numpy\n",[88,92992,92993],{"__ignoreMap":26},[91,92994,92995,92998,93000,93003,93005],{"class":93,"line":94},[91,92996,92997],{"class":250},"sudo apt",[91,92999,781],{"class":153},[91,93001,93002],{"class":250},"get install python3",[91,93004,781],{"class":153},[91,93006,93007],{"class":250},"numpy\n",[21,93009,93010],{},"对于Fedora:",[82,93012,93014],{"className":30459,"code":93013,"language":30461,"meta":26,"style":26},"sudo dnf install python3-numpy\n",[88,93015,93016],{"__ignoreMap":26},[91,93017,93018,93021,93023],{"class":93,"line":94},[91,93019,93020],{"class":250},"sudo dnf install python3",[91,93022,781],{"class":153},[91,93024,93007],{"class":250},[168,93026,93027],{},"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":26,"searchDepth":38,"depth":38,"links":93029},[93030,93031,93032],{"id":92948,"depth":38,"text":92949},{"id":92967,"depth":38,"text":92968},{"id":92983,"depth":38,"text":92984},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92927,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93039,"title":93040,"body":93041,"description":23500,"extension":173,"meta":93154,"navigation":175,"path":93155,"seo":93156,"stem":93157,"__hash__":93158},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93042,"toc":93152},[93043,93046,93049,93052,93055,93058,93061,93064,93067,93070,93146,93149],[10,93044,93040],{"id":93045},"_10算数函数",[21,93047,93048],{},"加减乘除运算跟python基础语法没区别",[21,93050,93051],{},"除了python那种方法外还可以使用函数",[21,93053,93054],{},"加：np.add(a,b)",[21,93056,93057],{},"减：np.subtract(a,b)",[21,93059,93060],{},"乘：np.multiply(a,b)",[21,93062,93063],{},"除：np.divide(a,b) == a\u002Fb",[21,93065,93066],{},"取余：np.mod(a,b) == a%b",[21,93068,93069],{},"必须会的用法：",[82,93071,93073],{"className":30459,"code":93072,"language":30461,"meta":26,"style":26},"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",[88,93074,93075,93097,93118,93128,93141],{"__ignoreMap":26},[91,93076,93077,93079,93081,93084,93086,93089,93091,93093,93095],{"class":93,"line":94},[91,93078,487],{"class":250},[91,93080,296],{"class":153},[91,93082,93083],{"class":250},"np.arange(",[91,93085,669],{"class":105},[91,93087,93088],{"class":250},").reshape(",[91,93090,321],{"class":105},[91,93092,627],{"class":250},[91,93094,321],{"class":105},[91,93096,257],{"class":250},[91,93098,93099,93101,93103,93106,93108,93110,93112,93114,93116],{"class":93,"line":38},[91,93100,512],{"class":250},[91,93102,296],{"class":153},[91,93104,93105],{"class":250},"np.array([",[91,93107,695],{"class":105},[91,93109,627],{"class":250},[91,93111,695],{"class":105},[91,93113,627],{"class":250},[91,93115,695],{"class":105},[91,93117,4780],{"class":250},[91,93119,93120,93123,93125],{"class":93,"line":1304},[91,93121,93122],{"class":250},"result",[91,93124,296],{"class":153},[91,93126,93127],{"class":250},"np.empty_like(a)\n",[91,93129,93130,93133,93136,93138],{"class":93,"line":1319},[91,93131,93132],{"class":250},"np.add(a,b,",[91,93134,93135],{"class":5339},"out",[91,93137,296],{"class":153},[91,93139,93140],{"class":250},"result)\n",[91,93142,93143],{"class":93,"line":1325},[91,93144,93145],{"class":250},"result\n",[21,93147,93148],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[168,93150,93151],{},"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":26,"searchDepth":38,"depth":38,"links":93153},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93040,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93160,"title":93161,"body":93162,"description":23500,"extension":173,"meta":93924,"navigation":175,"path":93925,"seo":93926,"stem":93927,"__hash__":93928},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93163,"toc":93911},[93164,93167,93170,93173,93177,93216,93220,93264,93324,93328,93331,93370,93373,93418,93422,93458,93462,93531,93535,93599,93603,93606,93609,93612,93615,93651,93655,93695,93699,93771,93774,93778,93841,93845,93908],[10,93165,93161],{"id":93166},"_11统计函数",[21,93168,93169],{},"sum max min mean",[21,93171,93172],{},"这些有axis参数，可以指定方向",[190,93174,93176],{"id":93175},"_111-sum求和函数","11.1 sum()求和函数",[82,93178,93180],{"className":30459,"code":93179,"language":30461,"meta":26,"style":26},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[88,93181,93182,93187,93208],{"__ignoreMap":26},[91,93183,93184],{"class":93,"line":94},[91,93185,93186],{"class":308},"#创建一维数组\n",[91,93188,93189,93191,93193,93196,93198,93200,93202,93204,93206],{"class":93,"line":38},[91,93190,487],{"class":250},[91,93192,296],{"class":153},[91,93194,93195],{"class":250},"np.random.randint(",[91,93197,466],{"class":105},[91,93199,627],{"class":250},[91,93201,560],{"class":105},[91,93203,627],{"class":250},[91,93205,949],{"class":105},[91,93207,257],{"class":250},[91,93209,93210,93213],{"class":93,"line":1304},[91,93211,93212],{"class":250},"np.sum(a)",[91,93214,93215],{"class":308},"#求和\n",[190,93217,93219],{"id":93218},"_112-max求最大值函数","11.2 max()求最大值函数",[82,93221,93223],{"className":30459,"code":93222,"language":30461,"meta":26,"style":26},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[88,93224,93225,93229,93249,93254,93259],{"__ignoreMap":26},[91,93226,93227],{"class":93,"line":94},[91,93228,93186],{"class":308},[91,93230,93231,93233,93235,93237,93239,93241,93243,93245,93247],{"class":93,"line":38},[91,93232,487],{"class":250},[91,93234,296],{"class":153},[91,93236,93195],{"class":250},[91,93238,466],{"class":105},[91,93240,627],{"class":250},[91,93242,560],{"class":105},[91,93244,627],{"class":250},[91,93246,949],{"class":105},[91,93248,257],{"class":250},[91,93250,93251],{"class":93,"line":1304},[91,93252,93253],{"class":250},"np.max(a)\n",[91,93255,93256],{"class":93,"line":1319},[91,93257,93258],{"class":308},"#最大索引(求最大元素的索引)arg\n",[91,93260,93261],{"class":93,"line":1325},[91,93262,93263],{"class":250},"np.argmax(a)\n",[82,93265,93267],{"className":30459,"code":93266,"language":30461,"meta":26,"style":26},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[88,93268,93269,93290,93310,93314],{"__ignoreMap":26},[91,93270,93271,93273,93275,93278,93280,93282,93284,93286,93288],{"class":93,"line":94},[91,93272,11042],{"class":250},[91,93274,296],{"class":153},[91,93276,93277],{"class":250}," np.array([",[91,93279,466],{"class":105},[91,93281,12558],{"class":250},[91,93283,568],{"class":105},[91,93285,12558],{"class":250},[91,93287,321],{"class":105},[91,93289,4780],{"class":250},[91,93291,93292,93294,93296,93298,93300,93302,93304,93306,93308],{"class":93,"line":38},[91,93293,11068],{"class":250},[91,93295,296],{"class":153},[91,93297,93277],{"class":250},[91,93299,321],{"class":105},[91,93301,12558],{"class":250},[91,93303,327],{"class":105},[91,93305,12558],{"class":250},[91,93307,542],{"class":105},[91,93309,4780],{"class":250},[91,93311,93312],{"class":93,"line":1304},[91,93313,2523],{"emptyLinePlaceholder":175},[91,93315,93316,93318,93321],{"class":93,"line":1319},[91,93317,30496],{"class":105},[91,93319,93320],{"class":250},"(np.maximum(a, b))   ",[91,93322,93323],{"class":308},"# [3 5 4]，每个位置上取较大值\n",[190,93325,93327],{"id":93326},"_113-mean求平均值函数","11.3 mean()求平均值函数",[21,93329,93330],{},"①一维数组：",[82,93332,93334],{"className":30459,"code":93333,"language":30461,"meta":26,"style":26},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[88,93335,93336,93340,93360,93365],{"__ignoreMap":26},[91,93337,93338],{"class":93,"line":94},[91,93339,93186],{"class":308},[91,93341,93342,93344,93346,93348,93350,93352,93354,93356,93358],{"class":93,"line":38},[91,93343,487],{"class":250},[91,93345,296],{"class":153},[91,93347,93195],{"class":250},[91,93349,466],{"class":105},[91,93351,627],{"class":250},[91,93353,560],{"class":105},[91,93355,627],{"class":250},[91,93357,949],{"class":105},[91,93359,257],{"class":250},[91,93361,93362],{"class":93,"line":1304},[91,93363,93364],{"class":308},"#求平均值\n",[91,93366,93367],{"class":93,"line":1319},[91,93368,93369],{"class":250},"np.mean(a)\n",[21,93371,93372],{},"②二维数组",[82,93374,93376],{"className":30459,"code":93375,"language":30461,"meta":26,"style":26},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[88,93377,93378,93383,93408,93413],{"__ignoreMap":26},[91,93379,93380],{"class":93,"line":94},[91,93381,93382],{"class":308},"#二维数组\n",[91,93384,93385,93388,93390,93392,93394,93396,93398,93400,93402,93404,93406],{"class":93,"line":38},[91,93386,93387],{"class":250},"aa",[91,93389,296],{"class":153},[91,93391,93083],{"class":250},[91,93393,466],{"class":105},[91,93395,627],{"class":250},[91,93397,772],{"class":105},[91,93399,93088],{"class":250},[91,93401,321],{"class":105},[91,93403,627],{"class":250},[91,93405,542],{"class":105},[91,93407,257],{"class":250},[91,93409,93410],{"class":93,"line":1304},[91,93411,93412],{"class":308},"#对数组中的所有数求平均\n",[91,93414,93415],{"class":93,"line":1319},[91,93416,93417],{"class":250},"np.mean(aa)\n",[190,93419,93421],{"id":93420},"_114-median求中位数函数","11.4 median()求中位数函数",[82,93423,93425],{"className":30459,"code":93424,"language":30461,"meta":26,"style":26},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[88,93426,93427,93432,93448,93453],{"__ignoreMap":26},[91,93428,93429],{"class":93,"line":94},[91,93430,93431],{"class":308},"#求中位数\n",[91,93433,93434,93436,93438,93440,93442,93444,93446],{"class":93,"line":38},[91,93435,512],{"class":250},[91,93437,296],{"class":153},[91,93439,93083],{"class":250},[91,93441,466],{"class":105},[91,93443,627],{"class":250},[91,93445,695],{"class":105},[91,93447,257],{"class":250},[91,93449,93450],{"class":93,"line":1304},[91,93451,93452],{"class":250},"np.median(b)\n",[91,93454,93455],{"class":93,"line":1319},[91,93456,93457],{"class":308},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[190,93459,93461],{"id":93460},"_115-power求幂运算函数","11.5 power()求幂运算函数",[82,93463,93465],{"className":30459,"code":93464,"language":30461,"meta":26,"style":26},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[88,93466,93467,93483,93488,93493,93502,93507,93516],{"__ignoreMap":26},[91,93468,93469,93471,93473,93475,93477,93479,93481],{"class":93,"line":94},[91,93470,512],{"class":250},[91,93472,296],{"class":153},[91,93474,93083],{"class":250},[91,93476,466],{"class":105},[91,93478,627],{"class":250},[91,93480,695],{"class":105},[91,93482,257],{"class":250},[91,93484,93485],{"class":93,"line":38},[91,93486,93487],{"class":308},"#幂运算\n",[91,93489,93490],{"class":93,"line":1304},[91,93491,93492],{"class":308},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[91,93494,93495,93498,93500],{"class":93,"line":1319},[91,93496,93497],{"class":250},"np.power(b,",[91,93499,327],{"class":105},[91,93501,257],{"class":250},[91,93503,93504],{"class":93,"line":1325},[91,93505,93506],{"class":308},"#或者以下代码，将数据存储起来\n",[91,93508,93509,93511,93513],{"class":93,"line":1339},[91,93510,1094],{"class":250},[91,93512,296],{"class":153},[91,93514,93515],{"class":250},"np.empty_like(b)\n",[91,93517,93518,93520,93522,93524,93526,93528],{"class":93,"line":1345},[91,93519,93497],{"class":250},[91,93521,327],{"class":105},[91,93523,627],{"class":250},[91,93525,93135],{"class":5339},[91,93527,296],{"class":153},[91,93529,93530],{"class":250},"y)\n",[190,93532,93534],{"id":93533},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[82,93536,93538],{"className":30459,"code":93537,"language":30461,"meta":26,"style":26},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[88,93539,93540,93556,93561,93566,93570,93588],{"__ignoreMap":26},[91,93541,93542,93544,93546,93548,93550,93552,93554],{"class":93,"line":94},[91,93543,512],{"class":250},[91,93545,296],{"class":153},[91,93547,93083],{"class":250},[91,93549,466],{"class":105},[91,93551,627],{"class":250},[91,93553,695],{"class":105},[91,93555,257],{"class":250},[91,93557,93558],{"class":93,"line":38},[91,93559,93560],{"class":308},"#开方\n",[91,93562,93563],{"class":93,"line":1304},[91,93564,93565],{"class":250},"np.sqrt(b)\n",[91,93567,93568],{"class":93,"line":1319},[91,93569,93506],{"class":308},[91,93571,93572,93574,93576,93579,93582,93584,93586],{"class":93,"line":1325},[91,93573,1094],{"class":250},[91,93575,296],{"class":153},[91,93577,93578],{"class":250},"np.empty_like(b,",[91,93580,93581],{"class":5339},"dtype",[91,93583,296],{"class":153},[91,93585,290],{"class":105},[91,93587,257],{"class":250},[91,93589,93590,93593,93595,93597],{"class":93,"line":1339},[91,93591,93592],{"class":250},"np.sqrt(b,",[91,93594,93135],{"class":5339},[91,93596,296],{"class":153},[91,93598,93530],{"class":250},[190,93600,93602],{"id":93601},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[21,93604,93605],{},"对数组中的元素累计求和，可指定轴",[21,93607,93608],{},"#累计求和的意思是：",[21,93610,93611],{},"a = np.array([1, 2, 3, 4])",[21,93613,93614],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[82,93616,93618],{"className":30459,"code":93617,"language":30461,"meta":26,"style":26},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[88,93619,93620,93636,93641,93646],{"__ignoreMap":26},[91,93621,93622,93624,93626,93628,93630,93632,93634],{"class":93,"line":94},[91,93623,512],{"class":250},[91,93625,296],{"class":153},[91,93627,93083],{"class":250},[91,93629,466],{"class":105},[91,93631,627],{"class":250},[91,93633,695],{"class":105},[91,93635,257],{"class":250},[91,93637,93638],{"class":93,"line":38},[91,93639,93640],{"class":250},"np.cumsum(b)\n",[91,93642,93643],{"class":93,"line":1304},[91,93644,93645],{"class":308},"#结果：\n",[91,93647,93648],{"class":93,"line":1319},[91,93649,93650],{"class":308},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[190,93652,93654],{"id":93653},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[82,93656,93658],{"className":30459,"code":93657,"language":30461,"meta":26,"style":26},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[88,93659,93660,93676,93681,93686,93690],{"__ignoreMap":26},[91,93661,93662,93664,93666,93668,93670,93672,93674],{"class":93,"line":94},[91,93663,512],{"class":250},[91,93665,296],{"class":153},[91,93667,93083],{"class":250},[91,93669,466],{"class":105},[91,93671,627],{"class":250},[91,93673,695],{"class":105},[91,93675,257],{"class":250},[91,93677,93678],{"class":93,"line":38},[91,93679,93680],{"class":308},"#对数组中的元素累计求积，可指定轴\n",[91,93682,93683],{"class":93,"line":1304},[91,93684,93685],{"class":250},"np.cumprod(b)\n",[91,93687,93688],{"class":93,"line":1319},[91,93689,93645],{"class":308},[91,93691,93692],{"class":93,"line":1325},[91,93693,93694],{"class":308},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[190,93696,93698],{"id":93697},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[82,93700,93702],{"className":30459,"code":93701,"language":30461,"meta":26,"style":26},"#删除数组中的重复数据，并对数据进行排序\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",[88,93703,93704,93709,93757,93762,93766],{"__ignoreMap":26},[91,93705,93706],{"class":93,"line":94},[91,93707,93708],{"class":308},"#删除数组中的重复数据，并对数据进行排序\n",[91,93710,93711,93713,93715,93717,93719,93721,93723,93725,93727,93729,93731,93733,93735,93737,93739,93741,93743,93745,93747,93749,93751,93753,93755],{"class":93,"line":38},[91,93712,487],{"class":250},[91,93714,296],{"class":153},[91,93716,93105],{"class":250},[91,93718,466],{"class":105},[91,93720,627],{"class":250},[91,93722,327],{"class":105},[91,93724,627],{"class":250},[91,93726,321],{"class":105},[91,93728,627],{"class":250},[91,93730,747],{"class":105},[91,93732,627],{"class":250},[91,93734,321],{"class":105},[91,93736,627],{"class":250},[91,93738,695],{"class":105},[91,93740,627],{"class":250},[91,93742,446],{"class":105},[91,93744,627],{"class":250},[91,93746,440],{"class":105},[91,93748,627],{"class":250},[91,93750,1024],{"class":105},[91,93752,627],{"class":250},[91,93754,542],{"class":105},[91,93756,4780],{"class":250},[91,93758,93759],{"class":93,"line":1304},[91,93760,93761],{"class":250},"np.unique(a)\n",[91,93763,93764],{"class":93,"line":1319},[91,93765,93645],{"class":308},[91,93767,93768],{"class":93,"line":1325},[91,93769,93770],{"class":308},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[21,93772,93773],{},"升序形式排序",[190,93775,93777],{"id":93776},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[82,93779,93781],{"className":30459,"code":93780,"language":30461,"meta":26,"style":26},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[88,93782,93783,93831,93836],{"__ignoreMap":26},[91,93784,93785,93787,93789,93791,93793,93795,93797,93799,93801,93803,93805,93807,93809,93811,93813,93815,93817,93819,93821,93823,93825,93827,93829],{"class":93,"line":94},[91,93786,487],{"class":250},[91,93788,296],{"class":153},[91,93790,93105],{"class":250},[91,93792,466],{"class":105},[91,93794,627],{"class":250},[91,93796,327],{"class":105},[91,93798,627],{"class":250},[91,93800,321],{"class":105},[91,93802,627],{"class":250},[91,93804,747],{"class":105},[91,93806,627],{"class":250},[91,93808,321],{"class":105},[91,93810,627],{"class":250},[91,93812,695],{"class":105},[91,93814,627],{"class":250},[91,93816,446],{"class":105},[91,93818,627],{"class":250},[91,93820,440],{"class":105},[91,93822,627],{"class":250},[91,93824,1024],{"class":105},[91,93826,627],{"class":250},[91,93828,542],{"class":105},[91,93830,4780],{"class":250},[91,93832,93833],{"class":93,"line":38},[91,93834,93835],{"class":308},"#返回数组中非零元素的索引\n",[91,93837,93838],{"class":93,"line":1304},[91,93839,93840],{"class":250},"np.nonzero(a)\n",[190,93842,93844],{"id":93843},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[82,93846,93848],{"className":30459,"code":93847,"language":30461,"meta":26,"style":26},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[88,93849,93850,93898,93903],{"__ignoreMap":26},[91,93851,93852,93854,93856,93858,93860,93862,93864,93866,93868,93870,93872,93874,93876,93878,93880,93882,93884,93886,93888,93890,93892,93894,93896],{"class":93,"line":94},[91,93853,487],{"class":250},[91,93855,296],{"class":153},[91,93857,93105],{"class":250},[91,93859,466],{"class":105},[91,93861,627],{"class":250},[91,93863,327],{"class":105},[91,93865,627],{"class":250},[91,93867,321],{"class":105},[91,93869,627],{"class":250},[91,93871,747],{"class":105},[91,93873,627],{"class":250},[91,93875,321],{"class":105},[91,93877,627],{"class":250},[91,93879,695],{"class":105},[91,93881,627],{"class":250},[91,93883,446],{"class":105},[91,93885,627],{"class":250},[91,93887,440],{"class":105},[91,93889,627],{"class":250},[91,93891,1024],{"class":105},[91,93893,627],{"class":250},[91,93895,542],{"class":105},[91,93897,4780],{"class":250},[91,93899,93900],{"class":93,"line":38},[91,93901,93902],{"class":308},"#计算一组数中最大值与最小值的差，可指定轴\n",[91,93904,93905],{"class":93,"line":1304},[91,93906,93907],{"class":250},"np.ptp(a)\n",[168,93909,93910],{},"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":26,"searchDepth":38,"depth":38,"links":93912},[93913,93914,93915,93916,93917,93918,93919,93920,93921,93922,93923],{"id":93175,"depth":38,"text":93176},{"id":93218,"depth":38,"text":93219},{"id":93326,"depth":38,"text":93327},{"id":93420,"depth":38,"text":93421},{"id":93460,"depth":38,"text":93461},{"id":93533,"depth":38,"text":93534},{"id":93601,"depth":38,"text":93602},{"id":93653,"depth":38,"text":93654},{"id":93697,"depth":38,"text":93698},{"id":93776,"depth":38,"text":93777},{"id":93843,"depth":38,"text":93844},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93161,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93930,"title":93931,"body":93932,"description":23500,"extension":173,"meta":94587,"navigation":175,"path":94588,"seo":94589,"stem":94590,"__hash__":94591},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93933,"toc":94575},[93934,93937,93941,93944,94160,94164,94167,94376,94380,94446,94451,94455,94458,94461,94499,94503,94506,94511,94515,94518,94521,94526,94530,94533,94537,94540,94543,94548,94552,94555,94558,94563,94567,94572],[10,93935,93931],{"id":93936},"_12其他常用函数",[190,93938,93940],{"id":93939},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[21,93942,93943],{},"将数组的数据按照行列复制扩展",[82,93945,93947],{"className":30459,"code":93946,"language":30461,"meta":26,"style":26},"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",[88,93948,93949,93965,93974,93978,93983,93988,94001,94005,94010,94015,94020,94024,94029,94053,94065,94069,94073,94078,94083,94088,94093,94097,94110,94114,94118,94123,94128,94133,94138,94143,94147,94151,94156],{"__ignoreMap":26},[91,93950,93951,93953,93955,93957,93959,93961,93963],{"class":93,"line":94},[91,93952,487],{"class":250},[91,93954,296],{"class":153},[91,93956,93083],{"class":250},[91,93958,466],{"class":105},[91,93960,627],{"class":250},[91,93962,568],{"class":105},[91,93964,257],{"class":250},[91,93966,93967,93970,93972],{"class":93,"line":38},[91,93968,93969],{"class":250},"np.tile(a,",[91,93971,327],{"class":105},[91,93973,257],{"class":250},[91,93975,93976],{"class":93,"line":1304},[91,93977,93645],{"class":308},[91,93979,93980],{"class":93,"line":1319},[91,93981,93982],{"class":308},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[91,93984,93985],{"class":93,"line":1325},[91,93986,93987],{"class":308},"#行复制两次，列复制三次\n",[91,93989,93990,93993,93995,93997,93999],{"class":93,"line":1339},[91,93991,93992],{"class":250},"np.tile(a,(",[91,93994,327],{"class":105},[91,93996,627],{"class":250},[91,93998,321],{"class":105},[91,94000,30578],{"class":250},[91,94002,94003],{"class":93,"line":1345},[91,94004,93645],{"class":308},[91,94006,94007],{"class":93,"line":1436},[91,94008,94009],{"class":101},"'''\n",[91,94011,94012],{"class":93,"line":1442},[91,94013,94014],{"class":101},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[91,94016,94017],{"class":93,"line":1454},[91,94018,94019],{"class":101},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[91,94021,94022],{"class":93,"line":1736},[91,94023,94009],{"class":101},[91,94025,94026],{"class":93,"line":1741},[91,94027,94028],{"class":308},"#创建二维数组\n",[91,94030,94031,94033,94035,94037,94039,94041,94043,94045,94047,94049,94051],{"class":93,"line":1747},[91,94032,93387],{"class":250},[91,94034,296],{"class":153},[91,94036,93083],{"class":250},[91,94038,466],{"class":105},[91,94040,627],{"class":250},[91,94042,772],{"class":105},[91,94044,93088],{"class":250},[91,94046,542],{"class":105},[91,94048,627],{"class":250},[91,94050,321],{"class":105},[91,94052,257],{"class":250},[91,94054,94055,94058,94060,94062],{"class":93,"line":1752},[91,94056,94057],{"class":250},"np.tile(aa,",[91,94059,327],{"class":105},[91,94061,678],{"class":250},[91,94063,94064],{"class":308},"#一个数的时候就是行\n",[91,94066,94067],{"class":93,"line":1766},[91,94068,93645],{"class":308},[91,94070,94071],{"class":93,"line":1771},[91,94072,94009],{"class":101},[91,94074,94075],{"class":93,"line":1777},[91,94076,94077],{"class":101},"array([[ 1,  2,  3,  1,  2,  3],\n",[91,94079,94080],{"class":93,"line":1798},[91,94081,94082],{"class":101},"       [ 4,  5,  6,  4,  5,  6],\n",[91,94084,94085],{"class":93,"line":1803},[91,94086,94087],{"class":101},"       [ 7,  8,  9,  7,  8,  9],\n",[91,94089,94090],{"class":93,"line":1817},[91,94091,94092],{"class":101},"       [10, 11, 12, 10, 11, 12]])\n",[91,94094,94095],{"class":93,"line":1822},[91,94096,94009],{"class":101},[91,94098,94099,94102,94104,94106,94108],{"class":93,"line":1851},[91,94100,94101],{"class":250},"np.tile(aa,(",[91,94103,327],{"class":105},[91,94105,627],{"class":250},[91,94107,321],{"class":105},[91,94109,30578],{"class":250},[91,94111,94112],{"class":93,"line":1856},[91,94113,93645],{"class":308},[91,94115,94116],{"class":93,"line":1873},[91,94117,94009],{"class":101},[91,94119,94120],{"class":93,"line":1878},[91,94121,94122],{"class":101},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[91,94124,94125],{"class":93,"line":1883},[91,94126,94127],{"class":101},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[91,94129,94130],{"class":93,"line":1888},[91,94131,94132],{"class":101},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[91,94134,94135],{"class":93,"line":1902},[91,94136,94137],{"class":101},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[91,94139,94140],{"class":93,"line":1907},[91,94141,94142],{"class":101},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[91,94144,94145],{"class":93,"line":2700},[91,94146,94127],{"class":101},[91,94148,94149],{"class":93,"line":2714},[91,94150,94132],{"class":101},[91,94152,94153],{"class":93,"line":2722},[91,94154,94155],{"class":101},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[91,94157,94158],{"class":93,"line":2727},[91,94159,94009],{"class":101},[190,94161,94163],{"id":94162},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[21,94165,94166],{},"repeat()将数组中的每个元素重复若干次",[82,94168,94170],{"className":30459,"code":94169,"language":30461,"meta":26,"style":26},"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",[88,94171,94172,94188,94197,94201,94206,94230,94235,94244,94248,94253,94257,94262,94278,94282,94286,94291,94296,94301,94305,94310,94314,94319,94324,94328,94344,94348,94352,94357,94362,94367,94372],{"__ignoreMap":26},[91,94173,94174,94176,94178,94180,94182,94184,94186],{"class":93,"line":94},[91,94175,487],{"class":250},[91,94177,296],{"class":153},[91,94179,93083],{"class":250},[91,94181,466],{"class":105},[91,94183,627],{"class":250},[91,94185,568],{"class":105},[91,94187,257],{"class":250},[91,94189,94190,94193,94195],{"class":93,"line":38},[91,94191,94192],{"class":250},"np.repeat(a,",[91,94194,321],{"class":105},[91,94196,257],{"class":250},[91,94198,94199],{"class":93,"line":1304},[91,94200,93645],{"class":308},[91,94202,94203],{"class":93,"line":1319},[91,94204,94205],{"class":308},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[91,94207,94208,94210,94212,94214,94216,94218,94220,94222,94224,94226,94228],{"class":93,"line":1325},[91,94209,93387],{"class":250},[91,94211,296],{"class":153},[91,94213,93083],{"class":250},[91,94215,466],{"class":105},[91,94217,627],{"class":250},[91,94219,772],{"class":105},[91,94221,93088],{"class":250},[91,94223,542],{"class":105},[91,94225,627],{"class":250},[91,94227,321],{"class":105},[91,94229,257],{"class":250},[91,94231,94232],{"class":93,"line":1339},[91,94233,94234],{"class":308},"#这个重复之后二维变成一维\n",[91,94236,94237,94240,94242],{"class":93,"line":1345},[91,94238,94239],{"class":250},"np.repeat(aa,",[91,94241,327],{"class":105},[91,94243,257],{"class":250},[91,94245,94246],{"class":93,"line":1436},[91,94247,94009],{"class":101},[91,94249,94250],{"class":93,"line":1442},[91,94251,94252],{"class":101},"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",[91,94254,94255],{"class":93,"line":1454},[91,94256,94009],{"class":101},[91,94258,94259],{"class":93,"line":1736},[91,94260,94261],{"class":308},"#指定axis\n",[91,94263,94264,94266,94268,94270,94272,94274,94276],{"class":93,"line":1741},[91,94265,94239],{"class":250},[91,94267,327],{"class":105},[91,94269,627],{"class":250},[91,94271,47595],{"class":5339},[91,94273,296],{"class":153},[91,94275,440],{"class":105},[91,94277,257],{"class":250},[91,94279,94280],{"class":93,"line":1747},[91,94281,93645],{"class":308},[91,94283,94284],{"class":93,"line":1752},[91,94285,94009],{"class":101},[91,94287,94288],{"class":93,"line":1766},[91,94289,94290],{"class":101},"array([[ 1,  2,  3],\n",[91,94292,94293],{"class":93,"line":1771},[91,94294,94295],{"class":101},"       [ 1,  2,  3],\n",[91,94297,94298],{"class":93,"line":1777},[91,94299,94300],{"class":101},"       [ 4,  5,  6],\n",[91,94302,94303],{"class":93,"line":1798},[91,94304,94300],{"class":101},[91,94306,94307],{"class":93,"line":1803},[91,94308,94309],{"class":101},"       [ 7,  8,  9],\n",[91,94311,94312],{"class":93,"line":1817},[91,94313,94309],{"class":101},[91,94315,94316],{"class":93,"line":1822},[91,94317,94318],{"class":101},"       [10, 11, 12],\n",[91,94320,94321],{"class":93,"line":1851},[91,94322,94323],{"class":101},"       [10, 11, 12]])\n",[91,94325,94326],{"class":93,"line":1856},[91,94327,94009],{"class":101},[91,94329,94330,94332,94334,94336,94338,94340,94342],{"class":93,"line":1873},[91,94331,94239],{"class":250},[91,94333,327],{"class":105},[91,94335,627],{"class":250},[91,94337,47595],{"class":5339},[91,94339,296],{"class":153},[91,94341,466],{"class":105},[91,94343,257],{"class":250},[91,94345,94346],{"class":93,"line":1878},[91,94347,93645],{"class":308},[91,94349,94350],{"class":93,"line":1883},[91,94351,94009],{"class":101},[91,94353,94354],{"class":93,"line":1888},[91,94355,94356],{"class":101},"array([[ 1,  1,  2,  2,  3,  3],\n",[91,94358,94359],{"class":93,"line":1902},[91,94360,94361],{"class":101},"       [ 4,  4,  5,  5,  6,  6],\n",[91,94363,94364],{"class":93,"line":1907},[91,94365,94366],{"class":101},"       [ 7,  7,  8,  8,  9,  9],\n",[91,94368,94369],{"class":93,"line":2700},[91,94370,94371],{"class":101},"       [10, 10, 11, 11, 12, 12]])\n",[91,94373,94374],{"class":93,"line":2714},[91,94375,94009],{"class":101},[190,94377,94379],{"id":94378},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[82,94381,94383],{"className":30459,"code":94382,"language":30461,"meta":26,"style":26},"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",[88,94384,94385,94401,94406,94418,94422,94427,94437,94441],{"__ignoreMap":26},[91,94386,94387,94389,94391,94393,94395,94397,94399],{"class":93,"line":94},[91,94388,487],{"class":250},[91,94390,296],{"class":153},[91,94392,93083],{"class":250},[91,94394,466],{"class":105},[91,94396,627],{"class":250},[91,94398,568],{"class":105},[91,94400,257],{"class":250},[91,94402,94403],{"class":93,"line":38},[91,94404,94405],{"class":308},"#array([，2，3，4])\n",[91,94407,94408,94411,94413,94415],{"class":93,"line":1304},[91,94409,94410],{"class":250},"np.roll(a,",[91,94412,327],{"class":105},[91,94414,678],{"class":250},[91,94416,94417],{"class":308},"#传正数向后调多少位，传负数向前调多少位\n",[91,94419,94420],{"class":93,"line":1319},[91,94421,93645],{"class":308},[91,94423,94424],{"class":93,"line":1325},[91,94425,94426],{"class":308},"#array([3, 4, 1, 2])\n",[91,94428,94429,94431,94433,94435],{"class":93,"line":1339},[91,94430,94410],{"class":250},[91,94432,781],{"class":153},[91,94434,466],{"class":105},[91,94436,257],{"class":250},[91,94438,94439],{"class":93,"line":1345},[91,94440,93645],{"class":308},[91,94442,94443],{"class":93,"line":1436},[91,94444,94445],{"class":308},"#array([2, 3, 4, 1])\n",[21,94447,94448],{},[24,94449],{"alt":26,"src":94450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[190,94452,94454],{"id":94453},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[21,94456,94457],{},"resize()重新调整数组的大小",[21,94459,94460],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[82,94462,94464],{"className":30459,"code":94463,"language":30461,"meta":26,"style":26},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[88,94465,94466,94471,94484],{"__ignoreMap":26},[91,94467,94468],{"class":93,"line":94},[91,94469,94470],{"class":308},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[91,94472,94473,94476,94478,94480,94482],{"class":93,"line":38},[91,94474,94475],{"class":250},"np.resize(aa,(",[91,94477,327],{"class":105},[91,94479,627],{"class":250},[91,94481,593],{"class":105},[91,94483,30578],{"class":250},[91,94485,94486,94488,94490,94492,94494,94496],{"class":93,"line":1304},[91,94487,94475],{"class":250},[91,94489,327],{"class":105},[91,94491,627],{"class":250},[91,94493,669],{"class":105},[91,94495,82852],{"class":250},[91,94497,94498],{"class":308},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[190,94500,94502],{"id":94501},"_125-placeput函数","12.5 place()\u002Fput()函数",[21,94504,94505],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[21,94507,94508],{},[24,94509],{"alt":26,"src":94510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[190,94512,94514],{"id":94513},"_126-保存加载文件","12.6 保存加载文件",[21,94516,94517],{},"savetxt():将数据保存到txt文件中",[21,94519,94520],{},"loadtxt():从文件加载数据",[21,94522,94523],{},[24,94524],{"alt":26,"src":94525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[190,94527,94529],{"id":94528},"_127-genfromtxt函数","12.7 genfromtxt()函数",[21,94531,94532],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[190,94534,94536],{"id":94535},"_128-anyall函数","12.8 any()\u002Fall()函数",[21,94538,94539],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[21,94541,94542],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[21,94544,94545],{},[24,94546],{"alt":26,"src":94547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[190,94549,94551],{"id":94550},"_129-where语句","12.9 where语句",[21,94553,94554],{},"np.where(条件,x,y)",[21,94556,94557],{},"如果条件为True,对应值为x,否则对应值为y",[21,94559,94560],{},[24,94561],{"alt":26,"src":94562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[190,94564,94566],{"id":94565},"_1210-dot矩阵","12.10 dot()矩阵",[21,94568,94569],{},[24,94570],{"alt":26,"src":94571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[168,94573,94574],{},"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":26,"searchDepth":38,"depth":38,"links":94576},[94577,94578,94579,94580,94581,94582,94583,94584,94585,94586],{"id":93939,"depth":38,"text":93940},{"id":94162,"depth":38,"text":94163},{"id":94378,"depth":38,"text":94379},{"id":94453,"depth":38,"text":94454},{"id":94501,"depth":38,"text":94502},{"id":94513,"depth":38,"text":94514},{"id":94528,"depth":38,"text":94529},{"id":94535,"depth":38,"text":94536},{"id":94550,"depth":38,"text":94551},{"id":94565,"depth":38,"text":94566},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93931,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94593,"title":94594,"body":94595,"description":23500,"extension":173,"meta":94948,"navigation":175,"path":94949,"seo":94950,"stem":94951,"__hash__":94952},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94596,"toc":94946},[94597,94600,94603,94606,94609,94612,94677,94679,94943],[10,94598,94594],{"id":94599},"_13数组排序",[21,94601,94602],{},"排序主要用到的方法是np.sort和np.argsort",[21,94604,94605],{},"其中np.sort()对数组直接排序",[21,94607,94608],{},"而np.argsort()是返回排序后的原始索引",[21,94610,94611],{},"①一维数组",[82,94613,94615],{"className":30459,"code":94614,"language":30461,"meta":26,"style":26},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[88,94616,94617,94621,94661,94669],{"__ignoreMap":26},[91,94618,94619],{"class":93,"line":94},[91,94620,93186],{"class":308},[91,94622,94623,94625,94627,94629,94631,94633,94635,94637,94639,94641,94643,94645,94647,94649,94651,94653,94655,94657,94659],{"class":93,"line":38},[91,94624,487],{"class":250},[91,94626,296],{"class":153},[91,94628,93105],{"class":250},[91,94630,321],{"class":105},[91,94632,627],{"class":250},[91,94634,747],{"class":105},[91,94636,627],{"class":250},[91,94638,644],{"class":105},[91,94640,627],{"class":250},[91,94642,1024],{"class":105},[91,94644,627],{"class":250},[91,94646,528],{"class":105},[91,94648,627],{"class":250},[91,94650,1142],{"class":105},[91,94652,627],{"class":250},[91,94654,593],{"class":105},[91,94656,627],{"class":250},[91,94658,695],{"class":105},[91,94660,4780],{"class":250},[91,94662,94663,94666],{"class":93,"line":1304},[91,94664,94665],{"class":250},"np.sort(a)",[91,94667,94668],{"class":308},"#升序排序\n",[91,94670,94671,94674],{"class":93,"line":1319},[91,94672,94673],{"class":250},"np.argsort(a)",[91,94675,94676],{"class":308},"#按照元素大小来索引排序\n",[21,94678,93372],{},[82,94680,94682],{"className":30459,"code":94681,"language":30461,"meta":26,"style":26},"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",[88,94683,94684,94696,94722,94727,94731,94736,94741,94746,94751,94755,94763,94767,94772,94777,94782,94787,94791,94796,94809,94813,94818,94823,94828,94833,94837,94842,94854,94858,94862,94866,94870,94874,94878,94883,94898,94903,94912,94917,94921,94925,94930,94934,94939],{"__ignoreMap":26},[91,94685,94686,94689,94691,94693],{"class":93,"line":94},[91,94687,94688],{"class":250},"np.random.seed(",[91,94690,440],{"class":105},[91,94692,678],{"class":250},[91,94694,94695],{"class":308},"#保证每次值一样\n",[91,94697,94698,94700,94702,94704,94706,94708,94710,94712,94714,94716,94718,94720],{"class":93,"line":38},[91,94699,93387],{"class":250},[91,94701,296],{"class":153},[91,94703,93195],{"class":250},[91,94705,560],{"class":105},[91,94707,627],{"class":250},[91,94709,31577],{"class":5339},[91,94711,296],{"class":153},[91,94713,251],{"class":250},[91,94715,542],{"class":105},[91,94717,627],{"class":250},[91,94719,593],{"class":105},[91,94721,30578],{"class":250},[91,94723,94724],{"class":93,"line":1304},[91,94725,94726],{"class":308},"#原数组：\n",[91,94728,94729],{"class":93,"line":1319},[91,94730,94009],{"class":101},[91,94732,94733],{"class":93,"line":1325},[91,94734,94735],{"class":101},"array([[44, 47, 64, 67, 67,  9],\n",[91,94737,94738],{"class":93,"line":1339},[91,94739,94740],{"class":101},"       [83, 21, 36, 87, 70, 88],\n",[91,94742,94743],{"class":93,"line":1345},[91,94744,94745],{"class":101},"       [88, 12, 58, 65, 39, 87],\n",[91,94747,94748],{"class":93,"line":1436},[91,94749,94750],{"class":101},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[91,94752,94753],{"class":93,"line":1442},[91,94754,94009],{"class":101},[91,94756,94757,94760],{"class":93,"line":1454},[91,94758,94759],{"class":250},"np.sort(aa)",[91,94761,94762],{"class":308},"#每行进行了排序\n",[91,94764,94765],{"class":93,"line":1736},[91,94766,94009],{"class":101},[91,94768,94769],{"class":93,"line":1741},[91,94770,94771],{"class":101},"array([[ 9, 44, 47, 64, 67, 67],\n",[91,94773,94774],{"class":93,"line":1747},[91,94775,94776],{"class":101},"       [21, 36, 70, 83, 87, 88],\n",[91,94778,94779],{"class":93,"line":1752},[91,94780,94781],{"class":101},"       [12, 39, 58, 65, 87, 88],\n",[91,94783,94784],{"class":93,"line":1766},[91,94785,94786],{"class":101},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[91,94788,94789],{"class":93,"line":1771},[91,94790,94009],{"class":101},[91,94792,94793],{"class":93,"line":1777},[91,94794,94795],{"class":308},"#axis=0时\n",[91,94797,94798,94801,94803,94805,94807],{"class":93,"line":1798},[91,94799,94800],{"class":250},"np.sort(aa,",[91,94802,47595],{"class":5339},[91,94804,296],{"class":153},[91,94806,440],{"class":105},[91,94808,257],{"class":250},[91,94810,94811],{"class":93,"line":1803},[91,94812,94009],{"class":101},[91,94814,94815],{"class":93,"line":1817},[91,94816,94817],{"class":101},"array([[44, 12, 36, 37, 25,  9],\n",[91,94819,94820],{"class":93,"line":1822},[91,94821,94822],{"class":101},"       [46, 21, 58, 65, 39, 77],\n",[91,94824,94825],{"class":93,"line":1851},[91,94826,94827],{"class":101},"       [83, 47, 64, 67, 67, 87],\n",[91,94829,94830],{"class":93,"line":1856},[91,94831,94832],{"class":101},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[91,94834,94835],{"class":93,"line":1873},[91,94836,94009],{"class":101},[91,94838,94839],{"class":93,"line":1878},[91,94840,94841],{"class":308},"#axis=1时,为默认值\n",[91,94843,94844,94846,94848,94850,94852],{"class":93,"line":1883},[91,94845,94800],{"class":250},[91,94847,47595],{"class":5339},[91,94849,296],{"class":153},[91,94851,466],{"class":105},[91,94853,257],{"class":250},[91,94855,94856],{"class":93,"line":1888},[91,94857,94009],{"class":101},[91,94859,94860],{"class":93,"line":1902},[91,94861,94771],{"class":101},[91,94863,94864],{"class":93,"line":1907},[91,94865,94776],{"class":101},[91,94867,94868],{"class":93,"line":2700},[91,94869,94781],{"class":101},[91,94871,94872],{"class":93,"line":2714},[91,94873,94786],{"class":101},[91,94875,94876],{"class":93,"line":2722},[91,94877,94009],{"class":101},[91,94879,94880],{"class":93,"line":2727},[91,94881,94882],{"class":308},"#按最后一列排序\n",[91,94884,94885,94887,94889,94892,94894,94896],{"class":93,"line":2733},[91,94886,512],{"class":250},[91,94888,296],{"class":153},[91,94890,94891],{"class":250},"aa[:,",[91,94893,781],{"class":153},[91,94895,466],{"class":105},[91,94897,33327],{"class":250},[91,94899,94900],{"class":93,"line":2739},[91,94901,94902],{"class":308},"#获取最后一列排好序的索引\n",[91,94904,94905,94907,94909],{"class":93,"line":2744},[91,94906,74139],{"class":250},[91,94908,296],{"class":153},[91,94910,94911],{"class":250},"np.argsort(b)\n",[91,94913,94914],{"class":93,"line":8071},[91,94915,94916],{"class":250},"aa[index]\n",[91,94918,94919],{"class":93,"line":8095},[91,94920,94009],{"class":101},[91,94922,94923],{"class":93,"line":8100},[91,94924,94735],{"class":101},[91,94926,94927],{"class":93,"line":8106},[91,94928,94929],{"class":101},"       [46, 88, 81, 37, 25, 77],\n",[91,94931,94932],{"class":93,"line":8133},[91,94933,94745],{"class":101},[91,94935,94936],{"class":93,"line":8138},[91,94937,94938],{"class":101},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[91,94940,94941],{"class":93,"line":8144},[91,94942,94009],{"class":101},[168,94944,94945],{},"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":26,"searchDepth":38,"depth":38,"links":94947},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94594,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94954,"title":94955,"body":94956,"description":23500,"extension":173,"meta":94986,"navigation":175,"path":94987,"seo":94988,"stem":94989,"__hash__":94990},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94957,"toc":94984},[94958,94961,94964,94967,94970,94973,94976,94979],[10,94959,94955],{"id":94960},"_14广播机制",[21,94962,94963],{},"广播的规则：",[21,94965,94966],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[21,94968,94969],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[21,94971,94972],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[21,94974,94975],{},"3.如果没有维度形状为1，则会引发异常",[21,94977,94978],{},"也就是只有维度或者个数为1才可以进行广播操作",[21,94980,94981],{},[24,94982],{"alt":26,"src":94983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":26,"searchDepth":38,"depth":38,"links":94985},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94955,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94992,"title":94993,"body":94994,"description":23500,"extension":173,"meta":95092,"navigation":175,"path":95093,"seo":95094,"stem":95095,"__hash__":95096},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94995,"toc":95090},[94996,94999,95002,95087],[10,94997,94993],{"id":94998},"_15比较掩码",[21,95000,95001],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[82,95003,95005],{"className":30459,"code":95004,"language":30461,"meta":26,"style":26},"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",[88,95006,95007,95053,95064,95078,95082],{"__ignoreMap":26},[91,95008,95009,95011,95013,95016,95018,95020,95022,95024,95026,95028,95030,95032,95034,95036,95038,95040,95042,95044,95046,95048,95050],{"class":93,"line":94},[91,95010,487],{"class":250},[91,95012,296],{"class":153},[91,95014,95015],{"class":250},"np.array([[",[91,95017,466],{"class":105},[91,95019,627],{"class":250},[91,95021,327],{"class":105},[91,95023,627],{"class":250},[91,95025,321],{"class":105},[91,95027,48111],{"class":250},[91,95029,721],{"class":105},[91,95031,627],{"class":250},[91,95033,747],{"class":105},[91,95035,627],{"class":250},[91,95037,772],{"class":105},[91,95039,48111],{"class":250},[91,95041,974],{"class":105},[91,95043,627],{"class":250},[91,95045,999],{"class":105},[91,95047,627],{"class":250},[91,95049,1024],{"class":105},[91,95051,95052],{"class":250},"]])\n",[91,95054,95055,95057,95059,95061],{"class":93,"line":38},[91,95056,487],{"class":250},[91,95058,1159],{"class":153},[91,95060,949],{"class":105},[91,95062,95063],{"class":308},"#结果是一个由True,False组成的数组\n",[91,95065,95066,95069,95071,95073,95075],{"class":93,"line":1304},[91,95067,95068],{"class":250},"a[a",[91,95070,1159],{"class":153},[91,95072,949],{"class":105},[91,95074,1189],{"class":250},[91,95076,95077],{"class":308},"#小于20的元素会存到这个数组中\n",[91,95079,95080],{"class":93,"line":1319},[91,95081,93645],{"class":308},[91,95083,95084],{"class":93,"line":1325},[91,95085,95086],{"class":308},"#array([ 1,  2,  3, 11, 12, 13])\n",[168,95088,95089],{},"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":26,"searchDepth":38,"depth":38,"links":95091},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94993,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95098,"title":95099,"body":95100,"description":23500,"extension":173,"meta":95192,"navigation":175,"path":95193,"seo":95194,"stem":95195,"__hash__":95196},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95101,"toc":95190},[95102,95105,95108,95111,95114,95117,95182,95187],[10,95103,95099],{"id":95104},"_16魔法命令time",[21,95106,95107],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[21,95109,95110],{},"%:行模式",[21,95112,95113],{},"%%:单元格模式",[21,95115,95116],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[82,95118,95120],{"className":30459,"code":95119,"language":30461,"meta":26,"style":26},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[88,95121,95122,95127,95134,95139,95148,95161,95165,95173],{"__ignoreMap":26},[91,95123,95124],{"class":93,"line":94},[91,95125,95126],{"class":308},"#程序执行时间\n",[91,95128,95129,95131],{"class":93,"line":38},[91,95130,30473],{"class":153},[91,95132,95133],{"class":250}," time \n",[91,95135,95136],{"class":93,"line":1304},[91,95137,95138],{"class":308},"#获取时间\n",[91,95140,95141,95144,95146],{"class":93,"line":1319},[91,95142,95143],{"class":250},"start",[91,95145,296],{"class":153},[91,95147,32499],{"class":250},[91,95149,95150,95153,95156,95158],{"class":93,"line":1325},[91,95151,95152],{"class":250},"time.sleep(",[91,95154,95155],{"class":105},"0.4",[91,95157,678],{"class":250},[91,95159,95160],{"class":308},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[91,95162,95163],{"class":93,"line":1339},[91,95164,95138],{"class":308},[91,95166,95167,95169,95171],{"class":93,"line":1345},[91,95168,45882],{"class":250},[91,95170,296],{"class":153},[91,95172,32499],{"class":250},[91,95174,95175,95177,95179],{"class":93,"line":1436},[91,95176,45882],{"class":250},[91,95178,781],{"class":153},[91,95180,95181],{"class":250},"start\n",[21,95183,95184],{},[24,95185],{"alt":26,"src":95186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[168,95188,95189],{},"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":26,"searchDepth":38,"depth":38,"links":95191},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95099,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95198,"title":95199,"body":95200,"description":23500,"extension":173,"meta":95235,"navigation":175,"path":95236,"seo":95237,"stem":95238,"__hash__":95239},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95201,"toc":95233},[95202,95205,95208,95211,95214,95217,95220,95223,95228],[10,95203,95199],{"id":95204},"_17魔法命令timeit",[21,95206,95207],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[21,95209,95210],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[21,95212,95213],{},"单元格模式：",[21,95215,95216],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[21,95218,95219],{},"初始化语句执行次数由轮数来决定",[21,95221,95222],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[21,95224,95225],{},[24,95226],{"alt":26,"src":95227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[21,95229,95230],{},[24,95231],{"alt":26,"src":95232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":26,"searchDepth":38,"depth":38,"links":95234},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95199,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95241,"title":95242,"body":95243,"description":23500,"extension":173,"meta":95261,"navigation":175,"path":95262,"seo":95263,"stem":95264,"__hash__":95265},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95244,"toc":95259},[95245,95248,95251,95254],[10,95246,95242],{"id":95247},"_18魔法命令writefile和run",[21,95249,95250],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[21,95252,95253],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[21,95255,95256],{},[24,95257],{"alt":26,"src":95258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":26,"searchDepth":38,"depth":38,"links":95260},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95242,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95267,"title":95268,"body":95269,"description":23500,"extension":173,"meta":95322,"navigation":175,"path":95323,"seo":95324,"stem":95325,"__hash__":95326},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95270,"toc":95320},[95271,95274,95277,95279,95282,95285,95290,95293,95296,95299,95302,95305,95308,95311,95314,95317],[10,95272,95268],{"id":95273},"_19魔法命令memit",[21,95275,95276],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[21,95278,24722],{},[21,95280,95281],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[21,95283,95284],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[21,95286,95287],{},[24,95288],{"alt":26,"src":95289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[21,95291,95292],{},"补充：",[21,95294,95295],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[21,95297,95298],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[21,95300,95301],{},"解决方法：",[21,95303,95304],{},"1.cmd",[21,95306,95307],{},"2.依次输入以下代码：",[21,95309,95310],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[21,95312,95313],{},"pip install --upgrade ipython",[21,95315,95316],{},"#升级 memory_profiler 和 setuptools",[21,95318,95319],{},"pip install --upgrade memory_profiler setuptools",{"title":26,"searchDepth":38,"depth":38,"links":95321},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95268,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95328,"title":95329,"body":95330,"description":23500,"extension":173,"meta":96976,"navigation":175,"path":96977,"seo":96978,"stem":96979,"__hash__":96980},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95331,"toc":96946},[95332,95335,95339,95343,95404,95407,95412,95416,95421,95426,95431,95436,95439,95444,95448,95452,95485,95488,95491,95494,95546,95549,95585,95588,95630,95634,95655,95657,95694,95696,95701,95703,95708,95712,95715,95743,95747,95751,95804,95808,95900,95904,95908,95911,95916,95920,95945,95950,95954,95957,95960,95963,95966,95969,95972,95975,95987,95991,95995,95998,96030,96033,96056,96059,96085,96088,96114,96117,96151,96154,96216,96220,96223,96227,96230,96256,96259,96262,96267,96270,96339,96341,96346,96407,96410,96421,96427,96432,96436,96439,96452,96456,96471,96473,96496,96498,96524,96527,96530,96533,96581,96583,96588,96592,96596,96623,96627,96654,96657,96662,96667,96757,96761,96819,96824,96827,96830,96872,96876,96932,96937,96940,96943],[10,95333,95329],{"id":95334},"_2创建数组",[190,95336,95338],{"id":95337},"_21-array函数创建数组","2.1 array()函数创建数组",[217,95340,95342],{"id":95341},"_221-函数语句","2.2.1 函数语句",[82,95344,95346],{"className":30459,"code":95345,"language":30461,"meta":26,"style":26},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[88,95347,95348],{"__ignoreMap":26},[91,95349,95350,95353,95356,95358,95360,95362,95364,95366,95369,95371,95374,95376,95379,95381,95383,95385,95388,95390,95393,95395,95398,95400,95402],{"class":93,"line":94},[91,95351,95352],{"class":250},"numpy.array(",[91,95354,95355],{"class":105},"object",[91,95357,12558],{"class":250},[91,95359,93581],{"class":5339},[91,95361,13687],{"class":153},[91,95363,39014],{"class":105},[91,95365,12558],{"class":250},[91,95367,95368],{"class":5339},"copy",[91,95370,13687],{"class":153},[91,95372,95373],{"class":105}," True",[91,95375,12558],{"class":250},[91,95377,95378],{"class":5339},"order",[91,95380,13687],{"class":153},[91,95382,39014],{"class":105},[91,95384,12558],{"class":250},[91,95386,95387],{"class":5339},"subok",[91,95389,13687],{"class":153},[91,95391,95392],{"class":105}," False",[91,95394,12558],{"class":250},[91,95396,95397],{"class":5339},"ndmin",[91,95399,13687],{"class":153},[91,95401,4216],{"class":105},[91,95403,257],{"class":250},[21,95405,95406],{},"参数：",[21,95408,95409],{},[24,95410],{"alt":26,"src":95411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[217,95413,95415],{"id":95414},"_222-实例","2.2.2 实例",[21,95417,95418],{},[24,95419],{"alt":26,"src":95420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[21,95422,95423],{},[24,95424],{"alt":26,"src":95425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[21,95427,95428],{},[24,95429],{"alt":26,"src":95430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[21,95432,95433],{},[24,95434],{"alt":26,"src":95435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[21,95437,95438],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[21,95440,95441],{},[24,95442],{"alt":26,"src":95443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[190,95445,95447],{"id":95446},"_22-随机数创建数组","2.2 随机数创建数组",[217,95449,95451],{"id":95450},"_221-random语句","2.2.1 random语句",[82,95453,95455],{"className":30459,"code":95454,"language":30461,"meta":26,"style":26},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[88,95456,95457,95462,95467,95475,95480],{"__ignoreMap":26},[91,95458,95459],{"class":93,"line":94},[91,95460,95461],{"class":308},"#random.random()\n",[91,95463,95464],{"class":93,"line":38},[91,95465,95466],{"class":308},"#确定随机种子,就是每次运行结果是相同的\n",[91,95468,95469,95471,95473],{"class":93,"line":1304},[91,95470,94688],{"class":250},[91,95472,440],{"class":105},[91,95474,257],{"class":250},[91,95476,95477],{"class":93,"line":1319},[91,95478,95479],{"class":250},"np.random.random()\n",[91,95481,95482],{"class":93,"line":1325},[91,95483,95484],{"class":308},"#生成一个随机的数目\n",[21,95486,95487],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[21,95489,95490],{},"可以指定数组形状 size",[21,95492,95493],{},"①生成一维数组",[82,95495,95497],{"className":30459,"code":95496,"language":30461,"meta":26,"style":26},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[88,95498,95499,95504,95517,95522,95538],{"__ignoreMap":26},[91,95500,95501],{"class":93,"line":94},[91,95502,95503],{"class":308},"#random.random(size())\n",[91,95505,95506,95509,95511,95513,95515],{"class":93,"line":38},[91,95507,95508],{"class":250},"np.random.random(",[91,95510,31577],{"class":5339},[91,95512,296],{"class":153},[91,95514,568],{"class":105},[91,95516,257],{"class":250},[91,95518,95519],{"class":93,"line":1304},[91,95520,95521],{"class":308},"#生成一位的五个元素\n",[91,95523,95524,95526,95528,95530,95532,95534,95536],{"class":93,"line":1319},[91,95525,487],{"class":250},[91,95527,296],{"class":153},[91,95529,95508],{"class":250},[91,95531,31577],{"class":5339},[91,95533,296],{"class":153},[91,95535,542],{"class":105},[91,95537,257],{"class":250},[91,95539,95540,95543],{"class":93,"line":1325},[91,95541,95542],{"class":250},"a.shape ",[91,95544,95545],{"class":308},"#输出数组形状\n",[21,95547,95548],{},"②生成二维数组",[82,95550,95552],{"className":30459,"code":95551,"language":30461,"meta":26,"style":26},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[88,95553,95554,95558,95580],{"__ignoreMap":26},[91,95555,95556],{"class":93,"line":94},[91,95557,93382],{"class":308},[91,95559,95560,95562,95564,95566,95568,95570,95572,95574,95576,95578],{"class":93,"line":38},[91,95561,93387],{"class":250},[91,95563,296],{"class":153},[91,95565,95508],{"class":250},[91,95567,31577],{"class":5339},[91,95569,296],{"class":153},[91,95571,251],{"class":250},[91,95573,542],{"class":105},[91,95575,627],{"class":250},[91,95577,568],{"class":105},[91,95579,30578],{"class":250},[91,95581,95582],{"class":93,"line":1304},[91,95583,95584],{"class":308},"#生成四行五列的数组\n",[21,95586,95587],{},"③生成三维数组",[82,95589,95591],{"className":30459,"code":95590,"language":30461,"meta":26,"style":26},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[88,95592,95593,95598,95625],{"__ignoreMap":26},[91,95594,95595],{"class":93,"line":94},[91,95596,95597],{"class":308},"#三维数组\n",[91,95599,95600,95603,95605,95607,95609,95611,95613,95615,95617,95619,95621,95623],{"class":93,"line":38},[91,95601,95602],{"class":250},"aaa",[91,95604,296],{"class":153},[91,95606,95508],{"class":250},[91,95608,31577],{"class":5339},[91,95610,296],{"class":153},[91,95612,251],{"class":250},[91,95614,327],{"class":105},[91,95616,627],{"class":250},[91,95618,321],{"class":105},[91,95620,627],{"class":250},[91,95622,542],{"class":105},[91,95624,30578],{"class":250},[91,95626,95627],{"class":93,"line":1304},[91,95628,95629],{"class":250},"aaa.shape\n",[217,95631,95633],{"id":95632},"_222-randint语句","2.2.2 randint语句",[82,95635,95637],{"className":30459,"code":95636,"language":30461,"meta":26,"style":26},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[88,95638,95639,95644],{"__ignoreMap":26},[91,95640,95641],{"class":93,"line":94},[91,95642,95643],{"class":308},"#生成随机的整数 random.randint(low,high,size)\n",[91,95645,95646,95648,95650,95652],{"class":93,"line":38},[91,95647,93195],{"class":250},[91,95649,568],{"class":105},[91,95651,13837],{"class":250},[91,95653,95654],{"class":308},"#0~5中的随机一个数\n",[21,95656,95493],{},[82,95658,95660],{"className":30459,"code":95659,"language":30461,"meta":26,"style":26},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[88,95661,95662,95667,95689],{"__ignoreMap":26},[91,95663,95664],{"class":93,"line":94},[91,95665,95666],{"class":308},"#一维\n",[91,95668,95669,95671,95673,95675,95677,95679,95681,95683,95685,95687],{"class":93,"line":38},[91,95670,93195],{"class":250},[91,95672,466],{"class":105},[91,95674,627],{"class":250},[91,95676,721],{"class":105},[91,95678,627],{"class":250},[91,95680,31577],{"class":5339},[91,95682,296],{"class":153},[91,95684,251],{"class":250},[91,95686,695],{"class":105},[91,95688,30578],{"class":250},[91,95690,95691],{"class":93,"line":1304},[91,95692,95693],{"class":308},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[21,95695,95548],{},[21,95697,95698],{},[24,95699],{"alt":26,"src":95700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[21,95702,95587],{},[21,95704,95705],{},[24,95706],{"alt":26,"src":95707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[217,95709,95711],{"id":95710},"_222-rand语句","2.2.2 rand语句",[21,95713,95714],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[82,95716,95718],{"className":30459,"code":95717,"language":30461,"meta":26,"style":26},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[88,95719,95720,95733,95738],{"__ignoreMap":26},[91,95721,95722,95725,95727,95729,95731],{"class":93,"line":94},[91,95723,95724],{"class":250},"np.random.rand(",[91,95726,560],{"class":105},[91,95728,627],{"class":250},[91,95730,695],{"class":105},[91,95732,257],{"class":250},[91,95734,95735],{"class":93,"line":38},[91,95736,95737],{"class":308},"#第一个参数100：行数，表示有100个样本\n",[91,95739,95740],{"class":93,"line":1304},[91,95741,95742],{"class":308},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[190,95744,95746],{"id":95745},"_23-arange创建数组","2.3 arange()创建数组",[217,95748,95750],{"id":95749},"_231-函数语句","2.3.1 函数语句",[82,95752,95754],{"className":30459,"code":95753,"language":30461,"meta":26,"style":26},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[88,95755,95756,95770,95775,95780,95785,95790,95795,95800],{"__ignoreMap":26},[91,95757,95758,95761,95763,95765,95768],{"class":93,"line":94},[91,95759,95760],{"class":250},"numpy.arange([start,] stop[, step], ",[91,95762,93581],{"class":5339},[91,95764,296],{"class":153},[91,95766,95767],{"class":105},"None",[91,95769,257],{"class":250},[91,95771,95772],{"class":93,"line":38},[91,95773,95774],{"class":308},"#参数\n",[91,95776,95777],{"class":93,"line":1304},[91,95778,95779],{"class":101},"\"\"\"\n",[91,95781,95782],{"class":93,"line":1319},[91,95783,95784],{"class":101},"start:起始值，可选，默认从 0 开始。\n",[91,95786,95787],{"class":93,"line":1325},[91,95788,95789],{"class":101},"stop:结束值（不包含该值）。\n",[91,95791,95792],{"class":93,"line":1339},[91,95793,95794],{"class":101},"step:步长，可选，默认是 1。可以为浮点数。\n",[91,95796,95797],{"class":93,"line":1345},[91,95798,95799],{"class":101},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[91,95801,95802],{"class":93,"line":1436},[91,95803,95779],{"class":101},[217,95805,95807],{"id":95806},"_232-实例","2.3.2 实例",[82,95809,95811],{"className":30459,"code":95810,"language":30461,"meta":26,"style":26},"#创建一维数组\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",[88,95812,95813,95817,95841,95846,95851,95855,95878,95882,95886,95891,95896],{"__ignoreMap":26},[91,95814,95815],{"class":93,"line":94},[91,95816,93186],{"class":308},[91,95818,95819,95821,95823,95825,95827,95829,95831,95833,95835,95837,95839],{"class":93,"line":38},[91,95820,93083],{"class":250},[91,95822,466],{"class":105},[91,95824,627],{"class":250},[91,95826,974],{"class":105},[91,95828,627],{"class":250},[91,95830,466],{"class":105},[91,95832,627],{"class":250},[91,95834,93581],{"class":5339},[91,95836,296],{"class":153},[91,95838,254],{"class":105},[91,95840,257],{"class":250},[91,95842,95843],{"class":93,"line":1304},[91,95844,95845],{"class":308},"#输出结果：\n",[91,95847,95848],{"class":93,"line":1319},[91,95849,95850],{"class":308},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[91,95852,95853],{"class":93,"line":1325},[91,95854,94028],{"class":308},[91,95856,95857,95860,95862,95864,95866,95869,95871,95873,95875],{"class":93,"line":1339},[91,95858,95859],{"class":250},"np.array([np.arange(",[91,95861,466],{"class":105},[91,95863,627],{"class":250},[91,95865,542],{"class":105},[91,95867,95868],{"class":250},"),np.arange(",[91,95870,542],{"class":105},[91,95872,627],{"class":250},[91,95874,618],{"class":105},[91,95876,95877],{"class":250},")])\n",[91,95879,95880],{"class":93,"line":1345},[91,95881,93645],{"class":308},[91,95883,95884],{"class":93,"line":1436},[91,95885,95779],{"class":101},[91,95887,95888],{"class":93,"line":1442},[91,95889,95890],{"class":101},"array([[1, 2, 3],\n",[91,95892,95893],{"class":93,"line":1454},[91,95894,95895],{"class":101},"       [4, 5, 6]])\n",[91,95897,95898],{"class":93,"line":1736},[91,95899,95779],{"class":101},[190,95901,95903],{"id":95902},"_24-生态分布","2.4 生态分布",[217,95905,95907],{"id":95906},"_241-标准正态分布","2.4.1 标准正态分布",[21,95909,95910],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[21,95912,95913],{},[24,95914],{"alt":26,"src":95915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[217,95917,95919],{"id":95918},"_242-常规正态分布","2.4.2 常规正态分布",[82,95921,95923],{"className":30459,"code":95922,"language":30461,"meta":26,"style":26},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[88,95924,95925,95930,95935,95940],{"__ignoreMap":26},[91,95926,95927],{"class":93,"line":94},[91,95928,95929],{"class":250},"random.normal(loc,scale,size)也可以生成正态分布\n",[91,95931,95932],{"class":93,"line":38},[91,95933,95934],{"class":308},"#loc:期望\n",[91,95936,95937],{"class":93,"line":1304},[91,95938,95939],{"class":308},"#scale:方差\n",[91,95941,95942],{"class":93,"line":1319},[91,95943,95944],{"class":308},"#size:用于确定是几维的数列\n",[21,95946,95947],{},[24,95948],{"alt":26,"src":95949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[190,95951,95953],{"id":95952},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[21,95955,95956],{},"ndim:秩，维度个数",[21,95958,95959],{},"size:数组元素的个数",[21,95961,95962],{},"shape:数组的形状",[21,95964,95965],{},"dtype:数组元素的类型",[21,95967,95968],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[21,95970,95971],{},"他们都是属性，通过数组.属性的形式来确定",[21,95973,95974],{},"如果需要输出多个可以通过以下方式：",[82,95976,95978],{"className":30459,"code":95977,"language":30461,"meta":26,"style":26},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[88,95979,95980],{"__ignoreMap":26},[91,95981,95982,95984],{"class":93,"line":94},[91,95983,30496],{"class":105},[91,95985,95986],{"class":250},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[190,95988,95990],{"id":95989},"_26-其他方式创建数组","2.6 其他方式创建数组",[217,95992,95994],{"id":95993},"_261-zeros创建数组","2.6.1 zeros()创建数组",[21,95996,95997],{},"①创建一维数组",[82,95999,96001],{"className":30459,"code":96000,"language":30461,"meta":26,"style":26},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[88,96002,96003,96012,96016,96021,96026],{"__ignoreMap":26},[91,96004,96005,96008,96010],{"class":93,"line":94},[91,96006,96007],{"class":250},"np.zeros(",[91,96009,695],{"class":105},[91,96011,257],{"class":250},[91,96013,96014],{"class":93,"line":38},[91,96015,95779],{"class":101},[91,96017,96018],{"class":93,"line":1304},[91,96019,96020],{"class":101},"输出结果：\n",[91,96022,96023],{"class":93,"line":1319},[91,96024,96025],{"class":101},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[91,96027,96028],{"class":93,"line":1325},[91,96029,95779],{"class":101},[21,96031,96032],{},"上方代码等价于：",[82,96034,96036],{"className":30459,"code":96035,"language":30461,"meta":26,"style":26},"np.zeros(shape=(10))#创建10个元素的0数组\n",[88,96037,96038],{"__ignoreMap":26},[91,96039,96040,96042,96045,96047,96049,96051,96053],{"class":93,"line":94},[91,96041,96007],{"class":250},[91,96043,96044],{"class":5339},"shape",[91,96046,296],{"class":153},[91,96048,251],{"class":250},[91,96050,695],{"class":105},[91,96052,82852],{"class":250},[91,96054,96055],{"class":308},"#创建10个元素的0数组\n",[21,96057,96058],{},"也可以指定类型",[82,96060,96062],{"className":30459,"code":96061,"language":30461,"meta":26,"style":26},"#指定类型\nnp.zeros(5,dtype=int)\n",[88,96063,96064,96069],{"__ignoreMap":26},[91,96065,96066],{"class":93,"line":94},[91,96067,96068],{"class":308},"#指定类型\n",[91,96070,96071,96073,96075,96077,96079,96081,96083],{"class":93,"line":38},[91,96072,96007],{"class":250},[91,96074,568],{"class":105},[91,96076,627],{"class":250},[91,96078,93581],{"class":5339},[91,96080,296],{"class":153},[91,96082,254],{"class":105},[91,96084,257],{"class":250},[21,96086,96087],{},"②创建二维数组",[82,96089,96091],{"className":30459,"code":96090,"language":30461,"meta":26,"style":26},"np.zeros((3,4),dtype=int)\n",[88,96092,96093],{"__ignoreMap":26},[91,96094,96095,96098,96100,96102,96104,96106,96108,96110,96112],{"class":93,"line":94},[91,96096,96097],{"class":250},"np.zeros((",[91,96099,321],{"class":105},[91,96101,627],{"class":250},[91,96103,542],{"class":105},[91,96105,42337],{"class":250},[91,96107,93581],{"class":5339},[91,96109,296],{"class":153},[91,96111,254],{"class":105},[91,96113,257],{"class":250},[21,96115,96116],{},"③创建三维数组",[82,96118,96120],{"className":30459,"code":96119,"language":30461,"meta":26,"style":26},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[88,96121,96122,96127],{"__ignoreMap":26},[91,96123,96124],{"class":93,"line":94},[91,96125,96126],{"class":308},"#创建三维数组\n",[91,96128,96129,96131,96133,96135,96137,96139,96141,96143,96145,96147,96149],{"class":93,"line":38},[91,96130,96097],{"class":250},[91,96132,321],{"class":105},[91,96134,627],{"class":250},[91,96136,542],{"class":105},[91,96138,627],{"class":250},[91,96140,568],{"class":105},[91,96142,42337],{"class":250},[91,96144,93581],{"class":5339},[91,96146,296],{"class":153},[91,96148,254],{"class":105},[91,96150,257],{"class":250},[21,96152,96153],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[82,96155,96157],{"className":30459,"code":96156,"language":30461,"meta":26,"style":26},"#使用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",[88,96158,96159,96164,96179,96184,96189,96211],{"__ignoreMap":26},[91,96160,96161],{"class":93,"line":94},[91,96162,96163],{"class":308},"#使用zeros_like将创建的一维数组变成全0的数组\n",[91,96165,96166,96168,96170,96172,96174,96176],{"class":93,"line":38},[91,96167,487],{"class":250},[91,96169,296],{"class":153},[91,96171,93083],{"class":250},[91,96173,542],{"class":105},[91,96175,678],{"class":250},[91,96177,96178],{"class":308},"#这个得到的结果：一维数组0，1，2，3\n",[91,96180,96181],{"class":93,"line":1304},[91,96182,96183],{"class":250},"np.zeros_like(a)\n",[91,96185,96186],{"class":93,"line":1319},[91,96187,96188],{"class":308},"#使用zeros_like将创建的二维数组变成全0的数组\n",[91,96190,96191,96193,96195,96197,96199,96201,96203,96205,96207,96209],{"class":93,"line":1325},[91,96192,93387],{"class":250},[91,96194,296],{"class":153},[91,96196,95508],{"class":250},[91,96198,31577],{"class":5339},[91,96200,296],{"class":153},[91,96202,251],{"class":250},[91,96204,542],{"class":105},[91,96206,627],{"class":250},[91,96208,568],{"class":105},[91,96210,30578],{"class":250},[91,96212,96213],{"class":93,"line":1339},[91,96214,96215],{"class":250},"np.zeros_like(aa)\n",[217,96217,96219],{"id":96218},"_262-ones创建数组","2.6.2 ones()创建数组",[21,96221,96222],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[217,96224,96226],{"id":96225},"_263-empty创建数组","2.6.3 empty()创建数组",[21,96228,96229],{},"①empty()用法",[82,96231,96233],{"className":30459,"code":96232,"language":30461,"meta":26,"style":26},"numpy.empty(shape,dtype=float,order='c')\n",[88,96234,96235],{"__ignoreMap":26},[91,96236,96237,96240,96242,96244,96246,96248,96250,96252,96254],{"class":93,"line":94},[91,96238,96239],{"class":250},"numpy.empty(shape,",[91,96241,93581],{"class":5339},[91,96243,296],{"class":153},[91,96245,290],{"class":105},[91,96247,627],{"class":250},[91,96249,95378],{"class":5339},[91,96251,296],{"class":153},[91,96253,76109],{"class":101},[91,96255,257],{"class":250},[21,96257,96258],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[21,96260,96261],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[21,96263,96264],{},[24,96265],{"alt":26,"src":96266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[21,96268,96269],{},"②empty()用法",[82,96271,96273],{"className":30459,"code":96272,"language":30461,"meta":26,"style":26},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[88,96274,96275,96296,96308,96329,96334],{"__ignoreMap":26},[91,96276,96277,96279,96281,96284,96286,96288,96290,96292,96294],{"class":93,"line":94},[91,96278,1094],{"class":250},[91,96280,296],{"class":153},[91,96282,96283],{"class":250},"np.empty(",[91,96285,695],{"class":105},[91,96287,627],{"class":250},[91,96289,93581],{"class":5339},[91,96291,296],{"class":153},[91,96293,254],{"class":105},[91,96295,257],{"class":250},[91,96297,96298,96300,96302,96304,96306],{"class":93,"line":38},[91,96299,1069],{"class":250},[91,96301,296],{"class":153},[91,96303,93083],{"class":250},[91,96305,568],{"class":105},[91,96307,257],{"class":250},[91,96309,96310,96313,96315,96318,96320,96322,96325,96327],{"class":93,"line":1304},[91,96311,96312],{"class":250},"np.add(",[91,96314,327],{"class":105},[91,96316,96317],{"class":250},",x,",[91,96319,93135],{"class":5339},[91,96321,296],{"class":153},[91,96323,96324],{"class":250},"y[:",[91,96326,568],{"class":105},[91,96328,4780],{"class":250},[91,96330,96331],{"class":93,"line":1319},[91,96332,96333],{"class":308},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[91,96335,96336],{"class":93,"line":1325},[91,96337,96338],{"class":250},"y\n",[21,96340,11637],{},[21,96342,96343],{},[24,96344],{"alt":26,"src":96345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[82,96347,96349],{"className":30459,"code":96348,"language":30461,"meta":26,"style":26},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[88,96350,96351,96367,96387,96402],{"__ignoreMap":26},[91,96352,96353,96355,96357,96359,96361,96363,96365],{"class":93,"line":94},[91,96354,1069],{"class":250},[91,96356,296],{"class":153},[91,96358,93083],{"class":250},[91,96360,466],{"class":105},[91,96362,627],{"class":250},[91,96364,593],{"class":105},[91,96366,257],{"class":250},[91,96368,96369,96371,96373,96375,96377,96379,96381,96383,96385],{"class":93,"line":38},[91,96370,1094],{"class":250},[91,96372,296],{"class":153},[91,96374,96283],{"class":250},[91,96376,568],{"class":105},[91,96378,627],{"class":250},[91,96380,93581],{"class":5339},[91,96382,296],{"class":153},[91,96384,254],{"class":105},[91,96386,257],{"class":250},[91,96388,96389,96392,96394,96396,96398,96400],{"class":93,"line":1304},[91,96390,96391],{"class":250},"np.add(x,",[91,96393,327],{"class":105},[91,96395,627],{"class":250},[91,96397,93135],{"class":5339},[91,96399,296],{"class":153},[91,96401,93530],{"class":250},[91,96403,96404],{"class":93,"line":1319},[91,96405,96406],{"class":308},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[21,96408,96409],{},"③empty_like()",[21,96411,96412],{},[398,96413,96414,96415,96420],{},"创建一个",[398,96416,96417],{},[398,96418,96419],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[21,96422,96423,96426],{},[88,96424,96425],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[21,96428,96429],{},[24,96430],{"alt":26,"src":96431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[217,96433,96435],{"id":96434},"_264-用法","2.6.4 ？？用法",[21,96437,96438],{},"当想查看一个函数的参数时，可以通过？？来实现",[82,96440,96442],{"className":30459,"code":96441,"language":30461,"meta":26,"style":26},"np.full??\n",[88,96443,96444],{"__ignoreMap":26},[91,96445,96446,96449],{"class":93,"line":94},[91,96447,96448],{"class":250},"np.full",[91,96450,96451],{"class":77484},"??\n",[217,96453,96455],{"id":96454},"_265-full创建数组","2.6.5 full()创建数组",[82,96457,96459],{"className":30459,"code":96458,"language":30461,"meta":26,"style":26},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[88,96460,96461,96466],{"__ignoreMap":26},[91,96462,96463],{"class":93,"line":94},[91,96464,96465],{"class":250},"full(shape,fill_value)\n",[91,96467,96468],{"class":93,"line":38},[91,96469,96470],{"class":250},"创建全为某个指定值的数组\n",[21,96472,94611],{},[82,96474,96476],{"className":30459,"code":96475,"language":30461,"meta":26,"style":26},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[88,96477,96478,96483],{"__ignoreMap":26},[91,96479,96480],{"class":93,"line":94},[91,96481,96482],{"class":308},"#创建一个一维数组,以20进行填充\n",[91,96484,96485,96488,96490,96492,96494],{"class":93,"line":38},[91,96486,96487],{"class":250},"np.full(",[91,96489,695],{"class":105},[91,96491,627],{"class":250},[91,96493,949],{"class":105},[91,96495,257],{"class":250},[21,96497,93372],{},[82,96499,96501],{"className":30459,"code":96500,"language":30461,"meta":26,"style":26},"#创建二维数组\nnp.full((3,5),11)\n",[88,96502,96503,96507],{"__ignoreMap":26},[91,96504,96505],{"class":93,"line":94},[91,96506,94028],{"class":308},[91,96508,96509,96512,96514,96516,96518,96520,96522],{"class":93,"line":38},[91,96510,96511],{"class":250},"np.full((",[91,96513,321],{"class":105},[91,96515,627],{"class":250},[91,96517,568],{"class":105},[91,96519,42337],{"class":250},[91,96521,721],{"class":105},[91,96523,257],{"class":250},[21,96525,96526],{},"③full_like用法",[21,96528,96529],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[21,96531,96532],{},"这里是指定填充而已",[82,96534,96536],{"className":30459,"code":96535,"language":30461,"meta":26,"style":26},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[88,96537,96538,96543,96567,96572],{"__ignoreMap":26},[91,96539,96540],{"class":93,"line":94},[91,96541,96542],{"class":308},"#创建一个指定形状数组\n",[91,96544,96545,96547,96549,96551,96553,96555,96557,96559,96561,96563,96565],{"class":93,"line":38},[91,96546,487],{"class":250},[91,96548,296],{"class":153},[91,96550,93083],{"class":250},[91,96552,466],{"class":105},[91,96554,627],{"class":250},[91,96556,574],{"class":105},[91,96558,93088],{"class":250},[91,96560,542],{"class":105},[91,96562,627],{"class":250},[91,96564,669],{"class":105},[91,96566,257],{"class":250},[91,96568,96569],{"class":93,"line":1304},[91,96570,96571],{"class":308},"#进行指定填充\n",[91,96573,96574,96577,96579],{"class":93,"line":1319},[91,96575,96576],{"class":250},"np.full_like(a,",[91,96578,695],{"class":105},[91,96580,257],{"class":250},[21,96582,11637],{},[21,96584,96585],{},[24,96586],{"alt":26,"src":96587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[217,96589,96591],{"id":96590},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22121,96593,96595],{"id":96594},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[82,96597,96599],{"className":30459,"code":96598,"language":30461,"meta":26,"style":26},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[88,96600,96601,96618],{"__ignoreMap":26},[91,96602,96603,96606,96608,96610,96612,96614,96616],{"class":93,"line":94},[91,96604,96605],{"class":250},"np.eye(",[91,96607,542],{"class":105},[91,96609,627],{"class":250},[91,96611,93581],{"class":5339},[91,96613,296],{"class":153},[91,96615,254],{"class":105},[91,96617,257],{"class":250},[91,96619,96620],{"class":93,"line":38},[91,96621,96622],{"class":308},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22121,96624,96626],{"id":96625},"_2662-法2identity","2.6.6.2 法2：identity()",[82,96628,96630],{"className":30459,"code":96629,"language":30461,"meta":26,"style":26},"#identity()\nnp.identity(5,dtype=int)\n",[88,96631,96632,96637],{"__ignoreMap":26},[91,96633,96634],{"class":93,"line":94},[91,96635,96636],{"class":308},"#identity()\n",[91,96638,96639,96642,96644,96646,96648,96650,96652],{"class":93,"line":38},[91,96640,96641],{"class":250},"np.identity(",[91,96643,568],{"class":105},[91,96645,627],{"class":250},[91,96647,93581],{"class":5339},[91,96649,296],{"class":153},[91,96651,254],{"class":105},[91,96653,257],{"class":250},[21,96655,96656],{},"两个函数是有区别的",[21,96658,96659],{},[24,96660],{"alt":26,"src":96661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[21,96663,96664],{},[24,96665],{"alt":26,"src":96666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[82,96668,96670],{"className":30459,"code":96669,"language":30461,"meta":26,"style":26},"# 创建一个 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",[88,96671,96672,96677,96689,96694,96699,96704,96709,96713,96718,96738,96742,96747,96752],{"__ignoreMap":26},[91,96673,96674],{"class":93,"line":94},[91,96675,96676],{"class":308},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[91,96678,96679,96681,96683,96685,96687],{"class":93,"line":38},[91,96680,96605],{"class":250},[91,96682,321],{"class":105},[91,96684,12558],{"class":250},[91,96686,542],{"class":105},[91,96688,257],{"class":250},[91,96690,96691],{"class":93,"line":1304},[91,96692,96693],{"class":308},"# 输出:\n",[91,96695,96696],{"class":93,"line":1319},[91,96697,96698],{"class":308},"# [[1. 0. 0. 0.]\n",[91,96700,96701],{"class":93,"line":1325},[91,96702,96703],{"class":308},"#  [0. 1. 0. 0.]\n",[91,96705,96706],{"class":93,"line":1339},[91,96707,96708],{"class":308},"#  [0. 0. 1. 0.]]\n",[91,96710,96711],{"class":93,"line":1345},[91,96712,2523],{"emptyLinePlaceholder":175},[91,96714,96715],{"class":93,"line":1436},[91,96716,96717],{"class":308},"# 对角线向上偏移1\n",[91,96719,96720,96722,96724,96726,96728,96730,96732,96734,96736],{"class":93,"line":1442},[91,96721,96605],{"class":250},[91,96723,321],{"class":105},[91,96725,12558],{"class":250},[91,96727,542],{"class":105},[91,96729,12558],{"class":250},[91,96731,742],{"class":5339},[91,96733,296],{"class":153},[91,96735,466],{"class":105},[91,96737,257],{"class":250},[91,96739,96740],{"class":93,"line":1454},[91,96741,96693],{"class":308},[91,96743,96744],{"class":93,"line":1736},[91,96745,96746],{"class":308},"# [[0. 1. 0. 0.]\n",[91,96748,96749],{"class":93,"line":1741},[91,96750,96751],{"class":308},"#  [0. 0. 1. 0.]\n",[91,96753,96754],{"class":93,"line":1747},[91,96755,96756],{"class":308},"#  [0. 0. 0. 1.]]\n",[217,96758,96760],{"id":96759},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[82,96762,96764],{"className":30459,"code":96763,"language":30461,"meta":26,"style":26},"#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",[88,96765,96766,96771,96775,96780,96785,96790,96795,96800,96805,96810,96815],{"__ignoreMap":26},[91,96767,96768],{"class":93,"line":94},[91,96769,96770],{"class":308},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[91,96772,96773],{"class":93,"line":38},[91,96774,95779],{"class":101},[91,96776,96777],{"class":93,"line":1304},[91,96778,96779],{"class":101},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[91,96781,96782],{"class":93,"line":1319},[91,96783,96784],{"class":101},"参数介绍：\n",[91,96786,96787],{"class":93,"line":1325},[91,96788,96789],{"class":101},"start：序列的起始值\n",[91,96791,96792],{"class":93,"line":1339},[91,96793,96794],{"class":101},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[91,96796,96797],{"class":93,"line":1345},[91,96798,96799],{"class":101},"num：要生长的等步长的样本数量，默认为50\n",[91,96801,96802],{"class":93,"line":1436},[91,96803,96804],{"class":101},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[91,96806,96807],{"class":93,"line":1442},[91,96808,96809],{"class":101},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[91,96811,96812],{"class":93,"line":1454},[91,96813,96814],{"class":101},"dtype：ndarry的数据类型\n",[91,96816,96817],{"class":93,"line":1736},[91,96818,95779],{"class":101},[21,96820,96821],{},[24,96822],{"alt":26,"src":96823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[21,96825,96826],{},"这里num=是可以省略的",[21,96828,96829],{},"也就是下方两行代码结果是一模一样的",[82,96831,96833],{"className":30459,"code":96832,"language":30461,"meta":26,"style":26},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[88,96834,96835,96852],{"__ignoreMap":26},[91,96836,96837,96840,96842,96844,96846,96848,96850],{"class":93,"line":94},[91,96838,96839],{"class":250},"np.linspace(",[91,96841,466],{"class":105},[91,96843,627],{"class":250},[91,96845,568],{"class":105},[91,96847,627],{"class":250},[91,96849,568],{"class":105},[91,96851,257],{"class":250},[91,96853,96854,96856,96858,96860,96862,96864,96866,96868,96870],{"class":93,"line":38},[91,96855,96839],{"class":250},[91,96857,466],{"class":105},[91,96859,627],{"class":250},[91,96861,568],{"class":105},[91,96863,627],{"class":250},[91,96865,1789],{"class":5339},[91,96867,296],{"class":153},[91,96869,568],{"class":105},[91,96871,257],{"class":250},[217,96873,96875],{"id":96874},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[82,96877,96879],{"className":30459,"code":96878,"language":30461,"meta":26,"style":26},"#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",[88,96880,96881,96886,96890,96895,96900,96905,96910,96914,96919,96924,96928],{"__ignoreMap":26},[91,96882,96883],{"class":93,"line":94},[91,96884,96885],{"class":308},"#logspace函数用于创建一个等比数列，格式如下：\n",[91,96887,96888],{"class":93,"line":38},[91,96889,95779],{"class":101},[91,96891,96892],{"class":93,"line":1304},[91,96893,96894],{"class":101},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[91,96896,96897],{"class":93,"line":1319},[91,96898,96899],{"class":101},"参数为：\n",[91,96901,96902],{"class":93,"line":1325},[91,96903,96904],{"class":101},"start:序列的起始位置为：base**start\n",[91,96906,96907],{"class":93,"line":1339},[91,96908,96909],{"class":101},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[91,96911,96912],{"class":93,"line":1345},[91,96913,96799],{"class":101},[91,96915,96916],{"class":93,"line":1436},[91,96917,96918],{"class":101},"endpoint：是否包含 stop 这个值，默认是 True\n",[91,96920,96921],{"class":93,"line":1442},[91,96922,96923],{"class":101},"base：对数的底数，默认是 10（常见对数）\n",[91,96925,96926],{"class":93,"line":1454},[91,96927,96814],{"class":101},[91,96929,96930],{"class":93,"line":1736},[91,96931,95779],{"class":101},[21,96933,96934],{},[24,96935],{"alt":26,"src":96936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[21,96938,96939],{},"logspace()函数中的num参数也是可以不写num=的",[21,96941,96942],{},"endpoint是不可以省略的",[168,96944,96945],{},"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":26,"searchDepth":38,"depth":38,"links":96947},[96948,96952,96957,96961,96965,96966],{"id":95337,"depth":38,"text":95338,"children":96949},[96950,96951],{"id":95341,"depth":1304,"text":95342},{"id":95414,"depth":1304,"text":95415},{"id":95446,"depth":38,"text":95447,"children":96953},[96954,96955,96956],{"id":95450,"depth":1304,"text":95451},{"id":95632,"depth":1304,"text":95633},{"id":95710,"depth":1304,"text":95711},{"id":95745,"depth":38,"text":95746,"children":96958},[96959,96960],{"id":95749,"depth":1304,"text":95750},{"id":95806,"depth":1304,"text":95807},{"id":95902,"depth":38,"text":95903,"children":96962},[96963,96964],{"id":95906,"depth":1304,"text":95907},{"id":95918,"depth":1304,"text":95919},{"id":95952,"depth":38,"text":95953},{"id":95989,"depth":38,"text":95990,"children":96967},[96968,96969,96970,96971,96972,96973,96974,96975],{"id":95993,"depth":1304,"text":95994},{"id":96218,"depth":1304,"text":96219},{"id":96225,"depth":1304,"text":96226},{"id":96434,"depth":1304,"text":96435},{"id":96454,"depth":1304,"text":96455},{"id":96590,"depth":1304,"text":96591},{"id":96759,"depth":1304,"text":96760},{"id":96874,"depth":1304,"text":96875},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95329,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96982,"title":96983,"body":96984,"description":23500,"extension":173,"meta":97077,"navigation":175,"path":97078,"seo":97079,"stem":97080,"__hash__":97081},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96985,"toc":97075},[96986,96989,96992,96995,96998,97001,97004,97007,97010,97013,97016,97019,97021,97024,97027,97032,97035,97038,97072],[10,96987,96983],{"id":96988},"_20魔法命令mprun",[21,96990,96991],{},"逐行分析数据内存的使用情况",[21,96993,96994],{},"语法格式：",[21,96996,96997],{},"%mprun -f 模块名.函数名 模块名.函数名()",[21,96999,97000],{},"分析结果列如下：",[21,97002,97003],{},"Line行号",[21,97005,97006],{},"Mem usage内存使用大小",[21,97008,97009],{},"increment内存增量",[21,97011,97012],{},"Line content代码内容",[21,97014,97015],{},"补充说明：",[21,97017,97018],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[21,97020,95284],{},[21,97022,97023],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[21,97025,97026],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[21,97028,97029],{},[24,97030],{"alt":26,"src":97031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[21,97033,97034],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[21,97036,97037],{},"这时候需要重新加载模块",[82,97039,97041],{"className":30459,"code":97040,"language":30461,"meta":26,"style":26},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[88,97042,97043,97048,97055,97060],{"__ignoreMap":26},[91,97044,97045],{"class":93,"line":94},[91,97046,97047],{"class":308},"#重新加载模块\n",[91,97049,97050,97052],{"class":93,"line":38},[91,97051,30473],{"class":153},[91,97053,97054],{"class":250}," importlib\n",[91,97056,97057],{"class":93,"line":1304},[91,97058,97059],{"class":250},"importlib.reload(mprun_test)\n",[91,97061,97062,97064,97067,97069],{"class":93,"line":1319},[91,97063,577],{"class":153},[91,97065,97066],{"class":250},"mprun ",[91,97068,781],{"class":153},[91,97070,97071],{"class":250},"f mprun_test.fun_test mprun_test.fun_test()\n",[168,97073,97074],{},"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":26,"searchDepth":38,"depth":38,"links":97076},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96983,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97083,"title":97084,"body":97085,"description":23500,"extension":173,"meta":97102,"navigation":175,"path":97103,"seo":97104,"stem":97105,"__hash__":97106},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97086,"toc":97100},[97087,97090,97095],[10,97088,97084],{"id":97089},"_3一维数组的索引和切片",[21,97091,97092],{},[24,97093],{"alt":26,"src":97094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[21,97096,97097],{},[24,97098],{"alt":26,"src":97099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":26,"searchDepth":38,"depth":38,"links":97101},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97084,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97108,"title":97109,"body":97110,"description":23500,"extension":173,"meta":97593,"navigation":175,"path":97594,"seo":97595,"stem":97596,"__hash__":97597},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97111,"toc":97591},[97112,97115,97118,97123,97156,97159,97197,97200,97234,97237,97342,97345,97382,97385,97486,97489,97540,97543,97585,97588],[10,97113,97109],{"id":97114},"_4二维数组的索引与切片",[21,97116,97117],{},"①获取指定单个元素",[21,97119,97120],{},[24,97121],{"alt":26,"src":97122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[82,97124,97126],{"className":30459,"code":97125,"language":30461,"meta":26,"style":26},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[88,97127,97128,97133,97138,97143],{"__ignoreMap":26},[91,97129,97130],{"class":93,"line":94},[91,97131,97132],{"class":308},"#获取元素9\n",[91,97134,97135],{"class":93,"line":38},[91,97136,97137],{"class":308},"#先获取所在行，再获取所在列\n",[91,97139,97140],{"class":93,"line":1304},[91,97141,97142],{"class":308},"#数组[行索引号，列索引号]\n",[91,97144,97145,97148,97150,97152,97154],{"class":93,"line":1319},[91,97146,97147],{"class":250},"a[",[91,97149,466],{"class":105},[91,97151,627],{"class":250},[91,97153,327],{"class":105},[91,97155,33327],{"class":250},[21,97157,97158],{},"②获取整行元素",[82,97160,97162],{"className":30459,"code":97161,"language":30461,"meta":26,"style":26},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[88,97163,97164,97169,97174,97182,97187],{"__ignoreMap":26},[91,97165,97166],{"class":93,"line":94},[91,97167,97168],{"class":308},"#获取整行 数组[行索引号]\n",[91,97170,97171],{"class":93,"line":38},[91,97172,97173],{"class":308},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[91,97175,97176,97178,97180],{"class":93,"line":1304},[91,97177,97147],{"class":250},[91,97179,327],{"class":105},[91,97181,33327],{"class":250},[91,97183,97184],{"class":93,"line":1319},[91,97185,97186],{"class":308},"#也可以负索引获取一行\n",[91,97188,97189,97191,97193,97195],{"class":93,"line":1325},[91,97190,97147],{"class":250},[91,97192,781],{"class":153},[91,97194,466],{"class":105},[91,97196,33327],{"class":250},[21,97198,97199],{},"③获取整列元素",[82,97201,97203],{"className":30459,"code":97202,"language":30461,"meta":26,"style":26},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[88,97204,97205,97210,97219,97224],{"__ignoreMap":26},[91,97206,97207],{"class":93,"line":94},[91,97208,97209],{"class":308},"#获取整列 数组名[:,列索引]\n",[91,97211,97212,97215,97217],{"class":93,"line":38},[91,97213,97214],{"class":250},"a[:,",[91,97216,327],{"class":105},[91,97218,33327],{"class":250},[91,97220,97221],{"class":93,"line":1304},[91,97222,97223],{"class":308},"#也可以负索引获取一列\n",[91,97225,97226,97228,97230,97232],{"class":93,"line":1319},[91,97227,97214],{"class":250},[91,97229,781],{"class":153},[91,97231,466],{"class":105},[91,97233,33327],{"class":250},[21,97235,97236],{},"④部分行部分列的元素",[82,97238,97240],{"className":30459,"code":97239,"language":30461,"meta":26,"style":26},"#部分行部分列 数组名[行切片，列切片]\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",[88,97241,97242,97247,97257,97261,97265,97270,97275,97279,97291,97295,97299,97304,97309,97314,97319,97323,97328],{"__ignoreMap":26},[91,97243,97244],{"class":93,"line":94},[91,97245,97246],{"class":308},"#部分行部分列 数组名[行切片，列切片]\n",[91,97248,97249,97252,97254],{"class":93,"line":38},[91,97250,97251],{"class":250},"a[:",[91,97253,327],{"class":105},[91,97255,97256],{"class":250},",:]\n",[91,97258,97259],{"class":93,"line":1304},[91,97260,93645],{"class":308},[91,97262,97263],{"class":93,"line":1319},[91,97264,94009],{"class":101},[91,97266,97267],{"class":93,"line":1325},[91,97268,97269],{"class":101},"array([[ 1,  2,  3,  4,  5,  6],\n",[91,97271,97272],{"class":93,"line":1339},[91,97273,97274],{"class":101},"       [ 7,  8,  9, 10, 11, 12]])\n",[91,97276,97277],{"class":93,"line":1345},[91,97278,94009],{"class":101},[91,97280,97281,97283,97285,97287,97289],{"class":93,"line":1436},[91,97282,97214],{"class":250},[91,97284,466],{"class":105},[91,97286,1108],{"class":250},[91,97288,542],{"class":105},[91,97290,33327],{"class":250},[91,97292,97293],{"class":93,"line":1442},[91,97294,93645],{"class":308},[91,97296,97297],{"class":93,"line":1454},[91,97298,94009],{"class":101},[91,97300,97301],{"class":93,"line":1736},[91,97302,97303],{"class":101},"array([[ 2,  3,  4],\n",[91,97305,97306],{"class":93,"line":1741},[91,97307,97308],{"class":101},"       [ 8,  9, 10],\n",[91,97310,97311],{"class":93,"line":1747},[91,97312,97313],{"class":101},"       [14, 15, 16],\n",[91,97315,97316],{"class":93,"line":1752},[91,97317,97318],{"class":101},"       [20, 21, 22]])\n",[91,97320,97321],{"class":93,"line":1766},[91,97322,94009],{"class":101},[91,97324,97325],{"class":93,"line":1771},[91,97326,97327],{"class":308},"#对列行同时进行切片，使用了step参数\n",[91,97329,97330,97333,97335,97338,97340],{"class":93,"line":1777},[91,97331,97332],{"class":250},"a[::",[91,97334,327],{"class":105},[91,97336,97337],{"class":250},",::",[91,97339,327],{"class":105},[91,97341,33327],{"class":250},[21,97343,97344],{},"⑤同时获取两个元素",[82,97346,97348],{"className":30459,"code":97347,"language":30461,"meta":26,"style":26},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[88,97349,97350,97355,97360],{"__ignoreMap":26},[91,97351,97352],{"class":93,"line":94},[91,97353,97354],{"class":308},"#同时获取第三行第二列，第四行第一列\n",[91,97356,97357],{"class":93,"line":38},[91,97358,97359],{"class":308},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[91,97361,97362,97365,97367,97369,97371,97373,97375,97377,97379],{"class":93,"line":1304},[91,97363,97364],{"class":250},"a[(",[91,97366,327],{"class":105},[91,97368,627],{"class":250},[91,97370,321],{"class":105},[91,97372,42328],{"class":250},[91,97374,466],{"class":105},[91,97376,627],{"class":250},[91,97378,440],{"class":105},[91,97380,97381],{"class":250},")]\n",[21,97383,97384],{},"⑥切片，对行进行反向获取",[82,97386,97388],{"className":30459,"code":97387,"language":30461,"meta":26,"style":26},"#切片 对所有行进行反向获取\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",[88,97389,97390,97395,97405,97409,97413,97418,97423,97428,97433,97437,97442,97458,97462,97467,97472,97477,97482],{"__ignoreMap":26},[91,97391,97392],{"class":93,"line":94},[91,97393,97394],{"class":308},"#切片 对所有行进行反向获取\n",[91,97396,97397,97399,97401,97403],{"class":93,"line":38},[91,97398,97332],{"class":250},[91,97400,781],{"class":153},[91,97402,466],{"class":105},[91,97404,33327],{"class":250},[91,97406,97407],{"class":93,"line":1304},[91,97408,93645],{"class":308},[91,97410,97411],{"class":93,"line":1319},[91,97412,94009],{"class":101},[91,97414,97415],{"class":93,"line":1325},[91,97416,97417],{"class":101},"array([[19, 20, 21, 22, 23, 24],\n",[91,97419,97420],{"class":93,"line":1339},[91,97421,97422],{"class":101},"       [13, 14, 15, 16, 17, 18],\n",[91,97424,97425],{"class":93,"line":1345},[91,97426,97427],{"class":101},"       [ 7,  8,  9, 10, 11, 12],\n",[91,97429,97430],{"class":93,"line":1436},[91,97431,97432],{"class":101},"       [ 1,  2,  3,  4,  5,  6]])\n",[91,97434,97435],{"class":93,"line":1442},[91,97436,94009],{"class":101},[91,97438,97439],{"class":93,"line":1454},[91,97440,97441],{"class":308},"#对行列都进行反向切片获取\n",[91,97443,97444,97446,97448,97450,97452,97454,97456],{"class":93,"line":1736},[91,97445,97332],{"class":250},[91,97447,781],{"class":153},[91,97449,466],{"class":105},[91,97451,97337],{"class":250},[91,97453,781],{"class":153},[91,97455,466],{"class":105},[91,97457,33327],{"class":250},[91,97459,97460],{"class":93,"line":1741},[91,97461,94009],{"class":101},[91,97463,97464],{"class":93,"line":1747},[91,97465,97466],{"class":101},"array([[24, 23, 22, 21, 20, 19],\n",[91,97468,97469],{"class":93,"line":1752},[91,97470,97471],{"class":101},"       [18, 17, 16, 15, 14, 13],\n",[91,97473,97474],{"class":93,"line":1766},[91,97475,97476],{"class":101},"       [12, 11, 10,  9,  8,  7],\n",[91,97478,97479],{"class":93,"line":1771},[91,97480,97481],{"class":101},"       [ 6,  5,  4,  3,  2,  1]])\n",[91,97483,97484],{"class":93,"line":1777},[91,97485,94009],{"class":101},[21,97487,97488],{},"⑦修改元素",[82,97490,97492],{"className":30459,"code":97491,"language":30461,"meta":26,"style":26},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[88,97493,97494,97499,97517,97522],{"__ignoreMap":26},[91,97495,97496],{"class":93,"line":94},[91,97497,97498],{"class":308},"#获取前两行和前两列\n",[91,97500,97501,97504,97506,97508,97510,97513,97515],{"class":93,"line":38},[91,97502,97503],{"class":250},"sub_a",[91,97505,296],{"class":153},[91,97507,97251],{"class":250},[91,97509,327],{"class":105},[91,97511,97512],{"class":250},",:",[91,97514,327],{"class":105},[91,97516,33327],{"class":250},[91,97518,97519],{"class":93,"line":1304},[91,97520,97521],{"class":308},"#修改sub_a第一个元素的值\n",[91,97523,97524,97527,97529,97531,97533,97535,97537],{"class":93,"line":1319},[91,97525,97526],{"class":250},"sub_a[",[91,97528,440],{"class":105},[91,97530,627],{"class":250},[91,97532,440],{"class":105},[91,97534,1189],{"class":250},[91,97536,296],{"class":153},[91,97538,97539],{"class":105},"100\n",[21,97541,97542],{},"⑧数组复制copy()",[82,97544,97546],{"className":30459,"code":97545,"language":30461,"meta":26,"style":26},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[88,97547,97548,97553,97563,97568],{"__ignoreMap":26},[91,97549,97550],{"class":93,"line":94},[91,97551,97552],{"class":308},"#数组复制\n",[91,97554,97555,97558,97560],{"class":93,"line":38},[91,97556,97557],{"class":250},"copy_a",[91,97559,296],{"class":153},[91,97561,97562],{"class":250},"np.copy(sub_a)\n",[91,97564,97565],{"class":93,"line":1304},[91,97566,97567],{"class":308},"#修改copy_a后不影响原数组\n",[91,97569,97570,97573,97575,97577,97579,97581,97583],{"class":93,"line":1319},[91,97571,97572],{"class":250},"copy_a[",[91,97574,440],{"class":105},[91,97576,627],{"class":250},[91,97578,440],{"class":105},[91,97580,1189],{"class":250},[91,97582,296],{"class":153},[91,97584,97539],{"class":105},[21,97586,97587],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[168,97589,97590],{},"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":26,"searchDepth":38,"depth":38,"links":97592},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97109,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97599,"title":97600,"body":97601,"description":23500,"extension":173,"meta":98093,"navigation":175,"path":98094,"seo":98095,"stem":98096,"__hash__":98097},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97602,"toc":98085},[97603,97606,97610,97613,97616,97669,97672,97697,97700,97719,97739,97742,97758,97762,97808,97812,97854,97858,97861,97864,97867,97870,97873,97935,97995,97999,98002,98059,98063,98068,98077,98082],[10,97604,97600],{"id":97605},"_5改变数组的维度",[190,97607,97609],{"id":97608},"_51-使用reshape","5.1 使用reshape()",[21,97611,97612],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[21,97614,97615],{},"①一维数组转换为二维数组",[82,97617,97619],{"className":30459,"code":97618,"language":30461,"meta":26,"style":26},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[88,97620,97621,97637,97642,97647,97652],{"__ignoreMap":26},[91,97622,97623,97625,97627,97629,97631,97633,97635],{"class":93,"line":94},[91,97624,487],{"class":250},[91,97626,296],{"class":153},[91,97628,93083],{"class":250},[91,97630,466],{"class":105},[91,97632,627],{"class":250},[91,97634,772],{"class":105},[91,97636,257],{"class":250},[91,97638,97639],{"class":93,"line":38},[91,97640,97641],{"class":308},"#将一维数组进行转换\n",[91,97643,97644],{"class":93,"line":1304},[91,97645,97646],{"class":308},"#注意点：元素个数不可以变\n",[91,97648,97649],{"class":93,"line":1319},[91,97650,97651],{"class":308},"#转换维度要保持一致，不一致就异常！！！\n",[91,97653,97654,97656,97658,97661,97663,97665,97667],{"class":93,"line":1325},[91,97655,93387],{"class":250},[91,97657,296],{"class":153},[91,97659,97660],{"class":250},"a.reshape(",[91,97662,327],{"class":105},[91,97664,627],{"class":250},[91,97666,593],{"class":105},[91,97668,257],{"class":250},[21,97670,97671],{},"②一维数组转换为三维数组",[82,97673,97675],{"className":30459,"code":97674,"language":30461,"meta":26,"style":26},"aaa=a.reshape(2,3,2)\n",[88,97676,97677],{"__ignoreMap":26},[91,97678,97679,97681,97683,97685,97687,97689,97691,97693,97695],{"class":93,"line":94},[91,97680,95602],{"class":250},[91,97682,296],{"class":153},[91,97684,97660],{"class":250},[91,97686,327],{"class":105},[91,97688,627],{"class":250},[91,97690,321],{"class":105},[91,97692,627],{"class":250},[91,97694,327],{"class":105},[91,97696,257],{"class":250},[21,97698,97699],{},"③二维数组转化为一维数组",[82,97701,97703],{"className":30459,"code":97702,"language":30461,"meta":26,"style":26},"#知道元素个数：\naa.reshape(12)\n",[88,97704,97705,97710],{"__ignoreMap":26},[91,97706,97707],{"class":93,"line":94},[91,97708,97709],{"class":308},"#知道元素个数：\n",[91,97711,97712,97715,97717],{"class":93,"line":38},[91,97713,97714],{"class":250},"aa.reshape(",[91,97716,747],{"class":105},[91,97718,257],{"class":250},[82,97720,97722],{"className":30459,"code":97721,"language":30461,"meta":26,"style":26},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[88,97723,97724,97729],{"__ignoreMap":26},[91,97725,97726],{"class":93,"line":94},[91,97727,97728],{"class":308},"#不知道元素个数，参数传递-1\n",[91,97730,97731,97733,97735,97737],{"class":93,"line":38},[91,97732,97714],{"class":250},[91,97734,781],{"class":153},[91,97736,466],{"class":105},[91,97738,257],{"class":250},[21,97740,97741],{},"④三维数组转换为一维数组",[82,97743,97745],{"className":30459,"code":97744,"language":30461,"meta":26,"style":26},"aaa.reshape(-1)\n",[88,97746,97747],{"__ignoreMap":26},[91,97748,97749,97752,97754,97756],{"class":93,"line":94},[91,97750,97751],{"class":250},"aaa.reshape(",[91,97753,781],{"class":153},[91,97755,466],{"class":105},[91,97757,257],{"class":250},[190,97759,97761],{"id":97760},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[82,97763,97765],{"className":30459,"code":97764,"language":30461,"meta":26,"style":26},"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",[88,97766,97767,97794,97799,97803],{"__ignoreMap":26},[91,97768,97769,97771,97773,97775,97777,97779,97781,97783,97785,97787,97789,97791],{"class":93,"line":94},[91,97770,93387],{"class":250},[91,97772,296],{"class":153},[91,97774,93083],{"class":250},[91,97776,466],{"class":105},[91,97778,627],{"class":250},[91,97780,772],{"class":105},[91,97782,93088],{"class":250},[91,97784,327],{"class":105},[91,97786,627],{"class":250},[91,97788,593],{"class":105},[91,97790,678],{"class":250},[91,97792,97793],{"class":308},"#转换为2行6列的数组\n",[91,97795,97796],{"class":93,"line":38},[91,97797,97798],{"class":250},"aa.revel()\n",[91,97800,97801],{"class":93,"line":1304},[91,97802,93645],{"class":308},[91,97804,97805],{"class":93,"line":1319},[91,97806,97807],{"class":308},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[190,97809,97811],{"id":97810},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[82,97813,97815],{"className":30459,"code":97814,"language":30461,"meta":26,"style":26},"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",[88,97816,97817,97841,97846,97850],{"__ignoreMap":26},[91,97818,97819,97821,97823,97825,97827,97829,97831,97833,97835,97837,97839],{"class":93,"line":94},[91,97820,93387],{"class":250},[91,97822,296],{"class":153},[91,97824,93083],{"class":250},[91,97826,466],{"class":105},[91,97828,627],{"class":250},[91,97830,772],{"class":105},[91,97832,93088],{"class":250},[91,97834,327],{"class":105},[91,97836,627],{"class":250},[91,97838,593],{"class":105},[91,97840,257],{"class":250},[91,97842,97843],{"class":93,"line":38},[91,97844,97845],{"class":250},"aa.flatten()\n",[91,97847,97848],{"class":93,"line":1304},[91,97849,93645],{"class":308},[91,97851,97852],{"class":93,"line":1319},[91,97853,97807],{"class":308},[190,97855,97857],{"id":97856},"_54-使用resize","5.4 使用resize()",[21,97859,97860],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[21,97862,97863],{},"通过resize方法可以改变数组的维度",[21,97865,97866],{},"#resize修改数组维度",[21,97868,97869],{},"#以元组的形式指定形状",[21,97871,97872],{},"#改变的是原数组",[82,97874,97876],{"className":30459,"code":97875,"language":30461,"meta":26,"style":26},"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",[88,97877,97878,97894,97914,97927,97931],{"__ignoreMap":26},[91,97879,97880,97882,97884,97886,97888,97890,97892],{"class":93,"line":94},[91,97881,487],{"class":250},[91,97883,296],{"class":153},[91,97885,93083],{"class":250},[91,97887,466],{"class":105},[91,97889,627],{"class":250},[91,97891,772],{"class":105},[91,97893,257],{"class":250},[91,97895,97896,97899,97901,97903,97905,97907,97909,97911],{"class":93,"line":38},[91,97897,97898],{"class":250},"a.shape",[91,97900,296],{"class":153},[91,97902,251],{"class":250},[91,97904,327],{"class":105},[91,97906,627],{"class":250},[91,97908,593],{"class":105},[91,97910,678],{"class":250},[91,97912,97913],{"class":308},"#改变了原数组\n",[91,97915,97916,97918,97920,97923,97925],{"class":93,"line":1304},[91,97917,487],{"class":250},[91,97919,296],{"class":153},[91,97921,97922],{"class":250},"resize((",[91,97924,747],{"class":105},[91,97926,30578],{"class":250},[91,97928,97929],{"class":93,"line":1319},[91,97930,93645],{"class":308},[91,97932,97933],{"class":93,"line":1325},[91,97934,97807],{"class":308},[82,97936,97938],{"className":30459,"code":97937,"language":30461,"meta":26,"style":26},"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",[88,97939,97940,97953,97957,97961,97966,97971,97976,97981,97986,97991],{"__ignoreMap":26},[91,97941,97942,97945,97947,97949,97951],{"class":93,"line":94},[91,97943,97944],{"class":250},"a.resize((",[91,97946,593],{"class":105},[91,97948,627],{"class":250},[91,97950,327],{"class":105},[91,97952,30578],{"class":250},[91,97954,97955],{"class":93,"line":38},[91,97956,93645],{"class":308},[91,97958,97959],{"class":93,"line":1304},[91,97960,94009],{"class":101},[91,97962,97963],{"class":93,"line":1319},[91,97964,97965],{"class":101},"array([[ 1,  2],\n",[91,97967,97968],{"class":93,"line":1325},[91,97969,97970],{"class":101},"       [ 3,  4],\n",[91,97972,97973],{"class":93,"line":1339},[91,97974,97975],{"class":101},"       [ 5,  6],\n",[91,97977,97978],{"class":93,"line":1345},[91,97979,97980],{"class":101},"       [ 7,  8],\n",[91,97982,97983],{"class":93,"line":1436},[91,97984,97985],{"class":101},"       [ 9, 10],\n",[91,97987,97988],{"class":93,"line":1442},[91,97989,97990],{"class":101},"       [11, 12]])\n",[91,97992,97993],{"class":93,"line":1454},[91,97994,94009],{"class":101},[190,97996,97998],{"id":97997},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[21,98000,98001],{},"改变了原数组",[82,98003,98005],{"className":30459,"code":98004,"language":30461,"meta":26,"style":26},"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",[88,98006,98007,98023,98039,98043,98047,98051,98055],{"__ignoreMap":26},[91,98008,98009,98011,98013,98015,98017,98019,98021],{"class":93,"line":94},[91,98010,487],{"class":250},[91,98012,296],{"class":153},[91,98014,93083],{"class":250},[91,98016,466],{"class":105},[91,98018,627],{"class":250},[91,98020,772],{"class":105},[91,98022,257],{"class":250},[91,98024,98025,98027,98029,98031,98033,98035,98037],{"class":93,"line":38},[91,98026,97898],{"class":250},[91,98028,296],{"class":153},[91,98030,251],{"class":250},[91,98032,327],{"class":105},[91,98034,627],{"class":250},[91,98036,593],{"class":105},[91,98038,257],{"class":250},[91,98040,98041],{"class":93,"line":1304},[91,98042,93645],{"class":308},[91,98044,98045],{"class":93,"line":1319},[91,98046,94009],{"class":101},[91,98048,98049],{"class":93,"line":1325},[91,98050,97269],{"class":101},[91,98052,98053],{"class":93,"line":1339},[91,98054,97274],{"class":101},[91,98056,98057],{"class":93,"line":1345},[91,98058,94009],{"class":101},[190,98060,98062],{"id":98061},"_56-重要比较","5.6 重要比较：",[21,98064,98065],{},[24,98066],{"alt":26,"src":98067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[21,98069,98070,98071,98073,98074,98076],{},"口诀：NumPy 函数要么用 ",[88,98072,96044],{},"，要么用 ",[88,98075,31577],{},"，创建结构用 shape，造数据用 size",[21,98078,98079],{},[24,98080],{"alt":26,"src":98081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[168,98083,98084],{},"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":26,"searchDepth":38,"depth":38,"links":98086},[98087,98088,98089,98090,98091,98092],{"id":97608,"depth":38,"text":97609},{"id":97760,"depth":38,"text":97761},{"id":97810,"depth":38,"text":97811},{"id":97856,"depth":38,"text":97857},{"id":97997,"depth":38,"text":97998},{"id":98061,"depth":38,"text":98062},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97600,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98099,"title":98100,"body":98101,"description":23500,"extension":173,"meta":99173,"navigation":175,"path":99174,"seo":99175,"stem":99176,"__hash__":99177},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98102,"toc":99167},[98103,98106,98110,98113,98116,98119,98184,98187,98227,98230,98312,98315,98320,98342,98344,98349,98354,98357,98360,98515,98518,98720,98724,98727,98730,98798,98800,98805,98808,98811,98891,98895,98898,98900,98973,98975,98980,98982,99062,99066,99069,99072,99075,99078,99081,99084,99164],[10,98104,98100],{"id":98105},"_6数组的拼接",[190,98107,98109],{"id":98108},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[21,98111,98112],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[21,98114,98115],{},"函数内部传两个数列构成的数列或者元组",[21,98117,98118],{},"①一维数组的拼接",[82,98120,98122],{"className":30459,"code":98121,"language":30461,"meta":26,"style":26},"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",[88,98123,98124,98144,98164,98169,98174,98179],{"__ignoreMap":26},[91,98125,98126,98128,98130,98132,98134,98136,98138,98140,98142],{"class":93,"line":94},[91,98127,487],{"class":250},[91,98129,296],{"class":153},[91,98131,93105],{"class":250},[91,98133,466],{"class":105},[91,98135,627],{"class":250},[91,98137,327],{"class":105},[91,98139,627],{"class":250},[91,98141,321],{"class":105},[91,98143,4780],{"class":250},[91,98145,98146,98148,98150,98152,98154,98156,98158,98160,98162],{"class":93,"line":38},[91,98147,512],{"class":250},[91,98149,296],{"class":153},[91,98151,93105],{"class":250},[91,98153,542],{"class":105},[91,98155,627],{"class":250},[91,98157,568],{"class":105},[91,98159,627],{"class":250},[91,98161,593],{"class":105},[91,98163,4780],{"class":250},[91,98165,98166],{"class":93,"line":1304},[91,98167,98168],{"class":308},"#调用concatenate进行数组拼接\n",[91,98170,98171],{"class":93,"line":1319},[91,98172,98173],{"class":250},"np.concatenate((a,b))\n",[91,98175,98176],{"class":93,"line":1325},[91,98177,98178],{"class":308},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[91,98180,98181],{"class":93,"line":1339},[91,98182,98183],{"class":308},"#np.concatenate([a,b])\n",[21,98185,98186],{},"②一维多个数组拼接",[82,98188,98190],{"className":30459,"code":98189,"language":30461,"meta":26,"style":26},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[88,98191,98192,98197,98217,98222],{"__ignoreMap":26},[91,98193,98194],{"class":93,"line":94},[91,98195,98196],{"class":308},"#也可以多个数组进行拼接\n",[91,98198,98199,98201,98203,98205,98207,98209,98211,98213,98215],{"class":93,"line":38},[91,98200,537],{"class":250},[91,98202,296],{"class":153},[91,98204,93105],{"class":250},[91,98206,695],{"class":105},[91,98208,627],{"class":250},[91,98210,721],{"class":105},[91,98212,627],{"class":250},[91,98214,772],{"class":105},[91,98216,4780],{"class":250},[91,98218,98219],{"class":93,"line":1304},[91,98220,98221],{"class":250},"c\n",[91,98223,98224],{"class":93,"line":1319},[91,98225,98226],{"class":250},"np.concatenate((a,b,c))\n",[21,98228,98229],{},"③二维数组拼接",[82,98231,98233],{"className":30459,"code":98232,"language":30461,"meta":26,"style":26},"#二维数组使用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",[88,98234,98235,98240,98264,98289,98294,98299],{"__ignoreMap":26},[91,98236,98237],{"class":93,"line":94},[91,98238,98239],{"class":308},"#二维数组使用concatenate进行拼接\n",[91,98241,98242,98244,98246,98248,98250,98252,98254,98256,98258,98260,98262],{"class":93,"line":38},[91,98243,93387],{"class":250},[91,98245,296],{"class":153},[91,98247,93083],{"class":250},[91,98249,466],{"class":105},[91,98251,627],{"class":250},[91,98253,772],{"class":105},[91,98255,93088],{"class":250},[91,98257,321],{"class":105},[91,98259,627],{"class":250},[91,98261,542],{"class":105},[91,98263,257],{"class":250},[91,98265,98266,98269,98271,98273,98275,98277,98279,98281,98283,98285,98287],{"class":93,"line":1304},[91,98267,98268],{"class":250},"bb",[91,98270,296],{"class":153},[91,98272,93083],{"class":250},[91,98274,586],{"class":105},[91,98276,627],{"class":250},[91,98278,891],{"class":105},[91,98280,93088],{"class":250},[91,98282,321],{"class":105},[91,98284,627],{"class":250},[91,98286,542],{"class":105},[91,98288,257],{"class":250},[91,98290,98291],{"class":93,"line":1319},[91,98292,98293],{"class":308},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[91,98295,98296],{"class":93,"line":1325},[91,98297,98298],{"class":308},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[91,98300,98301,98304,98306,98308,98310],{"class":93,"line":1339},[91,98302,98303],{"class":250},"np.concatenate((aa,bb),",[91,98305,47595],{"class":5339},[91,98307,296],{"class":153},[91,98309,440],{"class":105},[91,98311,257],{"class":250},[21,98313,98314],{},"结果：",[21,98316,98317],{},[24,98318],{"alt":26,"src":98319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[82,98321,98323],{"className":30459,"code":98322,"language":30461,"meta":26,"style":26},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[88,98324,98325,98330],{"__ignoreMap":26},[91,98326,98327],{"class":93,"line":94},[91,98328,98329],{"class":308},"#指定axis为1进行拼接\n",[91,98331,98332,98334,98336,98338,98340],{"class":93,"line":38},[91,98333,98303],{"class":250},[91,98335,47595],{"class":5339},[91,98337,296],{"class":153},[91,98339,466],{"class":105},[91,98341,257],{"class":250},[21,98343,98314],{},[21,98345,98346],{},[24,98347],{"alt":26,"src":98348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[21,98350,98351],{},[398,98352,98353],{},"二维数组总结：0竖着方向，1横着方向",[21,98355,98356],{},"④三维数组拼接",[21,98358,98359],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[82,98361,98363],{"className":30459,"code":98362,"language":30461,"meta":26,"style":26},"#两个三行六列\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",[88,98364,98365,98370,98398,98428,98433,98450,98455,98460,98465,98482,98487,98492,98497,98510],{"__ignoreMap":26},[91,98366,98367],{"class":93,"line":94},[91,98368,98369],{"class":308},"#两个三行六列\n",[91,98371,98372,98374,98376,98378,98380,98382,98384,98386,98388,98390,98392,98394,98396],{"class":93,"line":38},[91,98373,95602],{"class":250},[91,98375,296],{"class":153},[91,98377,93083],{"class":250},[91,98379,466],{"class":105},[91,98381,627],{"class":250},[91,98383,574],{"class":105},[91,98385,93088],{"class":250},[91,98387,327],{"class":105},[91,98389,627],{"class":250},[91,98391,321],{"class":105},[91,98393,627],{"class":250},[91,98395,593],{"class":105},[91,98397,257],{"class":250},[91,98399,98400,98403,98405,98407,98409,98411,98414,98416,98418,98420,98422,98424,98426],{"class":93,"line":1304},[91,98401,98402],{"class":250},"bbb",[91,98404,296],{"class":153},[91,98406,93083],{"class":250},[91,98408,586],{"class":105},[91,98410,627],{"class":250},[91,98412,98413],{"class":105},"137",[91,98415,93088],{"class":250},[91,98417,327],{"class":105},[91,98419,627],{"class":250},[91,98421,321],{"class":105},[91,98423,627],{"class":250},[91,98425,593],{"class":105},[91,98427,257],{"class":250},[91,98429,98430],{"class":93,"line":1319},[91,98431,98432],{"class":308},"#axis=0\n",[91,98434,98435,98437,98439,98442,98444,98446,98448],{"class":93,"line":1325},[91,98436,944],{"class":250},[91,98438,296],{"class":153},[91,98440,98441],{"class":250},"np.concatenate((aaa,bbb),",[91,98443,47595],{"class":5339},[91,98445,296],{"class":153},[91,98447,440],{"class":105},[91,98449,257],{"class":250},[91,98451,98452],{"class":93,"line":1339},[91,98453,98454],{"class":250},"s.shape\n",[91,98456,98457],{"class":93,"line":1345},[91,98458,98459],{"class":308},"#输出：(4,3,6)\n",[91,98461,98462],{"class":93,"line":1436},[91,98463,98464],{"class":308},"#axis=1\n",[91,98466,98467,98470,98472,98474,98476,98478,98480],{"class":93,"line":1442},[91,98468,98469],{"class":250},"ss",[91,98471,296],{"class":153},[91,98473,98441],{"class":250},[91,98475,47595],{"class":5339},[91,98477,296],{"class":153},[91,98479,466],{"class":105},[91,98481,257],{"class":250},[91,98483,98484],{"class":93,"line":1454},[91,98485,98486],{"class":250},"ss.shape\n",[91,98488,98489],{"class":93,"line":1736},[91,98490,98491],{"class":308},"#输出：(2,6,6)\n",[91,98493,98494],{"class":93,"line":1741},[91,98495,98496],{"class":308},"#axis=2\n",[91,98498,98499,98501,98503,98505,98507],{"class":93,"line":1747},[91,98500,98441],{"class":250},[91,98502,47595],{"class":5339},[91,98504,296],{"class":153},[91,98506,327],{"class":105},[91,98508,98509],{"class":250},").shape\n",[91,98511,98512],{"class":93,"line":1752},[91,98513,98514],{"class":308},"#输出：（2，3，12）\n",[21,98516,98517],{},"⑤四维数组拼接",[82,98519,98521],{"className":30459,"code":98520,"language":30461,"meta":26,"style":26},"#两个三行六列\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",[88,98522,98523,98527,98555,98583,98608,98634,98638,98651,98656,98660,98672,98677,98681,98693,98698,98703,98715],{"__ignoreMap":26},[91,98524,98525],{"class":93,"line":94},[91,98526,98369],{"class":308},[91,98528,98529,98531,98533,98535,98537,98539,98541,98543,98545,98547,98549,98551,98553],{"class":93,"line":38},[91,98530,95602],{"class":250},[91,98532,296],{"class":153},[91,98534,93083],{"class":250},[91,98536,466],{"class":105},[91,98538,627],{"class":250},[91,98540,574],{"class":105},[91,98542,93088],{"class":250},[91,98544,327],{"class":105},[91,98546,627],{"class":250},[91,98548,321],{"class":105},[91,98550,627],{"class":250},[91,98552,593],{"class":105},[91,98554,257],{"class":250},[91,98556,98557,98559,98561,98563,98565,98567,98569,98571,98573,98575,98577,98579,98581],{"class":93,"line":1304},[91,98558,98402],{"class":250},[91,98560,296],{"class":153},[91,98562,93083],{"class":250},[91,98564,586],{"class":105},[91,98566,627],{"class":250},[91,98568,98413],{"class":105},[91,98570,93088],{"class":250},[91,98572,327],{"class":105},[91,98574,627],{"class":250},[91,98576,321],{"class":105},[91,98578,627],{"class":250},[91,98580,593],{"class":105},[91,98582,257],{"class":250},[91,98584,98585,98588,98590,98592,98594,98596,98598,98600,98602,98604,98606],{"class":93,"line":1319},[91,98586,98587],{"class":250},"aaaa",[91,98589,296],{"class":153},[91,98591,97751],{"class":250},[91,98593,327],{"class":105},[91,98595,627],{"class":250},[91,98597,321],{"class":105},[91,98599,627],{"class":250},[91,98601,321],{"class":105},[91,98603,627],{"class":250},[91,98605,327],{"class":105},[91,98607,257],{"class":250},[91,98609,98610,98613,98615,98618,98620,98622,98624,98626,98628,98630,98632],{"class":93,"line":1325},[91,98611,98612],{"class":250},"bbbb",[91,98614,296],{"class":153},[91,98616,98617],{"class":250},"bbb.reshape(",[91,98619,327],{"class":105},[91,98621,627],{"class":250},[91,98623,321],{"class":105},[91,98625,627],{"class":250},[91,98627,321],{"class":105},[91,98629,627],{"class":250},[91,98631,327],{"class":105},[91,98633,257],{"class":250},[91,98635,98636],{"class":93,"line":1339},[91,98637,98432],{"class":308},[91,98639,98640,98643,98645,98647,98649],{"class":93,"line":1345},[91,98641,98642],{"class":250},"np.concatenate((aaaa,bbbb),",[91,98644,47595],{"class":5339},[91,98646,296],{"class":153},[91,98648,440],{"class":105},[91,98650,98509],{"class":250},[91,98652,98653],{"class":93,"line":1436},[91,98654,98655],{"class":308},"#结果：（4，3，3，2）\n",[91,98657,98658],{"class":93,"line":1442},[91,98659,98464],{"class":308},[91,98661,98662,98664,98666,98668,98670],{"class":93,"line":1454},[91,98663,98642],{"class":250},[91,98665,47595],{"class":5339},[91,98667,296],{"class":153},[91,98669,466],{"class":105},[91,98671,98509],{"class":250},[91,98673,98674],{"class":93,"line":1736},[91,98675,98676],{"class":308},"#结果：（2，6，3，2）\n",[91,98678,98679],{"class":93,"line":1741},[91,98680,98496],{"class":308},[91,98682,98683,98685,98687,98689,98691],{"class":93,"line":1747},[91,98684,98642],{"class":250},[91,98686,47595],{"class":5339},[91,98688,296],{"class":153},[91,98690,327],{"class":105},[91,98692,98509],{"class":250},[91,98694,98695],{"class":93,"line":1752},[91,98696,98697],{"class":308},"#结果：（2，3，6，2）\n",[91,98699,98700],{"class":93,"line":1766},[91,98701,98702],{"class":308},"#axis=3\n",[91,98704,98705,98707,98709,98711,98713],{"class":93,"line":1771},[91,98706,98642],{"class":250},[91,98708,47595],{"class":5339},[91,98710,296],{"class":153},[91,98712,321],{"class":105},[91,98714,98509],{"class":250},[91,98716,98717],{"class":93,"line":1777},[91,98718,98719],{"class":308},"#结果：（2，3，3，4）\n",[190,98721,98723],{"id":98722},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[21,98725,98726],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[21,98728,98729],{},"①二维数组",[82,98731,98733],{"className":30459,"code":98732,"language":30461,"meta":26,"style":26},"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",[88,98734,98735,98759,98783,98788,98793],{"__ignoreMap":26},[91,98736,98737,98739,98741,98743,98745,98747,98749,98751,98753,98755,98757],{"class":93,"line":94},[91,98738,93387],{"class":250},[91,98740,296],{"class":153},[91,98742,93083],{"class":250},[91,98744,466],{"class":105},[91,98746,627],{"class":250},[91,98748,772],{"class":105},[91,98750,93088],{"class":250},[91,98752,321],{"class":105},[91,98754,627],{"class":250},[91,98756,542],{"class":105},[91,98758,257],{"class":250},[91,98760,98761,98763,98765,98767,98769,98771,98773,98775,98777,98779,98781],{"class":93,"line":38},[91,98762,98268],{"class":250},[91,98764,296],{"class":153},[91,98766,93083],{"class":250},[91,98768,586],{"class":105},[91,98770,627],{"class":250},[91,98772,891],{"class":105},[91,98774,93088],{"class":250},[91,98776,321],{"class":105},[91,98778,627],{"class":250},[91,98780,542],{"class":105},[91,98782,257],{"class":250},[91,98784,98785],{"class":93,"line":1304},[91,98786,98787],{"class":250},"np.hstack((aa,bb))\n",[91,98789,98790],{"class":93,"line":1319},[91,98791,98792],{"class":308},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[91,98794,98795],{"class":93,"line":1325},[91,98796,98797],{"class":308},"#np.hstack([aa,bb])\n",[21,98799,98314],{},[21,98801,98802],{},[24,98803],{"alt":26,"src":98804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[21,98806,98807],{},"等效于concatenate()函数中axis=1时的情况",[21,98809,98810],{},"②三维数组",[82,98812,98814],{"className":30459,"code":98813,"language":30461,"meta":26,"style":26},"#两个三行六列\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",[88,98815,98816,98820,98848,98876,98881,98886],{"__ignoreMap":26},[91,98817,98818],{"class":93,"line":94},[91,98819,98369],{"class":308},[91,98821,98822,98824,98826,98828,98830,98832,98834,98836,98838,98840,98842,98844,98846],{"class":93,"line":38},[91,98823,95602],{"class":250},[91,98825,296],{"class":153},[91,98827,93083],{"class":250},[91,98829,466],{"class":105},[91,98831,627],{"class":250},[91,98833,574],{"class":105},[91,98835,93088],{"class":250},[91,98837,327],{"class":105},[91,98839,627],{"class":250},[91,98841,321],{"class":105},[91,98843,627],{"class":250},[91,98845,593],{"class":105},[91,98847,257],{"class":250},[91,98849,98850,98852,98854,98856,98858,98860,98862,98864,98866,98868,98870,98872,98874],{"class":93,"line":1304},[91,98851,98402],{"class":250},[91,98853,296],{"class":153},[91,98855,93083],{"class":250},[91,98857,586],{"class":105},[91,98859,627],{"class":250},[91,98861,98413],{"class":105},[91,98863,93088],{"class":250},[91,98865,327],{"class":105},[91,98867,627],{"class":250},[91,98869,321],{"class":105},[91,98871,627],{"class":250},[91,98873,593],{"class":105},[91,98875,257],{"class":250},[91,98877,98878],{"class":93,"line":1319},[91,98879,98880],{"class":308},"#使用hstack\n",[91,98882,98883],{"class":93,"line":1325},[91,98884,98885],{"class":250},"np.hstack((aaa,bbb)).shape\n",[91,98887,98888],{"class":93,"line":1339},[91,98889,98890],{"class":308},"#输出：（2，6，6）\n",[190,98892,98894],{"id":98893},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[21,98896,98897],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[21,98899,98729],{},[82,98901,98903],{"className":30459,"code":98902,"language":30461,"meta":26,"style":26},"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",[88,98904,98905,98929,98953,98958,98963,98968],{"__ignoreMap":26},[91,98906,98907,98909,98911,98913,98915,98917,98919,98921,98923,98925,98927],{"class":93,"line":94},[91,98908,93387],{"class":250},[91,98910,296],{"class":153},[91,98912,93083],{"class":250},[91,98914,466],{"class":105},[91,98916,627],{"class":250},[91,98918,772],{"class":105},[91,98920,93088],{"class":250},[91,98922,321],{"class":105},[91,98924,627],{"class":250},[91,98926,542],{"class":105},[91,98928,257],{"class":250},[91,98930,98931,98933,98935,98937,98939,98941,98943,98945,98947,98949,98951],{"class":93,"line":38},[91,98932,98268],{"class":250},[91,98934,296],{"class":153},[91,98936,93083],{"class":250},[91,98938,586],{"class":105},[91,98940,627],{"class":250},[91,98942,891],{"class":105},[91,98944,93088],{"class":250},[91,98946,321],{"class":105},[91,98948,627],{"class":250},[91,98950,542],{"class":105},[91,98952,257],{"class":250},[91,98954,98955],{"class":93,"line":1304},[91,98956,98957],{"class":308},"#vstack 垂直方向进行堆叠\n",[91,98959,98960],{"class":93,"line":1319},[91,98961,98962],{"class":250},"np.vstack((aa,bb))\n",[91,98964,98965],{"class":93,"line":1325},[91,98966,98967],{"class":308},"#与hstack传的参数类似，等价于：\n",[91,98969,98970],{"class":93,"line":1339},[91,98971,98972],{"class":250},"np.vstack([aa,bb])\n",[21,98974,98314],{},[21,98976,98977],{},[24,98978],{"alt":26,"src":98979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[21,98981,98810],{},[82,98983,98985],{"className":30459,"code":98984,"language":30461,"meta":26,"style":26},"#两个三行六列\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",[88,98986,98987,98991,99019,99047,99052,99057],{"__ignoreMap":26},[91,98988,98989],{"class":93,"line":94},[91,98990,98369],{"class":308},[91,98992,98993,98995,98997,98999,99001,99003,99005,99007,99009,99011,99013,99015,99017],{"class":93,"line":38},[91,98994,95602],{"class":250},[91,98996,296],{"class":153},[91,98998,93083],{"class":250},[91,99000,466],{"class":105},[91,99002,627],{"class":250},[91,99004,574],{"class":105},[91,99006,93088],{"class":250},[91,99008,327],{"class":105},[91,99010,627],{"class":250},[91,99012,321],{"class":105},[91,99014,627],{"class":250},[91,99016,593],{"class":105},[91,99018,257],{"class":250},[91,99020,99021,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045],{"class":93,"line":1304},[91,99022,98402],{"class":250},[91,99024,296],{"class":153},[91,99026,93083],{"class":250},[91,99028,586],{"class":105},[91,99030,627],{"class":250},[91,99032,98413],{"class":105},[91,99034,93088],{"class":250},[91,99036,327],{"class":105},[91,99038,627],{"class":250},[91,99040,321],{"class":105},[91,99042,627],{"class":250},[91,99044,593],{"class":105},[91,99046,257],{"class":250},[91,99048,99049],{"class":93,"line":1319},[91,99050,99051],{"class":308},"#使用vstack\n",[91,99053,99054],{"class":93,"line":1325},[91,99055,99056],{"class":250},"np.vstack((aaa,bbb)).shape\n",[91,99058,99059],{"class":93,"line":1339},[91,99060,99061],{"class":308},"#输出：（4，3，6）\n",[190,99063,99065],{"id":99064},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[21,99067,99068],{},"该方法是三维数组特有的方法",[21,99070,99071],{},"也就是说",[21,99073,99074],{},"一维数组拼接方法用：concatenate()",[21,99076,99077],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[21,99079,99080],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[21,99082,99083],{},"四维数组及多维数组只能用concatenate进行拼接",[82,99085,99087],{"className":30459,"code":99086,"language":30461,"meta":26,"style":26},"#两个三行六列\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",[88,99088,99089,99093,99121,99149,99154,99159],{"__ignoreMap":26},[91,99090,99091],{"class":93,"line":94},[91,99092,98369],{"class":308},[91,99094,99095,99097,99099,99101,99103,99105,99107,99109,99111,99113,99115,99117,99119],{"class":93,"line":38},[91,99096,95602],{"class":250},[91,99098,296],{"class":153},[91,99100,93083],{"class":250},[91,99102,466],{"class":105},[91,99104,627],{"class":250},[91,99106,574],{"class":105},[91,99108,93088],{"class":250},[91,99110,327],{"class":105},[91,99112,627],{"class":250},[91,99114,321],{"class":105},[91,99116,627],{"class":250},[91,99118,593],{"class":105},[91,99120,257],{"class":250},[91,99122,99123,99125,99127,99129,99131,99133,99135,99137,99139,99141,99143,99145,99147],{"class":93,"line":1304},[91,99124,98402],{"class":250},[91,99126,296],{"class":153},[91,99128,93083],{"class":250},[91,99130,586],{"class":105},[91,99132,627],{"class":250},[91,99134,98413],{"class":105},[91,99136,93088],{"class":250},[91,99138,327],{"class":105},[91,99140,627],{"class":250},[91,99142,321],{"class":105},[91,99144,627],{"class":250},[91,99146,593],{"class":105},[91,99148,257],{"class":250},[91,99150,99151],{"class":93,"line":1319},[91,99152,99153],{"class":308},"#使用dstack\n",[91,99155,99156],{"class":93,"line":1325},[91,99157,99158],{"class":250},"np.dstack((aaa,bbb)).shape\n",[91,99160,99161],{"class":93,"line":1339},[91,99162,99163],{"class":308},"#结果：（2，3，12）\n",[168,99165,99166],{},"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":26,"searchDepth":38,"depth":38,"links":99168},[99169,99170,99171,99172],{"id":98108,"depth":38,"text":98109},{"id":98722,"depth":38,"text":98723},{"id":98893,"depth":38,"text":98894},{"id":99064,"depth":38,"text":99065},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98100,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99179,"title":99180,"body":99181,"description":23500,"extension":173,"meta":99456,"navigation":175,"path":99457,"seo":99458,"stem":99459,"__hash__":99460},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99182,"toc":99454},[99183,99186,99189,99283,99286,99289,99292,99295,99298,99301,99304,99307,99451],[10,99184,99180],{"id":99185},"_7数组转置",[21,99187,99188],{},"使用transpose()函数",[82,99190,99192],{"className":30459,"code":99191,"language":30461,"meta":26,"style":26},"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",[88,99193,99194,99204,99228,99233,99238,99243,99248,99256,99260,99264,99269,99274,99279],{"__ignoreMap":26},[91,99195,99196,99198,99200,99202],{"class":93,"line":94},[91,99197,30473],{"class":153},[91,99199,31461],{"class":250},[91,99201,31464],{"class":153},[91,99203,31467],{"class":250},[91,99205,99206,99208,99210,99212,99214,99216,99218,99220,99222,99224,99226],{"class":93,"line":38},[91,99207,487],{"class":250},[91,99209,296],{"class":153},[91,99211,31798],{"class":250},[91,99213,466],{"class":105},[91,99215,627],{"class":250},[91,99217,772],{"class":105},[91,99219,93088],{"class":250},[91,99221,542],{"class":105},[91,99223,627],{"class":250},[91,99225,321],{"class":105},[91,99227,257],{"class":250},[91,99229,99230],{"class":93,"line":1304},[91,99231,99232],{"class":308},"#二维数组转置\n",[91,99234,99235],{"class":93,"line":1319},[91,99236,99237],{"class":308},"#调用transpose()函数\n",[91,99239,99240],{"class":93,"line":1325},[91,99241,99242],{"class":250},"a.transpose()\n",[91,99244,99245],{"class":93,"line":1339},[91,99246,99247],{"class":308},"#对于二维数组也可以采用.T来实现\n",[91,99249,99250,99253],{"class":93,"line":1345},[91,99251,99252],{"class":250},"a.T",[91,99254,99255],{"class":308},"#与上述代码一样\n",[91,99257,99258],{"class":93,"line":1436},[91,99259,93645],{"class":308},[91,99261,99262],{"class":93,"line":1442},[91,99263,94009],{"class":101},[91,99265,99266],{"class":93,"line":1454},[91,99267,99268],{"class":101},"array([[ 1,  4,  7, 10],\n",[91,99270,99271],{"class":93,"line":1736},[91,99272,99273],{"class":101},"       [ 2,  5,  8, 11],\n",[91,99275,99276],{"class":93,"line":1741},[91,99277,99278],{"class":101},"       [ 3,  6,  9, 12]])\n",[91,99280,99281],{"class":93,"line":1747},[91,99282,94009],{"class":101},[21,99284,99285],{},"也可以使用np.transpose()的形式",[21,99287,99288],{},"#多维数组进行转置 np.transpose()",[21,99290,99291],{},"#对二维数组也可以使用np.transpose()进行转置",[21,99293,99294],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[21,99296,99297],{},"第二个参数，维度可以理解为用axis中的数来理解",[21,99299,99300],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[21,99302,99303],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[21,99305,99306],{},"四维及以上的数组也是一样的道理",[82,99308,99310],{"className":30459,"code":99309,"language":30461,"meta":26,"style":26},"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",[88,99311,99312,99340,99345,99350,99355,99373,99378,99410,99415,99420,99425,99446],{"__ignoreMap":26},[91,99313,99314,99316,99318,99320,99322,99324,99326,99328,99330,99332,99334,99336,99338],{"class":93,"line":94},[91,99315,1069],{"class":250},[91,99317,296],{"class":153},[91,99319,93083],{"class":250},[91,99321,466],{"class":105},[91,99323,627],{"class":250},[91,99325,574],{"class":105},[91,99327,93088],{"class":250},[91,99329,321],{"class":105},[91,99331,627],{"class":250},[91,99333,593],{"class":105},[91,99335,627],{"class":250},[91,99337,327],{"class":105},[91,99339,257],{"class":250},[91,99341,99342],{"class":93,"line":38},[91,99343,99344],{"class":250},"x.shape\n",[91,99346,99347],{"class":93,"line":1304},[91,99348,99349],{"class":308},"#结果：（3,6,2）\n",[91,99351,99352],{"class":93,"line":1319},[91,99353,99354],{"class":308},"#使用np.transpose()进行转置 变为(2,6,3)\n",[91,99356,99357,99360,99362,99364,99366,99368,99370],{"class":93,"line":1325},[91,99358,99359],{"class":250},"np.transpose(x,(",[91,99361,327],{"class":105},[91,99363,627],{"class":250},[91,99365,466],{"class":105},[91,99367,627],{"class":250},[91,99369,440],{"class":105},[91,99371,99372],{"class":250},")).shape\n",[91,99374,99375],{"class":93,"line":1339},[91,99376,99377],{"class":308},"#结果：(2,6,3)\n",[91,99379,99380,99382,99384,99386,99388,99390,99392,99394,99396,99398,99400,99402,99404,99406,99408],{"class":93,"line":1345},[91,99381,98587],{"class":250},[91,99383,296],{"class":153},[91,99385,93083],{"class":250},[91,99387,466],{"class":105},[91,99389,627],{"class":250},[91,99391,574],{"class":105},[91,99393,93088],{"class":250},[91,99395,321],{"class":105},[91,99397,627],{"class":250},[91,99399,327],{"class":105},[91,99401,627],{"class":250},[91,99403,466],{"class":105},[91,99405,627],{"class":250},[91,99407,593],{"class":105},[91,99409,257],{"class":250},[91,99411,99412],{"class":93,"line":1436},[91,99413,99414],{"class":250},"aaaa.shape\n",[91,99416,99417],{"class":93,"line":1442},[91,99418,99419],{"class":308},"#结果：（3，2，1，6）\n",[91,99421,99422],{"class":93,"line":1454},[91,99423,99424],{"class":308},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[91,99426,99427,99430,99432,99434,99436,99438,99440,99442,99444],{"class":93,"line":1736},[91,99428,99429],{"class":250},"np.transpose(aaaa,(",[91,99431,466],{"class":105},[91,99433,627],{"class":250},[91,99435,327],{"class":105},[91,99437,627],{"class":250},[91,99439,440],{"class":105},[91,99441,627],{"class":250},[91,99443,321],{"class":105},[91,99445,99372],{"class":250},[91,99447,99448],{"class":93,"line":1741},[91,99449,99450],{"class":308},"#结果：(2,1,3,6)\n",[168,99452,99453],{},"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":26,"searchDepth":38,"depth":38,"links":99455},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99180,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99462,"title":99463,"body":99464,"description":23500,"extension":173,"meta":100198,"navigation":175,"path":100199,"seo":100200,"stem":100201,"__hash__":100202},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99465,"toc":100196},[99466,99469,99472,99475,99478,99481,99484,99487,99490,99599,99602,99605,100193],[10,99467,99463],{"id":99468},"_8数组分割",[21,99470,99471],{},"split分割",[21,99473,99474],{},"numpy.split(ary,indics_or_sections,axis)",[21,99476,99477],{},"解释：",[21,99479,99480],{},"ary:被分割的数组",[21,99482,99483],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[21,99485,99486],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[21,99488,99489],{},"①一维数组的分割",[82,99491,99493],{"className":30459,"code":99492,"language":30461,"meta":26,"style":26},"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",[88,99494,99495,99511,99516,99525,99529,99534,99542,99546,99551,99556,99569,99573,99578,99590,99594],{"__ignoreMap":26},[91,99496,99497,99499,99501,99503,99505,99507,99509],{"class":93,"line":94},[91,99498,487],{"class":250},[91,99500,296],{"class":153},[91,99502,93083],{"class":250},[91,99504,466],{"class":105},[91,99506,627],{"class":250},[91,99508,669],{"class":105},[91,99510,257],{"class":250},[91,99512,99513],{"class":93,"line":38},[91,99514,99515],{"class":308},"#如果传入整数，必须能够平分，否则会报错\n",[91,99517,99518,99521,99523],{"class":93,"line":1304},[91,99519,99520],{"class":250},"np.split(a,",[91,99522,327],{"class":105},[91,99524,257],{"class":250},[91,99526,99527],{"class":93,"line":1319},[91,99528,93645],{"class":308},[91,99530,99531],{"class":93,"line":1325},[91,99532,99533],{"class":308},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[91,99535,99536,99538,99540],{"class":93,"line":1339},[91,99537,99520],{"class":250},[91,99539,542],{"class":105},[91,99541,257],{"class":250},[91,99543,99544],{"class":93,"line":1345},[91,99545,93645],{"class":308},[91,99547,99548],{"class":93,"line":1436},[91,99549,99550],{"class":308},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[91,99552,99553],{"class":93,"line":1442},[91,99554,99555],{"class":308},"#传入数组\n",[91,99557,99558,99561,99563,99565,99567],{"class":93,"line":1454},[91,99559,99560],{"class":250},"np.split(a,[",[91,99562,321],{"class":105},[91,99564,627],{"class":250},[91,99566,568],{"class":105},[91,99568,4780],{"class":250},[91,99570,99571],{"class":93,"line":1736},[91,99572,93645],{"class":308},[91,99574,99575],{"class":93,"line":1741},[91,99576,99577],{"class":308},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[91,99579,99580,99582,99584,99586,99588],{"class":93,"line":1747},[91,99581,99560],{"class":250},[91,99583,568],{"class":105},[91,99585,627],{"class":250},[91,99587,618],{"class":105},[91,99589,4780],{"class":250},[91,99591,99592],{"class":93,"line":1752},[91,99593,93645],{"class":308},[91,99595,99596],{"class":93,"line":1766},[91,99597,99598],{"class":308},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[21,99600,99601],{},"②二维数组的分割",[21,99603,99604],{},"使用split()",[82,99606,99608],{"className":30459,"code":99607,"language":30461,"meta":26,"style":26},"#二维数组分割\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",[88,99609,99610,99615,99639,99644,99653,99657,99661,99666,99671,99676,99681,99686,99691,99696,99700,99713,99717,99721,99725,99729,99733,99738,99743,99748,99752,99757,99773,99777,99781,99786,99791,99796,99801,99806,99811,99816,99821,99826,99831,99836,99841,99846,99851,99856,99861,99866,99871,99875,99879,99899,99903,99907,99912,99917,99922,99927,99932,99937,99942,99947,99952,99957,99962,99967,99972,99977,99982,99987,99992,99997,100001,100006,100015,100019,100023,100027,100031,100035,100039,100043,100047,100051,100060,100064,100068,100072,100076,100080,100084,100088,100092,100096,100100,100104,100108,100112,100116,100120,100124,100128,100132,100136,100140,100144,100157,100161,100165,100169,100173,100177,100181,100185,100189],{"__ignoreMap":26},[91,99611,99612],{"class":93,"line":94},[91,99613,99614],{"class":308},"#二维数组分割\n",[91,99616,99617,99619,99621,99623,99625,99627,99629,99631,99633,99635,99637],{"class":93,"line":38},[91,99618,93387],{"class":250},[91,99620,296],{"class":153},[91,99622,93083],{"class":250},[91,99624,466],{"class":105},[91,99626,627],{"class":250},[91,99628,574],{"class":105},[91,99630,93088],{"class":250},[91,99632,593],{"class":105},[91,99634,627],{"class":250},[91,99636,593],{"class":105},[91,99638,257],{"class":250},[91,99640,99641],{"class":93,"line":1304},[91,99642,99643],{"class":308},"#默认axis=0  传入整数平均分,按行来的\n",[91,99645,99646,99649,99651],{"class":93,"line":1319},[91,99647,99648],{"class":250},"np.split(aa,",[91,99650,321],{"class":105},[91,99652,257],{"class":250},[91,99654,99655],{"class":93,"line":1325},[91,99656,95845],{"class":308},[91,99658,99659],{"class":93,"line":1339},[91,99660,94009],{"class":101},[91,99662,99663],{"class":93,"line":1345},[91,99664,99665],{"class":101},"[array([[ 1,  2,  3,  4,  5,  6],\n",[91,99667,99668],{"class":93,"line":1436},[91,99669,99670],{"class":101},"        [ 7,  8,  9, 10, 11, 12]]),\n",[91,99672,99673],{"class":93,"line":1442},[91,99674,99675],{"class":101}," array([[13, 14, 15, 16, 17, 18],\n",[91,99677,99678],{"class":93,"line":1454},[91,99679,99680],{"class":101},"        [19, 20, 21, 22, 23, 24]]),\n",[91,99682,99683],{"class":93,"line":1736},[91,99684,99685],{"class":101}," array([[25, 26, 27, 28, 29, 30],\n",[91,99687,99688],{"class":93,"line":1741},[91,99689,99690],{"class":101},"        [31, 32, 33, 34, 35, 36]])]\n",[91,99692,99693],{"class":93,"line":1747},[91,99694,99695],{"class":101}," '''\n",[91,99697,99698],{"class":93,"line":1752},[91,99699,99555],{"class":308},[91,99701,99702,99705,99707,99709,99711],{"class":93,"line":1766},[91,99703,99704],{"class":250},"np.split(aa,[",[91,99706,327],{"class":105},[91,99708,627],{"class":250},[91,99710,568],{"class":105},[91,99712,4780],{"class":250},[91,99714,99715],{"class":93,"line":1771},[91,99716,95845],{"class":308},[91,99718,99719],{"class":93,"line":1777},[91,99720,94009],{"class":101},[91,99722,99723],{"class":93,"line":1798},[91,99724,99665],{"class":101},[91,99726,99727],{"class":93,"line":1803},[91,99728,99670],{"class":101},[91,99730,99731],{"class":93,"line":1817},[91,99732,99675],{"class":101},[91,99734,99735],{"class":93,"line":1822},[91,99736,99737],{"class":101},"        [19, 20, 21, 22, 23, 24],\n",[91,99739,99740],{"class":93,"line":1851},[91,99741,99742],{"class":101},"        [25, 26, 27, 28, 29, 30]]),\n",[91,99744,99745],{"class":93,"line":1856},[91,99746,99747],{"class":101}," array([[31, 32, 33, 34, 35, 36]])]\n",[91,99749,99750],{"class":93,"line":1873},[91,99751,94009],{"class":101},[91,99753,99754],{"class":93,"line":1878},[91,99755,99756],{"class":308},"#axis=1 按照列来分\n",[91,99758,99759,99761,99763,99765,99767,99769,99771],{"class":93,"line":1883},[91,99760,99648],{"class":250},[91,99762,321],{"class":105},[91,99764,627],{"class":250},[91,99766,47595],{"class":5339},[91,99768,296],{"class":153},[91,99770,466],{"class":105},[91,99772,257],{"class":250},[91,99774,99775],{"class":93,"line":1888},[91,99776,95845],{"class":308},[91,99778,99779],{"class":93,"line":1902},[91,99780,94009],{"class":101},[91,99782,99783],{"class":93,"line":1907},[91,99784,99785],{"class":101},"[array([[ 1,  2],\n",[91,99787,99788],{"class":93,"line":2700},[91,99789,99790],{"class":101},"        [ 7,  8],\n",[91,99792,99793],{"class":93,"line":2714},[91,99794,99795],{"class":101},"        [13, 14],\n",[91,99797,99798],{"class":93,"line":2722},[91,99799,99800],{"class":101},"        [19, 20],\n",[91,99802,99803],{"class":93,"line":2727},[91,99804,99805],{"class":101},"        [25, 26],\n",[91,99807,99808],{"class":93,"line":2733},[91,99809,99810],{"class":101},"        [31, 32]]),\n",[91,99812,99813],{"class":93,"line":2739},[91,99814,99815],{"class":101}," array([[ 3,  4],\n",[91,99817,99818],{"class":93,"line":2744},[91,99819,99820],{"class":101},"        [ 9, 10],\n",[91,99822,99823],{"class":93,"line":8071},[91,99824,99825],{"class":101},"        [15, 16],\n",[91,99827,99828],{"class":93,"line":8095},[91,99829,99830],{"class":101},"        [21, 22],\n",[91,99832,99833],{"class":93,"line":8100},[91,99834,99835],{"class":101},"        [27, 28],\n",[91,99837,99838],{"class":93,"line":8106},[91,99839,99840],{"class":101},"        [33, 34]]),\n",[91,99842,99843],{"class":93,"line":8133},[91,99844,99845],{"class":101}," array([[ 5,  6],\n",[91,99847,99848],{"class":93,"line":8138},[91,99849,99850],{"class":101},"        [11, 12],\n",[91,99852,99853],{"class":93,"line":8144},[91,99854,99855],{"class":101},"        [17, 18],\n",[91,99857,99858],{"class":93,"line":8156},[91,99859,99860],{"class":101},"        [23, 24],\n",[91,99862,99863],{"class":93,"line":8168},[91,99864,99865],{"class":101},"        [29, 30],\n",[91,99867,99868],{"class":93,"line":8180},[91,99869,99870],{"class":101},"        [35, 36]])]\n",[91,99872,99873],{"class":93,"line":9839},[91,99874,99695],{"class":101},[91,99876,99877],{"class":93,"line":9864},[91,99878,99555],{"class":308},[91,99880,99881,99883,99885,99887,99889,99891,99893,99895,99897],{"class":93,"line":9887},[91,99882,99704],{"class":250},[91,99884,466],{"class":105},[91,99886,627],{"class":250},[91,99888,327],{"class":105},[91,99890,41690],{"class":250},[91,99892,47595],{"class":5339},[91,99894,296],{"class":153},[91,99896,466],{"class":105},[91,99898,257],{"class":250},[91,99900,99901],{"class":93,"line":9911},[91,99902,93645],{"class":308},[91,99904,99905],{"class":93,"line":9916},[91,99906,94009],{"class":101},[91,99908,99909],{"class":93,"line":9921},[91,99910,99911],{"class":101},"[array([[ 1],\n",[91,99913,99914],{"class":93,"line":9926},[91,99915,99916],{"class":101},"        [ 7],\n",[91,99918,99919],{"class":93,"line":9935},[91,99920,99921],{"class":101},"        [13],\n",[91,99923,99924],{"class":93,"line":9940},[91,99925,99926],{"class":101},"        [19],\n",[91,99928,99929],{"class":93,"line":9946},[91,99930,99931],{"class":101},"        [25],\n",[91,99933,99934],{"class":93,"line":9967},[91,99935,99936],{"class":101},"        [31]]),\n",[91,99938,99939],{"class":93,"line":9973},[91,99940,99941],{"class":101}," array([[ 2],\n",[91,99943,99944],{"class":93,"line":9987},[91,99945,99946],{"class":101},"        [ 8],\n",[91,99948,99949],{"class":93,"line":9993},[91,99950,99951],{"class":101},"        [14],\n",[91,99953,99954],{"class":93,"line":10020},[91,99955,99956],{"class":101},"        [20],\n",[91,99958,99959],{"class":93,"line":10029},[91,99960,99961],{"class":101},"        [26],\n",[91,99963,99964],{"class":93,"line":10035},[91,99965,99966],{"class":101},"        [32]]),\n",[91,99968,99969],{"class":93,"line":10043},[91,99970,99971],{"class":101}," array([[ 3,  4,  5,  6],\n",[91,99973,99974],{"class":93,"line":10048},[91,99975,99976],{"class":101},"        [ 9, 10, 11, 12],\n",[91,99978,99979],{"class":93,"line":16727},[91,99980,99981],{"class":101},"        [15, 16, 17, 18],\n",[91,99983,99984],{"class":93,"line":16733},[91,99985,99986],{"class":101},"        [21, 22, 23, 24],\n",[91,99988,99989],{"class":93,"line":16756},[91,99990,99991],{"class":101},"        [27, 28, 29, 30],\n",[91,99993,99994],{"class":93,"line":16762},[91,99995,99996],{"class":101},"        [33, 34, 35, 36]])]\n",[91,99998,99999],{"class":93,"line":16785},[91,100000,94009],{"class":101},[91,100002,100003],{"class":93,"line":16799},[91,100004,100005],{"class":308},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[91,100007,100008,100011,100013],{"class":93,"line":16819},[91,100009,100010],{"class":250},"np.vsplit(aa,",[91,100012,321],{"class":105},[91,100014,257],{"class":250},[91,100016,100017],{"class":93,"line":16825},[91,100018,93645],{"class":308},[91,100020,100021],{"class":93,"line":16836},[91,100022,94009],{"class":101},[91,100024,100025],{"class":93,"line":16859},[91,100026,99665],{"class":101},[91,100028,100029],{"class":93,"line":16881},[91,100030,99670],{"class":101},[91,100032,100033],{"class":93,"line":16886},[91,100034,99675],{"class":101},[91,100036,100037],{"class":93,"line":16892},[91,100038,99680],{"class":101},[91,100040,100041],{"class":93,"line":16906},[91,100042,99685],{"class":101},[91,100044,100045],{"class":93,"line":16919},[91,100046,99690],{"class":101},[91,100048,100049],{"class":93,"line":16924},[91,100050,94009],{"class":101},[91,100052,100053,100056,100058],{"class":93,"line":16938},[91,100054,100055],{"class":250},"np.hsplit(aa,",[91,100057,321],{"class":105},[91,100059,257],{"class":250},[91,100061,100062],{"class":93,"line":16943},[91,100063,93645],{"class":308},[91,100065,100066],{"class":93,"line":16949},[91,100067,94009],{"class":101},[91,100069,100070],{"class":93,"line":16954},[91,100071,99785],{"class":101},[91,100073,100074],{"class":93,"line":16968},[91,100075,99790],{"class":101},[91,100077,100078],{"class":93,"line":16973},[91,100079,99795],{"class":101},[91,100081,100082],{"class":93,"line":16978},[91,100083,99800],{"class":101},[91,100085,100086],{"class":93,"line":16992},[91,100087,99805],{"class":101},[91,100089,100090],{"class":93,"line":17004},[91,100091,99810],{"class":101},[91,100093,100094],{"class":93,"line":17009},[91,100095,99815],{"class":101},[91,100097,100098],{"class":93,"line":17022},[91,100099,99820],{"class":101},[91,100101,100102],{"class":93,"line":17027},[91,100103,99825],{"class":101},[91,100105,100106],{"class":93,"line":17032},[91,100107,99830],{"class":101},[91,100109,100110],{"class":93,"line":17037},[91,100111,99835],{"class":101},[91,100113,100114],{"class":93,"line":17050},[91,100115,99840],{"class":101},[91,100117,100118],{"class":93,"line":17055},[91,100119,99845],{"class":101},[91,100121,100122],{"class":93,"line":32714},[91,100123,99850],{"class":101},[91,100125,100126],{"class":93,"line":32720},[91,100127,99855],{"class":101},[91,100129,100130],{"class":93,"line":32726},[91,100131,99860],{"class":101},[91,100133,100134],{"class":93,"line":32732},[91,100135,99865],{"class":101},[91,100137,100138],{"class":93,"line":32738},[91,100139,99870],{"class":101},[91,100141,100142],{"class":93,"line":32749},[91,100143,94009],{"class":101},[91,100145,100146,100149,100151,100153,100155],{"class":93,"line":32755},[91,100147,100148],{"class":250},"np.vsplit(aa,[",[91,100150,327],{"class":105},[91,100152,627],{"class":250},[91,100154,568],{"class":105},[91,100156,4780],{"class":250},[91,100158,100159],{"class":93,"line":32775},[91,100160,93645],{"class":308},[91,100162,100163],{"class":93,"line":32781},[91,100164,94009],{"class":101},[91,100166,100167],{"class":93,"line":32792},[91,100168,99665],{"class":101},[91,100170,100171],{"class":93,"line":32798},[91,100172,99670],{"class":101},[91,100174,100175],{"class":93,"line":32804},[91,100176,99675],{"class":101},[91,100178,100179],{"class":93,"line":32810},[91,100180,99737],{"class":101},[91,100182,100183],{"class":93,"line":32816},[91,100184,99742],{"class":101},[91,100186,100187],{"class":93,"line":32822},[91,100188,99747],{"class":101},[91,100190,100191],{"class":93,"line":32828},[91,100192,99695],{"class":101},[168,100194,100195],{},"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":26,"searchDepth":38,"depth":38,"links":100197},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99463,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100204,"title":100205,"body":100206,"description":23500,"extension":173,"meta":100700,"navigation":175,"path":100701,"seo":100702,"stem":100703,"__hash__":100704},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100207,"toc":100691},[100208,100211,100214,100239,100243,100302,100354,100358,100360,100396,100450,100452,100490,100561,100565,100570,100574,100577,100610,100613,100617,100620,100623,100626,100629,100634,100638,100641,100644,100647,100650,100655,100659,100664,100667,100688],[10,100209,100205],{"id":100210},"_9数学函数",[21,100212,100213],{},"补充回顾：python的列表推导式",[82,100215,100217],{"className":30459,"code":100216,"language":30461,"meta":26,"style":26},"[1\u002Fi for i in a]\n",[88,100218,100219],{"__ignoreMap":26},[91,100220,100221,100223,100225,100227,100230,100232,100234,100236],{"class":93,"line":94},[91,100222,1139],{"class":250},[91,100224,466],{"class":105},[91,100226,833],{"class":153},[91,100228,100229],{"class":250},"i ",[91,100231,3148],{"class":153},[91,100233,9561],{"class":250},[91,100235,26165],{"class":153},[91,100237,100238],{"class":250}," a]\n",[190,100240,100242],{"id":100241},"_91-求倒数","9.1 求倒数",[82,100244,100246],{"className":30459,"code":100245,"language":30461,"meta":26,"style":26},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[88,100247,100248,100253,100281,100293],{"__ignoreMap":26},[91,100249,100250],{"class":93,"line":94},[91,100251,100252],{"class":308},"#数组求倒数\n",[91,100254,100255,100257,100259,100261,100263,100265,100267,100269,100271,100273,100275,100277,100279],{"class":93,"line":38},[91,100256,487],{"class":250},[91,100258,296],{"class":153},[91,100260,1139],{"class":250},[91,100262,466],{"class":105},[91,100264,627],{"class":250},[91,100266,327],{"class":105},[91,100268,627],{"class":250},[91,100270,321],{"class":105},[91,100272,627],{"class":250},[91,100274,542],{"class":105},[91,100276,627],{"class":250},[91,100278,568],{"class":105},[91,100280,33327],{"class":250},[91,100282,100283,100285,100287,100290],{"class":93,"line":1304},[91,100284,512],{"class":250},[91,100286,296],{"class":153},[91,100288,100289],{"class":250},"np.array(a)",[91,100291,100292],{"class":308},"#将列表转换为数组\n",[91,100294,100295,100297,100299],{"class":93,"line":1319},[91,100296,466],{"class":105},[91,100298,833],{"class":153},[91,100300,100301],{"class":250},"b\n",[82,100303,100305],{"className":30459,"code":100304,"language":30461,"meta":26,"style":26},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[88,100306,100307,100335,100344,100349],{"__ignoreMap":26},[91,100308,100309,100311,100313,100315,100317,100319,100321,100323,100325,100327,100329,100331,100333],{"class":93,"line":94},[91,100310,487],{"class":250},[91,100312,296],{"class":153},[91,100314,1139],{"class":250},[91,100316,466],{"class":105},[91,100318,627],{"class":250},[91,100320,327],{"class":105},[91,100322,627],{"class":250},[91,100324,321],{"class":105},[91,100326,627],{"class":250},[91,100328,542],{"class":105},[91,100330,627],{"class":250},[91,100332,568],{"class":105},[91,100334,33327],{"class":250},[91,100336,100337,100339,100341],{"class":93,"line":38},[91,100338,512],{"class":250},[91,100340,296],{"class":153},[91,100342,100343],{"class":250},"np.array(a)\n",[91,100345,100346],{"class":93,"line":1304},[91,100347,100348],{"class":308},"#调用numpy中的函数reciprocal()\n",[91,100350,100351],{"class":93,"line":1319},[91,100352,100353],{"class":250},"np.reciprocal(b)\n",[190,100355,100357],{"id":100356},"_92-求平方","9.2 求平方",[21,100359,94611],{},[82,100361,100363],{"className":30459,"code":100362,"language":30461,"meta":26,"style":26},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[88,100364,100365,100370,100375,100391],{"__ignoreMap":26},[91,100366,100367],{"class":93,"line":94},[91,100368,100369],{"class":308},"#square()，求平方\n",[91,100371,100372],{"class":93,"line":38},[91,100373,100374],{"class":308},"#一维数组\n",[91,100376,100377,100379,100381,100383,100385,100387,100389],{"class":93,"line":1304},[91,100378,487],{"class":250},[91,100380,296],{"class":153},[91,100382,93083],{"class":250},[91,100384,466],{"class":105},[91,100386,627],{"class":250},[91,100388,695],{"class":105},[91,100390,257],{"class":250},[91,100392,100393],{"class":93,"line":1319},[91,100394,100395],{"class":250},"np.square(a)\n",[82,100397,100399],{"className":30459,"code":100398,"language":30461,"meta":26,"style":26},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[88,100400,100401,100406,100411,100432],{"__ignoreMap":26},[91,100402,100403],{"class":93,"line":94},[91,100404,100405],{"class":308},"#或者通过循环遍历的形式来计算\n",[91,100407,100408],{"class":93,"line":38},[91,100409,100410],{"class":308},"#这是一个列表\n",[91,100412,100413,100416,100418,100420,100422,100424,100426,100429],{"class":93,"line":1304},[91,100414,100415],{"class":250},"[i",[91,100417,704],{"class":153},[91,100419,100229],{"class":250},[91,100421,3148],{"class":153},[91,100423,9561],{"class":250},[91,100425,26165],{"class":153},[91,100427,100428],{"class":250}," a]",[91,100430,100431],{"class":308},"#这个求完之后在数列当中\n",[91,100433,100434,100437,100439,100441,100443,100445,100447],{"class":93,"line":1319},[91,100435,100436],{"class":250},"np.array([i",[91,100438,704],{"class":153},[91,100440,100229],{"class":250},[91,100442,3148],{"class":153},[91,100444,9561],{"class":250},[91,100446,26165],{"class":153},[91,100448,100449],{"class":250}," a])\n",[21,100451,93372],{},[82,100453,100455],{"className":30459,"code":100454,"language":30461,"meta":26,"style":26},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[88,100456,100457,100461,100485],{"__ignoreMap":26},[91,100458,100459],{"class":93,"line":94},[91,100460,93382],{"class":308},[91,100462,100463,100465,100467,100469,100471,100473,100475,100477,100479,100481,100483],{"class":93,"line":38},[91,100464,93387],{"class":250},[91,100466,296],{"class":153},[91,100468,93083],{"class":250},[91,100470,466],{"class":105},[91,100472,627],{"class":250},[91,100474,772],{"class":105},[91,100476,93088],{"class":250},[91,100478,542],{"class":105},[91,100480,627],{"class":250},[91,100482,321],{"class":105},[91,100484,257],{"class":250},[91,100486,100487],{"class":93,"line":1304},[91,100488,100489],{"class":250},"np.square(aa)\n",[82,100491,100493],{"className":30459,"code":100492,"language":30461,"meta":26,"style":26},"#传统的方式\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",[88,100494,100495,100500,100509,100525,100541,100556],{"__ignoreMap":26},[91,100496,100497],{"class":93,"line":94},[91,100498,100499],{"class":308},"#传统的方式\n",[91,100501,100502,100504,100506],{"class":93,"line":38},[91,100503,98268],{"class":250},[91,100505,296],{"class":153},[91,100507,100508],{"class":250},"np.empty_like(aa)\n",[91,100510,100511,100513,100515,100517,100519,100521,100523],{"class":93,"line":1304},[91,100512,3148],{"class":153},[91,100514,9561],{"class":250},[91,100516,26165],{"class":153},[91,100518,32524],{"class":105},[91,100520,251],{"class":250},[91,100522,542],{"class":105},[91,100524,30867],{"class":250},[91,100526,100527,100529,100531,100533,100535,100537,100539],{"class":93,"line":1319},[91,100528,3324],{"class":153},[91,100530,9623],{"class":250},[91,100532,26165],{"class":153},[91,100534,32524],{"class":105},[91,100536,251],{"class":250},[91,100538,321],{"class":105},[91,100540,30867],{"class":250},[91,100542,100543,100546,100548,100551,100553],{"class":93,"line":1325},[91,100544,100545],{"class":250},"        bb[i,j]",[91,100547,296],{"class":153},[91,100549,100550],{"class":250},"aa[i,j]",[91,100552,704],{"class":153},[91,100554,100555],{"class":250},"aa[i,j]\n",[91,100557,100558],{"class":93,"line":1339},[91,100559,100560],{"class":250},"bb\n",[190,100562,100564],{"id":100563},"_93-求各元素的符号","9.3 求各元素的符号",[21,100566,100567],{},[24,100568],{"alt":26,"src":100569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[190,100571,100573],{"id":100572},"_94-modf函数","9.4 modf函数",[21,100575,100576],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[82,100578,100580],{"className":30459,"code":100579,"language":30461,"meta":26,"style":26},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[88,100581,100582,100605],{"__ignoreMap":26},[91,100583,100584,100586,100588,100590,100592,100594,100596,100598,100600,100603],{"class":93,"line":94},[91,100585,487],{"class":250},[91,100587,296],{"class":153},[91,100589,93083],{"class":250},[91,100591,781],{"class":153},[91,100593,695],{"class":105},[91,100595,627],{"class":250},[91,100597,695],{"class":105},[91,100599,627],{"class":250},[91,100601,100602],{"class":105},"0.3",[91,100604,257],{"class":250},[91,100606,100607],{"class":93,"line":38},[91,100608,100609],{"class":250},"np.modf(a)\n",[21,100611,100612],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[190,100614,100616],{"id":100615},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[21,100618,100619],{},"np.cell()",[21,100621,100622],{},"np.floor()",[21,100624,100625],{},"np.rint()",[21,100627,100628],{},"对各元素分别向上取整、向下取整、四舍五入",[21,100630,100631],{},[24,100632],{"alt":26,"src":100633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[190,100635,100637],{"id":100636},"_96-around函数","9.6 around()函数",[21,100639,100640],{},"around()函数也可以实现对数的小数位数进行操作",[21,100642,100643],{},"其中的参数：",[21,100645,100646],{},"1.要传的数组",[21,100648,100649],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[21,100651,100652],{},[24,100653],{"alt":26,"src":100654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[190,100656,100658],{"id":100657},"_97-三角函数","9.7 三角函数",[21,100660,100661],{},[24,100662],{"alt":26,"src":100663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[21,100665,100666],{},"引入图像模块非常重要",[82,100668,100670],{"className":30459,"code":100669,"language":30461,"meta":26,"style":26},"from matplotlib import pyplot as plt\n",[88,100671,100672],{"__ignoreMap":26},[91,100673,100674,100676,100679,100681,100684,100686],{"class":93,"line":94},[91,100675,30818],{"class":153},[91,100677,100678],{"class":250}," matplotlib ",[91,100680,30473],{"class":153},[91,100682,100683],{"class":250}," pyplot ",[91,100685,31464],{"class":153},[91,100687,31518],{"class":250},[168,100689,100690],{},"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":26,"searchDepth":38,"depth":38,"links":100692},[100693,100694,100695,100696,100697,100698,100699],{"id":100241,"depth":38,"text":100242},{"id":100356,"depth":38,"text":100357},{"id":100563,"depth":38,"text":100564},{"id":100572,"depth":38,"text":100573},{"id":100615,"depth":38,"text":100616},{"id":100636,"depth":38,"text":100637},{"id":100657,"depth":38,"text":100658},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100205,"description":23500},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100706,"title":100707,"body":100708,"description":23500,"extension":173,"meta":100712,"navigation":175,"path":100713,"seo":100714,"stem":100715,"__hash__":100716},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100709,"toc":100710},[],{"title":26,"searchDepth":38,"depth":38,"links":100711},[],{"category":50501},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100707,"description":23500},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100718,"title":100719,"body":100720,"description":26,"extension":173,"meta":102728,"navigation":175,"path":102729,"seo":102730,"stem":102731,"__hash__":102732},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100721,"toc":102704},[100722,100725,100729,100732,100735,100741,100744,100767,100770,100804,100807,100848,100852,100855,100948,100951,100995,100998,101015,101018,101032,101035,101038,101083,101086,101123,101127,101130,101136,101141,101161,101165,101168,101234,101237,101255,101259,101262,101291,101301,101307,101311,101314,101320,101331,101335,101338,101368,101371,101651,101654,101657,101668,101671,101674,101696,101703,101706,101724,101727,101730,101744,101752,101755,101781,101787,101790,101793,101803,101815,101835,101844,101864,101874,101898,101911,101925,101930,101971,101988,102013,102025,102045,102051,102096,102115,102132,102145,102161,102168,102180,102189,102224,102245,102270,102283,102307,102322,102347,102350,102371,102380,102383,102394,102398,102401,102407,102419,102426,102430,102433,102445,102448,102462,102465,102475,102485,102488,102528,102531,102535,102541,102544,102558,102562,102565,102598,102602,102605,102628,102636,102639,102645,102651,102654,102657,102685,102689,102692,102698,102701],[10,100723,100719],{"id":100724},"_1环境安装与第一个-mujoco-程序",[190,100726,100728],{"id":100727},"_1目标说明","1.目标说明",[21,100730,100731],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[21,100733,100734],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[82,100736,100739],{"className":100737,"code":100738,"language":5310,"meta":26},[5308],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[88,100740,100738],{"__ignoreMap":26},[21,100742,100743],{},"需要掌握:",[14,100745,100746,100749,100752,100757,100762],{},[17,100747,100748],{},"Fedora 44 下 MuJoCo 的系统依赖",[17,100750,100751],{},"Python 虚拟环境创建",[17,100753,100754],{},[88,100755,100756],{},"mujoco.MjModel",[17,100758,100759],{},[88,100760,100761],{},"mujoco.MjData",[17,100763,100764],{},[88,100765,100766],{},"mujoco.mj_step(model, data)",[21,100768,100769],{},"MuJoCo 中最重要的两个对象:",[386,100771,100772,100782],{},[389,100773,100774],{},[392,100775,100776,100779],{},[395,100777,100778],{"align":23860},"对象",[395,100780,100781],{"align":23860},"含义",[433,100783,100784,100794],{},[392,100785,100786,100791],{},[438,100787,100788],{"align":23860},[88,100789,100790],{},"MjModel",[438,100792,100793],{"align":23860},"模型结构，来自 XML，基本不随时间变化",[392,100795,100796,100801],{},[438,100797,100798],{"align":23860},[88,100799,100800],{},"MjData",[438,100802,100803],{"align":23860},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[21,100805,100806],{},"可以先用一个类比理解：",[386,100808,100809,100819],{},[389,100810,100811],{},[392,100812,100813,100816],{},[395,100814,100815],{"align":23860},"类比",[395,100817,100818],{"align":23860},"MuJoCo 对象",[433,100820,100821,100830,100839],{},[392,100822,100823,100826],{},[438,100824,100825],{"align":23860},"游戏地图和角色配置",[438,100827,100828],{"align":23860},[88,100829,100790],{},[392,100831,100832,100835],{},[438,100833,100834],{"align":23860},"游戏运行到当前帧的状态",[438,100836,100837],{"align":23860},[88,100838,100800],{},[392,100840,100841,100844],{},[438,100842,100843],{"align":23860},"前进一帧",[438,100845,100846],{"align":23860},[88,100847,100766],{},[190,100849,100851],{"id":100850},"_2环境与依赖安装","2.环境与依赖安装",[21,100853,100854],{},"Fedora 44 系统依赖:",[82,100856,100858],{"className":84,"code":100857,"language":86,"meta":26,"style":26},"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",[88,100859,100860,100872,100885,100898,100908,100918,100937],{"__ignoreMap":26},[91,100861,100862,100864,100866,100868,100870],{"class":93,"line":94},[91,100863,24699],{"class":97},[91,100865,26437],{"class":101},[91,100867,23956],{"class":101},[91,100869,26522],{"class":105},[91,100871,24801],{"class":105},[91,100873,100874,100877,100880,100883],{"class":93,"line":38},[91,100875,100876],{"class":101},"  python3",[91,100878,100879],{"class":101}," python3-pip",[91,100881,100882],{"class":101}," python3-virtualenv",[91,100884,24801],{"class":105},[91,100886,100887,100890,100893,100896],{"class":93,"line":1304},[91,100888,100889],{"class":101},"  mesa-libGL",[91,100891,100892],{"class":101}," mesa-libGLU",[91,100894,100895],{"class":101}," mesa-dri-drivers",[91,100897,24801],{"class":105},[91,100899,100900,100903,100906],{"class":93,"line":1319},[91,100901,100902],{"class":101},"  libglvnd-glx",[91,100904,100905],{"class":101}," libglvnd-opengl",[91,100907,24801],{"class":105},[91,100909,100910,100913,100916],{"class":93,"line":1325},[91,100911,100912],{"class":101},"  glfw",[91,100914,100915],{"class":101}," glfw-devel",[91,100917,24801],{"class":105},[91,100919,100920,100923,100926,100929,100932,100935],{"class":93,"line":1339},[91,100921,100922],{"class":101},"  libX11",[91,100924,100925],{"class":101}," libXcursor",[91,100927,100928],{"class":101}," libXi",[91,100930,100931],{"class":101}," libXinerama",[91,100933,100934],{"class":101}," libXrandr",[91,100936,24801],{"class":105},[91,100938,100939,100942,100945],{"class":93,"line":1345},[91,100940,100941],{"class":101},"  gcc",[91,100943,100944],{"class":101}," gcc-c++",[91,100946,100947],{"class":101}," make\n",[21,100949,100950],{},"创建 Python 环境:",[82,100952,100954],{"className":84,"code":100953,"language":86,"meta":26,"style":26},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[88,100955,100956,100970,100978],{"__ignoreMap":26},[91,100957,100958,100961,100964,100967],{"class":93,"line":94},[91,100959,100960],{"class":97},"python3",[91,100962,100963],{"class":105}," -m",[91,100965,100966],{"class":101}," venv",[91,100968,100969],{"class":101}," .venv\n",[91,100971,100972,100975],{"class":93,"line":38},[91,100973,100974],{"class":105},"source",[91,100976,100977],{"class":101}," .venv\u002Fbin\u002Factivate\n",[91,100979,100980,100982,100984,100987,100989,100992],{"class":93,"line":1304},[91,100981,30461],{"class":97},[91,100983,100963],{"class":105},[91,100985,100986],{"class":101}," pip",[91,100988,23956],{"class":101},[91,100990,100991],{"class":105}," --upgrade",[91,100993,100994],{"class":101}," pip\n",[21,100996,100997],{},"pip 安装:",[82,100999,101001],{"className":84,"code":101000,"language":86,"meta":26,"style":26},"pip install \"mujoco>=2.3\" numpy\n",[88,101002,101003],{"__ignoreMap":26},[91,101004,101005,101007,101009,101012],{"class":93,"line":94},[91,101006,23953],{"class":97},[91,101008,23956],{"class":101},[91,101010,101011],{"class":101}," \"mujoco>=2.3\"",[91,101013,101014],{"class":101}," numpy\n",[21,101016,101017],{},"安装完成后，先做最小检查：",[82,101019,101021],{"className":84,"code":101020,"language":86,"meta":26,"style":26},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[88,101022,101023],{"__ignoreMap":26},[91,101024,101025,101027,101029],{"class":93,"line":94},[91,101026,30461],{"class":97},[91,101028,30439],{"class":105},[91,101030,101031],{"class":101}," \"import mujoco; print(mujoco.__version__)\"\n",[21,101033,101034],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[21,101036,101037],{},"conda 安装:",[82,101039,101041],{"className":84,"code":101040,"language":86,"meta":26,"style":26},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[88,101042,101043,101063,101073],{"__ignoreMap":26},[91,101044,101045,101047,101049,101051,101054,101057,101060],{"class":93,"line":94},[91,101046,30411],{"class":97},[91,101048,29295],{"class":101},[91,101050,25237],{"class":105},[91,101052,101053],{"class":101}," mujoco-study",[91,101055,101056],{"class":101}," python=",[91,101058,101059],{"class":105},"3.10",[91,101061,101062],{"class":105}," -y\n",[91,101064,101065,101067,101070],{"class":93,"line":38},[91,101066,30411],{"class":97},[91,101068,101069],{"class":101}," activate",[91,101071,101072],{"class":101}," mujoco-study\n",[91,101074,101075,101077,101079,101081],{"class":93,"line":1304},[91,101076,23953],{"class":97},[91,101078,23956],{"class":101},[91,101080,101011],{"class":101},[91,101082,101014],{"class":101},[21,101084,101085],{},"版本冲突说明:",[14,101087,101088,101094,101104,101113],{},[17,101089,101090,101091,28504],{},"不要安装 ",[88,101092,101093],{},"mujoco-py",[17,101095,101096,101097,101099,101100,101103],{},"如果旧项目里同时安装了 ",[88,101098,101093],{}," 和 ",[88,101101,101102],{},"mujoco","，建议新建干净虚拟环境。",[17,101105,101106,101109,101110,28504],{},[88,101107,101108],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[88,101111,101112],{},"~\u002F.mujoco\u002Fmujoco210",[17,101114,101115,101116,82620,101119,101122],{},"离屏渲染可能涉及 OpenGL 后端，",[88,101117,101118],{},"MUJOCO_GL=egl",[88,101120,101121],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[190,101124,101126],{"id":101125},"_3核心概念解释","3.核心概念解释",[21,101128,101129],{},"MuJoCo 的基本执行流程:",[82,101131,101134],{"className":101132,"code":101133,"language":5310,"meta":26},[5308],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[88,101135,101133],{"__ignoreMap":26},[21,101137,101138,101140],{},[88,101139,100790],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[21,101142,101143,101145,101146,461,101149,461,101152,461,101155,461,101158,28504],{},[88,101144,100800],{}," 存放仿真运行时状态，例如 ",[88,101147,101148],{},"data.time",[88,101150,101151],{},"data.qpos",[88,101153,101154],{},"data.qvel",[88,101156,101157],{},"data.ctrl",[88,101159,101160],{},"data.xpos",[217,101162,101164],{"id":101163},"xml-是什么","XML 是什么",[21,101166,101167],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[82,101169,101171],{"className":53148,"code":101170,"language":53150,"meta":26,"style":26},"\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",[88,101172,101173,101195,101226],{"__ignoreMap":26},[91,101174,101175,101177,101179,101181,101183,101185,101188,101190,101193],{"class":93,"line":94},[91,101176,1159],{"class":250},[91,101178,51881],{"class":51381},[91,101180,15043],{"class":97},[91,101182,296],{"class":250},[91,101184,53572],{"class":101},[91,101186,101187],{"class":97}," pos",[91,101189,296],{"class":250},[91,101191,101192],{"class":101},"\"0 0 1\"",[91,101194,51388],{"class":250},[91,101196,101197,101199,101202,101204,101206,101209,101211,101213,101215,101218,101220,101223],{"class":93,"line":38},[91,101198,52225],{"class":250},[91,101200,101201],{"class":51381},"geom",[91,101203,15043],{"class":97},[91,101205,296],{"class":250},[91,101207,101208],{"class":101},"\"box_geom\"",[91,101210,53905],{"class":97},[91,101212,296],{"class":250},[91,101214,53572],{"class":101},[91,101216,101217],{"class":97}," size",[91,101219,296],{"class":250},[91,101221,101222],{"class":101},"\"0.1 0.1 0.1\"",[91,101224,101225],{"class":250},"\u002F>\n",[91,101227,101228,101230,101232],{"class":93,"line":1304},[91,101229,51866],{"class":250},[91,101231,51881],{"class":51381},[91,101233,51388],{"class":250},[21,101235,101236],{},"这段意思是：",[14,101238,101239,101245,101252],{},[17,101240,101241,101242,101244],{},"创建一个叫 ",[88,101243,53795],{}," 的刚体。",[17,101246,101247,101248,101251],{},"它初始放在 ",[88,101249,101250],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[17,101253,101254],{},"它里面有一个盒子形状的几何体。",[217,101256,101258],{"id":101257},"timestep-是什么","timestep 是什么",[21,101260,101261],{},"XML 里的：",[82,101263,101265],{"className":53148,"code":101264,"language":53150,"meta":26,"style":26},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[88,101266,101267],{"__ignoreMap":26},[91,101268,101269,101271,101273,101276,101278,101281,101284,101286,101289],{"class":93,"line":94},[91,101270,1159],{"class":250},[91,101272,69247],{"class":51381},[91,101274,101275],{"class":97}," timestep",[91,101277,296],{"class":250},[91,101279,101280],{"class":101},"\"0.01\"",[91,101282,101283],{"class":97}," gravity",[91,101285,296],{"class":250},[91,101287,101288],{"class":101},"\"0 0 -9.81\"",[91,101290,101225],{"class":250},[21,101292,101293,101294,101297,101298,101300],{},"表示每调用一次 ",[88,101295,101296],{},"mj_step","，仿真时间前进 ",[88,101299,39067],{}," 秒。循环 100 次，大约就是 1 秒：",[82,101302,101305],{"className":101303,"code":101304,"language":5310,"meta":26},[5308],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[88,101306,101304],{"__ignoreMap":26},[217,101308,101310],{"id":101309},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[21,101312,101313],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[82,101315,101318],{"className":101316,"code":101317,"language":5310,"meta":26},[5308],"x y z qw qx qy qz\n",[88,101319,101317],{"__ignoreMap":26},[21,101321,101322,101323,101326,101327,101330],{},"表示一个自由刚体的位置和姿态。其中 ",[88,101324,101325],{},"x y z"," 是位置，",[88,101328,101329],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[190,101332,101334],{"id":101333},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[21,101336,101337],{},"新建文件:",[82,101339,101341],{"className":84,"code":101340,"language":86,"meta":26,"style":26},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[88,101342,101343,101353,101360],{"__ignoreMap":26},[91,101344,101345,101348,101350],{"class":93,"line":94},[91,101346,101347],{"class":97},"mkdir",[91,101349,29335],{"class":105},[91,101351,101352],{"class":101}," mujoco_tutorial\n",[91,101354,101355,101358],{"class":93,"line":38},[91,101356,101357],{"class":105},"cd",[91,101359,101352],{"class":101},[91,101361,101362,101365],{"class":93,"line":1304},[91,101363,101364],{"class":97},"touch",[91,101366,101367],{"class":101}," ch1_first_sim.py\n",[21,101369,101370],{},"写入:",[82,101372,101374],{"className":30459,"code":101373,"language":30461,"meta":26,"style":26},"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",[88,101375,101376,101383,101387,101391,101401,101406,101411,101415,101420,101425,101429,101434,101439,101444,101449,101454,101459,101463,101467,101471,101484,101498,101508,101512,101524,101536,101548,101560,101572,101576,101593,101598,101602,101613,101624,101628,101632,101646],{"__ignoreMap":26},[91,101377,101378,101380],{"class":93,"line":94},[91,101379,30473],{"class":153},[91,101381,101382],{"class":250}," mujoco\n",[91,101384,101385],{"class":93,"line":38},[91,101386,2523],{"emptyLinePlaceholder":175},[91,101388,101389],{"class":93,"line":1304},[91,101390,2523],{"emptyLinePlaceholder":175},[91,101392,101393,101396,101398],{"class":93,"line":1319},[91,101394,101395],{"class":105},"XML",[91,101397,13687],{"class":153},[91,101399,101400],{"class":101}," \"\"\"\n",[91,101402,101403],{"class":93,"line":1325},[91,101404,101405],{"class":101},"\u003Cmujoco model=\"first_sim\">\n",[91,101407,101408],{"class":93,"line":1339},[91,101409,101410],{"class":101},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[91,101412,101413],{"class":93,"line":1345},[91,101414,2523],{"emptyLinePlaceholder":175},[91,101416,101417],{"class":93,"line":1436},[91,101418,101419],{"class":101},"  \u003Cworldbody>\n",[91,101421,101422],{"class":93,"line":1442},[91,101423,101424],{"class":101},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[91,101426,101427],{"class":93,"line":1454},[91,101428,2523],{"emptyLinePlaceholder":175},[91,101430,101431],{"class":93,"line":1736},[91,101432,101433],{"class":101},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[91,101435,101436],{"class":93,"line":1741},[91,101437,101438],{"class":101},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[91,101440,101441],{"class":93,"line":1747},[91,101442,101443],{"class":101},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[91,101445,101446],{"class":93,"line":1752},[91,101447,101448],{"class":101},"    \u003C\u002Fbody>\n",[91,101450,101451],{"class":93,"line":1766},[91,101452,101453],{"class":101},"  \u003C\u002Fworldbody>\n",[91,101455,101456],{"class":93,"line":1771},[91,101457,101458],{"class":101},"\u003C\u002Fmujoco>\n",[91,101460,101461],{"class":93,"line":1777},[91,101462,95779],{"class":101},[91,101464,101465],{"class":93,"line":1798},[91,101466,2523],{"emptyLinePlaceholder":175},[91,101468,101469],{"class":93,"line":1803},[91,101470,2523],{"emptyLinePlaceholder":175},[91,101472,101473,101475,101477,101480,101482],{"class":93,"line":1817},[91,101474,32028],{"class":153},[91,101476,2096],{"class":97},[91,101478,101479],{"class":250},"() -> ",[91,101481,95767],{"class":105},[91,101483,3862],{"class":250},[91,101485,101486,101489,101491,101494,101496],{"class":93,"line":1822},[91,101487,101488],{"class":250},"    model ",[91,101490,296],{"class":153},[91,101492,101493],{"class":250}," mujoco.MjModel.from_xml_string(",[91,101495,101395],{"class":105},[91,101497,257],{"class":250},[91,101499,101500,101503,101505],{"class":93,"line":1851},[91,101501,101502],{"class":250},"    data ",[91,101504,296],{"class":153},[91,101506,101507],{"class":250}," mujoco.MjData(model)\n",[91,101509,101510],{"class":93,"line":1856},[91,101511,2523],{"emptyLinePlaceholder":175},[91,101513,101514,101516,101518,101521],{"class":93,"line":1873},[91,101515,31380],{"class":105},[91,101517,251],{"class":250},[91,101519,101520],{"class":101},"\"nq:\"",[91,101522,101523],{"class":250},", model.nq)\n",[91,101525,101526,101528,101530,101533],{"class":93,"line":1878},[91,101527,31380],{"class":105},[91,101529,251],{"class":250},[91,101531,101532],{"class":101},"\"nv:\"",[91,101534,101535],{"class":250},", model.nv)\n",[91,101537,101538,101540,101542,101545],{"class":93,"line":1883},[91,101539,31380],{"class":105},[91,101541,251],{"class":250},[91,101543,101544],{"class":101},"\"nu:\"",[91,101546,101547],{"class":250},", model.nu)\n",[91,101549,101550,101552,101554,101557],{"class":93,"line":1888},[91,101551,31380],{"class":105},[91,101553,251],{"class":250},[91,101555,101556],{"class":101},"\"initial time:\"",[91,101558,101559],{"class":250},", data.time)\n",[91,101561,101562,101564,101566,101569],{"class":93,"line":1902},[91,101563,31380],{"class":105},[91,101565,251],{"class":250},[91,101567,101568],{"class":101},"\"initial qpos:\"",[91,101570,101571],{"class":250},", data.qpos.copy())\n",[91,101573,101574],{"class":93,"line":1907},[91,101575,2523],{"emptyLinePlaceholder":175},[91,101577,101578,101580,101583,101585,101587,101589,101591],{"class":93,"line":2700},[91,101579,3324],{"class":153},[91,101581,101582],{"class":250}," _ ",[91,101584,26165],{"class":153},[91,101586,32524],{"class":105},[91,101588,251],{"class":250},[91,101590,560],{"class":105},[91,101592,30867],{"class":250},[91,101594,101595],{"class":93,"line":2714},[91,101596,101597],{"class":250},"        mujoco.mj_step(model, data)\n",[91,101599,101600],{"class":93,"line":2722},[91,101601,2523],{"emptyLinePlaceholder":175},[91,101603,101604,101606,101608,101611],{"class":93,"line":2727},[91,101605,31380],{"class":105},[91,101607,251],{"class":250},[91,101609,101610],{"class":101},"\"final time:\"",[91,101612,101559],{"class":250},[91,101614,101615,101617,101619,101622],{"class":93,"line":2733},[91,101616,31380],{"class":105},[91,101618,251],{"class":250},[91,101620,101621],{"class":101},"\"final qpos:\"",[91,101623,101571],{"class":250},[91,101625,101626],{"class":93,"line":2739},[91,101627,2523],{"emptyLinePlaceholder":175},[91,101629,101630],{"class":93,"line":2744},[91,101631,2523],{"emptyLinePlaceholder":175},[91,101633,101634,101636,101638,101641,101644],{"class":93,"line":8071},[91,101635,1655],{"class":153},[91,101637,31301],{"class":105},[91,101639,101640],{"class":153}," ==",[91,101642,101643],{"class":101}," \"__main__\"",[91,101645,3862],{"class":250},[91,101647,101648],{"class":93,"line":8095},[91,101649,101650],{"class":250},"    main()\n",[217,101652,101653],{"id":101653},"代码逐段解释",[21,101655,101656],{},"导入库：",[82,101658,101660],{"className":30459,"code":101659,"language":30461,"meta":26,"style":26},"import mujoco\n",[88,101661,101662],{"__ignoreMap":26},[91,101663,101664,101666],{"class":93,"line":94},[91,101665,30473],{"class":153},[91,101667,101382],{"class":250},[21,101669,101670],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[21,101672,101673],{},"定义 XML：",[82,101675,101677],{"className":30459,"code":101676,"language":30461,"meta":26,"style":26},"XML = \"\"\"\n...\n\"\"\"\n",[88,101678,101679,101687,101692],{"__ignoreMap":26},[91,101680,101681,101683,101685],{"class":93,"line":94},[91,101682,101395],{"class":105},[91,101684,13687],{"class":153},[91,101686,101400],{"class":101},[91,101688,101689],{"class":93,"line":38},[91,101690,101691],{"class":101},"...\n",[91,101693,101694],{"class":93,"line":1304},[91,101695,95779],{"class":101},[21,101697,101698,101699,101702],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[88,101700,101701],{},"freejoint"," 的方块。",[21,101704,101705],{},"编译模型：",[82,101707,101709],{"className":30459,"code":101708,"language":30461,"meta":26,"style":26},"model = mujoco.MjModel.from_xml_string(XML)\n",[88,101710,101711],{"__ignoreMap":26},[91,101712,101713,101716,101718,101720,101722],{"class":93,"line":94},[91,101714,101715],{"class":250},"model ",[91,101717,296],{"class":153},[91,101719,101493],{"class":250},[91,101721,101395],{"class":105},[91,101723,257],{"class":250},[21,101725,101726],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[21,101728,101729],{},"创建数据：",[82,101731,101733],{"className":30459,"code":101732,"language":30461,"meta":26,"style":26},"data = mujoco.MjData(model)\n",[88,101734,101735],{"__ignoreMap":26},[91,101736,101737,101740,101742],{"class":93,"line":94},[91,101738,101739],{"class":250},"data ",[91,101741,296],{"class":153},[91,101743,101507],{"class":250},[21,101745,101746,101748,101749,101751],{},[88,101747,33482],{}," 会保存仿真当前状态。刚创建时，时间是 ",[88,101750,440],{},"，方块还在初始位置。",[21,101753,101754],{},"推进仿真：",[82,101756,101758],{"className":30459,"code":101757,"language":30461,"meta":26,"style":26},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[88,101759,101760,101776],{"__ignoreMap":26},[91,101761,101762,101764,101766,101768,101770,101772,101774],{"class":93,"line":94},[91,101763,3148],{"class":153},[91,101765,101582],{"class":250},[91,101767,26165],{"class":153},[91,101769,32524],{"class":105},[91,101771,251],{"class":250},[91,101773,560],{"class":105},[91,101775,30867],{"class":250},[91,101777,101778],{"class":93,"line":38},[91,101779,101780],{"class":250},"    mujoco.mj_step(model, data)\n",[21,101782,101783,101784,101786],{},"每次 ",[88,101785,101296],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[217,101788,101789],{"id":101789},"代码逐行细讲",[21,101791,101792],{},"下面把完整代码按新手视角拆开讲。",[82,101794,101795],{"className":30459,"code":101659,"language":30461,"meta":26,"style":26},[88,101796,101797],{"__ignoreMap":26},[91,101798,101799,101801],{"class":93,"line":94},[91,101800,30473],{"class":153},[91,101802,101382],{"class":250},[21,101804,101805,101807,101808,461,101810,461,101812,28504],{},[88,101806,30473],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[88,101809,100756],{},[88,101811,100761],{},[88,101813,101814],{},"mujoco.mj_step",[82,101816,101817],{"className":30459,"code":101676,"language":30461,"meta":26,"style":26},[88,101818,101819,101827,101831],{"__ignoreMap":26},[91,101820,101821,101823,101825],{"class":93,"line":94},[91,101822,101395],{"class":105},[91,101824,13687],{"class":153},[91,101826,101400],{"class":101},[91,101828,101829],{"class":93,"line":38},[91,101830,101691],{"class":101},[91,101832,101833],{"class":93,"line":1304},[91,101834,95779],{"class":101},[21,101836,101837,101839,101840,101843],{},[88,101838,101395],{}," 是一个变量名。右边的三引号 ",[88,101841,101842],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[82,101845,101846],{"className":53148,"code":101405,"language":53150,"meta":26,"style":26},[88,101847,101848],{"__ignoreMap":26},[91,101849,101850,101852,101854,101857,101859,101862],{"class":93,"line":94},[91,101851,1159],{"class":250},[91,101853,101102],{"class":51381},[91,101855,101856],{"class":97}," model",[91,101858,296],{"class":250},[91,101860,101861],{"class":101},"\"first_sim\"",[91,101863,51388],{"class":250},[21,101865,101866,101867,101870,101871,28504],{},"这是 XML 的根标签。",[88,101868,101869],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[88,101872,101873],{},"first_sim",[82,101875,101876],{"className":53148,"code":101264,"language":53150,"meta":26,"style":26},[88,101877,101878],{"__ignoreMap":26},[91,101879,101880,101882,101884,101886,101888,101890,101892,101894,101896],{"class":93,"line":94},[91,101881,1159],{"class":250},[91,101883,69247],{"class":51381},[91,101885,101275],{"class":97},[91,101887,296],{"class":250},[91,101889,101280],{"class":101},[91,101891,101283],{"class":97},[91,101893,296],{"class":250},[91,101895,101288],{"class":101},[91,101897,101225],{"class":250},[21,101899,101900,101902,101903,101906,101907,101910],{},[88,101901,69247],{}," 用来设置仿真参数。",[88,101904,101905],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[88,101908,101909],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[82,101912,101914],{"className":53148,"code":101913,"language":53150,"meta":26,"style":26},"\u003Cworldbody>\n",[88,101915,101916],{"__ignoreMap":26},[91,101917,101918,101920,101923],{"class":93,"line":94},[91,101919,1159],{"class":250},[91,101921,101922],{"class":51381},"worldbody",[91,101924,51388],{"class":250},[21,101926,101927,101929],{},[88,101928,101922],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[82,101931,101933],{"className":53148,"code":101932,"language":53150,"meta":26,"style":26},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[88,101934,101935],{"__ignoreMap":26},[91,101936,101937,101939,101941,101943,101945,101948,101950,101952,101955,101957,101959,101962,101964,101966,101969],{"class":93,"line":94},[91,101938,1159],{"class":250},[91,101940,101201],{"class":51381},[91,101942,15043],{"class":97},[91,101944,296],{"class":250},[91,101946,101947],{"class":101},"\"floor\"",[91,101949,53905],{"class":97},[91,101951,296],{"class":250},[91,101953,101954],{"class":101},"\"plane\"",[91,101956,101217],{"class":97},[91,101958,296],{"class":250},[91,101960,101961],{"class":101},"\"2 2 0.1\"",[91,101963,78848],{"class":97},[91,101965,296],{"class":250},[91,101967,101968],{"class":101},"\"0.8 0.8 0.8 1\"",[91,101970,101225],{"class":250},[21,101972,101973,101974,101976,101977,101980,101981,101984,101985,101987],{},"这行创建地面。",[88,101975,101201],{}," 是几何体。",[88,101978,101979],{},"name=\"floor\""," 是名字。",[88,101982,101983],{},"type=\"plane\""," 表示平面。",[88,101986,55191],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[82,101989,101991],{"className":53148,"code":101990,"language":53150,"meta":26,"style":26},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[88,101992,101993],{"__ignoreMap":26},[91,101994,101995,101997,101999,102001,102003,102005,102007,102009,102011],{"class":93,"line":94},[91,101996,1159],{"class":250},[91,101998,51881],{"class":51381},[91,102000,15043],{"class":97},[91,102002,296],{"class":250},[91,102004,53572],{"class":101},[91,102006,101187],{"class":97},[91,102008,296],{"class":250},[91,102010,101192],{"class":101},[91,102012,51388],{"class":250},[21,102014,102015,102016,28504,102018,102021,102022,102024],{},"这行创建一个刚体，名字叫 ",[88,102017,53795],{},[88,102019,102020],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[88,102023,101250],{},"，也就是离地面 1 米高。",[82,102026,102028],{"className":53148,"code":102027,"language":53150,"meta":26,"style":26},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[88,102029,102030],{"__ignoreMap":26},[91,102031,102032,102034,102036,102038,102040,102043],{"class":93,"line":94},[91,102033,1159],{"class":250},[91,102035,101701],{"class":51381},[91,102037,15043],{"class":97},[91,102039,296],{"class":250},[91,102041,102042],{"class":101},"\"box_free\"",[91,102044,101225],{"class":250},[21,102046,102047,102048,102050],{},"这行很重要。",[88,102049,101701],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[82,102052,102054],{"className":53148,"code":102053,"language":53150,"meta":26,"style":26},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[88,102055,102056],{"__ignoreMap":26},[91,102057,102058,102060,102062,102064,102066,102068,102070,102072,102074,102076,102078,102080,102083,102085,102087,102089,102091,102094],{"class":93,"line":94},[91,102059,1159],{"class":250},[91,102061,101201],{"class":51381},[91,102063,15043],{"class":97},[91,102065,296],{"class":250},[91,102067,101208],{"class":101},[91,102069,53905],{"class":97},[91,102071,296],{"class":250},[91,102073,53572],{"class":101},[91,102075,101217],{"class":97},[91,102077,296],{"class":250},[91,102079,101222],{"class":101},[91,102081,102082],{"class":97}," mass",[91,102084,296],{"class":250},[91,102086,3801],{"class":101},[91,102088,78848],{"class":97},[91,102090,296],{"class":250},[91,102092,102093],{"class":101},"\"1 0 0 1\"",[91,102095,101225],{"class":250},[21,102097,102098,102099,102102,102103,102106,102107,102110,102111,102114],{},"这行给 box body 添加一个盒子形状。",[88,102100,102101],{},"type=\"box\""," 表示形状是盒子。",[88,102104,102105],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[88,102108,102109],{},"mass=\"1\""," 表示质量是 1。",[88,102112,102113],{},"rgba=\"1 0 0 1\""," 表示红色。",[82,102116,102118],{"className":30459,"code":102117,"language":30461,"meta":26,"style":26},"def main() -> None:\n",[88,102119,102120],{"__ignoreMap":26},[91,102121,102122,102124,102126,102128,102130],{"class":93,"line":94},[91,102123,32028],{"class":153},[91,102125,2096],{"class":97},[91,102127,101479],{"class":250},[91,102129,95767],{"class":105},[91,102131,3862],{"class":250},[21,102133,102134,102136,102137,102140,102141,102144],{},[88,102135,32028],{}," 用来定义函数。这里定义了一个叫 ",[88,102138,102139],{},"main"," 的函数。",[88,102142,102143],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[82,102146,102147],{"className":30459,"code":101708,"language":30461,"meta":26,"style":26},[88,102148,102149],{"__ignoreMap":26},[91,102150,102151,102153,102155,102157,102159],{"class":93,"line":94},[91,102152,101715],{"class":250},[91,102154,296],{"class":153},[91,102156,101493],{"class":250},[91,102158,101395],{"class":105},[91,102160,257],{"class":250},[21,102162,102163,102164,102167],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[88,102165,102166],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[82,102169,102170],{"className":30459,"code":101732,"language":30461,"meta":26,"style":26},[88,102171,102172],{"__ignoreMap":26},[91,102173,102174,102176,102178],{"class":93,"line":94},[91,102175,101739],{"class":250},[91,102177,296],{"class":153},[91,102179,101507],{"class":250},[21,102181,102182,102183,102185,102186,102188],{},"这行创建仿真数据。",[88,102184,33482],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[88,102187,33482],{}," 都会变化。",[82,102190,102192],{"className":30459,"code":102191,"language":30461,"meta":26,"style":26},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[88,102193,102194,102204,102214],{"__ignoreMap":26},[91,102195,102196,102198,102200,102202],{"class":93,"line":94},[91,102197,30496],{"class":105},[91,102199,251],{"class":250},[91,102201,101520],{"class":101},[91,102203,101523],{"class":250},[91,102205,102206,102208,102210,102212],{"class":93,"line":38},[91,102207,30496],{"class":105},[91,102209,251],{"class":250},[91,102211,101532],{"class":101},[91,102213,101535],{"class":250},[91,102215,102216,102218,102220,102222],{"class":93,"line":1304},[91,102217,30496],{"class":105},[91,102219,251],{"class":250},[91,102221,101544],{"class":101},[91,102223,101547],{"class":250},[21,102225,102226,102228,102229,102232,102233,102236,102237,102240,102241,102244],{},[88,102227,30496],{}," 用来输出信息。",[88,102230,102231],{},"model.nq"," 是位置变量数量，",[88,102234,102235],{},"model.nv"," 是速度变量数量，",[88,102238,102239],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[88,102242,102243],{},"nu"," 是 0。",[82,102246,102248],{"className":30459,"code":102247,"language":30461,"meta":26,"style":26},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[88,102249,102250,102260],{"__ignoreMap":26},[91,102251,102252,102254,102256,102258],{"class":93,"line":94},[91,102253,30496],{"class":105},[91,102255,251],{"class":250},[91,102257,101556],{"class":101},[91,102259,101559],{"class":250},[91,102261,102262,102264,102266,102268],{"class":93,"line":38},[91,102263,30496],{"class":105},[91,102265,251],{"class":250},[91,102267,101568],{"class":101},[91,102269,101571],{"class":250},[21,102271,102272,102273,102275,102276,102278,102279,102282],{},"这里打印初始时间和初始位置。",[88,102274,101148],{}," 一开始是 0。",[88,102277,101151],{}," 是位置数组。",[88,102280,102281],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[82,102284,102285],{"className":30459,"code":101757,"language":30461,"meta":26,"style":26},[88,102286,102287,102303],{"__ignoreMap":26},[91,102288,102289,102291,102293,102295,102297,102299,102301],{"class":93,"line":94},[91,102290,3148],{"class":153},[91,102292,101582],{"class":250},[91,102294,26165],{"class":153},[91,102296,32524],{"class":105},[91,102298,251],{"class":250},[91,102300,560],{"class":105},[91,102302,30867],{"class":250},[91,102304,102305],{"class":93,"line":38},[91,102306,101780],{"class":250},[21,102308,102309,102311,102312,102315,102316,102318,102319,102321],{},[88,102310,3148],{}," 是循环。",[88,102313,102314],{},"range(100)"," 表示循环 100 次。",[88,102317,1241],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[88,102320,101296],{},"，仿真就前进一步。",[82,102323,102325],{"className":30459,"code":102324,"language":30461,"meta":26,"style":26},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[88,102326,102327,102337],{"__ignoreMap":26},[91,102328,102329,102331,102333,102335],{"class":93,"line":94},[91,102330,30496],{"class":105},[91,102332,251],{"class":250},[91,102334,101610],{"class":101},[91,102336,101559],{"class":250},[91,102338,102339,102341,102343,102345],{"class":93,"line":38},[91,102340,30496],{"class":105},[91,102342,251],{"class":250},[91,102344,101621],{"class":101},[91,102346,101571],{"class":250},[21,102348,102349],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[82,102351,102353],{"className":30459,"code":102352,"language":30461,"meta":26,"style":26},"if __name__ == \"__main__\":\n    main()\n",[88,102354,102355,102367],{"__ignoreMap":26},[91,102356,102357,102359,102361,102363,102365],{"class":93,"line":94},[91,102358,1655],{"class":153},[91,102360,31301],{"class":105},[91,102362,101640],{"class":153},[91,102364,101643],{"class":101},[91,102366,3862],{"class":250},[91,102368,102369],{"class":93,"line":38},[91,102370,101650],{"class":250},[21,102372,102373,102374,102377,102378,28504],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[88,102375,102376],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[88,102379,102376],{},[21,102381,102382],{},"运行:",[82,102384,102386],{"className":84,"code":102385,"language":86,"meta":26,"style":26},"python ch1_first_sim.py\n",[88,102387,102388],{"__ignoreMap":26},[91,102389,102390,102392],{"class":93,"line":94},[91,102391,30461],{"class":97},[91,102393,101367],{"class":101},[190,102395,102397],{"id":102396},"_5运行结果说明","5.运行结果说明",[21,102399,102400],{},"你应该看到类似输出:",[82,102402,102405],{"className":102403,"code":102404,"language":5310,"meta":26},[5308],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[88,102406,102404],{"__ignoreMap":26},[21,102408,102409,102411,102412,102415,102416,28504],{},[88,102410,101701],{}," 有 7 个位置变量: ",[88,102413,102414],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[88,102417,102418],{},"vx vy vz wx wy wz",[21,102420,102421,102422,102425],{},"你还会看到 ",[88,102423,102424],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[190,102427,102429],{"id":102428},"_6验证步骤","6.验证步骤",[21,102431,102432],{},"确认版本:",[82,102434,102435],{"className":84,"code":101020,"language":86,"meta":26,"style":26},[88,102436,102437],{"__ignoreMap":26},[91,102438,102439,102441,102443],{"class":93,"line":94},[91,102440,30461],{"class":97},[91,102442,30439],{"class":105},[91,102444,101031],{"class":101},[21,102446,102447],{},"确认导入的是官方 bindings:",[82,102449,102451],{"className":84,"code":102450,"language":86,"meta":26,"style":26},"python -c \"import mujoco; print(mujoco)\"\n",[88,102452,102453],{"__ignoreMap":26},[91,102454,102455,102457,102459],{"class":93,"line":94},[91,102456,30461],{"class":97},[91,102458,30439],{"class":105},[91,102460,102461],{"class":101}," \"import mujoco; print(mujoco)\"\n",[21,102463,102464],{},"运行程序:",[82,102466,102467],{"className":84,"code":102385,"language":86,"meta":26,"style":26},[88,102468,102469],{"__ignoreMap":26},[91,102470,102471,102473],{"class":93,"line":94},[91,102472,30461],{"class":97},[91,102474,101367],{"class":101},[21,102476,102477,102478,102481,102482,28504],{},"检查 ",[88,102479,102480],{},"final time"," 是否约等于 ",[88,102483,102484],{},"1.0",[21,102486,102487],{},"再做几个小实验：",[14,102489,102490,102500,102508,102521],{},[17,102491,102492,102493,102495,102496,102499],{},"把 ",[88,102494,102020],{}," 改成 ",[88,102497,102498],{},"pos=\"0 0 2\"","，观察初始高度变化。",[17,102501,102492,102502,102495,102504,102507],{},[88,102503,101909],{},[88,102505,102506],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[17,102509,102492,102510,102495,102512,102515,102516,102518,102519,28504],{},[88,102511,101905],{},[88,102513,102514],{},"timestep=\"0.005\"","，观察 100 步后的 ",[88,102517,102480],{}," 是否变成约 ",[88,102520,35410],{},[17,102522,102523,102524,102527],{},"删除 ",[88,102525,102526],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[21,102529,102530],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[190,102532,102534],{"id":102533},"_7常见错误与解决方案","7.常见错误与解决方案",[217,102536,102538],{"id":102537},"modulenotfounderror-no-module-named-mujoco",[88,102539,102540],{},"ModuleNotFoundError: No module named 'mujoco'",[21,102542,102543],{},"解决:",[82,102545,102547],{"className":84,"code":102546,"language":86,"meta":26,"style":26},"pip install \"mujoco>=2.3\"\n",[88,102548,102549],{"__ignoreMap":26},[91,102550,102551,102553,102555],{"class":93,"line":94},[91,102552,23953],{"class":97},[91,102554,23956],{"class":101},[91,102556,102557],{"class":101}," \"mujoco>=2.3\"\n",[217,102559,102561],{"id":102560},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[21,102563,102564],{},"先安装系统依赖:",[82,102566,102568],{"className":84,"code":102567,"language":86,"meta":26,"style":26},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[88,102569,102570],{"__ignoreMap":26},[91,102571,102572,102574,102576,102578,102580,102583,102585,102588,102590,102593,102595],{"class":93,"line":94},[91,102573,24699],{"class":97},[91,102575,26437],{"class":101},[91,102577,23956],{"class":101},[91,102579,26522],{"class":105},[91,102581,102582],{"class":101}," mesa-libGL",[91,102584,100895],{"class":101},[91,102586,102587],{"class":101}," glfw",[91,102589,100915],{"class":101},[91,102591,102592],{"class":101}," libX11",[91,102594,100928],{"class":101},[91,102596,102597],{"class":101}," libXrandr\n",[217,102599,102601],{"id":102600},"xml-解析失败","XML 解析失败",[21,102603,102604],{},"检查:",[14,102606,102607,102610,102613,102619],{},[17,102608,102609],{},"标签是否闭合",[17,102611,102612],{},"属性是否带引号",[17,102614,102615,102616],{},"根节点是否是 ",[88,102617,102618],{},"\u003Cmujoco>",[17,102620,102621,102623,102624,102627],{},[88,102622,51881],{}," 是否放在 ",[88,102625,102626],{},"\u003Cworldbody>"," 内部",[217,102629,102631,102633,102634],{"id":102630},"final-time-不是严格等于-10",[88,102632,102480],{}," 不是严格等于 ",[88,102635,102484],{},[21,102637,102638],{},"这通常不是错误。浮点数计算可能得到：",[82,102640,102643],{"className":102641,"code":102642,"language":5310,"meta":26},[5308],"1.0000000000000007\n",[88,102644,102642],{"__ignoreMap":26},[21,102646,102647,102648,102650],{},"只要接近 ",[88,102649,102484],{}," 就正常。",[217,102652,102653],{"id":102653},"方块没有掉下来",[21,102655,102656],{},"检查：",[14,102658,102659,102665,102671,102676],{},[17,102660,102661,102662],{},"方块 body 里是否有 ",[88,102663,102664],{},"\u003Cfreejoint\u002F>",[17,102666,102667,102668],{},"重力是否是 ",[88,102669,102670],{},"0 0 -9.81",[17,102672,102673,102674],{},"是否真的调用了 ",[88,102675,100766],{},[17,102677,102678,102679,102681,102682],{},"你看的是否是 ",[88,102680,102424],{},"，不是 ",[88,102683,102684],{},"initial qpos",[190,102686,102688],{"id":102687},"_8本章小结","8.本章小结",[21,102690,102691],{},"本章你已经完成了 MuJoCo 的最小闭环：",[82,102693,102696],{"className":102694,"code":102695,"language":5310,"meta":26},[5308],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[88,102697,102695],{"__ignoreMap":26},[21,102699,102700],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[168,102702,102703],{},"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":26,"searchDepth":38,"depth":38,"links":102705},[102706,102707,102708,102713,102717,102718,102719,102727],{"id":100727,"depth":38,"text":100728},{"id":100850,"depth":38,"text":100851},{"id":101125,"depth":38,"text":101126,"children":102709},[102710,102711,102712],{"id":101163,"depth":1304,"text":101164},{"id":101257,"depth":1304,"text":101258},{"id":101309,"depth":1304,"text":101310},{"id":101333,"depth":38,"text":101334,"children":102714},[102715,102716],{"id":101653,"depth":1304,"text":101653},{"id":101789,"depth":1304,"text":101789},{"id":102396,"depth":38,"text":102397},{"id":102428,"depth":38,"text":102429},{"id":102533,"depth":38,"text":102534,"children":102720},[102721,102722,102723,102724,102726],{"id":102537,"depth":1304,"text":102540},{"id":102560,"depth":1304,"text":102561},{"id":102600,"depth":1304,"text":102601},{"id":102630,"depth":1304,"text":102725},"final time 不是严格等于 1.0",{"id":102653,"depth":1304,"text":102653},{"id":102687,"depth":38,"text":102688},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100719,"description":26},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102734,"title":102735,"body":102736,"description":26,"extension":173,"meta":104392,"navigation":175,"path":104393,"seo":104394,"stem":104395,"__hash__":104396},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102737,"toc":104368},[102738,102741,102743,102746,102749,102766,102861,102864,102870,102872,102874,102898,102901,102915,102918,102959,102961,102974,102976,102979,103027,103039,103042,103045,103051,103064,103131,103134,103153,103156,103159,103165,103167,103176,103179,103183,103192,103274,103283,103287,103293,103307,103317,103319,103649,103652,103664,103666,103677,103679,103682,103700,103703,103706,103724,103735,103738,103753,103763,103765,103786,103803,103823,103829,103869,103885,103901,103907,103910,103934,103950,103955,103985,104002,104027,104030,104045,104054,104069,104078,104093,104100,104102,104112,104125,104132,104135,104174,104181,104183,104235,104237,104243,104246,104253,104260,104263,104265,104283,104286,104289,104323,104335,104337,104340,104362,104365],[10,102739,102735],{"id":102740},"_2xml-与-mjcf-物理建模基础",[190,102742,100728],{"id":100727},[21,102744,102745],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[21,102747,102748],{},"本章结束后，你应该能看懂一个简单模型里：",[14,102750,102751,102754,102757,102760,102763],{},[17,102752,102753],{},"地面在哪里。",[17,102755,102756],{},"物体初始位置在哪里。",[17,102758,102759],{},"几何体是什么形状。",[17,102761,102762],{},"哪些 body 可以自由运动。",[17,102764,102765],{},"如何用名字在 Python 里找到 XML 中的对象。",[386,102767,102768,102778],{},[389,102769,102770],{},[392,102771,102772,102775],{},[395,102773,102774],{"align":23860},"标签",[395,102776,102777],{"align":23860},"作用",[433,102779,102780,102789,102799,102808,102818,102828,102841,102851],{},[392,102781,102782,102786],{},[438,102783,102784],{"align":23860},[88,102785,102618],{},[438,102787,102788],{"align":23860},"根节点",[392,102790,102791,102796],{},[438,102792,102793],{"align":23860},[88,102794,102795],{},"\u003Coption>",[438,102797,102798],{"align":23860},"仿真参数",[392,102800,102801,102805],{},[438,102802,102803],{"align":23860},[88,102804,102626],{},[438,102806,102807],{"align":23860},"世界中的物体",[392,102809,102810,102815],{},[438,102811,102812],{"align":23860},[88,102813,102814],{},"\u003Cbody>",[438,102816,102817],{"align":23860},"刚体",[392,102819,102820,102825],{},[438,102821,102822],{"align":23860},[88,102823,102824],{},"\u003Cgeom>",[438,102826,102827],{"align":23860},"几何体、碰撞体、可视体",[392,102829,102830,102838],{},[438,102831,102832,25101,102835],{"align":23860},[88,102833,102834],{},"\u003Cjoint>",[88,102836,102837],{},"\u003Cfreejoint>",[438,102839,102840],{"align":23860},"关节",[392,102842,102843,102848],{},[438,102844,102845],{"align":23860},[88,102846,102847],{},"\u003Csite>",[438,102849,102850],{"align":23860},"标记点",[392,102852,102853,102858],{},[438,102854,102855],{"align":23860},[88,102856,102857],{},"\u003Cactuator>",[438,102859,102860],{"align":23860},"控制器",[21,102862,102863],{},"初学时可以先记住：",[82,102865,102868],{"className":102866,"code":102867,"language":5310,"meta":26},[5308],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[88,102869,102867],{"__ignoreMap":26},[190,102871,100851],{"id":100850},[21,102873,100854],{},[82,102875,102877],{"className":84,"code":102876,"language":86,"meta":26,"style":26},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[88,102878,102879],{"__ignoreMap":26},[91,102880,102881,102883,102885,102887,102889,102891,102893,102895],{"class":93,"line":94},[91,102882,24699],{"class":97},[91,102884,26437],{"class":101},[91,102886,23956],{"class":101},[91,102888,26522],{"class":105},[91,102890,102582],{"class":101},[91,102892,100895],{"class":101},[91,102894,102587],{"class":101},[91,102896,102897],{"class":101}," glfw-devel\n",[21,102899,102900],{},"pip:",[82,102902,102903],{"className":84,"code":101000,"language":86,"meta":26,"style":26},[88,102904,102905],{"__ignoreMap":26},[91,102906,102907,102909,102911,102913],{"class":93,"line":94},[91,102908,23953],{"class":97},[91,102910,23956],{"class":101},[91,102912,101011],{"class":101},[91,102914,101014],{"class":101},[21,102916,102917],{},"conda:",[82,102919,102921],{"className":84,"code":102920,"language":86,"meta":26,"style":26},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[88,102922,102923,102940,102949],{"__ignoreMap":26},[91,102924,102925,102927,102929,102931,102934,102936,102938],{"class":93,"line":94},[91,102926,30411],{"class":97},[91,102928,29295],{"class":101},[91,102930,25237],{"class":105},[91,102932,102933],{"class":101}," mujoco-xml",[91,102935,101056],{"class":101},[91,102937,101059],{"class":105},[91,102939,101062],{"class":105},[91,102941,102942,102944,102946],{"class":93,"line":38},[91,102943,30411],{"class":97},[91,102945,101069],{"class":101},[91,102947,102948],{"class":101}," mujoco-xml\n",[91,102950,102951,102953,102955,102957],{"class":93,"line":1304},[91,102952,23953],{"class":97},[91,102954,23956],{"class":101},[91,102956,101011],{"class":101},[91,102958,101014],{"class":101},[21,102960,101085],{},[14,102962,102963,102966,102971],{},[17,102964,102965],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[17,102967,102968,102969,28504],{},"本章使用基础标签，适用于 ",[88,102970,101108],{},[17,102972,102973],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[190,102975,101126],{"id":101125},[21,102977,102978],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[82,102980,102982],{"className":53148,"code":102981,"language":53150,"meta":26,"style":26},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[88,102983,102984,102998,103006,103011,103019],{"__ignoreMap":26},[91,102985,102986,102988,102990,102992,102994,102996],{"class":93,"line":94},[91,102987,1159],{"class":250},[91,102989,101102],{"class":51381},[91,102991,101856],{"class":97},[91,102993,296],{"class":250},[91,102995,62760],{"class":101},[91,102997,51388],{"class":250},[91,102999,103000,103002,103004],{"class":93,"line":38},[91,103001,52225],{"class":250},[91,103003,101922],{"class":51381},[91,103005,51388],{"class":250},[91,103007,103008],{"class":93,"line":1304},[91,103009,103010],{"class":250},"    ...\n",[91,103012,103013,103015,103017],{"class":93,"line":1319},[91,103014,52498],{"class":250},[91,103016,101922],{"class":51381},[91,103018,51388],{"class":250},[91,103020,103021,103023,103025],{"class":93,"line":1325},[91,103022,51866],{"class":250},[91,103024,101102],{"class":51381},[91,103026,51388],{"class":250},[21,103028,103029,103031,103032,103034,103035,103038],{},[88,103030,51881],{}," 表示刚体。",[88,103033,101201],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[88,103036,103037],{},"joint"," 表示刚体相对父刚体如何运动。",[217,103040,103041],{"id":103041},"层级结构非常重要",[21,103043,103044],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[82,103046,103049],{"className":103047,"code":103048,"language":5310,"meta":26},[5308],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[88,103050,103048],{"__ignoreMap":26},[21,103052,103053,101099,103056,103059,103060,103063],{},[88,103054,103055],{},"red_box_geom",[88,103057,103058],{},"box_center"," 都属于 ",[88,103061,103062],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[82,103065,103067],{"className":53148,"code":103066,"language":53150,"meta":26,"style":26},"\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",[88,103068,103069,103089,103103,103123],{"__ignoreMap":26},[91,103070,103071,103073,103075,103077,103079,103081,103083,103085,103087],{"class":93,"line":94},[91,103072,1159],{"class":250},[91,103074,51881],{"class":51381},[91,103076,15043],{"class":97},[91,103078,296],{"class":250},[91,103080,53572],{"class":101},[91,103082,101187],{"class":97},[91,103084,296],{"class":250},[91,103086,101192],{"class":101},[91,103088,51388],{"class":250},[91,103090,103091,103093,103095,103097,103099,103101],{"class":93,"line":38},[91,103092,52225],{"class":250},[91,103094,101701],{"class":51381},[91,103096,15043],{"class":97},[91,103098,296],{"class":250},[91,103100,102042],{"class":101},[91,103102,101225],{"class":250},[91,103104,103105,103107,103109,103111,103113,103115,103117,103119,103121],{"class":93,"line":1304},[91,103106,52225],{"class":250},[91,103108,101201],{"class":51381},[91,103110,53905],{"class":97},[91,103112,296],{"class":250},[91,103114,53572],{"class":101},[91,103116,101217],{"class":97},[91,103118,296],{"class":250},[91,103120,101222],{"class":101},[91,103122,101225],{"class":250},[91,103124,103125,103127,103129],{"class":93,"line":1319},[91,103126,51866],{"class":250},[91,103128,51881],{"class":51381},[91,103130,51388],{"class":250},[21,103132,103133],{},"含义:",[14,103135,103136,103142,103147,103150],{},[17,103137,103138,103139,103141],{},"创建名为 ",[88,103140,53795],{}," 的刚体",[17,103143,103144,103145],{},"初始位置在世界坐标 ",[88,103146,101250],{},[17,103148,103149],{},"它有一个自由关节",[17,103151,103152],{},"它有一个盒子几何体",[217,103154,103155],{"id":103155},"坐标怎么理解",[21,103157,103158],{},"MuJoCo 默认使用三维坐标：",[82,103160,103163],{"className":103161,"code":103162,"language":5310,"meta":26},[5308],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[88,103164,103162],{"__ignoreMap":26},[21,103166,14756],{},[82,103168,103170],{"className":53148,"code":103169,"language":53150,"meta":26,"style":26},"pos=\"0 0 1\"\n",[88,103171,103172],{"__ignoreMap":26},[91,103173,103174],{"class":93,"line":94},[91,103175,103169],{"class":250},[21,103177,103178],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[217,103180,103182],{"id":103181},"geom-的-size-怎么理解","geom 的 size 怎么理解",[21,103184,103185,103186,82611,103189,103191],{},"不同 ",[88,103187,103188],{},"type",[88,103190,31577],{}," 含义不同：",[386,103193,103194,103209],{},[389,103195,103196],{},[392,103197,103198,103202,103207],{},[395,103199,103200],{"align":23860},[88,103201,103188],{},[395,103203,103204,103206],{"align":23860},[88,103205,31577],{}," 示例",[395,103208,100781],{"align":23860},[433,103210,103211,103225,103240,103259],{},[392,103212,103213,103217,103222],{},[438,103214,103215],{"align":23860},[88,103216,53795],{},[438,103218,103219],{"align":23860},[88,103220,103221],{},"size=\"0.1 0.2 0.3\"",[438,103223,103224],{"align":23860},"x\u002Fy\u002Fz 半边长，不是完整长度",[392,103226,103227,103232,103237],{},[438,103228,103229],{"align":23860},[88,103230,103231],{},"sphere",[438,103233,103234],{"align":23860},[88,103235,103236],{},"size=\"0.1\"",[438,103238,103239],{"align":23860},"球半径",[392,103241,103242,103247,103252],{},[438,103243,103244],{"align":23860},[88,103245,103246],{},"capsule",[438,103248,103249],{"align":23860},[88,103250,103251],{},"size=\"0.03\"",[438,103253,103254,103255,103258],{"align":23860},"胶囊半径，长度常用 ",[88,103256,103257],{},"fromto"," 指定",[392,103260,103261,103266,103271],{},[438,103262,103263],{"align":23860},[88,103264,103265],{},"plane",[438,103267,103268],{"align":23860},[88,103269,103270],{},"size=\"3 3 0.1\"",[438,103272,103273],{"align":23860},"可视平面大小，通常当地面",[21,103275,103276,103277,103279,103280,103282],{},"最容易踩坑的是 box：",[88,103278,102105],{}," 表示边长大约是 ",[88,103281,32118],{},"，因为 MuJoCo 用的是半边长。",[217,103284,103286],{"id":103285},"site-是什么","site 是什么",[21,103288,103289,103292],{},[88,103290,103291],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[14,103294,103295,103298,103301,103304],{},[17,103296,103297],{},"标记机械臂末端。",[17,103299,103300],{},"标记目标位置。",[17,103302,103303],{},"放传感器或相机参考点。",[17,103305,103306],{},"在 Python 中读取某个关键点的世界坐标。",[21,103308,103309,103310,101099,103313,103316],{},"在后面的 Reacher 任务中，",[88,103311,103312],{},"tip",[88,103314,103315],{},"target"," 就会用 site 表示。",[190,103318,101334],{"id":101333},[82,103320,103322],{"className":30459,"code":103321,"language":30461,"meta":26,"style":26},"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",[88,103323,103324,103330,103340,103344,103348,103356,103361,103365,103369,103373,103378,103382,103387,103392,103397,103402,103406,103410,103414,103418,103422,103426,103438,103450,103458,103462,103477,103492,103496,103509,103524,103537,103550,103554,103570,103574,103578,103589,103601,103613,103625,103629,103633,103645],{"__ignoreMap":26},[91,103325,103326,103328],{"class":93,"line":94},[91,103327,30473],{"class":153},[91,103329,101382],{"class":250},[91,103331,103332,103334,103336,103338],{"class":93,"line":38},[91,103333,30473],{"class":153},[91,103335,31461],{"class":250},[91,103337,31464],{"class":153},[91,103339,31467],{"class":250},[91,103341,103342],{"class":93,"line":1304},[91,103343,2523],{"emptyLinePlaceholder":175},[91,103345,103346],{"class":93,"line":1319},[91,103347,2523],{"emptyLinePlaceholder":175},[91,103349,103350,103352,103354],{"class":93,"line":1325},[91,103351,101395],{"class":105},[91,103353,13687],{"class":153},[91,103355,101400],{"class":101},[91,103357,103358],{"class":93,"line":1339},[91,103359,103360],{"class":101},"\u003Cmujoco model=\"xml_basic\">\n",[91,103362,103363],{"class":93,"line":1345},[91,103364,101410],{"class":101},[91,103366,103367],{"class":93,"line":1436},[91,103368,2523],{"emptyLinePlaceholder":175},[91,103370,103371],{"class":93,"line":1442},[91,103372,101419],{"class":101},[91,103374,103375],{"class":93,"line":1454},[91,103376,103377],{"class":101},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[91,103379,103380],{"class":93,"line":1736},[91,103381,2523],{"emptyLinePlaceholder":175},[91,103383,103384],{"class":93,"line":1741},[91,103385,103386],{"class":101},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[91,103388,103389],{"class":93,"line":1747},[91,103390,103391],{"class":101},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[91,103393,103394],{"class":93,"line":1752},[91,103395,103396],{"class":101},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[91,103398,103399],{"class":93,"line":1766},[91,103400,103401],{"class":101},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[91,103403,103404],{"class":93,"line":1771},[91,103405,101448],{"class":101},[91,103407,103408],{"class":93,"line":1777},[91,103409,101453],{"class":101},[91,103411,103412],{"class":93,"line":1798},[91,103413,101458],{"class":101},[91,103415,103416],{"class":93,"line":1803},[91,103417,95779],{"class":101},[91,103419,103420],{"class":93,"line":1817},[91,103421,2523],{"emptyLinePlaceholder":175},[91,103423,103424],{"class":93,"line":1822},[91,103425,2523],{"emptyLinePlaceholder":175},[91,103427,103428,103430,103432,103434,103436],{"class":93,"line":1851},[91,103429,32028],{"class":153},[91,103431,2096],{"class":97},[91,103433,101479],{"class":250},[91,103435,95767],{"class":105},[91,103437,3862],{"class":250},[91,103439,103440,103442,103444,103446,103448],{"class":93,"line":1856},[91,103441,101488],{"class":250},[91,103443,296],{"class":153},[91,103445,101493],{"class":250},[91,103447,101395],{"class":105},[91,103449,257],{"class":250},[91,103451,103452,103454,103456],{"class":93,"line":1873},[91,103453,101502],{"class":250},[91,103455,296],{"class":153},[91,103457,101507],{"class":250},[91,103459,103460],{"class":93,"line":1878},[91,103461,2523],{"emptyLinePlaceholder":175},[91,103463,103464,103467,103469,103472,103475],{"class":93,"line":1883},[91,103465,103466],{"class":250},"    box_body_id ",[91,103468,296],{"class":153},[91,103470,103471],{"class":250}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[91,103473,103474],{"class":101},"\"red_box\"",[91,103476,257],{"class":250},[91,103478,103479,103482,103484,103487,103490],{"class":93,"line":1888},[91,103480,103481],{"class":250},"    site_id ",[91,103483,296],{"class":153},[91,103485,103486],{"class":250}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[91,103488,103489],{"class":101},"\"box_center\"",[91,103491,257],{"class":250},[91,103493,103494],{"class":93,"line":1902},[91,103495,2523],{"emptyLinePlaceholder":175},[91,103497,103498,103500,103503,103505,103507],{"class":93,"line":1907},[91,103499,3224],{"class":153},[91,103501,103502],{"class":250}," box_body_id ",[91,103504,1159],{"class":153},[91,103506,4216],{"class":105},[91,103508,3862],{"class":250},[91,103510,103511,103514,103517,103519,103522],{"class":93,"line":2700},[91,103512,103513],{"class":153},"        raise",[91,103515,103516],{"class":105}," RuntimeError",[91,103518,251],{"class":250},[91,103520,103521],{"class":101},"\"body red_box not found\"",[91,103523,257],{"class":250},[91,103525,103526,103528,103531,103533,103535],{"class":93,"line":2714},[91,103527,3224],{"class":153},[91,103529,103530],{"class":250}," site_id ",[91,103532,1159],{"class":153},[91,103534,4216],{"class":105},[91,103536,3862],{"class":250},[91,103538,103539,103541,103543,103545,103548],{"class":93,"line":2722},[91,103540,103513],{"class":153},[91,103542,103516],{"class":105},[91,103544,251],{"class":250},[91,103546,103547],{"class":101},"\"site box_center not found\"",[91,103549,257],{"class":250},[91,103551,103552],{"class":93,"line":2727},[91,103553,2523],{"emptyLinePlaceholder":175},[91,103555,103556,103558,103560,103562,103564,103566,103568],{"class":93,"line":2733},[91,103557,3324],{"class":153},[91,103559,101582],{"class":250},[91,103561,26165],{"class":153},[91,103563,32524],{"class":105},[91,103565,251],{"class":250},[91,103567,1846],{"class":105},[91,103569,30867],{"class":250},[91,103571,103572],{"class":93,"line":2739},[91,103573,101597],{"class":250},[91,103575,103576],{"class":93,"line":2744},[91,103577,2523],{"emptyLinePlaceholder":175},[91,103579,103580,103582,103584,103587],{"class":93,"line":8071},[91,103581,31380],{"class":105},[91,103583,251],{"class":250},[91,103585,103586],{"class":101},"\"simulation time:\"",[91,103588,101559],{"class":250},[91,103590,103591,103593,103595,103598],{"class":93,"line":8095},[91,103592,31380],{"class":105},[91,103594,251],{"class":250},[91,103596,103597],{"class":101},"\"box body position:\"",[91,103599,103600],{"class":250},", data.xpos[box_body_id].copy())\n",[91,103602,103603,103605,103607,103610],{"class":93,"line":8100},[91,103604,31380],{"class":105},[91,103606,251],{"class":250},[91,103608,103609],{"class":101},"\"site position:\"",[91,103611,103612],{"class":250},", data.site_xpos[site_id].copy())\n",[91,103614,103615,103617,103619,103622],{"class":93,"line":8106},[91,103616,31380],{"class":105},[91,103618,251],{"class":250},[91,103620,103621],{"class":101},"\"box qpos:\"",[91,103623,103624],{"class":250},", np.array(data.qpos))\n",[91,103626,103627],{"class":93,"line":8133},[91,103628,2523],{"emptyLinePlaceholder":175},[91,103630,103631],{"class":93,"line":8138},[91,103632,2523],{"emptyLinePlaceholder":175},[91,103634,103635,103637,103639,103641,103643],{"class":93,"line":8144},[91,103636,1655],{"class":153},[91,103638,31301],{"class":105},[91,103640,101640],{"class":153},[91,103642,101643],{"class":101},[91,103644,3862],{"class":250},[91,103646,103647],{"class":93,"line":8156},[91,103648,101650],{"class":250},[21,103650,103651],{},"保存为：",[82,103653,103655],{"className":84,"code":103654,"language":86,"meta":26,"style":26},"touch ch2_xml_basic.py\n",[88,103656,103657],{"__ignoreMap":26},[91,103658,103659,103661],{"class":93,"line":94},[91,103660,101364],{"class":97},[91,103662,103663],{"class":101}," ch2_xml_basic.py\n",[21,103665,102382],{},[82,103667,103669],{"className":84,"code":103668,"language":86,"meta":26,"style":26},"python ch2_xml_basic.py\n",[88,103670,103671],{"__ignoreMap":26},[91,103672,103673,103675],{"class":93,"line":94},[91,103674,30461],{"class":97},[91,103676,103663],{"class":101},[217,103678,101653],{"id":101653},[21,103680,103681],{},"用名字查找 body：",[82,103683,103685],{"className":30459,"code":103684,"language":30461,"meta":26,"style":26},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[88,103686,103687],{"__ignoreMap":26},[91,103688,103689,103692,103694,103696,103698],{"class":93,"line":94},[91,103690,103691],{"class":250},"box_body_id ",[91,103693,296],{"class":153},[91,103695,103471],{"class":250},[91,103697,103474],{"class":101},[91,103699,257],{"class":250},[21,103701,103702],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[21,103704,103705],{},"用名字查找 site：",[82,103707,103709],{"className":30459,"code":103708,"language":30461,"meta":26,"style":26},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[88,103710,103711],{"__ignoreMap":26},[91,103712,103713,103716,103718,103720,103722],{"class":93,"line":94},[91,103714,103715],{"class":250},"site_id ",[91,103717,296],{"class":153},[91,103719,103486],{"class":250},[91,103721,103489],{"class":101},[91,103723,257],{"class":250},[21,103725,103726,103727,103730,103731,103734],{},"注意第二个参数是对象类型。查 body 就用 ",[88,103728,103729],{},"mjOBJ_BODY","，查 site 就用 ",[88,103732,103733],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[21,103736,103737],{},"读取世界坐标：",[82,103739,103741],{"className":30459,"code":103740,"language":30461,"meta":26,"style":26},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[88,103742,103743,103748],{"__ignoreMap":26},[91,103744,103745],{"class":93,"line":94},[91,103746,103747],{"class":250},"data.xpos[box_body_id]\n",[91,103749,103750],{"class":93,"line":38},[91,103751,103752],{"class":250},"data.site_xpos[site_id]\n",[21,103754,103755,103758,103759,103762],{},[88,103756,103757],{},"xpos"," 是 body 的世界坐标，",[88,103760,103761],{},"site_xpos"," 是 site 的世界坐标。",[217,103764,101789],{"id":101789},[82,103766,103768],{"className":30459,"code":103767,"language":30461,"meta":26,"style":26},"import mujoco\nimport numpy as np\n",[88,103769,103770,103776],{"__ignoreMap":26},[91,103771,103772,103774],{"class":93,"line":94},[91,103773,30473],{"class":153},[91,103775,101382],{"class":250},[91,103777,103778,103780,103782,103784],{"class":93,"line":38},[91,103779,30473],{"class":153},[91,103781,31461],{"class":250},[91,103783,31464],{"class":153},[91,103785,31467],{"class":250},[21,103787,103788,103789,103792,103793,103796,103797,461,103800,28504],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[88,103790,103791],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[88,103794,103795],{},"as np"," 是习惯写法，后面就可以写 ",[88,103798,103799],{},"np.array(...)",[88,103801,103802],{},"np.round(...)",[82,103804,103805],{"className":30459,"code":101676,"language":30461,"meta":26,"style":26},[88,103806,103807,103815,103819],{"__ignoreMap":26},[91,103808,103809,103811,103813],{"class":93,"line":94},[91,103810,101395],{"class":105},[91,103812,13687],{"class":153},[91,103814,101400],{"class":101},[91,103816,103817],{"class":93,"line":38},[91,103818,101691],{"class":101},[91,103820,103821],{"class":93,"line":1304},[91,103822,95779],{"class":101},[21,103824,103825,103826,28504],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[88,103827,103828],{},"mujoco.MjModel.from_xml_string(XML)",[82,103830,103832],{"className":53148,"code":103831,"language":53150,"meta":26,"style":26},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[88,103833,103834],{"__ignoreMap":26},[91,103835,103836,103838,103840,103842,103844,103846,103848,103850,103853,103855,103857,103860,103862,103864,103867],{"class":93,"line":94},[91,103837,1159],{"class":250},[91,103839,103291],{"class":51381},[91,103841,15043],{"class":97},[91,103843,296],{"class":250},[91,103845,103489],{"class":101},[91,103847,101187],{"class":97},[91,103849,296],{"class":250},[91,103851,103852],{"class":101},"\"0 0 0\"",[91,103854,101217],{"class":97},[91,103856,296],{"class":250},[91,103858,103859],{"class":101},"\"0.03\"",[91,103861,78848],{"class":97},[91,103863,296],{"class":250},[91,103865,103866],{"class":101},"\"0 1 0 1\"",[91,103868,101225],{"class":250},[21,103870,103871,103873,103874,103877,103878,103880,103881,103884],{},[88,103872,103291],{}," 是标记点。",[88,103875,103876],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[88,103879,103251],{}," 表示显示出来的小球大小。",[88,103882,103883],{},"rgba=\"0 1 0 1\""," 表示绿色。",[82,103886,103887],{"className":30459,"code":103684,"language":30461,"meta":26,"style":26},[88,103888,103889],{"__ignoreMap":26},[91,103890,103891,103893,103895,103897,103899],{"class":93,"line":94},[91,103892,103691],{"class":250},[91,103894,296],{"class":153},[91,103896,103471],{"class":250},[91,103898,103474],{"class":101},[91,103900,257],{"class":250},[21,103902,103903,103904,103906],{},"这行的作用是：根据名字 ",[88,103905,103474],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[21,103908,103909],{},"拆开看：",[14,103911,103912,103918,103923,103929],{},[17,103913,103914,103917],{},[88,103915,103916],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[17,103919,103920,103922],{},[88,103921,102166],{}," 是被查询的模型。",[17,103924,103925,103928],{},[88,103926,103927],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[17,103930,103931,103933],{},[88,103932,103474],{}," 是 XML 里写的名字。",[82,103935,103936],{"className":30459,"code":103708,"language":30461,"meta":26,"style":26},[88,103937,103938],{"__ignoreMap":26},[91,103939,103940,103942,103944,103946,103948],{"class":93,"line":94},[91,103941,103715],{"class":250},[91,103943,296],{"class":153},[91,103945,103486],{"class":250},[91,103947,103489],{"class":101},[91,103949,257],{"class":250},[21,103951,103952,103953,28504],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[88,103954,103489],{},[82,103956,103958],{"className":30459,"code":103957,"language":30461,"meta":26,"style":26},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[88,103959,103960,103972],{"__ignoreMap":26},[91,103961,103962,103964,103966,103968,103970],{"class":93,"line":94},[91,103963,1655],{"class":153},[91,103965,103502],{"class":250},[91,103967,1159],{"class":153},[91,103969,4216],{"class":105},[91,103971,3862],{"class":250},[91,103973,103974,103977,103979,103981,103983],{"class":93,"line":38},[91,103975,103976],{"class":153},"    raise",[91,103978,103516],{"class":105},[91,103980,251],{"class":250},[91,103982,103521],{"class":101},[91,103984,257],{"class":250},[21,103986,103987,103989,103990,103993,103994,103997,103998,104001],{},[88,103988,1655],{}," 是条件判断。",[88,103991,103992],{},"mj_name2id"," 找不到对象时会返回 ",[88,103995,103996],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[88,103999,104000],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[82,104003,104005],{"className":30459,"code":104004,"language":30461,"meta":26,"style":26},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[88,104006,104007,104023],{"__ignoreMap":26},[91,104008,104009,104011,104013,104015,104017,104019,104021],{"class":93,"line":94},[91,104010,3148],{"class":153},[91,104012,101582],{"class":250},[91,104014,26165],{"class":153},[91,104016,32524],{"class":105},[91,104018,251],{"class":250},[91,104020,1846],{"class":105},[91,104022,30867],{"class":250},[91,104024,104025],{"class":93,"line":38},[91,104026,101780],{"class":250},[21,104028,104029],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[82,104031,104033],{"className":30459,"code":104032,"language":30461,"meta":26,"style":26},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[88,104034,104035],{"__ignoreMap":26},[91,104036,104037,104039,104041,104043],{"class":93,"line":94},[91,104038,30496],{"class":105},[91,104040,251],{"class":250},[91,104042,103597],{"class":101},[91,104044,103600],{"class":250},[21,104046,104047,104049,104050,104053],{},[88,104048,101160],{}," 保存所有 body 的世界坐标。",[88,104051,104052],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[82,104055,104057],{"className":30459,"code":104056,"language":30461,"meta":26,"style":26},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[88,104058,104059],{"__ignoreMap":26},[91,104060,104061,104063,104065,104067],{"class":93,"line":94},[91,104062,30496],{"class":105},[91,104064,251],{"class":250},[91,104066,103609],{"class":101},[91,104068,103612],{"class":250},[21,104070,104071,104074,104075,104077],{},[88,104072,104073],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[88,104076,103058],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[82,104079,104081],{"className":30459,"code":104080,"language":30461,"meta":26,"style":26},"print(\"box qpos:\", np.array(data.qpos))\n",[88,104082,104083],{"__ignoreMap":26},[91,104084,104085,104087,104089,104091],{"class":93,"line":94},[91,104086,30496],{"class":105},[91,104088,251],{"class":250},[91,104090,103621],{"class":101},[91,104092,103624],{"class":250},[21,104094,104095,104096,104099],{},"这里打印广义位置数组。",[88,104097,104098],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[190,104101,102397],{"id":102396},[21,104103,104104,104105,104108,104109,28504],{},"程序会输出 ",[88,104106,104107],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[88,104110,104111],{},"qpos",[21,104113,104114,104116,104117,104120,104121,104124],{},[88,104115,104052],{}," 是 body 的世界坐标位置。",[88,104118,104119],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[88,104122,104123],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[21,104126,82303,104127,82611,104129,104131],{},[88,104128,103058],{},[88,104130,103876],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[21,104133,104134],{},"如果你把 site 改成：",[82,104136,104138],{"className":53148,"code":104137,"language":53150,"meta":26,"style":26},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[88,104139,104140],{"__ignoreMap":26},[91,104141,104142,104144,104146,104148,104150,104153,104155,104157,104160,104162,104164,104166,104168,104170,104172],{"class":93,"line":94},[91,104143,1159],{"class":250},[91,104145,103291],{"class":51381},[91,104147,15043],{"class":97},[91,104149,296],{"class":250},[91,104151,104152],{"class":101},"\"box_top\"",[91,104154,101187],{"class":97},[91,104156,296],{"class":250},[91,104158,104159],{"class":101},"\"0 0 0.15\"",[91,104161,101217],{"class":97},[91,104163,296],{"class":250},[91,104165,103859],{"class":101},[91,104167,78848],{"class":97},[91,104169,296],{"class":250},[91,104171,103866],{"class":101},[91,104173,101225],{"class":250},[21,104175,104176,104177,104180],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[88,104178,104179],{},"site position"," 就会比 body position 的 z 坐标更高。",[190,104182,102429],{"id":102428},[14,104184,104185,104194,104197,104204,104210,104221],{},[17,104186,102492,104187,104189,104190,102495,104192,28504],{},[88,104188,103062],{}," 的初始高度从 ",[88,104191,466],{},[88,104193,327],{},[17,104195,104196],{},"重新运行程序。",[17,104198,104199,104200,104203],{},"观察 ",[88,104201,104202],{},"box qpos"," 和最终位置是否变化。",[17,104205,104206,104207,104209],{},"故意把 ",[88,104208,103291],{}," 名称改错，确认程序能报错。",[17,104211,102492,104212,104214,104215,102495,104217,104220],{},[88,104213,101201],{}," 的颜色 ",[88,104216,102113],{},[88,104218,104219],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[17,104222,102492,104223,82611,104225,102495,104228,104231,104232,104234],{},[88,104224,103058],{},[88,104226,104227],{},"pos",[88,104229,104230],{},"0 0 0.2","，观察 ",[88,104233,104179],{}," 如何变化。",[190,104236,102534],{"id":102533},[217,104238,104240],{"id":104239},"xml-error-schema-violation",[88,104241,104242],{},"XML Error: Schema violation",[21,104244,104245],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[217,104247,104249,81371,104251],{"id":104248},"mj_name2id-返回-1",[88,104250,103992],{},[88,104252,103996],{},[21,104254,104255,104256,104259],{},"说明名字没有找到。检查 XML 中 ",[88,104257,104258],{},"name=\"...\"","，并确认对象类型正确。",[217,104261,104262],{"id":104262},"物体不下落",[21,104264,102604],{},[14,104266,104267,104272,104277],{},[17,104268,104269,104270],{},"body 是否有 ",[88,104271,101701],{},[17,104273,104274,104275],{},"gravity 是否为 ",[88,104276,102670],{},[17,104278,104279,104280,104282],{},"body 是否被固定在 ",[88,104281,101922],{}," 中",[217,104284,104285],{"id":104285},"坐标看起来不符合预期",[21,104287,104288],{},"先区分两种坐标：",[386,104290,104291,104300],{},[389,104292,104293],{},[392,104294,104295,104298],{},[395,104296,104297],{"align":23860},"坐标",[395,104299,100781],{"align":23860},[433,104301,104302,104312],{},[392,104303,104304,104309],{},[438,104305,104306,104307],{"align":23860},"XML 里的 ",[88,104308,104227],{},[438,104310,104311],{"align":23860},"相对父 body 的局部坐标",[392,104313,104314,104320],{},[438,104315,104316,25101,104318],{"align":23860},[88,104317,101160],{},[88,104319,104073],{},[438,104321,104322],{"align":23860},"仿真更新后的世界坐标",[21,104324,104325,104326,104328,104329,82620,104332,104334],{},"如果你修改了 ",[88,104327,101151],{},"，但还没调用 ",[88,104330,104331],{},"mj_forward",[88,104333,101296],{},"，世界坐标可能还没有更新。",[190,104336,102688],{"id":102687},[21,104338,104339],{},"MJCF 建模先掌握四件事：",[14,104341,104342,104347,104352,104357],{},[17,104343,104344,104346],{},[88,104345,51881],{}," 表示刚体层级。",[17,104348,104349,104351],{},[88,104350,101201],{}," 表示形状、碰撞和质量。",[17,104353,104354,104356],{},[88,104355,103037],{}," 决定 body 能不能动、怎么动。",[17,104358,104359,104361],{},[88,104360,103291],{}," 用来标记关键点，方便 Python 读取位置。",[21,104363,104364],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[168,104366,104367],{},"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":26,"searchDepth":38,"depth":38,"links":104369},[104370,104371,104372,104378,104382,104383,104384,104391],{"id":100727,"depth":38,"text":100728},{"id":100850,"depth":38,"text":100851},{"id":101125,"depth":38,"text":101126,"children":104373},[104374,104375,104376,104377],{"id":103041,"depth":1304,"text":103041},{"id":103155,"depth":1304,"text":103155},{"id":103181,"depth":1304,"text":103182},{"id":103285,"depth":1304,"text":103286},{"id":101333,"depth":38,"text":101334,"children":104379},[104380,104381],{"id":101653,"depth":1304,"text":101653},{"id":101789,"depth":1304,"text":101789},{"id":102396,"depth":38,"text":102397},{"id":102428,"depth":38,"text":102429},{"id":102533,"depth":38,"text":102534,"children":104385},[104386,104387,104389,104390],{"id":104239,"depth":1304,"text":104242},{"id":104248,"depth":1304,"text":104388},"mj_name2id 返回 -1",{"id":104262,"depth":1304,"text":104262},{"id":104285,"depth":1304,"text":104285},{"id":102687,"depth":38,"text":102688},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102735,"description":26},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104398,"title":104399,"body":104400,"description":26,"extension":173,"meta":105895,"navigation":175,"path":105896,"seo":105897,"stem":105898,"__hash__":105899},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104401,"toc":105867},[104402,104405,104407,104410,104413,104451,104454,104460,104463,104465,104467,104494,104496,104510,104512,104553,104555,104579,104581,104584,104593,104602,104605,104614,104622,104631,104634,104644,104647,104699,104706,104712,104720,104768,104771,104790,104793,104801,104805,104814,104847,104849,105197,105199,105211,105213,105224,105226,105229,105250,105256,105259,105284,105294,105297,105305,105308,105311,105332,105343,105345,105365,105368,105389,105398,105417,105423,105448,105451,105465,105472,105496,105499,105507,105516,105532,105544,105552,105561,105563,105566,105590,105595,105598,105620,105622,105661,105663,105670,105672,105680,105683,105686,105698,105739,105746,105757,105764,105767,105816,105819,105822,105828,105830,105835,105861,105864],[10,104403,104399],{"id":104404},"_3python-控制接口读取状态与推进仿真",[190,104406,100728],{"id":100727},[21,104408,104409],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[21,104411,104412],{},"你将学习:",[14,104414,104415,104420,104425,104429,104434,104445],{},[17,104416,104417],{},[88,104418,104419],{},"MjModel.from_xml_string",[17,104421,104422],{},[88,104423,104424],{},"MjData(model)",[17,104426,104427],{},[88,104428,101296],{},[17,104430,104431],{},[88,104432,104433],{},"mj_resetData",[17,104435,104436,104437,461,104439,461,104442],{},"读取 ",[88,104438,104111],{},[88,104440,104441],{},"qvel",[88,104443,104444],{},"ctrl",[17,104446,104447,104448],{},"使用 ",[88,104449,104450],{},"model.opt.timestep",[21,104452,104453],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[82,104455,104458],{"className":104456,"code":104457,"language":5310,"meta":26},[5308],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[88,104459,104457],{"__ignoreMap":26},[21,104461,104462],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[190,104464,100851],{"id":100850},[21,104466,100854],{},[82,104468,104470],{"className":84,"code":104469,"language":86,"meta":26,"style":26},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[88,104471,104472],{"__ignoreMap":26},[91,104473,104474,104476,104478,104480,104482,104485,104487,104489,104491],{"class":93,"line":94},[91,104475,24699],{"class":97},[91,104477,26437],{"class":101},[91,104479,23956],{"class":101},[91,104481,26522],{"class":105},[91,104483,104484],{"class":101}," python3",[91,104486,100879],{"class":101},[91,104488,102582],{"class":101},[91,104490,100895],{"class":101},[91,104492,104493],{"class":101}," glfw\n",[21,104495,102900],{},[82,104497,104498],{"className":84,"code":101000,"language":86,"meta":26,"style":26},[88,104499,104500],{"__ignoreMap":26},[91,104501,104502,104504,104506,104508],{"class":93,"line":94},[91,104503,23953],{"class":97},[91,104505,23956],{"class":101},[91,104507,101011],{"class":101},[91,104509,101014],{"class":101},[21,104511,102917],{},[82,104513,104515],{"className":84,"code":104514,"language":86,"meta":26,"style":26},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[88,104516,104517,104534,104543],{"__ignoreMap":26},[91,104518,104519,104521,104523,104525,104528,104530,104532],{"class":93,"line":94},[91,104520,30411],{"class":97},[91,104522,29295],{"class":101},[91,104524,25237],{"class":105},[91,104526,104527],{"class":101}," mujoco-python-api",[91,104529,101056],{"class":101},[91,104531,101059],{"class":105},[91,104533,101062],{"class":105},[91,104535,104536,104538,104540],{"class":93,"line":38},[91,104537,30411],{"class":97},[91,104539,101069],{"class":101},[91,104541,104542],{"class":101}," mujoco-python-api\n",[91,104544,104545,104547,104549,104551],{"class":93,"line":1304},[91,104546,23953],{"class":97},[91,104548,23956],{"class":101},[91,104550,101011],{"class":101},[91,104552,101014],{"class":101},[21,104554,101085],{},[14,104556,104557,104564,104573],{},[17,104558,104559,101099,104561,104563],{},[88,104560,100756],{},[88,104562,100761],{}," 是官方 Python bindings 的类名。",[17,104565,104566,104567,104570,104571,28504],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[88,104568,104569],{},"mjModel"," 在 Python 中是 ",[88,104572,100790],{},[17,104574,104575,104576,28504],{},"不要使用 ",[88,104577,104578],{},"sim = mujoco_py.MjSim(...)",[190,104580,101126],{"id":101125},[21,104582,104583],{},"仿真推进核心代码:",[82,104585,104587],{"className":30459,"code":104586,"language":30461,"meta":26,"style":26},"mujoco.mj_step(model, data)\n",[88,104588,104589],{"__ignoreMap":26},[91,104590,104591],{"class":93,"line":94},[91,104592,104586],{"class":250},[21,104594,104595,104596,461,104598,461,104600,28504],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[88,104597,101151],{},[88,104599,101154],{},[88,104601,101148],{},[21,104603,104604],{},"重置仿真:",[82,104606,104608],{"className":30459,"code":104607,"language":30461,"meta":26,"style":26},"mujoco.mj_resetData(model, data)\n",[88,104609,104610],{"__ignoreMap":26},[91,104611,104612],{"class":93,"line":94},[91,104613,104607],{"class":250},[21,104615,104616,104617,82620,104619,104621],{},"如果手动修改了 ",[88,104618,101151],{},[88,104620,101154],{},"，通常应调用:",[82,104623,104625],{"className":30459,"code":104624,"language":30461,"meta":26,"style":26},"mujoco.mj_forward(model, data)\n",[88,104626,104627],{"__ignoreMap":26},[91,104628,104629],{"class":93,"line":94},[91,104630,104624],{"class":250},[21,104632,104633],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[217,104635,104637,461,104639,461,104641,104643],{"id":104636},"qposqvelctrl-是什么",[88,104638,104111],{},[88,104640,104441],{},[88,104642,104444],{}," 是什么",[21,104645,104646],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[386,104648,104649,104661],{},[389,104650,104651],{},[392,104652,104653,104656,104658],{},[395,104654,104655],{"align":23860},"字段",[395,104657,100781],{"align":23860},[395,104659,104660],{"align":23860},"谁来修改",[433,104662,104663,104675,104687],{},[392,104664,104665,104669,104672],{},[438,104666,104667],{"align":23860},[88,104668,101151],{},[438,104670,104671],{"align":23860},"广义位置，例如小车位置、关节角、自由物体位置姿态",[438,104673,104674],{"align":23860},"MuJoCo 更新，也可以手动设置初始状态",[392,104676,104677,104681,104684],{},[438,104678,104679],{"align":23860},[88,104680,101154],{},[438,104682,104683],{"align":23860},"广义速度，例如小车速度、关节角速度",[438,104685,104686],{"align":23860},"MuJoCo 更新，也可以手动清零",[392,104688,104689,104693,104696],{},[438,104690,104691],{"align":23860},[88,104692,101157],{},[438,104694,104695],{"align":23860},"actuator 的控制输入",[438,104697,104698],{"align":23860},"主要由你的控制代码写入",[21,104700,9148,104701,101099,104703,104705],{},[88,104702,104111],{},[88,104704,104441],{}," 不一定同维。自由刚体就是典型例子：",[82,104707,104710],{"className":104708,"code":104709,"language":5310,"meta":26},[5308],"freejoint: qpos 7 维，qvel 6 维\n",[88,104711,104709],{"__ignoreMap":26},[217,104713,104715,101099,104717,104719],{"id":104714},"mj_step-和-mj_forward-的区别",[88,104716,101296],{},[88,104718,104331],{}," 的区别",[386,104721,104722,104735],{},[389,104723,104724],{},[392,104725,104726,104729,104732],{},[395,104727,104728],{"align":23860},"函数",[395,104730,104731],{"align":23860},"是否推进时间",[395,104733,104734],{"align":23860},"什么时候用",[433,104736,104737,104750],{},[392,104738,104739,104744,104747],{},[438,104740,104741],{"align":23860},[88,104742,104743],{},"mj_step(model, data)",[438,104745,104746],{"align":23860},"是",[438,104748,104749],{"align":23860},"正常仿真循环，每调用一次前进一步",[392,104751,104752,104757,104760],{},[438,104753,104754],{"align":23860},[88,104755,104756],{},"mj_forward(model, data)",[438,104758,104759],{"align":23860},"否",[438,104761,104762,104763,461,104765,104767],{"align":23860},"手动改了 ",[88,104764,104111],{},[88,104766,104441],{}," 后，刷新派生量",[21,104769,104770],{},"例如你写：",[82,104772,104774],{"className":30459,"code":104773,"language":30461,"meta":26,"style":26},"data.qpos[2] = 2.0\n",[88,104775,104776],{"__ignoreMap":26},[91,104777,104778,104781,104783,104785,104787],{"class":93,"line":94},[91,104779,104780],{"class":250},"data.qpos[",[91,104782,327],{"class":105},[91,104784,4566],{"class":250},[91,104786,296],{"class":153},[91,104788,104789],{"class":105}," 2.0\n",[21,104791,104792],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[82,104794,104795],{"className":30459,"code":104624,"language":30461,"meta":26,"style":26},[88,104796,104797],{"__ignoreMap":26},[91,104798,104799],{"class":93,"line":94},[91,104800,104624],{"class":250},[217,104802,104804],{"id":104803},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[21,104806,104807,104810,104811,104813],{},[88,104808,104809],{},"mujoco.mj_resetData(model, data)"," 会把 ",[88,104812,33482],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[82,104815,104817],{"className":30459,"code":104816,"language":30461,"meta":26,"style":26},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[88,104818,104819,104823,104833,104843],{"__ignoreMap":26},[91,104820,104821],{"class":93,"line":94},[91,104822,104607],{"class":250},[91,104824,104825,104828,104830],{"class":93,"line":38},[91,104826,104827],{"class":250},"data.qpos[:] ",[91,104829,296],{"class":153},[91,104831,104832],{"class":250}," random_qpos\n",[91,104834,104835,104838,104840],{"class":93,"line":1304},[91,104836,104837],{"class":250},"data.qvel[:] ",[91,104839,296],{"class":153},[91,104841,104842],{"class":105}," 0.0\n",[91,104844,104845],{"class":93,"line":1319},[91,104846,104624],{"class":250},[190,104848,101334],{"id":101333},[82,104850,104852],{"className":30459,"code":104851,"language":30461,"meta":26,"style":26},"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",[88,104853,104854,104860,104870,104874,104878,104886,104891,104895,104899,104903,104908,104912,104917,104922,104927,104931,104935,104939,104943,104947,104951,104970,104977,104989,105000,105016,105032,105036,105040,105052,105064,105072,105076,105087,105091,105107,105111,105115,105124,105128,105133,105142,105146,105159,105164,105173,105177,105181,105193],{"__ignoreMap":26},[91,104855,104856,104858],{"class":93,"line":94},[91,104857,30473],{"class":153},[91,104859,101382],{"class":250},[91,104861,104862,104864,104866,104868],{"class":93,"line":38},[91,104863,30473],{"class":153},[91,104865,31461],{"class":250},[91,104867,31464],{"class":153},[91,104869,31467],{"class":250},[91,104871,104872],{"class":93,"line":1304},[91,104873,2523],{"emptyLinePlaceholder":175},[91,104875,104876],{"class":93,"line":1319},[91,104877,2523],{"emptyLinePlaceholder":175},[91,104879,104880,104882,104884],{"class":93,"line":1325},[91,104881,101395],{"class":105},[91,104883,13687],{"class":153},[91,104885,101400],{"class":101},[91,104887,104888],{"class":93,"line":1339},[91,104889,104890],{"class":101},"\u003Cmujoco model=\"state_api\">\n",[91,104892,104893],{"class":93,"line":1345},[91,104894,101410],{"class":101},[91,104896,104897],{"class":93,"line":1436},[91,104898,2523],{"emptyLinePlaceholder":175},[91,104900,104901],{"class":93,"line":1442},[91,104902,101419],{"class":101},[91,104904,104905],{"class":93,"line":1454},[91,104906,104907],{"class":101},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[91,104909,104910],{"class":93,"line":1736},[91,104911,2523],{"emptyLinePlaceholder":175},[91,104913,104914],{"class":93,"line":1741},[91,104915,104916],{"class":101},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[91,104918,104919],{"class":93,"line":1747},[91,104920,104921],{"class":101},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[91,104923,104924],{"class":93,"line":1752},[91,104925,104926],{"class":101},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[91,104928,104929],{"class":93,"line":1766},[91,104930,101448],{"class":101},[91,104932,104933],{"class":93,"line":1771},[91,104934,101453],{"class":101},[91,104936,104937],{"class":93,"line":1777},[91,104938,101458],{"class":101},[91,104940,104941],{"class":93,"line":1798},[91,104942,95779],{"class":101},[91,104944,104945],{"class":93,"line":1803},[91,104946,2523],{"emptyLinePlaceholder":175},[91,104948,104949],{"class":93,"line":1817},[91,104950,2523],{"emptyLinePlaceholder":175},[91,104952,104953,104955,104958,104961,104963,104966,104968],{"class":93,"line":1822},[91,104954,32028],{"class":153},[91,104956,104957],{"class":97}," print_state",[91,104959,104960],{"class":250},"(prefix: ",[91,104962,1424],{"class":105},[91,104964,104965],{"class":250},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[91,104967,95767],{"class":105},[91,104969,3862],{"class":250},[91,104971,104972,104974],{"class":93,"line":1851},[91,104973,31380],{"class":105},[91,104975,104976],{"class":250},"(prefix)\n",[91,104978,104979,104981,104983,104986],{"class":93,"line":1856},[91,104980,31380],{"class":105},[91,104982,251],{"class":250},[91,104984,104985],{"class":101},"\"  timestep:\"",[91,104987,104988],{"class":250},", model.opt.timestep)\n",[91,104990,104991,104993,104995,104998],{"class":93,"line":1873},[91,104992,31380],{"class":105},[91,104994,251],{"class":250},[91,104996,104997],{"class":101},"\"  time:\"",[91,104999,101559],{"class":250},[91,105001,105002,105004,105006,105009,105012,105014],{"class":93,"line":1878},[91,105003,31380],{"class":105},[91,105005,251],{"class":250},[91,105007,105008],{"class":101},"\"  qpos:\"",[91,105010,105011],{"class":250},", np.round(data.qpos.copy(), ",[91,105013,542],{"class":105},[91,105015,30578],{"class":250},[91,105017,105018,105020,105022,105025,105028,105030],{"class":93,"line":1883},[91,105019,31380],{"class":105},[91,105021,251],{"class":250},[91,105023,105024],{"class":101},"\"  qvel:\"",[91,105026,105027],{"class":250},", np.round(data.qvel.copy(), ",[91,105029,542],{"class":105},[91,105031,30578],{"class":250},[91,105033,105034],{"class":93,"line":1888},[91,105035,2523],{"emptyLinePlaceholder":175},[91,105037,105038],{"class":93,"line":1902},[91,105039,2523],{"emptyLinePlaceholder":175},[91,105041,105042,105044,105046,105048,105050],{"class":93,"line":1907},[91,105043,32028],{"class":153},[91,105045,2096],{"class":97},[91,105047,101479],{"class":250},[91,105049,95767],{"class":105},[91,105051,3862],{"class":250},[91,105053,105054,105056,105058,105060,105062],{"class":93,"line":2700},[91,105055,101488],{"class":250},[91,105057,296],{"class":153},[91,105059,101493],{"class":250},[91,105061,101395],{"class":105},[91,105063,257],{"class":250},[91,105065,105066,105068,105070],{"class":93,"line":2714},[91,105067,101502],{"class":250},[91,105069,296],{"class":153},[91,105071,101507],{"class":250},[91,105073,105074],{"class":93,"line":2722},[91,105075,2523],{"emptyLinePlaceholder":175},[91,105077,105078,105081,105084],{"class":93,"line":2727},[91,105079,105080],{"class":250},"    print_state(",[91,105082,105083],{"class":101},"\"initial\"",[91,105085,105086],{"class":250},", model, data)\n",[91,105088,105089],{"class":93,"line":2733},[91,105090,2523],{"emptyLinePlaceholder":175},[91,105092,105093,105095,105097,105099,105101,105103,105105],{"class":93,"line":2739},[91,105094,3324],{"class":153},[91,105096,101582],{"class":250},[91,105098,26165],{"class":153},[91,105100,32524],{"class":105},[91,105102,251],{"class":250},[91,105104,905],{"class":105},[91,105106,30867],{"class":250},[91,105108,105109],{"class":93,"line":2744},[91,105110,101597],{"class":250},[91,105112,105113],{"class":93,"line":8071},[91,105114,2523],{"emptyLinePlaceholder":175},[91,105116,105117,105119,105122],{"class":93,"line":8095},[91,105118,105080],{"class":250},[91,105120,105121],{"class":101},"\"after 50 steps\"",[91,105123,105086],{"class":250},[91,105125,105126],{"class":93,"line":8100},[91,105127,2523],{"emptyLinePlaceholder":175},[91,105129,105130],{"class":93,"line":8106},[91,105131,105132],{"class":250},"    mujoco.mj_resetData(model, data)\n",[91,105134,105135,105137,105140],{"class":93,"line":8133},[91,105136,105080],{"class":250},[91,105138,105139],{"class":101},"\"after reset\"",[91,105141,105086],{"class":250},[91,105143,105144],{"class":93,"line":8138},[91,105145,2523],{"emptyLinePlaceholder":175},[91,105147,105148,105151,105153,105155,105157],{"class":93,"line":8144},[91,105149,105150],{"class":250},"    data.qpos[",[91,105152,327],{"class":105},[91,105154,4566],{"class":250},[91,105156,296],{"class":153},[91,105158,104789],{"class":105},[91,105160,105161],{"class":93,"line":8156},[91,105162,105163],{"class":250},"    mujoco.mj_forward(model, data)\n",[91,105165,105166,105168,105171],{"class":93,"line":8168},[91,105167,105080],{"class":250},[91,105169,105170],{"class":101},"\"after manual qpos edit\"",[91,105172,105086],{"class":250},[91,105174,105175],{"class":93,"line":8180},[91,105176,2523],{"emptyLinePlaceholder":175},[91,105178,105179],{"class":93,"line":9839},[91,105180,2523],{"emptyLinePlaceholder":175},[91,105182,105183,105185,105187,105189,105191],{"class":93,"line":9864},[91,105184,1655],{"class":153},[91,105186,31301],{"class":105},[91,105188,101640],{"class":153},[91,105190,101643],{"class":101},[91,105192,3862],{"class":250},[91,105194,105195],{"class":93,"line":9887},[91,105196,101650],{"class":250},[21,105198,103651],{},[82,105200,105202],{"className":84,"code":105201,"language":86,"meta":26,"style":26},"touch ch3_python_state.py\n",[88,105203,105204],{"__ignoreMap":26},[91,105205,105206,105208],{"class":93,"line":94},[91,105207,101364],{"class":97},[91,105209,105210],{"class":101}," ch3_python_state.py\n",[21,105212,102382],{},[82,105214,105216],{"className":84,"code":105215,"language":86,"meta":26,"style":26},"python ch3_python_state.py\n",[88,105217,105218],{"__ignoreMap":26},[91,105219,105220,105222],{"class":93,"line":94},[91,105221,30461],{"class":97},[91,105223,105210],{"class":101},[217,105225,101653],{"id":101653},[21,105227,105228],{},"打印状态的函数：",[82,105230,105232],{"className":30459,"code":105231,"language":30461,"meta":26,"style":26},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[88,105233,105234],{"__ignoreMap":26},[91,105235,105236,105238,105240,105242,105244,105246,105248],{"class":93,"line":94},[91,105237,32028],{"class":153},[91,105239,104957],{"class":97},[91,105241,104960],{"class":250},[91,105243,1424],{"class":105},[91,105245,104965],{"class":250},[91,105247,95767],{"class":105},[91,105249,3862],{"class":250},[21,105251,105252,105253,105255],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[88,105254,33482],{}," 里发生了什么。",[21,105257,105258],{},"推进 50 步：",[82,105260,105262],{"className":30459,"code":105261,"language":30461,"meta":26,"style":26},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[88,105263,105264,105280],{"__ignoreMap":26},[91,105265,105266,105268,105270,105272,105274,105276,105278],{"class":93,"line":94},[91,105267,3148],{"class":153},[91,105269,101582],{"class":250},[91,105271,26165],{"class":153},[91,105273,32524],{"class":105},[91,105275,251],{"class":250},[91,105277,905],{"class":105},[91,105279,30867],{"class":250},[91,105281,105282],{"class":93,"line":38},[91,105283,101780],{"class":250},[21,105285,105286,105287,105290,105291,105293],{},"由于 ",[88,105288,105289],{},"timestep=0.01","，所以 50 步后时间约为 ",[88,105292,35410],{}," 秒。",[21,105295,105296],{},"重置：",[82,105298,105299],{"className":30459,"code":104607,"language":30461,"meta":26,"style":26},[88,105300,105301],{"__ignoreMap":26},[91,105302,105303],{"class":93,"line":94},[91,105304,104607],{"class":250},[21,105306,105307],{},"这会把时间、位置、速度恢复到初始状态。",[21,105309,105310],{},"手动改高度：",[82,105312,105314],{"className":30459,"code":105313,"language":30461,"meta":26,"style":26},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[88,105315,105316,105328],{"__ignoreMap":26},[91,105317,105318,105320,105322,105324,105326],{"class":93,"line":94},[91,105319,104780],{"class":250},[91,105321,327],{"class":105},[91,105323,4566],{"class":250},[91,105325,296],{"class":153},[91,105327,104789],{"class":105},[91,105329,105330],{"class":93,"line":38},[91,105331,104624],{"class":250},[21,105333,105334,105335,105338,105339,105342],{},"这个例子里 ",[88,105336,105337],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[88,105340,105341],{},"2.0"," 表示把小球放到更高的位置。",[217,105344,101789],{"id":101789},[82,105346,105347],{"className":30459,"code":105231,"language":30461,"meta":26,"style":26},[88,105348,105349],{"__ignoreMap":26},[91,105350,105351,105353,105355,105357,105359,105361,105363],{"class":93,"line":94},[91,105352,32028],{"class":153},[91,105354,104957],{"class":97},[91,105356,104960],{"class":250},[91,105358,1424],{"class":105},[91,105360,104965],{"class":250},[91,105362,95767],{"class":105},[91,105364,3862],{"class":250},[21,105366,105367],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[14,105369,105370,105379,105384],{},[17,105371,105372,105375,105376,105378],{},[88,105373,105374],{},"prefix","：一段文字，比如 ",[88,105377,105083],{},"，用来说明现在打印的是哪个阶段。",[17,105380,105381,105383],{},[88,105382,102166],{},"：MuJoCo 模型。",[17,105385,105386,105388],{},[88,105387,33482],{},"：MuJoCo 当前状态。",[21,105390,105391,461,105394,105397],{},[88,105392,105393],{},"prefix: str",[88,105395,105396],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[82,105399,105401],{"className":30459,"code":105400,"language":30461,"meta":26,"style":26},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[88,105402,105403],{"__ignoreMap":26},[91,105404,105405,105407,105409,105411,105413,105415],{"class":93,"line":94},[91,105406,30496],{"class":105},[91,105408,251],{"class":250},[91,105410,105008],{"class":101},[91,105412,105011],{"class":250},[91,105414,542],{"class":105},[91,105416,30578],{"class":250},[21,105418,105419,105422],{},[88,105420,105421],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[82,105424,105426],{"className":30459,"code":105425,"language":30461,"meta":26,"style":26},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[88,105427,105428,105440],{"__ignoreMap":26},[91,105429,105430,105432,105434,105436,105438],{"class":93,"line":94},[91,105431,101715],{"class":250},[91,105433,296],{"class":153},[91,105435,101493],{"class":250},[91,105437,101395],{"class":105},[91,105439,257],{"class":250},[91,105441,105442,105444,105446],{"class":93,"line":38},[91,105443,101739],{"class":250},[91,105445,296],{"class":153},[91,105447,101507],{"class":250},[21,105449,105450],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[82,105452,105454],{"className":30459,"code":105453,"language":30461,"meta":26,"style":26},"print_state(\"initial\", model, data)\n",[88,105455,105456],{"__ignoreMap":26},[91,105457,105458,105461,105463],{"class":93,"line":94},[91,105459,105460],{"class":250},"print_state(",[91,105462,105083],{"class":101},[91,105464,105086],{"class":250},[21,105466,105467,105468,105471],{},"调用刚才定义的 ",[88,105469,105470],{},"print_state"," 函数，打印初始状态。",[82,105473,105474],{"className":30459,"code":105261,"language":30461,"meta":26,"style":26},[88,105475,105476,105492],{"__ignoreMap":26},[91,105477,105478,105480,105482,105484,105486,105488,105490],{"class":93,"line":94},[91,105479,3148],{"class":153},[91,105481,101582],{"class":250},[91,105483,26165],{"class":153},[91,105485,32524],{"class":105},[91,105487,251],{"class":250},[91,105489,905],{"class":105},[91,105491,30867],{"class":250},[91,105493,105494],{"class":93,"line":38},[91,105495,101780],{"class":250},[21,105497,105498],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[82,105500,105501],{"className":30459,"code":104607,"language":30461,"meta":26,"style":26},[88,105502,105503],{"__ignoreMap":26},[91,105504,105505],{"class":93,"line":94},[91,105506,104607],{"class":250},[21,105508,105509,105510,105512,105513,105515],{},"重置 ",[88,105511,33482],{},"。注意它不会重新创建 ",[88,105514,102166],{},"，因为模型结构没有变，只是状态回到初始值。",[82,105517,105518],{"className":30459,"code":104773,"language":30461,"meta":26,"style":26},[88,105519,105520],{"__ignoreMap":26},[91,105521,105522,105524,105526,105528,105530],{"class":93,"line":94},[91,105523,104780],{"class":250},[91,105525,327],{"class":105},[91,105527,4566],{"class":250},[91,105529,296],{"class":153},[91,105531,104789],{"class":105},[21,105533,105534,105535,461,105538,461,105541,105543],{},"这行是“手动改状态”。在 freejoint 中，",[88,105536,105537],{},"qpos[0]",[88,105539,105540],{},"qpos[1]",[88,105542,105337],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[82,105545,105546],{"className":30459,"code":104624,"language":30461,"meta":26,"style":26},[88,105547,105548],{"__ignoreMap":26},[91,105549,105550],{"class":93,"line":94},[91,105551,104624],{"class":250},[21,105553,105554,105555,105557,105558,105560],{},"手动改完 ",[88,105556,104111],{}," 后，调用 ",[88,105559,104331],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[190,105562,102397],{"id":102396},[21,105564,105565],{},"你会看到:",[14,105567,105568,105573,105578,105581],{},[17,105569,105570,105571],{},"初始时间为 ",[88,105572,440],{},[17,105574,105575,105576],{},"50 步后时间约为 ",[88,105577,35410],{},[17,105579,105580],{},"reset 后状态恢复",[17,105582,105583,105584,105587,105588],{},"手动修改 ",[88,105585,105586],{},"data.qpos[2]"," 后，小球高度变为 ",[88,105589,105341],{},[21,105591,105592,105594],{},[88,105593,105337],{}," 在这个例子中表示自由刚体的 z 坐标。",[21,105596,105597],{},"输出里可以重点看三件事：",[14,105599,105600,105608,105613],{},[17,105601,105602,105604,105605,105607],{},[88,105603,2510],{}," 是否随着 ",[88,105606,101296],{}," 增加。",[17,105609,105610,105612],{},[88,105611,104111],{}," 的 z 坐标是否因为下落而变化。",[17,105614,105615,105617,105618,28504],{},[88,105616,104433],{}," 后时间是否回到 ",[88,105619,440],{},[190,105621,102429],{"id":102428},[14,105623,105624,105630,105636,105642,105645,105654],{},[17,105625,105626,105627,28504],{},"修改 timestep 为 ",[88,105628,105629],{},"0.005",[17,105631,105632,105633,28504],{},"重新运行，检查 50 步后时间是否约为 ",[88,105634,105635],{},"0.25",[17,105637,105638,105639,28504],{},"修改重力为 ",[88,105640,105641],{},"0 0 -1.0",[17,105643,105644],{},"观察小球下降速度是否变慢。",[17,105646,102492,105647,102495,105650,105653],{},[88,105648,105649],{},"data.qpos[2] = 2.0",[88,105651,105652],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[17,105655,105656,105657,105660],{},"注释掉 ",[88,105658,105659],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[190,105662,102534],{"id":102533},[217,105664,105666,105667,105669],{"id":105665},"修改-dataqpos-后位置没有更新","修改 ",[88,105668,101151],{}," 后位置没有更新",[21,105671,102543],{},[82,105673,105674],{"className":30459,"code":104624,"language":30461,"meta":26,"style":26},[88,105675,105676],{"__ignoreMap":26},[91,105677,105678],{"class":93,"line":94},[91,105679,104624],{"class":250},[217,105681,105682],{"id":105682},"数组维度看不懂",[21,105684,105685],{},"打印模型维度:",[82,105687,105689],{"className":30459,"code":105688,"language":30461,"meta":26,"style":26},"print(model.nq, model.nv, model.nu)\n",[88,105690,105691],{"__ignoreMap":26},[91,105692,105693,105695],{"class":93,"line":94},[91,105694,30496],{"class":105},[91,105696,105697],{"class":250},"(model.nq, model.nv, model.nu)\n",[386,105699,105700,105708],{},[389,105701,105702],{},[392,105703,105704,105706],{},[395,105705,104655],{"align":23860},[395,105707,100781],{"align":23860},[433,105709,105710,105720,105730],{},[392,105711,105712,105717],{},[438,105713,105714],{"align":23860},[88,105715,105716],{},"nq",[438,105718,105719],{"align":23860},"位置变量数量",[392,105721,105722,105727],{},[438,105723,105724],{"align":23860},[88,105725,105726],{},"nv",[438,105728,105729],{"align":23860},"速度变量数量",[392,105731,105732,105736],{},[438,105733,105734],{"align":23860},[88,105735,102243],{},[438,105737,105738],{"align":23860},"控制输入数量",[217,105740,105742,105743,105745],{"id":105741},"误以为-qpos-一定等于关节数","误以为 ",[88,105744,104111],{}," 一定等于关节数",[21,105747,105748,105749,82611,105751,105753,105754,105756],{},"不是。例如 ",[88,105750,101701],{},[88,105752,104111],{}," 是 7 维，但 ",[88,105755,104441],{}," 是 6 维。",[217,105758,105760,105761,105763],{"id":105759},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[88,105762,104111],{}," 的第几位",[21,105765,105766],{},"初学时可以先打印：",[82,105768,105770],{"className":30459,"code":105769,"language":30461,"meta":26,"style":26},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[88,105771,105772,105782,105792,105804],{"__ignoreMap":26},[91,105773,105774,105776,105778,105780],{"class":93,"line":94},[91,105775,30496],{"class":105},[91,105777,251],{"class":250},[91,105779,101520],{"class":101},[91,105781,101523],{"class":250},[91,105783,105784,105786,105788,105790],{"class":93,"line":38},[91,105785,30496],{"class":105},[91,105787,251],{"class":250},[91,105789,101532],{"class":101},[91,105791,101535],{"class":250},[91,105793,105794,105796,105798,105801],{"class":93,"line":1304},[91,105795,30496],{"class":105},[91,105797,251],{"class":250},[91,105799,105800],{"class":101},"\"qpos:\"",[91,105802,105803],{"class":250},", data.qpos)\n",[91,105805,105806,105808,105810,105813],{"class":93,"line":1319},[91,105807,30496],{"class":105},[91,105809,251],{"class":250},[91,105811,105812],{"class":101},"\"qvel:\"",[91,105814,105815],{"class":250},", data.qvel)\n",[21,105817,105818],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[217,105820,105821],{"id":105821},"仿真结果每次都一样",[21,105823,105824,105825,105827],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[88,105826,104111],{},"、目标点或控制输入。",[190,105829,102688],{"id":102687},[21,105831,105832,105833,24741],{},"Python 控制 MuJoCo 的核心就是读写 ",[88,105834,33482],{},[14,105836,105837,105845,105850,105855],{},[17,105838,105839,105840,101099,105842,105844],{},"用 ",[88,105841,101151],{},[88,105843,101154],{}," 读取状态。",[17,105846,105839,105847,105849],{},[88,105848,101157],{}," 写入控制。",[17,105851,105839,105852,105854],{},[88,105853,101296],{}," 推进时间。",[17,105856,105857,105858,105860],{},"手动改状态后用 ",[88,105859,104331],{}," 刷新派生量。",[21,105862,105863],{},"理解这一章后，就可以进入关节和 actuator 控制。",[168,105865,105866],{},"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":26,"searchDepth":38,"depth":38,"links":105868},[105869,105870,105871,105878,105882,105883,105884,105894],{"id":100727,"depth":38,"text":100728},{"id":100850,"depth":38,"text":100851},{"id":101125,"depth":38,"text":101126,"children":105872},[105873,105875,105877],{"id":104636,"depth":1304,"text":105874},"qpos、qvel、ctrl 是什么",{"id":104714,"depth":1304,"text":105876},"mj_step 和 mj_forward 的区别",{"id":104803,"depth":1304,"text":104804},{"id":101333,"depth":38,"text":101334,"children":105879},[105880,105881],{"id":101653,"depth":1304,"text":101653},{"id":101789,"depth":1304,"text":101789},{"id":102396,"depth":38,"text":102397},{"id":102428,"depth":38,"text":102429},{"id":102533,"depth":38,"text":102534,"children":105885},[105886,105888,105889,105891,105893],{"id":105665,"depth":1304,"text":105887},"修改 data.qpos 后位置没有更新",{"id":105682,"depth":1304,"text":105682},{"id":105741,"depth":1304,"text":105890},"误以为 qpos 一定等于关节数",{"id":105759,"depth":1304,"text":105892},"不知道某个元素在 qpos 的第几位",{"id":105821,"depth":1304,"text":105821},{"id":102687,"depth":38,"text":102688},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104399,"description":26},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105901,"title":105902,"body":105903,"description":26,"extension":173,"meta":107593,"navigation":175,"path":107594,"seo":107595,"stem":107596,"__hash__":107597},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105904,"toc":107569},[105905,105908,105910,105913,105915,105940,105943,105962,105965,105967,105969,105993,105995,106009,106011,106052,106054,106078,106080,106083,106117,106119,106132,106135,106203,106212,106216,106219,106253,106259,106262,106266,106305,106308,106328,106332,106375,106377,106406,106409,106415,106418,106420,106814,106816,106828,106830,106841,106843,106846,106875,106883,106886,106921,106924,106926,106934,106937,106939,106950,106960,106980,106983,107019,107031,107079,107098,107140,107153,107181,107186,107207,107217,107235,107238,107272,107275,107295,107298,107317,107323,107325,107328,107334,107340,107350,107353,107359,107368,107370,107416,107418,107424,107430,107433,107436,107456,107459,107465,107471,107473,107496,107499,107502,107511,107514,107552,107554,107557,107563,107566],[10,105906,105902],{"id":105907},"_4关节actuator-与力控制",[190,105909,100728],{"id":100727},[21,105911,105912],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[21,105914,104412],{},[14,105916,105917,105923,105928,105932,105937],{},[17,105918,105919,105922],{},[88,105920,105921],{},"hinge"," 关节",[17,105924,105925],{},[88,105926,105927],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[17,105929,105930],{},[88,105931,101157],{},[17,105933,105934],{},[88,105935,105936],{},"ctrlrange",[17,105938,105939],{},"读取关节角和角速度",[21,105941,105942],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[82,105944,105946],{"className":30459,"code":105945,"language":30461,"meta":26,"style":26},"data.ctrl[0] = ...\n",[88,105947,105948],{"__ignoreMap":26},[91,105949,105950,105953,105955,105957,105959],{"class":93,"line":94},[91,105951,105952],{"class":250},"data.ctrl[",[91,105954,440],{"class":105},[91,105956,4566],{"class":250},[91,105958,296],{"class":153},[91,105960,105961],{"class":105}," ...\n",[21,105963,105964],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[190,105966,100851],{"id":100850},[21,105968,100854],{},[82,105970,105971],{"className":84,"code":104469,"language":86,"meta":26,"style":26},[88,105972,105973],{"__ignoreMap":26},[91,105974,105975,105977,105979,105981,105983,105985,105987,105989,105991],{"class":93,"line":94},[91,105976,24699],{"class":97},[91,105978,26437],{"class":101},[91,105980,23956],{"class":101},[91,105982,26522],{"class":105},[91,105984,104484],{"class":101},[91,105986,100879],{"class":101},[91,105988,102582],{"class":101},[91,105990,100895],{"class":101},[91,105992,104493],{"class":101},[21,105994,102900],{},[82,105996,105997],{"className":84,"code":101000,"language":86,"meta":26,"style":26},[88,105998,105999],{"__ignoreMap":26},[91,106000,106001,106003,106005,106007],{"class":93,"line":94},[91,106002,23953],{"class":97},[91,106004,23956],{"class":101},[91,106006,101011],{"class":101},[91,106008,101014],{"class":101},[21,106010,102917],{},[82,106012,106014],{"className":84,"code":106013,"language":86,"meta":26,"style":26},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[88,106015,106016,106033,106042],{"__ignoreMap":26},[91,106017,106018,106020,106022,106024,106027,106029,106031],{"class":93,"line":94},[91,106019,30411],{"class":97},[91,106021,29295],{"class":101},[91,106023,25237],{"class":105},[91,106025,106026],{"class":101}," mujoco-control",[91,106028,101056],{"class":101},[91,106030,101059],{"class":105},[91,106032,101062],{"class":105},[91,106034,106035,106037,106039],{"class":93,"line":38},[91,106036,30411],{"class":97},[91,106038,101069],{"class":101},[91,106040,106041],{"class":101}," mujoco-control\n",[91,106043,106044,106046,106048,106050],{"class":93,"line":1304},[91,106045,23953],{"class":97},[91,106047,23956],{"class":101},[91,106049,101011],{"class":101},[91,106051,101014],{"class":101},[21,106053,101085],{},[14,106055,106056,106062,106069,106075],{},[17,106057,106058,106061],{},[88,106059,106060],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[17,106063,106064,106066,106067,28504],{},[88,106065,101157],{}," 长度等于 ",[88,106068,102239],{},[17,106070,82303,106071,106074],{},[88,106072,106073],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[17,106076,106077],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[190,106079,101126],{"id":101125},[21,106081,106082],{},"关节决定 body 如何运动:",[82,106084,106086],{"className":53148,"code":106085,"language":53150,"meta":26,"style":26},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[88,106087,106088],{"__ignoreMap":26},[91,106089,106090,106092,106094,106096,106098,106101,106103,106105,106107,106110,106112,106115],{"class":93,"line":94},[91,106091,1159],{"class":250},[91,106093,103037],{"class":51381},[91,106095,15043],{"class":97},[91,106097,296],{"class":250},[91,106099,106100],{"class":101},"\"hinge\"",[91,106102,53905],{"class":97},[91,106104,296],{"class":250},[91,106106,106100],{"class":101},[91,106108,106109],{"class":97}," axis",[91,106111,296],{"class":250},[91,106113,106114],{"class":101},"\"0 1 0\"",[91,106116,101225],{"class":250},[21,106118,103133],{},[14,106120,106121,106126,106129],{},[17,106122,106123,106124],{},"名字是 ",[88,106125,105921],{},[17,106127,106128],{},"类型是旋转关节",[17,106130,106131],{},"绕 y 轴旋转",[21,106133,106134],{},"actuator 决定如何施加控制:",[82,106136,106138],{"className":53148,"code":106137,"language":53150,"meta":26,"style":26},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[88,106139,106140,106149,106195],{"__ignoreMap":26},[91,106141,106142,106144,106147],{"class":93,"line":94},[91,106143,1159],{"class":250},[91,106145,106146],{"class":51381},"actuator",[91,106148,51388],{"class":250},[91,106150,106151,106153,106156,106158,106160,106163,106166,106168,106170,106173,106175,106177,106180,106182,106185,106188,106190,106193],{"class":93,"line":38},[91,106152,52225],{"class":250},[91,106154,106155],{"class":51381},"motor",[91,106157,15043],{"class":97},[91,106159,296],{"class":250},[91,106161,106162],{"class":101},"\"hinge_motor\"",[91,106164,106165],{"class":97}," joint",[91,106167,296],{"class":250},[91,106169,106100],{"class":101},[91,106171,106172],{"class":97}," gear",[91,106174,296],{"class":250},[91,106176,3801],{"class":101},[91,106178,106179],{"class":97}," ctrlrange",[91,106181,296],{"class":250},[91,106183,106184],{"class":101},"\"-2 2\"",[91,106186,106187],{"class":97}," ctrllimited",[91,106189,296],{"class":250},[91,106191,106192],{"class":101},"\"true\"",[91,106194,101225],{"class":250},[91,106196,106197,106199,106201],{"class":93,"line":1304},[91,106198,51866],{"class":250},[91,106200,106146],{"class":51381},[91,106202,51388],{"class":250},[21,106204,106205,106208,106209,28504],{},[88,106206,106207],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[88,106210,106211],{},"[-2, 2]",[217,106213,106215],{"id":106214},"joint-和-actuator-的关系","joint 和 actuator 的关系",[21,106217,106218],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[386,106220,106221,106231],{},[389,106222,106223],{},[392,106224,106225,106227,106229],{},[395,106226,25875],{"align":23860},[395,106228,102777],{"align":23860},[395,106230,100815],{"align":23860},[433,106232,106233,106243],{},[392,106234,106235,106237,106240],{},[438,106236,103037],{"align":23860},[438,106238,106239],{"align":23860},"定义能怎么动",[438,106241,106242],{"align":23860},"门轴允许门旋转",[392,106244,106245,106247,106250],{},[438,106246,106146],{"align":23860},[438,106248,106249],{"align":23860},"定义怎么施力或控制",[438,106251,106252],{"align":23860},"人推门、马达带动门",[21,106254,106255,106256,106258],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[88,106257,101157],{}," 主动控制它。",[21,106260,106261],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[217,106263,106265],{"id":106264},"hinge-joint","hinge joint",[82,106267,106269],{"className":53148,"code":106268,"language":53150,"meta":26,"style":26},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[88,106270,106271],{"__ignoreMap":26},[91,106272,106273,106275,106277,106279,106281,106283,106285,106287,106289,106291,106293,106295,106298,106300,106303],{"class":93,"line":94},[91,106274,1159],{"class":250},[91,106276,103037],{"class":51381},[91,106278,15043],{"class":97},[91,106280,296],{"class":250},[91,106282,106100],{"class":101},[91,106284,53905],{"class":97},[91,106286,296],{"class":250},[91,106288,106100],{"class":101},[91,106290,106109],{"class":97},[91,106292,296],{"class":250},[91,106294,106114],{"class":101},[91,106296,106297],{"class":97}," damping",[91,106299,296],{"class":250},[91,106301,106302],{"class":101},"\"0.1\"",[91,106304,101225],{"class":250},[21,106306,106307],{},"含义：",[14,106309,106310,106316,106322],{},[17,106311,106312,106315],{},[88,106313,106314],{},"type=\"hinge\"","：只能绕一个轴旋转。",[17,106317,106318,106321],{},[88,106319,106320],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[17,106323,106324,106327],{},[88,106325,106326],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[217,106329,106331],{"id":106330},"motor-actuator","motor actuator",[82,106333,106335],{"className":53148,"code":106334,"language":53150,"meta":26,"style":26},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[88,106336,106337],{"__ignoreMap":26},[91,106338,106339,106341,106343,106345,106347,106349,106351,106353,106355,106357,106359,106361,106363,106365,106367,106369,106371,106373],{"class":93,"line":94},[91,106340,1159],{"class":250},[91,106342,106155],{"class":51381},[91,106344,15043],{"class":97},[91,106346,296],{"class":250},[91,106348,106162],{"class":101},[91,106350,106165],{"class":97},[91,106352,296],{"class":250},[91,106354,106100],{"class":101},[91,106356,106172],{"class":97},[91,106358,296],{"class":250},[91,106360,3801],{"class":101},[91,106362,106179],{"class":97},[91,106364,296],{"class":250},[91,106366,106184],{"class":101},[91,106368,106187],{"class":97},[91,106370,296],{"class":250},[91,106372,106192],{"class":101},[91,106374,101225],{"class":250},[21,106376,106307],{},[14,106378,106379,106388,106394,106400],{},[17,106380,106381,106384,106385,106387],{},[88,106382,106383],{},"joint=\"hinge\"","：这个电机作用在名为 ",[88,106386,105921],{}," 的关节上。",[17,106389,106390,106393],{},[88,106391,106392],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[17,106395,106396,106399],{},[88,106397,106398],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[17,106401,106402,106405],{},[88,106403,106404],{},"ctrllimited=\"true\"","：启用控制范围限制。",[21,106407,106408],{},"简单理解：",[82,106410,106413],{"className":106411,"code":106412,"language":5310,"meta":26},[5308],"实际施加效果 ≈ data.ctrl[0] * gear\n",[88,106414,106412],{"__ignoreMap":26},[21,106416,106417],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[190,106419,101334],{"id":101333},[82,106421,106423],{"className":30459,"code":106422,"language":30461,"meta":26,"style":26},"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",[88,106424,106425,106432,106436,106442,106452,106456,106460,106468,106473,106478,106482,106486,106491,106496,106500,106505,106510,106515,106520,106524,106528,106532,106537,106542,106547,106551,106555,106559,106563,106575,106587,106595,106599,106609,106619,106629,106633,106646,106659,106663,106680,106694,106729,106733,106737,106748,106763,106778,106790,106794,106798,106810],{"__ignoreMap":26},[91,106426,106427,106429],{"class":93,"line":94},[91,106428,30473],{"class":153},[91,106430,106431],{"class":250}," math\n",[91,106433,106434],{"class":93,"line":38},[91,106435,2523],{"emptyLinePlaceholder":175},[91,106437,106438,106440],{"class":93,"line":1304},[91,106439,30473],{"class":153},[91,106441,101382],{"class":250},[91,106443,106444,106446,106448,106450],{"class":93,"line":1319},[91,106445,30473],{"class":153},[91,106447,31461],{"class":250},[91,106449,31464],{"class":153},[91,106451,31467],{"class":250},[91,106453,106454],{"class":93,"line":1325},[91,106455,2523],{"emptyLinePlaceholder":175},[91,106457,106458],{"class":93,"line":1339},[91,106459,2523],{"emptyLinePlaceholder":175},[91,106461,106462,106464,106466],{"class":93,"line":1345},[91,106463,101395],{"class":105},[91,106465,13687],{"class":153},[91,106467,101400],{"class":101},[91,106469,106470],{"class":93,"line":1436},[91,106471,106472],{"class":101},"\u003Cmujoco model=\"one_link_motor\">\n",[91,106474,106475],{"class":93,"line":1442},[91,106476,106477],{"class":101},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[91,106479,106480],{"class":93,"line":1454},[91,106481,2523],{"emptyLinePlaceholder":175},[91,106483,106484],{"class":93,"line":1736},[91,106485,101419],{"class":101},[91,106487,106488],{"class":93,"line":1741},[91,106489,106490],{"class":101},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[91,106492,106493],{"class":93,"line":1747},[91,106494,106495],{"class":101},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[91,106497,106498],{"class":93,"line":1752},[91,106499,2523],{"emptyLinePlaceholder":175},[91,106501,106502],{"class":93,"line":1766},[91,106503,106504],{"class":101},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[91,106506,106507],{"class":93,"line":1771},[91,106508,106509],{"class":101},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[91,106511,106512],{"class":93,"line":1777},[91,106513,106514],{"class":101},"        \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",[91,106516,106517],{"class":93,"line":1798},[91,106518,106519],{"class":101},"      \u003C\u002Fbody>\n",[91,106521,106522],{"class":93,"line":1803},[91,106523,101448],{"class":101},[91,106525,106526],{"class":93,"line":1817},[91,106527,101453],{"class":101},[91,106529,106530],{"class":93,"line":1822},[91,106531,2523],{"emptyLinePlaceholder":175},[91,106533,106534],{"class":93,"line":1851},[91,106535,106536],{"class":101},"  \u003Cactuator>\n",[91,106538,106539],{"class":93,"line":1856},[91,106540,106541],{"class":101},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[91,106543,106544],{"class":93,"line":1873},[91,106545,106546],{"class":101},"  \u003C\u002Factuator>\n",[91,106548,106549],{"class":93,"line":1878},[91,106550,101458],{"class":101},[91,106552,106553],{"class":93,"line":1883},[91,106554,95779],{"class":101},[91,106556,106557],{"class":93,"line":1888},[91,106558,2523],{"emptyLinePlaceholder":175},[91,106560,106561],{"class":93,"line":1902},[91,106562,2523],{"emptyLinePlaceholder":175},[91,106564,106565,106567,106569,106571,106573],{"class":93,"line":1907},[91,106566,32028],{"class":153},[91,106568,2096],{"class":97},[91,106570,101479],{"class":250},[91,106572,95767],{"class":105},[91,106574,3862],{"class":250},[91,106576,106577,106579,106581,106583,106585],{"class":93,"line":2700},[91,106578,101488],{"class":250},[91,106580,296],{"class":153},[91,106582,101493],{"class":250},[91,106584,101395],{"class":105},[91,106586,257],{"class":250},[91,106588,106589,106591,106593],{"class":93,"line":2714},[91,106590,101502],{"class":250},[91,106592,296],{"class":153},[91,106594,101507],{"class":250},[91,106596,106597],{"class":93,"line":2722},[91,106598,2523],{"emptyLinePlaceholder":175},[91,106600,106601,106603,106605,106607],{"class":93,"line":2727},[91,106602,31380],{"class":105},[91,106604,251],{"class":250},[91,106606,101520],{"class":101},[91,106608,101523],{"class":250},[91,106610,106611,106613,106615,106617],{"class":93,"line":2733},[91,106612,31380],{"class":105},[91,106614,251],{"class":250},[91,106616,101532],{"class":101},[91,106618,101535],{"class":250},[91,106620,106621,106623,106625,106627],{"class":93,"line":2739},[91,106622,31380],{"class":105},[91,106624,251],{"class":250},[91,106626,101544],{"class":101},[91,106628,101547],{"class":250},[91,106630,106631],{"class":93,"line":2744},[91,106632,2523],{"emptyLinePlaceholder":175},[91,106634,106635,106637,106640,106642,106644],{"class":93,"line":8071},[91,106636,3224],{"class":153},[91,106638,106639],{"class":250}," model.nu ",[91,106641,21071],{"class":153},[91,106643,25240],{"class":105},[91,106645,3862],{"class":250},[91,106647,106648,106650,106652,106654,106657],{"class":93,"line":8095},[91,106649,103513],{"class":153},[91,106651,103516],{"class":105},[91,106653,251],{"class":250},[91,106655,106656],{"class":101},"\"expected exactly one actuator\"",[91,106658,257],{"class":250},[91,106660,106661],{"class":93,"line":8100},[91,106662,2523],{"emptyLinePlaceholder":175},[91,106664,106665,106667,106669,106671,106673,106675,106678],{"class":93,"line":8106},[91,106666,3324],{"class":153},[91,106668,31697],{"class":250},[91,106670,26165],{"class":153},[91,106672,32524],{"class":105},[91,106674,251],{"class":250},[91,106676,106677],{"class":105},"2000",[91,106679,30867],{"class":250},[91,106681,106682,106685,106687,106689,106691],{"class":93,"line":8133},[91,106683,106684],{"class":250},"        t ",[91,106686,296],{"class":153},[91,106688,31697],{"class":250},[91,106690,704],{"class":153},[91,106692,106693],{"class":250}," model.opt.timestep\n",[91,106695,106696,106699,106701,106703,106705,106708,106710,106713,106715,106717,106720,106722,106724,106726],{"class":93,"line":8138},[91,106697,106698],{"class":250},"        data.ctrl[",[91,106700,440],{"class":105},[91,106702,4566],{"class":250},[91,106704,296],{"class":153},[91,106706,106707],{"class":105}," 1.5",[91,106709,6641],{"class":153},[91,106711,106712],{"class":250}," math.sin(",[91,106714,105341],{"class":105},[91,106716,6641],{"class":153},[91,106718,106719],{"class":250}," math.pi ",[91,106721,704],{"class":153},[91,106723,61948],{"class":105},[91,106725,6641],{"class":153},[91,106727,106728],{"class":250}," t)\n",[91,106730,106731],{"class":93,"line":8144},[91,106732,101597],{"class":250},[91,106734,106735],{"class":93,"line":8156},[91,106736,2523],{"emptyLinePlaceholder":175},[91,106738,106739,106741,106743,106746],{"class":93,"line":8168},[91,106740,31380],{"class":105},[91,106742,251],{"class":250},[91,106744,106745],{"class":101},"\"time:\"",[91,106747,101559],{"class":250},[91,106749,106750,106752,106754,106757,106759,106761],{"class":93,"line":8180},[91,106751,31380],{"class":105},[91,106753,251],{"class":250},[91,106755,106756],{"class":101},"\"joint qpos:\"",[91,106758,105011],{"class":250},[91,106760,542],{"class":105},[91,106762,30578],{"class":250},[91,106764,106765,106767,106769,106772,106774,106776],{"class":93,"line":9839},[91,106766,31380],{"class":105},[91,106768,251],{"class":250},[91,106770,106771],{"class":101},"\"joint qvel:\"",[91,106773,105027],{"class":250},[91,106775,542],{"class":105},[91,106777,30578],{"class":250},[91,106779,106780,106782,106784,106787],{"class":93,"line":9864},[91,106781,31380],{"class":105},[91,106783,251],{"class":250},[91,106785,106786],{"class":101},"\"last ctrl:\"",[91,106788,106789],{"class":250},", data.ctrl.copy())\n",[91,106791,106792],{"class":93,"line":9887},[91,106793,2523],{"emptyLinePlaceholder":175},[91,106795,106796],{"class":93,"line":9911},[91,106797,2523],{"emptyLinePlaceholder":175},[91,106799,106800,106802,106804,106806,106808],{"class":93,"line":9916},[91,106801,1655],{"class":153},[91,106803,31301],{"class":105},[91,106805,101640],{"class":153},[91,106807,101643],{"class":101},[91,106809,3862],{"class":250},[91,106811,106812],{"class":93,"line":9921},[91,106813,101650],{"class":250},[21,106815,103651],{},[82,106817,106819],{"className":84,"code":106818,"language":86,"meta":26,"style":26},"touch ch4_joint_motor.py\n",[88,106820,106821],{"__ignoreMap":26},[91,106822,106823,106825],{"class":93,"line":94},[91,106824,101364],{"class":97},[91,106826,106827],{"class":101}," ch4_joint_motor.py\n",[21,106829,102382],{},[82,106831,106833],{"className":84,"code":106832,"language":86,"meta":26,"style":26},"python ch4_joint_motor.py\n",[88,106834,106835],{"__ignoreMap":26},[91,106836,106837,106839],{"class":93,"line":94},[91,106838,30461],{"class":97},[91,106840,106827],{"class":101},[217,106842,101653],{"id":101653},[21,106844,106845],{},"检查 actuator 数量：",[82,106847,106849],{"className":30459,"code":106848,"language":30461,"meta":26,"style":26},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[88,106850,106851,106863],{"__ignoreMap":26},[91,106852,106853,106855,106857,106859,106861],{"class":93,"line":94},[91,106854,1655],{"class":153},[91,106856,106639],{"class":250},[91,106858,21071],{"class":153},[91,106860,25240],{"class":105},[91,106862,3862],{"class":250},[91,106864,106865,106867,106869,106871,106873],{"class":93,"line":38},[91,106866,103976],{"class":153},[91,106868,103516],{"class":105},[91,106870,251],{"class":250},[91,106872,106656],{"class":101},[91,106874,257],{"class":250},[21,106876,106877,106879,106880,106882],{},[88,106878,102239],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[88,106881,101157],{}," 长度应该是 1。",[21,106884,106885],{},"产生正弦控制信号：",[82,106887,106889],{"className":30459,"code":106888,"language":30461,"meta":26,"style":26},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[88,106890,106891],{"__ignoreMap":26},[91,106892,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911,106913,106915,106917,106919],{"class":93,"line":94},[91,106894,105952],{"class":250},[91,106896,440],{"class":105},[91,106898,4566],{"class":250},[91,106900,296],{"class":153},[91,106902,106707],{"class":105},[91,106904,6641],{"class":153},[91,106906,106712],{"class":250},[91,106908,105341],{"class":105},[91,106910,6641],{"class":153},[91,106912,106719],{"class":250},[91,106914,704],{"class":153},[91,106916,61948],{"class":105},[91,106918,6641],{"class":153},[91,106920,106728],{"class":250},[21,106922,106923],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[21,106925,101754],{},[82,106927,106928],{"className":30459,"code":104586,"language":30461,"meta":26,"style":26},[88,106929,106930],{"__ignoreMap":26},[91,106931,106932],{"class":93,"line":94},[91,106933,104586],{"class":250},[21,106935,106936],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[217,106938,101789],{"id":101789},[82,106940,106942],{"className":30459,"code":106941,"language":30461,"meta":26,"style":26},"import math\n",[88,106943,106944],{"__ignoreMap":26},[91,106945,106946,106948],{"class":93,"line":94},[91,106947,30473],{"class":153},[91,106949,106431],{"class":250},[21,106951,106952,106953,101099,106956,106959],{},"导入 Python 标准库里的数学模块。后面要用 ",[88,106954,106955],{},"math.sin",[88,106957,106958],{},"math.pi"," 生成周期变化的控制信号。",[82,106961,106962],{"className":30459,"code":103767,"language":30461,"meta":26,"style":26},[88,106963,106964,106970],{"__ignoreMap":26},[91,106965,106966,106968],{"class":93,"line":94},[91,106967,30473],{"class":153},[91,106969,101382],{"class":250},[91,106971,106972,106974,106976,106978],{"class":93,"line":38},[91,106973,30473],{"class":153},[91,106975,31461],{"class":250},[91,106977,31464],{"class":153},[91,106979,31467],{"class":250},[21,106981,106982],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[82,106984,106985],{"className":53148,"code":106268,"language":53150,"meta":26,"style":26},[88,106986,106987],{"__ignoreMap":26},[91,106988,106989,106991,106993,106995,106997,106999,107001,107003,107005,107007,107009,107011,107013,107015,107017],{"class":93,"line":94},[91,106990,1159],{"class":250},[91,106992,103037],{"class":51381},[91,106994,15043],{"class":97},[91,106996,296],{"class":250},[91,106998,106100],{"class":101},[91,107000,53905],{"class":97},[91,107002,296],{"class":250},[91,107004,106100],{"class":101},[91,107006,106109],{"class":97},[91,107008,296],{"class":250},[91,107010,106114],{"class":101},[91,107012,106297],{"class":97},[91,107014,296],{"class":250},[91,107016,106302],{"class":101},[91,107018,101225],{"class":250},[21,107020,107021,107022,107024,107025,107027,107028,107030],{},"这行定义关节。",[88,107023,105921],{}," 表示旋转关节。",[88,107026,106320],{}," 表示绕 y 轴旋转。",[88,107029,106326],{}," 表示有一点阻尼，运动不会完全无损耗。",[82,107032,107034],{"className":53148,"code":107033,"language":53150,"meta":26,"style":26},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[88,107035,107036],{"__ignoreMap":26},[91,107037,107038,107040,107042,107044,107046,107049,107051,107053,107056,107059,107061,107064,107066,107068,107070,107072,107074,107077],{"class":93,"line":94},[91,107039,1159],{"class":250},[91,107041,101201],{"class":51381},[91,107043,15043],{"class":97},[91,107045,296],{"class":250},[91,107047,107048],{"class":101},"\"link_geom\"",[91,107050,53905],{"class":97},[91,107052,296],{"class":250},[91,107054,107055],{"class":101},"\"capsule\"",[91,107057,107058],{"class":97}," fromto",[91,107060,296],{"class":250},[91,107062,107063],{"class":101},"\"0 0 0 0 0 0.5\"",[91,107065,101217],{"class":97},[91,107067,296],{"class":250},[91,107069,103859],{"class":101},[91,107071,102082],{"class":97},[91,107073,296],{"class":250},[91,107075,107076],{"class":101},"\"0.5\"",[91,107078,101225],{"class":250},[21,107080,107081,107082,107084,107085,107087,107088,107091,107092,28504,107095,107097],{},"这行定义摆杆的形状。",[88,107083,103246],{}," 是胶囊体，适合表示杆子。",[88,107086,103257],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[88,107089,107090],{},"(0,0,0)"," 延伸到 ",[88,107093,107094],{},"(0,0,0.5)",[88,107096,103251],{}," 是半径。",[82,107099,107100],{"className":53148,"code":106334,"language":53150,"meta":26,"style":26},[88,107101,107102],{"__ignoreMap":26},[91,107103,107104,107106,107108,107110,107112,107114,107116,107118,107120,107122,107124,107126,107128,107130,107132,107134,107136,107138],{"class":93,"line":94},[91,107105,1159],{"class":250},[91,107107,106155],{"class":51381},[91,107109,15043],{"class":97},[91,107111,296],{"class":250},[91,107113,106162],{"class":101},[91,107115,106165],{"class":97},[91,107117,296],{"class":250},[91,107119,106100],{"class":101},[91,107121,106172],{"class":97},[91,107123,296],{"class":250},[91,107125,3801],{"class":101},[91,107127,106179],{"class":97},[91,107129,296],{"class":250},[91,107131,106184],{"class":101},[91,107133,106187],{"class":97},[91,107135,296],{"class":250},[91,107137,106192],{"class":101},[91,107139,101225],{"class":250},[21,107141,107142,107143,107145,107146,107149,107150,107152],{},"这行定义电机。它作用在 ",[88,107144,105921],{}," 关节上。",[88,107147,107148],{},"gear"," 可以理解成放大倍数。",[88,107151,105936],{}," 限制控制输入范围。",[82,107154,107155],{"className":30459,"code":106848,"language":30461,"meta":26,"style":26},[88,107156,107157,107169],{"__ignoreMap":26},[91,107158,107159,107161,107163,107165,107167],{"class":93,"line":94},[91,107160,1655],{"class":153},[91,107162,106639],{"class":250},[91,107164,21071],{"class":153},[91,107166,25240],{"class":105},[91,107168,3862],{"class":250},[91,107170,107171,107173,107175,107177,107179],{"class":93,"line":38},[91,107172,103976],{"class":153},[91,107174,103516],{"class":105},[91,107176,251],{"class":250},[91,107178,106656],{"class":101},[91,107180,257],{"class":250},[21,107182,107183,107185],{},[88,107184,102239],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[82,107187,107189],{"className":30459,"code":107188,"language":30461,"meta":26,"style":26},"for step in range(2000):\n",[88,107190,107191],{"__ignoreMap":26},[91,107192,107193,107195,107197,107199,107201,107203,107205],{"class":93,"line":94},[91,107194,3148],{"class":153},[91,107196,31697],{"class":250},[91,107198,26165],{"class":153},[91,107200,32524],{"class":105},[91,107202,251],{"class":250},[91,107204,106677],{"class":105},[91,107206,30867],{"class":250},[21,107208,107209,107210,107212,107213,107216],{},"循环 2000 步。这里没有用 ",[88,107211,1241],{},"，而是用 ",[88,107214,107215],{},"step","，因为后面要用当前步数计算时间。",[82,107218,107220],{"className":30459,"code":107219,"language":30461,"meta":26,"style":26},"t = step * model.opt.timestep\n",[88,107221,107222],{"__ignoreMap":26},[91,107223,107224,107227,107229,107231,107233],{"class":93,"line":94},[91,107225,107226],{"class":250},"t ",[91,107228,296],{"class":153},[91,107230,31697],{"class":250},[91,107232,704],{"class":153},[91,107234,106693],{"class":250},[21,107236,107237],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[82,107239,107240],{"className":30459,"code":106888,"language":30461,"meta":26,"style":26},[88,107241,107242],{"__ignoreMap":26},[91,107243,107244,107246,107248,107250,107252,107254,107256,107258,107260,107262,107264,107266,107268,107270],{"class":93,"line":94},[91,107245,105952],{"class":250},[91,107247,440],{"class":105},[91,107249,4566],{"class":250},[91,107251,296],{"class":153},[91,107253,106707],{"class":105},[91,107255,6641],{"class":153},[91,107257,106712],{"class":250},[91,107259,105341],{"class":105},[91,107261,6641],{"class":153},[91,107263,106719],{"class":250},[91,107265,704],{"class":153},[91,107267,61948],{"class":105},[91,107269,6641],{"class":153},[91,107271,106728],{"class":250},[21,107273,107274],{},"这行给电机输入一个正弦波。拆开看：",[14,107276,107277,107283,107289],{},[17,107278,107279,107282],{},[88,107280,107281],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[17,107284,107285,107288],{},[88,107286,107287],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[17,107290,107291,107294],{},[88,107292,107293],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[21,107296,107297],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[82,107299,107301],{"className":30459,"code":107300,"language":30461,"meta":26,"style":26},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[88,107302,107303],{"__ignoreMap":26},[91,107304,107305,107307,107309,107311,107313,107315],{"class":93,"line":94},[91,107306,30496],{"class":105},[91,107308,251],{"class":250},[91,107310,106756],{"class":101},[91,107312,105011],{"class":250},[91,107314,542],{"class":105},[91,107316,30578],{"class":250},[21,107318,107319,107320,107322],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[88,107321,101151],{}," 只有一个数。",[190,107324,102397],{"id":102396},[21,107326,107327],{},"输出类似:",[82,107329,107332],{"className":107330,"code":107331,"language":5310,"meta":26},[5308],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[88,107333,107331],{"__ignoreMap":26},[21,107335,107336,107337,107339],{},"这里 ",[88,107338,106207],{}," 是电机输入。",[21,107341,107342,107345,107346,107349],{},[88,107343,107344],{},"joint qpos"," 是关节角度，单位通常是弧度。",[88,107347,107348],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[21,107351,107352],{},"角度单位提示：",[82,107354,107357],{"className":107355,"code":107356,"language":5310,"meta":26},[5308],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[88,107358,107356],{"__ignoreMap":26},[21,107360,107361,107362,107364,107365,107367],{},"如果你看到 ",[88,107363,104111],{}," 是 ",[88,107366,35410],{},"，大约就是 28.6 度。",[190,107369,102429],{"id":102428},[14,107371,107372,107379,107382,107389,107392,107400,107408],{},[17,107373,102492,107374,102495,107376,28504],{},[88,107375,106392],{},[88,107377,107378],{},"gear=\"5\"",[17,107380,107381],{},"重新运行，观察关节运动是否更剧烈。",[17,107383,102492,107384,102495,107386,28504],{},[88,107385,105936],{},[88,107387,107388],{},"-0.2 0.2",[17,107390,107391],{},"重新运行，观察控制能力是否变弱。",[17,107393,107394,107395,107397,107398,28504],{},"去掉 actuator，确认 ",[88,107396,102239],{}," 变成 ",[88,107399,440],{},[17,107401,102492,107402,102495,107404,107407],{},[88,107403,106326],{},[88,107405,107406],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[17,107409,102492,107410,102495,107412,107415],{},[88,107411,106320],{},[88,107413,107414],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[190,107417,102534],{"id":102533},[217,107419,107421],{"id":107420},"indexerror-index-0-is-out-of-bounds",[88,107422,107423],{},"IndexError: index 0 is out of bounds",[21,107425,107426,107427,107429],{},"原因是 ",[88,107428,106073],{},"，没有 actuator。",[217,107431,107432],{"id":107432},"关节几乎不动",[21,107434,107435],{},"可能原因:",[14,107437,107438,107443,107447,107453],{},[17,107439,107440,107442],{},[88,107441,107148],{}," 太小",[17,107444,107445,107442],{},[88,107446,105936],{},[17,107448,107449,107452],{},[88,107450,107451],{},"damping"," 太大",[17,107454,107455],{},"重力方向导致运动不明显",[217,107457,107458],{"id":107458},"模型编译失败",[21,107460,107461,107462,107464],{},"检查 actuator 引用的 ",[88,107463,106383],{}," 是否存在，joint 名称是否拼写一致。",[217,107466,107468,107470],{"id":107467},"datactrl0-写了但没有效果",[88,107469,106207],{}," 写了但没有效果",[21,107472,102656],{},[14,107474,107475,107480,107483,107488,107493],{},[17,107476,107477,107479],{},[88,107478,102239],{}," 是否大于 0。",[17,107481,107482],{},"motor 是否引用了正确 joint。",[17,107484,107485,107487],{},[88,107486,107148],{}," 是否太小。",[17,107489,107490,107492],{},[88,107491,105936],{}," 是否把输入限制得太小。",[17,107494,107495],{},"body 是否真的有可动 joint。",[217,107497,107498],{"id":107498},"控制输入超过范围会怎样",[21,107500,107501],{},"如果设置了：",[82,107503,107505],{"className":53148,"code":107504,"language":53150,"meta":26,"style":26},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[88,107506,107507],{"__ignoreMap":26},[91,107508,107509],{"class":93,"line":94},[91,107510,107504],{"class":250},[21,107512,107513],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[82,107515,107517],{"className":30459,"code":107516,"language":30461,"meta":26,"style":26},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[88,107518,107519,107539],{"__ignoreMap":26},[91,107520,107521,107524,107526,107529,107531,107533,107535,107537],{"class":93,"line":94},[91,107522,107523],{"class":250},"action ",[91,107525,296],{"class":153},[91,107527,107528],{"class":250}," np.clip(action, ",[91,107530,781],{"class":153},[91,107532,105341],{"class":105},[91,107534,12558],{"class":250},[91,107536,105341],{"class":105},[91,107538,257],{"class":250},[91,107540,107541,107543,107545,107547,107549],{"class":93,"line":38},[91,107542,105952],{"class":250},[91,107544,440],{"class":105},[91,107546,4566],{"class":250},[91,107548,296],{"class":153},[91,107550,107551],{"class":250}," action\n",[190,107553,102688],{"id":102687},[21,107555,107556],{},"这一章建立了控制任务的基本形式：",[82,107558,107561],{"className":107559,"code":107560,"language":5310,"meta":26},[5308],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[88,107562,107560],{"__ignoreMap":26},[21,107564,107565],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[168,107567,107568],{},"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":26,"searchDepth":38,"depth":38,"links":107570},[107571,107572,107573,107578,107582,107583,107584,107592],{"id":100727,"depth":38,"text":100728},{"id":100850,"depth":38,"text":100851},{"id":101125,"depth":38,"text":101126,"children":107574},[107575,107576,107577],{"id":106214,"depth":1304,"text":106215},{"id":106264,"depth":1304,"text":106265},{"id":106330,"depth":1304,"text":106331},{"id":101333,"depth":38,"text":101334,"children":107579},[107580,107581],{"id":101653,"depth":1304,"text":101653},{"id":101789,"depth":1304,"text":101789},{"id":102396,"depth":38,"text":102397},{"id":102428,"depth":38,"text":102429},{"id":102533,"depth":38,"text":102534,"children":107585},[107586,107587,107588,107589,107591],{"id":107420,"depth":1304,"text":107423},{"id":107432,"depth":1304,"text":107432},{"id":107458,"depth":1304,"text":107458},{"id":107467,"depth":1304,"text":107590},"data.ctrl[0] 写了但没有效果",{"id":107498,"depth":1304,"text":107498},{"id":102687,"depth":38,"text":102688},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105902,"description":26},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107599,"title":107600,"body":107601,"description":26,"extension":173,"meta":109510,"navigation":175,"path":109511,"seo":109512,"stem":109513,"__hash__":109514},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107602,"toc":109486},[107603,107606,107608,107611,107619,107622,107639,107642,107667,107670,107716,107718,107720,107775,107777,107796,107798,107841,107844,107861,107864,107880,107890,107897,107899,107902,107905,107939,107942,107990,107994,107997,108011,108020,108024,108027,108052,108055,108059,108072,108075,108081,108084,108099,108101,108104,108364,108366,108378,108381,108693,108695,108707,108709,108712,108727,108732,108735,108757,108760,108763,108797,108800,108804,108815,108818,108835,108838,108852,108859,108879,108886,108900,108903,108915,108930,108950,108953,108975,108978,108982,108997,109008,109023,109026,109056,109072,109101,109109,109133,109136,109154,109164,109176,109183,109192,109198,109207,109210,109212,109221,109224,109239,109241,109244,109255,109258,109269,109272,109290,109292,109309,109312,109340,109342,109346,109349,109379,109385,109388,109392,109400,109403,109405,109426,109429,109432,109448,109451,109467,109469,109472,109483],[10,107604,107600],{"id":107605},"_5viewer-可视化与-renderer-离屏渲染",[190,107607,100728],{"id":100727},[21,107609,107610],{},"本章掌握两类可视化方式:",[14,107612,107613,107616],{},[17,107614,107615],{},"交互式 viewer: 适合人工观察仿真",[17,107617,107618],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[21,107620,107621],{},"使用官方接口:",[82,107623,107625],{"className":30459,"code":107624,"language":30461,"meta":26,"style":26},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[88,107626,107627,107634],{"__ignoreMap":26},[91,107628,107629,107631],{"class":93,"line":94},[91,107630,30473],{"class":153},[91,107632,107633],{"class":250}," mujoco.viewer\n",[91,107635,107636],{"class":93,"line":38},[91,107637,107638],{"class":250},"mujoco.viewer.launch_passive(model, data)\n",[21,107640,107641],{},"以及:",[82,107643,107645],{"className":30459,"code":107644,"language":30461,"meta":26,"style":26},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[88,107646,107647,107657],{"__ignoreMap":26},[91,107648,107649,107652,107654],{"class":93,"line":94},[91,107650,107651],{"class":250},"renderer ",[91,107653,296],{"class":153},[91,107655,107656],{"class":250}," mujoco.Renderer(model)\n",[91,107658,107659,107662,107664],{"class":93,"line":38},[91,107660,107661],{"class":250},"image ",[91,107663,296],{"class":153},[91,107665,107666],{"class":250}," renderer.render()\n",[21,107668,107669],{},"新手建议先理解二者区别：",[386,107671,107672,107688],{},[389,107673,107674],{},[392,107675,107676,107679,107682,107685],{},[395,107677,107678],{"align":23860},"工具",[395,107680,107681],{"align":23860},"用途",[395,107683,107684],{"align":23860},"是否打开窗口",[395,107686,107687],{"align":23860},"常见场景",[433,107689,107690,107703],{},[392,107691,107692,107695,107698,107700],{},[438,107693,107694],{"align":23860},"Viewer",[438,107696,107697],{"align":23860},"人眼实时观察仿真",[438,107699,104746],{"align":23860},[438,107701,107702],{"align":23860},"调试模型、看控制效果",[392,107704,107705,107708,107711,107713],{},[438,107706,107707],{"align":23860},"Renderer",[438,107709,107710],{"align":23860},"生成图像数组",[438,107712,104759],{"align":23860},[438,107714,107715],{"align":23860},"保存图片、训练视觉策略、服务器批量采集",[190,107717,100851],{"id":100850},[21,107719,100854],{},[82,107721,107723],{"className":84,"code":107722,"language":86,"meta":26,"style":26},"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",[88,107724,107725,107737,107747,107755,107763],{"__ignoreMap":26},[91,107726,107727,107729,107731,107733,107735],{"class":93,"line":94},[91,107728,24699],{"class":97},[91,107730,26437],{"class":101},[91,107732,23956],{"class":101},[91,107734,26522],{"class":105},[91,107736,24801],{"class":105},[91,107738,107739,107741,107743,107745],{"class":93,"line":38},[91,107740,100889],{"class":101},[91,107742,100892],{"class":101},[91,107744,100895],{"class":101},[91,107746,24801],{"class":105},[91,107748,107749,107751,107753],{"class":93,"line":1304},[91,107750,100902],{"class":101},[91,107752,100905],{"class":101},[91,107754,24801],{"class":105},[91,107756,107757,107759,107761],{"class":93,"line":1319},[91,107758,100912],{"class":101},[91,107760,100915],{"class":101},[91,107762,24801],{"class":105},[91,107764,107765,107767,107769,107771,107773],{"class":93,"line":1325},[91,107766,100922],{"class":101},[91,107768,100925],{"class":101},[91,107770,100928],{"class":101},[91,107772,100931],{"class":101},[91,107774,102597],{"class":101},[21,107776,102900],{},[82,107778,107780],{"className":84,"code":107779,"language":86,"meta":26,"style":26},"pip install \"mujoco>=2.3\" numpy pillow\n",[88,107781,107782],{"__ignoreMap":26},[91,107783,107784,107786,107788,107790,107793],{"class":93,"line":94},[91,107785,23953],{"class":97},[91,107787,23956],{"class":101},[91,107789,101011],{"class":101},[91,107791,107792],{"class":101}," numpy",[91,107794,107795],{"class":101}," pillow\n",[21,107797,102917],{},[82,107799,107801],{"className":84,"code":107800,"language":86,"meta":26,"style":26},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[88,107802,107803,107820,107829],{"__ignoreMap":26},[91,107804,107805,107807,107809,107811,107814,107816,107818],{"class":93,"line":94},[91,107806,30411],{"class":97},[91,107808,29295],{"class":101},[91,107810,25237],{"class":105},[91,107812,107813],{"class":101}," mujoco-render",[91,107815,101056],{"class":101},[91,107817,101059],{"class":105},[91,107819,101062],{"class":105},[91,107821,107822,107824,107826],{"class":93,"line":38},[91,107823,30411],{"class":97},[91,107825,101069],{"class":101},[91,107827,107828],{"class":101}," mujoco-render\n",[91,107830,107831,107833,107835,107837,107839],{"class":93,"line":1304},[91,107832,23953],{"class":97},[91,107834,23956],{"class":101},[91,107836,101011],{"class":101},[91,107838,107792],{"class":101},[91,107840,107795],{"class":101},[21,107842,107843],{},"离屏渲染后端:",[82,107845,107847],{"className":84,"code":107846,"language":86,"meta":26,"style":26},"export MUJOCO_GL=egl\n",[88,107848,107849],{"__ignoreMap":26},[91,107850,107851,107853,107856,107858],{"class":93,"line":94},[91,107852,25165],{"class":153},[91,107854,107855],{"class":250}," MUJOCO_GL",[91,107857,296],{"class":153},[91,107859,107860],{"class":250},"egl\n",[21,107862,107863],{},"或:",[82,107865,107867],{"className":84,"code":107866,"language":86,"meta":26,"style":26},"export MUJOCO_GL=osmesa\n",[88,107868,107869],{"__ignoreMap":26},[91,107870,107871,107873,107875,107877],{"class":93,"line":94},[91,107872,25165],{"class":153},[91,107874,107855],{"class":250},[91,107876,296],{"class":153},[91,107878,107879],{"class":250},"osmesa\n",[21,107881,107882,107883,107886,107887,28504],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[88,107884,107885],{},"egl"," 失败，再尝试 ",[88,107888,107889],{},"osmesa",[21,107891,107892,107893,107896],{},"如果你在本机桌面环境运行，通常先不要设置 ",[88,107894,107895],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[190,107898,101126],{"id":101125},[21,107900,107901],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[21,107903,107904],{},"典型 viewer 流程:",[82,107906,107908],{"className":30459,"code":107907,"language":30461,"meta":26,"style":26},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[88,107909,107910,107923,107930,107934],{"__ignoreMap":26},[91,107911,107912,107915,107918,107920],{"class":93,"line":94},[91,107913,107914],{"class":153},"with",[91,107916,107917],{"class":250}," mujoco.viewer.launch_passive(model, data) ",[91,107919,31464],{"class":153},[91,107921,107922],{"class":250}," viewer:\n",[91,107924,107925,107927],{"class":93,"line":38},[91,107926,2374],{"class":153},[91,107928,107929],{"class":250}," viewer.is_running():\n",[91,107931,107932],{"class":93,"line":1304},[91,107933,101597],{"class":250},[91,107935,107936],{"class":93,"line":1319},[91,107937,107938],{"class":250},"        viewer.sync()\n",[21,107940,107941],{},"典型 renderer 流程:",[82,107943,107945],{"className":30459,"code":107944,"language":30461,"meta":26,"style":26},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[88,107946,107947,107973,107977,107982],{"__ignoreMap":26},[91,107948,107949,107951,107953,107956,107958,107960,107962,107964,107966,107968,107971],{"class":93,"line":94},[91,107950,107651],{"class":250},[91,107952,296],{"class":153},[91,107954,107955],{"class":250}," mujoco.Renderer(model, ",[91,107957,25104],{"class":5339},[91,107959,296],{"class":153},[91,107961,42423],{"class":105},[91,107963,12558],{"class":250},[91,107965,25100],{"class":5339},[91,107967,296],{"class":153},[91,107969,107970],{"class":105},"640",[91,107972,257],{"class":250},[91,107974,107975],{"class":93,"line":38},[91,107976,104586],{"class":250},[91,107978,107979],{"class":93,"line":1304},[91,107980,107981],{"class":250},"renderer.update_scene(data)\n",[91,107983,107984,107986,107988],{"class":93,"line":1319},[91,107985,107661],{"class":250},[91,107987,296],{"class":153},[91,107989,107666],{"class":250},[217,107991,107993],{"id":107992},"viewer-的同步逻辑","viewer 的同步逻辑",[21,107995,107996],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[82,107998,108000],{"className":30459,"code":107999,"language":30461,"meta":26,"style":26},"mujoco.mj_step(model, data)\nviewer.sync()\n",[88,108001,108002,108006],{"__ignoreMap":26},[91,108003,108004],{"class":93,"line":94},[91,108005,104586],{"class":250},[91,108007,108008],{"class":93,"line":38},[91,108009,108010],{"class":250},"viewer.sync()\n",[21,108012,108013,108015,108016,108019],{},[88,108014,101296],{}," 负责算物理，",[88,108017,108018],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[217,108021,108023],{"id":108022},"为什么要-sleep","为什么要 sleep",[21,108025,108026],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[82,108028,108030],{"className":30459,"code":108029,"language":30461,"meta":26,"style":26},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[88,108031,108032],{"__ignoreMap":26},[91,108033,108034,108037,108039,108042,108044,108047,108049],{"class":93,"line":94},[91,108035,108036],{"class":250},"sleep_time ",[91,108038,296],{"class":153},[91,108040,108041],{"class":250}," model.opt.timestep ",[91,108043,781],{"class":153},[91,108045,108046],{"class":250}," (time.time() ",[91,108048,781],{"class":153},[91,108050,108051],{"class":250}," step_start)\n",[21,108053,108054],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[217,108056,108058],{"id":108057},"renderer-输出是什么","renderer 输出是什么",[82,108060,108062],{"className":30459,"code":108061,"language":30461,"meta":26,"style":26},"image = renderer.render()\n",[88,108063,108064],{"__ignoreMap":26},[91,108065,108066,108068,108070],{"class":93,"line":94},[91,108067,107661],{"class":250},[91,108069,296],{"class":153},[91,108071,107666],{"class":250},[21,108073,108074],{},"得到的是 NumPy 数组，形状通常是：",[82,108076,108079],{"className":108077,"code":108078,"language":5310,"meta":26},[5308],"(height, width, 3)\n",[88,108080,108078],{"__ignoreMap":26},[21,108082,108083],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[82,108085,108087],{"className":30459,"code":108086,"language":30461,"meta":26,"style":26},"Image.fromarray(image).save(\"render_output.png\")\n",[88,108088,108089],{"__ignoreMap":26},[91,108090,108091,108094,108097],{"class":93,"line":94},[91,108092,108093],{"class":250},"Image.fromarray(image).save(",[91,108095,108096],{"class":101},"\"render_output.png\"",[91,108098,257],{"class":250},[190,108100,101334],{"id":101333},[21,108102,108103],{},"交互式 Viewer:",[82,108105,108107],{"className":30459,"code":108106,"language":30461,"meta":26,"style":26},"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",[88,108108,108109,108115,108119,108125,108131,108135,108139,108147,108152,108156,108160,108164,108169,108174,108178,108182,108186,108191,108195,108199,108203,108207,108211,108215,108227,108239,108247,108251,108261,108281,108291,108296,108301,108305,108322,108335,108340,108344,108348,108360],{"__ignoreMap":26},[91,108110,108111,108113],{"class":93,"line":94},[91,108112,30473],{"class":153},[91,108114,31910],{"class":250},[91,108116,108117],{"class":93,"line":38},[91,108118,2523],{"emptyLinePlaceholder":175},[91,108120,108121,108123],{"class":93,"line":1304},[91,108122,30473],{"class":153},[91,108124,101382],{"class":250},[91,108126,108127,108129],{"class":93,"line":1319},[91,108128,30473],{"class":153},[91,108130,107633],{"class":250},[91,108132,108133],{"class":93,"line":1325},[91,108134,2523],{"emptyLinePlaceholder":175},[91,108136,108137],{"class":93,"line":1339},[91,108138,2523],{"emptyLinePlaceholder":175},[91,108140,108141,108143,108145],{"class":93,"line":1345},[91,108142,101395],{"class":105},[91,108144,13687],{"class":153},[91,108146,101400],{"class":101},[91,108148,108149],{"class":93,"line":1436},[91,108150,108151],{"class":101},"\u003Cmujoco model=\"viewer_demo\">\n",[91,108153,108154],{"class":93,"line":1442},[91,108155,101410],{"class":101},[91,108157,108158],{"class":93,"line":1454},[91,108159,2523],{"emptyLinePlaceholder":175},[91,108161,108162],{"class":93,"line":1736},[91,108163,101419],{"class":101},[91,108165,108166],{"class":93,"line":1741},[91,108167,108168],{"class":101},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[91,108170,108171],{"class":93,"line":1747},[91,108172,108173],{"class":101},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[91,108175,108176],{"class":93,"line":1752},[91,108177,2523],{"emptyLinePlaceholder":175},[91,108179,108180],{"class":93,"line":1766},[91,108181,101433],{"class":101},[91,108183,108184],{"class":93,"line":1771},[91,108185,101438],{"class":101},[91,108187,108188],{"class":93,"line":1777},[91,108189,108190],{"class":101},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[91,108192,108193],{"class":93,"line":1798},[91,108194,101448],{"class":101},[91,108196,108197],{"class":93,"line":1803},[91,108198,101453],{"class":101},[91,108200,108201],{"class":93,"line":1817},[91,108202,101458],{"class":101},[91,108204,108205],{"class":93,"line":1822},[91,108206,95779],{"class":101},[91,108208,108209],{"class":93,"line":1851},[91,108210,2523],{"emptyLinePlaceholder":175},[91,108212,108213],{"class":93,"line":1856},[91,108214,2523],{"emptyLinePlaceholder":175},[91,108216,108217,108219,108221,108223,108225],{"class":93,"line":1873},[91,108218,32028],{"class":153},[91,108220,2096],{"class":97},[91,108222,101479],{"class":250},[91,108224,95767],{"class":105},[91,108226,3862],{"class":250},[91,108228,108229,108231,108233,108235,108237],{"class":93,"line":1878},[91,108230,101488],{"class":250},[91,108232,296],{"class":153},[91,108234,101493],{"class":250},[91,108236,101395],{"class":105},[91,108238,257],{"class":250},[91,108240,108241,108243,108245],{"class":93,"line":1883},[91,108242,101502],{"class":250},[91,108244,296],{"class":153},[91,108246,101507],{"class":250},[91,108248,108249],{"class":93,"line":1888},[91,108250,2523],{"emptyLinePlaceholder":175},[91,108252,108253,108255,108257,108259],{"class":93,"line":1902},[91,108254,34259],{"class":153},[91,108256,107917],{"class":250},[91,108258,31464],{"class":153},[91,108260,107922],{"class":250},[91,108262,108263,108266,108269,108271,108274,108276,108279],{"class":93,"line":1907},[91,108264,108265],{"class":153},"        while",[91,108267,108268],{"class":250}," viewer.is_running() ",[91,108270,30543],{"class":153},[91,108272,108273],{"class":250}," data.time ",[91,108275,1159],{"class":153},[91,108277,108278],{"class":105}," 5.0",[91,108280,3862],{"class":250},[91,108282,108283,108286,108288],{"class":93,"line":2700},[91,108284,108285],{"class":250},"            step_start ",[91,108287,296],{"class":153},[91,108289,108290],{"class":250}," time.time()\n",[91,108292,108293],{"class":93,"line":2714},[91,108294,108295],{"class":250},"            mujoco.mj_step(model, data)\n",[91,108297,108298],{"class":93,"line":2722},[91,108299,108300],{"class":250},"            viewer.sync()\n",[91,108302,108303],{"class":93,"line":2727},[91,108304,2523],{"emptyLinePlaceholder":175},[91,108306,108307,108310,108312,108314,108316,108318,108320],{"class":93,"line":2733},[91,108308,108309],{"class":250},"            sleep_time ",[91,108311,296],{"class":153},[91,108313,108041],{"class":250},[91,108315,781],{"class":153},[91,108317,108046],{"class":250},[91,108319,781],{"class":153},[91,108321,108051],{"class":250},[91,108323,108324,108326,108329,108331,108333],{"class":93,"line":2739},[91,108325,4765],{"class":153},[91,108327,108328],{"class":250}," sleep_time ",[91,108330,1209],{"class":153},[91,108332,4216],{"class":105},[91,108334,3862],{"class":250},[91,108336,108337],{"class":93,"line":2744},[91,108338,108339],{"class":250},"                time.sleep(sleep_time)\n",[91,108341,108342],{"class":93,"line":8071},[91,108343,2523],{"emptyLinePlaceholder":175},[91,108345,108346],{"class":93,"line":8095},[91,108347,2523],{"emptyLinePlaceholder":175},[91,108349,108350,108352,108354,108356,108358],{"class":93,"line":8100},[91,108351,1655],{"class":153},[91,108353,31301],{"class":105},[91,108355,101640],{"class":153},[91,108357,101643],{"class":101},[91,108359,3862],{"class":250},[91,108361,108362],{"class":93,"line":8106},[91,108363,101650],{"class":250},[21,108365,103651],{},[82,108367,108369],{"className":84,"code":108368,"language":86,"meta":26,"style":26},"touch ch5_viewer.py\n",[88,108370,108371],{"__ignoreMap":26},[91,108372,108373,108375],{"class":93,"line":94},[91,108374,101364],{"class":97},[91,108376,108377],{"class":101}," ch5_viewer.py\n",[21,108379,108380],{},"离屏 Renderer 保存图片:",[82,108382,108384],{"className":30459,"code":108383,"language":30461,"meta":26,"style":26},"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",[88,108385,108386,108398,108402,108408,108418,108422,108426,108434,108439,108443,108447,108451,108455,108460,108464,108468,108472,108476,108480,108484,108488,108492,108496,108500,108504,108516,108528,108536,108561,108565,108581,108585,108589,108604,108613,108617,108631,108636,108641,108645,108657,108669,108673,108677,108689],{"__ignoreMap":26},[91,108387,108388,108390,108393,108395],{"class":93,"line":94},[91,108389,30818],{"class":153},[91,108391,108392],{"class":250}," pathlib ",[91,108394,30473],{"class":153},[91,108396,108397],{"class":250}," Path\n",[91,108399,108400],{"class":93,"line":38},[91,108401,2523],{"emptyLinePlaceholder":175},[91,108403,108404,108406],{"class":93,"line":1304},[91,108405,30473],{"class":153},[91,108407,101382],{"class":250},[91,108409,108410,108412,108414,108416],{"class":93,"line":1319},[91,108411,30818],{"class":153},[91,108413,47344],{"class":105},[91,108415,47347],{"class":153},[91,108417,47350],{"class":250},[91,108419,108420],{"class":93,"line":1325},[91,108421,2523],{"emptyLinePlaceholder":175},[91,108423,108424],{"class":93,"line":1339},[91,108425,2523],{"emptyLinePlaceholder":175},[91,108427,108428,108430,108432],{"class":93,"line":1345},[91,108429,101395],{"class":105},[91,108431,13687],{"class":153},[91,108433,101400],{"class":101},[91,108435,108436],{"class":93,"line":1436},[91,108437,108438],{"class":101},"\u003Cmujoco model=\"renderer_demo\">\n",[91,108440,108441],{"class":93,"line":1442},[91,108442,101410],{"class":101},[91,108444,108445],{"class":93,"line":1454},[91,108446,2523],{"emptyLinePlaceholder":175},[91,108448,108449],{"class":93,"line":1736},[91,108450,101419],{"class":101},[91,108452,108453],{"class":93,"line":1741},[91,108454,108168],{"class":101},[91,108456,108457],{"class":93,"line":1747},[91,108458,108459],{"class":101},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[91,108461,108462],{"class":93,"line":1752},[91,108463,108173],{"class":101},[91,108465,108466],{"class":93,"line":1766},[91,108467,2523],{"emptyLinePlaceholder":175},[91,108469,108470],{"class":93,"line":1771},[91,108471,101433],{"class":101},[91,108473,108474],{"class":93,"line":1777},[91,108475,101438],{"class":101},[91,108477,108478],{"class":93,"line":1798},[91,108479,108190],{"class":101},[91,108481,108482],{"class":93,"line":1803},[91,108483,101448],{"class":101},[91,108485,108486],{"class":93,"line":1817},[91,108487,101453],{"class":101},[91,108489,108490],{"class":93,"line":1822},[91,108491,101458],{"class":101},[91,108493,108494],{"class":93,"line":1851},[91,108495,95779],{"class":101},[91,108497,108498],{"class":93,"line":1856},[91,108499,2523],{"emptyLinePlaceholder":175},[91,108501,108502],{"class":93,"line":1873},[91,108503,2523],{"emptyLinePlaceholder":175},[91,108505,108506,108508,108510,108512,108514],{"class":93,"line":1878},[91,108507,32028],{"class":153},[91,108509,2096],{"class":97},[91,108511,101479],{"class":250},[91,108513,95767],{"class":105},[91,108515,3862],{"class":250},[91,108517,108518,108520,108522,108524,108526],{"class":93,"line":1883},[91,108519,101488],{"class":250},[91,108521,296],{"class":153},[91,108523,101493],{"class":250},[91,108525,101395],{"class":105},[91,108527,257],{"class":250},[91,108529,108530,108532,108534],{"class":93,"line":1888},[91,108531,101502],{"class":250},[91,108533,296],{"class":153},[91,108535,101507],{"class":250},[91,108537,108538,108541,108543,108545,108547,108549,108551,108553,108555,108557,108559],{"class":93,"line":1902},[91,108539,108540],{"class":250},"    renderer ",[91,108542,296],{"class":153},[91,108544,107955],{"class":250},[91,108546,25104],{"class":5339},[91,108548,296],{"class":153},[91,108550,42423],{"class":105},[91,108552,12558],{"class":250},[91,108554,25100],{"class":5339},[91,108556,296],{"class":153},[91,108558,107970],{"class":105},[91,108560,257],{"class":250},[91,108562,108563],{"class":93,"line":1907},[91,108564,2523],{"emptyLinePlaceholder":175},[91,108566,108567,108569,108571,108573,108575,108577,108579],{"class":93,"line":2700},[91,108568,3324],{"class":153},[91,108570,101582],{"class":250},[91,108572,26165],{"class":153},[91,108574,32524],{"class":105},[91,108576,251],{"class":250},[91,108578,560],{"class":105},[91,108580,30867],{"class":250},[91,108582,108583],{"class":93,"line":2714},[91,108584,101597],{"class":250},[91,108586,108587],{"class":93,"line":2722},[91,108588,2523],{"emptyLinePlaceholder":175},[91,108590,108591,108594,108597,108599,108602],{"class":93,"line":2727},[91,108592,108593],{"class":250},"    renderer.update_scene(data, ",[91,108595,108596],{"class":5339},"camera",[91,108598,296],{"class":153},[91,108600,108601],{"class":101},"\"fixed_camera\"",[91,108603,257],{"class":250},[91,108605,108606,108609,108611],{"class":93,"line":2733},[91,108607,108608],{"class":250},"    image ",[91,108610,296],{"class":153},[91,108612,107666],{"class":250},[91,108614,108615],{"class":93,"line":2739},[91,108616,2523],{"emptyLinePlaceholder":175},[91,108618,108619,108622,108624,108627,108629],{"class":93,"line":2744},[91,108620,108621],{"class":250},"    output_path ",[91,108623,296],{"class":153},[91,108625,108626],{"class":250}," Path(",[91,108628,108096],{"class":101},[91,108630,257],{"class":250},[91,108632,108633],{"class":93,"line":8071},[91,108634,108635],{"class":250},"    Image.fromarray(image).save(output_path)\n",[91,108637,108638],{"class":93,"line":8095},[91,108639,108640],{"class":250},"    renderer.close()\n",[91,108642,108643],{"class":93,"line":8100},[91,108644,2523],{"emptyLinePlaceholder":175},[91,108646,108647,108649,108651,108654],{"class":93,"line":8106},[91,108648,31380],{"class":105},[91,108650,251],{"class":250},[91,108652,108653],{"class":101},"\"saved:\"",[91,108655,108656],{"class":250},", output_path.resolve())\n",[91,108658,108659,108661,108663,108666],{"class":93,"line":8133},[91,108660,31380],{"class":105},[91,108662,251],{"class":250},[91,108664,108665],{"class":101},"\"image shape:\"",[91,108667,108668],{"class":250},", image.shape)\n",[91,108670,108671],{"class":93,"line":8138},[91,108672,2523],{"emptyLinePlaceholder":175},[91,108674,108675],{"class":93,"line":8144},[91,108676,2523],{"emptyLinePlaceholder":175},[91,108678,108679,108681,108683,108685,108687],{"class":93,"line":8156},[91,108680,1655],{"class":153},[91,108682,31301],{"class":105},[91,108684,101640],{"class":153},[91,108686,101643],{"class":101},[91,108688,3862],{"class":250},[91,108690,108691],{"class":93,"line":8168},[91,108692,101650],{"class":250},[21,108694,103651],{},[82,108696,108698],{"className":84,"code":108697,"language":86,"meta":26,"style":26},"touch ch5_renderer.py\n",[88,108699,108700],{"__ignoreMap":26},[91,108701,108702,108704],{"class":93,"line":94},[91,108703,101364],{"class":97},[91,108705,108706],{"class":101}," ch5_renderer.py\n",[217,108708,101653],{"id":101653},[21,108710,108711],{},"viewer 上下文：",[82,108713,108715],{"className":30459,"code":108714,"language":30461,"meta":26,"style":26},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[88,108716,108717],{"__ignoreMap":26},[91,108718,108719,108721,108723,108725],{"class":93,"line":94},[91,108720,107914],{"class":153},[91,108722,107917],{"class":250},[91,108724,31464],{"class":153},[91,108726,107922],{"class":250},[21,108728,108729,108731],{},[88,108730,107914],{}," 语句会创建窗口，并在退出时自动清理资源。",[21,108733,108734],{},"窗口循环：",[82,108736,108738],{"className":30459,"code":108737,"language":30461,"meta":26,"style":26},"while viewer.is_running() and data.time \u003C 5.0:\n",[88,108739,108740],{"__ignoreMap":26},[91,108741,108742,108745,108747,108749,108751,108753,108755],{"class":93,"line":94},[91,108743,108744],{"class":153},"while",[91,108746,108268],{"class":250},[91,108748,30543],{"class":153},[91,108750,108273],{"class":250},[91,108752,1159],{"class":153},[91,108754,108278],{"class":105},[91,108756,3862],{"class":250},[21,108758,108759],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[21,108761,108762],{},"固定相机：",[82,108764,108766],{"className":53148,"code":108765,"language":53150,"meta":26,"style":26},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[88,108767,108768],{"__ignoreMap":26},[91,108769,108770,108772,108774,108776,108778,108780,108782,108784,108787,108790,108792,108795],{"class":93,"line":94},[91,108771,1159],{"class":250},[91,108773,108596],{"class":51381},[91,108775,15043],{"class":97},[91,108777,296],{"class":250},[91,108779,108601],{"class":101},[91,108781,101187],{"class":97},[91,108783,296],{"class":250},[91,108785,108786],{"class":101},"\"1.5 -2.0 1.2\"",[91,108788,108789],{"class":97}," xyaxes",[91,108791,296],{"class":250},[91,108793,108794],{"class":101},"\"1 0.75 0 0 0 1\"",[91,108796,101225],{"class":250},[21,108798,108799],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[217,108801,108803],{"id":108802},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[82,108805,108807],{"className":30459,"code":108806,"language":30461,"meta":26,"style":26},"import time\n",[88,108808,108809],{"__ignoreMap":26},[91,108810,108811,108813],{"class":93,"line":94},[91,108812,30473],{"class":153},[91,108814,31910],{"class":250},[21,108816,108817],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[82,108819,108821],{"className":30459,"code":108820,"language":30461,"meta":26,"style":26},"import mujoco\nimport mujoco.viewer\n",[88,108822,108823,108829],{"__ignoreMap":26},[91,108824,108825,108827],{"class":93,"line":94},[91,108826,30473],{"class":153},[91,108828,101382],{"class":250},[91,108830,108831,108833],{"class":93,"line":38},[91,108832,30473],{"class":153},[91,108834,107633],{"class":250},[21,108836,108837],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[82,108839,108840],{"className":30459,"code":108714,"language":30461,"meta":26,"style":26},[88,108841,108842],{"__ignoreMap":26},[91,108843,108844,108846,108848,108850],{"class":93,"line":94},[91,108845,107914],{"class":153},[91,108847,107917],{"class":250},[91,108849,31464],{"class":153},[91,108851,107922],{"class":250},[21,108853,108854,108855,108858],{},"打开一个 viewer 窗口。",[88,108856,108857],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[82,108860,108861],{"className":30459,"code":108737,"language":30461,"meta":26,"style":26},[88,108862,108863],{"__ignoreMap":26},[91,108864,108865,108867,108869,108871,108873,108875,108877],{"class":93,"line":94},[91,108866,108744],{"class":153},[91,108868,108268],{"class":250},[91,108870,30543],{"class":153},[91,108872,108273],{"class":250},[91,108874,1159],{"class":153},[91,108876,108278],{"class":105},[91,108878,3862],{"class":250},[21,108880,108881,108882,108885],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[88,108883,108884],{},"viewer.is_running()"," 会变成 false，循环结束。",[82,108887,108889],{"className":30459,"code":108888,"language":30461,"meta":26,"style":26},"step_start = time.time()\n",[88,108890,108891],{"__ignoreMap":26},[91,108892,108893,108896,108898],{"class":93,"line":94},[91,108894,108895],{"class":250},"step_start ",[91,108897,296],{"class":153},[91,108899,108290],{"class":250},[21,108901,108902],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[82,108904,108905],{"className":30459,"code":107999,"language":30461,"meta":26,"style":26},[88,108906,108907,108911],{"__ignoreMap":26},[91,108908,108909],{"class":93,"line":94},[91,108910,104586],{"class":250},[91,108912,108913],{"class":93,"line":38},[91,108914,108010],{"class":250},[21,108916,108917,108919,108920,108922,108923,108925,108926,108929],{},[88,108918,101296],{}," 推进物理仿真。",[88,108921,108018],{}," 把最新的 ",[88,108924,33482],{}," 同步到窗口里显示。没有 ",[88,108927,108928],{},"sync()","，窗口可能看不到最新状态。",[82,108931,108932],{"className":30459,"code":108029,"language":30461,"meta":26,"style":26},[88,108933,108934],{"__ignoreMap":26},[91,108935,108936,108938,108940,108942,108944,108946,108948],{"class":93,"line":94},[91,108937,108036],{"class":250},[91,108939,296],{"class":153},[91,108941,108041],{"class":250},[91,108943,781],{"class":153},[91,108945,108046],{"class":250},[91,108947,781],{"class":153},[91,108949,108051],{"class":250},[21,108951,108952],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[82,108954,108956],{"className":30459,"code":108955,"language":30461,"meta":26,"style":26},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[88,108957,108958,108970],{"__ignoreMap":26},[91,108959,108960,108962,108964,108966,108968],{"class":93,"line":94},[91,108961,1655],{"class":153},[91,108963,108328],{"class":250},[91,108965,1209],{"class":153},[91,108967,4216],{"class":105},[91,108969,3862],{"class":250},[91,108971,108972],{"class":93,"line":38},[91,108973,108974],{"class":250},"    time.sleep(sleep_time)\n",[21,108976,108977],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[217,108979,108981],{"id":108980},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[82,108983,108985],{"className":30459,"code":108984,"language":30461,"meta":26,"style":26},"from pathlib import Path\n",[88,108986,108987],{"__ignoreMap":26},[91,108988,108989,108991,108993,108995],{"class":93,"line":94},[91,108990,30818],{"class":153},[91,108992,108392],{"class":250},[91,108994,30473],{"class":153},[91,108996,108397],{"class":250},[21,108998,108999,109000,109003,109004,109007],{},"导入 ",[88,109001,109002],{},"Path","，用来处理文件路径。相比直接写字符串，",[88,109005,109006],{},"Path(\"render_output.png\")"," 更清晰。",[82,109009,109011],{"className":30459,"code":109010,"language":30461,"meta":26,"style":26},"from PIL import Image\n",[88,109012,109013],{"__ignoreMap":26},[91,109014,109015,109017,109019,109021],{"class":93,"line":94},[91,109016,30818],{"class":153},[91,109018,47344],{"class":105},[91,109020,47347],{"class":153},[91,109022,47350],{"class":250},[21,109024,109025],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[82,109027,109028],{"className":53148,"code":108765,"language":53150,"meta":26,"style":26},[88,109029,109030],{"__ignoreMap":26},[91,109031,109032,109034,109036,109038,109040,109042,109044,109046,109048,109050,109052,109054],{"class":93,"line":94},[91,109033,1159],{"class":250},[91,109035,108596],{"class":51381},[91,109037,15043],{"class":97},[91,109039,296],{"class":250},[91,109041,108601],{"class":101},[91,109043,101187],{"class":97},[91,109045,296],{"class":250},[91,109047,108786],{"class":101},[91,109049,108789],{"class":97},[91,109051,296],{"class":250},[91,109053,108794],{"class":101},[91,109055,101225],{"class":250},[21,109057,109058,109059,109061,109062,109064,109065,109068,109069,109071],{},"定义一个相机。",[88,109060,79891],{}," 是相机名字。",[88,109063,104227],{}," 是相机在世界里的位置。",[88,109066,109067],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[88,109070,104227],{}," 来调视角。",[82,109073,109075],{"className":30459,"code":109074,"language":30461,"meta":26,"style":26},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[88,109076,109077],{"__ignoreMap":26},[91,109078,109079,109081,109083,109085,109087,109089,109091,109093,109095,109097,109099],{"class":93,"line":94},[91,109080,107651],{"class":250},[91,109082,296],{"class":153},[91,109084,107955],{"class":250},[91,109086,25104],{"class":5339},[91,109088,296],{"class":153},[91,109090,42423],{"class":105},[91,109092,12558],{"class":250},[91,109094,25100],{"class":5339},[91,109096,296],{"class":153},[91,109098,107970],{"class":105},[91,109100,257],{"class":250},[21,109102,109103,109104,101099,109106,109108],{},"创建离屏渲染器。",[88,109105,25104],{},[88,109107,25100],{}," 决定输出图片大小。",[82,109110,109111],{"className":30459,"code":101757,"language":30461,"meta":26,"style":26},[88,109112,109113,109129],{"__ignoreMap":26},[91,109114,109115,109117,109119,109121,109123,109125,109127],{"class":93,"line":94},[91,109116,3148],{"class":153},[91,109118,101582],{"class":250},[91,109120,26165],{"class":153},[91,109122,32524],{"class":105},[91,109124,251],{"class":250},[91,109126,560],{"class":105},[91,109128,30867],{"class":250},[91,109130,109131],{"class":93,"line":38},[91,109132,101780],{"class":250},[21,109134,109135],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[82,109137,109139],{"className":30459,"code":109138,"language":30461,"meta":26,"style":26},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[88,109140,109141],{"__ignoreMap":26},[91,109142,109143,109146,109148,109150,109152],{"class":93,"line":94},[91,109144,109145],{"class":250},"renderer.update_scene(data, ",[91,109147,108596],{"class":5339},[91,109149,296],{"class":153},[91,109151,108601],{"class":101},[91,109153,257],{"class":250},[21,109155,109156,109157,109159,109160,109163],{},"告诉 renderer：用当前 ",[88,109158,33482],{}," 的状态更新画面，并使用名为 ",[88,109161,109162],{},"fixed_camera"," 的相机视角。",[82,109165,109166],{"className":30459,"code":108061,"language":30461,"meta":26,"style":26},[88,109167,109168],{"__ignoreMap":26},[91,109169,109170,109172,109174],{"class":93,"line":94},[91,109171,107661],{"class":250},[91,109173,296],{"class":153},[91,109175,107666],{"class":250},[21,109177,109178,109179,109182],{},"真正渲染出图像。",[88,109180,109181],{},"image"," 是一个 NumPy 数组，不是文件。",[82,109184,109186],{"className":30459,"code":109185,"language":30461,"meta":26,"style":26},"Image.fromarray(image).save(output_path)\n",[88,109187,109188],{"__ignoreMap":26},[91,109189,109190],{"class":93,"line":94},[91,109191,109185],{"class":250},[21,109193,109194,109195,28504],{},"把数组转换成图片，并保存到 ",[88,109196,109197],{},"render_output.png",[82,109199,109201],{"className":30459,"code":109200,"language":30461,"meta":26,"style":26},"renderer.close()\n",[88,109202,109203],{"__ignoreMap":26},[91,109204,109205],{"class":93,"line":94},[91,109206,109200],{"class":250},[21,109208,109209],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[190,109211,102397],{"id":102396},[21,109213,109214,109215,109217,109218,28504],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[88,109216,109197],{},"，并输出图像数组形状，例如 ",[88,109219,109220],{},"(480, 640, 3)",[21,109222,109223],{},"如果图片里看不到方块，先检查：",[14,109225,109226,109229,109232],{},[17,109227,109228],{},"方块是否掉到相机视野外。",[17,109230,109231],{},"camera 位置是否合理。",[17,109233,109234,109235,109238],{},"是否在 ",[88,109236,109237],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[190,109240,102429],{"id":102428},[21,109242,109243],{},"运行 viewer:",[82,109245,109247],{"className":84,"code":109246,"language":86,"meta":26,"style":26},"python ch5_viewer.py\n",[88,109248,109249],{"__ignoreMap":26},[91,109250,109251,109253],{"class":93,"line":94},[91,109252,30461],{"class":97},[91,109254,108377],{"class":101},[21,109256,109257],{},"运行 renderer:",[82,109259,109261],{"className":84,"code":109260,"language":86,"meta":26,"style":26},"python ch5_renderer.py\n",[88,109262,109263],{"__ignoreMap":26},[91,109264,109265,109267],{"class":93,"line":94},[91,109266,30461],{"class":97},[91,109268,108706],{"class":101},[21,109270,109271],{},"如果在服务器上运行:",[82,109273,109275],{"className":84,"code":109274,"language":86,"meta":26,"style":26},"MUJOCO_GL=egl python ch5_renderer.py\n",[88,109276,109277],{"__ignoreMap":26},[91,109278,109279,109281,109283,109285,109288],{"class":93,"line":94},[91,109280,107895],{"class":250},[91,109282,296],{"class":153},[91,109284,107885],{"class":101},[91,109286,109287],{"class":97}," python",[91,109289,108706],{"class":101},[21,109291,107863],{},[82,109293,109295],{"className":84,"code":109294,"language":86,"meta":26,"style":26},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[88,109296,109297],{"__ignoreMap":26},[91,109298,109299,109301,109303,109305,109307],{"class":93,"line":94},[91,109300,107895],{"class":250},[91,109302,296],{"class":153},[91,109304,107889],{"class":101},[91,109306,109287],{"class":97},[91,109308,108706],{"class":101},[21,109310,109311],{},"再做几个练习：",[14,109313,109314,109321,109324,109330],{},[17,109315,109316,109317,109320],{},"把 renderer 分辨率改成 ",[88,109318,109319],{},"height=240, width=320","，观察输出 shape。",[17,109322,109323],{},"把方块颜色改成蓝色，重新保存图片。",[17,109325,109326,109327,109329],{},"把相机 ",[88,109328,104227],{}," 改远一点，观察画面中物体是否变小。",[17,109331,109332,109333,102495,109336,109339],{},"把 viewer 示例中的 ",[88,109334,109335],{},"data.time \u003C 5.0",[88,109337,109338],{},"data.time \u003C 20.0","，观察更长时间。",[190,109341,102534],{"id":102533},[217,109343,109345],{"id":109344},"viewer-窗口打不开","viewer 窗口打不开",[21,109347,109348],{},"安装:",[82,109350,109352],{"className":84,"code":109351,"language":86,"meta":26,"style":26},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[88,109353,109354],{"__ignoreMap":26},[91,109355,109356,109358,109360,109362,109364,109366,109368,109370,109372,109374,109376],{"class":93,"line":94},[91,109357,24699],{"class":97},[91,109359,26437],{"class":101},[91,109361,23956],{"class":101},[91,109363,26522],{"class":105},[91,109365,102587],{"class":101},[91,109367,100915],{"class":101},[91,109369,102592],{"class":101},[91,109371,100928],{"class":101},[91,109373,100934],{"class":101},[91,109375,100925],{"class":101},[91,109377,109378],{"class":101}," libXinerama\n",[217,109380,109382],{"id":109381},"glfwerror",[88,109383,109384],{},"GLFWError",[21,109386,109387],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[217,109389,109391],{"id":109390},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[21,109393,109394,109395,82620,109397,109399],{},"尝试 ",[88,109396,101118],{},[88,109398,101121],{},"。可能存在版本差异。",[217,109401,109402],{"id":109402},"保存图片是黑的",[21,109404,102656],{},[14,109406,109407,109410,109413,109423],{},[17,109408,109409],{},"XML 里是否有 light。",[17,109411,109412],{},"相机是否对着模型。",[17,109414,109415,109416,109419,109420,28504],{},"是否先 ",[88,109417,109418],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[88,109421,109422],{},"renderer.render()",[17,109424,109425],{},"物体是否已经掉出视野。",[217,109427,109428],{"id":109428},"远程服务器没有显示器",[21,109430,109431],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[82,109433,109434],{"className":84,"code":109274,"language":86,"meta":26,"style":26},[88,109435,109436],{"__ignoreMap":26},[91,109437,109438,109440,109442,109444,109446],{"class":93,"line":94},[91,109439,107895],{"class":250},[91,109441,296],{"class":153},[91,109443,107885],{"class":101},[91,109445,109287],{"class":97},[91,109447,108706],{"class":101},[21,109449,109450],{},"如果 EGL 不可用，再尝试：",[82,109452,109453],{"className":84,"code":109294,"language":86,"meta":26,"style":26},[88,109454,109455],{"__ignoreMap":26},[91,109456,109457,109459,109461,109463,109465],{"class":93,"line":94},[91,109458,107895],{"class":250},[91,109460,296],{"class":153},[91,109462,107889],{"class":101},[91,109464,109287],{"class":97},[91,109466,108706],{"class":101},[190,109468,102688],{"id":102687},[21,109470,109471],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[14,109473,109474,109477,109480],{},[17,109475,109476],{},"先用 viewer 看模型和控制是否正常。",[17,109478,109479],{},"再用 renderer 保存图片或构造视觉观测。",[17,109481,109482],{},"最后把状态、动作、图像、奖励组织成训练数据。",[168,109484,109485],{},"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":26,"searchDepth":38,"depth":38,"links":109487},[109488,109489,109490,109495,109500,109501,109502,109509],{"id":100727,"depth":38,"text":100728},{"id":100850,"depth":38,"text":100851},{"id":101125,"depth":38,"text":101126,"children":109491},[109492,109493,109494],{"id":107992,"depth":1304,"text":107993},{"id":108022,"depth":1304,"text":108023},{"id":108057,"depth":1304,"text":108058},{"id":101333,"depth":38,"text":101334,"children":109496},[109497,109498,109499],{"id":101653,"depth":1304,"text":101653},{"id":108802,"depth":1304,"text":108803},{"id":108980,"depth":1304,"text":108981},{"id":102396,"depth":38,"text":102397},{"id":102428,"depth":38,"text":102429},{"id":102533,"depth":38,"text":102534,"children":109503},[109504,109505,109506,109507,109508],{"id":109344,"depth":1304,"text":109345},{"id":109381,"depth":1304,"text":109384},{"id":109390,"depth":1304,"text":109391},{"id":109402,"depth":1304,"text":109402},{"id":109428,"depth":1304,"text":109428},{"id":102687,"depth":38,"text":102688},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107600,"description":26},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109516,"title":109517,"body":109518,"description":26,"extension":173,"meta":111429,"navigation":175,"path":111430,"seo":111431,"stem":111432,"__hash__":111433},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109519,"toc":111405},[109520,109523,109525,109528,109530,109549,109552,109558,109561,109563,109565,109589,109591,109605,109607,109648,109650,109661,109663,109666,109672,109675,109709,109712,109744,109747,109779,109783,109786,109826,109829,109835,109838,109844,109848,109851,109857,109860,109864,109867,109907,109909,109922,109925,109927,110509,110511,110523,110526,110537,110539,110542,110561,110573,110576,110597,110600,110603,110646,110649,110652,110672,110679,110681,110699,110714,110717,110723,110726,110732,110749,110756,110787,110798,110832,110843,110860,110869,110877,110882,110896,110899,110920,110926,110940,110945,110975,110985,111010,111018,111041,111044,111060,111063,111071,111077,111099,111112,111133,111142,111181,111192,111194,111197,111203,111206,111209,111215,111218,111238,111241,111243,111282,111284,111287,111295,111298,111301,111328,111331,111341,111347,111350,111356,111358,111364,111368,111371,111373,111376,111400,111403],[10,109521,109517],{"id":109522},"_6控制任务cartpole",[190,109524,100728],{"id":100727},[21,109526,109527],{},"本章搭建一个最小 Cartpole 控制任务。",[21,109529,104412],{},[14,109531,109532,109535,109537,109540,109543,109546],{},[17,109533,109534],{},"slide joint",[17,109536,106265],{},[17,109538,109539],{},"cart force actuator",[17,109541,109542],{},"状态观测",[17,109544,109545],{},"简单控制循环",[17,109547,109548],{},"reward 设计雏形",[21,109550,109551],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[82,109553,109556],{"className":109554,"code":109555,"language":5310,"meta":26},[5308],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[88,109557,109555],{"__ignoreMap":26},[21,109559,109560],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[190,109562,100851],{"id":100850},[21,109564,100854],{},[82,109566,109567],{"className":84,"code":104469,"language":86,"meta":26,"style":26},[88,109568,109569],{"__ignoreMap":26},[91,109570,109571,109573,109575,109577,109579,109581,109583,109585,109587],{"class":93,"line":94},[91,109572,24699],{"class":97},[91,109574,26437],{"class":101},[91,109576,23956],{"class":101},[91,109578,26522],{"class":105},[91,109580,104484],{"class":101},[91,109582,100879],{"class":101},[91,109584,102582],{"class":101},[91,109586,100895],{"class":101},[91,109588,104493],{"class":101},[21,109590,102900],{},[82,109592,109593],{"className":84,"code":101000,"language":86,"meta":26,"style":26},[88,109594,109595],{"__ignoreMap":26},[91,109596,109597,109599,109601,109603],{"class":93,"line":94},[91,109598,23953],{"class":97},[91,109600,23956],{"class":101},[91,109602,101011],{"class":101},[91,109604,101014],{"class":101},[21,109606,102917],{},[82,109608,109610],{"className":84,"code":109609,"language":86,"meta":26,"style":26},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[88,109611,109612,109629,109638],{"__ignoreMap":26},[91,109613,109614,109616,109618,109620,109623,109625,109627],{"class":93,"line":94},[91,109615,30411],{"class":97},[91,109617,29295],{"class":101},[91,109619,25237],{"class":105},[91,109621,109622],{"class":101}," mujoco-cartpole",[91,109624,101056],{"class":101},[91,109626,101059],{"class":105},[91,109628,101062],{"class":105},[91,109630,109631,109633,109635],{"class":93,"line":38},[91,109632,30411],{"class":97},[91,109634,101069],{"class":101},[91,109636,109637],{"class":101}," mujoco-cartpole\n",[91,109639,109640,109642,109644,109646],{"class":93,"line":1304},[91,109641,23953],{"class":97},[91,109643,23956],{"class":101},[91,109645,101011],{"class":101},[91,109647,101014],{"class":101},[21,109649,101085],{},[14,109651,109652,109655,109658],{},[17,109653,109654],{},"本章不依赖 Gymnasium。",[17,109656,109657],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[17,109659,109660],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[190,109662,101126],{"id":101125},[21,109664,109665],{},"Cartpole 的模型结构:",[82,109667,109670],{"className":109668,"code":109669,"language":5310,"meta":26},[5308],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[88,109671,109669],{"__ignoreMap":26},[21,109673,109674],{},"小车通过 slide joint 左右移动:",[82,109676,109678],{"className":53148,"code":109677,"language":53150,"meta":26,"style":26},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[88,109679,109680],{"__ignoreMap":26},[91,109681,109682,109684,109686,109688,109690,109693,109695,109697,109700,109702,109704,109707],{"class":93,"line":94},[91,109683,1159],{"class":250},[91,109685,103037],{"class":51381},[91,109687,15043],{"class":97},[91,109689,296],{"class":250},[91,109691,109692],{"class":101},"\"cart_x\"",[91,109694,53905],{"class":97},[91,109696,296],{"class":250},[91,109698,109699],{"class":101},"\"slide\"",[91,109701,106109],{"class":97},[91,109703,296],{"class":250},[91,109705,109706],{"class":101},"\"1 0 0\"",[91,109708,101225],{"class":250},[21,109710,109711],{},"杆子通过 hinge joint 旋转:",[82,109713,109715],{"className":53148,"code":109714,"language":53150,"meta":26,"style":26},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[88,109716,109717],{"__ignoreMap":26},[91,109718,109719,109721,109723,109725,109727,109730,109732,109734,109736,109738,109740,109742],{"class":93,"line":94},[91,109720,1159],{"class":250},[91,109722,103037],{"class":51381},[91,109724,15043],{"class":97},[91,109726,296],{"class":250},[91,109728,109729],{"class":101},"\"pole_hinge\"",[91,109731,53905],{"class":97},[91,109733,296],{"class":250},[91,109735,106100],{"class":101},[91,109737,106109],{"class":97},[91,109739,296],{"class":250},[91,109741,106114],{"class":101},[91,109743,101225],{"class":250},[21,109745,109746],{},"控制力作用在小车 slide joint 上:",[82,109748,109750],{"className":53148,"code":109749,"language":53150,"meta":26,"style":26},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[88,109751,109752],{"__ignoreMap":26},[91,109753,109754,109756,109758,109760,109762,109765,109767,109769,109771,109773,109775,109777],{"class":93,"line":94},[91,109755,1159],{"class":250},[91,109757,106155],{"class":51381},[91,109759,15043],{"class":97},[91,109761,296],{"class":250},[91,109763,109764],{"class":101},"\"cart_motor\"",[91,109766,106165],{"class":97},[91,109768,296],{"class":250},[91,109770,109692],{"class":101},[91,109772,106172],{"class":97},[91,109774,296],{"class":250},[91,109776,54397],{"class":101},[91,109778,101225],{"class":250},[217,109780,109782],{"id":109781},"cartpole-的状态是什么","Cartpole 的状态是什么",[21,109784,109785],{},"这个简化模型有两个关节：",[386,109787,109788,109799],{},[389,109789,109790],{},[392,109791,109792,109794,109796],{},[395,109793,102840],{"align":23860},[395,109795,23861],{"align":23860},[395,109797,109798],{"align":23860},"对应状态",[433,109800,109801,109814],{},[392,109802,109803,109808,109811],{},[438,109804,109805],{"align":23860},[88,109806,109807],{},"cart_x",[438,109809,109810],{"align":23860},"slide",[438,109812,109813],{"align":23860},"小车 x 位置",[392,109815,109816,109821,109823],{},[438,109817,109818],{"align":23860},[88,109819,109820],{},"pole_hinge",[438,109822,105921],{"align":23860},[438,109824,109825],{"align":23860},"杆子角度",[21,109827,109828],{},"所以：",[82,109830,109833],{"className":109831,"code":109832,"language":5310,"meta":26},[5308],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[88,109834,109832],{"__ignoreMap":26},[21,109836,109837],{},"把它们拼起来就是观测：",[82,109839,109842],{"className":109840,"code":109841,"language":5310,"meta":26},[5308],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[88,109843,109841],{"__ignoreMap":26},[217,109845,109847],{"id":109846},"action-是什么","action 是什么",[21,109849,109850],{},"本章只有一个 actuator：",[82,109852,109855],{"className":109853,"code":109854,"language":5310,"meta":26},[5308],"data.ctrl[0] = action\n",[88,109856,109854],{"__ignoreMap":26},[21,109858,109859],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[217,109861,109863],{"id":109862},"reward-是什么","reward 是什么",[21,109865,109866],{},"奖励函数：",[82,109868,109870],{"className":30459,"code":109869,"language":30461,"meta":26,"style":26},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[88,109871,109872],{"__ignoreMap":26},[91,109873,109874,109876,109879,109881,109883,109885,109888,109890,109893,109895,109897,109899,109902,109904],{"class":93,"line":94},[91,109875,17169],{"class":153},[91,109877,109878],{"class":105}," float",[91,109880,251],{"class":250},[91,109882,102484],{"class":105},[91,109884,52352],{"class":153},[91,109886,109887],{"class":105}," 0.1",[91,109889,6641],{"class":153},[91,109891,109892],{"class":250}," cart_x ",[91,109894,704],{"class":153},[91,109896,109892],{"class":250},[91,109898,781],{"class":153},[91,109900,109901],{"class":250}," pole_angle ",[91,109903,704],{"class":153},[91,109905,109906],{"class":250}," pole_angle)\n",[21,109908,106307],{},[14,109910,109911,109916,109919],{},[17,109912,109913,109914,28504],{},"基础奖励是 ",[88,109915,102484],{},[17,109917,109918],{},"小车离中心越远，扣分越多。",[17,109920,109921],{},"杆子角度越大，扣分越多。",[21,109923,109924],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[190,109926,101334],{"id":101333},[82,109928,109930],{"className":30459,"code":109929,"language":30461,"meta":26,"style":26},"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",[88,109931,109932,109938,109948,109952,109956,109964,109969,109973,109977,109981,109986,109990,109995,110000,110005,110009,110014,110019,110024,110028,110032,110036,110040,110044,110049,110053,110057,110061,110065,110069,110079,110086,110090,110094,110108,110122,110135,110165,110169,110173,110185,110197,110205,110209,110222,110226,110230,110239,110243,110259,110269,110282,110295,110299,110322,110340,110344,110356,110360,110364,110374,110384,110388,110404,110445,110449,110469,110485,110489,110493,110505],{"__ignoreMap":26},[91,109933,109934,109936],{"class":93,"line":94},[91,109935,30473],{"class":153},[91,109937,101382],{"class":250},[91,109939,109940,109942,109944,109946],{"class":93,"line":38},[91,109941,30473],{"class":153},[91,109943,31461],{"class":250},[91,109945,31464],{"class":153},[91,109947,31467],{"class":250},[91,109949,109950],{"class":93,"line":1304},[91,109951,2523],{"emptyLinePlaceholder":175},[91,109953,109954],{"class":93,"line":1319},[91,109955,2523],{"emptyLinePlaceholder":175},[91,109957,109958,109960,109962],{"class":93,"line":1325},[91,109959,101395],{"class":105},[91,109961,13687],{"class":153},[91,109963,101400],{"class":101},[91,109965,109966],{"class":93,"line":1339},[91,109967,109968],{"class":101},"\u003Cmujoco model=\"cartpole\">\n",[91,109970,109971],{"class":93,"line":1345},[91,109972,101410],{"class":101},[91,109974,109975],{"class":93,"line":1436},[91,109976,2523],{"emptyLinePlaceholder":175},[91,109978,109979],{"class":93,"line":1442},[91,109980,101419],{"class":101},[91,109982,109983],{"class":93,"line":1454},[91,109984,109985],{"class":101},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[91,109987,109988],{"class":93,"line":1736},[91,109989,2523],{"emptyLinePlaceholder":175},[91,109991,109992],{"class":93,"line":1741},[91,109993,109994],{"class":101},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[91,109996,109997],{"class":93,"line":1747},[91,109998,109999],{"class":101},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[91,110001,110002],{"class":93,"line":1752},[91,110003,110004],{"class":101},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[91,110006,110007],{"class":93,"line":1766},[91,110008,2523],{"emptyLinePlaceholder":175},[91,110010,110011],{"class":93,"line":1771},[91,110012,110013],{"class":101},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[91,110015,110016],{"class":93,"line":1777},[91,110017,110018],{"class":101},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[91,110020,110021],{"class":93,"line":1798},[91,110022,110023],{"class":101},"        \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",[91,110025,110026],{"class":93,"line":1803},[91,110027,106519],{"class":101},[91,110029,110030],{"class":93,"line":1817},[91,110031,101448],{"class":101},[91,110033,110034],{"class":93,"line":1822},[91,110035,101453],{"class":101},[91,110037,110038],{"class":93,"line":1851},[91,110039,2523],{"emptyLinePlaceholder":175},[91,110041,110042],{"class":93,"line":1856},[91,110043,106536],{"class":101},[91,110045,110046],{"class":93,"line":1873},[91,110047,110048],{"class":101},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[91,110050,110051],{"class":93,"line":1878},[91,110052,106546],{"class":101},[91,110054,110055],{"class":93,"line":1883},[91,110056,101458],{"class":101},[91,110058,110059],{"class":93,"line":1888},[91,110060,95779],{"class":101},[91,110062,110063],{"class":93,"line":1902},[91,110064,2523],{"emptyLinePlaceholder":175},[91,110066,110067],{"class":93,"line":1907},[91,110068,2523],{"emptyLinePlaceholder":175},[91,110070,110071,110073,110076],{"class":93,"line":2700},[91,110072,32028],{"class":153},[91,110074,110075],{"class":97}," get_observation",[91,110077,110078],{"class":250},"(data: mujoco.MjData) -> np.ndarray:\n",[91,110080,110081,110083],{"class":93,"line":2714},[91,110082,4213],{"class":153},[91,110084,110085],{"class":250}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[91,110087,110088],{"class":93,"line":2722},[91,110089,2523],{"emptyLinePlaceholder":175},[91,110091,110092],{"class":93,"line":2727},[91,110093,2523],{"emptyLinePlaceholder":175},[91,110095,110096,110098,110101,110104,110106],{"class":93,"line":2733},[91,110097,32028],{"class":153},[91,110099,110100],{"class":97}," compute_reward",[91,110102,110103],{"class":250},"(obs: np.ndarray) -> ",[91,110105,290],{"class":105},[91,110107,3862],{"class":250},[91,110109,110110,110113,110115,110118,110120],{"class":93,"line":2739},[91,110111,110112],{"class":250},"    cart_x ",[91,110114,296],{"class":153},[91,110116,110117],{"class":250}," obs[",[91,110119,440],{"class":105},[91,110121,33327],{"class":250},[91,110123,110124,110127,110129,110131,110133],{"class":93,"line":2744},[91,110125,110126],{"class":250},"    pole_angle ",[91,110128,296],{"class":153},[91,110130,110117],{"class":250},[91,110132,466],{"class":105},[91,110134,33327],{"class":250},[91,110136,110137,110139,110141,110143,110145,110147,110149,110151,110153,110155,110157,110159,110161,110163],{"class":93,"line":8071},[91,110138,4213],{"class":153},[91,110140,109878],{"class":105},[91,110142,251],{"class":250},[91,110144,102484],{"class":105},[91,110146,52352],{"class":153},[91,110148,109887],{"class":105},[91,110150,6641],{"class":153},[91,110152,109892],{"class":250},[91,110154,704],{"class":153},[91,110156,109892],{"class":250},[91,110158,781],{"class":153},[91,110160,109901],{"class":250},[91,110162,704],{"class":153},[91,110164,109906],{"class":250},[91,110166,110167],{"class":93,"line":8095},[91,110168,2523],{"emptyLinePlaceholder":175},[91,110170,110171],{"class":93,"line":8100},[91,110172,2523],{"emptyLinePlaceholder":175},[91,110174,110175,110177,110179,110181,110183],{"class":93,"line":8106},[91,110176,32028],{"class":153},[91,110178,2096],{"class":97},[91,110180,101479],{"class":250},[91,110182,95767],{"class":105},[91,110184,3862],{"class":250},[91,110186,110187,110189,110191,110193,110195],{"class":93,"line":8133},[91,110188,101488],{"class":250},[91,110190,296],{"class":153},[91,110192,101493],{"class":250},[91,110194,101395],{"class":105},[91,110196,257],{"class":250},[91,110198,110199,110201,110203],{"class":93,"line":8138},[91,110200,101502],{"class":250},[91,110202,296],{"class":153},[91,110204,101507],{"class":250},[91,110206,110207],{"class":93,"line":8144},[91,110208,2523],{"emptyLinePlaceholder":175},[91,110210,110211,110213,110215,110217,110219],{"class":93,"line":8156},[91,110212,105150],{"class":250},[91,110214,466],{"class":105},[91,110216,4566],{"class":250},[91,110218,296],{"class":153},[91,110220,110221],{"class":105}," 0.1\n",[91,110223,110224],{"class":93,"line":8168},[91,110225,105163],{"class":250},[91,110227,110228],{"class":93,"line":8180},[91,110229,2523],{"emptyLinePlaceholder":175},[91,110231,110232,110235,110237],{"class":93,"line":9839},[91,110233,110234],{"class":250},"    total_reward ",[91,110236,296],{"class":153},[91,110238,104842],{"class":105},[91,110240,110241],{"class":93,"line":9864},[91,110242,2523],{"emptyLinePlaceholder":175},[91,110244,110245,110247,110249,110251,110253,110255,110257],{"class":93,"line":9887},[91,110246,3324],{"class":153},[91,110248,31697],{"class":250},[91,110250,26165],{"class":153},[91,110252,32524],{"class":105},[91,110254,251],{"class":250},[91,110256,6533],{"class":105},[91,110258,30867],{"class":250},[91,110260,110261,110264,110266],{"class":93,"line":9911},[91,110262,110263],{"class":250},"        obs ",[91,110265,296],{"class":153},[91,110267,110268],{"class":250}," get_observation(data)\n",[91,110270,110271,110274,110276,110278,110280],{"class":93,"line":9916},[91,110272,110273],{"class":250},"        pole_angle ",[91,110275,296],{"class":153},[91,110277,110117],{"class":250},[91,110279,466],{"class":105},[91,110281,33327],{"class":250},[91,110283,110284,110287,110289,110291,110293],{"class":93,"line":9921},[91,110285,110286],{"class":250},"        pole_angular_velocity ",[91,110288,296],{"class":153},[91,110290,110117],{"class":250},[91,110292,321],{"class":105},[91,110294,33327],{"class":250},[91,110296,110297],{"class":93,"line":9926},[91,110298,2523],{"emptyLinePlaceholder":175},[91,110300,110301,110304,110306,110309,110311,110313,110315,110317,110319],{"class":93,"line":9935},[91,110302,110303],{"class":250},"        action ",[91,110305,296],{"class":153},[91,110307,110308],{"class":105}," 2.0",[91,110310,6641],{"class":153},[91,110312,109901],{"class":250},[91,110314,730],{"class":153},[91,110316,61948],{"class":105},[91,110318,6641],{"class":153},[91,110320,110321],{"class":250}," pole_angular_velocity\n",[91,110323,110324,110326,110328,110330,110332,110334,110336,110338],{"class":93,"line":9940},[91,110325,110303],{"class":250},[91,110327,296],{"class":153},[91,110329,107528],{"class":250},[91,110331,781],{"class":153},[91,110333,102484],{"class":105},[91,110335,12558],{"class":250},[91,110337,102484],{"class":105},[91,110339,257],{"class":250},[91,110341,110342],{"class":93,"line":9946},[91,110343,2523],{"emptyLinePlaceholder":175},[91,110345,110346,110348,110350,110352,110354],{"class":93,"line":9967},[91,110347,106698],{"class":250},[91,110349,440],{"class":105},[91,110351,4566],{"class":250},[91,110353,296],{"class":153},[91,110355,107551],{"class":250},[91,110357,110358],{"class":93,"line":9973},[91,110359,101597],{"class":250},[91,110361,110362],{"class":93,"line":9987},[91,110363,2523],{"emptyLinePlaceholder":175},[91,110365,110366,110369,110371],{"class":93,"line":9993},[91,110367,110368],{"class":250},"        reward ",[91,110370,296],{"class":153},[91,110372,110373],{"class":250}," compute_reward(get_observation(data))\n",[91,110375,110376,110379,110381],{"class":93,"line":10020},[91,110377,110378],{"class":250},"        total_reward ",[91,110380,9600],{"class":153},[91,110382,110383],{"class":250}," reward\n",[91,110385,110386],{"class":93,"line":10029},[91,110387,2523],{"emptyLinePlaceholder":175},[91,110389,110390,110392,110394,110396,110398,110400,110402],{"class":93,"line":10035},[91,110391,2620],{"class":153},[91,110393,31697],{"class":250},[91,110395,577],{"class":153},[91,110397,5877],{"class":105},[91,110399,101640],{"class":153},[91,110401,4216],{"class":105},[91,110403,3862],{"class":250},[91,110405,110406,110408,110410,110413,110416,110419,110422,110424,110427,110430,110432,110434,110436,110438,110441,110443],{"class":93,"line":10043},[91,110407,34731],{"class":105},[91,110409,251],{"class":250},[91,110411,110412],{"class":101},"\"step:\"",[91,110414,110415],{"class":250},", step, ",[91,110417,110418],{"class":101},"\"obs:\"",[91,110420,110421],{"class":250},", np.round(obs, ",[91,110423,321],{"class":105},[91,110425,110426],{"class":250},"), ",[91,110428,110429],{"class":101},"\"action:\"",[91,110431,12558],{"class":250},[91,110433,32099],{"class":105},[91,110435,251],{"class":250},[91,110437,290],{"class":105},[91,110439,110440],{"class":250},"(action), ",[91,110442,321],{"class":105},[91,110444,30578],{"class":250},[91,110446,110447],{"class":93,"line":10048},[91,110448,2523],{"emptyLinePlaceholder":175},[91,110450,110451,110453,110455,110458,110460,110462,110465,110467],{"class":93,"line":16727},[91,110452,31380],{"class":105},[91,110454,251],{"class":250},[91,110456,110457],{"class":101},"\"total_reward:\"",[91,110459,12558],{"class":250},[91,110461,32099],{"class":105},[91,110463,110464],{"class":250},"(total_reward, ",[91,110466,321],{"class":105},[91,110468,30578],{"class":250},[91,110470,110471,110473,110475,110478,110481,110483],{"class":93,"line":16733},[91,110472,31380],{"class":105},[91,110474,251],{"class":250},[91,110476,110477],{"class":101},"\"final obs:\"",[91,110479,110480],{"class":250},", np.round(get_observation(data), ",[91,110482,321],{"class":105},[91,110484,30578],{"class":250},[91,110486,110487],{"class":93,"line":16756},[91,110488,2523],{"emptyLinePlaceholder":175},[91,110490,110491],{"class":93,"line":16762},[91,110492,2523],{"emptyLinePlaceholder":175},[91,110494,110495,110497,110499,110501,110503],{"class":93,"line":16785},[91,110496,1655],{"class":153},[91,110498,31301],{"class":105},[91,110500,101640],{"class":153},[91,110502,101643],{"class":101},[91,110504,3862],{"class":250},[91,110506,110507],{"class":93,"line":16799},[91,110508,101650],{"class":250},[21,110510,103651],{},[82,110512,110514],{"className":84,"code":110513,"language":86,"meta":26,"style":26},"touch ch6_cartpole.py\n",[88,110515,110516],{"__ignoreMap":26},[91,110517,110518,110520],{"class":93,"line":94},[91,110519,101364],{"class":97},[91,110521,110522],{"class":101}," ch6_cartpole.py\n",[21,110524,110525],{},"运行：",[82,110527,110529],{"className":84,"code":110528,"language":86,"meta":26,"style":26},"python ch6_cartpole.py\n",[88,110530,110531],{"__ignoreMap":26},[91,110532,110533,110535],{"class":93,"line":94},[91,110534,30461],{"class":97},[91,110536,110522],{"class":101},[217,110538,101653],{"id":101653},[21,110540,110541],{},"构造观测：",[82,110543,110545],{"className":30459,"code":110544,"language":30461,"meta":26,"style":26},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[88,110546,110547,110555],{"__ignoreMap":26},[91,110548,110549,110551,110553],{"class":93,"line":94},[91,110550,32028],{"class":153},[91,110552,110075],{"class":97},[91,110554,110078],{"class":250},[91,110556,110557,110559],{"class":93,"line":38},[91,110558,4213],{"class":153},[91,110560,110085],{"class":250},[21,110562,110563,110566,110567,110569,110570,110572],{},[88,110564,110565],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[88,110568,104111],{}," 2 维，",[88,110571,104441],{}," 2 维，所以 obs 是 4 维。",[21,110574,110575],{},"设置初始角度：",[82,110577,110579],{"className":30459,"code":110578,"language":30461,"meta":26,"style":26},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[88,110580,110581,110593],{"__ignoreMap":26},[91,110582,110583,110585,110587,110589,110591],{"class":93,"line":94},[91,110584,104780],{"class":250},[91,110586,466],{"class":105},[91,110588,4566],{"class":250},[91,110590,296],{"class":153},[91,110592,110221],{"class":105},[91,110594,110595],{"class":93,"line":38},[91,110596,104624],{"class":250},[21,110598,110599],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[21,110601,110602],{},"简单反馈控制：",[82,110604,110606],{"className":30459,"code":110605,"language":30461,"meta":26,"style":26},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[88,110607,110608,110628],{"__ignoreMap":26},[91,110609,110610,110612,110614,110616,110618,110620,110622,110624,110626],{"class":93,"line":94},[91,110611,107523],{"class":250},[91,110613,296],{"class":153},[91,110615,110308],{"class":105},[91,110617,6641],{"class":153},[91,110619,109901],{"class":250},[91,110621,730],{"class":153},[91,110623,61948],{"class":105},[91,110625,6641],{"class":153},[91,110627,110321],{"class":250},[91,110629,110630,110632,110634,110636,110638,110640,110642,110644],{"class":93,"line":38},[91,110631,107523],{"class":250},[91,110633,296],{"class":153},[91,110635,107528],{"class":250},[91,110637,781],{"class":153},[91,110639,102484],{"class":105},[91,110641,12558],{"class":250},[91,110643,102484],{"class":105},[91,110645,257],{"class":250},[21,110647,110648],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[21,110650,110651],{},"限制动作：",[82,110653,110655],{"className":30459,"code":110654,"language":30461,"meta":26,"style":26},"np.clip(action, -1.0, 1.0)\n",[88,110656,110657],{"__ignoreMap":26},[91,110658,110659,110662,110664,110666,110668,110670],{"class":93,"line":94},[91,110660,110661],{"class":250},"np.clip(action, ",[91,110663,781],{"class":153},[91,110665,102484],{"class":105},[91,110667,12558],{"class":250},[91,110669,102484],{"class":105},[91,110671,257],{"class":250},[21,110673,110674,110675,110678],{},"因为 XML 里 ",[88,110676,110677],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[217,110680,101789],{"id":101789},[82,110682,110683],{"className":30459,"code":110544,"language":30461,"meta":26,"style":26},[88,110684,110685,110693],{"__ignoreMap":26},[91,110686,110687,110689,110691],{"class":93,"line":94},[91,110688,32028],{"class":153},[91,110690,110075],{"class":97},[91,110692,110078],{"class":250},[91,110694,110695,110697],{"class":93,"line":38},[91,110696,4213],{"class":153},[91,110698,110085],{"class":250},[21,110700,110701,110702,110705,110706,110709,110710,110713],{},"这段定义了一个函数，用来获取当前观测。",[88,110703,110704],{},"data.qpos.copy()"," 是位置数组副本，",[88,110707,110708],{},"data.qvel.copy()"," 是速度数组副本。",[88,110711,110712],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[21,110715,110716],{},"在本章模型里：",[82,110718,110721],{"className":110719,"code":110720,"language":5310,"meta":26},[5308],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[88,110722,110720],{"__ignoreMap":26},[21,110724,110725],{},"所以返回的 obs 是：",[82,110727,110730],{"className":110728,"code":110729,"language":5310,"meta":26},[5308],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[88,110731,110729],{"__ignoreMap":26},[82,110733,110735],{"className":30459,"code":110734,"language":30461,"meta":26,"style":26},"def compute_reward(obs: np.ndarray) -> float:\n",[88,110736,110737],{"__ignoreMap":26},[91,110738,110739,110741,110743,110745,110747],{"class":93,"line":94},[91,110740,32028],{"class":153},[91,110742,110100],{"class":97},[91,110744,110103],{"class":250},[91,110746,290],{"class":105},[91,110748,3862],{"class":250},[21,110750,110751,110752,110755],{},"这行定义奖励函数。输入是观测 ",[88,110753,110754],{},"obs","，输出是一个浮点数奖励。",[82,110757,110759],{"className":30459,"code":110758,"language":30461,"meta":26,"style":26},"cart_x = obs[0]\npole_angle = obs[1]\n",[88,110760,110761,110774],{"__ignoreMap":26},[91,110762,110763,110766,110768,110770,110772],{"class":93,"line":94},[91,110764,110765],{"class":250},"cart_x ",[91,110767,296],{"class":153},[91,110769,110117],{"class":250},[91,110771,440],{"class":105},[91,110773,33327],{"class":250},[91,110775,110776,110779,110781,110783,110785],{"class":93,"line":38},[91,110777,110778],{"class":250},"pole_angle ",[91,110780,296],{"class":153},[91,110782,110117],{"class":250},[91,110784,466],{"class":105},[91,110786,33327],{"class":250},[21,110788,110789,110790,110793,110794,110797],{},"数组索引从 0 开始。",[88,110791,110792],{},"obs[0]"," 是第一个元素，也就是小车位置。",[88,110795,110796],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[82,110799,110800],{"className":30459,"code":109869,"language":30461,"meta":26,"style":26},[88,110801,110802],{"__ignoreMap":26},[91,110803,110804,110806,110808,110810,110812,110814,110816,110818,110820,110822,110824,110826,110828,110830],{"class":93,"line":94},[91,110805,17169],{"class":153},[91,110807,109878],{"class":105},[91,110809,251],{"class":250},[91,110811,102484],{"class":105},[91,110813,52352],{"class":153},[91,110815,109887],{"class":105},[91,110817,6641],{"class":153},[91,110819,109892],{"class":250},[91,110821,704],{"class":153},[91,110823,109892],{"class":250},[91,110825,781],{"class":153},[91,110827,109901],{"class":250},[91,110829,704],{"class":153},[91,110831,109906],{"class":250},[21,110833,110834,110835,110838,110839,110842],{},"这行计算奖励。",[88,110836,110837],{},"cart_x * cart_x"," 是小车位置的平方，",[88,110840,110841],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[82,110844,110846],{"className":30459,"code":110845,"language":30461,"meta":26,"style":26},"data.qpos[1] = 0.1\n",[88,110847,110848],{"__ignoreMap":26},[91,110849,110850,110852,110854,110856,110858],{"class":93,"line":94},[91,110851,104780],{"class":250},[91,110853,466],{"class":105},[91,110855,4566],{"class":250},[91,110857,296],{"class":153},[91,110859,110221],{"class":105},[21,110861,110862,110863,110865,110866,110868],{},"手动设置杆子的初始角度。因为 ",[88,110864,105537],{}," 是小车位置，",[88,110867,105540],{}," 是杆子角度，所以这里改的是杆子。",[82,110870,110871],{"className":30459,"code":104624,"language":30461,"meta":26,"style":26},[88,110872,110873],{"__ignoreMap":26},[91,110874,110875],{"class":93,"line":94},[91,110876,104624],{"class":250},[21,110878,105583,110879,110881],{},[88,110880,104111],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[82,110883,110885],{"className":30459,"code":110884,"language":30461,"meta":26,"style":26},"total_reward = 0.0\n",[88,110886,110887],{"__ignoreMap":26},[91,110888,110889,110892,110894],{"class":93,"line":94},[91,110890,110891],{"class":250},"total_reward ",[91,110893,296],{"class":153},[91,110895,104842],{"class":105},[21,110897,110898],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[82,110900,110902],{"className":30459,"code":110901,"language":30461,"meta":26,"style":26},"for step in range(1000):\n",[88,110903,110904],{"__ignoreMap":26},[91,110905,110906,110908,110910,110912,110914,110916,110918],{"class":93,"line":94},[91,110907,3148],{"class":153},[91,110909,31697],{"class":250},[91,110911,26165],{"class":153},[91,110913,32524],{"class":105},[91,110915,251],{"class":250},[91,110917,6533],{"class":105},[91,110919,30867],{"class":250},[21,110921,110922,110923,110925],{},"循环 1000 步。",[88,110924,107215],{}," 是当前步数，从 0 到 999。",[82,110927,110929],{"className":30459,"code":110928,"language":30461,"meta":26,"style":26},"obs = get_observation(data)\n",[88,110930,110931],{"__ignoreMap":26},[91,110932,110933,110936,110938],{"class":93,"line":94},[91,110934,110935],{"class":250},"obs ",[91,110937,296],{"class":153},[91,110939,110268],{"class":250},[21,110941,110942,110943,28504],{},"读取当前状态，保存到 ",[88,110944,110754],{},[82,110946,110948],{"className":30459,"code":110947,"language":30461,"meta":26,"style":26},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[88,110949,110950,110962],{"__ignoreMap":26},[91,110951,110952,110954,110956,110958,110960],{"class":93,"line":94},[91,110953,110778],{"class":250},[91,110955,296],{"class":153},[91,110957,110117],{"class":250},[91,110959,466],{"class":105},[91,110961,33327],{"class":250},[91,110963,110964,110967,110969,110971,110973],{"class":93,"line":38},[91,110965,110966],{"class":250},"pole_angular_velocity ",[91,110968,296],{"class":153},[91,110970,110117],{"class":250},[91,110972,321],{"class":105},[91,110974,33327],{"class":250},[21,110976,110977,110978,110981,110982,28504],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[88,110979,110980],{},"obs[3]","？因为 obs 的顺序是 ",[88,110983,110984],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[82,110986,110988],{"className":30459,"code":110987,"language":30461,"meta":26,"style":26},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[88,110989,110990],{"__ignoreMap":26},[91,110991,110992,110994,110996,110998,111000,111002,111004,111006,111008],{"class":93,"line":94},[91,110993,107523],{"class":250},[91,110995,296],{"class":153},[91,110997,110308],{"class":105},[91,110999,6641],{"class":153},[91,111001,109901],{"class":250},[91,111003,730],{"class":153},[91,111005,61948],{"class":105},[91,111007,6641],{"class":153},[91,111009,110321],{"class":250},[21,111011,111012,111013,101099,111015,111017],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[88,111014,105341],{},[88,111016,35410],{}," 是人为设置的系数，不是固定公式。",[82,111019,111021],{"className":30459,"code":111020,"language":30461,"meta":26,"style":26},"action = np.clip(action, -1.0, 1.0)\n",[88,111022,111023],{"__ignoreMap":26},[91,111024,111025,111027,111029,111031,111033,111035,111037,111039],{"class":93,"line":94},[91,111026,107523],{"class":250},[91,111028,296],{"class":153},[91,111030,107528],{"class":250},[91,111032,781],{"class":153},[91,111034,102484],{"class":105},[91,111036,12558],{"class":250},[91,111038,102484],{"class":105},[91,111040,257],{"class":250},[21,111042,111043],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[82,111045,111046],{"className":30459,"code":109854,"language":30461,"meta":26,"style":26},[88,111047,111048],{"__ignoreMap":26},[91,111049,111050,111052,111054,111056,111058],{"class":93,"line":94},[91,111051,105952],{"class":250},[91,111053,440],{"class":105},[91,111055,4566],{"class":250},[91,111057,296],{"class":153},[91,111059,107551],{"class":250},[21,111061,111062],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[82,111064,111065],{"className":30459,"code":104586,"language":30461,"meta":26,"style":26},[88,111066,111067],{"__ignoreMap":26},[91,111068,111069],{"class":93,"line":94},[91,111070,104586],{"class":250},[21,111072,111073,111074,111076],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[88,111075,106207],{}," 计算小车和杆子的下一刻状态。",[82,111078,111080],{"className":30459,"code":111079,"language":30461,"meta":26,"style":26},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[88,111081,111082,111091],{"__ignoreMap":26},[91,111083,111084,111087,111089],{"class":93,"line":94},[91,111085,111086],{"class":250},"reward ",[91,111088,296],{"class":153},[91,111090,110373],{"class":250},[91,111092,111093,111095,111097],{"class":93,"line":38},[91,111094,110891],{"class":250},[91,111096,9600],{"class":153},[91,111098,110383],{"class":250},[21,111100,111101,111102,111104,111105,111108,111109,28504],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[88,111103,9600],{}," 是简写，",[88,111106,111107],{},"total_reward += reward"," 等价于 ",[88,111110,111111],{},"total_reward = total_reward + reward",[82,111113,111115],{"className":30459,"code":111114,"language":30461,"meta":26,"style":26},"if step % 100 == 0:\n",[88,111116,111117],{"__ignoreMap":26},[91,111118,111119,111121,111123,111125,111127,111129,111131],{"class":93,"line":94},[91,111120,1655],{"class":153},[91,111122,31697],{"class":250},[91,111124,577],{"class":153},[91,111126,5877],{"class":105},[91,111128,101640],{"class":153},[91,111130,4216],{"class":105},[91,111132,3862],{"class":250},[21,111134,111135,111137,111138,111141],{},[88,111136,577],{}," 是取余数。",[88,111139,111140],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[82,111143,111145],{"className":30459,"code":111144,"language":30461,"meta":26,"style":26},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[88,111146,111147],{"__ignoreMap":26},[91,111148,111149,111151,111153,111155,111157,111159,111161,111163,111165,111167,111169,111171,111173,111175,111177,111179],{"class":93,"line":94},[91,111150,30496],{"class":105},[91,111152,251],{"class":250},[91,111154,110412],{"class":101},[91,111156,110415],{"class":250},[91,111158,110418],{"class":101},[91,111160,110421],{"class":250},[91,111162,321],{"class":105},[91,111164,110426],{"class":250},[91,111166,110429],{"class":101},[91,111168,12558],{"class":250},[91,111170,32099],{"class":105},[91,111172,251],{"class":250},[91,111174,290],{"class":105},[91,111176,110440],{"class":250},[91,111178,321],{"class":105},[91,111180,30578],{"class":250},[21,111182,111183,111184,111187,111188,111191],{},"打印当前步数、观测和动作。",[88,111185,111186],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[88,111189,111190],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[190,111193,102397],{"id":102396},[21,111195,111196],{},"观测向量:",[82,111198,111201],{"className":111199,"code":111200,"language":5310,"meta":26},[5308],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[88,111202,111200],{"__ignoreMap":26},[21,111204,111205],{},"控制器是教学用的简单线性反馈，不保证最优。",[21,111207,111208],{},"每隔 100 步会打印一次：",[82,111210,111213],{"className":111211,"code":111212,"language":5310,"meta":26},[5308],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[88,111214,111212],{"__ignoreMap":26},[21,111216,111217],{},"重点观察：",[14,111219,111220,111226,111231],{},[17,111221,111222,111225],{},[88,111223,111224],{},"pole_angle"," 是否越来越大。",[17,111227,111228,111230],{},[88,111229,109807],{}," 是否跑得太远。",[17,111232,111233,111234,82620,111236,28504],{},"action 是否经常被 clip 到 ",[88,111235,103996],{},[88,111237,466],{},[21,111239,111240],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[190,111242,102429],{"id":102428},[14,111244,111245,111251,111254,111260,111270,111276,111279],{},[17,111246,111247,111248,28504],{},"把初始角度改为 ",[88,111249,111250],{},"data.qpos[1] = 0.3",[17,111252,111253],{},"重新运行，观察控制是否变差。",[17,111255,111256,111257,111259],{},"把 actuator ",[88,111258,107148],{}," 改小。",[17,111261,111262,111263,111266,111267,28504],{},"打印 ",[88,111264,111265],{},"model.nq, model.nv, model.nu","，应为 ",[88,111268,111269],{},"2 2 1",[17,111271,111272,111273,111275],{},"把 reward 里的 ",[88,111274,110841],{}," 系数改大，观察总奖励变化。",[17,111277,111278],{},"把控制器改成反号，观察杆子是否更容易倒。",[17,111280,111281],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[190,111283,102534],{"id":102533},[217,111285,111286],{"id":111286},"杆子方向和预期不一致",[21,111288,102477,111289,111291,111292,111294],{},[88,111290,106320],{}," 和 capsule 的 ",[88,111293,103257],{},"，必要时用 viewer 可视化确认。",[217,111296,111297],{"id":111297},"控制器越控越倒",[21,111299,111300],{},"说明反馈符号可能反了，尝试:",[82,111302,111304],{"className":30459,"code":111303,"language":30461,"meta":26,"style":26},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[88,111305,111306],{"__ignoreMap":26},[91,111307,111308,111310,111312,111314,111316,111318,111320,111322,111324,111326],{"class":93,"line":94},[91,111309,107523],{"class":250},[91,111311,296],{"class":153},[91,111313,52352],{"class":153},[91,111315,105341],{"class":105},[91,111317,6641],{"class":153},[91,111319,109901],{"class":250},[91,111321,781],{"class":153},[91,111323,61948],{"class":105},[91,111325,6641],{"class":153},[91,111327,110321],{"class":250},[217,111329,111330],{"id":111330},"小车飞走",[21,111332,111333,111334,111336,111337,111340],{},"降低 ",[88,111335,107148],{}," 或缩小 ",[88,111338,111339],{},"action"," 的 clip 范围。",[217,111342,111344,111346],{"id":111343},"obs3-为什么是杆子角速度",[88,111345,110980],{}," 为什么是杆子角速度",[21,111348,111349],{},"因为这个模型里：",[82,111351,111354],{"className":111352,"code":111353,"language":5310,"meta":26},[5308],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[88,111355,111353],{"__ignoreMap":26},[21,111357,109828],{},[82,111359,111362],{"className":111360,"code":111361,"language":5310,"meta":26},[5308],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[88,111363,111361],{"__ignoreMap":26},[217,111365,111367],{"id":111366},"reward-变成负数是否错误","reward 变成负数是否错误",[21,111369,111370],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[190,111372,102688],{"id":102687},[21,111374,111375],{},"一个控制任务通常包含：",[14,111377,111378,111381,111389,111394,111397],{},[17,111379,111380],{},"模型：Cartpole 的 body、joint、actuator。",[17,111382,111383,111384,461,111386,111388],{},"观测：从 ",[88,111385,104111],{},[88,111387,104441],{}," 里取状态。",[17,111390,111391,111392,28504],{},"动作：写入 ",[88,111393,101157],{},[17,111395,111396],{},"奖励：根据任务目标打分。",[17,111398,111399],{},"循环：obs -> action -> step -> reward。",[21,111401,111402],{},"这就是后面 Gymnasium 环境的基本骨架。",[168,111404,104367],{},{"title":26,"searchDepth":38,"depth":38,"links":111406},[111407,111408,111409,111414,111418,111419,111420,111428],{"id":100727,"depth":38,"text":100728},{"id":100850,"depth":38,"text":100851},{"id":101125,"depth":38,"text":101126,"children":111410},[111411,111412,111413],{"id":109781,"depth":1304,"text":109782},{"id":109846,"depth":1304,"text":109847},{"id":109862,"depth":1304,"text":109863},{"id":101333,"depth":38,"text":101334,"children":111415},[111416,111417],{"id":101653,"depth":1304,"text":101653},{"id":101789,"depth":1304,"text":101789},{"id":102396,"depth":38,"text":102397},{"id":102428,"depth":38,"text":102429},{"id":102533,"depth":38,"text":102534,"children":111421},[111422,111423,111424,111425,111427],{"id":111286,"depth":1304,"text":111286},{"id":111297,"depth":1304,"text":111297},{"id":111330,"depth":1304,"text":111330},{"id":111343,"depth":1304,"text":111426},"obs[3] 为什么是杆子角速度",{"id":111366,"depth":1304,"text":111367},{"id":102687,"depth":38,"text":102688},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109517,"description":26},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111435,"title":111436,"body":111437,"description":26,"extension":173,"meta":113451,"navigation":175,"path":113452,"seo":113453,"stem":113454,"__hash__":113455},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111438,"toc":113427},[111439,111442,111444,111447,111449,111466,111469,111472,111478,111481,111483,111485,111509,111511,111525,111527,111568,111570,111588,111590,111593,111599,111602,111630,111634,111640,111665,111668,111699,111706,111709,111712,111718,111721,111727,111730,111736,111740,111743,111768,111771,111773,112533,112535,112547,112549,112560,112562,112565,112582,112585,112587,112598,112601,112603,112649,112652,112665,112668,112750,112753,112755,112771,112781,112794,112797,112836,112846,112857,112867,112880,112883,112912,112915,112925,112928,112934,112951,112962,112964,112970,112987,112998,113019,113022,113034,113037,113058,113061,113069,113077,113094,113097,113166,113173,113181,113184,113197,113204,113206,113209,113215,113218,113221,113227,113233,113235,113275,113277,113283,113292,113295,113297,113317,113320,113323,113329,113333,113335,113362,113365,113368,113395,113401,113404,113407,113409,113412,113415,113421,113424],[10,111440,111436],{"id":111441},"_7控制任务reacher-机械臂到达目标",[190,111443,100728],{"id":100727},[21,111445,111446],{},"本章搭建一个二维两关节 reacher 任务。",[21,111448,104412],{},[14,111450,111451,111454,111457,111460,111463],{},[17,111452,111453],{},"两个 hinge joint",[17,111455,111456],{},"两个 motor actuator",[17,111458,111459],{},"site 作为末端点和目标点",[17,111461,111462],{},"根据末端和目标距离设计 reward",[17,111464,111465],{},"构造机械臂任务的基本形式",[21,111467,111468],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[21,111470,111471],{},"Reacher 任务可以理解为：",[82,111473,111476],{"className":111474,"code":111475,"language":5310,"meta":26},[5308],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[88,111477,111475],{"__ignoreMap":26},[21,111479,111480],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[190,111482,100851],{"id":100850},[21,111484,100854],{},[82,111486,111487],{"className":84,"code":104469,"language":86,"meta":26,"style":26},[88,111488,111489],{"__ignoreMap":26},[91,111490,111491,111493,111495,111497,111499,111501,111503,111505,111507],{"class":93,"line":94},[91,111492,24699],{"class":97},[91,111494,26437],{"class":101},[91,111496,23956],{"class":101},[91,111498,26522],{"class":105},[91,111500,104484],{"class":101},[91,111502,100879],{"class":101},[91,111504,102582],{"class":101},[91,111506,100895],{"class":101},[91,111508,104493],{"class":101},[21,111510,102900],{},[82,111512,111513],{"className":84,"code":101000,"language":86,"meta":26,"style":26},[88,111514,111515],{"__ignoreMap":26},[91,111516,111517,111519,111521,111523],{"class":93,"line":94},[91,111518,23953],{"class":97},[91,111520,23956],{"class":101},[91,111522,101011],{"class":101},[91,111524,101014],{"class":101},[21,111526,102917],{},[82,111528,111530],{"className":84,"code":111529,"language":86,"meta":26,"style":26},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[88,111531,111532,111549,111558],{"__ignoreMap":26},[91,111533,111534,111536,111538,111540,111543,111545,111547],{"class":93,"line":94},[91,111535,30411],{"class":97},[91,111537,29295],{"class":101},[91,111539,25237],{"class":105},[91,111541,111542],{"class":101}," mujoco-reacher",[91,111544,101056],{"class":101},[91,111546,101059],{"class":105},[91,111548,101062],{"class":105},[91,111550,111551,111553,111555],{"class":93,"line":38},[91,111552,30411],{"class":97},[91,111554,101069],{"class":101},[91,111556,111557],{"class":101}," mujoco-reacher\n",[91,111559,111560,111562,111564,111566],{"class":93,"line":1304},[91,111561,23953],{"class":97},[91,111563,23956],{"class":101},[91,111565,101011],{"class":101},[91,111567,101014],{"class":101},[21,111569,101085],{},[14,111571,111572,111575,111578],{},[17,111573,111574],{},"本章使用低维状态，不使用图像输入。",[17,111576,111577],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[17,111579,111580,111581,461,111583,461,111585,111587],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[88,111582,104111],{},[88,111584,104441],{},[88,111586,103761],{}," 的方法一致。",[190,111589,101126],{"id":101125},[21,111591,111592],{},"Reacher 任务核心:",[82,111594,111597],{"className":111595,"code":111596,"language":5310,"meta":26},[5308],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[88,111598,111596],{"__ignoreMap":26},[21,111600,111601],{},"读取 site 世界坐标:",[82,111603,111605],{"className":30459,"code":111604,"language":30461,"meta":26,"style":26},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[88,111606,111607,111620],{"__ignoreMap":26},[91,111608,111609,111611,111613,111615,111618],{"class":93,"line":94},[91,111610,103715],{"class":250},[91,111612,296],{"class":153},[91,111614,103486],{"class":250},[91,111616,111617],{"class":101},"\"tip\"",[91,111619,257],{"class":250},[91,111621,111622,111625,111627],{"class":93,"line":38},[91,111623,111624],{"class":250},"tip_pos ",[91,111626,296],{"class":153},[91,111628,111629],{"class":250}," data.site_xpos[site_id]\n",[217,111631,111633],{"id":111632},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[21,111635,111636,111637,111639],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[88,111638,104111],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[82,111641,111643],{"className":30459,"code":111642,"language":30461,"meta":26,"style":26},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[88,111644,111645,111655],{"__ignoreMap":26},[91,111646,111647,111650,111652],{"class":93,"line":94},[91,111648,111649],{"class":250},"tip ",[91,111651,296],{"class":153},[91,111653,111654],{"class":250}," data.site_xpos[tip_site_id]\n",[91,111656,111657,111660,111662],{"class":93,"line":38},[91,111658,111659],{"class":250},"target ",[91,111661,296],{"class":153},[91,111663,111664],{"class":250}," data.site_xpos[target_site_id]\n",[21,111666,111667],{},"这样 reward 就很容易写：",[82,111669,111671],{"className":30459,"code":111670,"language":30461,"meta":26,"style":26},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[88,111672,111673,111688],{"__ignoreMap":26},[91,111674,111675,111678,111680,111683,111685],{"class":93,"line":94},[91,111676,111677],{"class":250},"dist ",[91,111679,296],{"class":153},[91,111681,111682],{"class":250}," np.linalg.norm(tip ",[91,111684,781],{"class":153},[91,111686,111687],{"class":250}," target)\n",[91,111689,111690,111692,111694,111696],{"class":93,"line":38},[91,111691,111086],{"class":250},[91,111693,296],{"class":153},[91,111695,52352],{"class":153},[91,111697,111698],{"class":250},"dist\n",[21,111700,111701,111702,111705],{},"距离越小，",[88,111703,111704],{},"-dist"," 越接近 0，奖励越高。",[217,111707,111708],{"id":111708},"两关节机械臂的状态",[21,111710,111711],{},"这个模型有两个 hinge joint：",[82,111713,111716],{"className":111714,"code":111715,"language":5310,"meta":26},[5308],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[88,111717,111715],{"__ignoreMap":26},[21,111719,111720],{},"再加上末端和目标位置：",[82,111722,111725],{"className":111723,"code":111724,"language":5310,"meta":26},[5308],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[88,111726,111724],{"__ignoreMap":26},[21,111728,111729],{},"总维度：",[82,111731,111734],{"className":111732,"code":111733,"language":5310,"meta":26},[5308],"2 + 2 + 3 + 3 = 10\n",[88,111735,111733],{"__ignoreMap":26},[217,111737,111739],{"id":111738},"为什么-gravity-是-0","为什么 gravity 是 0",[21,111741,111742],{},"本章把重力设为：",[82,111744,111746],{"className":53148,"code":111745,"language":53150,"meta":26,"style":26},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[88,111747,111748],{"__ignoreMap":26},[91,111749,111750,111752,111754,111756,111758,111760,111762,111764,111766],{"class":93,"line":94},[91,111751,1159],{"class":250},[91,111753,69247],{"class":51381},[91,111755,101275],{"class":97},[91,111757,296],{"class":250},[91,111759,101280],{"class":101},[91,111761,101283],{"class":97},[91,111763,296],{"class":250},[91,111765,103852],{"class":101},[91,111767,101225],{"class":250},[21,111769,111770],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[190,111772,101334],{"id":101333},[82,111774,111776],{"className":30459,"code":111775,"language":30461,"meta":26,"style":26},"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",[88,111777,111778,111784,111794,111798,111802,111810,111815,111820,111824,111828,111833,111838,111842,111847,111852,111857,111861,111866,111871,111876,111881,111885,111889,111893,111897,111901,111906,111911,111915,111919,111923,111927,111931,111946,111955,111967,111990,111997,112001,112005,112015,112029,112043,112050,112054,112058,112072,112084,112096,112109,112124,112141,112145,112149,112161,112173,112181,112189,112193,112209,112214,112227,112240,112255,112259,112294,112326,112330,112334,112343,112347,112363,112373,112384,112400,112416,112432,112448,112452,112470,112490,112509,112513,112517,112529],{"__ignoreMap":26},[91,111779,111780,111782],{"class":93,"line":94},[91,111781,30473],{"class":153},[91,111783,101382],{"class":250},[91,111785,111786,111788,111790,111792],{"class":93,"line":38},[91,111787,30473],{"class":153},[91,111789,31461],{"class":250},[91,111791,31464],{"class":153},[91,111793,31467],{"class":250},[91,111795,111796],{"class":93,"line":1304},[91,111797,2523],{"emptyLinePlaceholder":175},[91,111799,111800],{"class":93,"line":1319},[91,111801,2523],{"emptyLinePlaceholder":175},[91,111803,111804,111806,111808],{"class":93,"line":1325},[91,111805,101395],{"class":105},[91,111807,13687],{"class":153},[91,111809,101400],{"class":101},[91,111811,111812],{"class":93,"line":1339},[91,111813,111814],{"class":101},"\u003Cmujoco model=\"two_link_reacher\">\n",[91,111816,111817],{"class":93,"line":1345},[91,111818,111819],{"class":101},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[91,111821,111822],{"class":93,"line":1436},[91,111823,2523],{"emptyLinePlaceholder":175},[91,111825,111826],{"class":93,"line":1442},[91,111827,101419],{"class":101},[91,111829,111830],{"class":93,"line":1454},[91,111831,111832],{"class":101},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[91,111834,111835],{"class":93,"line":1736},[91,111836,111837],{"class":101},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[91,111839,111840],{"class":93,"line":1741},[91,111841,2523],{"emptyLinePlaceholder":175},[91,111843,111844],{"class":93,"line":1747},[91,111845,111846],{"class":101},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[91,111848,111849],{"class":93,"line":1752},[91,111850,111851],{"class":101},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[91,111853,111854],{"class":93,"line":1766},[91,111855,111856],{"class":101},"      \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",[91,111858,111859],{"class":93,"line":1771},[91,111860,2523],{"emptyLinePlaceholder":175},[91,111862,111863],{"class":93,"line":1777},[91,111864,111865],{"class":101},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[91,111867,111868],{"class":93,"line":1798},[91,111869,111870],{"class":101},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[91,111872,111873],{"class":93,"line":1803},[91,111874,111875],{"class":101},"        \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",[91,111877,111878],{"class":93,"line":1817},[91,111879,111880],{"class":101},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[91,111882,111883],{"class":93,"line":1822},[91,111884,106519],{"class":101},[91,111886,111887],{"class":93,"line":1851},[91,111888,101448],{"class":101},[91,111890,111891],{"class":93,"line":1856},[91,111892,101453],{"class":101},[91,111894,111895],{"class":93,"line":1873},[91,111896,2523],{"emptyLinePlaceholder":175},[91,111898,111899],{"class":93,"line":1878},[91,111900,106536],{"class":101},[91,111902,111903],{"class":93,"line":1883},[91,111904,111905],{"class":101},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[91,111907,111908],{"class":93,"line":1888},[91,111909,111910],{"class":101},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[91,111912,111913],{"class":93,"line":1902},[91,111914,106546],{"class":101},[91,111916,111917],{"class":93,"line":1907},[91,111918,101458],{"class":101},[91,111920,111921],{"class":93,"line":2700},[91,111922,95779],{"class":101},[91,111924,111925],{"class":93,"line":2714},[91,111926,2523],{"emptyLinePlaceholder":175},[91,111928,111929],{"class":93,"line":2722},[91,111930,2523],{"emptyLinePlaceholder":175},[91,111932,111933,111935,111938,111941,111943],{"class":93,"line":2727},[91,111934,32028],{"class":153},[91,111936,111937],{"class":97}," site_position",[91,111939,111940],{"class":250},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[91,111942,1424],{"class":105},[91,111944,111945],{"class":250},") -> np.ndarray:\n",[91,111947,111948,111950,111952],{"class":93,"line":2733},[91,111949,103481],{"class":250},[91,111951,296],{"class":153},[91,111953,111954],{"class":250}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[91,111956,111957,111959,111961,111963,111965],{"class":93,"line":2739},[91,111958,3224],{"class":153},[91,111960,103530],{"class":250},[91,111962,1159],{"class":153},[91,111964,4216],{"class":105},[91,111966,3862],{"class":250},[91,111968,111969,111971,111973,111975,111977,111980,111982,111984,111986,111988],{"class":93,"line":2744},[91,111970,103513],{"class":153},[91,111972,103516],{"class":105},[91,111974,251],{"class":250},[91,111976,302],{"class":153},[91,111978,111979],{"class":101},"\"site not found: ",[91,111981,1145],{"class":105},[91,111983,79891],{"class":250},[91,111985,1195],{"class":105},[91,111987,500],{"class":101},[91,111989,257],{"class":250},[91,111991,111992,111994],{"class":93,"line":8071},[91,111993,4213],{"class":153},[91,111995,111996],{"class":250}," data.site_xpos[site_id].copy()\n",[91,111998,111999],{"class":93,"line":8095},[91,112000,2523],{"emptyLinePlaceholder":175},[91,112002,112003],{"class":93,"line":8100},[91,112004,2523],{"emptyLinePlaceholder":175},[91,112006,112007,112009,112012],{"class":93,"line":8106},[91,112008,32028],{"class":153},[91,112010,112011],{"class":97}," get_obs",[91,112013,112014],{"class":250},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[91,112016,112017,112020,112022,112025,112027],{"class":93,"line":8133},[91,112018,112019],{"class":250},"    tip ",[91,112021,296],{"class":153},[91,112023,112024],{"class":250}," site_position(model, data, ",[91,112026,111617],{"class":101},[91,112028,257],{"class":250},[91,112030,112031,112034,112036,112038,112041],{"class":93,"line":8138},[91,112032,112033],{"class":250},"    target ",[91,112035,296],{"class":153},[91,112037,112024],{"class":250},[91,112039,112040],{"class":101},"\"target\"",[91,112042,257],{"class":250},[91,112044,112045,112047],{"class":93,"line":8144},[91,112046,4213],{"class":153},[91,112048,112049],{"class":250}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[91,112051,112052],{"class":93,"line":8156},[91,112053,2523],{"emptyLinePlaceholder":175},[91,112055,112056],{"class":93,"line":8168},[91,112057,2523],{"emptyLinePlaceholder":175},[91,112059,112060,112062,112065,112068,112070],{"class":93,"line":8180},[91,112061,32028],{"class":153},[91,112063,112064],{"class":97}," reward",[91,112066,112067],{"class":250},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[91,112069,290],{"class":105},[91,112071,3862],{"class":250},[91,112073,112074,112076,112078,112080,112082],{"class":93,"line":9839},[91,112075,112019],{"class":250},[91,112077,296],{"class":153},[91,112079,112024],{"class":250},[91,112081,111617],{"class":101},[91,112083,257],{"class":250},[91,112085,112086,112088,112090,112092,112094],{"class":93,"line":9864},[91,112087,112033],{"class":250},[91,112089,296],{"class":153},[91,112091,112024],{"class":250},[91,112093,112040],{"class":101},[91,112095,257],{"class":250},[91,112097,112098,112101,112103,112105,112107],{"class":93,"line":9887},[91,112099,112100],{"class":250},"    dist ",[91,112102,296],{"class":153},[91,112104,111682],{"class":250},[91,112106,781],{"class":153},[91,112108,111687],{"class":250},[91,112110,112111,112114,112116,112119,112121],{"class":93,"line":9911},[91,112112,112113],{"class":250},"    control_cost ",[91,112115,296],{"class":153},[91,112117,112118],{"class":105}," 0.01",[91,112120,6641],{"class":153},[91,112122,112123],{"class":250}," np.sum(np.square(data.ctrl))\n",[91,112125,112126,112128,112130,112132,112134,112136,112138],{"class":93,"line":9916},[91,112127,4213],{"class":153},[91,112129,109878],{"class":105},[91,112131,251],{"class":250},[91,112133,781],{"class":153},[91,112135,111677],{"class":250},[91,112137,781],{"class":153},[91,112139,112140],{"class":250}," control_cost)\n",[91,112142,112143],{"class":93,"line":9921},[91,112144,2523],{"emptyLinePlaceholder":175},[91,112146,112147],{"class":93,"line":9926},[91,112148,2523],{"emptyLinePlaceholder":175},[91,112150,112151,112153,112155,112157,112159],{"class":93,"line":9935},[91,112152,32028],{"class":153},[91,112154,2096],{"class":97},[91,112156,101479],{"class":250},[91,112158,95767],{"class":105},[91,112160,3862],{"class":250},[91,112162,112163,112165,112167,112169,112171],{"class":93,"line":9940},[91,112164,101488],{"class":250},[91,112166,296],{"class":153},[91,112168,101493],{"class":250},[91,112170,101395],{"class":105},[91,112172,257],{"class":250},[91,112174,112175,112177,112179],{"class":93,"line":9946},[91,112176,101502],{"class":250},[91,112178,296],{"class":153},[91,112180,101507],{"class":250},[91,112182,112183,112185,112187],{"class":93,"line":9967},[91,112184,110234],{"class":250},[91,112186,296],{"class":153},[91,112188,104842],{"class":105},[91,112190,112191],{"class":93,"line":9973},[91,112192,2523],{"emptyLinePlaceholder":175},[91,112194,112195,112197,112199,112201,112203,112205,112207],{"class":93,"line":9987},[91,112196,3324],{"class":153},[91,112198,31697],{"class":250},[91,112200,26165],{"class":153},[91,112202,32524],{"class":105},[91,112204,251],{"class":250},[91,112206,65155],{"class":105},[91,112208,30867],{"class":250},[91,112210,112211],{"class":93,"line":9993},[91,112212,112213],{"class":250},"        mujoco.mj_forward(model, data)\n",[91,112215,112216,112219,112221,112223,112225],{"class":93,"line":10020},[91,112217,112218],{"class":250},"        tip ",[91,112220,296],{"class":153},[91,112222,112024],{"class":250},[91,112224,111617],{"class":101},[91,112226,257],{"class":250},[91,112228,112229,112232,112234,112236,112238],{"class":93,"line":10029},[91,112230,112231],{"class":250},"        target ",[91,112233,296],{"class":153},[91,112235,112024],{"class":250},[91,112237,112040],{"class":101},[91,112239,257],{"class":250},[91,112241,112242,112245,112247,112250,112252],{"class":93,"line":10035},[91,112243,112244],{"class":250},"        error ",[91,112246,296],{"class":153},[91,112248,112249],{"class":250}," target ",[91,112251,781],{"class":153},[91,112253,112254],{"class":250}," tip\n",[91,112256,112257],{"class":93,"line":10043},[91,112258,2523],{"emptyLinePlaceholder":175},[91,112260,112261,112263,112265,112267,112269,112272,112274,112276,112279,112281,112284,112286,112288,112290,112292],{"class":93,"line":10048},[91,112262,106698],{"class":250},[91,112264,440],{"class":105},[91,112266,4566],{"class":250},[91,112268,296],{"class":153},[91,112270,112271],{"class":250}," np.clip(",[91,112273,105341],{"class":105},[91,112275,6641],{"class":153},[91,112277,112278],{"class":250}," error[",[91,112280,327],{"class":105},[91,112282,112283],{"class":250},"], ",[91,112285,781],{"class":153},[91,112287,102484],{"class":105},[91,112289,12558],{"class":250},[91,112291,102484],{"class":105},[91,112293,257],{"class":250},[91,112295,112296,112298,112300,112302,112304,112306,112308,112310,112312,112314,112316,112318,112320,112322,112324],{"class":93,"line":16727},[91,112297,106698],{"class":250},[91,112299,466],{"class":105},[91,112301,4566],{"class":250},[91,112303,296],{"class":153},[91,112305,112271],{"class":250},[91,112307,105341],{"class":105},[91,112309,6641],{"class":153},[91,112311,112278],{"class":250},[91,112313,440],{"class":105},[91,112315,112283],{"class":250},[91,112317,781],{"class":153},[91,112319,102484],{"class":105},[91,112321,12558],{"class":250},[91,112323,102484],{"class":105},[91,112325,257],{"class":250},[91,112327,112328],{"class":93,"line":16733},[91,112329,2523],{"emptyLinePlaceholder":175},[91,112331,112332],{"class":93,"line":16756},[91,112333,101597],{"class":250},[91,112335,112336,112338,112340],{"class":93,"line":16762},[91,112337,110378],{"class":250},[91,112339,9600],{"class":153},[91,112341,112342],{"class":250}," reward(model, data)\n",[91,112344,112345],{"class":93,"line":16785},[91,112346,2523],{"emptyLinePlaceholder":175},[91,112348,112349,112351,112353,112355,112357,112359,112361],{"class":93,"line":16799},[91,112350,2620],{"class":153},[91,112352,31697],{"class":250},[91,112354,577],{"class":153},[91,112356,5877],{"class":105},[91,112358,101640],{"class":153},[91,112360,4216],{"class":105},[91,112362,3862],{"class":250},[91,112364,112365,112368,112370],{"class":93,"line":16819},[91,112366,112367],{"class":250},"            obs ",[91,112369,296],{"class":153},[91,112371,112372],{"class":250}," get_obs(model, data)\n",[91,112374,112375,112377,112379,112381],{"class":93,"line":16825},[91,112376,34731],{"class":105},[91,112378,251],{"class":250},[91,112380,110412],{"class":101},[91,112382,112383],{"class":250},", step)\n",[91,112385,112386,112388,112390,112393,112396,112398],{"class":93,"line":16836},[91,112387,34731],{"class":105},[91,112389,251],{"class":250},[91,112391,112392],{"class":101},"\"  tip:\"",[91,112394,112395],{"class":250},", np.round(tip, ",[91,112397,321],{"class":105},[91,112399,30578],{"class":250},[91,112401,112402,112404,112406,112409,112412,112414],{"class":93,"line":16859},[91,112403,34731],{"class":105},[91,112405,251],{"class":250},[91,112407,112408],{"class":101},"\"  target:\"",[91,112410,112411],{"class":250},", np.round(target, ",[91,112413,321],{"class":105},[91,112415,30578],{"class":250},[91,112417,112418,112420,112422,112425,112428,112430],{"class":93,"line":16881},[91,112419,34731],{"class":105},[91,112421,251],{"class":250},[91,112423,112424],{"class":101},"\"  ctrl:\"",[91,112426,112427],{"class":250},", np.round(data.ctrl.copy(), ",[91,112429,321],{"class":105},[91,112431,30578],{"class":250},[91,112433,112434,112436,112438,112441,112444,112446],{"class":93,"line":16886},[91,112435,34731],{"class":105},[91,112437,251],{"class":250},[91,112439,112440],{"class":101},"\"  obs_dim:\"",[91,112442,112443],{"class":250},", obs.shape[",[91,112445,440],{"class":105},[91,112447,4780],{"class":250},[91,112449,112450],{"class":93,"line":16892},[91,112451,2523],{"emptyLinePlaceholder":175},[91,112453,112454,112456,112458,112460,112462,112464,112466,112468],{"class":93,"line":16906},[91,112455,31380],{"class":105},[91,112457,251],{"class":250},[91,112459,110457],{"class":101},[91,112461,12558],{"class":250},[91,112463,32099],{"class":105},[91,112465,110464],{"class":250},[91,112467,321],{"class":105},[91,112469,30578],{"class":250},[91,112471,112472,112474,112476,112479,112482,112484,112486,112488],{"class":93,"line":16919},[91,112473,31380],{"class":105},[91,112475,251],{"class":250},[91,112477,112478],{"class":101},"\"final tip:\"",[91,112480,112481],{"class":250},", np.round(site_position(model, data, ",[91,112483,111617],{"class":101},[91,112485,110426],{"class":250},[91,112487,321],{"class":105},[91,112489,30578],{"class":250},[91,112491,112492,112494,112496,112499,112501,112503,112505,112507],{"class":93,"line":16924},[91,112493,31380],{"class":105},[91,112495,251],{"class":250},[91,112497,112498],{"class":101},"\"target:\"",[91,112500,112481],{"class":250},[91,112502,112040],{"class":101},[91,112504,110426],{"class":250},[91,112506,321],{"class":105},[91,112508,30578],{"class":250},[91,112510,112511],{"class":93,"line":16938},[91,112512,2523],{"emptyLinePlaceholder":175},[91,112514,112515],{"class":93,"line":16943},[91,112516,2523],{"emptyLinePlaceholder":175},[91,112518,112519,112521,112523,112525,112527],{"class":93,"line":16949},[91,112520,1655],{"class":153},[91,112522,31301],{"class":105},[91,112524,101640],{"class":153},[91,112526,101643],{"class":101},[91,112528,3862],{"class":250},[91,112530,112531],{"class":93,"line":16954},[91,112532,101650],{"class":250},[21,112534,103651],{},[82,112536,112538],{"className":84,"code":112537,"language":86,"meta":26,"style":26},"touch ch7_reacher.py\n",[88,112539,112540],{"__ignoreMap":26},[91,112541,112542,112544],{"class":93,"line":94},[91,112543,101364],{"class":97},[91,112545,112546],{"class":101}," ch7_reacher.py\n",[21,112548,110525],{},[82,112550,112552],{"className":84,"code":112551,"language":86,"meta":26,"style":26},"python ch7_reacher.py\n",[88,112553,112554],{"__ignoreMap":26},[91,112555,112556,112558],{"class":93,"line":94},[91,112557,30461],{"class":97},[91,112559,112546],{"class":101},[217,112561,101653],{"id":101653},[21,112563,112564],{},"读取 site 坐标：",[82,112566,112568],{"className":30459,"code":112567,"language":30461,"meta":26,"style":26},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[88,112569,112570],{"__ignoreMap":26},[91,112571,112572,112574,112576,112578,112580],{"class":93,"line":94},[91,112573,32028],{"class":153},[91,112575,111937],{"class":97},[91,112577,111940],{"class":250},[91,112579,1424],{"class":105},[91,112581,111945],{"class":250},[21,112583,112584],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[21,112586,110541],{},[82,112588,112590],{"className":30459,"code":112589,"language":30461,"meta":26,"style":26},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[88,112591,112592],{"__ignoreMap":26},[91,112593,112594,112596],{"class":93,"line":94},[91,112595,17169],{"class":153},[91,112597,112049],{"class":250},[21,112599,112600],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[21,112602,109866],{},[82,112604,112606],{"className":30459,"code":112605,"language":30461,"meta":26,"style":26},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[88,112607,112608,112620,112633],{"__ignoreMap":26},[91,112609,112610,112612,112614,112616,112618],{"class":93,"line":94},[91,112611,111677],{"class":250},[91,112613,296],{"class":153},[91,112615,111682],{"class":250},[91,112617,781],{"class":153},[91,112619,111687],{"class":250},[91,112621,112622,112625,112627,112629,112631],{"class":93,"line":38},[91,112623,112624],{"class":250},"control_cost ",[91,112626,296],{"class":153},[91,112628,112118],{"class":105},[91,112630,6641],{"class":153},[91,112632,112123],{"class":250},[91,112634,112635,112637,112639,112641,112643,112645,112647],{"class":93,"line":1304},[91,112636,17169],{"class":153},[91,112638,109878],{"class":105},[91,112640,251],{"class":250},[91,112642,781],{"class":153},[91,112644,111677],{"class":250},[91,112646,781],{"class":153},[91,112648,112140],{"class":250},[21,112650,112651],{},"奖励由两部分组成：",[14,112653,112654,112659],{},[17,112655,112656,112658],{},[88,112657,111704],{},"：末端离目标越远，奖励越低。",[17,112660,112661,112664],{},[88,112662,112663],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[21,112666,112667],{},"简单控制器：",[82,112669,112671],{"className":30459,"code":112670,"language":30461,"meta":26,"style":26},"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",[88,112672,112673,112686,112718],{"__ignoreMap":26},[91,112674,112675,112678,112680,112682,112684],{"class":93,"line":94},[91,112676,112677],{"class":250},"error ",[91,112679,296],{"class":153},[91,112681,112249],{"class":250},[91,112683,781],{"class":153},[91,112685,112254],{"class":250},[91,112687,112688,112690,112692,112694,112696,112698,112700,112702,112704,112706,112708,112710,112712,112714,112716],{"class":93,"line":38},[91,112689,105952],{"class":250},[91,112691,440],{"class":105},[91,112693,4566],{"class":250},[91,112695,296],{"class":153},[91,112697,112271],{"class":250},[91,112699,105341],{"class":105},[91,112701,6641],{"class":153},[91,112703,112278],{"class":250},[91,112705,327],{"class":105},[91,112707,112283],{"class":250},[91,112709,781],{"class":153},[91,112711,102484],{"class":105},[91,112713,12558],{"class":250},[91,112715,102484],{"class":105},[91,112717,257],{"class":250},[91,112719,112720,112722,112724,112726,112728,112730,112732,112734,112736,112738,112740,112742,112744,112746,112748],{"class":93,"line":1304},[91,112721,105952],{"class":250},[91,112723,466],{"class":105},[91,112725,4566],{"class":250},[91,112727,296],{"class":153},[91,112729,112271],{"class":250},[91,112731,105341],{"class":105},[91,112733,6641],{"class":153},[91,112735,112278],{"class":250},[91,112737,440],{"class":105},[91,112739,112283],{"class":250},[91,112741,781],{"class":153},[91,112743,102484],{"class":105},[91,112745,12558],{"class":250},[91,112747,102484],{"class":105},[91,112749,257],{"class":250},[21,112751,112752],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[217,112754,101789],{"id":101789},[82,112756,112757],{"className":30459,"code":112567,"language":30461,"meta":26,"style":26},[88,112758,112759],{"__ignoreMap":26},[91,112760,112761,112763,112765,112767,112769],{"class":93,"line":94},[91,112762,32028],{"class":153},[91,112764,111937],{"class":97},[91,112766,111940],{"class":250},[91,112768,1424],{"class":105},[91,112770,111945],{"class":250},[21,112772,112773,112774,112776,112777,82620,112779,28504],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[88,112775,79891],{}," 是 site 的名字，比如 ",[88,112778,111617],{},[88,112780,112040],{},[82,112782,112784],{"className":30459,"code":112783,"language":30461,"meta":26,"style":26},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[88,112785,112786],{"__ignoreMap":26},[91,112787,112788,112790,112792],{"class":93,"line":94},[91,112789,103715],{"class":250},[91,112791,296],{"class":153},[91,112793,111954],{"class":250},[21,112795,112796],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[82,112798,112800],{"className":30459,"code":112799,"language":30461,"meta":26,"style":26},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[88,112801,112802,112814],{"__ignoreMap":26},[91,112803,112804,112806,112808,112810,112812],{"class":93,"line":94},[91,112805,1655],{"class":153},[91,112807,103530],{"class":250},[91,112809,1159],{"class":153},[91,112811,4216],{"class":105},[91,112813,3862],{"class":250},[91,112815,112816,112818,112820,112822,112824,112826,112828,112830,112832,112834],{"class":93,"line":38},[91,112817,103976],{"class":153},[91,112819,103516],{"class":105},[91,112821,251],{"class":250},[91,112823,302],{"class":153},[91,112825,111979],{"class":101},[91,112827,1145],{"class":105},[91,112829,79891],{"class":250},[91,112831,1195],{"class":105},[91,112833,500],{"class":101},[91,112835,257],{"class":250},[21,112837,112838,112839,112842,112843,112845],{},"如果 site 没找到，就主动报错。",[88,112840,112841],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[88,112844,79891],{}," 的值放进字符串里。",[82,112847,112849],{"className":30459,"code":112848,"language":30461,"meta":26,"style":26},"return data.site_xpos[site_id].copy()\n",[88,112850,112851],{"__ignoreMap":26},[91,112852,112853,112855],{"class":93,"line":94},[91,112854,17169],{"class":153},[91,112856,111996],{"class":250},[21,112858,112859,112860,112862,112863,112866],{},"返回这个 site 的世界坐标。",[88,112861,103761],{}," 里的每一行都是一个 site 的 ",[88,112864,112865],{},"(x, y, z)"," 坐标。",[82,112868,112870],{"className":30459,"code":112869,"language":30461,"meta":26,"style":26},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[88,112871,112872],{"__ignoreMap":26},[91,112873,112874,112876,112878],{"class":93,"line":94},[91,112875,32028],{"class":153},[91,112877,112011],{"class":97},[91,112879,112014],{"class":250},[21,112881,112882],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[82,112884,112886],{"className":30459,"code":112885,"language":30461,"meta":26,"style":26},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[88,112887,112888,112900],{"__ignoreMap":26},[91,112889,112890,112892,112894,112896,112898],{"class":93,"line":94},[91,112891,111649],{"class":250},[91,112893,296],{"class":153},[91,112895,112024],{"class":250},[91,112897,111617],{"class":101},[91,112899,257],{"class":250},[91,112901,112902,112904,112906,112908,112910],{"class":93,"line":38},[91,112903,111659],{"class":250},[91,112905,296],{"class":153},[91,112907,112024],{"class":250},[91,112909,112040],{"class":101},[91,112911,257],{"class":250},[21,112913,112914],{},"分别读取末端点和目标点的世界坐标。",[82,112916,112917],{"className":30459,"code":112589,"language":30461,"meta":26,"style":26},[88,112918,112919],{"__ignoreMap":26},[91,112920,112921,112923],{"class":93,"line":94},[91,112922,17169],{"class":153},[91,112924,112049],{"class":250},[21,112926,112927],{},"把四部分拼成一个观测数组：",[82,112929,112932],{"className":112930,"code":112931,"language":5310,"meta":26},[5308],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[88,112933,112931],{"__ignoreMap":26},[82,112935,112937],{"className":30459,"code":112936,"language":30461,"meta":26,"style":26},"dist = np.linalg.norm(tip - target)\n",[88,112938,112939],{"__ignoreMap":26},[91,112940,112941,112943,112945,112947,112949],{"class":93,"line":94},[91,112942,111677],{"class":250},[91,112944,296],{"class":153},[91,112946,111682],{"class":250},[91,112948,781],{"class":153},[91,112950,111687],{"class":250},[21,112952,112953,112954,112957,112958,112961],{},"计算 tip 到 target 的距离。",[88,112955,112956],{},"tip - target"," 得到一个三维向量，",[88,112959,112960],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[21,112963,14756],{},[82,112965,112968],{"className":112966,"code":112967,"language":5310,"meta":26},[5308],"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",[88,112969,112967],{"__ignoreMap":26},[82,112971,112973],{"className":30459,"code":112972,"language":30461,"meta":26,"style":26},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[88,112974,112975],{"__ignoreMap":26},[91,112976,112977,112979,112981,112983,112985],{"class":93,"line":94},[91,112978,112624],{"class":250},[91,112980,296],{"class":153},[91,112982,112118],{"class":105},[91,112984,6641],{"class":153},[91,112986,112123],{"class":250},[21,112988,112989,112990,112993,112994,112997],{},"计算动作惩罚。",[88,112991,112992],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[88,112995,112996],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[82,112999,113001],{"className":30459,"code":113000,"language":30461,"meta":26,"style":26},"return float(-dist - control_cost)\n",[88,113002,113003],{"__ignoreMap":26},[91,113004,113005,113007,113009,113011,113013,113015,113017],{"class":93,"line":94},[91,113006,17169],{"class":153},[91,113008,109878],{"class":105},[91,113010,251],{"class":250},[91,113012,781],{"class":153},[91,113014,111677],{"class":250},[91,113016,781],{"class":153},[91,113018,112140],{"class":250},[21,113020,113021],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[82,113023,113024],{"className":30459,"code":110884,"language":30461,"meta":26,"style":26},[88,113025,113026],{"__ignoreMap":26},[91,113027,113028,113030,113032],{"class":93,"line":94},[91,113029,110891],{"class":250},[91,113031,296],{"class":153},[91,113033,104842],{"class":105},[21,113035,113036],{},"累计奖励变量，记录整个运行过程的总分。",[82,113038,113040],{"className":30459,"code":113039,"language":30461,"meta":26,"style":26},"for step in range(500):\n",[88,113041,113042],{"__ignoreMap":26},[91,113043,113044,113046,113048,113050,113052,113054,113056],{"class":93,"line":94},[91,113045,3148],{"class":153},[91,113047,31697],{"class":250},[91,113049,26165],{"class":153},[91,113051,32524],{"class":105},[91,113053,251],{"class":250},[91,113055,65155],{"class":105},[91,113057,30867],{"class":250},[21,113059,113060],{},"运行 500 个控制步。",[82,113062,113063],{"className":30459,"code":104624,"language":30461,"meta":26,"style":26},[88,113064,113065],{"__ignoreMap":26},[91,113066,113067],{"class":93,"line":94},[91,113068,104624],{"class":250},[21,113070,113071,113072,101099,113074,113076],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[88,113073,103312],{},[88,113075,103315],{}," 是当前状态下的坐标。",[82,113078,113080],{"className":30459,"code":113079,"language":30461,"meta":26,"style":26},"error = target - tip\n",[88,113081,113082],{"__ignoreMap":26},[91,113083,113084,113086,113088,113090,113092],{"class":93,"line":94},[91,113085,112677],{"class":250},[91,113087,296],{"class":153},[91,113089,112249],{"class":250},[91,113091,781],{"class":153},[91,113093,112254],{"class":250},[21,113095,113096],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[82,113098,113100],{"className":30459,"code":113099,"language":30461,"meta":26,"style":26},"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",[88,113101,113102,113134],{"__ignoreMap":26},[91,113103,113104,113106,113108,113110,113112,113114,113116,113118,113120,113122,113124,113126,113128,113130,113132],{"class":93,"line":94},[91,113105,105952],{"class":250},[91,113107,440],{"class":105},[91,113109,4566],{"class":250},[91,113111,296],{"class":153},[91,113113,112271],{"class":250},[91,113115,105341],{"class":105},[91,113117,6641],{"class":153},[91,113119,112278],{"class":250},[91,113121,327],{"class":105},[91,113123,112283],{"class":250},[91,113125,781],{"class":153},[91,113127,102484],{"class":105},[91,113129,12558],{"class":250},[91,113131,102484],{"class":105},[91,113133,257],{"class":250},[91,113135,113136,113138,113140,113142,113144,113146,113148,113150,113152,113154,113156,113158,113160,113162,113164],{"class":93,"line":38},[91,113137,105952],{"class":250},[91,113139,466],{"class":105},[91,113141,4566],{"class":250},[91,113143,296],{"class":153},[91,113145,112271],{"class":250},[91,113147,105341],{"class":105},[91,113149,6641],{"class":153},[91,113151,112278],{"class":250},[91,113153,440],{"class":105},[91,113155,112283],{"class":250},[91,113157,781],{"class":153},[91,113159,102484],{"class":105},[91,113161,12558],{"class":250},[91,113163,102484],{"class":105},[91,113165,257],{"class":250},[21,113167,113168,113169,113172],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[88,113170,113171],{},"error -> ctrl -> step"," 的流程。",[82,113174,113175],{"className":30459,"code":104586,"language":30461,"meta":26,"style":26},[88,113176,113177],{"__ignoreMap":26},[91,113178,113179],{"class":93,"line":94},[91,113180,104586],{"class":250},[21,113182,113183],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[82,113185,113187],{"className":30459,"code":113186,"language":30461,"meta":26,"style":26},"obs = get_obs(model, data)\n",[88,113188,113189],{"__ignoreMap":26},[91,113190,113191,113193,113195],{"class":93,"line":94},[91,113192,110935],{"class":250},[91,113194,296],{"class":153},[91,113196,112372],{"class":250},[21,113198,113199,113200,113203],{},"读取最新观测。后面打印 ",[88,113201,113202],{},"obs.shape[0]","，用来确认观测维度是 10。",[190,113205,102397],{"id":102396},[21,113207,113208],{},"观测维度为:",[82,113210,113213],{"className":113211,"code":113212,"language":5310,"meta":26},[5308],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[88,113214,113212],{"__ignoreMap":26},[21,113216,113217],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[21,113219,113220],{},"程序每 100 步打印：",[82,113222,113225],{"className":113223,"code":113224,"language":5310,"meta":26},[5308],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[88,113226,113224],{"__ignoreMap":26},[21,113228,113229,113230,113232],{},"如果控制有效，你应该看到最终 ",[88,113231,103312],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[190,113234,102429],{"id":102428},[14,113236,113237,113240,113243,113249,113255,113262,113272],{},[17,113238,113239],{},"修改目标点位置。",[17,113241,113242],{},"重新运行，观察最终 tip 是否变化。",[17,113244,113245,113246,113248],{},"把 gravity 改成 ",[88,113247,102670],{},"，观察控制是否变差。",[17,113250,111262,113251,111266,113253,28504],{},[88,113252,102239],{},[88,113254,327],{},[17,113256,102492,113257,102495,113259,113261],{},[88,113258,110677],{},[88,113260,107388],{},"，观察机械臂是否更难移动。",[17,113263,102492,113264,82611,113266,102495,113268,113271],{},[88,113265,103315],{},[88,113267,104227],{},[88,113269,113270],{},"0.2 0 0.6","，观察 reward 和 final tip。",[17,113273,113274],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[190,113276,102534],{"id":102533},[217,113278,113280],{"id":113279},"site-not-found",[88,113281,113282],{},"site not found",[21,113284,113285,113286,101099,113289,28504],{},"检查 XML 中是否有 ",[88,113287,113288],{},"site name=\"tip\"",[88,113290,113291],{},"site name=\"target\"",[217,113293,113294],{"id":113294},"机械臂完全不动",[21,113296,102604],{},[14,113298,113299,113304,113307,113312],{},[17,113300,113301,113303],{},[88,113302,102239],{}," 是否为 2",[17,113305,113306],{},"actuator 是否引用正确 joint",[17,113308,113309,113311],{},[88,113310,101157],{}," 是否被赋值",[17,113313,113314,113315],{},"是否执行了 ",[88,113316,100766],{},[217,113318,113319],{"id":113319},"控制效果不好",[21,113321,113322],{},"正常。本章重点不是控制器最优，而是任务结构:",[82,113324,113327],{"className":113325,"code":113326,"language":5310,"meta":26},[5308],"obs → action → mj_step → reward → next_obs\n",[88,113328,113326],{"__ignoreMap":26},[217,113330,113332],{"id":113331},"tip-坐标不变化","tip 坐标不变化",[21,113334,102656],{},[14,113336,113337,113342,113350,113359],{},[17,113338,113339,113340,28504],{},"是否每步调用了 ",[88,113341,100766],{},[17,113343,113344,113345,101099,113347,28504],{},"是否写入了 ",[88,113346,106207],{},[88,113348,113349],{},"data.ctrl[1]",[17,113351,113352,113353,461,113356,28504],{},"actuator 是否正确引用 ",[88,113354,113355],{},"joint1",[88,113357,113358],{},"joint2",[17,113360,113361],{},"控制输入是否太小。",[217,113363,113364],{"id":113364},"目标点不会动",[21,113366,113367],{},"本章的 target 是固定 site：",[82,113369,113371],{"className":53148,"code":113370,"language":53150,"meta":26,"style":26},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[88,113372,113373],{"__ignoreMap":26},[91,113374,113375,113377,113379,113381,113383,113385,113387,113389,113392],{"class":93,"line":94},[91,113376,1159],{"class":250},[91,113378,103291],{"class":51381},[91,113380,15043],{"class":97},[91,113382,296],{"class":250},[91,113384,112040],{"class":101},[91,113386,101187],{"class":97},[91,113388,296],{"class":250},[91,113390,113391],{"class":101},"\"0.5 0 0.4\"",[91,113393,113394],{"class":250}," ...\u002F>\n",[21,113396,113397,113398,113400],{},"它直接挂在 ",[88,113399,101922],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[217,113402,113403],{"id":113403},"机械臂不像真实机械臂",[21,113405,113406],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[190,113408,102688],{"id":102687},[21,113410,113411],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[21,113413,113414],{},"核心公式：",[82,113416,113419],{"className":113417,"code":113418,"language":5310,"meta":26},[5308],"distance = ||tip - target||\nreward = -distance - action_cost\n",[88,113420,113418],{"__ignoreMap":26},[21,113422,113423],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[168,113425,113426],{},"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":26,"searchDepth":38,"depth":38,"links":113428},[113429,113430,113431,113436,113440,113441,113442,113450],{"id":100727,"depth":38,"text":100728},{"id":100850,"depth":38,"text":100851},{"id":101125,"depth":38,"text":101126,"children":113432},[113433,113434,113435],{"id":111632,"depth":1304,"text":111633},{"id":111708,"depth":1304,"text":111708},{"id":111738,"depth":1304,"text":111739},{"id":101333,"depth":38,"text":101334,"children":113437},[113438,113439],{"id":101653,"depth":1304,"text":101653},{"id":101789,"depth":1304,"text":101789},{"id":102396,"depth":38,"text":102397},{"id":102428,"depth":38,"text":102429},{"id":102533,"depth":38,"text":102534,"children":113443},[113444,113445,113446,113447,113448,113449],{"id":113279,"depth":1304,"text":113282},{"id":113294,"depth":1304,"text":113294},{"id":113319,"depth":1304,"text":113319},{"id":113331,"depth":1304,"text":113332},{"id":113364,"depth":1304,"text":113364},{"id":113403,"depth":1304,"text":113403},{"id":102687,"depth":38,"text":102688},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111436,"description":26},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113457,"title":113458,"body":113459,"description":26,"extension":173,"meta":116921,"navigation":175,"path":116922,"seo":116923,"stem":116924,"__hash__":116925},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113460,"toc":116892},[113461,113464,113466,113469,113472,113497,113500,113506,113509,113515,113517,113519,113543,113545,113563,113565,113608,113610,113637,113639,113642,113694,113697,113703,113712,113715,113753,113756,113795,113798,113806,113813,113816,113822,113824,113878,113885,113930,113933,113937,113953,113963,113965,115226,115228,115240,115242,115253,115255,115258,115279,115282,115285,115318,115324,115327,115360,115363,115366,115407,115412,115426,115429,115442,115447,115470,115472,115487,115497,115512,115519,115539,115554,115572,115575,115592,115600,115616,115622,115654,115667,115699,115709,115744,115758,115804,115818,115860,115871,115884,115890,115923,115926,115953,115963,116003,116013,116030,116037,116055,116058,116099,116112,116127,116130,116153,116156,116168,116171,116190,116195,116216,116219,116234,116237,116271,116283,116298,116301,116326,116329,116348,116351,116383,116386,116410,116416,116446,116453,116466,116469,116471,116473,116479,116482,116485,116497,116500,116502,116556,116558,116562,116568,116577,116580,116587,116589,116612,116615,116619,116621,116639,116645,116647,116680,116683,116689,116693,116696,116716,116721,116725,116732,116752,116757,116761,116764,116784,116787,116873,116877,116880,116886,116889],[10,113462,113458],{"id":113463},"_8gymnasium-风格强化学习接口基础",[190,113465,100728],{"id":100727},[21,113467,113468],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[21,113470,113471],{},"你将实现:",[82,113473,113475],{"className":30459,"code":113474,"language":30461,"meta":26,"style":26},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[88,113476,113477,113487],{"__ignoreMap":26},[91,113478,113479,113482,113484],{"class":93,"line":94},[91,113480,113481],{"class":250},"obs, info ",[91,113483,296],{"class":153},[91,113485,113486],{"class":250}," env.reset()\n",[91,113488,113489,113492,113494],{"class":93,"line":38},[91,113490,113491],{"class":250},"obs, reward, terminated, truncated, info ",[91,113493,296],{"class":153},[91,113495,113496],{"class":250}," env.step(action)\n",[21,113498,113499],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[21,113501,113502,113503,113505],{},"前面章节的代码都是“脚本式”的：在 ",[88,113504,102376],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[21,113507,113508],{},"可以先记住 Gymnasium 环境的核心交互：",[82,113510,113513],{"className":113511,"code":113512,"language":5310,"meta":26},[5308],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[88,113514,113512],{"__ignoreMap":26},[190,113516,100851],{"id":100850},[21,113518,100854],{},[82,113520,113521],{"className":84,"code":104469,"language":86,"meta":26,"style":26},[88,113522,113523],{"__ignoreMap":26},[91,113524,113525,113527,113529,113531,113533,113535,113537,113539,113541],{"class":93,"line":94},[91,113526,24699],{"class":97},[91,113528,26437],{"class":101},[91,113530,23956],{"class":101},[91,113532,26522],{"class":105},[91,113534,104484],{"class":101},[91,113536,100879],{"class":101},[91,113538,102582],{"class":101},[91,113540,100895],{"class":101},[91,113542,104493],{"class":101},[21,113544,102900],{},[82,113546,113548],{"className":84,"code":113547,"language":86,"meta":26,"style":26},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[88,113549,113550],{"__ignoreMap":26},[91,113551,113552,113554,113556,113558,113560],{"class":93,"line":94},[91,113553,23953],{"class":97},[91,113555,23956],{"class":101},[91,113557,101011],{"class":101},[91,113559,107792],{"class":101},[91,113561,113562],{"class":101}," gymnasium\n",[21,113564,102917],{},[82,113566,113568],{"className":84,"code":113567,"language":86,"meta":26,"style":26},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[88,113569,113570,113587,113596],{"__ignoreMap":26},[91,113571,113572,113574,113576,113578,113581,113583,113585],{"class":93,"line":94},[91,113573,30411],{"class":97},[91,113575,29295],{"class":101},[91,113577,25237],{"class":105},[91,113579,113580],{"class":101}," mujoco-gym-api",[91,113582,101056],{"class":101},[91,113584,101059],{"class":105},[91,113586,101062],{"class":105},[91,113588,113589,113591,113593],{"class":93,"line":38},[91,113590,30411],{"class":97},[91,113592,101069],{"class":101},[91,113594,113595],{"class":101}," mujoco-gym-api\n",[91,113597,113598,113600,113602,113604,113606],{"class":93,"line":1304},[91,113599,23953],{"class":97},[91,113601,23956],{"class":101},[91,113603,101011],{"class":101},[91,113605,107792],{"class":101},[91,113607,113562],{"class":101},[21,113609,101085],{},[14,113611,113612,113622,113625,113631],{},[17,113613,113614,113615,113618,113619,28504],{},"本章使用 ",[88,113616,113617],{},"gymnasium","，不是旧版 ",[88,113620,113621],{},"gym",[17,113623,113624],{},"Gymnasium API 与旧 Gym API 有差异。",[17,113626,113627,113628,28504],{},"旧 Gym 常见返回值是 4 个: ",[88,113629,113630],{},"obs, reward, done, info",[17,113632,113633,113634,28504],{},"Gymnasium 返回值是 5 个: ",[88,113635,113636],{},"obs, reward, terminated, truncated, info",[190,113638,101126],{"id":101125},[21,113640,113641],{},"强化学习环境接口包含:",[386,113643,113644,113653],{},[389,113645,113646],{},[392,113647,113648,113651],{},[395,113649,113650],{"align":23860},"方法",[395,113652,102777],{"align":23860},[433,113654,113655,113665,113675,113685],{},[392,113656,113657,113662],{},[438,113658,113659],{"align":23860},[88,113660,113661],{},"reset()",[438,113663,113664],{"align":23860},"重置环境",[392,113666,113667,113672],{},[438,113668,113669],{"align":23860},[88,113670,113671],{},"step(action)",[438,113673,113674],{"align":23860},"执行动作",[392,113676,113677,113682],{},[438,113678,113679],{"align":23860},[88,113680,113681],{},"observation_space",[438,113683,113684],{"align":23860},"观测空间",[392,113686,113687,113692],{},[438,113688,113689],{"align":23860},[88,113690,113691],{},"action_space",[438,113693,23778],{"align":23860},[21,113695,113696],{},"一个最小环境需要完成:",[82,113698,113701],{"className":113699,"code":113700,"language":5310,"meta":26},[5308],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[88,113702,113700],{"__ignoreMap":26},[217,113704,113706,101099,113709,104719],{"id":113705},"terminated-和-truncated-的区别",[88,113707,113708],{},"terminated",[88,113710,113711],{},"truncated",[21,113713,113714],{},"Gymnasium 把“结束”拆成两个概念：",[386,113716,113717,113727],{},[389,113718,113719],{},[392,113720,113721,113723,113725],{},[395,113722,104655],{"align":23860},[395,113724,100781],{"align":23860},[395,113726,21310],{"align":23860},[433,113728,113729,113741],{},[392,113730,113731,113735,113738],{},[438,113732,113733],{"align":23860},[88,113734,113708],{},[438,113736,113737],{"align":23860},"任务自然结束",[438,113739,113740],{"align":23860},"机械臂到达目标、机器人摔倒",[392,113742,113743,113747,113750],{},[438,113744,113745],{"align":23860},[88,113746,113711],{},[438,113748,113749],{"align":23860},"因外部限制截断",[438,113751,113752],{"align":23860},"达到最大步数、时间限制",[21,113754,113755],{},"本章中：",[82,113757,113759],{"className":30459,"code":113758,"language":30461,"meta":26,"style":26},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[88,113760,113761,113776],{"__ignoreMap":26},[91,113762,113763,113766,113768,113771,113773],{"class":93,"line":94},[91,113764,113765],{"class":250},"terminated ",[91,113767,296],{"class":153},[91,113769,113770],{"class":250}," dist ",[91,113772,1159],{"class":153},[91,113774,113775],{"class":105}," 0.05\n",[91,113777,113778,113781,113783,113785,113788,113790,113792],{"class":93,"line":38},[91,113779,113780],{"class":250},"truncated ",[91,113782,296],{"class":153},[91,113784,38954],{"class":105},[91,113786,113787],{"class":250},".steps ",[91,113789,1834],{"class":153},[91,113791,38954],{"class":105},[91,113793,113794],{"class":250},".max_steps\n",[21,113796,113797],{},"也就是：",[14,113799,113800,113803],{},[17,113801,113802],{},"末端距离目标小于 0.05，任务成功结束。",[17,113804,113805],{},"步数超过上限，episode 被截断。",[217,113807,113809,101099,113811],{"id":113808},"observation_space-和-action_space",[88,113810,113681],{},[88,113812,113691],{},[21,113814,113815],{},"这两个对象告诉算法：",[82,113817,113820],{"className":113818,"code":113819,"language":5310,"meta":26},[5308],"观测长什么样\n动作允许多大\n",[88,113821,113819],{"__ignoreMap":26},[21,113823,14756],{},[82,113825,113827],{"className":30459,"code":113826,"language":30461,"meta":26,"style":26},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[88,113828,113829],{"__ignoreMap":26},[91,113830,113831,113833,113836,113838,113841,113844,113847,113849,113851,113854,113856,113858,113860,113862,113864,113866,113868,113871,113873,113875],{"class":93,"line":94},[91,113832,30904],{"class":105},[91,113834,113835],{"class":250},".action_space ",[91,113837,296],{"class":153},[91,113839,113840],{"class":250}," spaces.Box(",[91,113842,113843],{"class":5339},"low",[91,113845,113846],{"class":153},"=-",[91,113848,102484],{"class":105},[91,113850,12558],{"class":250},[91,113852,113853],{"class":5339},"high",[91,113855,296],{"class":153},[91,113857,102484],{"class":105},[91,113859,12558],{"class":250},[91,113861,96044],{"class":5339},[91,113863,296],{"class":153},[91,113865,251],{"class":250},[91,113867,327],{"class":105},[91,113869,113870],{"class":250},",), ",[91,113872,93581],{"class":5339},[91,113874,296],{"class":153},[91,113876,113877],{"class":250},"np.float32)\n",[21,113879,113880,113881,113884],{},"表示动作是 2 维数组，每个值都在 ",[88,113882,113883],{},"[-1, 1]"," 范围内。",[82,113886,113888],{"className":30459,"code":113887,"language":30461,"meta":26,"style":26},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[88,113889,113890],{"__ignoreMap":26},[91,113891,113892,113894,113897,113899,113901,113903,113905,113908,113910,113912,113914,113916,113918,113920,113922,113924,113926,113928],{"class":93,"line":94},[91,113893,30904],{"class":105},[91,113895,113896],{"class":250},".observation_space ",[91,113898,296],{"class":153},[91,113900,113840],{"class":250},[91,113902,113843],{"class":5339},[91,113904,113846],{"class":153},[91,113906,113907],{"class":250},"np.inf, ",[91,113909,113853],{"class":5339},[91,113911,296],{"class":153},[91,113913,113907],{"class":250},[91,113915,96044],{"class":5339},[91,113917,296],{"class":153},[91,113919,251],{"class":250},[91,113921,695],{"class":105},[91,113923,113870],{"class":250},[91,113925,93581],{"class":5339},[91,113927,296],{"class":153},[91,113929,113877],{"class":250},[21,113931,113932],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[217,113934,113936],{"id":113935},"frame_skip-是什么","frame_skip 是什么",[82,113938,113940],{"className":30459,"code":113939,"language":30461,"meta":26,"style":26},"self.frame_skip = 5\n",[88,113941,113942],{"__ignoreMap":26},[91,113943,113944,113946,113949,113951],{"class":93,"line":94},[91,113945,30904],{"class":105},[91,113947,113948],{"class":250},".frame_skip ",[91,113950,296],{"class":153},[91,113952,54508],{"class":105},[21,113954,113955,113956,113959,113960,113962],{},"表示外部调用一次 ",[88,113957,113958],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[88,113961,101296],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[190,113964,101334],{"id":101333},[82,113966,113968],{"className":30459,"code":113967,"language":30461,"meta":26,"style":26},"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",[88,113969,113970,113982,113988,113998,114009,114013,114017,114025,114030,114034,114038,114042,114046,114050,114054,114058,114063,114067,114071,114075,114080,114084,114088,114092,114096,114100,114104,114108,114112,114116,114120,114124,114128,114132,114150,114165,114169,114182,114192,114207,114224,114228,114249,114268,114293,114307,114311,114321,114333,114343,114347,114389,114427,114431,114441,114457,114472,114491,114498,114502,114515,114530,114545,114558,114577,114593,114597,114638,114653,114668,114672,114711,114722,114735,114739,114749,114758,114762,114772,114787,114805,114809,114820,114837,114850,114854,114864,114868,114879,114890,114894,114908,114922,114938,114942,114955,114972,114987,114994,114998,115002,115014,115024,115042,115054,115066,115070,115078,115094,115103,115112,115120,115162,115175,115180,115184,115202,115206,115210,115222],{"__ignoreMap":26},[91,113971,113972,113974,113977,113979],{"class":93,"line":94},[91,113973,30473],{"class":153},[91,113975,113976],{"class":250}," gymnasium ",[91,113978,31464],{"class":153},[91,113980,113981],{"class":250}," gym\n",[91,113983,113984,113986],{"class":93,"line":38},[91,113985,30473],{"class":153},[91,113987,101382],{"class":250},[91,113989,113990,113992,113994,113996],{"class":93,"line":1304},[91,113991,30473],{"class":153},[91,113993,31461],{"class":250},[91,113995,31464],{"class":153},[91,113997,31467],{"class":250},[91,113999,114000,114002,114004,114006],{"class":93,"line":1319},[91,114001,30818],{"class":153},[91,114003,113976],{"class":250},[91,114005,30473],{"class":153},[91,114007,114008],{"class":250}," spaces\n",[91,114010,114011],{"class":93,"line":1325},[91,114012,2523],{"emptyLinePlaceholder":175},[91,114014,114015],{"class":93,"line":1339},[91,114016,2523],{"emptyLinePlaceholder":175},[91,114018,114019,114021,114023],{"class":93,"line":1345},[91,114020,101395],{"class":105},[91,114022,13687],{"class":153},[91,114024,101400],{"class":101},[91,114026,114027],{"class":93,"line":1436},[91,114028,114029],{"class":101},"\u003Cmujoco model=\"gym_reacher\">\n",[91,114031,114032],{"class":93,"line":1442},[91,114033,111819],{"class":101},[91,114035,114036],{"class":93,"line":1454},[91,114037,2523],{"emptyLinePlaceholder":175},[91,114039,114040],{"class":93,"line":1736},[91,114041,101419],{"class":101},[91,114043,114044],{"class":93,"line":1741},[91,114045,111837],{"class":101},[91,114047,114048],{"class":93,"line":1747},[91,114049,2523],{"emptyLinePlaceholder":175},[91,114051,114052],{"class":93,"line":1752},[91,114053,111846],{"class":101},[91,114055,114056],{"class":93,"line":1766},[91,114057,111851],{"class":101},[91,114059,114060],{"class":93,"line":1771},[91,114061,114062],{"class":101},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[91,114064,114065],{"class":93,"line":1777},[91,114066,2523],{"emptyLinePlaceholder":175},[91,114068,114069],{"class":93,"line":1798},[91,114070,111865],{"class":101},[91,114072,114073],{"class":93,"line":1803},[91,114074,111870],{"class":101},[91,114076,114077],{"class":93,"line":1817},[91,114078,114079],{"class":101},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[91,114081,114082],{"class":93,"line":1822},[91,114083,111880],{"class":101},[91,114085,114086],{"class":93,"line":1851},[91,114087,106519],{"class":101},[91,114089,114090],{"class":93,"line":1856},[91,114091,101448],{"class":101},[91,114093,114094],{"class":93,"line":1873},[91,114095,101453],{"class":101},[91,114097,114098],{"class":93,"line":1878},[91,114099,2523],{"emptyLinePlaceholder":175},[91,114101,114102],{"class":93,"line":1883},[91,114103,106536],{"class":101},[91,114105,114106],{"class":93,"line":1888},[91,114107,111905],{"class":101},[91,114109,114110],{"class":93,"line":1902},[91,114111,111910],{"class":101},[91,114113,114114],{"class":93,"line":1907},[91,114115,106546],{"class":101},[91,114117,114118],{"class":93,"line":2700},[91,114119,101458],{"class":101},[91,114121,114122],{"class":93,"line":2714},[91,114123,95779],{"class":101},[91,114125,114126],{"class":93,"line":2722},[91,114127,2523],{"emptyLinePlaceholder":175},[91,114129,114130],{"class":93,"line":2727},[91,114131,2523],{"emptyLinePlaceholder":175},[91,114133,114134,114136,114139,114141,114143,114145,114148],{"class":93,"line":2733},[91,114135,14817],{"class":153},[91,114137,114138],{"class":97}," ReacherEnv",[91,114140,251],{"class":250},[91,114142,113621],{"class":97},[91,114144,807],{"class":250},[91,114146,114147],{"class":97},"Env",[91,114149,30867],{"class":250},[91,114151,114152,114155,114157,114159,114162],{"class":93,"line":2739},[91,114153,114154],{"class":250},"    metadata ",[91,114156,296],{"class":153},[91,114158,4571],{"class":250},[91,114160,114161],{"class":101},"\"render_modes\"",[91,114163,114164],{"class":250},": []}\n",[91,114166,114167],{"class":93,"line":2744},[91,114168,2523],{"emptyLinePlaceholder":175},[91,114170,114171,114173,114175,114178,114180],{"class":93,"line":8071},[91,114172,30882],{"class":153},[91,114174,30885],{"class":105},[91,114176,114177],{"class":250},"(self) -> ",[91,114179,95767],{"class":105},[91,114181,3862],{"class":250},[91,114183,114184,114186,114188,114190],{"class":93,"line":8095},[91,114185,30898],{"class":105},[91,114187,17384],{"class":250},[91,114189,30910],{"class":105},[91,114191,2099],{"class":250},[91,114193,114194,114196,114199,114201,114203,114205],{"class":93,"line":8100},[91,114195,30926],{"class":105},[91,114197,114198],{"class":250},".model ",[91,114200,296],{"class":153},[91,114202,101493],{"class":250},[91,114204,101395],{"class":105},[91,114206,257],{"class":250},[91,114208,114209,114211,114214,114216,114219,114221],{"class":93,"line":8106},[91,114210,30926],{"class":105},[91,114212,114213],{"class":250},".data ",[91,114215,296],{"class":153},[91,114217,114218],{"class":250}," mujoco.MjData(",[91,114220,30904],{"class":105},[91,114222,114223],{"class":250},".model)\n",[91,114225,114226],{"class":93,"line":8133},[91,114227,2523],{"emptyLinePlaceholder":175},[91,114229,114230,114232,114235,114237,114240,114242,114245,114247],{"class":93,"line":8138},[91,114231,30926],{"class":105},[91,114233,114234],{"class":250},".tip_site_id ",[91,114236,296],{"class":153},[91,114238,114239],{"class":250}," mujoco.mj_name2id(",[91,114241,30904],{"class":105},[91,114243,114244],{"class":250},".model, mujoco.mjtObj.mjOBJ_SITE, ",[91,114246,111617],{"class":101},[91,114248,257],{"class":250},[91,114250,114251,114253,114256,114258,114260,114262,114264,114266],{"class":93,"line":8144},[91,114252,30926],{"class":105},[91,114254,114255],{"class":250},".target_site_id ",[91,114257,296],{"class":153},[91,114259,114239],{"class":250},[91,114261,30904],{"class":105},[91,114263,114244],{"class":250},[91,114265,112040],{"class":101},[91,114267,257],{"class":250},[91,114269,114270,114272,114274,114276,114278,114280,114283,114285,114287,114289,114291],{"class":93,"line":8156},[91,114271,2620],{"class":153},[91,114273,38954],{"class":105},[91,114275,114234],{"class":250},[91,114277,1159],{"class":153},[91,114279,4216],{"class":105},[91,114281,114282],{"class":153}," or",[91,114284,38954],{"class":105},[91,114286,114255],{"class":250},[91,114288,1159],{"class":153},[91,114290,4216],{"class":105},[91,114292,3862],{"class":250},[91,114294,114295,114298,114300,114302,114305],{"class":93,"line":8168},[91,114296,114297],{"class":153},"            raise",[91,114299,103516],{"class":105},[91,114301,251],{"class":250},[91,114303,114304],{"class":101},"\"required sites not found\"",[91,114306,257],{"class":250},[91,114308,114309],{"class":93,"line":8180},[91,114310,2523],{"emptyLinePlaceholder":175},[91,114312,114313,114315,114317,114319],{"class":93,"line":9839},[91,114314,30926],{"class":105},[91,114316,113948],{"class":250},[91,114318,296],{"class":153},[91,114320,54508],{"class":105},[91,114322,114323,114325,114328,114330],{"class":93,"line":9864},[91,114324,30926],{"class":105},[91,114326,114327],{"class":250},".max_steps ",[91,114329,296],{"class":153},[91,114331,114332],{"class":105}," 200\n",[91,114334,114335,114337,114339,114341],{"class":93,"line":9887},[91,114336,30926],{"class":105},[91,114338,113787],{"class":250},[91,114340,296],{"class":153},[91,114342,47414],{"class":105},[91,114344,114345],{"class":93,"line":9911},[91,114346,2523],{"emptyLinePlaceholder":175},[91,114348,114349,114351,114353,114355,114357,114359,114361,114363,114365,114367,114369,114371,114373,114375,114377,114379,114381,114383,114385,114387],{"class":93,"line":9916},[91,114350,30926],{"class":105},[91,114352,113835],{"class":250},[91,114354,296],{"class":153},[91,114356,113840],{"class":250},[91,114358,113843],{"class":5339},[91,114360,113846],{"class":153},[91,114362,102484],{"class":105},[91,114364,12558],{"class":250},[91,114366,113853],{"class":5339},[91,114368,296],{"class":153},[91,114370,102484],{"class":105},[91,114372,12558],{"class":250},[91,114374,96044],{"class":5339},[91,114376,296],{"class":153},[91,114378,251],{"class":250},[91,114380,327],{"class":105},[91,114382,113870],{"class":250},[91,114384,93581],{"class":5339},[91,114386,296],{"class":153},[91,114388,113877],{"class":250},[91,114390,114391,114393,114395,114397,114399,114401,114403,114405,114407,114409,114411,114413,114415,114417,114419,114421,114423,114425],{"class":93,"line":9921},[91,114392,30926],{"class":105},[91,114394,113896],{"class":250},[91,114396,296],{"class":153},[91,114398,113840],{"class":250},[91,114400,113843],{"class":5339},[91,114402,113846],{"class":153},[91,114404,113907],{"class":250},[91,114406,113853],{"class":5339},[91,114408,296],{"class":153},[91,114410,113907],{"class":250},[91,114412,96044],{"class":5339},[91,114414,296],{"class":153},[91,114416,251],{"class":250},[91,114418,695],{"class":105},[91,114420,113870],{"class":250},[91,114422,93581],{"class":5339},[91,114424,296],{"class":153},[91,114426,113877],{"class":250},[91,114428,114429],{"class":93,"line":9926},[91,114430,2523],{"emptyLinePlaceholder":175},[91,114432,114433,114435,114438],{"class":93,"line":9935},[91,114434,30882],{"class":153},[91,114436,114437],{"class":97}," _get_obs",[91,114439,114440],{"class":250},"(self) -> np.ndarray:\n",[91,114442,114443,114445,114447,114449,114452,114454],{"class":93,"line":9940},[91,114444,112218],{"class":250},[91,114446,296],{"class":153},[91,114448,38954],{"class":105},[91,114450,114451],{"class":250},".data.site_xpos[",[91,114453,30904],{"class":105},[91,114455,114456],{"class":250},".tip_site_id].copy()\n",[91,114458,114459,114461,114463,114465,114467,114469],{"class":93,"line":9946},[91,114460,112231],{"class":250},[91,114462,296],{"class":153},[91,114464,38954],{"class":105},[91,114466,114451],{"class":250},[91,114468,30904],{"class":105},[91,114470,114471],{"class":250},".target_site_id].copy()\n",[91,114473,114474,114476,114478,114481,114483,114486,114488],{"class":93,"line":9967},[91,114475,110263],{"class":250},[91,114477,296],{"class":153},[91,114479,114480],{"class":250}," np.concatenate([",[91,114482,30904],{"class":105},[91,114484,114485],{"class":250},".data.qpos.copy(), ",[91,114487,30904],{"class":105},[91,114489,114490],{"class":250},".data.qvel.copy(), tip, target])\n",[91,114492,114493,114495],{"class":93,"line":9973},[91,114494,14875],{"class":153},[91,114496,114497],{"class":250}," obs.astype(np.float32)\n",[91,114499,114500],{"class":93,"line":9987},[91,114501,2523],{"emptyLinePlaceholder":175},[91,114503,114504,114506,114509,114511,114513],{"class":93,"line":9993},[91,114505,30882],{"class":153},[91,114507,114508],{"class":97}," _get_reward",[91,114510,114177],{"class":250},[91,114512,290],{"class":105},[91,114514,3862],{"class":250},[91,114516,114517,114519,114521,114523,114525,114527],{"class":93,"line":10020},[91,114518,112218],{"class":250},[91,114520,296],{"class":153},[91,114522,38954],{"class":105},[91,114524,114451],{"class":250},[91,114526,30904],{"class":105},[91,114528,114529],{"class":250},".tip_site_id]\n",[91,114531,114532,114534,114536,114538,114540,114542],{"class":93,"line":10029},[91,114533,112231],{"class":250},[91,114535,296],{"class":153},[91,114537,38954],{"class":105},[91,114539,114451],{"class":250},[91,114541,30904],{"class":105},[91,114543,114544],{"class":250},".target_site_id]\n",[91,114546,114547,114550,114552,114554,114556],{"class":93,"line":10035},[91,114548,114549],{"class":250},"        dist ",[91,114551,296],{"class":153},[91,114553,111682],{"class":250},[91,114555,781],{"class":153},[91,114557,111687],{"class":250},[91,114559,114560,114563,114565,114567,114569,114572,114574],{"class":93,"line":10043},[91,114561,114562],{"class":250},"        control_cost ",[91,114564,296],{"class":153},[91,114566,112118],{"class":105},[91,114568,6641],{"class":153},[91,114570,114571],{"class":250}," np.sum(np.square(",[91,114573,30904],{"class":105},[91,114575,114576],{"class":250},".data.ctrl))\n",[91,114578,114579,114581,114583,114585,114587,114589,114591],{"class":93,"line":10048},[91,114580,14875],{"class":153},[91,114582,109878],{"class":105},[91,114584,251],{"class":250},[91,114586,781],{"class":153},[91,114588,111677],{"class":250},[91,114590,781],{"class":153},[91,114592,112140],{"class":250},[91,114594,114595],{"class":93,"line":16727},[91,114596,2523],{"emptyLinePlaceholder":175},[91,114598,114599,114601,114604,114607,114609,114612,114614,114616,114618,114620,114622,114625,114628,114630,114632,114634,114636],{"class":93,"line":16733},[91,114600,30882],{"class":153},[91,114602,114603],{"class":97}," reset",[91,114605,114606],{"class":250},"(self, ",[91,114608,704],{"class":153},[91,114610,114611],{"class":250},", seed: ",[91,114613,254],{"class":105},[91,114615,154],{"class":153},[91,114617,39014],{"class":105},[91,114619,13687],{"class":153},[91,114621,39014],{"class":105},[91,114623,114624],{"class":250},", options: ",[91,114626,114627],{"class":105},"dict",[91,114629,154],{"class":153},[91,114631,39014],{"class":105},[91,114633,13687],{"class":153},[91,114635,39014],{"class":105},[91,114637,30867],{"class":250},[91,114639,114640,114642,114645,114648,114650],{"class":93,"line":16756},[91,114641,30898],{"class":105},[91,114643,114644],{"class":250},"().reset(",[91,114646,114647],{"class":5339},"seed",[91,114649,296],{"class":153},[91,114651,114652],{"class":250},"seed)\n",[91,114654,114655,114658,114660,114663,114665],{"class":93,"line":16762},[91,114656,114657],{"class":250},"        mujoco.mj_resetData(",[91,114659,30904],{"class":105},[91,114661,114662],{"class":250},".model, ",[91,114664,30904],{"class":105},[91,114666,114667],{"class":250},".data)\n",[91,114669,114670],{"class":93,"line":16785},[91,114671,2523],{"emptyLinePlaceholder":175},[91,114673,114674,114676,114679,114681,114683,114686,114688,114690,114692,114694,114696,114698,114700,114702,114704,114706,114708],{"class":93,"line":16799},[91,114675,30926],{"class":105},[91,114677,114678],{"class":250},".data.qpos[:] ",[91,114680,296],{"class":153},[91,114682,38954],{"class":105},[91,114684,114685],{"class":250},".np_random.uniform(",[91,114687,113843],{"class":5339},[91,114689,113846],{"class":153},[91,114691,86291],{"class":105},[91,114693,12558],{"class":250},[91,114695,113853],{"class":5339},[91,114697,296],{"class":153},[91,114699,86291],{"class":105},[91,114701,12558],{"class":250},[91,114703,31577],{"class":5339},[91,114705,296],{"class":153},[91,114707,30904],{"class":105},[91,114709,114710],{"class":250},".model.nq)\n",[91,114712,114713,114715,114718,114720],{"class":93,"line":16819},[91,114714,30926],{"class":105},[91,114716,114717],{"class":250},".data.qvel[:] ",[91,114719,296],{"class":153},[91,114721,104842],{"class":105},[91,114723,114724,114727,114729,114731,114733],{"class":93,"line":16825},[91,114725,114726],{"class":250},"        mujoco.mj_forward(",[91,114728,30904],{"class":105},[91,114730,114662],{"class":250},[91,114732,30904],{"class":105},[91,114734,114667],{"class":250},[91,114736,114737],{"class":93,"line":16836},[91,114738,2523],{"emptyLinePlaceholder":175},[91,114740,114741,114743,114745,114747],{"class":93,"line":16859},[91,114742,30926],{"class":105},[91,114744,113787],{"class":250},[91,114746,296],{"class":153},[91,114748,47414],{"class":105},[91,114750,114751,114753,114755],{"class":93,"line":16881},[91,114752,14875],{"class":153},[91,114754,38954],{"class":105},[91,114756,114757],{"class":250},"._get_obs(), {}\n",[91,114759,114760],{"class":93,"line":16886},[91,114761,2523],{"emptyLinePlaceholder":175},[91,114763,114764,114766,114769],{"class":93,"line":16892},[91,114765,30882],{"class":153},[91,114767,114768],{"class":97}," step",[91,114770,114771],{"class":250},"(self, action):\n",[91,114773,114774,114776,114778,114781,114783,114785],{"class":93,"line":16906},[91,114775,110303],{"class":250},[91,114777,296],{"class":153},[91,114779,114780],{"class":250}," np.asarray(action, ",[91,114782,93581],{"class":5339},[91,114784,296],{"class":153},[91,114786,113877],{"class":250},[91,114788,114789,114791,114793,114795,114797,114800,114802],{"class":93,"line":16919},[91,114790,110303],{"class":250},[91,114792,296],{"class":153},[91,114794,107528],{"class":250},[91,114796,30904],{"class":105},[91,114798,114799],{"class":250},".action_space.low, ",[91,114801,30904],{"class":105},[91,114803,114804],{"class":250},".action_space.high)\n",[91,114806,114807],{"class":93,"line":16924},[91,114808,2523],{"emptyLinePlaceholder":175},[91,114810,114811,114813,114816,114818],{"class":93,"line":16938},[91,114812,30926],{"class":105},[91,114814,114815],{"class":250},".data.ctrl[:] ",[91,114817,296],{"class":153},[91,114819,107551],{"class":250},[91,114821,114822,114824,114826,114828,114830,114832,114834],{"class":93,"line":16943},[91,114823,3526],{"class":153},[91,114825,101582],{"class":250},[91,114827,26165],{"class":153},[91,114829,32524],{"class":105},[91,114831,251],{"class":250},[91,114833,30904],{"class":105},[91,114835,114836],{"class":250},".frame_skip):\n",[91,114838,114839,114842,114844,114846,114848],{"class":93,"line":16949},[91,114840,114841],{"class":250},"            mujoco.mj_step(",[91,114843,30904],{"class":105},[91,114845,114662],{"class":250},[91,114847,30904],{"class":105},[91,114849,114667],{"class":250},[91,114851,114852],{"class":93,"line":16954},[91,114853,2523],{"emptyLinePlaceholder":175},[91,114855,114856,114858,114860,114862],{"class":93,"line":16968},[91,114857,30926],{"class":105},[91,114859,113787],{"class":250},[91,114861,9600],{"class":153},[91,114863,55780],{"class":105},[91,114865,114866],{"class":93,"line":16973},[91,114867,2523],{"emptyLinePlaceholder":175},[91,114869,114870,114872,114874,114876],{"class":93,"line":16978},[91,114871,110263],{"class":250},[91,114873,296],{"class":153},[91,114875,38954],{"class":105},[91,114877,114878],{"class":250},"._get_obs()\n",[91,114880,114881,114883,114885,114887],{"class":93,"line":16992},[91,114882,110368],{"class":250},[91,114884,296],{"class":153},[91,114886,38954],{"class":105},[91,114888,114889],{"class":250},"._get_reward()\n",[91,114891,114892],{"class":93,"line":17004},[91,114893,2523],{"emptyLinePlaceholder":175},[91,114895,114896,114898,114900,114902,114904,114906],{"class":93,"line":17009},[91,114897,112218],{"class":250},[91,114899,296],{"class":153},[91,114901,38954],{"class":105},[91,114903,114451],{"class":250},[91,114905,30904],{"class":105},[91,114907,114529],{"class":250},[91,114909,114910,114912,114914,114916,114918,114920],{"class":93,"line":17022},[91,114911,112231],{"class":250},[91,114913,296],{"class":153},[91,114915,38954],{"class":105},[91,114917,114451],{"class":250},[91,114919,30904],{"class":105},[91,114921,114544],{"class":250},[91,114923,114924,114926,114928,114930,114933,114935],{"class":93,"line":17027},[91,114925,114549],{"class":250},[91,114927,296],{"class":153},[91,114929,109878],{"class":105},[91,114931,114932],{"class":250},"(np.linalg.norm(tip ",[91,114934,781],{"class":153},[91,114936,114937],{"class":250}," target))\n",[91,114939,114940],{"class":93,"line":17032},[91,114941,2523],{"emptyLinePlaceholder":175},[91,114943,114944,114947,114949,114951,114953],{"class":93,"line":17037},[91,114945,114946],{"class":250},"        terminated ",[91,114948,296],{"class":153},[91,114950,113770],{"class":250},[91,114952,1159],{"class":153},[91,114954,113775],{"class":105},[91,114956,114957,114960,114962,114964,114966,114968,114970],{"class":93,"line":17050},[91,114958,114959],{"class":250},"        truncated ",[91,114961,296],{"class":153},[91,114963,38954],{"class":105},[91,114965,113787],{"class":250},[91,114967,1834],{"class":153},[91,114969,38954],{"class":105},[91,114971,113794],{"class":250},[91,114973,114974,114977,114979,114981,114984],{"class":93,"line":17055},[91,114975,114976],{"class":250},"        info ",[91,114978,296],{"class":153},[91,114980,4571],{"class":250},[91,114982,114983],{"class":101},"\"distance\"",[91,114985,114986],{"class":250},": dist}\n",[91,114988,114989,114991],{"class":93,"line":32714},[91,114990,14875],{"class":153},[91,114992,114993],{"class":250}," obs, reward, terminated, truncated, info\n",[91,114995,114996],{"class":93,"line":32720},[91,114997,2523],{"emptyLinePlaceholder":175},[91,114999,115000],{"class":93,"line":32726},[91,115001,2523],{"emptyLinePlaceholder":175},[91,115003,115004,115006,115008,115010,115012],{"class":93,"line":32732},[91,115005,32028],{"class":153},[91,115007,2096],{"class":97},[91,115009,101479],{"class":250},[91,115011,95767],{"class":105},[91,115013,3862],{"class":250},[91,115015,115016,115019,115021],{"class":93,"line":32738},[91,115017,115018],{"class":250},"    env ",[91,115020,296],{"class":153},[91,115022,115023],{"class":250}," ReacherEnv()\n",[91,115025,115026,115029,115031,115034,115036,115038,115040],{"class":93,"line":32749},[91,115027,115028],{"class":250},"    obs, info ",[91,115030,296],{"class":153},[91,115032,115033],{"class":250}," env.reset(",[91,115035,114647],{"class":5339},[91,115037,296],{"class":153},[91,115039,440],{"class":105},[91,115041,257],{"class":250},[91,115043,115044,115046,115048,115051],{"class":93,"line":32755},[91,115045,31380],{"class":105},[91,115047,251],{"class":250},[91,115049,115050],{"class":101},"\"initial obs shape:\"",[91,115052,115053],{"class":250},", obs.shape)\n",[91,115055,115056,115058,115060,115063],{"class":93,"line":32775},[91,115057,31380],{"class":105},[91,115059,251],{"class":250},[91,115061,115062],{"class":101},"\"initial info:\"",[91,115064,115065],{"class":250},", info)\n",[91,115067,115068],{"class":93,"line":32781},[91,115069,2523],{"emptyLinePlaceholder":175},[91,115071,115072,115074,115076],{"class":93,"line":32792},[91,115073,110234],{"class":250},[91,115075,296],{"class":153},[91,115077,104842],{"class":105},[91,115079,115080,115082,115084,115086,115088,115090,115092],{"class":93,"line":32798},[91,115081,3324],{"class":153},[91,115083,31697],{"class":250},[91,115085,26165],{"class":153},[91,115087,32524],{"class":105},[91,115089,251],{"class":250},[91,115091,949],{"class":105},[91,115093,30867],{"class":250},[91,115095,115096,115098,115100],{"class":93,"line":32804},[91,115097,110303],{"class":250},[91,115099,296],{"class":153},[91,115101,115102],{"class":250}," env.action_space.sample()\n",[91,115104,115105,115108,115110],{"class":93,"line":32810},[91,115106,115107],{"class":250},"        obs, reward, terminated, truncated, info ",[91,115109,296],{"class":153},[91,115111,113496],{"class":250},[91,115113,115114,115116,115118],{"class":93,"line":32816},[91,115115,110378],{"class":250},[91,115117,9600],{"class":153},[91,115119,110383],{"class":250},[91,115121,115122,115124,115126,115128,115130,115133,115135,115137,115140,115142,115144,115147,115149,115151,115154,115156,115158,115160],{"class":93,"line":32822},[91,115123,32532],{"class":105},[91,115125,251],{"class":250},[91,115127,110412],{"class":101},[91,115129,110415],{"class":250},[91,115131,115132],{"class":101},"\"reward:\"",[91,115134,12558],{"class":250},[91,115136,32099],{"class":105},[91,115138,115139],{"class":250},"(reward, ",[91,115141,321],{"class":105},[91,115143,110426],{"class":250},[91,115145,115146],{"class":101},"\"distance:\"",[91,115148,12558],{"class":250},[91,115150,32099],{"class":105},[91,115152,115153],{"class":250},"(info[",[91,115155,114983],{"class":101},[91,115157,112283],{"class":250},[91,115159,321],{"class":105},[91,115161,30578],{"class":250},[91,115163,115164,115166,115169,115172],{"class":93,"line":32828},[91,115165,2620],{"class":153},[91,115167,115168],{"class":250}," terminated ",[91,115170,115171],{"class":153},"or",[91,115173,115174],{"class":250}," truncated:\n",[91,115176,115177],{"class":93,"line":32834},[91,115178,115179],{"class":153},"            break\n",[91,115181,115182],{"class":93,"line":32854},[91,115183,2523],{"emptyLinePlaceholder":175},[91,115185,115186,115188,115190,115192,115194,115196,115198,115200],{"class":93,"line":32860},[91,115187,31380],{"class":105},[91,115189,251],{"class":250},[91,115191,110457],{"class":101},[91,115193,12558],{"class":250},[91,115195,32099],{"class":105},[91,115197,110464],{"class":250},[91,115199,321],{"class":105},[91,115201,30578],{"class":250},[91,115203,115204],{"class":93,"line":32876},[91,115205,2523],{"emptyLinePlaceholder":175},[91,115207,115208],{"class":93,"line":32882},[91,115209,2523],{"emptyLinePlaceholder":175},[91,115211,115212,115214,115216,115218,115220],{"class":93,"line":32896},[91,115213,1655],{"class":153},[91,115215,31301],{"class":105},[91,115217,101640],{"class":153},[91,115219,101643],{"class":101},[91,115221,3862],{"class":250},[91,115223,115224],{"class":93,"line":32902},[91,115225,101650],{"class":250},[21,115227,103651],{},[82,115229,115231],{"className":84,"code":115230,"language":86,"meta":26,"style":26},"touch ch8_gym_env.py\n",[88,115232,115233],{"__ignoreMap":26},[91,115234,115235,115237],{"class":93,"line":94},[91,115236,101364],{"class":97},[91,115238,115239],{"class":101}," ch8_gym_env.py\n",[21,115241,110525],{},[82,115243,115245],{"className":84,"code":115244,"language":86,"meta":26,"style":26},"python ch8_gym_env.py\n",[88,115246,115247],{"__ignoreMap":26},[91,115248,115249,115251],{"class":93,"line":94},[91,115250,30461],{"class":97},[91,115252,115239],{"class":101},[217,115254,101653],{"id":101653},[21,115256,115257],{},"继承 Gymnasium 环境：",[82,115259,115261],{"className":30459,"code":115260,"language":30461,"meta":26,"style":26},"class ReacherEnv(gym.Env):\n",[88,115262,115263],{"__ignoreMap":26},[91,115264,115265,115267,115269,115271,115273,115275,115277],{"class":93,"line":94},[91,115266,14817],{"class":153},[91,115268,114138],{"class":97},[91,115270,251],{"class":250},[91,115272,113621],{"class":97},[91,115274,807],{"class":250},[91,115276,114147],{"class":97},[91,115278,30867],{"class":250},[21,115280,115281],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[21,115283,115284],{},"初始化模型：",[82,115286,115288],{"className":30459,"code":115287,"language":30461,"meta":26,"style":26},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[88,115289,115290,115304],{"__ignoreMap":26},[91,115291,115292,115294,115296,115298,115300,115302],{"class":93,"line":94},[91,115293,30904],{"class":105},[91,115295,114198],{"class":250},[91,115297,296],{"class":153},[91,115299,101493],{"class":250},[91,115301,101395],{"class":105},[91,115303,257],{"class":250},[91,115305,115306,115308,115310,115312,115314,115316],{"class":93,"line":38},[91,115307,30904],{"class":105},[91,115309,114213],{"class":250},[91,115311,296],{"class":153},[91,115313,114218],{"class":250},[91,115315,30904],{"class":105},[91,115317,114223],{"class":250},[21,115319,115320,115321,115323],{},"这和前面章节一样，只是现在放到了类的 ",[88,115322,30910],{}," 里。",[21,115325,115326],{},"缓存 site ID：",[82,115328,115330],{"className":30459,"code":115329,"language":30461,"meta":26,"style":26},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[88,115331,115332,115346],{"__ignoreMap":26},[91,115333,115334,115336,115338,115340,115342,115344],{"class":93,"line":94},[91,115335,30904],{"class":105},[91,115337,114234],{"class":250},[91,115339,296],{"class":153},[91,115341,114239],{"class":250},[91,115343,89635],{"class":105},[91,115345,257],{"class":250},[91,115347,115348,115350,115352,115354,115356,115358],{"class":93,"line":38},[91,115349,30904],{"class":105},[91,115351,114255],{"class":250},[91,115353,296],{"class":153},[91,115355,114239],{"class":250},[91,115357,89635],{"class":105},[91,115359,257],{"class":250},[21,115361,115362],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[21,115364,115365],{},"reset：",[82,115367,115369],{"className":30459,"code":115368,"language":30461,"meta":26,"style":26},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[88,115370,115371],{"__ignoreMap":26},[91,115372,115373,115375,115377,115379,115381,115383,115385,115387,115389,115391,115393,115395,115397,115399,115401,115403,115405],{"class":93,"line":94},[91,115374,32028],{"class":153},[91,115376,114603],{"class":97},[91,115378,114606],{"class":250},[91,115380,704],{"class":153},[91,115382,114611],{"class":250},[91,115384,254],{"class":105},[91,115386,154],{"class":153},[91,115388,39014],{"class":105},[91,115390,13687],{"class":153},[91,115392,39014],{"class":105},[91,115394,114624],{"class":250},[91,115396,114627],{"class":105},[91,115398,154],{"class":153},[91,115400,39014],{"class":105},[91,115402,13687],{"class":153},[91,115404,39014],{"class":105},[91,115406,30867],{"class":250},[21,115408,115409,115411],{},[88,115410,70137],{}," 做四件事：",[14,115413,115414,115417,115420,115423],{},[17,115415,115416],{},"设置随机种子。",[17,115418,115419],{},"重置 MuJoCo data。",[17,115421,115422],{},"随机初始化关节角。",[17,115424,115425],{},"返回初始观测和 info。",[21,115427,115428],{},"step：",[82,115430,115432],{"className":30459,"code":115431,"language":30461,"meta":26,"style":26},"def step(self, action):\n",[88,115433,115434],{"__ignoreMap":26},[91,115435,115436,115438,115440],{"class":93,"line":94},[91,115437,32028],{"class":153},[91,115439,114768],{"class":97},[91,115441,114771],{"class":250},[21,115443,115444,115446],{},[88,115445,107215],{}," 做六件事：",[14,115448,115449,115452,115458,115461,115464,115467],{},[17,115450,115451],{},"检查并裁剪 action。",[17,115453,115454,115455,28504],{},"写入 ",[88,115456,115457],{},"self.data.ctrl",[17,115459,115460],{},"连续推进若干个 MuJoCo 物理步。",[17,115462,115463],{},"计算新观测。",[17,115465,115466],{},"计算奖励和结束条件。",[17,115468,115469],{},"返回 Gymnasium 标准五元组。",[217,115471,101789],{"id":101789},[82,115473,115475],{"className":30459,"code":115474,"language":30461,"meta":26,"style":26},"import gymnasium as gym\n",[88,115476,115477],{"__ignoreMap":26},[91,115478,115479,115481,115483,115485],{"class":93,"line":94},[91,115480,30473],{"class":153},[91,115482,113976],{"class":250},[91,115484,31464],{"class":153},[91,115486,113981],{"class":250},[21,115488,115489,115490,115492,115493,115496],{},"导入 Gymnasium，并起别名 ",[88,115491,113621],{},"。后面写 ",[88,115494,115495],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[82,115498,115500],{"className":30459,"code":115499,"language":30461,"meta":26,"style":26},"from gymnasium import spaces\n",[88,115501,115502],{"__ignoreMap":26},[91,115503,115504,115506,115508,115510],{"class":93,"line":94},[91,115505,30818],{"class":153},[91,115507,113976],{"class":250},[91,115509,30473],{"class":153},[91,115511,114008],{"class":250},[21,115513,115514,115515,115518],{},"导入空间定义工具。",[88,115516,115517],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[82,115520,115521],{"className":30459,"code":115260,"language":30461,"meta":26,"style":26},[88,115522,115523],{"__ignoreMap":26},[91,115524,115525,115527,115529,115531,115533,115535,115537],{"class":93,"line":94},[91,115526,14817],{"class":153},[91,115528,114138],{"class":97},[91,115530,251],{"class":250},[91,115532,113621],{"class":97},[91,115534,807],{"class":250},[91,115536,114147],{"class":97},[91,115538,30867],{"class":250},[21,115540,115541,115542,115545,115546,115548,115549,101099,115551,115553],{},"定义一个类，名字叫 ",[88,115543,115544],{},"ReacherEnv","。括号里的 ",[88,115547,115495],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[88,115550,70137],{},[88,115552,107215],{}," 这两个核心方法。",[82,115555,115557],{"className":30459,"code":115556,"language":30461,"meta":26,"style":26},"metadata = {\"render_modes\": []}\n",[88,115558,115559],{"__ignoreMap":26},[91,115560,115561,115564,115566,115568,115570],{"class":93,"line":94},[91,115562,115563],{"class":250},"metadata ",[91,115565,296],{"class":153},[91,115567,4571],{"class":250},[91,115569,114161],{"class":101},[91,115571,114164],{"class":250},[21,115573,115574],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[82,115576,115578],{"className":30459,"code":115577,"language":30461,"meta":26,"style":26},"def __init__(self) -> None:\n",[88,115579,115580],{"__ignoreMap":26},[91,115581,115582,115584,115586,115588,115590],{"class":93,"line":94},[91,115583,32028],{"class":153},[91,115585,30885],{"class":105},[91,115587,114177],{"class":250},[91,115589,95767],{"class":105},[91,115591,3862],{"class":250},[21,115593,115594,115596,115597,28504],{},[88,115595,30910],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[88,115598,115599],{},"env = ReacherEnv()",[82,115601,115603],{"className":30459,"code":115602,"language":30461,"meta":26,"style":26},"super().__init__()\n",[88,115604,115605],{"__ignoreMap":26},[91,115606,115607,115610,115612,115614],{"class":93,"line":94},[91,115608,115609],{"class":105},"super",[91,115611,17384],{"class":250},[91,115613,30910],{"class":105},[91,115615,2099],{"class":250},[21,115617,115618,115619,115621],{},"调用父类 ",[88,115620,115495],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[82,115623,115624],{"className":30459,"code":115287,"language":30461,"meta":26,"style":26},[88,115625,115626,115640],{"__ignoreMap":26},[91,115627,115628,115630,115632,115634,115636,115638],{"class":93,"line":94},[91,115629,30904],{"class":105},[91,115631,114198],{"class":250},[91,115633,296],{"class":153},[91,115635,101493],{"class":250},[91,115637,101395],{"class":105},[91,115639,257],{"class":250},[91,115641,115642,115644,115646,115648,115650,115652],{"class":93,"line":38},[91,115643,30904],{"class":105},[91,115645,114213],{"class":250},[91,115647,296],{"class":153},[91,115649,114218],{"class":250},[91,115651,30904],{"class":105},[91,115653,114223],{"class":250},[21,115655,115656,115657,115659,115660,101099,115663,115666],{},"把 MuJoCo 模型和状态保存到 ",[88,115658,30904],{}," 上。",[88,115661,115662],{},"self.model",[88,115664,115665],{},"self.data"," 表示这个环境对象自己的模型和状态。",[82,115668,115669],{"className":30459,"code":115329,"language":30461,"meta":26,"style":26},[88,115670,115671,115685],{"__ignoreMap":26},[91,115672,115673,115675,115677,115679,115681,115683],{"class":93,"line":94},[91,115674,30904],{"class":105},[91,115676,114234],{"class":250},[91,115678,296],{"class":153},[91,115680,114239],{"class":250},[91,115682,89635],{"class":105},[91,115684,257],{"class":250},[91,115686,115687,115689,115691,115693,115695,115697],{"class":93,"line":38},[91,115688,30904],{"class":105},[91,115690,114255],{"class":250},[91,115692,296],{"class":153},[91,115694,114239],{"class":250},[91,115696,89635],{"class":105},[91,115698,257],{"class":250},[21,115700,115701,115702,101099,115705,115708],{},"提前查好 tip 和 target 的 site ID。这样 ",[88,115703,115704],{},"_get_obs",[88,115706,115707],{},"_get_reward"," 里就不用每次按名字查找。",[82,115710,115712],{"className":30459,"code":115711,"language":30461,"meta":26,"style":26},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[88,115713,115714,115724,115734],{"__ignoreMap":26},[91,115715,115716,115718,115720,115722],{"class":93,"line":94},[91,115717,30904],{"class":105},[91,115719,113948],{"class":250},[91,115721,296],{"class":153},[91,115723,54508],{"class":105},[91,115725,115726,115728,115730,115732],{"class":93,"line":38},[91,115727,30904],{"class":105},[91,115729,114327],{"class":250},[91,115731,296],{"class":153},[91,115733,114332],{"class":105},[91,115735,115736,115738,115740,115742],{"class":93,"line":1304},[91,115737,30904],{"class":105},[91,115739,113787],{"class":250},[91,115741,296],{"class":153},[91,115743,47414],{"class":105},[21,115745,115746,115749,115750,115753,115754,115757],{},[88,115747,115748],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[88,115751,115752],{},"max_steps"," 是一个 episode 最多运行多少步。",[88,115755,115756],{},"steps"," 记录当前 episode 已经走了多少步。",[82,115759,115760],{"className":30459,"code":113826,"language":30461,"meta":26,"style":26},[88,115761,115762],{"__ignoreMap":26},[91,115763,115764,115766,115768,115770,115772,115774,115776,115778,115780,115782,115784,115786,115788,115790,115792,115794,115796,115798,115800,115802],{"class":93,"line":94},[91,115765,30904],{"class":105},[91,115767,113835],{"class":250},[91,115769,296],{"class":153},[91,115771,113840],{"class":250},[91,115773,113843],{"class":5339},[91,115775,113846],{"class":153},[91,115777,102484],{"class":105},[91,115779,12558],{"class":250},[91,115781,113853],{"class":5339},[91,115783,296],{"class":153},[91,115785,102484],{"class":105},[91,115787,12558],{"class":250},[91,115789,96044],{"class":5339},[91,115791,296],{"class":153},[91,115793,251],{"class":250},[91,115795,327],{"class":105},[91,115797,113870],{"class":250},[91,115799,93581],{"class":5339},[91,115801,296],{"class":153},[91,115803,113877],{"class":250},[21,115805,115806,115807,115810,115811,101099,115814,115817],{},"定义动作空间。",[88,115808,115809],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[88,115812,115813],{},"low=-1.0",[88,115815,115816],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[82,115819,115820],{"className":30459,"code":113887,"language":30461,"meta":26,"style":26},[88,115821,115822],{"__ignoreMap":26},[91,115823,115824,115826,115828,115830,115832,115834,115836,115838,115840,115842,115844,115846,115848,115850,115852,115854,115856,115858],{"class":93,"line":94},[91,115825,30904],{"class":105},[91,115827,113896],{"class":250},[91,115829,296],{"class":153},[91,115831,113840],{"class":250},[91,115833,113843],{"class":5339},[91,115835,113846],{"class":153},[91,115837,113907],{"class":250},[91,115839,113853],{"class":5339},[91,115841,296],{"class":153},[91,115843,113907],{"class":250},[91,115845,96044],{"class":5339},[91,115847,296],{"class":153},[91,115849,251],{"class":250},[91,115851,695],{"class":105},[91,115853,113870],{"class":250},[91,115855,93581],{"class":5339},[91,115857,296],{"class":153},[91,115859,113877],{"class":250},[21,115861,115862,115863,115866,115867,115870],{},"定义观测空间。",[88,115864,115865],{},"shape=(10,)"," 表示观测是 10 个数。",[88,115868,115869],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[82,115872,115874],{"className":30459,"code":115873,"language":30461,"meta":26,"style":26},"def _get_obs(self) -> np.ndarray:\n",[88,115875,115876],{"__ignoreMap":26},[91,115877,115878,115880,115882],{"class":93,"line":94},[91,115879,32028],{"class":153},[91,115881,114437],{"class":97},[91,115883,114440],{"class":250},[21,115885,115886,115887,115889],{},"定义内部函数，用来生成观测。函数名前面的 ",[88,115888,1241],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[82,115891,115893],{"className":30459,"code":115892,"language":30461,"meta":26,"style":26},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[88,115894,115895,115909],{"__ignoreMap":26},[91,115896,115897,115899,115901,115903,115905,115907],{"class":93,"line":94},[91,115898,111649],{"class":250},[91,115900,296],{"class":153},[91,115902,38954],{"class":105},[91,115904,114451],{"class":250},[91,115906,30904],{"class":105},[91,115908,114456],{"class":250},[91,115910,115911,115913,115915,115917,115919,115921],{"class":93,"line":38},[91,115912,111659],{"class":250},[91,115914,296],{"class":153},[91,115916,38954],{"class":105},[91,115918,114451],{"class":250},[91,115920,30904],{"class":105},[91,115922,114471],{"class":250},[21,115924,115925],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[82,115927,115929],{"className":30459,"code":115928,"language":30461,"meta":26,"style":26},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[88,115930,115931,115947],{"__ignoreMap":26},[91,115932,115933,115935,115937,115939,115941,115943,115945],{"class":93,"line":94},[91,115934,110935],{"class":250},[91,115936,296],{"class":153},[91,115938,114480],{"class":250},[91,115940,30904],{"class":105},[91,115942,114485],{"class":250},[91,115944,30904],{"class":105},[91,115946,114490],{"class":250},[91,115948,115949,115951],{"class":93,"line":38},[91,115950,17169],{"class":153},[91,115952,114497],{"class":250},[21,115954,115955,115956,115959,115960,115962],{},"拼接观测，并转换成 ",[88,115957,115958],{},"float32","。很多强化学习库默认使用 ",[88,115961,115958],{},"，所以这里主动转换。",[82,115964,115965],{"className":30459,"code":115368,"language":30461,"meta":26,"style":26},[88,115966,115967],{"__ignoreMap":26},[91,115968,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993,115995,115997,115999,116001],{"class":93,"line":94},[91,115970,32028],{"class":153},[91,115972,114603],{"class":97},[91,115974,114606],{"class":250},[91,115976,704],{"class":153},[91,115978,114611],{"class":250},[91,115980,254],{"class":105},[91,115982,154],{"class":153},[91,115984,39014],{"class":105},[91,115986,13687],{"class":153},[91,115988,39014],{"class":105},[91,115990,114624],{"class":250},[91,115992,114627],{"class":105},[91,115994,154],{"class":153},[91,115996,39014],{"class":105},[91,115998,13687],{"class":153},[91,116000,39014],{"class":105},[91,116002,30867],{"class":250},[21,116004,116005,116006,116008,116009,116012],{},"定义 reset。",[88,116007,114647],{}," 用来控制随机数，保证实验可以复现。",[88,116010,116011],{},"options"," 用来接收额外配置，本章暂时不用。",[82,116014,116016],{"className":30459,"code":116015,"language":30461,"meta":26,"style":26},"super().reset(seed=seed)\n",[88,116017,116018],{"__ignoreMap":26},[91,116019,116020,116022,116024,116026,116028],{"class":93,"line":94},[91,116021,115609],{"class":105},[91,116023,114644],{"class":250},[91,116025,114647],{"class":5339},[91,116027,296],{"class":153},[91,116029,114652],{"class":250},[21,116031,116032,116033,116036],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[88,116034,116035],{},"self.np_random"," 生成可复现的随机数。",[82,116038,116040],{"className":30459,"code":116039,"language":30461,"meta":26,"style":26},"mujoco.mj_resetData(self.model, self.data)\n",[88,116041,116042],{"__ignoreMap":26},[91,116043,116044,116047,116049,116051,116053],{"class":93,"line":94},[91,116045,116046],{"class":250},"mujoco.mj_resetData(",[91,116048,30904],{"class":105},[91,116050,114662],{"class":250},[91,116052,30904],{"class":105},[91,116054,114667],{"class":250},[21,116056,116057],{},"把 MuJoCo 状态重置到默认状态。",[82,116059,116061],{"className":30459,"code":116060,"language":30461,"meta":26,"style":26},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[88,116062,116063],{"__ignoreMap":26},[91,116064,116065,116067,116069,116071,116073,116075,116077,116079,116081,116083,116085,116087,116089,116091,116093,116095,116097],{"class":93,"line":94},[91,116066,30904],{"class":105},[91,116068,114678],{"class":250},[91,116070,296],{"class":153},[91,116072,38954],{"class":105},[91,116074,114685],{"class":250},[91,116076,113843],{"class":5339},[91,116078,113846],{"class":153},[91,116080,86291],{"class":105},[91,116082,12558],{"class":250},[91,116084,113853],{"class":5339},[91,116086,296],{"class":153},[91,116088,86291],{"class":105},[91,116090,12558],{"class":250},[91,116092,31577],{"class":5339},[91,116094,296],{"class":153},[91,116096,30904],{"class":105},[91,116098,114710],{"class":250},[21,116100,115422,116101,116104,116105,116108,116109,116111],{},[88,116102,116103],{},"[:]"," 表示修改整个数组。",[88,116106,116107],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[88,116110,102231],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[82,116113,116115],{"className":30459,"code":116114,"language":30461,"meta":26,"style":26},"self.data.qvel[:] = 0.0\n",[88,116116,116117],{"__ignoreMap":26},[91,116118,116119,116121,116123,116125],{"class":93,"line":94},[91,116120,30904],{"class":105},[91,116122,114717],{"class":250},[91,116124,296],{"class":153},[91,116126,104842],{"class":105},[21,116128,116129],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[82,116131,116133],{"className":30459,"code":116132,"language":30461,"meta":26,"style":26},"self.steps = 0\nreturn self._get_obs(), {}\n",[88,116134,116135,116145],{"__ignoreMap":26},[91,116136,116137,116139,116141,116143],{"class":93,"line":94},[91,116138,30904],{"class":105},[91,116140,113787],{"class":250},[91,116142,296],{"class":153},[91,116144,47414],{"class":105},[91,116146,116147,116149,116151],{"class":93,"line":38},[91,116148,17169],{"class":153},[91,116150,38954],{"class":105},[91,116152,114757],{"class":250},[21,116154,116155],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[82,116157,116158],{"className":30459,"code":115431,"language":30461,"meta":26,"style":26},[88,116159,116160],{"__ignoreMap":26},[91,116161,116162,116164,116166],{"class":93,"line":94},[91,116163,32028],{"class":153},[91,116165,114768],{"class":97},[91,116167,114771],{"class":250},[21,116169,116170],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[82,116172,116174],{"className":30459,"code":116173,"language":30461,"meta":26,"style":26},"action = np.asarray(action, dtype=np.float32)\n",[88,116175,116176],{"__ignoreMap":26},[91,116177,116178,116180,116182,116184,116186,116188],{"class":93,"line":94},[91,116179,107523],{"class":250},[91,116181,296],{"class":153},[91,116183,114780],{"class":250},[91,116185,93581],{"class":5339},[91,116187,296],{"class":153},[91,116189,113877],{"class":250},[21,116191,116192,116193,28504],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[88,116194,115958],{},[82,116196,116198],{"className":30459,"code":116197,"language":30461,"meta":26,"style":26},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[88,116199,116200],{"__ignoreMap":26},[91,116201,116202,116204,116206,116208,116210,116212,116214],{"class":93,"line":94},[91,116203,107523],{"class":250},[91,116205,296],{"class":153},[91,116207,107528],{"class":250},[91,116209,30904],{"class":105},[91,116211,114799],{"class":250},[91,116213,30904],{"class":105},[91,116215,114804],{"class":250},[21,116217,116218],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[82,116220,116222],{"className":30459,"code":116221,"language":30461,"meta":26,"style":26},"self.data.ctrl[:] = action\n",[88,116223,116224],{"__ignoreMap":26},[91,116225,116226,116228,116230,116232],{"class":93,"line":94},[91,116227,30904],{"class":105},[91,116229,114815],{"class":250},[91,116231,296],{"class":153},[91,116233,107551],{"class":250},[21,116235,116236],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[82,116238,116240],{"className":30459,"code":116239,"language":30461,"meta":26,"style":26},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[88,116241,116242,116258],{"__ignoreMap":26},[91,116243,116244,116246,116248,116250,116252,116254,116256],{"class":93,"line":94},[91,116245,3148],{"class":153},[91,116247,101582],{"class":250},[91,116249,26165],{"class":153},[91,116251,32524],{"class":105},[91,116253,251],{"class":250},[91,116255,30904],{"class":105},[91,116257,114836],{"class":250},[91,116259,116260,116263,116265,116267,116269],{"class":93,"line":38},[91,116261,116262],{"class":250},"    mujoco.mj_step(",[91,116264,30904],{"class":105},[91,116266,114662],{"class":250},[91,116268,30904],{"class":105},[91,116270,114667],{"class":250},[21,116272,116273,116274,116277,116278,116280,116281,28504],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[88,116275,116276],{},"frame_skip=5","，所以外部调用一次 ",[88,116279,113958],{},"，内部实际执行 5 次 ",[88,116282,101296],{},[82,116284,116286],{"className":30459,"code":116285,"language":30461,"meta":26,"style":26},"self.steps += 1\n",[88,116287,116288],{"__ignoreMap":26},[91,116289,116290,116292,116294,116296],{"class":93,"line":94},[91,116291,30904],{"class":105},[91,116293,113787],{"class":250},[91,116295,9600],{"class":153},[91,116297,55780],{"class":105},[21,116299,116300],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[82,116302,116304],{"className":30459,"code":116303,"language":30461,"meta":26,"style":26},"obs = self._get_obs()\nreward = self._get_reward()\n",[88,116305,116306,116316],{"__ignoreMap":26},[91,116307,116308,116310,116312,116314],{"class":93,"line":94},[91,116309,110935],{"class":250},[91,116311,296],{"class":153},[91,116313,38954],{"class":105},[91,116315,114878],{"class":250},[91,116317,116318,116320,116322,116324],{"class":93,"line":38},[91,116319,111086],{"class":250},[91,116321,296],{"class":153},[91,116323,38954],{"class":105},[91,116325,114889],{"class":250},[21,116327,116328],{},"计算新的观测和奖励。",[82,116330,116332],{"className":30459,"code":116331,"language":30461,"meta":26,"style":26},"dist = float(np.linalg.norm(tip - target))\n",[88,116333,116334],{"__ignoreMap":26},[91,116335,116336,116338,116340,116342,116344,116346],{"class":93,"line":94},[91,116337,111677],{"class":250},[91,116339,296],{"class":153},[91,116341,109878],{"class":105},[91,116343,114932],{"class":250},[91,116345,781],{"class":153},[91,116347,114937],{"class":250},[21,116349,116350],{},"计算末端到目标的距离，并转换成 Python float。",[82,116352,116353],{"className":30459,"code":113758,"language":30461,"meta":26,"style":26},[88,116354,116355,116367],{"__ignoreMap":26},[91,116356,116357,116359,116361,116363,116365],{"class":93,"line":94},[91,116358,113765],{"class":250},[91,116360,296],{"class":153},[91,116362,113770],{"class":250},[91,116364,1159],{"class":153},[91,116366,113775],{"class":105},[91,116368,116369,116371,116373,116375,116377,116379,116381],{"class":93,"line":38},[91,116370,113780],{"class":250},[91,116372,296],{"class":153},[91,116374,38954],{"class":105},[91,116376,113787],{"class":250},[91,116378,1834],{"class":153},[91,116380,38954],{"class":105},[91,116382,113794],{"class":250},[21,116384,116385],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[82,116387,116389],{"className":30459,"code":116388,"language":30461,"meta":26,"style":26},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[88,116390,116391,116404],{"__ignoreMap":26},[91,116392,116393,116396,116398,116400,116402],{"class":93,"line":94},[91,116394,116395],{"class":250},"info ",[91,116397,296],{"class":153},[91,116399,4571],{"class":250},[91,116401,114983],{"class":101},[91,116403,114986],{"class":250},[91,116405,116406,116408],{"class":93,"line":38},[91,116407,17169],{"class":153},[91,116409,114993],{"class":250},[21,116411,116412,116415],{},[88,116413,116414],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[82,116417,116419],{"className":30459,"code":116418,"language":30461,"meta":26,"style":26},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[88,116420,116421,116430],{"__ignoreMap":26},[91,116422,116423,116426,116428],{"class":93,"line":94},[91,116424,116425],{"class":250},"env ",[91,116427,296],{"class":153},[91,116429,115023],{"class":250},[91,116431,116432,116434,116436,116438,116440,116442,116444],{"class":93,"line":38},[91,116433,113481],{"class":250},[91,116435,296],{"class":153},[91,116437,115033],{"class":250},[91,116439,114647],{"class":5339},[91,116441,296],{"class":153},[91,116443,440],{"class":105},[91,116445,257],{"class":250},[21,116447,116448,116449,116452],{},"创建环境并重置。",[88,116450,116451],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[82,116454,116456],{"className":30459,"code":116455,"language":30461,"meta":26,"style":26},"action = env.action_space.sample()\n",[88,116457,116458],{"__ignoreMap":26},[91,116459,116460,116462,116464],{"class":93,"line":94},[91,116461,107523],{"class":250},[91,116463,296],{"class":153},[91,116465,115102],{"class":250},[21,116467,116468],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[190,116470,102397],{"id":102396},[21,116472,105565],{},[82,116474,116477],{"className":116475,"code":116476,"language":5310,"meta":26},[5308],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[88,116478,116476],{"__ignoreMap":26},[21,116480,116481],{},"这个环境已经具备强化学习环境的基本结构。",[21,116483,116484],{},"主函数里使用随机动作：",[82,116486,116487],{"className":30459,"code":116455,"language":30461,"meta":26,"style":26},[88,116488,116489],{"__ignoreMap":26},[91,116490,116491,116493,116495],{"class":93,"line":94},[91,116492,107523],{"class":250},[91,116494,296],{"class":153},[91,116496,115102],{"class":250},[21,116498,116499],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[190,116501,102429],{"id":102428},[14,116503,116504,116507,116513,116522,116531,116540,116546],{},[17,116505,116506],{},"运行程序。",[17,116508,116509,116510,28504],{},"确认 ",[88,116511,116512],{},"obs.shape == (10,)",[17,116514,111262,116515,116518,116519,28504],{},[88,116516,116517],{},"env.action_space","，应类似 ",[88,116520,116521],{},"Box(-1.0, 1.0, (2,), float32)",[17,116523,105666,116524,116527,116528,28504],{},[88,116525,116526],{},"self.max_steps = 10","，确认环境会更快 ",[88,116529,116530],{},"truncated=True",[17,116532,102492,116533,102495,116536,116539],{},[88,116534,116535],{},"terminated = dist \u003C 0.05",[88,116537,116538],{},"dist \u003C 0.2","，观察是否更容易结束。",[17,116541,102492,116542,116545],{},[88,116543,116544],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[17,116547,116548,116549,116551,116552,116555],{},"在 ",[88,116550,116414],{}," 里加入 ",[88,116553,116554],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[190,116557,102534],{"id":102533},[217,116559,116561],{"id":116560},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[21,116563,116564,116565,116567],{},"Gymnasium 的 ",[88,116566,107215],{}," 返回 5 个值:",[82,116569,116571],{"className":30459,"code":116570,"language":30461,"meta":26,"style":26},"obs, reward, terminated, truncated, info\n",[88,116572,116573],{"__ignoreMap":26},[91,116574,116575],{"class":93,"line":94},[91,116576,116570],{"class":250},[21,116578,116579],{},"不是旧 Gym 的 4 个值。",[217,116581,116583,116586],{"id":116582},"datactrl-action-维度错误",[88,116584,116585],{},"data.ctrl[:] = action"," 维度错误",[21,116588,102604],{},[82,116590,116592],{"className":30459,"code":116591,"language":30461,"meta":26,"style":26},"print(self.model.nu)\nprint(action.shape)\n",[88,116593,116594,116605],{"__ignoreMap":26},[91,116595,116596,116598,116600,116602],{"class":93,"line":94},[91,116597,30496],{"class":105},[91,116599,251],{"class":250},[91,116601,30904],{"class":105},[91,116603,116604],{"class":250},".model.nu)\n",[91,116606,116607,116609],{"class":93,"line":38},[91,116608,30496],{"class":105},[91,116610,116611],{"class":250},"(action.shape)\n",[21,116613,116614],{},"两者必须匹配。",[217,116616,116618],{"id":116617},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[21,116620,102543],{},[82,116622,116624],{"className":30459,"code":116623,"language":30461,"meta":26,"style":26},"mujoco.mj_forward(self.model, self.data)\n",[88,116625,116626],{"__ignoreMap":26},[91,116627,116628,116631,116633,116635,116637],{"class":93,"line":94},[91,116629,116630],{"class":250},"mujoco.mj_forward(",[91,116632,30904],{"class":105},[91,116634,114662],{"class":250},[91,116636,30904],{"class":105},[91,116638,114667],{"class":250},[217,116640,116642,116644],{"id":116641},"observation_space-维度和-obs-不一致",[88,116643,113681],{}," 维度和 obs 不一致",[21,116646,102656],{},[82,116648,116650],{"className":30459,"code":116649,"language":30461,"meta":26,"style":26},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[88,116651,116652,116662,116669],{"__ignoreMap":26},[91,116653,116654,116656,116658,116660],{"class":93,"line":94},[91,116655,110935],{"class":250},[91,116657,296],{"class":153},[91,116659,38954],{"class":105},[91,116661,114878],{"class":250},[91,116663,116664,116666],{"class":93,"line":38},[91,116665,30496],{"class":105},[91,116667,116668],{"class":250},"(obs.shape)\n",[91,116670,116671,116673,116675,116677],{"class":93,"line":1304},[91,116672,30496],{"class":105},[91,116674,251],{"class":250},[91,116676,30904],{"class":105},[91,116678,116679],{"class":250},".observation_space.shape)\n",[21,116681,116682],{},"两者必须一致。本章观测是：",[82,116684,116687],{"className":116685,"code":116686,"language":5310,"meta":26},[5308],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[88,116688,116686],{"__ignoreMap":26},[217,116690,116692],{"id":116691},"action-超过范围","action 超过范围",[21,116694,116695],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[82,116697,116698],{"className":30459,"code":116197,"language":30461,"meta":26,"style":26},[88,116699,116700],{"__ignoreMap":26},[91,116701,116702,116704,116706,116708,116710,116712,116714],{"class":93,"line":94},[91,116703,107523],{"class":250},[91,116705,296],{"class":153},[91,116707,107528],{"class":250},[91,116709,30904],{"class":105},[91,116711,114799],{"class":250},[91,116713,30904],{"class":105},[91,116715,114804],{"class":250},[21,116717,116718,116719,28504],{},"这能避免无效动作直接写入 ",[88,116720,101157],{},[217,116722,116724],{"id":116723},"忘记返回-info","忘记返回 info",[21,116726,116564,116727,101099,116729,116731],{},[88,116728,70137],{},[88,116730,107215],{}," 都会返回 info：",[82,116733,116734],{"className":30459,"code":113474,"language":30461,"meta":26,"style":26},[88,116735,116736,116744],{"__ignoreMap":26},[91,116737,116738,116740,116742],{"class":93,"line":94},[91,116739,113481],{"class":250},[91,116741,296],{"class":153},[91,116743,113486],{"class":250},[91,116745,116746,116748,116750],{"class":93,"line":38},[91,116747,113491],{"class":250},[91,116749,296],{"class":153},[91,116751,113496],{"class":250},[21,116753,116754,116755,28504],{},"即使暂时没有额外信息，也返回 ",[88,116756,32540],{},[190,116758,116760],{"id":116759},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[21,116762,116763],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[14,116765,116766,116769,116772,116775,116778,116781],{},[17,116767,116768],{},"更稳定的 reward。",[17,116770,116771],{},"合理的 episode 长度。",[17,116773,116774],{},"可重复的随机目标采样。",[17,116776,116777],{},"render 接口。",[17,116779,116780],{},"环境注册代码。",[17,116782,116783],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[21,116785,116786],{},"如果只是自己写训练循环，最小形式是：",[82,116788,116790],{"className":30459,"code":116789,"language":30461,"meta":26,"style":26},"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",[88,116791,116792,116800,116816,116820,116836,116845,116854,116864],{"__ignoreMap":26},[91,116793,116794,116796,116798],{"class":93,"line":94},[91,116795,116425],{"class":250},[91,116797,296],{"class":153},[91,116799,115023],{"class":250},[91,116801,116802,116804,116806,116808,116810,116812,116814],{"class":93,"line":38},[91,116803,113481],{"class":250},[91,116805,296],{"class":153},[91,116807,115033],{"class":250},[91,116809,114647],{"class":5339},[91,116811,296],{"class":153},[91,116813,440],{"class":105},[91,116815,257],{"class":250},[91,116817,116818],{"class":93,"line":1304},[91,116819,2523],{"emptyLinePlaceholder":175},[91,116821,116822,116824,116826,116828,116830,116832,116834],{"class":93,"line":1319},[91,116823,3148],{"class":153},[91,116825,101582],{"class":250},[91,116827,26165],{"class":153},[91,116829,32524],{"class":105},[91,116831,251],{"class":250},[91,116833,6533],{"class":105},[91,116835,30867],{"class":250},[91,116837,116838,116841,116843],{"class":93,"line":1325},[91,116839,116840],{"class":250},"    action ",[91,116842,296],{"class":153},[91,116844,115102],{"class":250},[91,116846,116847,116850,116852],{"class":93,"line":1339},[91,116848,116849],{"class":250},"    obs, reward, terminated, truncated, info ",[91,116851,296],{"class":153},[91,116853,113496],{"class":250},[91,116855,116856,116858,116860,116862],{"class":93,"line":1345},[91,116857,3224],{"class":153},[91,116859,115168],{"class":250},[91,116861,115171],{"class":153},[91,116863,115174],{"class":250},[91,116865,116866,116869,116871],{"class":93,"line":1436},[91,116867,116868],{"class":250},"        obs, info ",[91,116870,296],{"class":153},[91,116872,113486],{"class":250},[190,116874,116876],{"id":116875},"_9本章小结","9.本章小结",[21,116878,116879],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[82,116881,116884],{"className":116882,"code":116883,"language":5310,"meta":26},[5308],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[88,116885,116883],{"__ignoreMap":26},[21,116887,116888],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[168,116890,116891],{},"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":26,"searchDepth":38,"depth":38,"links":116893},[116894,116895,116896,116903,116907,116908,116909,116919,116920],{"id":100727,"depth":38,"text":100728},{"id":100850,"depth":38,"text":100851},{"id":101125,"depth":38,"text":101126,"children":116897},[116898,116900,116902],{"id":113705,"depth":1304,"text":116899},"terminated 和 truncated 的区别",{"id":113808,"depth":1304,"text":116901},"observation_space 和 action_space",{"id":113935,"depth":1304,"text":113936},{"id":101333,"depth":38,"text":101334,"children":116904},[116905,116906],{"id":101653,"depth":1304,"text":101653},{"id":101789,"depth":1304,"text":101789},{"id":102396,"depth":38,"text":102397},{"id":102428,"depth":38,"text":102429},{"id":102533,"depth":38,"text":102534,"children":116910},[116911,116912,116914,116915,116917,116918],{"id":116560,"depth":1304,"text":116561},{"id":116582,"depth":1304,"text":116913},"data.ctrl[:] = action 维度错误",{"id":116617,"depth":1304,"text":116618},{"id":116641,"depth":1304,"text":116916},"observation_space 维度和 obs 不一致",{"id":116691,"depth":1304,"text":116692},{"id":116723,"depth":1304,"text":116724},{"id":116759,"depth":38,"text":116760},{"id":116875,"depth":38,"text":116876},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113458,"description":26},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116927,"title":116928,"body":116929,"description":117352,"extension":173,"meta":117353,"navigation":175,"path":117354,"seo":117355,"stem":117356,"__hash__":117357},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116930,"toc":117342},[116931,116935,116938,116941,116961,116967,116973,116983,116986,116989,117009,117012,117016,117019,117025,117028,117042,117045,117048,117122,117125,117131,117134,117157,117160,117210,117213,117219,117222,117225,117228,117247,117250,117256,117259,117262,117265,117285,117288,117291,117294,117339],[10,116932,116934],{"id":116933},"mujoco-学习","MuJoCo 学习",[21,116936,116937],{},"初版",[21,116939,116940],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[14,116942,116943,116946,116949,116958],{},[17,116944,116945],{},"MuJoCo 模型文件在描述什么。",[17,116947,116948],{},"Python 代码怎样读取和推进仿真。",[17,116950,116951,461,116953,461,116955,116957],{},[88,116952,104111],{},[88,116954,104441],{},[88,116956,104444],{}," 这些数组为什么重要。",[17,116959,116960],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[21,116962,116963,116964,116966],{},"默认环境为 Fedora 44、Python >= 3.10、",[88,116965,101108],{}," 官方 Python bindings。",[21,116968,116969,116970,116972],{},"注意：本文禁止使用 ",[88,116971,101093],{},"。所有示例均使用：",[82,116974,116975],{"className":30459,"code":101659,"language":30461,"meta":26,"style":26},[88,116976,116977],{"__ignoreMap":26},[91,116978,116979,116981],{"class":93,"line":94},[91,116980,30473],{"class":153},[91,116982,101382],{"class":250},[190,116984,116985],{"id":116985},"适合谁阅读",[21,116987,116988],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[14,116990,116991,116994,116997,117000],{},[17,116992,116993],{},"没学过 MuJoCo，只会一点 Python。",[17,116995,116996],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[17,116998,116999],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[17,117001,117002,117003,117005,117006,117008],{},"以前接触过 ",[88,117004,101093],{},"，现在想迁移到官方 ",[88,117007,101102],{}," Python bindings。",[21,117010,117011],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[190,117013,117015],{"id":117014},"mujoco-到底是什么","MuJoCo 到底是什么",[21,117017,117018],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[82,117020,117023],{"className":117021,"code":117022,"language":5310,"meta":26},[5308],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[88,117024,117022],{"__ignoreMap":26},[21,117026,117027],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[14,117029,117030,117033,117036,117039],{},[17,117031,117032],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[17,117034,117035],{},"快速测试控制算法，不必一开始就上真实机器人。",[17,117037,117038],{},"生成强化学习环境。",[17,117040,117041],{},"采集状态、动作、图像、奖励等训练数据。",[190,117043,117044],{"id":117044},"学习前的心智模型",[21,117046,117047],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[386,117049,117050,117062],{},[389,117051,117052],{},[392,117053,117054,117057,117060],{},[395,117055,117056],{"align":23860},"部分",[395,117058,117059],{"align":23860},"负责什么",[395,117061,21310],{"align":23860},[433,117063,117064,117075,117087,117099,117111],{},[392,117065,117066,117069,117072],{},[438,117067,117068],{"align":23860},"MJCF XML",[438,117070,117071],{"align":23860},"定义世界和机器人结构",[438,117073,117074],{"align":23860},"地面、盒子、关节、电机、摄像头",[392,117076,117077,117081,117084],{},[438,117078,117079],{"align":23860},[88,117080,100790],{},[438,117082,117083],{"align":23860},"编译后的静态模型",[438,117085,117086],{"align":23860},"有几个关节、有几个电机、时间步长是多少",[392,117088,117089,117093,117096],{},[438,117090,117091],{"align":23860},[88,117092,100800],{},[438,117094,117095],{"align":23860},"运行中的动态状态",[438,117097,117098],{"align":23860},"当前时间、位置、速度、电机输入",[392,117100,117101,117105,117108],{},[438,117102,117103],{"align":23860},[88,117104,101296],{},[438,117106,117107],{"align":23860},"推进一步物理仿真",[438,117109,117110],{"align":23860},"根据重力、力、碰撞更新状态",[392,117112,117113,117116,117119],{},[438,117114,117115],{"align":23860},"Viewer \u002F Renderer",[438,117117,117118],{"align":23860},"把仿真显示出来",[438,117120,117121],{"align":23860},"打开窗口或保存图片",[21,117123,117124],{},"一句话总结：",[82,117126,117129],{"className":117127,"code":117128,"language":5310,"meta":26},[5308],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[88,117130,117128],{"__ignoreMap":26},[21,117132,117133],{},"参考来源：",[1256,117135,117136,117143,117150],{},[17,117137,117138,117139],{},"MuJoCo Python 官方文档：",[487,117140,117141],{"href":117141,"rel":117142},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23987],[17,117144,117145,117146],{},"MuJoCo XML Reference：",[487,117147,117148],{"href":117148,"rel":117149},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23987],[17,117151,117152,117153],{},"MuJoCo Overview：",[487,117154,117155],{"href":117155,"rel":117156},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23987],[190,117158,117159],{"id":117159},"章节目录",[14,117161,117162,117168,117174,117180,117186,117192,117198,117204],{},[17,117163,117164],{},[487,117165,117167],{"href":117166},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[17,117169,117170],{},[487,117171,117173],{"href":117172},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[17,117175,117176],{},[487,117177,117179],{"href":117178},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[17,117181,117182],{},[487,117183,117185],{"href":117184},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[17,117187,117188],{},[487,117189,117191],{"href":117190},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[17,117193,117194],{},[487,117195,117197],{"href":117196},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[17,117199,117200],{},[487,117201,117203],{"href":117202},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[17,117205,117206],{},[487,117207,117209],{"href":117208},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[190,117211,117212],{"id":117212},"推荐学习路线",[82,117214,117217],{"className":117215,"code":117216,"language":5310,"meta":26},[5308],"环境安装\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",[88,117218,117216],{"__ignoreMap":26},[21,117220,117221],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[190,117223,117224],{"id":117224},"建议的目录结构",[21,117226,117227],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[82,117229,117231],{"className":84,"code":117230,"language":86,"meta":26,"style":26},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[88,117232,117233,117241],{"__ignoreMap":26},[91,117234,117235,117237,117239],{"class":93,"line":94},[91,117236,101347],{"class":97},[91,117238,29335],{"class":105},[91,117240,101352],{"class":101},[91,117242,117243,117245],{"class":93,"line":38},[91,117244,101357],{"class":105},[91,117246,101352],{"class":101},[21,117248,117249],{},"每一章的代码都单独保存：",[82,117251,117254],{"className":117252,"code":117253,"language":5310,"meta":26},[5308],"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",[88,117255,117253],{"__ignoreMap":26},[21,117257,117258],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[190,117260,117261],{"id":117261},"学习方法",[21,117263,117264],{},"每章建议按这个顺序操作：",[14,117266,117267,117270,117273,117276,117279,117282],{},[17,117268,117269],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[17,117271,117272],{},"复制最小可运行代码，保存成指定文件。",[17,117274,117275],{},"运行代码，确认没有报错。",[17,117277,117278],{},"对照“运行结果说明”理解输出。",[17,117280,117281],{},"做“验证步骤”，主动改一两个参数。",[17,117283,117284],{},"遇到报错先看“常见错误与解决方案”。",[21,117286,117287],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[190,117289,117290],{"id":117290},"全局排错顺序",[21,117292,117293],{},"遇到问题时，按下面顺序查：",[14,117295,117296,117302,117308,117313,117316,117319,117326,117336],{},[17,117297,117298,117299],{},"Python 环境是否激活：",[88,117300,117301],{},"which python",[17,117303,117304,117305],{},"MuJoCo 是否能导入：",[88,117306,117307],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[17,117309,117310,117311],{},"是否误装了 ",[88,117312,101093],{},[17,117314,117315],{},"XML 标签是否闭合、属性是否拼写正确",[17,117317,117318],{},"actuator 引用的 joint 名字是否存在",[17,117320,117321,117323,117324],{},[88,117322,101157],{}," 的长度是否等于 ",[88,117325,102239],{},[17,117327,105666,117328,82620,117330,117332,117333],{},[88,117329,104111],{},[88,117331,104441],{}," 后是否调用了 ",[88,117334,117335],{},"mujoco.mj_forward",[17,117337,117338],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[168,117340,117341],{},"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":26,"searchDepth":38,"depth":38,"links":117343},[117344,117345,117346,117347,117348,117349,117350,117351],{"id":116985,"depth":38,"text":116985},{"id":117014,"depth":38,"text":117015},{"id":117044,"depth":38,"text":117044},{"id":117159,"depth":38,"text":117159},{"id":117212,"depth":38,"text":117212},{"id":117224,"depth":38,"text":117224},{"id":117261,"depth":38,"text":117261},{"id":117290,"depth":38,"text":117290},"仿真搭建。",{"category":23502},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116928,"description":117352},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117359,"title":117360,"body":117361,"description":23500,"extension":173,"meta":117816,"navigation":175,"path":117817,"seo":117818,"stem":117819,"__hash__":117820},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117362,"toc":117814},[117363,117366,117369,117375,117811],[10,117364,117360],{"id":117365},"_1-最常用的基本操作更新",[21,117367,117368],{},"装linux系统教程：",[21,117370,117371],{},[487,117372,117373],{"href":117373,"rel":117374},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23987],[82,117376,117380],{"className":117377,"code":117378,"language":117379,"meta":26,"style":26},"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",[88,117381,117382,117387,117392,117401,117406,117415,117420,117440,117445,117456,117461,117470,117475,117503,117508,117527,117532,117551,117555,117560,117576,117580,117585,117615,117619,117624,117640,117644,117649,117664,117668,117673,117689,117693,117698,117710,117722,117726,117731,117748,117752,117757,117775,117779,117784,117793,117797,117802],{"__ignoreMap":26},[91,117383,117384],{"class":93,"line":94},[91,117385,117386],{"class":308},"#更新相关的知识\n",[91,117388,117389],{"class":93,"line":38},[91,117390,117391],{"class":308},"# 更新软件包列表（从服务器获取最新软件信息）\n",[91,117393,117394,117396,117399],{"class":93,"line":1304},[91,117395,24699],{"class":97},[91,117397,117398],{"class":101}," apt",[91,117400,26364],{"class":101},[91,117402,117403],{"class":93,"line":1319},[91,117404,117405],{"class":308},"# 升级所有可更新的软件包（不删除旧包）\n",[91,117407,117408,117410,117412],{"class":93,"line":1325},[91,117409,24699],{"class":97},[91,117411,117398],{"class":101},[91,117413,117414],{"class":101}," upgrade\n",[91,117416,117417],{"class":93,"line":1339},[91,117418,117419],{"class":308},"#更新和升级软件包\n",[91,117421,117422,117424,117426,117429,117431,117433,117435,117438],{"class":93,"line":1345},[91,117423,24699],{"class":97},[91,117425,117398],{"class":101},[91,117427,117428],{"class":101}," update",[91,117430,26312],{"class":250},[91,117432,24699],{"class":97},[91,117434,117398],{"class":101},[91,117436,117437],{"class":101}," upgrade",[91,117439,101062],{"class":105},[91,117441,117442],{"class":93,"line":1436},[91,117443,117444],{"class":308},"#列出可更新的软件包及版本信息\n",[91,117446,117447,117450,117453],{"class":93,"line":1442},[91,117448,117449],{"class":97},"apt",[91,117451,117452],{"class":101}," list",[91,117454,117455],{"class":105}," --upgradable\n",[91,117457,117458],{"class":93,"line":1454},[91,117459,117460],{"class":308},"#彻底升级（处理依赖关系，可能删除旧包）\n",[91,117462,117463,117465,117467],{"class":93,"line":1736},[91,117464,24699],{"class":97},[91,117466,117398],{"class":101},[91,117468,117469],{"class":101}," full-upgrade\n",[91,117471,117472],{"class":93,"line":1741},[91,117473,117474],{"class":308},"#设置指定版本\n",[91,117476,117477,117479,117481,117483,117485,117488,117490,117492,117494,117496,117499,117501],{"class":93,"line":1747},[91,117478,24699],{"class":97},[91,117480,117398],{"class":101},[91,117482,23956],{"class":101},[91,117484,29021],{"class":153},[91,117486,117487],{"class":101},"package_nam",[91,117489,324],{"class":250},[91,117491,1209],{"class":153},[91,117493,296],{"class":101},[91,117495,1159],{"class":153},[91,117497,117498],{"class":101},"version_numbe",[91,117500,919],{"class":250},[91,117502,51388],{"class":153},[91,117504,117505],{"class":93,"line":1752},[91,117506,117507],{"class":308},"#只安装软件包不升级\n",[91,117509,117510,117512,117514,117516,117518,117520,117522,117524],{"class":93,"line":1766},[91,117511,24699],{"class":97},[91,117513,117398],{"class":101},[91,117515,23956],{"class":101},[91,117517,29021],{"class":153},[91,117519,117487],{"class":101},[91,117521,324],{"class":250},[91,117523,1209],{"class":153},[91,117525,117526],{"class":105}," --no-upgrade\n",[91,117528,117529],{"class":93,"line":1771},[91,117530,117531],{"class":308},"#只升级，不存在就不安装\n",[91,117533,117534,117536,117538,117540,117542,117544,117546,117548],{"class":93,"line":1777},[91,117535,24699],{"class":97},[91,117537,117398],{"class":101},[91,117539,23956],{"class":101},[91,117541,29021],{"class":153},[91,117543,117487],{"class":101},[91,117545,324],{"class":250},[91,117547,1209],{"class":153},[91,117549,117550],{"class":105}," --only-upgrade\n",[91,117552,117553],{"class":93,"line":1798},[91,117554,2523],{"emptyLinePlaceholder":175},[91,117556,117557],{"class":93,"line":1803},[91,117558,117559],{"class":308},"#安装指定的软件命令\n",[91,117561,117562,117564,117566,117568,117570,117572,117574],{"class":93,"line":1817},[91,117563,24699],{"class":97},[91,117565,117398],{"class":101},[91,117567,23956],{"class":101},[91,117569,29021],{"class":153},[91,117571,117487],{"class":101},[91,117573,324],{"class":250},[91,117575,51388],{"class":153},[91,117577,117578],{"class":93,"line":1822},[91,117579,2523],{"emptyLinePlaceholder":175},[91,117581,117582],{"class":93,"line":1851},[91,117583,117584],{"class":308},"#安装多个软件包\n",[91,117586,117587,117589,117591,117593,117595,117598,117601,117603,117605,117608,117610,117612],{"class":93,"line":1856},[91,117588,24699],{"class":97},[91,117590,117398],{"class":101},[91,117592,23956],{"class":101},[91,117594,29021],{"class":153},[91,117596,117597],{"class":101},"package_",[91,117599,117600],{"class":153},"1>",[91,117602,29021],{"class":153},[91,117604,117597],{"class":101},[91,117606,117607],{"class":153},"2>",[91,117609,29021],{"class":153},[91,117611,117597],{"class":101},[91,117613,117614],{"class":153},"3>\n",[91,117616,117617],{"class":93,"line":1873},[91,117618,2523],{"emptyLinePlaceholder":175},[91,117620,117621],{"class":93,"line":1878},[91,117622,117623],{"class":308},"#更新指定的软件命令\n",[91,117625,117626,117628,117630,117632,117634,117636,117638],{"class":93,"line":1883},[91,117627,24699],{"class":97},[91,117629,117398],{"class":101},[91,117631,117428],{"class":101},[91,117633,29021],{"class":153},[91,117635,117487],{"class":101},[91,117637,324],{"class":250},[91,117639,51388],{"class":153},[91,117641,117642],{"class":93,"line":1888},[91,117643,2523],{"emptyLinePlaceholder":175},[91,117645,117646],{"class":93,"line":1902},[91,117647,117648],{"class":308},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[91,117650,117651,117653,117656,117658,117660,117662],{"class":93,"line":1907},[91,117652,117449],{"class":97},[91,117654,117655],{"class":101}," show",[91,117657,29021],{"class":153},[91,117659,117487],{"class":101},[91,117661,324],{"class":250},[91,117663,51388],{"class":153},[91,117665,117666],{"class":93,"line":2700},[91,117667,2523],{"emptyLinePlaceholder":175},[91,117669,117670],{"class":93,"line":2714},[91,117671,117672],{"class":308},"#删除软件包命令\n",[91,117674,117675,117677,117679,117681,117683,117685,117687],{"class":93,"line":2722},[91,117676,24699],{"class":97},[91,117678,117398],{"class":101},[91,117680,26201],{"class":101},[91,117682,29021],{"class":153},[91,117684,117487],{"class":101},[91,117686,324],{"class":250},[91,117688,51388],{"class":153},[91,117690,117691],{"class":93,"line":2727},[91,117692,2523],{"emptyLinePlaceholder":175},[91,117694,117695],{"class":93,"line":2733},[91,117696,117697],{"class":308},"# 清理旧版本和缓存（释放磁盘空间）\n",[91,117699,117700,117702,117704,117707],{"class":93,"line":2739},[91,117701,24699],{"class":97},[91,117703,117398],{"class":101},[91,117705,117706],{"class":101}," autoremove",[91,117708,117709],{"class":308},"  # 删除不再需要的依赖和库文件\n",[91,117711,117712,117714,117716,117719],{"class":93,"line":2744},[91,117713,24699],{"class":97},[91,117715,117398],{"class":101},[91,117717,117718],{"class":101}," clean",[91,117720,117721],{"class":308},"       # 清理下载的缓存包\n",[91,117723,117724],{"class":93,"line":8071},[91,117725,2523],{"emptyLinePlaceholder":175},[91,117727,117728],{"class":93,"line":8095},[91,117729,117730],{"class":308},"#移除软件包及配置文件\n",[91,117732,117733,117735,117737,117740,117742,117744,117746],{"class":93,"line":8100},[91,117734,24699],{"class":97},[91,117736,117398],{"class":101},[91,117738,117739],{"class":101}," purge",[91,117741,29021],{"class":153},[91,117743,117487],{"class":101},[91,117745,324],{"class":250},[91,117747,51388],{"class":153},[91,117749,117750],{"class":93,"line":8106},[91,117751,2523],{"emptyLinePlaceholder":175},[91,117753,117754],{"class":93,"line":8133},[91,117755,117756],{"class":308},"#查找软件包命令\n",[91,117758,117759,117761,117763,117766,117768,117771,117773],{"class":93,"line":8138},[91,117760,24699],{"class":97},[91,117762,117398],{"class":101},[91,117764,117765],{"class":101}," search",[91,117767,29021],{"class":153},[91,117769,117770],{"class":101},"keywor",[91,117772,563],{"class":250},[91,117774,51388],{"class":153},[91,117776,117777],{"class":93,"line":8144},[91,117778,2523],{"emptyLinePlaceholder":175},[91,117780,117781],{"class":93,"line":8156},[91,117782,117783],{"class":308},"#列出所有已安装的包\n",[91,117785,117786,117788,117790],{"class":93,"line":8168},[91,117787,117449],{"class":97},[91,117789,117452],{"class":101},[91,117791,117792],{"class":105}," --installed\n",[91,117794,117795],{"class":93,"line":8180},[91,117796,2523],{"emptyLinePlaceholder":175},[91,117798,117799],{"class":93,"line":9839},[91,117800,117801],{"class":308},"#列出所有已安装的包的版本信息\n",[91,117803,117804,117806,117808],{"class":93,"line":9864},[91,117805,117449],{"class":97},[91,117807,117452],{"class":101},[91,117809,117810],{"class":105}," --all-versions\n",[168,117812,117813],{},"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":26,"searchDepth":38,"depth":38,"links":117815},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117360,"description":23500},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117822,"title":117823,"body":117824,"description":23500,"extension":173,"meta":118565,"navigation":175,"path":118566,"seo":118567,"stem":118568,"__hash__":118569},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117825,"toc":118552},[117826,117829,117833,117836,117842,117846,117850,117856,117861,117866,117871,117876,117881,117884,117887,117890,117893,117897,117900,117905,117908,117913,117916,117921,117928,117931,117934,117937,117940,117943,117954,117958,117962,117967,117972,117976,117981,117985,117990,117994,117998,118003,118006,118051,118056,118060,118064,118069,118075,118080,118090,118095,118105,118110,118115,118142,118146,118149,118154,118157,118182,118186,118191,118194,118199,118204,118224,118229,118232,118247,118251,118304,118307,118312,118316,118319,118334,118337,118340,118345,118349,118353,118356,118360,118364,118367,118372,118377,118381,118388,118396,118399,118406,118411,118416,118419,118424,118431,118436,118443,118447,118449,118454,118458,118461,118464,118469,118472,118477,118480,118485,118490,118495,118499,118504,118508,118549],[10,117827,117823],{"id":117828},"_2-linux装机教程",[190,117830,117832],{"id":117831},"_21-实体机","2.1 实体机",[21,117834,117835],{},"使用清华源：（Ubuntu24.04）",[21,117837,117838],{},[487,117839,117840],{"href":117840,"rel":117841},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23987],[190,117843,117845],{"id":117844},"_22-普通虚拟机","2.2 普通虚拟机",[217,117847,117849],{"id":117848},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[21,117851,117852],{},[487,117853,117854],{"href":117854,"rel":117855},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23987],[21,117857,117858],{},[24,117859],{"alt":26,"src":117860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[21,117862,117863],{},[24,117864],{"alt":26,"src":117865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[21,117867,117868],{},[24,117869],{"alt":26,"src":117870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[21,117872,117873],{},[24,117874],{"alt":26,"src":117875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[21,117877,117878],{},[24,117879],{"alt":26,"src":117880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[21,117882,117883],{},"内存4G（4096MB）；",[21,117885,117886],{},"CPU给4个核；",[21,117888,117889],{},"硬盘动态分配60G；",[21,117891,117892],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[217,117894,117896],{"id":117895},"_222-安装ubuntu","2.2.2 安装Ubuntu",[21,117898,117899],{},"按照1.1的步骤下载Ubuntu",[21,117901,117902],{},[24,117903],{"alt":26,"src":117904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[21,117906,117907],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[21,117909,117910],{},[24,117911],{"alt":26,"src":117912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[21,117914,117915],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[21,117917,117918],{},[24,117919],{"alt":26,"src":117920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[21,117922,117923,117924,117927],{},"选择“正常安装”(找不到都用Alt+F7)， ",[398,117925,117926],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[21,117929,117930],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[21,117932,117933],{},"将改动写入磁盘吗 继续",[21,117935,117936],{},"选择东八区（shanghai，大致在地图上点一下），继续",[21,117938,117939],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[21,117941,117942],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[21,117944,117945,117946,117949,117950,117953],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[398,117947,117948],{},"除了"," 选不发送系统信息与不升级之外， ",[398,117951,117952],{},"其它"," 都跳过或前进）",[217,117955,117957],{"id":117956},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22121,117959,117961],{"id":117960},"_2231-全屏","2.2.3.1 全屏",[21,117963,117964],{},[24,117965],{"alt":26,"src":117966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[21,117968,117969],{},[24,117970],{"alt":26,"src":117971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22121,117973,117975],{"id":117974},"_2232-文件交换","2.2.3.2 文件交换",[21,117977,117978],{},[24,117979],{"alt":26,"src":117980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22121,117982,117984],{"id":117983},"_2233-新建文本文档","2.2.3.3 新建文本文档",[21,117986,117987],{},[24,117988],{"alt":26,"src":117989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[190,117991,117993],{"id":117992},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[217,117995,117997],{"id":117996},"_231-简介与优缺点","2.3.1 简介与优缺点",[14,117999,118000],{},[17,118001,118002],{},"什么情况下推荐？",[21,118004,118005],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[14,118007,118008],{"start":38},[17,118009,118010,118011],{},"优缺点：",[14,118012,118013,118043],{},[17,118014,118015,118016],{},"优点：",[14,118017,118018,118021,118028,118031,118034,118037,118040],{},[17,118019,118020],{},"WSL2是最好的Linux发行版;(bushi)",[17,118022,118023,118024,118027],{},"性能损耗极低。且比在Windows上跑深度性能 ",[398,118025,118026],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[17,118029,118030],{},"非常方便调用USB设备，可以USB直通;",[17,118032,118033],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[17,118035,118036],{},"非常方便Win与WSL2互相传文件等协同操作;",[17,118038,118039],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[17,118041,118042],{},"非常方便使用Windows的VScode远程开发;",[17,118044,118045,118046],{},"缺点：",[14,118047,118048],{},[17,118049,118050],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[21,118052,118053],{},[24,118054],{"alt":26,"src":118055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[217,118057,118059],{"id":118058},"_232-安装教程","2.3.2 安装教程",[22121,118061,118063],{"id":118062},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[14,118065,118066],{},[17,118067,118068],{},"方法一(图形界面)",[21,118070,118071,118072,24741],{},"用Win+R输入",[88,118073,118074],{},"appwiz.cpl",[21,118076,118077],{},[24,118078],{"alt":26,"src":118079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[21,118081,118082,118083,118086,118087,26594],{},"点击OK进入 ",[398,118084,118085],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[398,118088,118089],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[21,118091,118092],{},[24,118093],{"alt":26,"src":118094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[21,118096,118097,118098,101099,118101,118104],{},"选择 ",[398,118099,118100],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[398,118102,118103],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[21,118106,118107],{},[24,118108],{"alt":26,"src":118109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[14,118111,118112],{"start":38},[17,118113,118114],{},"方法二(命令行)",[82,118116,118120],{"className":118117,"code":118118,"language":118119,"meta":26,"style":26},"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",[88,118121,118122,118127,118132,118137],{"__ignoreMap":26},[91,118123,118124],{"class":93,"line":94},[91,118125,118126],{},"# 开启 Linux 子系统\n",[91,118128,118129],{"class":93,"line":38},[91,118130,118131],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[91,118133,118134],{"class":93,"line":1304},[91,118135,118136],{},"# 开启虚拟机平台\n",[91,118138,118139],{"class":93,"line":1319},[91,118140,118141],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22121,118143,118145],{"id":118144},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[21,118147,118148],{},"用管理员权限打开powershell",[21,118150,118151],{},[24,118152],{"alt":26,"src":118153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[21,118155,118156],{},"升级WSL并设置默认版本为WSL2",[82,118158,118160],{"className":118117,"code":118159,"language":118119,"meta":26,"style":26},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[88,118161,118162,118167,118172,118177],{"__ignoreMap":26},[91,118163,118164],{"class":93,"line":94},[91,118165,118166],{},"# 更新 wsl\n",[91,118168,118169],{"class":93,"line":38},[91,118170,118171],{},"wsl --update\n",[91,118173,118174],{"class":93,"line":1304},[91,118175,118176],{},"# 将 wsl 版本设置为 wsl2\n",[91,118178,118179],{"class":93,"line":1319},[91,118180,118181],{},"wsl --set-default-version 2\n",[22121,118183,118185],{"id":118184},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[14,118187,118188],{},[17,118189,118190],{},"方式一(商店下载)",[21,118192,118193],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[21,118195,118196],{},[24,118197],{"alt":26,"src":118198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[14,118200,118201],{"start":38},[17,118202,118203],{},"方式二(命令行安装)",[82,118205,118207],{"className":118117,"code":118206,"language":118119,"meta":26,"style":26},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[88,118208,118209,118214,118219],{"__ignoreMap":26},[91,118210,118211],{"class":93,"line":94},[91,118212,118213],{},"# 列出可安装的 Linux 版本\n",[91,118215,118216],{"class":93,"line":38},[91,118217,118218],{},"#（需要科学手段）\n",[91,118220,118221],{"class":93,"line":1304},[91,118222,118223],{},"wsl --list --online\n",[21,118225,118226],{},[24,118227],{"alt":26,"src":118228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[21,118230,118231],{},"选择对应发行版并安装",[82,118233,118235],{"className":118117,"code":118234,"language":118119,"meta":26,"style":26},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[88,118236,118237,118242],{"__ignoreMap":26},[91,118238,118239],{"class":93,"line":94},[91,118240,118241],{},"# Ubuntu安装完毕后需要重启系统\n",[91,118243,118244],{"class":93,"line":38},[91,118245,118246],{},"wsl --install -d Ubuntu-24.04\n",[22121,118248,118250],{"id":118249},"_2324-查看系统状态","2.3.2.4 查看系统状态",[82,118252,118254],{"className":118117,"code":118253,"language":118119,"meta":26,"style":26},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[88,118255,118256,118261,118266,118271,118276,118280,118284,118289,118294,118299],{"__ignoreMap":26},[91,118257,118258],{"class":93,"line":94},[91,118259,118260],{},"# 查看 wsl\n",[91,118262,118263],{"class":93,"line":38},[91,118264,118265],{},"wsl -l\n",[91,118267,118268],{"class":93,"line":1304},[91,118269,118270],{},"# 查看 wsl 运行版本或模式\n",[91,118272,118273],{"class":93,"line":1319},[91,118274,118275],{},"wsl -l -v\n",[91,118277,118278],{"class":93,"line":1325},[91,118279,2523],{"emptyLinePlaceholder":175},[91,118281,118282],{"class":93,"line":1339},[91,118283,2523],{"emptyLinePlaceholder":175},[91,118285,118286],{"class":93,"line":1345},[91,118287,118288],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[91,118290,118291],{"class":93,"line":1436},[91,118292,118293],{},"wsl --set-version \u003Cdistro> 2\n",[91,118295,118296],{"class":93,"line":1442},[91,118297,118298],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[91,118300,118301],{"class":93,"line":1454},[91,118302,118303],{},"wsl --unregister \u003Cdistro>\n",[21,118305,118306],{},"输出Version为2即正常",[21,118308,118309],{},[24,118310],{"alt":26,"src":118311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22121,118313,118315],{"id":118314},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[21,118317,118318],{},"直接在Powershell里输入wsl命令进入子系统",[82,118320,118322],{"className":118117,"code":118321,"language":118119,"meta":26,"style":26},"# 进入子系统\nwsl\n",[88,118323,118324,118329],{"__ignoreMap":26},[91,118325,118326],{"class":93,"line":94},[91,118327,118328],{},"# 进入子系统\n",[91,118330,118331],{"class":93,"line":38},[91,118332,118333],{},"wsl\n",[21,118335,118336],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[21,118338,118339],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[21,118341,118342],{},[24,118343],{"alt":26,"src":118344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[217,118346,118348],{"id":118347},"_233-配置各种环境","2.3.3 配置各种环境",[22121,118350,118352],{"id":118351},"_2331-换源","2.3.3.1 换源",[21,118354,118355],{},"(同实体机LINUX，往下找教程)",[22121,118357,118359],{"id":118358},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23033,118361,118363],{"id":118362},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[21,118365,118366],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[21,118368,118369],{},[24,118370],{"alt":26,"src":118371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[21,118373,118374],{},[24,118375],{"alt":26,"src":118376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23033,118378,118380],{"id":118379},"_23322-cuda","2.3.3.2.2 CUDA",[21,118382,118383,118384],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[487,118385,118386],{"href":118386,"rel":118387},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23987],[21,118389,118390,118393],{},[24,118391],{"alt":26,"src":118392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[24,118394],{"alt":26,"src":118395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[21,118397,118398],{},"在下方的网站，选择合适的版本。",[21,118400,118401,118402],{},"WSL2 专属 CUDA 指南：",[487,118403,118404],{"href":118404,"rel":118405},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23987],[21,118407,118408],{},[398,118409,118410],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[21,118412,118413],{},[24,118414],{"alt":26,"src":118415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[21,118417,118418],{},"挨行敲一遍",[21,118420,118421],{},[24,118422],{"alt":26,"src":118423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[21,118425,118426,118427,118430],{},"敲完后，输入",[88,118428,118429],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[21,118432,118433],{},[24,118434],{"alt":26,"src":118435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[21,118437,118438,118439,118442],{},"（请详看下方教程的",[398,118440,118441],{},"安装CUDA的配置环境来看","如何配置环境）",[23033,118444,118446],{"id":118445},"_23323-cudnn","2.3.3.2.3 cuDNN",[21,118448,118355],{},[21,118450,118451],{},[24,118452],{"alt":26,"src":118453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22121,118455,118457],{"id":118456},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[21,118459,118460],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[21,118462,118463],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[21,118465,118466],{},[24,118467],{"alt":26,"src":118468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[21,118470,118471],{},"连接WSL2",[21,118473,118474],{},[24,118475],{"alt":26,"src":118476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[21,118478,118479],{},"远程开发成功。",[21,118481,118482],{},[24,118483],{"alt":26,"src":118484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[21,118486,118487],{},[24,118488],{"alt":26,"src":118489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[21,118491,118492],{},[24,118493],{"alt":26,"src":118494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22121,118496,118498],{"id":118497},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[21,118500,118501],{},[24,118502],{"alt":26,"src":118503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22121,118505,118507],{"id":118506},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[82,118509,118511],{"className":117377,"code":118510,"language":117379,"meta":26,"style":26},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[88,118512,118513,118521,118529,118540,118544],{"__ignoreMap":26},[91,118514,118515,118517,118519],{"class":93,"line":94},[91,118516,24699],{"class":97},[91,118518,117398],{"class":101},[91,118520,26364],{"class":101},[91,118522,118523,118525,118527],{"class":93,"line":38},[91,118524,24699],{"class":97},[91,118526,117398],{"class":101},[91,118528,117414],{"class":101},[91,118530,118531,118533,118535,118537],{"class":93,"line":1304},[91,118532,24699],{"class":97},[91,118534,117398],{"class":101},[91,118536,23956],{"class":101},[91,118538,118539],{"class":101}," mesa-utils\n",[91,118541,118542],{"class":93,"line":1319},[91,118543,2523],{"emptyLinePlaceholder":175},[91,118545,118546],{"class":93,"line":1325},[91,118547,118548],{"class":308},"#然后重启wsl2即可\n",[168,118550,118551],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":26,"searchDepth":38,"depth":38,"links":118553},[118554,118555,118560],{"id":117831,"depth":38,"text":117832},{"id":117844,"depth":38,"text":117845,"children":118556},[118557,118558,118559],{"id":117848,"depth":1304,"text":117849},{"id":117895,"depth":1304,"text":117896},{"id":117956,"depth":1304,"text":117957},{"id":117992,"depth":38,"text":117993,"children":118561},[118562,118563,118564],{"id":117996,"depth":1304,"text":117997},{"id":118058,"depth":1304,"text":118059},{"id":118347,"depth":1304,"text":118348},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117823,"description":23500},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118571,"title":118572,"body":118573,"description":23500,"extension":173,"meta":121509,"navigation":175,"path":121510,"seo":121511,"stem":121512,"__hash__":121513},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118574,"toc":121481},[118575,118578,118582,118588,118592,118598,118602,118790,118793,118798,118802,118806,118809,118812,118818,118823,118826,118829,118834,118867,118872,118876,118953,118956,118961,118965,118968,119007,119010,119019,119037,119042,119049,119166,119171,119174,119201,119206,119210,119219,119269,119276,119280,119283,119297,119304,119338,119343,119347,119370,119373,119378,119382,119385,119388,119391,119433,119437,119440,119443,119484,119488,119492,119495,119500,119505,119508,119531,119534,119542,119547,119550,119555,119560,119563,119568,119572,119577,119600,119605,119667,119675,119680,119685,119688,119693,119696,119701,119706,119724,119729,119735,119740,119754,119758,119761,119764,119767,119810,119813,119818,119919,119922,119927,119931,119935,119972,119976,119980,119984,120030,120034,120079,120083,120090,120098,120153,120156,120233,120236,120259,120263,120266,120271,120276,120284,120287,120292,120297,120302,120305,120310,120319,120322,120327,120330,120401,120406,120409,120414,120417,120422,120425,120430,120433,120438,120443,120446,120521,120524,120537,120542,120545,120559,120562,120591,120596,120625,120628,120633,120637,120642,120651,120654,120659,120662,120667,120670,120673,120678,120681,120686,120691,120694,120699,120702,120827,120832,120862,120865,120870,120875,120892,120895,120938,120941,120968,120973,120986,121129,121133,121138,121152,121155,121206,121209,121239,121242,121258,121263,121277,121280,121347,121352,121361,121366,121369,121381,121386,121393,121417,121420,121425,121428,121447,121452,121459,121471,121478],[10,118576,118572],{"id":118577},"_3-安装必备配置",[190,118579,118581],{"id":118580},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[82,118583,118586],{"className":118584,"code":118585,"language":5310},[5308],"  打开下方网站（注意，该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",[88,118587,118585],{"__ignoreMap":26},[217,118589,118591],{"id":118590},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[82,118593,118596],{"className":118594,"code":118595,"language":5310},[5308],"  输入以下命令\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",[88,118597,118595],{"__ignoreMap":26},[217,118599,118601],{"id":118600},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[82,118603,118607],{"className":118604,"code":118605,"language":118606,"meta":26,"style":26},"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",[88,118608,118609,118617,118628,118640,118654,118658,118668,118673,118677,118681,118686,118690,118702,118706,118711,118715,118726,118730,118746,118750,118761,118765,118770,118774,118782],{"__ignoreMap":26},[91,118610,118611,118613,118615],{"class":93,"line":94},[91,118612,24699],{"class":97},[91,118614,117398],{"class":101},[91,118616,26364],{"class":101},[91,118618,118619,118621,118623,118625],{"class":93,"line":38},[91,118620,24699],{"class":97},[91,118622,117398],{"class":101},[91,118624,23956],{"class":101},[91,118626,118627],{"class":101}," vim\n",[91,118629,118630,118632,118635,118637],{"class":93,"line":1304},[91,118631,24699],{"class":97},[91,118633,118634],{"class":101}," rm",[91,118636,25447],{"class":105},[91,118638,118639],{"class":101}," \u002Fetc\u002Fapt\u002Fsources.list\n",[91,118641,118642,118644,118646,118648,118651],{"class":93,"line":1319},[91,118643,24699],{"class":97},[91,118645,118634],{"class":101},[91,118647,25447],{"class":105},[91,118649,118650],{"class":101}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[91,118652,118653],{"class":105},"**\n",[91,118655,118656],{"class":93,"line":1325},[91,118657,2523],{"emptyLinePlaceholder":175},[91,118659,118660,118662,118665],{"class":93,"line":1339},[91,118661,24699],{"class":97},[91,118663,118664],{"class":101}," vim",[91,118666,118667],{"class":101}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[91,118669,118670],{"class":93,"line":1345},[91,118671,118672],{"class":101},"```\n",[91,118674,118675],{"class":93,"line":1436},[91,118676,2523],{"emptyLinePlaceholder":175},[91,118678,118679],{"class":93,"line":1442},[91,118680,2523],{"emptyLinePlaceholder":175},[91,118682,118683],{"class":93,"line":1454},[91,118684,118685],{"class":97},"选择好Ubuntu版本后，复制下方的内容。\n",[91,118687,118688],{"class":93,"line":1736},[91,118689,2523],{"emptyLinePlaceholder":175},[91,118691,118692,118694,118697,118700],{"class":93,"line":1741},[91,118693,475],{"class":153},[91,118695,118696],{"class":101},"[](",[91,118698,118699],{"class":97},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[91,118701,257],{"class":101},[91,118703,118704],{"class":93,"line":1747},[91,118705,2523],{"emptyLinePlaceholder":175},[91,118707,118708],{"class":93,"line":1752},[91,118709,118710],{"class":97},"粘贴进去\n",[91,118712,118713],{"class":93,"line":1766},[91,118714,2523],{"emptyLinePlaceholder":175},[91,118716,118717,118719,118721,118724],{"class":93,"line":1771},[91,118718,475],{"class":153},[91,118720,118696],{"class":101},[91,118722,118723],{"class":97},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[91,118725,257],{"class":101},[91,118727,118728],{"class":93,"line":1777},[91,118729,2523],{"emptyLinePlaceholder":175},[91,118731,118732,118735,118738,118741,118743],{"class":93,"line":1798},[91,118733,118734],{"class":97},"按一下ESC，然后英文冒号，输入",[91,118736,118737],{"class":101}," `",[91,118739,118740],{"class":97},":wq!",[91,118742,1221],{"class":101},[91,118744,118745],{"class":97},"然后回车\n",[91,118747,118748],{"class":93,"line":1803},[91,118749,2523],{"emptyLinePlaceholder":175},[91,118751,118752,118754,118756,118759],{"class":93,"line":1817},[91,118753,475],{"class":153},[91,118755,118696],{"class":101},[91,118757,118758],{"class":97},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[91,118760,257],{"class":101},[91,118762,118763],{"class":93,"line":1822},[91,118764,2523],{"emptyLinePlaceholder":175},[91,118766,118767],{"class":93,"line":1851},[91,118768,118769],{"class":97},"输入以下命令\n",[91,118771,118772],{"class":93,"line":1856},[91,118773,2523],{"emptyLinePlaceholder":175},[91,118775,118776,118779],{"class":93,"line":1873},[91,118777,118778],{"class":101},"```",[91,118780,118781],{"class":97},"Bash\n",[91,118783,118784,118786,118788],{"class":93,"line":1878},[91,118785,24699],{"class":97},[91,118787,117398],{"class":101},[91,118789,26364],{"class":101},[21,118791,118792],{},"这里被替换成对应学校则成功",[21,118794,118795],{},[24,118796],{"alt":26,"src":118797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[190,118799,118801],{"id":118800},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[217,118803,118805],{"id":118804},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[21,118807,118808],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[21,118810,118811],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[21,118813,118814],{},[487,118815,118816],{"href":118816,"rel":118817},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23987],[21,118819,118820],{},[24,118821],{"alt":26,"src":118822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[21,118824,118825],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[21,118827,118828],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[21,118830,118831],{},[24,118832],{"alt":26,"src":118833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[82,118835,118837],{"className":117377,"code":118836,"language":117379,"meta":26,"style":26},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[88,118838,118839,118844,118851,118856],{"__ignoreMap":26},[91,118840,118841],{"class":93,"line":94},[91,118842,118843],{"class":308},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[91,118845,118846,118848],{"class":93,"line":38},[91,118847,101357],{"class":105},[91,118849,118850],{"class":101}," ~\u002FDownloads\n",[91,118852,118853],{"class":93,"line":1304},[91,118854,118855],{"class":308},"#下方chrome安装包名不一定是这个，根据名字来看\n",[91,118857,118858,118860,118862,118864],{"class":93,"line":1319},[91,118859,24699],{"class":97},[91,118861,117398],{"class":101},[91,118863,23956],{"class":101},[91,118865,118866],{"class":101}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[21,118868,118869],{},[24,118870],{"alt":26,"src":118871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[217,118873,118875],{"id":118874},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[82,118877,118879],{"className":117377,"code":118878,"language":117379,"meta":26,"style":26},"# 老版\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",[88,118880,118881,118886,118894,118905,118910,118914,118919,118929,118937,118948],{"__ignoreMap":26},[91,118882,118883],{"class":93,"line":94},[91,118884,118885],{"class":308},"# 老版\n",[91,118887,118888,118890,118892],{"class":93,"line":38},[91,118889,24699],{"class":97},[91,118891,117398],{"class":101},[91,118893,26364],{"class":101},[91,118895,118896,118898,118900,118902],{"class":93,"line":1304},[91,118897,24699],{"class":97},[91,118899,117398],{"class":101},[91,118901,23956],{"class":101},[91,118903,118904],{"class":101}," neofetch\n",[91,118906,118907],{"class":93,"line":1319},[91,118908,118909],{"class":97},"neofetch\n",[91,118911,118912],{"class":93,"line":1325},[91,118913,2523],{"emptyLinePlaceholder":175},[91,118915,118916],{"class":93,"line":1339},[91,118917,118918],{"class":308},"# 新版\n",[91,118920,118921,118923,118926],{"class":93,"line":1345},[91,118922,24699],{"class":97},[91,118924,118925],{"class":101}," add-apt-repository",[91,118927,118928],{"class":101}," ppa:zhangsongcui3371\u002Ffastfetch\n",[91,118930,118931,118933,118935],{"class":93,"line":1436},[91,118932,24699],{"class":97},[91,118934,117398],{"class":101},[91,118936,26364],{"class":101},[91,118938,118939,118941,118943,118945],{"class":93,"line":1442},[91,118940,24699],{"class":97},[91,118942,117398],{"class":101},[91,118944,23956],{"class":101},[91,118946,118947],{"class":101}," fastfetch\n",[91,118949,118950],{"class":93,"line":1454},[91,118951,118952],{"class":97},"fastfetch\n",[21,118954,118955],{},"这里显示，一共有3162个debian的程序，7个snap程序",[21,118957,118958],{},[24,118959],{"alt":26,"src":118960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[217,118962,118964],{"id":118963},"_323-移除snap应用","3.2.3 移除snap应用",[21,118966,118967],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[82,118969,118971],{"className":117377,"code":118970,"language":117379,"meta":26,"style":26},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[88,118972,118973,118985,118996],{"__ignoreMap":26},[91,118974,118975,118977,118979,118982],{"class":93,"line":94},[91,118976,24699],{"class":97},[91,118978,26634],{"class":101},[91,118980,118981],{"class":101}," disable",[91,118983,118984],{"class":101}," snapd.service\n",[91,118986,118987,118989,118991,118993],{"class":93,"line":38},[91,118988,24699],{"class":97},[91,118990,26634],{"class":101},[91,118992,118981],{"class":101},[91,118994,118995],{"class":101}," snapd.socket\n",[91,118997,118998,119000,119002,119004],{"class":93,"line":1304},[91,118999,24699],{"class":97},[91,119001,26634],{"class":101},[91,119003,118981],{"class":101},[91,119005,119006],{"class":101}," snapd.seeded.service\n",[21,119008,119009],{},"然后查看snap应用列表",[21,119011,119012,119013,119018],{},"根据你安装的选择不同（最小安装或普通安装），有",[487,119014,119017],{"href":119015,"rel":119016},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23987],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[82,119020,119022],{"className":117377,"code":119021,"language":117379,"meta":26,"style":26},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[88,119023,119024,119029],{"__ignoreMap":26},[91,119025,119026],{"class":93,"line":94},[91,119027,119028],{"class":308},"# 查询当前系统上snap安装了哪些app\n",[91,119030,119031,119034],{"class":93,"line":38},[91,119032,119033],{"class":97},"snap",[91,119035,119036],{"class":101}," list\n",[21,119038,119039],{},[24,119040],{"alt":26,"src":119041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[21,119043,119044,119045,119048],{},"卸载掉图中所有应用，按照 ",[398,119046,119047],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[82,119050,119052],{"className":117377,"code":119051,"language":117379,"meta":26,"style":26},"#移除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",[88,119053,119054,119059,119071,119076,119087,119092,119103,119108,119119,119124,119128,119133,119144,119155],{"__ignoreMap":26},[91,119055,119056],{"class":93,"line":94},[91,119057,119058],{"class":308},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[91,119060,119061,119063,119066,119068],{"class":93,"line":38},[91,119062,24699],{"class":97},[91,119064,119065],{"class":101}," snap",[91,119067,26201],{"class":101},[91,119069,119070],{"class":101}," snap-store\n",[91,119072,119073],{"class":93,"line":1304},[91,119074,119075],{"class":308},"#移除firefox浏览器\n",[91,119077,119078,119080,119082,119084],{"class":93,"line":1319},[91,119079,24699],{"class":97},[91,119081,119065],{"class":101},[91,119083,26201],{"class":101},[91,119085,119086],{"class":101}," firefox\n",[91,119088,119089],{"class":93,"line":1325},[91,119090,119091],{"class":308},"#移除gnome-42-2204\n",[91,119093,119094,119096,119098,119100],{"class":93,"line":1339},[91,119095,24699],{"class":97},[91,119097,119065],{"class":101},[91,119099,26201],{"class":101},[91,119101,119102],{"class":101}," gnome-42-2204\n",[91,119104,119105],{"class":93,"line":1345},[91,119106,119107],{"class":308},"#移除gtk-common-themes\n",[91,119109,119110,119112,119114,119116],{"class":93,"line":1436},[91,119111,24699],{"class":97},[91,119113,119065],{"class":101},[91,119115,26201],{"class":101},[91,119117,119118],{"class":101}," gtk-common-themes\n",[91,119120,119121],{"class":93,"line":1442},[91,119122,119123],{"class":308},"#移除其它...\n",[91,119125,119126],{"class":93,"line":1454},[91,119127,2797],{"class":250},[91,119129,119130],{"class":93,"line":1736},[91,119131,119132],{"class":308},"#移除core22,bare以及snapd\n",[91,119134,119135,119137,119139,119141],{"class":93,"line":1741},[91,119136,24699],{"class":97},[91,119138,119065],{"class":101},[91,119140,26201],{"class":101},[91,119142,119143],{"class":101}," core22\n",[91,119145,119146,119148,119150,119152],{"class":93,"line":1747},[91,119147,24699],{"class":97},[91,119149,119065],{"class":101},[91,119151,26201],{"class":101},[91,119153,119154],{"class":101}," bare\n",[91,119156,119157,119159,119161,119163],{"class":93,"line":1752},[91,119158,24699],{"class":97},[91,119160,119065],{"class":101},[91,119162,26201],{"class":101},[91,119164,119165],{"class":101}," snapd\n",[21,119167,119168],{},[24,119169],{"alt":26,"src":119170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[21,119172,119173],{},"输入以下命令查看是否还有snap包",[82,119175,119177],{"className":117377,"code":119176,"language":117379,"meta":26,"style":26},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[88,119178,119179,119185,119189,119193,119197],{"__ignoreMap":26},[91,119180,119181,119183],{"class":93,"line":94},[91,119182,119033],{"class":97},[91,119184,119036],{"class":101},[91,119186,119187],{"class":93,"line":38},[91,119188,118885],{"class":308},[91,119190,119191],{"class":93,"line":1304},[91,119192,118909],{"class":97},[91,119194,119195],{"class":93,"line":1319},[91,119196,118918],{"class":308},[91,119198,119199],{"class":93,"line":1325},[91,119200,118952],{"class":97},[21,119202,119203],{},[24,119204],{"alt":26,"src":119205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[217,119207,119209],{"id":119208},"_324-移除snap","3.2.4 移除snap",[21,119211,119212,119213,119218],{},"在删除掉",[487,119214,119217],{"href":119215,"rel":119216},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23987],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[82,119220,119222],{"className":117377,"code":119221,"language":117379,"meta":26,"style":26}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[88,119223,119224,119229,119242,119247,119258],{"__ignoreMap":26},[91,119225,119226],{"class":93,"line":94},[91,119227,119228],{"class":308}," #使用apt移除掉snap\n",[91,119230,119231,119233,119235,119237,119240],{"class":93,"line":38},[91,119232,24699],{"class":97},[91,119234,117398],{"class":101},[91,119236,117706],{"class":101},[91,119238,119239],{"class":105}," --purge",[91,119241,119165],{"class":101},[91,119243,119244],{"class":93,"line":1304},[91,119245,119246],{"class":308},"#移除snapd的一些目录\n",[91,119248,119249,119251,119253,119255],{"class":93,"line":1319},[91,119250,24699],{"class":97},[91,119252,118634],{"class":101},[91,119254,25447],{"class":105},[91,119256,119257],{"class":101}," \u002Fvar\u002Fcache\u002Fsnapd\n",[91,119259,119260,119262,119264,119266],{"class":93,"line":1325},[91,119261,24699],{"class":97},[91,119263,118634],{"class":101},[91,119265,25447],{"class":105},[91,119267,119268],{"class":101}," ~\u002Fsnap\n",[21,119270,119271,119272,119275],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[88,119273,119274],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[217,119277,119279],{"id":119278},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[21,119281,119282],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[82,119284,119286],{"className":117377,"code":119285,"language":117379,"meta":26,"style":26},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[88,119287,119288],{"__ignoreMap":26},[91,119289,119290,119292,119294],{"class":93,"line":94},[91,119291,24699],{"class":97},[91,119293,118664],{"class":101},[91,119295,119296],{"class":101}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[21,119298,119299,119300,119303],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[88,119301,119302],{},":wq"," 回车",[82,119305,119307],{"className":117377,"code":119306,"language":117379,"meta":26,"style":26},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[88,119308,119309,119316,119330],{"__ignoreMap":26},[91,119310,119311,119314],{"class":93,"line":94},[91,119312,119313],{"class":97},"Package:",[91,119315,119165],{"class":101},[91,119317,119318,119321,119324,119327],{"class":93,"line":38},[91,119319,119320],{"class":97},"Pin:",[91,119322,119323],{"class":101}," release",[91,119325,119326],{"class":101}," a=",[91,119328,119329],{"class":105},"*\n",[91,119331,119332,119335],{"class":93,"line":1304},[91,119333,119334],{"class":97},"Pin-Priority:",[91,119336,119337],{"class":105}," -10\n",[21,119339,119340],{},[24,119341],{"alt":26,"src":119342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[217,119344,119346],{"id":119345},"_326-测试是否成功","3.2.6 测试是否成功",[82,119348,119350],{"className":117377,"code":119349,"language":117379,"meta":26,"style":26},"sudo apt update\nsudo apt install firefox\n",[88,119351,119352,119360],{"__ignoreMap":26},[91,119353,119354,119356,119358],{"class":93,"line":94},[91,119355,24699],{"class":97},[91,119357,117398],{"class":101},[91,119359,26364],{"class":101},[91,119361,119362,119364,119366,119368],{"class":93,"line":38},[91,119363,24699],{"class":97},[91,119365,117398],{"class":101},[91,119367,23956],{"class":101},[91,119369,119086],{"class":101},[21,119371,119372],{},"这里提示snapd无法被安装，就证明成功了",[21,119374,119375],{},[24,119376],{"alt":26,"src":119377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[217,119379,119381],{"id":119380},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[21,119383,119384],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[21,119386,119387],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[21,119389,119390],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[82,119392,119394],{"className":117377,"code":119393,"language":117379,"meta":26,"style":26},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[88,119395,119396,119401,119410,119415,119423],{"__ignoreMap":26},[91,119397,119398],{"class":93,"line":94},[91,119399,119400],{"class":308},"# 添加Mozilla提供的源\n",[91,119402,119403,119405,119407],{"class":93,"line":38},[91,119404,24699],{"class":97},[91,119406,118925],{"class":101},[91,119408,119409],{"class":101}," ppa:mozillateam\u002Fppa\n",[91,119411,119412],{"class":93,"line":1304},[91,119413,119414],{"class":308},"# 安装Firefox\n",[91,119416,119417,119419,119421],{"class":93,"line":1319},[91,119418,24699],{"class":97},[91,119420,117398],{"class":101},[91,119422,26364],{"class":101},[91,119424,119425,119427,119429,119431],{"class":93,"line":1325},[91,119426,24699],{"class":97},[91,119428,117398],{"class":101},[91,119430,23956],{"class":101},[91,119432,119086],{"class":101},[217,119434,119436],{"id":119435},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[21,119438,119439],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[21,119441,119442],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[82,119444,119446],{"className":117377,"code":119445,"language":117379,"meta":26,"style":26},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[88,119447,119448,119453,119463,119471,119475],{"__ignoreMap":26},[91,119449,119450],{"class":93,"line":94},[91,119451,119452],{"class":308},"#删掉禁止安装snap的配置文件\n",[91,119454,119455,119457,119459,119461],{"class":93,"line":38},[91,119456,24699],{"class":97},[91,119458,118634],{"class":101},[91,119460,25447],{"class":105},[91,119462,119296],{"class":101},[91,119464,119465,119467,119469],{"class":93,"line":1304},[91,119466,24699],{"class":97},[91,119468,117398],{"class":101},[91,119470,26364],{"class":101},[91,119472,119473],{"class":93,"line":1319},[91,119474,2523],{"emptyLinePlaceholder":175},[91,119476,119477,119479,119481],{"class":93,"line":1325},[91,119478,24699],{"class":97},[91,119480,117398],{"class":101},[91,119482,119483],{"class":101}," dist-update\n",[190,119485,119487],{"id":119486},"_33-中文输入法","3.3 中文输入法",[217,119489,119491],{"id":119490},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[21,119493,119494],{},"官网下载搜狗输入法",[21,119496,119497],{},[24,119498],{"alt":26,"src":119499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[21,119501,119502],{},[24,119503],{"alt":26,"src":119504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[21,119506,119507],{},"打开终端输入如下",[82,119509,119511],{"className":117377,"code":119510,"language":117379,"meta":26,"style":26},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[88,119512,119513,119520],{"__ignoreMap":26},[91,119514,119515,119517],{"class":93,"line":94},[91,119516,101357],{"class":105},[91,119518,119519],{"class":101}," ~\u002FDownloads\u002F\n",[91,119521,119522,119524,119526,119528],{"class":93,"line":38},[91,119523,24699],{"class":97},[91,119525,117398],{"class":101},[91,119527,23956],{"class":101},[91,119529,119530],{"class":101}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[21,119532,119533],{},"打开Fcitx",[21,119535,119536,119539],{},[24,119537],{"alt":26,"src":119538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[24,119540],{"alt":26,"src":119541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[21,119543,119544],{},[24,119545],{"alt":26,"src":119546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[21,119548,119549],{},"添加搜狗输入法",[21,119551,119552],{},[24,119553],{"alt":26,"src":119554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[21,119556,119557],{},[24,119558],{"alt":26,"src":119559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[21,119561,119562],{},"将搜狗输入法设置为唯一输入法",[21,119564,119565],{},[24,119566],{"alt":26,"src":119567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[217,119569,119571],{"id":119570},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[14,119573,119574],{},[17,119575,119576],{},"卸载旧输入法",[82,119578,119580],{"className":118604,"code":119579,"language":118606,"meta":26,"style":26},"sudo apt purge fcitx* ibus*\n",[88,119581,119582],{"__ignoreMap":26},[91,119583,119584,119586,119588,119590,119593,119595,119598],{"class":93,"line":94},[91,119585,24699],{"class":97},[91,119587,117398],{"class":101},[91,119589,117739],{"class":101},[91,119591,119592],{"class":101}," fcitx",[91,119594,704],{"class":105},[91,119596,119597],{"class":101}," ibus",[91,119599,119329],{"class":105},[14,119601,119602],{"start":38},[17,119603,119604],{},"安装Fcitx5",[82,119606,119608],{"className":117377,"code":119607,"language":117379,"meta":26,"style":26},"# 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",[88,119609,119610,119615,119629,119633,119638,119647,119655],{"__ignoreMap":26},[91,119611,119612],{"class":93,"line":94},[91,119613,119614],{"class":308},"# Ubuntu22.04及以上、Debian12及以上\n",[91,119616,119617,119619,119621,119623,119626],{"class":93,"line":38},[91,119618,24699],{"class":97},[91,119620,117398],{"class":101},[91,119622,23956],{"class":101},[91,119624,119625],{"class":101}," fcitx5",[91,119627,119628],{"class":101}," fcitx5-chinese-addons\n",[91,119630,119631],{"class":93,"line":1304},[91,119632,2523],{"emptyLinePlaceholder":175},[91,119634,119635],{"class":93,"line":1319},[91,119636,119637],{"class":308},"# Ubuntu20.04\n",[91,119639,119640,119642,119644],{"class":93,"line":1325},[91,119641,24699],{"class":97},[91,119643,118925],{"class":101},[91,119645,119646],{"class":101}," ppa:zhsj\u002Ffcitx5\n",[91,119648,119649,119651,119653],{"class":93,"line":1339},[91,119650,24699],{"class":97},[91,119652,117398],{"class":101},[91,119654,26364],{"class":101},[91,119656,119657,119659,119661,119663,119665],{"class":93,"line":1345},[91,119658,24699],{"class":97},[91,119660,117398],{"class":101},[91,119662,23956],{"class":101},[91,119664,119625],{"class":101},[91,119666,119628],{"class":101},[14,119668,119669,119672],{"start":1304},[17,119670,119671],{},"Reboot System",[17,119673,119674],{},"启动Fcitx5",[21,119676,119677],{},[24,119678],{"alt":26,"src":119679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[14,119681,119682],{"start":1325},[17,119683,119684],{},"修改一些设置",[21,119686,119687],{},"将Pinyin和Keyboard - English US加入到左边。",[21,119689,119690],{},[24,119691],{"alt":26,"src":119692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[21,119694,119695],{},"添加快捷键以便于更好切换中英文",[21,119697,119698],{},[24,119699],{"alt":26,"src":119700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[14,119702,119703],{"start":1339},[17,119704,119705],{},"重启",[82,119707,119709],{"className":118604,"code":119708,"language":118606,"meta":26,"style":26},"sudo shutdown -r now\n",[88,119710,119711],{"__ignoreMap":26},[91,119712,119713,119715,119718,119721],{"class":93,"line":94},[91,119714,24699],{"class":97},[91,119716,119717],{"class":101}," shutdown",[91,119719,119720],{"class":105}," -r",[91,119722,119723],{"class":101}," now\n",[14,119725,119726],{"start":1345},[17,119727,119728],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[21,119730,119731],{},[487,119732,119733],{"href":119733,"rel":119734},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23987],[14,119736,119737],{"start":1436},[17,119738,119739],{},"再重启",[82,119741,119742],{"className":118604,"code":119708,"language":118606,"meta":26,"style":26},[88,119743,119744],{"__ignoreMap":26},[91,119745,119746,119748,119750,119752],{"class":93,"line":94},[91,119747,24699],{"class":97},[91,119749,119717],{"class":101},[91,119751,119720],{"class":105},[91,119753,119723],{"class":101},[190,119755,119757],{"id":119756},"_34-pip3源替换","3.4 pip3源替换",[21,119759,119760],{},"非Debian系发行版需要做。",[21,119762,119763],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[21,119765,119766],{},"使用dnf的系统也可能不用做。",[82,119768,119770],{"className":117377,"code":119769,"language":117379,"meta":26,"style":26},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[88,119771,119772,119777,119784,119789,119794],{"__ignoreMap":26},[91,119773,119774],{"class":93,"line":94},[91,119775,119776],{"class":308},"# 检查是否已安装 pip\n",[91,119778,119779,119782],{"class":93,"line":38},[91,119780,119781],{"class":97},"pip3",[91,119783,26415],{"class":105},[91,119785,119786],{"class":93,"line":1304},[91,119787,119788],{"class":308},"# 如果未安装，先安装 pip3（见下方）\n",[91,119790,119791],{"class":93,"line":1319},[91,119792,119793],{"class":308},"# 配置 pip 使用清华源\n",[91,119795,119796,119798,119801,119804,119807],{"class":93,"line":1325},[91,119797,119781],{"class":97},[91,119799,119800],{"class":101}," config",[91,119802,119803],{"class":101}," set",[91,119805,119806],{"class":101}," global.index-url",[91,119808,119809],{"class":101}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[21,119811,119812],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[21,119814,119815],{},[24,119816],{"alt":26,"src":119817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[82,119819,119821],{"className":117377,"code":119820,"language":117379,"meta":26,"style":26},"#安装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",[88,119822,119823,119828,119836,119847,119851,119856,119875,119879,119884,119896,119900,119905],{"__ignoreMap":26},[91,119824,119825],{"class":93,"line":94},[91,119826,119827],{"class":308},"#安装pip3\n",[91,119829,119830,119832,119834],{"class":93,"line":38},[91,119831,24699],{"class":97},[91,119833,117398],{"class":101},[91,119835,26364],{"class":101},[91,119837,119838,119840,119842,119844],{"class":93,"line":1304},[91,119839,24699],{"class":97},[91,119841,26198],{"class":101},[91,119843,23956],{"class":101},[91,119845,119846],{"class":101}," python3-pip\n",[91,119848,119849],{"class":93,"line":1319},[91,119850,2523],{"emptyLinePlaceholder":175},[91,119852,119853],{"class":93,"line":1325},[91,119854,119855],{"class":308},"#更新pip3\n",[91,119857,119858,119860,119862,119864,119866,119868,119871,119873],{"class":93,"line":1339},[91,119859,100960],{"class":97},[91,119861,100963],{"class":105},[91,119863,100986],{"class":101},[91,119865,23956],{"class":101},[91,119867,160],{"class":105},[91,119869,119870],{"class":101}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[91,119872,100991],{"class":105},[91,119874,100994],{"class":101},[91,119876,119877],{"class":93,"line":1345},[91,119878,2523],{"emptyLinePlaceholder":175},[91,119880,119881],{"class":93,"line":1436},[91,119882,119883],{"class":308},"#设置pip源为清华源\n",[91,119885,119886,119888,119890,119892,119894],{"class":93,"line":1442},[91,119887,119781],{"class":97},[91,119889,119800],{"class":101},[91,119891,119803],{"class":101},[91,119893,119806],{"class":101},[91,119895,119809],{"class":101},[91,119897,119898],{"class":93,"line":1454},[91,119899,2523],{"emptyLinePlaceholder":175},[91,119901,119902],{"class":93,"line":1736},[91,119903,119904],{"class":308},"#测试\n",[91,119906,119907,119909,119911,119913,119915,119917],{"class":93,"line":1741},[91,119908,100960],{"class":97},[91,119910,100963],{"class":105},[91,119912,100986],{"class":101},[91,119914,23956],{"class":101},[91,119916,100991],{"class":105},[91,119918,100994],{"class":101},[21,119920,119921],{},"成功的话，会看到Looking后面是tsinghua字样。",[21,119923,119924],{},[24,119925],{"alt":26,"src":119926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[190,119928,119930],{"id":119929},"_35-显卡驱动安装","3.5 显卡驱动安装",[217,119932,119934],{"id":119933},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[82,119936,119938],{"className":118604,"code":119937,"language":118606,"meta":26,"style":26},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[88,119939,119940,119945,119960,119965],{"__ignoreMap":26},[91,119941,119942],{"class":93,"line":94},[91,119943,119944],{"class":308},"# 如果是使用apt安装的驱动\n",[91,119946,119947,119949,119951,119953,119955,119958],{"class":93,"line":38},[91,119948,24699],{"class":97},[91,119950,26198],{"class":101},[91,119952,26201],{"class":101},[91,119954,119239],{"class":105},[91,119956,119957],{"class":101}," nvidia",[91,119959,119329],{"class":105},[91,119961,119962],{"class":93,"line":1304},[91,119963,119964],{"class":308},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[91,119966,119967,119969],{"class":93,"line":1319},[91,119968,24699],{"class":97},[91,119970,119971],{"class":101}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[217,119973,119975],{"id":119974},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22121,119977,119979],{"id":119978},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23033,119981,119983],{"id":119982},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[82,119985,119987],{"className":118604,"code":119986,"language":118606,"meta":26,"style":26},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[88,119988,119989,119994,120005,120010,120020,120025],{"__ignoreMap":26},[91,119990,119991],{"class":93,"line":94},[91,119992,119993],{"class":308},"# 安装英伟达驱动\n",[91,119995,119996,119998,120000,120002],{"class":93,"line":38},[91,119997,24699],{"class":97},[91,119999,117398],{"class":101},[91,120001,23956],{"class":101},[91,120003,120004],{"class":101}," nvidia-driver-版本号\n",[91,120006,120007],{"class":93,"line":1304},[91,120008,120009],{"class":308},"# 重启 \n",[91,120011,120012,120014,120016,120018],{"class":93,"line":1319},[91,120013,24699],{"class":97},[91,120015,119717],{"class":101},[91,120017,119720],{"class":105},[91,120019,119723],{"class":101},[91,120021,120022],{"class":93,"line":1325},[91,120023,120024],{"class":308},"# 检查驱动是否安装成功\n",[91,120026,120027],{"class":93,"line":1339},[91,120028,120029],{"class":97},"nvidia-smi\n",[23033,120031,120033],{"id":120032},"_35212-debian","3.5.2.1.2 Debian",[82,120035,120037],{"className":118604,"code":120036,"language":118606,"meta":26,"style":26},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[88,120038,120039,120043,120057,120061,120071,120075],{"__ignoreMap":26},[91,120040,120041],{"class":93,"line":94},[91,120042,119993],{"class":308},[91,120044,120045,120047,120049,120051,120054],{"class":93,"line":38},[91,120046,24699],{"class":97},[91,120048,117398],{"class":101},[91,120050,23956],{"class":101},[91,120052,120053],{"class":101}," nvidia-driver",[91,120055,120056],{"class":101}," nvidia-settings\n",[91,120058,120059],{"class":93,"line":1304},[91,120060,120009],{"class":308},[91,120062,120063,120065,120067,120069],{"class":93,"line":1319},[91,120064,24699],{"class":97},[91,120066,119717],{"class":101},[91,120068,119720],{"class":105},[91,120070,119723],{"class":101},[91,120072,120073],{"class":93,"line":1325},[91,120074,120024],{"class":308},[91,120076,120077],{"class":93,"line":1339},[91,120078,120029],{"class":97},[22121,120080,120082],{"id":120081},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[21,120084,120085,120086,120089],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[398,120087,120088],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[21,120091,120092,120093],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23677,120094,120095],{},[398,120096,120097],{},"（也可以不禁用桌面环境，直接进行下一步。）",[82,120099,120101],{"className":118604,"code":120100,"language":118606,"meta":26,"style":26},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[88,120102,120103,120108,120118,120123,120136,120141],{"__ignoreMap":26},[91,120104,120105],{"class":93,"line":94},[91,120106,120107],{"class":308},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[91,120109,120110,120112,120115],{"class":93,"line":38},[91,120111,24699],{"class":97},[91,120113,120114],{"class":101}," telinit",[91,120116,120117],{"class":105}," 3\n",[91,120119,120120],{"class":93,"line":1304},[91,120121,120122],{"class":308},"# ubuntu 使用下方命令\n",[91,120124,120125,120127,120130,120133],{"class":93,"line":1319},[91,120126,24699],{"class":97},[91,120128,120129],{"class":101}," service",[91,120131,120132],{"class":101}," lightdm",[91,120134,120135],{"class":101}," stop\n",[91,120137,120138],{"class":93,"line":1325},[91,120139,120140],{"class":308},"# Fedora 使用下方命令\n",[91,120142,120143,120145,120147,120150],{"class":93,"line":1339},[91,120144,24699],{"class":97},[91,120146,26634],{"class":101},[91,120148,120149],{"class":101}," isolate",[91,120151,120152],{"class":101}," multi-user.target\n",[21,120154,120155],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[82,120157,120159],{"className":118604,"code":120158,"language":118606,"meta":26,"style":26},"# 编译环境+准备工作\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",[88,120160,120161,120166,120177,120182,120189,120194,120206,120211,120218,120223],{"__ignoreMap":26},[91,120162,120163],{"class":93,"line":94},[91,120164,120165],{"class":308},"# 编译环境+准备工作\n",[91,120167,120168,120170,120172,120174],{"class":93,"line":38},[91,120169,24699],{"class":97},[91,120171,117398],{"class":101},[91,120173,23956],{"class":101},[91,120175,120176],{"class":101}," build-essential\n",[91,120178,120179],{"class":93,"line":1304},[91,120180,120181],{"class":308},"# 进入到.run目录中\n",[91,120183,120184,120186],{"class":93,"line":1319},[91,120185,101357],{"class":105},[91,120187,120188],{"class":101}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[91,120190,120191],{"class":93,"line":1325},[91,120192,120193],{"class":308},"# 给驱动文件增加可执行权限：\n",[91,120195,120196,120198,120200,120203],{"class":93,"line":1339},[91,120197,24699],{"class":97},[91,120199,24702],{"class":101},[91,120201,120202],{"class":101}," a+x",[91,120204,120205],{"class":101}," NVIDIA-Linux-x86_64-550.107.02.run\n",[91,120207,120208],{"class":93,"line":1345},[91,120209,120210],{"class":308},"# 然后执行安装：\n",[91,120212,120213,120215],{"class":93,"line":1436},[91,120214,24699],{"class":97},[91,120216,120217],{"class":101}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[91,120219,120220],{"class":93,"line":1442},[91,120221,120222],{"class":308},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[91,120224,120225,120227,120230],{"class":93,"line":1454},[91,120226,24699],{"class":97},[91,120228,120229],{"class":101}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[91,120231,120232],{"class":105},"  --no-opengl-files\n",[21,120234,120235],{},"安装完毕重启即可",[82,120237,120239],{"className":118604,"code":120238,"language":118606,"meta":26,"style":26},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[88,120240,120241,120245,120251,120255],{"__ignoreMap":26},[91,120242,120243],{"class":93,"line":94},[91,120244,120009],{"class":308},[91,120246,120247,120249],{"class":93,"line":38},[91,120248,24699],{"class":97},[91,120250,26767],{"class":101},[91,120252,120253],{"class":93,"line":1304},[91,120254,120024],{"class":308},[91,120256,120257],{"class":93,"line":1319},[91,120258,120029],{"class":97},[217,120260,120262],{"id":120261},"_353-安装cuda","3.5.3 安装CUDA",[21,120264,120265],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[21,120267,120268],{},[24,120269],{"alt":26,"src":120270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[14,120272,120273],{},[17,120274,120275],{},"先查看显卡驱动所支持的最高CUDA版本",[82,120277,120278],{"className":118604,"code":120029,"language":118606,"meta":26,"style":26},[88,120279,120280],{"__ignoreMap":26},[91,120281,120282],{"class":93,"line":94},[91,120283,120029],{"class":97},[21,120285,120286],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[21,120288,120289],{},[24,120290],{"alt":26,"src":120291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[14,120293,120294],{"start":38},[17,120295,120296],{},"下载CUDA并安装CUDA",[21,120298,118383,120299],{},[487,120300,118386],{"href":118386,"rel":120301},[23987],[21,120303,120304],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[21,120306,120307],{},[24,120308],{"alt":26,"src":120309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[21,120311,120312,120313,120318],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[487,120314,120317],{"href":120315,"rel":120316},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23987],"Vinci机器人队单片机教程","）",[21,120320,120321],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[21,120323,120324],{},[24,120325],{"alt":26,"src":120326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[21,120328,120329],{},"将最下方框框里的命令敲入终端",[82,120331,120333],{"className":118604,"code":120332,"language":118606,"meta":26,"style":26},"# 在当前文件夹下创建一个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",[88,120334,120335,120340,120349,120354,120361,120366,120374,120379,120390,120395],{"__ignoreMap":26},[91,120336,120337],{"class":93,"line":94},[91,120338,120339],{"class":308},"# 在当前文件夹下创建一个ttt的子文件夹\n",[91,120341,120342,120344,120346],{"class":93,"line":38},[91,120343,101347],{"class":97},[91,120345,29335],{"class":105},[91,120347,120348],{"class":101}," .\u002Fttt\n",[91,120350,120351],{"class":93,"line":1304},[91,120352,120353],{"class":308},"# 进入ttt文件夹\n",[91,120355,120356,120358],{"class":93,"line":1319},[91,120357,101357],{"class":105},[91,120359,120360],{"class":101}," ttt\n",[91,120362,120363],{"class":93,"line":1325},[91,120364,120365],{"class":308},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[91,120367,120368,120371],{"class":93,"line":1339},[91,120369,120370],{"class":97},"wget",[91,120372,120373],{"class":101}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[91,120375,120376],{"class":93,"line":1345},[91,120377,120378],{"class":308},"# 给予权限\n",[91,120380,120381,120383,120385,120387],{"class":93,"line":1436},[91,120382,24699],{"class":97},[91,120384,24702],{"class":101},[91,120386,120202],{"class":101},[91,120388,120389],{"class":101}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[91,120391,120392],{"class":93,"line":1442},[91,120393,120394],{"class":308},"# 运行脚本\n",[91,120396,120397,120399],{"class":93,"line":1454},[91,120398,24699],{"class":97},[91,120400,120389],{"class":101},[21,120402,120403],{},[24,120404],{"alt":26,"src":120405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[21,120407,120408],{},"正在安装中：",[21,120410,120411],{},[24,120412],{"alt":26,"src":120413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[21,120415,120416],{},"输入accept接受即可",[21,120418,120419],{},[24,120420],{"alt":26,"src":120421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[21,120423,120424],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[21,120426,120427],{},[24,120428],{"alt":26,"src":120429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[21,120431,120432],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[21,120434,120435],{},[24,120436],{"alt":26,"src":120437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[14,120439,120440],{"start":1304},[17,120441,120442],{},"配置环境",[21,120444,120445],{},"根据上方确认一下路径，比如我上面红色框起来的为",[82,120447,120449],{"className":118604,"code":120448,"language":118606,"meta":26,"style":26},"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",[88,120450,120451,120467,120482],{"__ignoreMap":26},[91,120452,120453,120456,120459,120462,120465],{"class":93,"line":94},[91,120454,120455],{"class":97},"Please",[91,120457,120458],{"class":101}," make",[91,120460,120461],{"class":101}," sure",[91,120463,120464],{"class":101}," that",[91,120466,2797],{"class":250},[91,120468,120469,120471,120474,120477,120480],{"class":93,"line":38},[91,120470,52352],{"class":97},[91,120472,120473],{"class":101},"   PATH",[91,120475,120476],{"class":101}," includes",[91,120478,120479],{"class":101}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[91,120481,2797],{"class":250},[91,120483,120484,120486,120489,120491,120494,120497,120499,120502,120505,120508,120511,120513,120516,120518],{"class":93,"line":1304},[91,120485,52352],{"class":97},[91,120487,120488],{"class":101},"   LD_LIBRARY_PATH",[91,120490,120476],{"class":101},[91,120492,120493],{"class":101}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[91,120495,120496],{"class":101}," or,",[91,120498,5332],{"class":101},[91,120500,120501],{"class":101}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[91,120503,120504],{"class":101}," to",[91,120506,120507],{"class":101}," \u002Fetc\u002Fld.so.conf",[91,120509,120510],{"class":101}," and",[91,120512,102],{"class":101},[91,120514,120515],{"class":101}," ldconfig",[91,120517,64685],{"class":101},[91,120519,120520],{"class":101}," root\n",[21,120522,120523],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[82,120525,120527],{"className":118604,"code":120526,"language":118606,"meta":26,"style":26},"which nvcc\n",[88,120528,120529],{"__ignoreMap":26},[91,120530,120531,120534],{"class":93,"line":94},[91,120532,120533],{"class":105},"which",[91,120535,120536],{"class":101}," nvcc\n",[21,120538,120539],{},[24,120540],{"alt":26,"src":120541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[21,120543,120544],{},"所以我进行以下操作：",[82,120546,120548],{"className":118604,"code":120547,"language":118606,"meta":26,"style":26},"sudo vim ~\u002F.bashrc\n",[88,120549,120550],{"__ignoreMap":26},[91,120551,120552,120554,120556],{"class":93,"line":94},[91,120553,24699],{"class":97},[91,120555,118664],{"class":101},[91,120557,120558],{"class":101}," ~\u002F.bashrc\n",[21,120560,120561],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[82,120563,120565],{"className":118604,"code":120564,"language":118606,"meta":26,"style":26},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[88,120566,120567,120579],{"__ignoreMap":26},[91,120568,120569,120571,120574,120576],{"class":93,"line":94},[91,120570,25165],{"class":153},[91,120572,120573],{"class":250}," PATH",[91,120575,296],{"class":153},[91,120577,120578],{"class":250},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[91,120580,120581,120583,120586,120588],{"class":93,"line":38},[91,120582,25165],{"class":153},[91,120584,120585],{"class":250}," LD_LIBRARY_PATH",[91,120587,296],{"class":153},[91,120589,120590],{"class":250},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[21,120592,120593],{},[24,120594],{"alt":26,"src":120595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[82,120597,120599],{"className":118604,"code":120598,"language":118606,"meta":26,"style":26},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[88,120600,120601,120606,120612,120617],{"__ignoreMap":26},[91,120602,120603],{"class":93,"line":94},[91,120604,120605],{"class":308},"# 刷新当前终端的环境变量\n",[91,120607,120608,120610],{"class":93,"line":38},[91,120609,100974],{"class":105},[91,120611,120558],{"class":101},[91,120613,120614],{"class":93,"line":1304},[91,120615,120616],{"class":308},"# 验证CUDA是否安装成功\n",[91,120618,120619,120622],{"class":93,"line":1319},[91,120620,120621],{"class":97},"nvcc",[91,120623,120624],{"class":105}," -V\n",[21,120626,120627],{},"出现下图这种则安装成功。",[21,120629,120630],{},[24,120631],{"alt":26,"src":120632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[217,120634,120636],{"id":120635},"_354-安装cudnn","3.5.4 安装cuDNN",[14,120638,120639],{},[17,120640,120641],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[21,120643,120644,120645,120650],{},"前往 NVIDIA cuDNN 下载页面：",[487,120646,120649],{"href":120647,"rel":120648},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23987],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[21,120652,120653],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[21,120655,120656],{},[24,120657],{"alt":26,"src":120658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[21,120660,120661],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[21,120663,120664],{},[24,120665],{"alt":26,"src":120666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[21,120668,120669],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[21,120671,120672],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[21,120674,120675],{},[398,120676,120677],{},"我这里选择所有Linux X86_64最通用的办法：",[21,120679,120680],{},"下载好的：",[21,120682,120683],{},[24,120684],{"alt":26,"src":120685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[14,120687,120688],{"start":38},[17,120689,120690],{},"安装cuDNN",[21,120692,120693],{},"找到该文件所在目录，并打开终端，cd到该目录。",[21,120695,120696],{},[24,120697],{"alt":26,"src":120698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[21,120700,120701],{},"解压文件，并复制到对应位置完成安装",[82,120703,120705],{"className":118604,"code":120704,"language":118606,"meta":26,"style":26},"# 解压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",[88,120706,120707,120712,120723,120728,120735,120740,120756,120770,120775,120786,120795,120799,120815],{"__ignoreMap":26},[91,120708,120709],{"class":93,"line":94},[91,120710,120711],{"class":308},"# 解压cuDNN文件\n",[91,120713,120714,120717,120720],{"class":93,"line":38},[91,120715,120716],{"class":97},"tar",[91,120718,120719],{"class":105}," -xvf",[91,120721,120722],{"class":101}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[91,120724,120725],{"class":93,"line":1304},[91,120726,120727],{"class":308},"# cd进文件夹\n",[91,120729,120730,120732],{"class":93,"line":1319},[91,120731,101357],{"class":105},[91,120733,120734],{"class":101}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[91,120736,120737],{"class":93,"line":1325},[91,120738,120739],{"class":308},"# 复制cuDNN文件到CUDA目录\n",[91,120741,120742,120744,120746,120749,120751,120754],{"class":93,"line":1339},[91,120743,24699],{"class":97},[91,120745,27980],{"class":101},[91,120747,120748],{"class":101}," include\u002Fcudnn",[91,120750,704],{"class":105},[91,120752,120753],{"class":101},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[91,120755,2797],{"class":250},[91,120757,120758,120760,120762,120765,120767],{"class":93,"line":1345},[91,120759,24699],{"class":97},[91,120761,27980],{"class":101},[91,120763,120764],{"class":101}," lib\u002Flibcudnn",[91,120766,704],{"class":105},[91,120768,120769],{"class":101},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[91,120771,120772],{"class":93,"line":1436},[91,120773,120774],{"class":308},"# 对比一下有没有缺文件\n",[91,120776,120777,120779,120782,120784],{"class":93,"line":1442},[91,120778,26881],{"class":97},[91,120780,120781],{"class":101}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[91,120783,704],{"class":105},[91,120785,2797],{"class":250},[91,120787,120788,120790,120793],{"class":93,"line":1454},[91,120789,26881],{"class":97},[91,120791,120792],{"class":101}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[91,120794,119329],{"class":105},[91,120796,120797],{"class":93,"line":1736},[91,120798,120378],{"class":308},[91,120800,120801,120803,120805,120808,120810,120812],{"class":93,"line":1741},[91,120802,24699],{"class":97},[91,120804,24702],{"class":101},[91,120806,120807],{"class":101}," a+r",[91,120809,120781],{"class":101},[91,120811,704],{"class":105},[91,120813,120814],{"class":250},"   \n",[91,120816,120817,120819,120821,120823,120825],{"class":93,"line":1747},[91,120818,24699],{"class":97},[91,120820,24702],{"class":101},[91,120822,120807],{"class":101},[91,120824,120792],{"class":101},[91,120826,119329],{"class":105},[14,120828,120829],{"start":1304},[17,120830,120831],{},"检查是否安装成功",[82,120833,120835],{"className":118604,"code":120834,"language":118606,"meta":26,"style":26},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[88,120836,120837,120842],{"__ignoreMap":26},[91,120838,120839],{"class":93,"line":94},[91,120840,120841],{"class":308},"# 检查cuDNN版本命令\n",[91,120843,120844,120847,120850,120852,120854,120857,120860],{"class":93,"line":38},[91,120845,120846],{"class":97},"cat",[91,120848,120849],{"class":101}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[91,120851,154],{"class":153},[91,120853,157],{"class":97},[91,120855,120856],{"class":101}," CUDNN_MAJOR",[91,120858,120859],{"class":105}," -A",[91,120861,47804],{"class":105},[21,120863,120864],{},"出现下图这样的就是安装成功了",[21,120866,120867],{},[24,120868],{"alt":26,"src":120869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[14,120871,120872],{"start":1319},[17,120873,120874],{},"软链接(一般不需要)",[82,120876,120878],{"className":118604,"code":120877,"language":118606,"meta":26,"style":26},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[88,120879,120880,120885],{"__ignoreMap":26},[91,120881,120882],{"class":93,"line":94},[91,120883,120884],{"class":308},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[91,120886,120887,120889],{"class":93,"line":38},[91,120888,24699],{"class":97},[91,120890,120891],{"class":101}," ldconfig\n",[21,120893,120894],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[82,120896,120901],{"className":120897,"code":120898,"language":120899,"meta":120900,"style":26},"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",[88,120902,120903,120908,120913,120918,120923,120928,120933],{"__ignoreMap":26},[91,120904,120905],{"class":93,"line":94},[91,120906,120907],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[91,120909,120910],{"class":93,"line":38},[91,120911,120912],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[91,120914,120915],{"class":93,"line":1304},[91,120916,120917],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[91,120919,120920],{"class":93,"line":1319},[91,120921,120922],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[91,120924,120925],{"class":93,"line":1325},[91,120926,120927],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[91,120929,120930],{"class":93,"line":1339},[91,120931,120932],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[91,120934,120935],{"class":93,"line":1345},[91,120936,120937],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[21,120939,120940],{},"运行下方的命令",[82,120942,120944],{"className":118604,"code":120943,"language":118606,"meta":26,"style":26},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[88,120945,120946,120951,120958,120963],{"__ignoreMap":26},[91,120947,120948],{"class":93,"line":94},[91,120949,120950],{"class":308},"# cd进入CUDA路径\n",[91,120952,120953,120955],{"class":93,"line":38},[91,120954,101357],{"class":105},[91,120956,120957],{"class":101}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[91,120959,120960],{"class":93,"line":1304},[91,120961,120962],{"class":308}," # 查看本路径下的需要软链接的文件名\n",[91,120964,120965],{"class":93,"line":1319},[91,120966,120967],{"class":97}," ls\n",[21,120969,120970],{},[24,120971],{"alt":26,"src":120972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[21,120974,120975,120976,18533,120979,18533,120982,120985],{},"如上图，我需要将",[88,120977,120978],{},"libcudnn_xxx_xxxxx.so.8.9.7",[88,120980,120981],{},"libcudnn_xxx_xxxxx.so.8",[88,120983,120984],{},"libcudnn_xxx_xxxxx.so","软链接",[82,120987,120989],{"className":118604,"code":120988,"language":118606,"meta":26,"style":26},"# 创建符号链接。对于每个 .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",[88,120990,120991,120996,121012,121026,121040,121054,121068,121082,121096,121101,121107,121112],{"__ignoreMap":26},[91,120992,120993],{"class":93,"line":94},[91,120994,120995],{"class":308},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[91,120997,120998,121000,121003,121006,121009],{"class":93,"line":38},[91,120999,24699],{"class":97},[91,121001,121002],{"class":101}," ln",[91,121004,121005],{"class":105}," -sf",[91,121007,121008],{"class":101}," libcudnn_cnn_train.so.8.9.7",[91,121010,121011],{"class":101}," libcudnn_cnn_train.so.8\n",[91,121013,121014,121016,121018,121020,121023],{"class":93,"line":1304},[91,121015,24699],{"class":97},[91,121017,121002],{"class":101},[91,121019,121005],{"class":105},[91,121021,121022],{"class":101}," libcudnn_adv_infer.so.8.9.7",[91,121024,121025],{"class":101}," libcudnn_adv_infer.so.8\n",[91,121027,121028,121030,121032,121034,121037],{"class":93,"line":1319},[91,121029,24699],{"class":97},[91,121031,121002],{"class":101},[91,121033,121005],{"class":105},[91,121035,121036],{"class":101}," libcudnn_adv_train.so.8.9.7",[91,121038,121039],{"class":101}," libcudnn_adv_train.so.8\n",[91,121041,121042,121044,121046,121048,121051],{"class":93,"line":1325},[91,121043,24699],{"class":97},[91,121045,121002],{"class":101},[91,121047,121005],{"class":105},[91,121049,121050],{"class":101}," libcudnn_cnn_infer.so.8.9.7",[91,121052,121053],{"class":101}," libcudnn_cnn_infer.so.8\n",[91,121055,121056,121058,121060,121062,121065],{"class":93,"line":1339},[91,121057,24699],{"class":97},[91,121059,121002],{"class":101},[91,121061,121005],{"class":105},[91,121063,121064],{"class":101}," libcudnn.so.8.9.7",[91,121066,121067],{"class":101}," libcudnn.so.8\n",[91,121069,121070,121072,121074,121076,121079],{"class":93,"line":1345},[91,121071,24699],{"class":97},[91,121073,121002],{"class":101},[91,121075,121005],{"class":105},[91,121077,121078],{"class":101}," libcudnn_ops_infer.so.8.9.7",[91,121080,121081],{"class":101}," libcudnn_ops_infer.so.8\n",[91,121083,121084,121086,121088,121090,121093],{"class":93,"line":1436},[91,121085,24699],{"class":97},[91,121087,121002],{"class":101},[91,121089,121005],{"class":105},[91,121091,121092],{"class":101}," libcudnn_ops_train.so.8.9.7",[91,121094,121095],{"class":101}," libcudnn_ops_train.so.8\n",[91,121097,121098],{"class":93,"line":1442},[91,121099,121100],{"class":308},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[91,121102,121103,121105],{"class":93,"line":1454},[91,121104,24699],{"class":97},[91,121106,120891],{"class":101},[91,121108,121109],{"class":93,"line":1736},[91,121110,121111],{"class":308},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[91,121113,121114,121116,121119,121122,121124,121127],{"class":93,"line":1741},[91,121115,26881],{"class":97},[91,121117,121118],{"class":105}," -l",[91,121120,121121],{"class":101}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[91,121123,704],{"class":105},[91,121125,121126],{"class":101},".so",[91,121128,119329],{"class":105},[217,121130,121132],{"id":121131},"_355-常见问题","3.5.5 常见问题",[14,121134,121135],{},[17,121136,121137],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[82,121139,121141],{"className":118604,"code":121140,"language":118606,"meta":26,"style":26},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[88,121142,121143],{"__ignoreMap":26},[91,121144,121145,121147,121149],{"class":93,"line":94},[91,121146,24699],{"class":97},[91,121148,118664],{"class":101},[91,121150,121151],{"class":101}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[21,121153,121154],{},"blacklist-nouveau.conf文件内容如下：",[82,121156,121158],{"className":118604,"code":121157,"language":118606,"meta":26,"style":26},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[88,121159,121160,121168,121175,121187,121197],{"__ignoreMap":26},[91,121161,121162,121165],{"class":93,"line":94},[91,121163,121164],{"class":97},"blacklist",[91,121166,121167],{"class":101}," nouveau\n",[91,121169,121170,121172],{"class":93,"line":38},[91,121171,121164],{"class":97},[91,121173,121174],{"class":101}," lbm-nouveau\n",[91,121176,121177,121179,121182,121185],{"class":93,"line":1304},[91,121178,116011],{"class":97},[91,121180,121181],{"class":101}," nouveau",[91,121183,121184],{"class":101}," modeset=",[91,121186,3208],{"class":105},[91,121188,121189,121192,121194],{"class":93,"line":1319},[91,121190,121191],{"class":105},"alias",[91,121193,121181],{"class":101},[91,121195,121196],{"class":101}," off\n",[91,121198,121199,121201,121204],{"class":93,"line":1325},[91,121200,121191],{"class":105},[91,121202,121203],{"class":101}," lbm-nouveau",[91,121205,121196],{"class":101},[21,121207,121208],{},"接着运行下方命令",[82,121210,121212],{"className":118604,"code":121211,"language":118606,"meta":26,"style":26},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[88,121213,121214,121224,121229],{"__ignoreMap":26},[91,121215,121216,121218,121221],{"class":93,"line":94},[91,121217,24699],{"class":97},[91,121219,121220],{"class":101}," update-initramfs",[91,121222,121223],{"class":105}," -u\n",[91,121225,121226],{"class":93,"line":38},[91,121227,121228],{"class":97},"或者\n",[91,121230,121231,121233,121236],{"class":93,"line":1304},[91,121232,24699],{"class":97},[91,121234,121235],{"class":101}," dracut",[91,121237,121238],{"class":105}," --force\n",[21,121240,121241],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[82,121243,121245],{"className":118604,"code":121244,"language":118606,"meta":26,"style":26},"lsmod | grep nouveau\n",[88,121246,121247],{"__ignoreMap":26},[91,121248,121249,121252,121254,121256],{"class":93,"line":94},[91,121250,121251],{"class":97},"lsmod",[91,121253,154],{"class":153},[91,121255,157],{"class":97},[91,121257,121167],{"class":101},[14,121259,121260],{"start":38},[17,121261,121262],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[82,121264,121266],{"className":118604,"code":121265,"language":118606,"meta":26,"style":26},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[88,121267,121268],{"__ignoreMap":26},[91,121269,121270,121272,121274],{"class":93,"line":94},[91,121271,24699],{"class":97},[91,121273,118664],{"class":101},[91,121275,121276],{"class":101}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[21,121278,121279],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[82,121281,121283],{"className":118604,"code":121282,"language":118606,"meta":26,"style":26},"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",[88,121284,121285,121293,121301,121309,121316,121324,121334,121342],{"__ignoreMap":26},[91,121286,121287,121290],{"class":93,"line":94},[91,121288,121289],{"class":97},"Section",[91,121291,121292],{"class":101}," \"OutputClass\"\n",[91,121294,121295,121298],{"class":93,"line":38},[91,121296,121297],{"class":97},"   Identifier",[91,121299,121300],{"class":101}," \"nvidia\"\n",[91,121302,121303,121306],{"class":93,"line":1304},[91,121304,121305],{"class":97},"   MatchDriver",[91,121307,121308],{"class":101}," \"nvidia-drm\"\n",[91,121310,121311,121314],{"class":93,"line":1319},[91,121312,121313],{"class":97},"   Driver",[91,121315,121300],{"class":101},[91,121317,121318,121321],{"class":93,"line":1325},[91,121319,121320],{"class":97},"   Option",[91,121322,121323],{"class":101}," \"AllowEmptyInitialConfiguration\"\n",[91,121325,121326,121328,121331],{"class":93,"line":1339},[91,121327,121320],{"class":97},[91,121329,121330],{"class":101}," \"PrimaryGPU\"",[91,121332,121333],{"class":101}," \"yes\"\n",[91,121335,121336,121339],{"class":93,"line":1345},[91,121337,121338],{"class":97},"   ModulePath",[91,121340,121341],{"class":101}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[91,121343,121344],{"class":93,"line":1436},[91,121345,121346],{"class":97},"EndSection\n",[14,121348,121349],{"start":1304},[17,121350,121351],{},"安装N卡驱动提示错误",[82,121353,121355],{"className":120897,"code":121354,"language":120899,"meta":120900,"style":26},"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",[88,121356,121357],{"__ignoreMap":26},[91,121358,121359],{"class":93,"line":94},[91,121360,121354],{},[14,121362,121363],{},[17,121364,121365],{},"检查当前运行的内核版本：",[21,121367,121368],{},"运行以下命令以查看你当前正在使用的内核版本：",[82,121370,121372],{"className":117377,"code":121371,"language":117379,"meta":26,"style":26},"uname -r\n",[88,121373,121374],{"__ignoreMap":26},[91,121375,121376,121378],{"class":93,"line":94},[91,121377,70285],{"class":97},[91,121379,121380],{"class":105}," -r\n",[14,121382,121383],{"start":38},[17,121384,121385],{},"安装内核开发文件：",[21,121387,121388,121389,121392],{},"确保你已经安装了与当前内核版本相匹配的 ",[88,121390,121391],{},"kernel-devel"," 包。运行以下命令来安装：",[82,121394,121396],{"className":117377,"code":121395,"language":117379,"meta":26,"style":26},"sudo dnf install kernel-devel-$(uname -r)\n",[88,121397,121398],{"__ignoreMap":26},[91,121399,121400,121402,121404,121406,121409,121411,121413,121415],{"class":93,"line":94},[91,121401,24699],{"class":97},[91,121403,26437],{"class":101},[91,121405,23956],{"class":101},[91,121407,121408],{"class":101}," kernel-devel-",[91,121410,25222],{"class":250},[91,121412,70285],{"class":97},[91,121414,119720],{"class":105},[91,121416,257],{"class":250},[21,121418,121419],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[14,121421,121422],{"start":1304},[17,121423,121424],{},"安装内核源代码（如果需要）：",[21,121426,121427],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[82,121429,121431],{"className":117377,"code":121430,"language":117379,"meta":26,"style":26},"sudo dnf install kernel-headers kernel-source\n",[88,121432,121433],{"__ignoreMap":26},[91,121434,121435,121437,121439,121441,121444],{"class":93,"line":94},[91,121436,24699],{"class":97},[91,121438,26437],{"class":101},[91,121440,23956],{"class":101},[91,121442,121443],{"class":101}," kernel-headers",[91,121445,121446],{"class":101}," kernel-source\n",[14,121448,121449],{"start":1319},[17,121450,121451],{},"检查安装：",[21,121453,121454,121455,121458],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[88,121456,121457],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[82,121460,121462],{"className":117377,"code":121461,"language":117379,"meta":26,"style":26},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[88,121463,121464],{"__ignoreMap":26},[91,121465,121466,121468],{"class":93,"line":94},[91,121467,26881],{"class":97},[91,121469,121470],{"class":101}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[21,121472,121473,121474,121477],{},"如果仍然遇到问题，可以通过 ",[88,121475,121476],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[168,121479,121480],{},"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":26,"searchDepth":38,"depth":38,"links":121482},[121483,121487,121497,121501,121502],{"id":118580,"depth":38,"text":118581,"children":121484},[121485,121486],{"id":118590,"depth":1304,"text":118591},{"id":118600,"depth":1304,"text":118601},{"id":118800,"depth":38,"text":118801,"children":121488},[121489,121490,121491,121492,121493,121494,121495,121496],{"id":118804,"depth":1304,"text":118805},{"id":118874,"depth":1304,"text":118875},{"id":118963,"depth":1304,"text":118964},{"id":119208,"depth":1304,"text":119209},{"id":119278,"depth":1304,"text":119279},{"id":119345,"depth":1304,"text":119346},{"id":119380,"depth":1304,"text":119381},{"id":119435,"depth":1304,"text":119436},{"id":119486,"depth":38,"text":119487,"children":121498},[121499,121500],{"id":119490,"depth":1304,"text":119491},{"id":119570,"depth":1304,"text":119571},{"id":119756,"depth":38,"text":119757},{"id":119929,"depth":38,"text":119930,"children":121503},[121504,121505,121506,121507,121508],{"id":119933,"depth":1304,"text":119934},{"id":119974,"depth":1304,"text":119975},{"id":120261,"depth":1304,"text":120262},{"id":120635,"depth":1304,"text":120636},{"id":121131,"depth":1304,"text":121132},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118572,"description":23500},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121515,"title":121516,"body":121517,"description":23500,"extension":173,"meta":121857,"navigation":175,"path":121858,"seo":121859,"stem":121860,"__hash__":121861},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121518,"toc":121855},[121519,121522,121527,121530,121776,121781,121784,121820,121823,121852],[10,121520,121516],{"id":121521},"_4-命令教程长期积累",[14,121523,121524],{},[17,121525,121526],{},"大多数命令",[21,121528,121529],{},"常用 Linux 命令速查：",[82,121531,121533],{"className":117377,"code":121532,"language":117379,"meta":26,"style":26},"# 文件与目录\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",[88,121534,121535,121540,121547,121554,121562,121569,121576,121584,121592,121599,121606,121614,121618,121623,121630,121638,121645,121649,121654,121661,121669,121677,121685,121693,121697,121702,121710,121717,121724,121732,121740,121744,121749,121758,121767],{"__ignoreMap":26},[91,121536,121537],{"class":93,"line":94},[91,121538,121539],{"class":308},"# 文件与目录\n",[91,121541,121542,121544],{"class":93,"line":38},[91,121543,26881],{"class":97},[91,121545,121546],{"class":308},"        # 列出目录内容\n",[91,121548,121549,121551],{"class":93,"line":1304},[91,121550,101357],{"class":105},[91,121552,121553],{"class":308},"        # 切换目录\n",[91,121555,121556,121559],{"class":93,"line":1319},[91,121557,121558],{"class":105},"pwd",[91,121560,121561],{"class":308},"       # 显示当前路径\n",[91,121563,121564,121566],{"class":93,"line":1325},[91,121565,101347],{"class":97},[91,121567,121568],{"class":308},"     # 创建目录\n",[91,121570,121571,121573],{"class":93,"line":1339},[91,121572,25444],{"class":97},[91,121574,121575],{"class":308},"        # 删除文件或目录\n",[91,121577,121578,121581],{"class":93,"line":1345},[91,121579,121580],{"class":97},"cp",[91,121582,121583],{"class":308},"        # 复制文件或目录\n",[91,121585,121586,121589],{"class":93,"line":1436},[91,121587,121588],{"class":97},"mv",[91,121590,121591],{"class":308},"        # 移动\u002F重命名文件或目录\n",[91,121593,121594,121596],{"class":93,"line":1442},[91,121595,101364],{"class":97},[91,121597,121598],{"class":308},"     # 创建空文件\n",[91,121600,121601,121603],{"class":93,"line":1454},[91,121602,120846],{"class":97},[91,121604,121605],{"class":308},"       # 查看文件内容\n",[91,121607,121608,121611],{"class":93,"line":1736},[91,121609,121610],{"class":97},"head\u002Ftail",[91,121612,121613],{"class":308}," # 查看文件头部\u002F尾部\n",[91,121615,121616],{"class":93,"line":1741},[91,121617,2523],{"emptyLinePlaceholder":175},[91,121619,121620],{"class":93,"line":1747},[91,121621,121622],{"class":308},"# 权限管理\n",[91,121624,121625,121627],{"class":93,"line":1752},[91,121626,24734],{"class":97},[91,121628,121629],{"class":308},"     # 修改文件权限\n",[91,121631,121632,121635],{"class":93,"line":1766},[91,121633,121634],{"class":97},"chown",[91,121636,121637],{"class":308},"     # 修改文件所有者\n",[91,121639,121640,121642],{"class":93,"line":1771},[91,121641,24699],{"class":97},[91,121643,121644],{"class":308},"      # 以管理员身份执行\n",[91,121646,121647],{"class":93,"line":1777},[91,121648,2523],{"emptyLinePlaceholder":175},[91,121650,121651],{"class":93,"line":1798},[91,121652,121653],{"class":308},"# 系统信息\n",[91,121655,121656,121658],{"class":93,"line":1803},[91,121657,70285],{"class":97},[91,121659,121660],{"class":308},"     # 系统信息\n",[91,121662,121663,121666],{"class":93,"line":1817},[91,121664,121665],{"class":97},"df",[91,121667,121668],{"class":308},"        # 磁盘使用情况\n",[91,121670,121671,121674],{"class":93,"line":1822},[91,121672,121673],{"class":97},"free",[91,121675,121676],{"class":308},"      # 内存使用情况\n",[91,121678,121679,121682],{"class":93,"line":1851},[91,121680,121681],{"class":97},"top\u002Fhtop",[91,121683,121684],{"class":308},"  # 进程监控\n",[91,121686,121687,121690],{"class":93,"line":1856},[91,121688,121689],{"class":97},"ps",[91,121691,121692],{"class":308},"        # 查看进程\n",[91,121694,121695],{"class":93,"line":1873},[91,121696,2523],{"emptyLinePlaceholder":175},[91,121698,121699],{"class":93,"line":1878},[91,121700,121701],{"class":308},"# 网络\n",[91,121703,121704,121707],{"class":93,"line":1883},[91,121705,121706],{"class":97},"ping",[91,121708,121709],{"class":308},"      # 测试网络连通性\n",[91,121711,121712,121714],{"class":93,"line":1888},[91,121713,26969],{"class":97},[91,121715,121716],{"class":308},"      # 发送 HTTP 请求\n",[91,121718,121719,121721],{"class":93,"line":1902},[91,121720,120370],{"class":97},[91,121722,121723],{"class":308},"      # 下载文件\n",[91,121725,121726,121729],{"class":93,"line":1907},[91,121727,121728],{"class":97},"ssh",[91,121730,121731],{"class":308},"       # 远程登录\n",[91,121733,121734,121737],{"class":93,"line":2700},[91,121735,121736],{"class":97},"scp",[91,121738,121739],{"class":308},"       # 远程文件传输\n",[91,121741,121742],{"class":93,"line":2714},[91,121743,2523],{"emptyLinePlaceholder":175},[91,121745,121746],{"class":93,"line":2722},[91,121747,121748],{"class":308},"# 包管理（Debian\u002FUbuntu）\n",[91,121750,121751,121753,121755],{"class":93,"line":2727},[91,121752,117449],{"class":97},[91,121754,117428],{"class":101},[91,121756,121757],{"class":308},"   # 更新软件源\n",[91,121759,121760,121762,121764],{"class":93,"line":2733},[91,121761,117449],{"class":97},[91,121763,23956],{"class":101},[91,121765,121766],{"class":308},"  # 安装软件包\n",[91,121768,121769,121771,121773],{"class":93,"line":2739},[91,121770,117449],{"class":97},[91,121772,26201],{"class":101},[91,121774,121775],{"class":308},"   # 卸载软件包\n",[14,121777,121778],{"start":38},[17,121779,121780],{},"KDE Dolphin 以root打开",[21,121782,121783],{},"kde5",[82,121785,121787],{"className":117377,"code":121786,"language":117379,"meta":26,"style":26},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[88,121788,121789],{"__ignoreMap":26},[91,121790,121791,121794,121797,121800,121802,121804,121807,121810,121812,121815,121817],{"class":93,"line":94},[91,121792,121793],{"class":97},"pkexec",[91,121795,121796],{"class":101}," env",[91,121798,121799],{"class":101}," DISPLAY=",[91,121801,28262],{"class":250},[91,121803,28320],{"class":101},[91,121805,121806],{"class":250},"$XAUTHORITY ",[91,121808,121809],{"class":101},"KDE_SESSION_VERSION=",[91,121811,568],{"class":105},[91,121813,121814],{"class":101}," KDE_FULL_SESSION=",[91,121816,1487],{"class":105},[91,121818,121819],{"class":101}," dolphin\n",[21,121821,121822],{},"kde6",[82,121824,121826],{"className":117377,"code":121825,"language":117379,"meta":26,"style":26},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[88,121827,121828],{"__ignoreMap":26},[91,121829,121830,121832,121834,121836,121838,121840,121842,121844,121846,121848,121850],{"class":93,"line":94},[91,121831,121793],{"class":97},[91,121833,121796],{"class":101},[91,121835,121799],{"class":101},[91,121837,28262],{"class":250},[91,121839,28320],{"class":101},[91,121841,121806],{"class":250},[91,121843,121809],{"class":101},[91,121845,593],{"class":105},[91,121847,121814],{"class":101},[91,121849,1487],{"class":105},[91,121851,121819],{"class":101},[168,121853,121854],{},"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":26,"searchDepth":38,"depth":38,"links":121856},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121516,"description":23500},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121863,"title":121864,"body":121865,"description":23500,"extension":173,"meta":121879,"navigation":175,"path":121880,"seo":121881,"stem":121882,"__hash__":121883},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121866,"toc":121877},[121867,121870],[10,121868,121864],{"id":121869},"_5-各种环境配置",[21,121871,121872],{},[487,121873,121876],{"href":121874,"rel":121875},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23987],"电控组环境搭建大全",{"title":26,"searchDepth":38,"depth":38,"links":121878},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121864,"description":23500},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121885,"title":121886,"body":121887,"description":23500,"extension":173,"meta":122235,"navigation":175,"path":122236,"seo":122237,"stem":122238,"__hash__":122239},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121888,"toc":122227},[121889,121892,121896,121900,121904,121909,121916,121920,122213,122217,122224],[10,121890,121886],{"id":121891},"_6-拓展功能",[190,121893,121895],{"id":121894},"_61-wine","6.1 Wine",[190,121897,121899],{"id":121898},"_62-android","6.2 Android",[217,121901,121903],{"id":121902},"_621-i卡a卡","6.2.1 I卡、A卡",[14,121905,121906],{},[17,121907,121908],{},"Wayland-Waydroid(体验超级好)",[21,121910,121911,121912],{},"Waydroid 官网与安装指南：",[487,121913,121914],{"href":121914,"rel":121915},"https:\u002F\u002Fwaydro.id\u002F",[23987],[217,121917,121919],{"id":121918},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[14,121921,121922],{},[17,121923,121924,121925,121927,121928,121932,121934,121937,121942,122139],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53797,121926],{},"BlissOS 官网下载：",[487,121929,121930],{"href":121930,"rel":121931},"https:\u002F\u002Fblissos.org\u002F",[23987],[53797,121933],{},[24,121935],{"alt":26,"src":121936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[14,121938,121939],{"start":1304},[17,121940,121941],{},"比较推荐的配置",[82,121943,121945],{"className":117377,"code":121944,"language":117379,"meta":26,"style":26},"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",[88,121946,121947,121954,121964,121974,121984,121996,122006,122013,122023,122032,122041,122051,122061,122070,122080,122090,122102,122112,122121,122131],{"__ignoreMap":26},[91,121948,121949,121952],{"class":93,"line":94},[91,121950,121951],{"class":97},"qemu-system-x86_64",[91,121953,24801],{"class":105},[91,121955,121956,121959,121962],{"class":93,"line":38},[91,121957,121958],{"class":105},"        -M",[91,121960,121961],{"class":101}," q35,vmport=off",[91,121963,24801],{"class":105},[91,121965,121966,121969,121972],{"class":93,"line":1304},[91,121967,121968],{"class":105},"        -accel",[91,121970,121971],{"class":101}," kvm",[91,121973,24801],{"class":105},[91,121975,121976,121979,121982],{"class":93,"line":1319},[91,121977,121978],{"class":105},"        -cpu",[91,121980,121981],{"class":101}," qemu64,+sse3,+sse4.2",[91,121983,24801],{"class":105},[91,121985,121986,121989,121992,121994],{"class":93,"line":1325},[91,121987,121988],{"class":105},"        -smp",[91,121990,121991],{"class":101}," 8,cores=",[91,121993,542],{"class":105},[91,121995,24801],{"class":105},[91,121997,121998,122001,122004],{"class":93,"line":1339},[91,121999,122000],{"class":105},"        -m",[91,122002,122003],{"class":101}," 6G",[91,122005,24801],{"class":105},[91,122007,122008,122011],{"class":93,"line":1345},[91,122009,122010],{"class":105},"        -usb",[91,122012,24801],{"class":105},[91,122014,122015,122018,122021],{"class":93,"line":1436},[91,122016,122017],{"class":105},"        -device",[91,122019,122020],{"class":101}," virtio-tablet",[91,122022,24801],{"class":105},[91,122024,122025,122027,122030],{"class":93,"line":1442},[91,122026,122017],{"class":105},[91,122028,122029],{"class":101}," virtio-keyboard",[91,122031,24801],{"class":105},[91,122033,122034,122036,122039],{"class":93,"line":1454},[91,122035,122017],{"class":105},[91,122037,122038],{"class":101}," usb-tablet",[91,122040,24801],{"class":105},[91,122042,122043,122046,122049],{"class":93,"line":1736},[91,122044,122045],{"class":105},"        -bios",[91,122047,122048],{"class":101}," OVMF-pure-efi64.fd",[91,122050,24801],{"class":105},[91,122052,122053,122056,122059],{"class":93,"line":1741},[91,122054,122055],{"class":105},"        -net",[91,122057,122058],{"class":101}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[91,122060,24801],{"class":105},[91,122062,122063,122065,122068],{"class":93,"line":1747},[91,122064,122055],{"class":105},[91,122066,122067],{"class":101}," nic,model=virtio",[91,122069,24801],{"class":105},[91,122071,122072,122075,122078],{"class":93,"line":1752},[91,122073,122074],{"class":105},"        -audio",[91,122076,122077],{"class":101}," sdl,model=hda",[91,122079,24801],{"class":105},[91,122081,122082,122085,122088],{"class":93,"line":1766},[91,122083,122084],{"class":105},"        -display",[91,122086,122087],{"class":101}," sdl,gl=on,show-cursor=on",[91,122089,24801],{"class":105},[91,122091,122092,122094,122097,122100],{"class":93,"line":1771},[91,122093,122017],{"class":105},[91,122095,122096],{"class":101}," virtio-vga-gl,xres=1920,yres=",[91,122098,122099],{"class":105},"1080",[91,122101,24801],{"class":105},[91,122103,122104,122107,122110],{"class":93,"line":1777},[91,122105,122106],{"class":105},"        -drive",[91,122108,122109],{"class":101}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[91,122111,24801],{"class":105},[91,122113,122114,122116,122119],{"class":93,"line":1798},[91,122115,122106],{"class":105},[91,122117,122118],{"class":101}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[91,122120,24801],{"class":105},[91,122122,122123,122126,122129],{"class":93,"line":1803},[91,122124,122125],{"class":105},"        -monitor",[91,122127,122128],{"class":101}," stdio",[91,122130,24801],{"class":105},[91,122132,122133,122136],{"class":93,"line":1817},[91,122134,122135],{"class":105},"        -serial",[91,122137,122138],{"class":101}," none\n",[14,122140,122141],{"start":1325},[17,122142,122143,122144],{},"常用操作：",[14,122145,122146,122149,122205],{},[17,122147,122148],{},"全屏：Ctrl+Alt+F",[17,122150,122151,122152,122157],{},"adb调试",[14,122153,122154],{},[17,122155,122156],{},"使Linux与Android用ADB连接。",[82,122158,122160],{"className":117377,"code":122159,"language":117379,"meta":26,"style":26},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[88,122161,122162,122167,122178,122183,122195,122200],{"__ignoreMap":26},[91,122163,122164],{"class":93,"line":94},[91,122165,122166],{"class":308},"# 连接安卓\n",[91,122168,122169,122172,122175],{"class":93,"line":38},[91,122170,122171],{"class":97},"adb",[91,122173,122174],{"class":101}," connect",[91,122176,122177],{"class":105}," 127.0.0.1\n",[91,122179,122180],{"class":93,"line":1304},[91,122181,122182],{"class":308},"# 打开shell\n",[91,122184,122185,122187,122189,122192],{"class":93,"line":1319},[91,122186,122171],{"class":97},[91,122188,27003],{"class":105},[91,122190,122191],{"class":101}," 127.0.0.1:5555",[91,122193,122194],{"class":101}," shell\n",[91,122196,122197],{"class":93,"line":1325},[91,122198,122199],{"class":308},"# 使用root权限\n",[91,122201,122202],{"class":93,"line":1339},[91,122203,122204],{"class":97},"su\n",[17,122206,122207,122208],{},"中文输入法",[14,122209,122210],{},[17,122211,122212],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[190,122214,122216],{"id":122215},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[21,122218,122219,122220],{},"rEFInd 官网与文档：",[487,122221,122222],{"href":122222,"rel":122223},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23987],[168,122225,122226],{},"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":26,"searchDepth":38,"depth":38,"links":122228},[122229,122230,122234],{"id":121894,"depth":38,"text":121895},{"id":121898,"depth":38,"text":121899,"children":122231},[122232,122233],{"id":121902,"depth":1304,"text":121903},{"id":121918,"depth":1304,"text":121919},{"id":122215,"depth":38,"text":122216},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121886,"description":23500},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122241,"title":122242,"body":122243,"description":23500,"extension":173,"meta":125542,"navigation":175,"path":125543,"seo":125544,"stem":125545,"__hash__":125546},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122244,"toc":125516},[122245,122248,122252,122255,122262,122512,122515,122587,122590,122594,122598,122603,122606,122609,122612,122617,122620,122623,122626,122631,122634,122639,122642,122645,122650,122653,122658,122661,122665,122669,122672,122677,122680,122694,122697,122700,122709,122712,122721,122724,122727,122736,122739,122748,122751,122754,122763,122766,122769,122784,122787,122790,122799,122804,122807,122810,122819,122822,122831,122834,122843,122846,122855,122860,122863,122871,122876,122879,122888,122891,122899,122904,122907,122916,122919,122922,122926,122929,122934,122937,122942,122956,122961,122966,122977,122982,122988,122993,123008,123013,123016,123021,123026,123031,123039,123044,123051,123056,123067,123072,123075,123079,123082,123085,123090,123093,123112,123117,123120,123129,123134,123137,123159,123162,123192,123195,123200,123203,123217,123222,123241,123244,123247,123252,123264,123269,123274,123277,123282,123285,123300,123303,123308,123313,123317,123322,123362,123365,123369,123375,123381,123386,123389,123396,123401,123408,123411,123414,123421,123435,123438,123498,123501,123515,123527,123530,123533,123536,123600,123603,123606,123609,123629,123632,123637,123644,123648,123651,123655,123660,123665,123669,123672,123675,123717,123722,123725,123747,123762,123764,123769,123781,123841,123843,123845,123899,123901,123903,123909,123914,123917,123922,123926,123929,123991,123996,123999,124001,124005,124017,124099,124101,124103,124157,124163,124165,124169,124174,124176,124181,124185,124205,124240,124244,124247,124250,124253,124260,124263,124275,124278,124293,124296,124315,124363,124366,124383,124386,124400,124405,124408,124417,124432,124444,124482,124487,124496,124501,124506,124532,124541,124545,124549,124554,124557,124561,124565,124570,124573,124578,124581,124586,124589,124594,124597,124601,124606,124609,124614,124617,124621,124626,124629,124634,124637,124642,124645,124649,124654,124657,124662,124665,124670,124673,124677,124682,124685,124690,124693,124698,124701,124706,124709,124714,124717,124722,124725,124729,124734,124737,124742,124749,124753,124758,124761,124766,124769,124773,124778,124781,124784,124787,124790,124793,124797,124800,124810,124815,124820,124842,124847,124852,124859,124863,124868,124871,124874,124879,124882,124885,124888,124891,124894,124897,124900,124903,124906,124909,124912,124915,124920,124925,124930,124935,124940,124945,124950,124953,124957,124960,124964,124969,124974,124979,124984,124988,124994,125002,125007,125010,125015,125030,125033,125038,125072,125087,125090,125145,125171,125183,125186,125195,125198,125213,125218,125221,125227,125232,125235,125240,125243,125248,125253,125260,125263,125278,125281,125316,125321,125329,125367,125370,125373,125378,125381,125386,125397,125431,125436,125439,125448,125453,125459,125462,125467,125476,125481,125484,125487,125492,125500,125503,125508,125513],[10,122246,122242],{"id":122247},"_7-其他操作",[190,122249,122251],{"id":122250},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[21,122253,122254],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[21,122256,122257,122258,122261],{},"进入工控机的硬盘目录，进入",[88,122259,122260],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[82,122263,122267],{"className":122264,"code":122265,"language":122266,"meta":26,"style":26},"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",[88,122268,122269,122277,122288,122295,122302,122314,122321,122333,122344,122355,122362,122369,122376,122388,122400,122407,122419,122431,122438,122450,122462,122474,122485,122492,122503],{"__ignoreMap":26},[91,122270,122271,122274],{"class":93,"line":94},[91,122272,122273],{"class":51381},"network",[91,122275,122276],{"class":250},": \n",[91,122278,122279,122282,122284,122286],{"class":93,"line":38},[91,122280,122281],{"class":51381},"  version",[91,122283,51518],{"class":250},[91,122285,327],{"class":105},[91,122287,2797],{"class":250},[91,122289,122290,122293],{"class":93,"line":1304},[91,122291,122292],{"class":51381},"  wifis",[91,122294,122276],{"class":250},[91,122296,122297,122300],{"class":93,"line":1319},[91,122298,122299],{"class":51381},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[91,122301,122276],{"class":250},[91,122303,122304,122307,122309,122312],{"class":93,"line":1325},[91,122305,122306],{"class":51381},"      renderer",[91,122308,51518],{"class":250},[91,122310,122311],{"class":101},"NetworkManager",[91,122313,2797],{"class":250},[91,122315,122316,122319],{"class":93,"line":1339},[91,122317,122318],{"class":51381},"      match",[91,122320,122276],{"class":250},[91,122322,122323,122326,122328,122331],{"class":93,"line":1345},[91,122324,122325],{"class":51381},"        name",[91,122327,51518],{"class":250},[91,122329,122330],{"class":101},"\"wlan0\"",[91,122332,2797],{"class":250},[91,122334,122335,122338,122340,122342],{"class":93,"line":1436},[91,122336,122337],{"class":51381},"      dhcp4",[91,122339,51518],{"class":250},[91,122341,1487],{"class":105},[91,122343,2797],{"class":250},[91,122345,122346,122349,122351,122353],{"class":93,"line":1442},[91,122347,122348],{"class":51381},"      dhcp6",[91,122350,51518],{"class":250},[91,122352,1487],{"class":105},[91,122354,2797],{"class":250},[91,122356,122357,122360],{"class":93,"line":1454},[91,122358,122359],{"class":51381},"      access-points",[91,122361,122276],{"class":250},[91,122363,122364,122367],{"class":93,"line":1736},[91,122365,122366],{"class":101},"        \"EMIS_Vinci_Robocon_5G\"",[91,122368,122276],{"class":250},[91,122370,122371,122374],{"class":93,"line":1741},[91,122372,122373],{"class":51381},"          auth",[91,122375,122276],{"class":250},[91,122377,122378,122381,122383,122386],{"class":93,"line":1747},[91,122379,122380],{"class":51381},"            key-management",[91,122382,51518],{"class":250},[91,122384,122385],{"class":101},"\"psk\"",[91,122387,2797],{"class":250},[91,122389,122390,122393,122395,122398],{"class":93,"line":1752},[91,122391,122392],{"class":51381},"            password",[91,122394,51518],{"class":250},[91,122396,122397],{"class":101},"\"vinci666\"",[91,122399,2797],{"class":250},[91,122401,122402,122405],{"class":93,"line":1766},[91,122403,122404],{"class":51381},"          networkmanager",[91,122406,122276],{"class":250},[91,122408,122409,122412,122414,122417],{"class":93,"line":1771},[91,122410,122411],{"class":51381},"            uuid",[91,122413,51518],{"class":250},[91,122415,122416],{"class":101},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[91,122418,2797],{"class":250},[91,122420,122421,122424,122426,122429],{"class":93,"line":1777},[91,122422,122423],{"class":51381},"            name",[91,122425,51518],{"class":250},[91,122427,122428],{"class":101},"\"EMIS_Vinci_Robocon_5G\"",[91,122430,2797],{"class":250},[91,122432,122433,122436],{"class":93,"line":1798},[91,122434,122435],{"class":51381},"            passthrough",[91,122437,122276],{"class":250},[91,122439,122440,122443,122445,122448],{"class":93,"line":1803},[91,122441,122442],{"class":51381},"              wifi-security.auth-alg",[91,122444,51518],{"class":250},[91,122446,122447],{"class":101},"\"open\"",[91,122449,2797],{"class":250},[91,122451,122452,122455,122457,122460],{"class":93,"line":1817},[91,122453,122454],{"class":51381},"              ipv6.addr-gen-mode",[91,122456,51518],{"class":250},[91,122458,122459],{"class":101},"\"default\"",[91,122461,2797],{"class":250},[91,122463,122464,122467,122469,122472],{"class":93,"line":1822},[91,122465,122466],{"class":51381},"              ipv6.ip6-privacy",[91,122468,51518],{"class":250},[91,122470,122471],{"class":101},"\"-1\"",[91,122473,2797],{"class":250},[91,122475,122476,122479,122481,122483],{"class":93,"line":1851},[91,122477,122478],{"class":51381},"              proxy._",[91,122480,51518],{"class":250},[91,122482,7775],{"class":101},[91,122484,2797],{"class":250},[91,122486,122487,122490],{"class":93,"line":1856},[91,122488,122489],{"class":51381},"      networkmanager",[91,122491,122276],{"class":250},[91,122493,122494,122497,122499,122501],{"class":93,"line":1873},[91,122495,122496],{"class":51381},"        uuid",[91,122498,51518],{"class":250},[91,122500,122416],{"class":101},[91,122502,2797],{"class":250},[91,122504,122505,122507,122509],{"class":93,"line":1878},[91,122506,122325],{"class":51381},[91,122508,51518],{"class":250},[91,122510,122511],{"class":101},"\"EMIS_Vinci_Robocon_5G\"\n",[21,122513,122514],{},"将其改为新wifi的名和密码：",[82,122516,122518],{"className":122264,"code":122517,"language":122266,"meta":26,"style":26},"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",[88,122519,122520,122526,122535,122541,122548,122557,122565,122571,122577],{"__ignoreMap":26},[91,122521,122522,122524],{"class":93,"line":94},[91,122523,122273],{"class":51381},[91,122525,3862],{"class":250},[91,122527,122528,122530,122532],{"class":93,"line":38},[91,122529,122281],{"class":51381},[91,122531,51518],{"class":250},[91,122533,122534],{"class":105},"2\n",[91,122536,122537,122539],{"class":93,"line":1304},[91,122538,122292],{"class":51381},[91,122540,3862],{"class":250},[91,122542,122543,122546],{"class":93,"line":1319},[91,122544,122545],{"class":51381},"    wlan0",[91,122547,3862],{"class":250},[91,122549,122550,122552,122554],{"class":93,"line":1325},[91,122551,122337],{"class":51381},[91,122553,51518],{"class":250},[91,122555,122556],{"class":105},"true\n",[91,122558,122559,122561,122563],{"class":93,"line":1339},[91,122560,122348],{"class":51381},[91,122562,51518],{"class":250},[91,122564,122556],{"class":105},[91,122566,122567,122569],{"class":93,"line":1345},[91,122568,122359],{"class":51381},[91,122570,3862],{"class":250},[91,122572,122573,122575],{"class":93,"line":1436},[91,122574,122366],{"class":101},[91,122576,3862],{"class":250},[91,122578,122579,122582,122584],{"class":93,"line":1442},[91,122580,122581],{"class":51381},"          password",[91,122583,51518],{"class":250},[91,122585,122586],{"class":101},"\"vinci666\"\n",[21,122588,122589],{},"工控机开机即可连上网。",[190,122591,122593],{"id":122592},"_72-ssh远程开发","7.2 SSH远程开发",[217,122595,122597],{"id":122596},"_721-环境准备","7.2.1 环境准备",[21,122599,122600],{},[398,122601,122602],{},"1.硬件准备",[21,122604,122605],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[21,122607,122608],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[21,122610,122611],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[21,122613,122614],{},[398,122615,122616],{},"2.设置固定IP",[21,122618,122619],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[21,122621,122622],{},"1.进入设置界面",[21,122624,122625],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[21,122627,122628],{},[24,122629],{"alt":26,"src":122630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[21,122632,122633],{},"2.配置所连接的网络",[21,122635,122636],{},[24,122637],{"alt":26,"src":122638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[21,122640,122641],{},"3.设置固定IP",[21,122643,122644],{},"查看当前IP地址。",[21,122646,122647],{},[24,122648],{"alt":26,"src":122649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[21,122651,122652],{},"设置固定IP。",[21,122654,122655],{},[24,122656],{"alt":26,"src":122657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[21,122659,122660],{},"至此，IP配置完毕。",[217,122662,122664],{"id":122663},"_722-环境搭建","7.2.2 环境搭建",[21,122666,122667],{},[398,122668,25875],{},[21,122670,122671],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[21,122673,122674],{},[398,122675,122676],{},"实现",[21,122678,122679],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[14,122681,122682,122685,122688,122691],{},[17,122683,122684],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[17,122686,122687],{},"远程主机启动SSH服务；",[17,122689,122690],{},"本地主机登陆远程主机；",[17,122692,122693],{},"实现数据传输。",[21,122695,122696],{},"1.安装SSH客户端与服务端",[21,122698,122699],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[82,122701,122703],{"className":120897,"code":122702,"language":120899,"meta":120900,"style":26}," sudo apt install openssh-server\n",[88,122704,122705],{"__ignoreMap":26},[91,122706,122707],{"class":93,"line":94},[91,122708,122702],{},[21,122710,122711],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[82,122713,122715],{"className":120897,"code":122714,"language":120899,"meta":120900,"style":26},"sudo apt install openssh-client\n",[88,122716,122717],{"__ignoreMap":26},[91,122718,122719],{"class":93,"line":94},[91,122720,122714],{},[21,122722,122723],{},"2.远程主机启动SSH服务",[21,122725,122726],{},"远程主机启动 ssh 服务命令如下：",[82,122728,122730],{"className":120897,"code":122729,"language":120899,"meta":120900,"style":26},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[88,122731,122732],{"__ignoreMap":26},[91,122733,122734],{"class":93,"line":94},[91,122735,122729],{},[21,122737,122738],{},"启动后可使用如下命令查看服务是否正常运行：",[82,122740,122742],{"className":120897,"code":122741,"language":120899,"meta":120900,"style":26},"ps -e | grep ssh\n",[88,122743,122744],{"__ignoreMap":26},[91,122745,122746],{"class":93,"line":94},[91,122747,122741],{},[21,122749,122750],{},"如果启动成功，会包含 sshd 程序。",[21,122752,122753],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[82,122755,122757],{"className":120897,"code":122756,"language":120899,"meta":120900,"style":26},"sudo systemctl enable ssh\n",[88,122758,122759],{"__ignoreMap":26},[91,122760,122761],{"class":93,"line":94},[91,122762,122756],{},[21,122764,122765],{},"3.本地远程登录",[21,122767,122768],{},"登录远程主机可以调用如下命令:",[82,122770,122772],{"className":117377,"code":122771,"language":117379,"meta":26,"style":26},"ssh -X 用户名@ip地址\n",[88,122773,122774],{"__ignoreMap":26},[91,122775,122776,122778,122781],{"class":93,"line":94},[91,122777,121728],{"class":97},[91,122779,122780],{"class":105}," -X",[91,122782,122783],{"class":101}," 用户名@ip地址\n",[21,122785,122786],{},"然后根据提示，录入登陆密码，即可成功登录。",[21,122788,122789],{},"如果退出，可以调用exit命令：",[82,122791,122793],{"className":120897,"code":122792,"language":120899,"meta":120900,"style":26},"exit\n",[88,122794,122795],{"__ignoreMap":26},[91,122796,122797],{"class":93,"line":94},[91,122798,122792],{},[21,122800,122801],{},[398,122802,122803],{},"4.实现数据传输",[21,122805,122806],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[21,122808,122809],{},"上传文件指令格式如下：",[82,122811,122813],{"className":120897,"code":122812,"language":120899,"meta":120900,"style":26},"scp 本地文件路径 账号@ip:路径\n",[88,122814,122815],{"__ignoreMap":26},[91,122816,122817],{"class":93,"line":94},[91,122818,122812],{},[21,122820,122821],{},"上传文件夹指令格式如下：",[82,122823,122825],{"className":120897,"code":122824,"language":120899,"meta":120900,"style":26},"scp -r 本地文件夹路径 账号@ip:路径\n",[88,122826,122827],{"__ignoreMap":26},[91,122828,122829],{"class":93,"line":94},[91,122830,122824],{},[21,122832,122833],{},"下载文件指令格式如下：",[82,122835,122837],{"className":120897,"code":122836,"language":120899,"meta":120900,"style":26},"scp 账号@ip:路径 本地文件夹路径\n",[88,122838,122839],{"__ignoreMap":26},[91,122840,122841],{"class":93,"line":94},[91,122842,122836],{},[21,122844,122845],{},"下载文件夹指令格式如下：",[82,122847,122849],{"className":120897,"code":122848,"language":120899,"meta":120900,"style":26},"scp -r 账号@ip:路径 本地文件夹路径\n",[88,122850,122851],{"__ignoreMap":26},[91,122852,122853],{"class":93,"line":94},[91,122854,122848],{},[21,122856,122857],{},[398,122858,122859],{},"优化",[21,122861,122862],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[14,122864,122865,122868],{},[17,122866,122867],{},"本地生成密钥对；",[17,122869,122870],{},"将公钥上传至远程主机。",[21,122872,122873],{},[398,122874,122875],{},"1.生成密钥对",[21,122877,122878],{},"本地客户端生成公私钥：（一路回车默认即可）",[82,122880,122882],{"className":120897,"code":122881,"language":120899,"meta":120900,"style":26},"ssh-keygen\n",[88,122883,122884],{"__ignoreMap":26},[91,122885,122886],{"class":93,"line":94},[91,122887,122881],{},[21,122889,122890],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[14,122892,122893,122896],{},[17,122894,122895],{},"id_rsa （私钥）；",[17,122897,122898],{},"id_rsa.pub (公钥)。",[21,122900,122901],{},[398,122902,122903],{},"2.公钥上传",[21,122905,122906],{},"上传指令如下：",[82,122908,122910],{"className":120897,"code":122909,"language":120899,"meta":120900,"style":26},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[88,122911,122912],{"__ignoreMap":26},[91,122913,122914],{"class":93,"line":94},[91,122915,122909],{},[21,122917,122918],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[21,122920,122921],{},"以后再远程登录就无需录入密码了。",[217,122923,122925],{"id":122924},"_723-使用vscode优化","7.2.3 使用VScode优化",[21,122927,122928],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[21,122930,122931],{},[398,122932,122933],{},"1.准备工作",[21,122935,122936],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[21,122938,122939],{},[398,122940,122941],{},"2.为VScode安装远程开发插件",[21,122943,122944,122945,122948,122949,122952,122953,28504],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[88,122946,122947],{},"扩展：商店","的搜索栏输入",[88,122950,122951],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[88,122954,122955],{},"安装",[21,122957,122958],{},[24,122959],{"alt":26,"src":122960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[21,122962,122963],{},[398,122964,122965],{},"3.配置远程连接",[21,122967,122968,122969,122972,122973,122976],{},"步骤1：使用快捷键",[88,122970,122971],{},"ctrl + shift + p","打开命令输入窗口，并输入",[88,122974,122975],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[21,122978,122979],{},[24,122980],{"alt":26,"src":122981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[21,122983,122984,122985,28504],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[88,122986,122987],{},"Add New SSH Host",[21,122989,122990],{},[24,122991],{"alt":26,"src":122992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[21,122994,122995,122996,122999,123000,123003,123004,123007],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[88,122997,122998],{},"ssh +X ubuntu@192.168.43.164","，其中，",[88,123001,123002],{},"ubuntu","需要替换为你的登录用户名，",[88,123005,123006],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[21,123009,123010],{},[24,123011],{"alt":26,"src":123012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[21,123014,123015],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[21,123017,123018],{},[24,123019],{"alt":26,"src":123020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[21,123022,123023],{},[24,123024],{"alt":26,"src":123025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[21,123027,123028],{},[398,123029,123030],{},"4.使用",[21,123032,123033,123034,122972,123036,123038],{},"步骤1：继续使用快捷键",[88,123035,122971],{},[88,123037,122975],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[21,123040,123041],{},[24,123042],{"alt":26,"src":123043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[21,123045,123046,123047,123050],{},"或者，也可以点击侧边栏的",[88,123048,123049],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[21,123052,123053],{},[24,123054],{"alt":26,"src":123055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[21,123057,123058,123059,123062,123063,123066],{},"步骤2：选择菜单栏的",[88,123060,123061],{},"文件","下的",[88,123064,123065],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[21,123068,123069],{},[24,123070],{"alt":26,"src":123071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[21,123073,123074],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[190,123076,123078],{"id":123077},"_73-远程桌面","7.3 远程桌面",[21,123080,123081],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[21,123083,123084],{},"我们选择使用VNC来看。",[14,123086,123087],{},[17,123088,123089],{},"安装VNC服务器：",[21,123091,123092],{},"这里以TigerVNC为例进行安装：",[82,123094,123096],{"className":117377,"code":123095,"language":117379,"meta":26,"style":26},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[88,123097,123098],{"__ignoreMap":26},[91,123099,123100,123102,123104,123106,123109],{"class":93,"line":94},[91,123101,24699],{"class":97},[91,123103,117398],{"class":101},[91,123105,23956],{"class":101},[91,123107,123108],{"class":101}," tigervnc-standalone-server",[91,123110,123111],{"class":101}," tigervnc-common\n",[14,123113,123114],{"start":38},[17,123115,123116],{},"设置VNC密码：",[21,123118,123119],{},"为VNC用户设置密码，运行以下命令：",[82,123121,123123],{"className":117377,"code":123122,"language":117379,"meta":26,"style":26},"vncpasswd\n",[88,123124,123125],{"__ignoreMap":26},[91,123126,123127],{"class":93,"line":94},[91,123128,123122],{"class":97},[14,123130,123131],{"start":1304},[17,123132,123133],{},"配置VNC启动脚本:",[21,123135,123136],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[82,123138,123140],{"className":117377,"code":123139,"language":117379,"meta":26,"style":26},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[88,123141,123142,123151],{"__ignoreMap":26},[91,123143,123144,123146,123148],{"class":93,"line":94},[91,123145,101347],{"class":97},[91,123147,29335],{"class":105},[91,123149,123150],{"class":101}," ~\u002F.vnc\n",[91,123152,123153,123156],{"class":93,"line":38},[91,123154,123155],{"class":97},"nano",[91,123157,123158],{"class":101}," ~\u002F.vnc\u002Fxstartup\n",[21,123160,123161],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[82,123163,123165],{"className":117377,"code":123164,"language":117379,"meta":26,"style":26},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[88,123166,123167,123172,123180,123187],{"__ignoreMap":26},[91,123168,123169],{"class":93,"line":94},[91,123170,123171],{"class":308},"#!\u002Fbin\u002Fsh\n",[91,123173,123174,123177],{"class":93,"line":38},[91,123175,123176],{"class":105},"unset",[91,123178,123179],{"class":101}," SESSION_MANAGER\n",[91,123181,123182,123184],{"class":93,"line":1304},[91,123183,123176],{"class":105},[91,123185,123186],{"class":101}," DBUS_SESSION_BUS_ADDRESS\n",[91,123188,123189],{"class":93,"line":1319},[91,123190,123191],{"class":97},"gnome-session\n",[21,123193,123194],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[14,123196,123197],{"start":1319},[17,123198,123199],{},"给予执行权限：",[21,123201,123202],{},"为xstartup文件设置执行权限：",[82,123204,123206],{"className":117377,"code":123205,"language":117379,"meta":26,"style":26},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[88,123207,123208],{"__ignoreMap":26},[91,123209,123210,123212,123215],{"class":93,"line":94},[91,123211,24734],{"class":97},[91,123213,123214],{"class":101}," +x",[91,123216,123158],{"class":101},[14,123218,123219],{"start":1325},[17,123220,123221],{},"启动VNC服务器：",[82,123223,123225],{"className":117377,"code":123224,"language":117379,"meta":26,"style":26},"vncserver -geometry 1920x1080 -localhost=0\n",[88,123226,123227],{"__ignoreMap":26},[91,123228,123229,123232,123235,123238],{"class":93,"line":94},[91,123230,123231],{"class":97},"vncserver",[91,123233,123234],{"class":105}," -geometry",[91,123236,123237],{"class":101}," 1920x1080",[91,123239,123240],{"class":105}," -localhost=0\n",[21,123242,123243],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[21,123245,123246],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[14,123248,123249],{"start":1339},[17,123250,123251],{},"查看已开启的VNC服务器：",[82,123253,123255],{"className":117377,"code":123254,"language":117379,"meta":26,"style":26},"vncserver -list\n",[88,123256,123257],{"__ignoreMap":26},[91,123258,123259,123261],{"class":93,"line":94},[91,123260,123231],{"class":97},[91,123262,123263],{"class":105}," -list\n",[21,123265,123266],{},[24,123267],{"alt":26,"src":123268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[14,123270,123271],{"start":1345},[17,123272,123273],{},"连接到VNC服务器：",[21,123275,123276],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[14,123278,123279],{"start":1436},[17,123280,123281],{},"停止VNC服务器：",[21,123283,123284],{},"如果需要停止VNC服务器，可以使用以下命令：",[82,123286,123288],{"className":117377,"code":123287,"language":117379,"meta":26,"style":26},"vncserver -kill :1\n",[88,123289,123290],{"__ignoreMap":26},[91,123291,123292,123294,123297],{"class":93,"line":94},[91,123293,123231],{"class":97},[91,123295,123296],{"class":105}," -kill",[91,123298,123299],{"class":101}," :1\n",[21,123301,123302],{},"将:1替换为你实际使用的显示编号。",[21,123304,123305],{},[24,123306],{"alt":26,"src":123307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[21,123309,123310],{},[24,123311],{"alt":26,"src":123312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[190,123314,123316],{"id":123315},"_74-usb端口设置","7.4 USB端口设置",[21,123318,123319],{},[398,123320,123321],{},"首先先配置好权限",[82,123323,123325],{"className":117377,"code":123324,"language":117379,"meta":26,"style":26},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[88,123326,123327,123332,123345,123352,123357],{"__ignoreMap":26},[91,123328,123329],{"class":93,"line":94},[91,123330,123331],{"class":308},"# 将用户权限提高\n",[91,123333,123334,123336,123338,123340,123343],{"class":93,"line":38},[91,123335,24699],{"class":97},[91,123337,26694],{"class":101},[91,123339,26697],{"class":105},[91,123341,123342],{"class":101}," dialout",[91,123344,26702],{"class":250},[91,123346,123347,123349],{"class":93,"line":1304},[91,123348,26721],{"class":97},[91,123350,123351],{"class":101}," dialout\n",[91,123353,123354],{"class":93,"line":1319},[91,123355,123356],{"class":308},"# 查看下面命令是否输出dialout（若输出才正常）\n",[91,123358,123359],{"class":93,"line":1325},[91,123360,123361],{"class":97},"groups\n",[21,123363,123364],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[217,123366,123368],{"id":123367},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[21,123370,123371,123374],{},[398,123372,123373],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[21,123376,123377,123380],{},[398,123378,123379],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[21,123382,123383],{},[398,123384,123385],{},"流程如下：",[21,123387,123388],{},"（1）.查找设备idVendor和idProduct",[21,123390,123391,123392,123395],{},"接入两个USB设备，在终端调用指令",[88,123393,123394],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[21,123397,123398],{},[24,123399],{"alt":26,"src":123400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[21,123402,123403,123404,123407],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[88,123405,123406],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[21,123409,123410],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[21,123412,123413],{},"（2）.编写映射规则",[21,123415,123416,123417,123420],{},"在",[88,123418,123419],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[82,123422,123424],{"className":117377,"code":123423,"language":117379,"meta":26,"style":26},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[88,123425,123426],{"__ignoreMap":26},[91,123427,123428,123430,123432],{"class":93,"line":94},[91,123429,24699],{"class":97},[91,123431,118664],{"class":101},[91,123433,123434],{"class":101}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[21,123436,123437],{},"输入如下内容：",[82,123439,123441],{"className":117377,"code":123440,"language":117379,"meta":26,"style":26},"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",[88,123442,123443,123473],{"__ignoreMap":26},[91,123444,123445,123448,123450,123453,123456,123459,123462,123464,123467,123470],{"class":93,"line":94},[91,123446,123447],{"class":250},"KERNEL",[91,123449,296],{"class":153},[91,123451,123452],{"class":101},"=\"ttyUSB*\",",[91,123454,123455],{"class":97}," ATTRS",[91,123457,123458],{"class":101},"{idVendor}==",[91,123460,123461],{"class":97},"\"10c4\"",[91,123463,627],{"class":97},[91,123465,123466],{"class":101}," ATTRS{idProduct}==\"ea60\",",[91,123468,123469],{"class":101}," MODE:=\"0777\",",[91,123471,123472],{"class":101}," SYMLINK+=\"mylidar\"\n",[91,123474,123475,123477,123479,123481,123483,123485,123488,123490,123493,123495],{"class":93,"line":38},[91,123476,123447],{"class":250},[91,123478,296],{"class":153},[91,123480,123452],{"class":101},[91,123482,123455],{"class":97},[91,123484,123458],{"class":101},[91,123486,123487],{"class":97},"\"1a86\"",[91,123489,627],{"class":97},[91,123491,123492],{"class":101}," ATTRS{idProduct}==\"7523\",",[91,123494,123469],{"class":101},[91,123496,123497],{"class":101}," SYMLINK+=\"mycar\"\n",[21,123499,123500],{},"代码解释：",[1256,123502,123503,123506,123509,123512],{},[17,123504,123505],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[17,123507,123508],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[17,123510,123511],{},"SYMLINK是符号连接，即绑定的别名；",[17,123513,123514],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[21,123516,123517,123518,123521,123524],{},"***小提示：***",[23677,123519,123520],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[88,123522,123523],{},"\u002Fetc\u002Fudev\u002Frule.d",[23677,123525,123526],{},"目录即可。",[21,123528,123529],{},"表格 还在加载中，请等待加载完成后再尝试复制",[21,123531,123532],{},"（3）.使规则生效",[21,123534,123535],{},"在终端下输入如下指令：",[82,123537,123539],{"className":117377,"code":123538,"language":117379,"meta":26,"style":26},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[88,123540,123541,123546,123558,123569,123573,123578,123591],{"__ignoreMap":26},[91,123542,123543],{"class":93,"line":94},[91,123544,123545],{"class":308},"# Ubuntu用下方命令\n",[91,123547,123548,123550,123552,123555],{"class":93,"line":38},[91,123549,24699],{"class":97},[91,123551,120129],{"class":101},[91,123553,123554],{"class":101}," udev",[91,123556,123557],{"class":101}," reload\n",[91,123559,123560,123562,123564,123566],{"class":93,"line":1304},[91,123561,24699],{"class":97},[91,123563,120129],{"class":101},[91,123565,123554],{"class":101},[91,123567,123568],{"class":101}," restart\n",[91,123570,123571],{"class":93,"line":1319},[91,123572,2523],{"emptyLinePlaceholder":175},[91,123574,123575],{"class":93,"line":1325},[91,123576,123577],{"class":308},"#Fedora用下方命令\n",[91,123579,123580,123582,123585,123588],{"class":93,"line":1339},[91,123581,24699],{"class":97},[91,123583,123584],{"class":101}," udevadm",[91,123586,123587],{"class":101}," control",[91,123589,123590],{"class":105}," --reload\n",[91,123592,123593,123595,123597],{"class":93,"line":1345},[91,123594,24699],{"class":97},[91,123596,123584],{"class":101},[91,123598,123599],{"class":101}," trigger\n",[21,123601,123602],{},"再重新插拔设备即可。",[21,123604,123605],{},"（4）.测试",[21,123607,123608],{},"终端下输入如下指令",[82,123610,123612],{"className":117377,"code":123611,"language":117379,"meta":26,"style":26},"ll \u002Fdev | grep ttyUSB\n",[88,123613,123614],{"__ignoreMap":26},[91,123615,123616,123619,123622,123624,123626],{"class":93,"line":94},[91,123617,123618],{"class":97},"ll",[91,123620,123621],{"class":101}," \u002Fdev",[91,123623,154],{"class":153},[91,123625,157],{"class":97},[91,123627,123628],{"class":101}," ttyUSB\n",[21,123630,123631],{},"运行结果如下：",[21,123633,123634],{},[24,123635],{"alt":26,"src":123636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[21,123638,123639,123640,123643],{},"也可以多次插拔USB设备，会发现设备端口",[88,123641,123642],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[21,123645,123646],{},[398,123647,118045],{},[21,123649,123650],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[217,123652,123654],{"id":123653},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[21,123656,123657,123659],{},[398,123658,123373],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[21,123661,123662,123664],{},[398,123663,123379],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[21,123666,123667],{},[398,123668,123385],{},[21,123670,123671],{},"（1）.查看所连接的主机USB接口的KERNELS",[21,123673,123674],{},"调用如下指令查看第一台雷达的USB信息：",[82,123676,123678],{"className":117377,"code":123677,"language":117379,"meta":26,"style":26},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[88,123679,123680,123700],{"__ignoreMap":26},[91,123681,123682,123685,123687,123690,123693,123695,123697],{"class":93,"line":94},[91,123683,123684],{"class":97},"udevadm",[91,123686,69902],{"class":101},[91,123688,123689],{"class":105}," --attribute-walk",[91,123691,123692],{"class":105}," --name=\u002Fdev\u002FttyUSB0",[91,123694,154],{"class":153},[91,123696,157],{"class":97},[91,123698,123699],{"class":101}," KERNELS\n",[91,123701,123702,123704,123706,123708,123711,123713,123715],{"class":93,"line":38},[91,123703,123684],{"class":97},[91,123705,69902],{"class":101},[91,123707,123689],{"class":105},[91,123709,123710],{"class":105}," --name=\u002Fdev\u002FttyACM0",[91,123712,154],{"class":153},[91,123714,157],{"class":97},[91,123716,123699],{"class":101},[21,123718,123719],{},[24,123720],{"alt":26,"src":123721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[21,123723,123724],{},"调用如下指令查看第二台雷达的USB信息：",[82,123726,123728],{"className":117377,"code":123727,"language":117379,"meta":26,"style":26},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[88,123729,123730],{"__ignoreMap":26},[91,123731,123732,123734,123736,123738,123741,123743,123745],{"class":93,"line":94},[91,123733,123684],{"class":97},[91,123735,69902],{"class":101},[91,123737,123689],{"class":105},[91,123739,123740],{"class":105}," --name=\u002Fdev\u002FttyUSB1",[91,123742,154],{"class":153},[91,123744,157],{"class":97},[91,123746,123699],{"class":101},[21,123748,123749,123750,123753,123754,123757,123758,123761],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[88,123751,123752],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[88,123755,123756],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[398,123759,123760],{},"唯一性标识","”。",[21,123763,123413],{},[21,123765,123416,123766,123768],{},[88,123767,123419],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[82,123770,123771],{"className":117377,"code":123423,"language":117379,"meta":26,"style":26},[88,123772,123773],{"__ignoreMap":26},[91,123774,123775,123777,123779],{"class":93,"line":94},[91,123776,24699],{"class":97},[91,123778,118664],{"class":101},[91,123780,123434],{"class":101},[82,123782,123784],{"className":117377,"code":123783,"language":117379,"meta":26,"style":26},"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",[88,123785,123786,123815],{"__ignoreMap":26},[91,123787,123788,123790,123792,123794,123797,123799,123802,123805,123807,123810,123812],{"class":93,"line":94},[91,123789,123447],{"class":250},[91,123791,296],{"class":153},[91,123793,123452],{"class":101},[91,123795,123796],{"class":250}," KERNELS",[91,123798,296],{"class":153},[91,123800,123801],{"class":101},"=\"1-1.3:1.0\",",[91,123803,123804],{"class":97}," MODE:",[91,123806,296],{"class":101},[91,123808,123809],{"class":97},"\"0777\"",[91,123811,627],{"class":97},[91,123813,123814],{"class":101}," SYMLINK+=\"rplidar_front\"\n",[91,123816,123817,123819,123821,123823,123825,123827,123830,123832,123834,123836,123838],{"class":93,"line":38},[91,123818,123447],{"class":250},[91,123820,296],{"class":153},[91,123822,123452],{"class":101},[91,123824,123796],{"class":250},[91,123826,296],{"class":153},[91,123828,123829],{"class":101},"=\"1-1.4:1.0\",",[91,123831,123804],{"class":97},[91,123833,296],{"class":101},[91,123835,123809],{"class":97},[91,123837,627],{"class":97},[91,123839,123840],{"class":101}," SYMLINK+=\"rplidar_back\"\n",[21,123842,123532],{},[21,123844,123535],{},[82,123846,123847],{"className":117377,"code":123538,"language":117379,"meta":26,"style":26},[88,123848,123849,123853,123863,123873,123877,123881,123891],{"__ignoreMap":26},[91,123850,123851],{"class":93,"line":94},[91,123852,123545],{"class":308},[91,123854,123855,123857,123859,123861],{"class":93,"line":38},[91,123856,24699],{"class":97},[91,123858,120129],{"class":101},[91,123860,123554],{"class":101},[91,123862,123557],{"class":101},[91,123864,123865,123867,123869,123871],{"class":93,"line":1304},[91,123866,24699],{"class":97},[91,123868,120129],{"class":101},[91,123870,123554],{"class":101},[91,123872,123568],{"class":101},[91,123874,123875],{"class":93,"line":1319},[91,123876,2523],{"emptyLinePlaceholder":175},[91,123878,123879],{"class":93,"line":1325},[91,123880,123577],{"class":308},[91,123882,123883,123885,123887,123889],{"class":93,"line":1339},[91,123884,24699],{"class":97},[91,123886,123584],{"class":101},[91,123888,123587],{"class":101},[91,123890,123590],{"class":105},[91,123892,123893,123895,123897],{"class":93,"line":1345},[91,123894,24699],{"class":97},[91,123896,123584],{"class":101},[91,123898,123599],{"class":101},[21,123900,123602],{},[21,123902,123605],{},[21,123904,123608,123905,123908],{},[88,123906,123907],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[21,123910,123911],{},[24,123912],{"alt":26,"src":123913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[21,123915,123916],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[21,123918,123919,123921],{},[398,123920,118045],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[217,123923,123925],{"id":123924},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[21,123927,123928],{},"（1）.查看所连接的主机USB接口的信息",[82,123930,123932],{"className":117377,"code":123931,"language":117379,"meta":26,"style":26},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[88,123933,123934,123964],{"__ignoreMap":26},[91,123935,123936,123938,123940,123943,123945,123947,123949,123951,123954,123957,123959,123962],{"class":93,"line":94},[91,123937,123684],{"class":97},[91,123939,69902],{"class":101},[91,123941,123942],{"class":105}," -a",[91,123944,29335],{"class":105},[91,123946,28541],{"class":250},[91,123948,123684],{"class":97},[91,123950,69902],{"class":101},[91,123952,123953],{"class":105}," -q",[91,123955,123956],{"class":101}," path",[91,123958,25237],{"class":105},[91,123960,123961],{"class":101}," \u002Fdev\u002FttyACM0",[91,123963,257],{"class":250},[91,123965,123966,123968,123970,123972,123974,123976,123978,123980,123982,123984,123986,123989],{"class":93,"line":38},[91,123967,123684],{"class":97},[91,123969,69902],{"class":101},[91,123971,123942],{"class":105},[91,123973,29335],{"class":105},[91,123975,28541],{"class":250},[91,123977,123684],{"class":97},[91,123979,69902],{"class":101},[91,123981,123953],{"class":105},[91,123983,123956],{"class":101},[91,123985,25237],{"class":105},[91,123987,123988],{"class":101}," \u002Fdev\u002FttyUSB0",[91,123990,257],{"class":250},[21,123992,123993],{},[24,123994],{"alt":26,"src":123995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[21,123997,123998],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[21,124000,123413],{},[21,124002,123416,124003,123768],{},[88,124004,123419],{},[82,124006,124007],{"className":117377,"code":123423,"language":117379,"meta":26,"style":26},[88,124008,124009],{"__ignoreMap":26},[91,124010,124011,124013,124015],{"class":93,"line":94},[91,124012,24699],{"class":97},[91,124014,118664],{"class":101},[91,124016,123434],{"class":101},[82,124018,124020],{"className":117377,"code":124019,"language":117379,"meta":26,"style":26},"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",[88,124021,124022,124050,124076],{"__ignoreMap":26},[91,124023,124024,124026,124028,124031,124033,124035,124037,124039,124042,124045,124047],{"class":93,"line":94},[91,124025,123447],{"class":250},[91,124027,296],{"class":153},[91,124029,124030],{"class":101},"=\"ttyACM*\",",[91,124032,123455],{"class":97},[91,124034,123458],{"class":101},[91,124036,123487],{"class":97},[91,124038,627],{"class":97},[91,124040,124041],{"class":101}," ATTRS{idProduct}==\"55d4\",",[91,124043,124044],{"class":101}," ATTRS{serial}==\"0001\",",[91,124046,123469],{"class":101},[91,124048,124049],{"class":101}," SYMLINK+=\"ttyACM_MCU\"\n",[91,124051,124052,124054,124056,124058,124060,124062,124064,124066,124068,124071,124073],{"class":93,"line":38},[91,124053,123447],{"class":250},[91,124055,296],{"class":153},[91,124057,124030],{"class":101},[91,124059,123455],{"class":97},[91,124061,123458],{"class":101},[91,124063,123487],{"class":97},[91,124065,627],{"class":97},[91,124067,124041],{"class":101},[91,124069,124070],{"class":101}," ATTRS{serial}==\"0002\",",[91,124072,123469],{"class":101},[91,124074,124075],{"class":101}," SYMLINK+=\"ttyACM_Lidar\"\n",[91,124077,124078,124080,124082,124084,124086,124088,124090,124092,124094,124096],{"class":93,"line":1304},[91,124079,123447],{"class":250},[91,124081,296],{"class":153},[91,124083,123452],{"class":101},[91,124085,123455],{"class":97},[91,124087,123458],{"class":101},[91,124089,123487],{"class":97},[91,124091,627],{"class":97},[91,124093,123492],{"class":101},[91,124095,123469],{"class":101},[91,124097,124098],{"class":101}," SYMLINK+=\"ttyUSB_IMU\"\n",[21,124100,123532],{},[21,124102,123535],{},[82,124104,124105],{"className":117377,"code":123538,"language":117379,"meta":26,"style":26},[88,124106,124107,124111,124121,124131,124135,124139,124149],{"__ignoreMap":26},[91,124108,124109],{"class":93,"line":94},[91,124110,123545],{"class":308},[91,124112,124113,124115,124117,124119],{"class":93,"line":38},[91,124114,24699],{"class":97},[91,124116,120129],{"class":101},[91,124118,123554],{"class":101},[91,124120,123557],{"class":101},[91,124122,124123,124125,124127,124129],{"class":93,"line":1304},[91,124124,24699],{"class":97},[91,124126,120129],{"class":101},[91,124128,123554],{"class":101},[91,124130,123568],{"class":101},[91,124132,124133],{"class":93,"line":1319},[91,124134,2523],{"emptyLinePlaceholder":175},[91,124136,124137],{"class":93,"line":1325},[91,124138,123577],{"class":308},[91,124140,124141,124143,124145,124147],{"class":93,"line":1339},[91,124142,24699],{"class":97},[91,124144,123584],{"class":101},[91,124146,123587],{"class":101},[91,124148,123590],{"class":105},[91,124150,124151,124153,124155],{"class":93,"line":1345},[91,124152,24699],{"class":97},[91,124154,123584],{"class":101},[91,124156,123599],{"class":101},[21,124158,124159,124160],{},"再重新插拔设备即可，或者 ",[398,124161,124162],{},"直接重启系统。",[21,124164,123605],{},[21,124166,123608,124167,123908],{},[88,124168,123907],{},[21,124170,124171],{},[24,124172],{"alt":26,"src":124173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[21,124175,123916],{},[21,124177,124178,124180],{},[398,124179,118045],{}," 一些设备可能没有串口号等。",[217,124182,124184],{"id":124183},"_744-其他注意事项","7.4.4 其他注意事项",[21,124186,124187,124188,124190,124191,124194,124195,18533,124198,124201,124202,124204],{},"并非所有的USB设备端口号都是",[88,124189,123642],{},"的格式，比如Arduino的端口号可能是",[88,124192,124193],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[88,124196,124197],{},"videon",[88,124199,124200],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[88,124203,124197],{},"端口，绑定时需要关联的也是该接口。",[21,124206,124207,124208,124211,124212,124215,124216,124218,124219,124222,124223,124226,124227,124230,124231,124230,124234,124230,124237,28504],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[88,124209,124210],{},"KERNEL==\"ttyUSB*\"","修改为",[88,124213,124214],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[88,124217,124210],{},"修改为类似于",[88,124220,124221],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[88,124224,124225],{},"video[0,2,4,6]","表示可以绑定的端口为",[88,124228,124229],{},"video0","或",[88,124232,124233],{},"video2",[88,124235,124236],{},"video4",[88,124238,124239],{},"video6",[190,124241,124243],{"id":124242},"_75-挂载内网网页","7.5 挂载内网网页",[21,124245,124246],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[21,124248,124249],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[21,124251,124252],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[21,124254,124255,124256],{},"Termux 下载地址（F-Droid）：",[487,124257,124258],{"href":124258,"rel":124259},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23987],[21,124261,124262],{},"首先打开app后，先更新软件缓存：",[82,124264,124266],{"className":117377,"code":124265,"language":117379,"meta":26,"style":26},"pkg update\n",[88,124267,124268],{"__ignoreMap":26},[91,124269,124270,124273],{"class":93,"line":94},[91,124271,124272],{"class":97},"pkg",[91,124274,26364],{"class":101},[21,124276,124277],{},"然后换源",[82,124279,124281],{"className":117377,"code":124280,"language":117379,"meta":26,"style":26},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[88,124282,124283],{"__ignoreMap":26},[91,124284,124285,124287,124290],{"class":93,"line":94},[91,124286,123155],{"class":97},[91,124288,124289],{"class":250}," $PREFIX",[91,124291,124292],{"class":101},"\u002Fetc\u002Fapt\u002Fsources.list\n",[21,124294,124295],{},"将该文件内容替换为下面：",[82,124297,124299],{"className":117377,"code":124298,"language":117379,"meta":26,"style":26},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[88,124300,124301],{"__ignoreMap":26},[91,124302,124303,124306,124309,124312],{"class":93,"line":94},[91,124304,124305],{"class":97},"deb",[91,124307,124308],{"class":101}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[91,124310,124311],{"class":101}," stable",[91,124313,124314],{"class":101}," main\n",[1256,124316,124317,124344],{},[17,124318,124319,124320,124322,124323],{},"如果你使用的是",[88,124321,123155],{},"编辑器：",[1256,124324,124325,124332,124338],{},[17,124326,124327,124328,124331],{},"按 ",[88,124329,124330],{},"Ctrl+O"," 保存文件。",[17,124333,124327,124334,124337],{},[88,124335,124336],{},"Enter"," 确认文件名。",[17,124339,124327,124340,124343],{},[88,124341,124342],{},"Ctrl+X"," 退出编辑器。",[17,124345,124319,124346,124322,124349],{},[88,124347,124348],{},"vim",[1256,124350,124351,124357],{},[17,124352,124327,124353,124356],{},[88,124354,124355],{},"Esc"," 退出编辑模式。",[17,124358,124359,124360,124362],{},"输入 ",[88,124361,119302],{}," 保存并退出。",[21,124364,124365],{},"接下来重新更新软件源：",[82,124367,124369],{"className":117377,"code":124368,"language":117379,"meta":26,"style":26},"pkg update && pkg upgrade\n",[88,124370,124371],{"__ignoreMap":26},[91,124372,124373,124375,124377,124379,124381],{"class":93,"line":94},[91,124374,124272],{"class":97},[91,124376,117428],{"class":101},[91,124378,26312],{"class":250},[91,124380,124272],{"class":97},[91,124382,117414],{"class":101},[21,124384,124385],{},"安装python：",[82,124387,124389],{"className":117377,"code":124388,"language":117379,"meta":26,"style":26},"pkg install python\n",[88,124390,124391],{"__ignoreMap":26},[91,124392,124393,124395,124397],{"class":93,"line":94},[91,124394,124272],{"class":97},[91,124396,23956],{"class":101},[91,124398,124399],{"class":101}," python\n",[21,124401,124402,26594],{},[398,124403,124404],{},"通过Termux访问设备存储",[21,124406,124407],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[82,124409,124411],{"className":117377,"code":124410,"language":117379,"meta":26,"style":26},"termux-setup-storage\n",[88,124412,124413],{"__ignoreMap":26},[91,124414,124415],{"class":93,"line":94},[91,124416,124410],{"class":97},[14,124418,124419],{},[17,124420,124421,26594,124424],{},[398,124422,124423],{},"进入HTML文件所在的目录",[14,124425,124426],{},[17,124427,124428,124429,124431],{},"使用",[88,124430,101357],{},"命令进入HTML文件所在的目录：",[82,124433,124435],{"className":117377,"code":124434,"language":117379,"meta":26,"style":26},"cd ~\u002Fyour_html_folder\n",[88,124436,124437],{"__ignoreMap":26},[91,124438,124439,124441],{"class":93,"line":94},[91,124440,101357],{"class":105},[91,124442,124443],{"class":101}," ~\u002Fyour_html_folder\n",[14,124445,124446],{"start":38},[17,124447,124448,26594,124451,124456,124473],{},[398,124449,124450],{},"启动Python HTTP服务器",[14,124452,124453],{},[17,124454,124455],{},"运行以下命令启动一个简单的HTTP服务器：",[82,124457,124459],{"className":117377,"code":124458,"language":117379,"meta":26,"style":26},"python -m http.server 8000\n",[88,124460,124461],{"__ignoreMap":26},[91,124462,124463,124465,124467,124470],{"class":93,"line":94},[91,124464,30461],{"class":97},[91,124466,100963],{"class":105},[91,124468,124469],{"class":101}," http.server",[91,124471,124472],{"class":105}," 8000\n",[14,124474,124475],{"start":1304},[17,124476,124477,124478,124481],{},"这会在端口",[88,124479,124480],{},"8000","上启动一个Web服务器。",[1256,124483,124484],{},[17,124485,124486],{},"启动服务器后，Termux会显示日志信息，例如：",[82,124488,124490],{"className":120897,"code":124489,"language":120899,"meta":120900,"style":26},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[88,124491,124492],{"__ignoreMap":26},[91,124493,124494],{"class":93,"line":94},[91,124495,124489],{},[1256,124497,124498],{},[17,124499,124500],{},"这表示服务器已成功启动。",[21,124502,124503],{},[398,124504,124505],{},"在浏览器中访问HTML文件",[14,124507,124508],{},[17,124509,124510,26594,124513,124518],{},[398,124511,124512],{},"在同一设备上访问",[14,124514,124515],{},[17,124516,124517],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[82,124519,124522],{"className":124520,"code":124521,"language":71745,"meta":26,"style":26},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[88,124523,124524],{"__ignoreMap":26},[91,124525,124526,124529],{"class":93,"line":94},[91,124527,124528],{"class":250},"http:",[91,124530,124531],{"class":308},"\u002F\u002Flocalhost:8000\n",[1256,124533,124534],{},[17,124535,124536,124537,124540],{},"如果HTML文件中有",[88,124538,124539],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[190,124542,124544],{"id":124543},"_76-linux重点知识","7.6 Linux重点知识",[217,124546,124548],{"id":124547},"_761-关于点的说明","7.6.1 关于点的说明",[21,124550,124551],{},[24,124552],{"alt":26,"src":124553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[21,124555,124556],{},"一点本目录，两点上目录",[217,124558,124560],{"id":124559},"_762-目录","7.6.2 目录",[22121,124562,124564],{"id":124563},"_7621-系统启动必须","7.6.2.1 系统启动必须",[21,124566,124567],{},[398,124568,124569],{},"\u002Fboot:",[21,124571,124572],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[21,124574,124575],{},[398,124576,124577],{},"\u002Fetc:",[21,124579,124580],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[21,124582,124583],{},[398,124584,124585],{},"\u002Flib：",[21,124587,124588],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[21,124590,124591],{},[398,124592,124593],{},"\u002Fsys:",[21,124595,124596],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22121,124598,124600],{"id":124599},"_7622-指令集合","7.6.2.2 指令集合",[21,124602,124603],{},[398,124604,124605],{},"\u002Fbin:",[21,124607,124608],{},"为二进制文件的缩写，存放最经常使用的命令",[21,124610,124611],{},[398,124612,124613],{},"\u002Fsbin:",[21,124615,124616],{},"只有系统管理员才能使用的程序和指令",[22121,124618,124620],{"id":124619},"_7623-外部文件管理","7.6.2.3 外部文件管理",[21,124622,124623],{},[398,124624,124625],{},"\u002Fdev:",[21,124627,124628],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[21,124630,124631],{},[398,124632,124633],{},"\u002Fmedia:",[21,124635,124636],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[21,124638,124639],{},[398,124640,124641],{},"\u002Fmnt:",[21,124643,124644],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22121,124646,124648],{"id":124647},"_7624-临时文件","7.6.2.4 临时文件",[21,124650,124651],{},[398,124652,124653],{},"\u002Frun:",[21,124655,124656],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[21,124658,124659],{},[398,124660,124661],{},"\u002Flost+found:",[21,124663,124664],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[21,124666,124667],{},[398,124668,124669],{},"\u002Ftmp:",[21,124671,124672],{},"这个目录是用来存放一些临时文件的",[22121,124674,124676],{"id":124675},"_7625-账户","7.6.2.5 账户",[21,124678,124679],{},[398,124680,124681],{},"\u002Froot：",[21,124683,124684],{},"系统管理员的用户主目录",[21,124686,124687,26594],{},[398,124688,124689],{},"\u002Fhome",[21,124691,124692],{},"用户的主目录，以用户的账号命名的",[21,124694,124695,26594],{},[398,124696,124697],{},"\u002Fusr",[21,124699,124700],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[21,124702,124703],{},[398,124704,124705],{},"\u002Fusr\u002Fbin：",[21,124707,124708],{},"系统用户使用的应用程序与指令",[21,124710,124711],{},[398,124712,124713],{},"\u002Fusr\u002Fsbin：",[21,124715,124716],{},"超级用户使用的比较高级的管理程序和系统守护程序",[21,124718,124719],{},[398,124720,124721],{},"\u002Fusr\u002Fsrc：",[21,124723,124724],{},"内核源代码默认的放置目录",[22121,124726,124728],{"id":124727},"_7626-运行过程要用","7.6.2.6 运行过程要用",[21,124730,124731],{},[398,124732,124733],{},"\u002Fvar：",[21,124735,124736],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[21,124738,124739],{},[398,124740,124741],{},"\u002Fproc:",[21,124743,124744,124745,124748],{},"管理 ",[398,124746,124747],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22121,124750,124752],{"id":124751},"_7627-扩展用的","7.6.2.7 扩展用的",[21,124754,124755],{},[398,124756,124757],{},"\u002Fopt:",[21,124759,124760],{},"默认是空的，我们安装额外软件可以放在这个里面",[21,124762,124763],{},[398,124764,124765],{},"\u002Fsrv:",[21,124767,124768],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[217,124770,124772],{"id":124771},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[21,124774,124775],{},[24,124776],{"alt":26,"src":124777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[21,124779,124780],{},"windows-->linux:",[21,124782,124783],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[21,124785,124786],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[21,124788,124789],{},"linux传输文件到windows",[21,124791,124792],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[217,124794,124796],{"id":124795},"_764-易忘知识","7.6.4 易忘知识",[21,124798,124799],{},"操作系统内核查看",[82,124801,124802],{"className":117377,"code":121371,"language":117379,"meta":26,"style":26},[88,124803,124804],{"__ignoreMap":26},[91,124805,124806,124808],{"class":93,"line":94},[91,124807,70285],{"class":97},[91,124809,121380],{"class":105},[21,124811,124812],{},[24,124813],{"alt":26,"src":124814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[21,124816,124817],{},[24,124818],{"alt":26,"src":124819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[82,124821,124823],{"className":117377,"code":124822,"language":117379,"meta":26,"style":26},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[88,124824,124825,124837],{"__ignoreMap":26},[91,124826,124827,124829,124832,124835],{"class":93,"line":94},[91,124828,121588],{"class":97},[91,124830,124831],{"class":101}," mvtest",[91,124833,124834],{"class":101}," mvtest2",[91,124836,2797],{"class":250},[91,124838,124839],{"class":93,"line":38},[91,124840,124841],{"class":97},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[21,124843,124844],{},[24,124845],{"alt":26,"src":124846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[21,124848,124849],{},[24,124850],{"alt":26,"src":124851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[21,124853,124854,124855,124858],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[88,124856,124857],{},"du -a"," 可以快速查看磁盘使用细节。",[217,124860,124862],{"id":124861},"_765-vim","7.6.5 Vim",[21,124864,124865],{},[24,124866],{"alt":26,"src":124867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[21,124869,124870],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[21,124872,124873],{},"一开始进去为命令模式，此时点击输入的字母为命令",[21,124875,124876],{},[398,124877,124878],{},"1.命令模式：",[21,124880,124881],{},"i 切换到输入模式，在光标当前位置开始输入文本",[21,124883,124884],{},"x 删除当前光标所在处的字符",[21,124886,124887],{},"：切换到底线命令模式，以在最底一行输入命令",[21,124889,124890],{},"a 进行插入模式，在光标下一个位置输入文本",[21,124892,124893],{},"o 在当前的下方插入一个新行，并进入插入模式",[21,124895,124896],{},"0 在当前行的上方插入一个新行，并进入插入模式",[21,124898,124899],{},"dd 剪切当前行",[21,124901,124902],{},"yy 复制当前行",[21,124904,124905],{},"p 粘贴剪贴板内容到光标下方",[21,124907,124908],{},"P 粘贴剪贴板内容到光标上方",[21,124910,124911],{},"u 撤销上一次操作",[21,124913,124914],{},"ctrl+r 重做上一次操作",[21,124916,124917,124919],{},[1044,124918],{}," 保存文件",[21,124921,124922,124924],{},[894,124923],{}," 退出Vim编辑器",[21,124926,124927,124929],{},[894,124928],{},"! 强制退出Vim编辑器，不保存修改",[21,124931,124932],{},[398,124933,124934],{},"2.输入模式：",[21,124936,124937],{},[24,124938],{"alt":26,"src":124939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[21,124941,124942],{},[398,124943,124944],{},"3.底线命令模式：",[21,124946,124947],{},[24,124948],{"alt":26,"src":124949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[21,124951,124952],{},"按下esc可以退出底线命令模式",[217,124954,124956],{"id":124955},"_766-apt","7.6.6 apt",[21,124958,124959],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[217,124961,124963],{"id":124962},"_767-home与root的区别","7.6.7 home与root的区别",[21,124965,124966],{},[24,124967],{"alt":26,"src":124968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[21,124970,124971],{},[24,124972],{"alt":26,"src":124973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[21,124975,124976],{},[24,124977],{"alt":26,"src":124978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[21,124980,124981],{},[24,124982],{"alt":26,"src":124983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[217,124985,124987],{"id":124986},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[21,124989,124990],{},[487,124991,124992],{"href":124992,"rel":124993},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23987],[14,124995,124996,124999],{},[17,124997,124998],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[17,125000,125001],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[21,125003,125004],{},[24,125005],{"alt":26,"src":125006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[21,125008,125009],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[21,125011,125012],{},[24,125013],{"alt":26,"src":125014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[82,125016,125018],{"className":120897,"code":125017,"language":120899,"meta":120900,"style":26},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[88,125019,125020,125025],{"__ignoreMap":26},[91,125021,125022],{"class":93,"line":94},[91,125023,125024],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[91,125026,125027],{"class":93,"line":38},[91,125028,125029],{},".\u002Fpycharm.sh\n",[21,125031,125032],{},"3️⃣创建.desktop文件",[21,125034,125035],{},[398,125036,125037],{},"原理：",[1256,125039,125040,125050],{},[17,125041,125042,125043,125049],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[398,125044,125045,125048],{},[88,125046,125047],{},".desktop"," 文件"," 来识别应用。",[17,125051,125052,125054,125055],{},[88,125053,125047],{}," 文件相当于一个“应用注册表”，告诉系统：",[1256,125056,125057,125060,125063,125066,125069],{},[17,125058,125059],{},"应用名字（Name）",[17,125061,125062],{},"图标（Icon）",[17,125064,125065],{},"执行命令（Exec）",[17,125067,125068],{},"分类（Categories）",[17,125070,125071],{},"是否需要终端（Terminal）",[82,125073,125075],{"className":120897,"code":125074,"language":120899,"meta":120900,"style":26},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[88,125076,125077,125082],{"__ignoreMap":26},[91,125078,125079],{"class":93,"line":94},[91,125080,125081],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[91,125083,125084],{"class":93,"line":38},[91,125085,125086],{},"nano pycharm.desktop\n",[21,125088,125089],{},"nano是一个命令行下的编辑器，也可以使用vim",[82,125091,125093],{"className":120897,"code":125092,"language":120899,"meta":120900,"style":26},"[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",[88,125094,125095,125100,125105,125110,125115,125120,125125,125130,125135,125140],{"__ignoreMap":26},[91,125096,125097],{"class":93,"line":94},[91,125098,125099],{},"[Desktop Entry]\n",[91,125101,125102],{"class":93,"line":38},[91,125103,125104],{},"Version=1.0\n",[91,125106,125107],{"class":93,"line":1304},[91,125108,125109],{},"Type=Application\n",[91,125111,125112],{"class":93,"line":1319},[91,125113,125114],{},"Name=PyCharm\n",[91,125116,125117],{"class":93,"line":1325},[91,125118,125119],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[91,125121,125122],{"class":93,"line":1339},[91,125123,125124],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[91,125126,125127],{"class":93,"line":1345},[91,125128,125129],{},"Comment=JetBrains PyCharm IDE\n",[91,125131,125132],{"class":93,"line":1436},[91,125133,125134],{},"Categories=Development;IDE;\n",[91,125136,125137],{"class":93,"line":1442},[91,125138,125139],{},"Terminal=false\n",[91,125141,125142],{"class":93,"line":1454},[91,125143,125144],{},"StartupWMClass=jetbrains-pycharm\n",[1256,125146,125147,125153,125159,125165],{},[17,125148,125149,125152],{},[88,125150,125151],{},"Exec"," → 点击图标时执行的命令",[17,125154,125155,125158],{},[88,125156,125157],{},"Icon"," → 显示在菜单和桌面上的图标",[17,125160,125161,125164],{},[88,125162,125163],{},"Terminal=false"," → 不打开终端",[17,125166,125167,125170],{},[88,125168,125169],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125172,125173,125174],"blockquote",{},[21,125175,125176,125177,125179,125180],{},"可以理解成 ",[88,125178,125047],{}," 文件是 Linux 的 ",[398,125181,125182],{},"快捷方式配置文件",[21,125184,125185],{},"4️⃣设置可执行权限",[82,125187,125189],{"className":120897,"code":125188,"language":120899,"meta":120900,"style":26},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[88,125190,125191],{"__ignoreMap":26},[91,125192,125193],{"class":93,"line":94},[91,125194,125188],{},[21,125196,125197],{},"5️⃣桌面图标启动的话如下：",[82,125199,125201],{"className":120897,"code":125200,"language":120899,"meta":120900,"style":26},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[88,125202,125203,125208],{"__ignoreMap":26},[91,125204,125205],{"class":93,"line":94},[91,125206,125207],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[91,125209,125210],{"class":93,"line":38},[91,125211,125212],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[14,125214,125215],{"start":1304},[17,125216,125217],{},"下载Appimage文件实现软件的安装",[21,125219,125220],{},"1️⃣先下载appimage",[21,125222,125223],{},[487,125224,125225],{"href":125225,"rel":125226},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23987],[21,125228,125229],{},[24,125230],{"alt":26,"src":125231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[21,125233,125234],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[21,125236,125237],{},[24,125238],{"alt":26,"src":125239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[21,125241,125242],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[21,125244,125245],{},[24,125246],{"alt":26,"src":125247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[21,125249,125250],{},[24,125251],{"alt":26,"src":125252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[21,125254,125255,125256,125259],{},"3️⃣给他们放在",[88,125257,125258],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[21,125261,125262],{},"4️⃣给软件执行权限",[82,125264,125266],{"className":120897,"code":125265,"language":120899,"meta":120900,"style":26},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[88,125267,125268,125273],{"__ignoreMap":26},[91,125269,125270],{"class":93,"line":94},[91,125271,125272],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[91,125274,125275],{"class":93,"line":38},[91,125276,125277],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[21,125279,125280],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[82,125282,125284],{"className":117377,"code":125283,"language":117379,"meta":26,"style":26},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[88,125285,125286,125293,125300,125306],{"__ignoreMap":26},[91,125287,125288,125290],{"class":93,"line":94},[91,125289,101357],{"class":105},[91,125291,125292],{"class":101}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[91,125294,125295,125297],{"class":93,"line":38},[91,125296,101364],{"class":97},[91,125298,125299],{"class":101}," .\u002Fqqmusic.desktop\n",[91,125301,125302,125304],{"class":93,"line":1304},[91,125303,124348],{"class":97},[91,125305,125299],{"class":101},[91,125307,125308,125310,125312,125314],{"class":93,"line":1319},[91,125309,24699],{"class":97},[91,125311,24702],{"class":101},[91,125313,123214],{"class":101},[91,125315,125299],{"class":101},[21,125317,125318,125320],{},[88,125319,101364],{},"：一个 Linux 命令，主要功能是：",[1256,125322,125323,125326],{},[17,125324,125325],{},"如果文件不存在，就创建一个新的空文件",[17,125327,125328],{},"如果文件已存在，就更新该文件的最后修改时间",[82,125330,125332],{"className":120897,"code":125331,"language":120899,"meta":120900,"style":26},"[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",[88,125333,125334,125338,125343,125348,125353,125357,125362],{"__ignoreMap":26},[91,125335,125336],{"class":93,"line":94},[91,125337,125099],{},[91,125339,125340],{"class":93,"line":38},[91,125341,125342],{},"Name=QQ音乐\n",[91,125344,125345],{"class":93,"line":1304},[91,125346,125347],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[91,125349,125350],{"class":93,"line":1319},[91,125351,125352],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[91,125354,125355],{"class":93,"line":1325},[91,125356,125109],{},[91,125358,125359],{"class":93,"line":1339},[91,125360,125361],{},"Categories=Audio;Music;Player;\n",[91,125363,125364],{"class":93,"line":1345},[91,125365,125366],{},"Comment=QQ Music Client for Linux\n",[21,125368,125369],{},"将文件复制进去",[21,125371,125372],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[21,125374,125375],{},[24,125376],{"alt":26,"src":125377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[21,125379,125380],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[21,125382,125383],{},[24,125384],{"alt":26,"src":125385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[21,125387,125388,125389,125392,125393,125396],{},"如果你用的不是KDE，那么也可以直接修改",[88,125390,125391],{},"qqmuic.desktop","：在exec的末尾加上",[88,125394,125395],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[82,125398,125400],{"className":120897,"code":125399,"language":120899,"meta":120900,"style":26},"[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",[88,125401,125402,125406,125410,125415,125419,125423,125427],{"__ignoreMap":26},[91,125403,125404],{"class":93,"line":94},[91,125405,125099],{},[91,125407,125408],{"class":93,"line":38},[91,125409,125342],{},[91,125411,125412],{"class":93,"line":1304},[91,125413,125414],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[91,125416,125417],{"class":93,"line":1319},[91,125418,125352],{},[91,125420,125421],{"class":93,"line":1325},[91,125422,125109],{},[91,125424,125425],{"class":93,"line":1339},[91,125426,125361],{},[91,125428,125429],{"class":93,"line":1345},[91,125430,125366],{},[21,125432,125433],{},[24,125434],{"alt":26,"src":125435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[21,125437,125438],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[82,125440,125442],{"className":120897,"code":125441,"language":120899,"meta":120900,"style":26},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[88,125443,125444],{"__ignoreMap":26},[91,125445,125446],{"class":93,"line":94},[91,125447,125441],{},[14,125449,125450],{"start":1319},[17,125451,125452],{},"去Flathub上安装软件",[21,125454,125455],{},[487,125456,125457],{"href":125457,"rel":125458},"https:\u002F\u002Fflathub.org\u002F",[23987],[21,125460,125461],{},"1️⃣去上面的官网搜索软件+下载软件",[21,125463,125464],{},[24,125465],{"alt":26,"src":125466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[82,125468,125470],{"className":120897,"code":125469,"language":120899,"meta":120900,"style":26},"flatpak install flathub com.obsproject.Studio\n",[88,125471,125472],{"__ignoreMap":26},[91,125473,125474],{"class":93,"line":94},[91,125475,125469],{},[21,125477,125478],{},[24,125479],{"alt":26,"src":125480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[21,125482,125483],{},"2️⃣运行软件",[21,125485,125486],{},"a.官方方式：",[21,125488,125489],{},[24,125490],{"alt":26,"src":125491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[82,125493,125494],{"className":120897,"code":125469,"language":120899,"meta":120900,"style":26},[88,125495,125496],{"__ignoreMap":26},[91,125497,125498],{"class":93,"line":94},[91,125499,125469],{},[21,125501,125502],{},"b.当普通软件运行：",[21,125504,125505],{},[24,125506],{"alt":26,"src":125507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[21,125509,125510],{},[24,125511],{"alt":26,"src":125512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[168,125514,125515],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":26,"searchDepth":38,"depth":38,"links":125517},[125518,125519,125524,125525,125531,125532],{"id":122250,"depth":38,"text":122251},{"id":122592,"depth":38,"text":122593,"children":125520},[125521,125522,125523],{"id":122596,"depth":1304,"text":122597},{"id":122663,"depth":1304,"text":122664},{"id":122924,"depth":1304,"text":122925},{"id":123077,"depth":38,"text":123078},{"id":123315,"depth":38,"text":123316,"children":125526},[125527,125528,125529,125530],{"id":123367,"depth":1304,"text":123368},{"id":123653,"depth":1304,"text":123654},{"id":123924,"depth":1304,"text":123925},{"id":124183,"depth":1304,"text":124184},{"id":124242,"depth":38,"text":124243},{"id":124543,"depth":38,"text":124544,"children":125533},[125534,125535,125536,125537,125538,125539,125540,125541],{"id":124547,"depth":1304,"text":124548},{"id":124559,"depth":1304,"text":124560},{"id":124771,"depth":1304,"text":124772},{"id":124795,"depth":1304,"text":124796},{"id":124861,"depth":1304,"text":124862},{"id":124955,"depth":1304,"text":124956},{"id":124962,"depth":1304,"text":124963},{"id":124986,"depth":1304,"text":124987},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122242,"description":23500},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125548,"title":125549,"body":125550,"description":23500,"extension":173,"meta":125554,"navigation":175,"path":125555,"seo":125556,"stem":125557,"__hash__":125558},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125551,"toc":125552},[],{"title":26,"searchDepth":38,"depth":38,"links":125553},[],{"category":30344},"\u002Fwiki\u002F2025-01-27-linux",{"title":125549,"description":23500},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125560,"title":125561,"body":125562,"description":125566,"extension":173,"meta":125957,"navigation":175,"path":125958,"seo":125959,"stem":125960,"__hash__":125961},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125563,"toc":125955},[125564,125567,125571,125588,125591,125644,125648,125650,125690,125699,125703,125706,125947,125952],[21,125565,125566],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125568,125570],{"id":125569},"_1ubuntu环境配置","1.Ubuntu环境配置",[14,125572,125573,125576,125579,125582,125585],{},[17,125574,125575],{},"ubuntu环境换源",[17,125577,125578],{},"安装cuda",[17,125580,125581],{},"安装miniconda",[17,125583,125584],{},"安装pytorch",[17,125586,125587],{},"安装genesis",[21,125589,125590],{},"参考链接：",[82,125592,125594],{"className":84,"code":125593,"language":86,"meta":26,"style":26},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[88,125595,125596],{"__ignoreMap":26},[91,125597,125598,125601,125604,125607,125609,125612,125615,125617,125620,125623,125625,125628,125631,125633,125636,125639,125641],{"class":93,"line":94},[91,125599,125600],{"class":97},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[91,125602,125603],{"class":101},"=blogdetail",[91,125605,125606],{"class":250},"&sharetype",[91,125608,296],{"class":153},[91,125610,125611],{"class":101},"blogdetail",[91,125613,125614],{"class":250},"&sharerId",[91,125616,296],{"class":153},[91,125618,125619],{"class":101},"144728092",[91,125621,125622],{"class":250},"&sharerefer",[91,125624,296],{"class":153},[91,125626,125627],{"class":101},"PC",[91,125629,125630],{"class":250},"&sharesource",[91,125632,296],{"class":153},[91,125634,125635],{"class":101},"qq_69379513",[91,125637,125638],{"class":250},"&sharefrom",[91,125640,296],{"class":153},[91,125642,125643],{"class":101},"from_link\n",[10,125645,125647],{"id":125646},"_2genesis-报错issue","2.Genesis 报错issue",[21,125649,125590],{},[82,125651,125652],{"className":84,"code":125593,"language":86,"meta":26,"style":26},[88,125653,125654],{"__ignoreMap":26},[91,125655,125656,125658,125660,125662,125664,125666,125668,125670,125672,125674,125676,125678,125680,125682,125684,125686,125688],{"class":93,"line":94},[91,125657,125600],{"class":97},[91,125659,125603],{"class":101},[91,125661,125606],{"class":250},[91,125663,296],{"class":153},[91,125665,125611],{"class":101},[91,125667,125614],{"class":250},[91,125669,296],{"class":153},[91,125671,125619],{"class":101},[91,125673,125622],{"class":250},[91,125675,296],{"class":153},[91,125677,125627],{"class":101},[91,125679,125630],{"class":250},[91,125681,296],{"class":153},[91,125683,125635],{"class":101},[91,125685,125638],{"class":250},[91,125687,296],{"class":153},[91,125689,125643],{"class":101},[82,125691,125693],{"className":84,"code":125692,"language":86,"meta":26,"style":26},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[88,125694,125695],{"__ignoreMap":26},[91,125696,125697],{"class":93,"line":94},[91,125698,125692],{"class":97},[10,125700,125702],{"id":125701},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[21,125704,125705],{},"hello_robot.py",[82,125707,125709],{"className":30459,"code":125708,"language":30461,"meta":26,"style":26},"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",[88,125710,125711,125717,125732,125736,125748,125760,125764,125777,125781,125800,125810,125820,125834,125838,125842,125847,125851,125861,125868,125882,125889,125899,125904,125908,125926,125931,125935,125942],{"__ignoreMap":26},[91,125712,125713,125715],{"class":93,"line":94},[91,125714,30473],{"class":153},[91,125716,45386],{"class":250},[91,125718,125719,125722,125725,125727,125729],{"class":93,"line":38},[91,125720,125721],{"class":250},"os.environ[",[91,125723,125724],{"class":101},"'PYOPENGL_PLATFORM'",[91,125726,4566],{"class":250},[91,125728,296],{"class":153},[91,125730,125731],{"class":101}," 'glx'\n",[91,125733,125734],{"class":93,"line":1304},[91,125735,2523],{"emptyLinePlaceholder":175},[91,125737,125738,125740,125743,125745],{"class":93,"line":1319},[91,125739,30473],{"class":153},[91,125741,125742],{"class":250}," genesis ",[91,125744,31464],{"class":153},[91,125746,125747],{"class":250}," gs\n",[91,125749,125750,125752,125755,125757],{"class":93,"line":1325},[91,125751,30818],{"class":153},[91,125753,125754],{"class":250}," pynput ",[91,125756,30473],{"class":153},[91,125758,125759],{"class":250}," keyboard\n",[91,125761,125762],{"class":93,"line":1339},[91,125763,2523],{"emptyLinePlaceholder":175},[91,125765,125766,125769,125772,125774],{"class":93,"line":1345},[91,125767,125768],{"class":250},"gs.init(",[91,125770,125771],{"class":5339},"backend",[91,125773,296],{"class":153},[91,125775,125776],{"class":250},"gs.gpu)\n",[91,125778,125779],{"class":93,"line":1436},[91,125780,2523],{"emptyLinePlaceholder":175},[91,125782,125783,125786,125788,125791,125794,125796,125798],{"class":93,"line":1442},[91,125784,125785],{"class":250},"scene ",[91,125787,296],{"class":153},[91,125789,125790],{"class":250}," gs.Scene(",[91,125792,125793],{"class":5339},"show_viewer",[91,125795,296],{"class":153},[91,125797,31557],{"class":105},[91,125799,257],{"class":250},[91,125801,125802,125805,125807],{"class":93,"line":1454},[91,125803,125804],{"class":250},"plane ",[91,125806,296],{"class":153},[91,125808,125809],{"class":250}," scene.add_entity(gs.morphs.Plane())\n",[91,125811,125812,125815,125817],{"class":93,"line":1736},[91,125813,125814],{"class":250},"franka ",[91,125816,296],{"class":153},[91,125818,125819],{"class":250}," scene.add_entity(\n",[91,125821,125822,125825,125827,125829,125832],{"class":93,"line":1741},[91,125823,125824],{"class":250},"    gs.morphs.MJCF(",[91,125826,45435],{"class":5339},[91,125828,296],{"class":153},[91,125830,125831],{"class":101},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[91,125833,38128],{"class":250},[91,125835,125836],{"class":93,"line":1747},[91,125837,257],{"class":250},[91,125839,125840],{"class":93,"line":1752},[91,125841,2523],{"emptyLinePlaceholder":175},[91,125843,125844],{"class":93,"line":1766},[91,125845,125846],{"class":250},"scene.build()\n",[91,125848,125849],{"class":93,"line":1771},[91,125850,2523],{"emptyLinePlaceholder":175},[91,125852,125853,125855,125858],{"class":93,"line":1777},[91,125854,32028],{"class":153},[91,125856,125857],{"class":97}," on_press",[91,125859,125860],{"class":250},"(key):\n",[91,125862,125863,125866],{"class":93,"line":1798},[91,125864,125865],{"class":153},"    try",[91,125867,3862],{"class":250},[91,125869,125870,125872,125875,125877,125880],{"class":93,"line":1803},[91,125871,2620],{"class":153},[91,125873,125874],{"class":250}," key.char ",[91,125876,3072],{"class":153},[91,125878,125879],{"class":101}," 'q'",[91,125881,3862],{"class":250},[91,125883,125884,125886],{"class":93,"line":1817},[91,125885,15855],{"class":153},[91,125887,125888],{"class":105}," False\n",[91,125890,125891,125894,125897],{"class":93,"line":1822},[91,125892,125893],{"class":153},"    except",[91,125895,125896],{"class":105}," AttributeError",[91,125898,3862],{"class":250},[91,125900,125901],{"class":93,"line":1851},[91,125902,125903],{"class":153},"        pass\n",[91,125905,125906],{"class":93,"line":1856},[91,125907,2523],{"emptyLinePlaceholder":175},[91,125909,125910,125913,125915,125918,125921,125923],{"class":93,"line":1873},[91,125911,125912],{"class":250},"listener ",[91,125914,296],{"class":153},[91,125916,125917],{"class":250}," keyboard.Listener(",[91,125919,125920],{"class":5339},"on_press",[91,125922,296],{"class":153},[91,125924,125925],{"class":250},"on_press)\n",[91,125927,125928],{"class":93,"line":1878},[91,125929,125930],{"class":250},"listener.start()\n",[91,125932,125933],{"class":93,"line":1883},[91,125934,2523],{"emptyLinePlaceholder":175},[91,125936,125937,125939],{"class":93,"line":1888},[91,125938,108744],{"class":153},[91,125940,125941],{"class":250}," listener.running:\n",[91,125943,125944],{"class":93,"line":1902},[91,125945,125946],{"class":250},"    scene.step()\n",[21,125948,125949],{},[24,125950],{"alt":26,"src":125951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[168,125953,125954],{},"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":26,"searchDepth":38,"depth":38,"links":125956},[],{"category":23502},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125561,"description":125566},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125963,"title":125964,"body":125965,"description":23500,"extension":173,"meta":125980,"navigation":175,"path":125981,"seo":125982,"stem":125983,"__hash__":125984},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125966,"toc":125977},[125967,125970,125974],[10,125968,125964],{"id":125969},"_1-基础知识",[190,125971,125973],{"id":125972},"_11-js的组成","1.1 js的组成",[21,125975,125976],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":26,"searchDepth":38,"depth":38,"links":125978},[125979],{"id":125972,"depth":38,"text":125973},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125964,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125986,"title":125987,"body":125988,"description":23500,"extension":173,"meta":126127,"navigation":175,"path":126128,"seo":126129,"stem":126130,"__hash__":126131},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125989,"toc":126115},[125990,125993,125997,126000,126004,126014,126018,126021,126024,126027,126031,126038,126044,126048,126054,126065,126069,126072,126076,126079,126083,126086,126090,126093,126097,126100,126103,126106,126109,126112],[10,125991,125987],{"id":125992},"_2-vscode必备内容",[190,125994,125996],{"id":125995},"_21-标签分类","2.1 标签分类",[21,125998,125999],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[190,126001,126003],{"id":126002},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[21,126005,126006,126007,126009,126010,126013],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[88,126008,475],{}," 然后按 ",[88,126011,126012],{},"Tab","，快速自动生成基本结构。",[190,126015,126017],{"id":126016},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[21,126019,126020],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[21,126022,126023],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[21,126025,126026],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[190,126028,126030],{"id":126029},"_24-视图缩放","2.4 视图缩放",[21,126032,126033,126034,126037],{},"缩放视图 ",[88,126035,126036],{},"ctrl+"," 可实现代码增大。",[21,126039,126040,126043],{},[88,126041,126042],{},"ctrl-"," 可实现代码减小。",[190,126045,126047],{"id":126046},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[21,126049,126050,126051,28504],{},"VSCode 新建文件快捷键为 ",[88,126052,126053],{},"ctrl+N",[21,126055,126056,126057,126060,126061,126064],{},"保存快捷键为 ",[88,126058,126059],{},"ctrl+S","，将文本保存为 ",[88,126062,126063],{},".html"," 文件。",[190,126066,126068],{"id":126067},"_26-auto-rename-tag","2.6 Auto Rename Tag",[21,126070,126071],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[190,126073,126075],{"id":126074},"_27-vscode-icons","2.7 vscode-icons",[21,126077,126078],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[190,126080,126082],{"id":126081},"_28-easy-less","2.8 Easy LESS",[21,126084,126085],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[190,126087,126089],{"id":126088},"_29-会了吧插件","2.9 会了吧插件",[21,126091,126092],{},"会了吧插件可以展示代码中英语单词的意思。",[190,126094,126096],{"id":126095},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[21,126098,126099],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[21,126101,126102],{},"②选定多个相同的单词:ctrl+D",[21,126104,126105],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[21,126107,126108],{},"④全局替换某些单词:ctrl+h",[21,126110,126111],{},"⑤快速定位到某一行:ctrl+g",[21,126113,126114],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":26,"searchDepth":38,"depth":38,"links":126116},[126117,126118,126119,126120,126121,126122,126123,126124,126125,126126],{"id":125995,"depth":38,"text":125996},{"id":126002,"depth":38,"text":126003},{"id":126016,"depth":38,"text":126017},{"id":126029,"depth":38,"text":126030},{"id":126046,"depth":38,"text":126047},{"id":126067,"depth":38,"text":126068},{"id":126074,"depth":38,"text":126075},{"id":126081,"depth":38,"text":126082},{"id":126088,"depth":38,"text":126089},{"id":126095,"depth":38,"text":126096},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125987,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126133,"title":126134,"body":126135,"description":23500,"extension":173,"meta":126294,"navigation":175,"path":126295,"seo":126296,"stem":126297,"__hash__":126298},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126136,"toc":126286},[126137,126140,126144,126154,126160,126166,126170,126179,126183,126188,126191,126194,126198,126201,126211,126220,126229,126238,126248,126255,126260,126265,126278],[10,126138,126134],{"id":126139},"_3-html文本与容器标签",[190,126141,126143],{"id":126142},"_31-标题标签","3.1 标题标签",[21,126145,126146,126149,126150,126153],{},[88,126147,126148],{},"\u003Ch1>","我是一级标签",[88,126151,126152],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[21,126155,126156,126149,126158],{},[88,126157,126148],{},[88,126159,126152],{},[21,126161,123416,126162,126165],{},[88,126163,126164],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[190,126167,126169],{"id":126168},"_32-段落标签","3.2 段落标签",[21,126171,126172,126175,126176],{},[88,126173,126174],{},"\u003Cp>","....",[88,126177,126178],{},"\u003C\u002Fp>",[190,126180,126182],{"id":126181},"_33-换行标签","3.3 换行标签",[21,126184,126185],{},[88,126186,126187],{},"\u003Cbr \u002F>",[21,126189,126190],{},"具有强制换行的作用",[21,126192,126193],{},"单标签",[190,126195,126197],{"id":126196},"_34-文本格式化标签","3.4 文本格式化标签",[21,126199,126200],{},"提供粗体、斜体和下划线等效果",[21,126202,126203,126204,82620,126207,126210],{},"加粗：",[88,126205,126206],{},"\u003Cstrong>...\u003C\u002Fstrong>",[88,126208,126209],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[21,126212,126213,126214,82620,126217,126210],{},"斜体：",[88,126215,126216],{},"\u003Cem>...\u003C\u002Fem>",[88,126218,126219],{},"\u003Ci>...\u003C\u002Fi>",[21,126221,126222,126223,82620,126226,126210],{},"删除线：",[88,126224,126225],{},"\u003Cdel>...\u003C\u002Fdel>",[88,126227,126228],{},"\u003Cs>...\u003C\u002Fs>",[21,126230,126231,126232,82620,126235,126210],{},"下划线：",[88,126233,126234],{},"\u003Cins>...\u003C\u002Fins>",[88,126236,126237],{},"\u003Cu>...\u003C\u002Fu>",[190,126239,126241,126242,18533,126245,102774],{"id":126240},"_35-div和span标签","3.5 ",[88,126243,126244],{},"\u003Cdiv>",[88,126246,126247],{},"\u003Cspan>",[21,126249,126250,101099,126252,126254],{},[88,126251,126244],{},[88,126253,126247],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[21,126256,126257],{},[88,126258,126259],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[21,126261,126262],{},[88,126263,126264],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[21,126266,126267,126268,126270,126271,126273,126274,126277],{},"两者特点：①",[88,126269,126244],{}," 标签用来布局，但一行通常只放一个 ",[88,126272,126244],{},"。可以理解为一个大盒子，独占一行，在 ",[88,126275,126276],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[21,126279,77330,126280,126282,126283,126285],{},[88,126281,126247],{}," 标签也可用于布局，一行可以放多个 ",[88,126284,126247],{},"，可理解为小盒子。",{"title":26,"searchDepth":38,"depth":38,"links":126287},[126288,126289,126290,126291,126292],{"id":126142,"depth":38,"text":126143},{"id":126168,"depth":38,"text":126169},{"id":126181,"depth":38,"text":126182},{"id":126196,"depth":38,"text":126197},{"id":126240,"depth":38,"text":126293},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126134,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126300,"title":126301,"body":126302,"description":23500,"extension":173,"meta":126499,"navigation":175,"path":126500,"seo":126501,"stem":126502,"__hash__":126503},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126303,"toc":126491},[126304,126307,126311,126314,126320,126327,126333,126339,126342,126345,126348,126351,126354,126357,126360,126364,126367,126370,126373,126379,126385,126391,126398,126402,126408,126414,126417,126420,126426,126432,126438,126441,126444,126448,126451,126461,126467,126471,126480,126484,126487],[10,126305,126301],{"id":126306},"_4-html图像与链接",[190,126308,126310],{"id":126309},"_41-图像标签","4.1 图像标签",[21,126312,126313],{},"（1）标签",[21,126315,126316,126319],{},[88,126317,126318],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[21,126321,126322,126323,126326],{},"src是",[88,126324,126325],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[21,126328,126329,126330],{},"alt:文本，替换文本。图像不能显示的文字 ",[88,126331,126332],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[21,126334,126335,126336],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[88,126337,126338],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[21,126340,126341],{},"width:像素，设置图像的宽度",[21,126343,126344],{},"height:像素，设置图像的高度",[21,126346,126347],{},"border：像素，设置图像的边框粗细",[21,126349,126350],{},"（2）图像标签属性的注意点：",[21,126352,126353],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[21,126355,126356],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[21,126358,126359],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[190,126361,126363],{"id":126362},"_42-路径注意要点","4.2 路径注意要点：",[21,126365,126366],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[21,126368,126369],{},"（2）根目录：就是打开文件夹的第一层根目录",[21,126371,126372],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[21,126374,126375,126376],{},"①同一级路径：图像文件位于HTML文件同一级，如",[88,126377,126378],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[21,126380,126381,126382],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[88,126383,126384],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[21,126386,126387,126388],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[88,126389,126390],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[21,126392,126393,126394,500],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[487,126395,126396],{"href":126396,"rel":126397},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23987],[190,126399,126401],{"id":126400},"_43-超链接标签","4.3 超链接标签",[21,126403,126404,126407],{},[88,126405,126406],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[21,126409,126410,126411],{},"①语法格式：",[88,126412,126413],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[21,126415,126416],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[21,126418,126419],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[21,126421,126422,126423],{},"③链接分类：外部链接：",[88,126424,126425],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[21,126427,126428,126429],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[88,126430,126431],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[21,126433,126434,126435],{},"空链接：如果当时没有确定链接目标时，",[88,126436,126437],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[21,126439,126440],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[21,126442,126443],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[190,126445,126447],{"id":126446},"_44-锚点链接","4.4 锚点链接",[21,126449,126450],{},"点我们点击链接，可以快速定位到页面中的某个位置",[21,126452,126453,126454,126457,126458],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[88,126455,126456],{},"\u003Ca href=\"#two\">","第二级",[88,126459,126460],{},"\u003C\u002Fa>",[21,126462,126463,126464],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[88,126465,126466],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[190,126468,126470],{"id":126469},"_45-注释标签","4.5 注释标签",[21,126472,126473,126476,126477],{},[88,126474,126475],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[88,126478,126479],{},"ctrl+\u002F",[190,126481,126483],{"id":126482},"_46-特殊字符","4.6 特殊字符",[21,126485,126486],{},"可以实现添加多个空格",[24,126488],{"style":126489,"src":126490},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":26,"searchDepth":38,"depth":38,"links":126492},[126493,126494,126495,126496,126497,126498],{"id":126309,"depth":38,"text":126310},{"id":126362,"depth":38,"text":126363},{"id":126400,"depth":38,"text":126401},{"id":126446,"depth":38,"text":126447},{"id":126469,"depth":38,"text":126470},{"id":126482,"depth":38,"text":126483},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126301,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126505,"title":126506,"body":126507,"description":23500,"extension":173,"meta":126800,"navigation":175,"path":126801,"seo":126802,"stem":126803,"__hash__":126804},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126508,"toc":126791},[126509,126512,126516,126519,126522,126525,126528,126531,126534,126537,126540,126543,126563,126569,126573,126576,126579,126582,126585,126588,126591,126595,126598,126601,126604,126607,126620,126625,126628,126631,126646,126649,126652,126655,126658,126661,126665,126668,126675,126678,126681,126684,126687,126690,126696,126699,126702,126708,126711,126714,126717,126723,126726,126729,126743,126750,126753,126756,126763,126772,126775,126778,126781,126785,126788],[10,126510,126506],{"id":126511},"_5-html表格列表与表单",[190,126513,126515],{"id":126514},"_51-表格标签","5.1 表格标签",[21,126517,126518],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[21,126520,126521],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[21,126523,126524],{},"②表格基本语法：",[24,126526],{"style":126489,"src":126527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[21,126529,126530],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[24,126532],{"style":126489,"src":126533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[21,126535,126536],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[24,126538],{"style":126489,"src":126539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[21,126541,126542],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[21,126544,126545,126548,126549,126551,126552,126555,126556,126558,126559,126562],{},[88,126546,126547],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[88,126550,126547],{},"内部必须拥有",[88,126553,126554],{},"\u003Ctr>","标签，一般位于第一行，",[88,126557,126547],{},"比",[88,126560,126561],{},"\u003Cth>","范围广",[21,126564,126565,126568],{},[88,126566,126567],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[190,126570,126572],{"id":126571},"_52-合并单元格","5.2 合并单元格",[21,126574,126575],{},"（1）合并单元格方式：",[21,126577,126578],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[21,126580,126581],{},"②跨列合并：colspan=\"合并单元格的个数\"",[21,126583,126584],{},"（2）目标单元格：",[21,126586,126587],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[21,126589,126590],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[190,126592,126594],{"id":126593},"_53-列表标签","5.3 列表标签",[21,126596,126597],{},"（1）分类：无序列表、有序列表、自定义列表",[21,126599,126600],{},"①无序列表：",[24,126602],{"style":126489,"src":126603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[21,126605,126606],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[21,126608,126609,126612,126613,126616,126617,126619],{},[88,126610,126611],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[88,126614,126615],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[88,126618,126611],{},"中输入其他标签或文字是不对的",[21,126621,126622,126624],{},[88,126623,126615],{},"之间相当于一个容器，可以容纳所有元素",[21,126626,126627],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[21,126629,126630],{},"在css中去除前边的小圆点采用如下代码:",[82,126632,126636],{"className":126633,"code":126634,"language":126635,"meta":26,"style":26},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[88,126637,126638],{"__ignoreMap":26},[91,126639,126640,126643],{"class":93,"line":94},[91,126641,126642],{"class":51381},"list-style",[91,126644,126645],{"class":250},": none;\n",[21,126647,126648],{},"②有序列表：",[24,126650],{"style":126489,"src":126651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[21,126653,126654],{},"③自定义列表：",[24,126656],{"style":126489,"src":126657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[24,126659],{"style":126489,"src":126660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[190,126662,126664],{"id":126663},"_54-表单标签","5.4 表单标签",[21,126666,126667],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[21,126669,126670,126671,126674],{},"（1）表单域：包含单元素的区域，",[88,126672,126673],{},"\u003Cform>","标签可以实现信息的收集和传递。",[24,126676],{"style":126489,"src":126677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[21,126679,126680],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[21,126682,126683],{},"表单元素提交必须有name属性",[21,126685,126686],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[21,126688,126689],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[21,126691,77307,126692,126695],{},[88,126693,126694],{},"\u003Cinput>","输入表单元素",[24,126697],{"style":126489,"src":126698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[24,126700],{"style":126489,"src":126701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[21,126703,126704,126705],{},"单选按钮：",[88,126706,126707],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[24,126709],{"style":126489,"src":126710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[21,126712,126713],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[24,126715],{"style":126489,"src":126716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[21,126718,126719,126722],{},[398,126720,126721],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[21,126724,126725],{},"②select下拉表单元素：可以节约页面控件",[24,126727],{"style":126489,"src":126728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[21,126730,126731,13918,126733,126736,126737,126739,126740,126742],{},[398,126732,280],{},[88,126734,126735],{},"\u003Cselect>","中至少包含一对",[88,126738,102795],{},"；在",[88,126741,102795],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[21,126744,126745,126746,126749],{},"③",[88,126747,126748],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[24,126751],{"style":126489,"src":126752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[21,126754,126755],{},"3行20列",[190,126757,126759,126760,102774],{"id":126758},"_55-lable标签","5.5 ",[88,126761,126762],{},"\u003Clable>",[21,126764,126765,126766,126768,126769,126771],{},"它不是表单标签，但常常与表单标签搭配使用，",[88,126767,126762],{},"标签用于绑定一个表单标签，当点击",[88,126770,126762],{},"标签内的文本",[21,126773,126774],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[24,126776],{"style":126489,"src":126777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[24,126779],{"style":126489,"src":126780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[190,126782,126784],{"id":126783},"_56-实例","5.6 实例",[24,126786],{"style":126489,"src":126787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[168,126789,126790],{},"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":26,"searchDepth":38,"depth":38,"links":126792},[126793,126794,126795,126796,126797,126799],{"id":126514,"depth":38,"text":126515},{"id":126571,"depth":38,"text":126572},{"id":126593,"depth":38,"text":126594},{"id":126663,"depth":38,"text":126664},{"id":126758,"depth":38,"text":126798},"5.5 \u003Clable>标签",{"id":126783,"depth":38,"text":126784},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126506,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126806,"title":126807,"body":126808,"description":23500,"extension":173,"meta":127357,"navigation":175,"path":127358,"seo":127359,"stem":127360,"__hash__":127361},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126809,"toc":127332},[126810,126813,126817,126820,126823,126827,126830,126833,126836,126839,126842,126845,126848,126852,126855,126859,126862,126865,126868,126872,126875,126878,126881,126887,126890,126893,126896,126899,126902,126905,126908,126941,126945,126948,126951,126954,126958,126961,126964,126967,126970,126973,126977,126980,126983,126986,126990,126993,126997,127000,127004,127007,127012,127016,127019,127023,127026,127029,127032,127035,127062,127065,127069,127072,127075,127080,127083,127086,127090,127093,127098,127101,127104,127107,127111,127114,127117,127120,127124,127127,127130,127133,127137,127141,127144,127184,127187,127191,127198,127201,127205,127208,127254,127258,127261,127264,127267,127295,127299,127302,127329],[10,126811,126807],{"id":126812},"_6-css语法与文本样式",[190,126814,126816],{"id":126815},"_61-css语法规范","6.1 css语法规范",[21,126818,126819],{},"由两部分组成，选择器及一条或多条声明",[24,126821],{"style":126489,"src":126822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[21,126824,126825],{},[398,126826,280],{},[21,126828,126829],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[21,126831,126832],{},"②属性与属性值以“键值对”的形式出现",[21,126834,126835],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[21,126837,126838],{},"④属性和属性值之间用英文“;”分开",[24,126840],{"style":126489,"src":126841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[24,126843],{"style":126489,"src":126844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[24,126846],{"style":126489,"src":126847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[190,126849,126851],{"id":126850},"_62-css选择器","6.2 css选择器",[21,126853,126854],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[217,126856,126858],{"id":126857},"_621-标签选择器","6.2.1 标签选择器",[21,126860,126861],{},"①优点：能快速为页面中同类型的标签统一设置样式",[21,126863,126864],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[24,126866],{"style":126489,"src":126867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[217,126869,126871],{"id":126870},"_622-类选择器","6.2.2 类选择器",[21,126873,126874],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[21,126876,126877],{},"②样例",[24,126879],{"style":126489,"src":126880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[21,126882,126883,126884,126886],{},"③ ",[398,126885,126721],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[21,126888,126889],{},"可以理解为给这个标签起了个名字，来表示；",[21,126891,126892],{},"长名称或词组可以使用横线来为选择器命名；",[21,126894,126895],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[21,126897,126898],{},"命名要有意义；",[24,126900],{"style":126489,"src":126901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[21,126903,126904],{},"类选择器也可以指定特殊的元素p.center{}",[21,126906,126907],{},"p.center和.center都对",[82,126909,126911],{"className":126633,"code":126910,"language":126635,"meta":26,"style":26},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[88,126912,126913,126918,126927,126937],{"__ignoreMap":26},[91,126914,126915],{"class":93,"line":94},[91,126916,126917],{"class":308},"\u002F* 类选择器指定特殊元素 *\u002F\n",[91,126919,126920,126922,126925],{"class":93,"line":38},[91,126921,21],{"class":51381},[91,126923,126924],{"class":97},".center",[91,126926,15695],{"class":250},[91,126928,126929,126931,126933,126935],{"class":93,"line":1304},[91,126930,70607],{"class":105},[91,126932,51518],{"class":250},[91,126934,51673],{"class":105},[91,126936,1415],{"class":250},[91,126938,126939],{"class":93,"line":1319},[91,126940,1689],{"class":250},[217,126942,126944],{"id":126943},"_623-多类名使用","6.2.3 多类名使用",[21,126946,126947],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[24,126949],{"style":126489,"src":126950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[21,126952,126953],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[217,126955,126957],{"id":126956},"_624-id选择器","6.2.4 id选择器",[21,126959,126960],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[21,126962,126963],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[24,126965],{"style":126489,"src":126966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[21,126968,126969],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[21,126971,126972],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[217,126974,126976],{"id":126975},"_625-通配符选择器","6.2.5 通配符选择器",[21,126978,126979],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[21,126981,126982],{},"* {",[21,126984,126985],{},"color=\"red\"}",[217,126987,126989],{"id":126988},"_626-总结","6.2.6 总结",[24,126991],{"style":126489,"src":126992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[190,126994,126996],{"id":126995},"_63-css字体属性","6.3 css字体属性",[21,126998,126999],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[217,127001,127003],{"id":127002},"_631-字体系列","6.3.1 字体系列",[21,127005,127006],{},"font-family: '宋体';",[21,127008,127009,127011],{},[398,127010,280],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[217,127013,127015],{"id":127014},"_632-字体大小","6.3.2 字体大小",[21,127017,127018],{},"font-size: 20px",[21,127020,127021,26594],{},[398,127022,126721],{},[21,127024,127025],{},"①px（像素）大小是网页的最常用单位",[21,127027,127028],{},"②谷歌浏览器默认为16px",[21,127030,127031],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[21,127033,127034],{},"④可以给body指定整个页面的大小：会自动引用",[82,127036,127038],{"className":126633,"code":127037,"language":126635,"meta":26,"style":26},"body {\n  font-size: 16px;\n}\n",[88,127039,127040,127046,127058],{"__ignoreMap":26},[91,127041,127042,127044],{"class":93,"line":94},[91,127043,51881],{"class":51381},[91,127045,15695],{"class":250},[91,127047,127048,127050,127052,127054,127056],{"class":93,"line":38},[91,127049,70707],{"class":105},[91,127051,51518],{"class":250},[91,127053,850],{"class":105},[91,127055,51573],{"class":153},[91,127057,1415],{"class":250},[91,127059,127060],{"class":93,"line":1304},[91,127061,1689],{"class":250},[21,127063,127064],{},"⑤标题标签比较特殊，需要单独指定大小",[217,127066,127068],{"id":127067},"_633-字体粗细","6.3.3 字体粗细",[21,127070,127071],{},"font-weight: bold;",[21,127073,127074],{},"font-weight: 100；",[21,127076,127077,127079],{},[398,127078,280],{}," ①粗体文字变细：尽量别用normal，多用数字",[21,127081,127082],{},"font-weight= 400;",[21,127084,127085],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[217,127087,127089],{"id":127088},"_634-文字样式","6.3.4 文字样式",[21,127091,127092],{},"font-style: normal；",[21,127094,127095,26594],{},[398,127096,127097],{},"属性值",[21,127099,127100],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[21,127102,127103],{},"②italic：浏览器会显示斜体的字体样式",[24,127105],{"style":126489,"src":127106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[217,127108,127110],{"id":127109},"_635-字体符合属性","6.3.5 字体符合属性",[24,127112],{"style":126489,"src":127113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[24,127115],{"style":126489,"src":127116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[21,127118,127119],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[21,127121,127122,26594],{},[398,127123,126721],{},[21,127125,127126],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[21,127128,127129],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[21,127131,127132],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[190,127134,127136],{"id":127135},"_64-css-test文本属性","6.4 css test文本属性",[217,127138,127140],{"id":127139},"_641-文本颜色","6.4.1 文本颜色",[21,127142,127143],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[82,127145,127147],{"className":126633,"code":127146,"language":126635,"meta":26,"style":26},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[88,127148,127149,127154,127160,127170,127175,127180],{"__ignoreMap":26},[91,127150,127151],{"class":93,"line":94},[91,127152,127153],{"class":308},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[91,127155,127156,127158],{"class":93,"line":38},[91,127157,21],{"class":51381},[91,127159,15695],{"class":250},[91,127161,127162,127164,127166,127168],{"class":93,"line":1304},[91,127163,70986],{"class":105},[91,127165,51518],{"class":250},[91,127167,57502],{"class":105},[91,127169,1415],{"class":250},[91,127171,127172],{"class":93,"line":1319},[91,127173,127174],{"class":308},"  \u002F* color: #ff0000; *\u002F\n",[91,127176,127177],{"class":93,"line":1325},[91,127178,127179],{"class":308},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[91,127181,127182],{"class":93,"line":1339},[91,127183,1689],{"class":250},[24,127185],{"style":126489,"src":127186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[217,127188,127190],{"id":127189},"_642-对齐文本","6.4.2 对齐文本",[21,127192,127193,127194,127197],{},"text-align属于用于设置元素内文本内容的 ",[398,127195,127196],{},"水平对齐"," 方式",[21,127199,127200],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[217,127202,127204],{"id":127203},"_643-装饰文本","6.4.3 装饰文本",[21,127206,127207],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[82,127209,127211],{"className":126633,"code":127210,"language":126635,"meta":26,"style":26},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[88,127212,127213,127219,127229,127233,127239,127250],{"__ignoreMap":26},[91,127214,127215,127217],{"class":93,"line":94},[91,127216,487],{"class":51381},[91,127218,15695],{"class":250},[91,127220,127221,127223,127225,127227],{"class":93,"line":38},[91,127222,70583],{"class":105},[91,127224,51518],{"class":250},[91,127226,54818],{"class":105},[91,127228,1415],{"class":250},[91,127230,127231],{"class":93,"line":1304},[91,127232,1689],{"class":250},[91,127234,127235,127237],{"class":93,"line":1319},[91,127236,21],{"class":51381},[91,127238,15695],{"class":250},[91,127240,127241,127243,127245,127248],{"class":93,"line":1325},[91,127242,70583],{"class":105},[91,127244,51518],{"class":250},[91,127246,127247],{"class":105},"underline",[91,127249,1415],{"class":250},[91,127251,127252],{"class":93,"line":1339},[91,127253,1689],{"class":250},[217,127255,127257],{"id":127256},"_644-文本缩进","6.4.4 文本缩进",[21,127259,127260],{},"实现文本的第一行首行缩进自己指定的距离",[21,127262,127263],{},"20px往右边走；-20px往左边走",[21,127265,127266],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[82,127268,127270],{"className":126633,"code":127269,"language":126635,"meta":26,"style":26},"p {\n  text-indent: 2em;\n}\n",[88,127271,127272,127278,127291],{"__ignoreMap":26},[91,127273,127274,127276],{"class":93,"line":94},[91,127275,21],{"class":51381},[91,127277,15695],{"class":250},[91,127279,127280,127283,127285,127287,127289],{"class":93,"line":38},[91,127281,127282],{"class":105},"  text-indent",[91,127284,51518],{"class":250},[91,127286,327],{"class":105},[91,127288,23677],{"class":153},[91,127290,1415],{"class":250},[91,127292,127293],{"class":93,"line":1304},[91,127294,1689],{"class":250},[217,127296,127298],{"id":127297},"_645-行间距","6.4.5 行间距",[21,127300,127301],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[82,127303,127305],{"className":126633,"code":127304,"language":126635,"meta":26,"style":26},"p {\n  line-height: 1.6;\n}\n",[88,127306,127307,127313,127325],{"__ignoreMap":26},[91,127308,127309,127311],{"class":93,"line":94},[91,127310,21],{"class":51381},[91,127312,15695],{"class":250},[91,127314,127315,127318,127320,127323],{"class":93,"line":38},[91,127316,127317],{"class":105},"  line-height",[91,127319,51518],{"class":250},[91,127321,127322],{"class":105},"1.6",[91,127324,1415],{"class":250},[91,127326,127327],{"class":93,"line":1304},[91,127328,1689],{"class":250},[168,127330,127331],{},"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":26,"searchDepth":38,"depth":38,"links":127333},[127334,127335,127343,127350],{"id":126815,"depth":38,"text":126816},{"id":126850,"depth":38,"text":126851,"children":127336},[127337,127338,127339,127340,127341,127342],{"id":126857,"depth":1304,"text":126858},{"id":126870,"depth":1304,"text":126871},{"id":126943,"depth":1304,"text":126944},{"id":126956,"depth":1304,"text":126957},{"id":126975,"depth":1304,"text":126976},{"id":126988,"depth":1304,"text":126989},{"id":126995,"depth":38,"text":126996,"children":127344},[127345,127346,127347,127348,127349],{"id":127002,"depth":1304,"text":127003},{"id":127014,"depth":1304,"text":127015},{"id":127067,"depth":1304,"text":127068},{"id":127088,"depth":1304,"text":127089},{"id":127109,"depth":1304,"text":127110},{"id":127135,"depth":38,"text":127136,"children":127351},[127352,127353,127354,127355,127356],{"id":127139,"depth":1304,"text":127140},{"id":127189,"depth":1304,"text":127190},{"id":127203,"depth":1304,"text":127204},{"id":127256,"depth":1304,"text":127257},{"id":127297,"depth":1304,"text":127298},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126807,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127363,"title":127364,"body":127365,"description":23500,"extension":173,"meta":128014,"navigation":175,"path":128015,"seo":128016,"stem":128017,"__hash__":128018},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127366,"toc":127995},[127367,127370,127374,127378,127438,127442,127452,127455,127458,127462,127487,127491,127494,127497,127500,127503,127506,127510,127513,127516,127558,127561,127587,127593,127596,127600,127604,127610,127613,127616,127619,127622,127625,127628,127673,127677,127680,127683,127687,127691,127720,127723,127728,127731,127734,127737,127740,127744,127748,127751,127753,127756,127760,127763,127767,127770,127773,127776,127780,127784,127790,127800,127803,127806,127809,127812,127815,127938,127946,127954,127992],[10,127368,127364],{"id":127369},"_7-css引入方式与选择器进阶",[190,127371,127373],{"id":127372},"_71-css引入方式","7.1 css引入方式",[217,127375,127377],{"id":127376},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[82,127379,127383],{"className":127380,"code":127381,"language":127382,"meta":26,"style":26},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[88,127384,127385,127393,127400,127412,127425,127430],{"__ignoreMap":26},[91,127386,127387,127389,127391],{"class":93,"line":94},[91,127388,1159],{"class":250},[91,127390,168],{"class":51381},[91,127392,51388],{"class":250},[91,127394,127395,127398],{"class":93,"line":38},[91,127396,127397],{"class":51381},"  h1",[91,127399,15695],{"class":250},[91,127401,127402,127405,127407,127410],{"class":93,"line":1304},[91,127403,127404],{"class":105},"    color",[91,127406,51518],{"class":250},[91,127408,127409],{"class":105},"blue",[91,127411,1415],{"class":250},[91,127413,127414,127417,127419,127421,127423],{"class":93,"line":1319},[91,127415,127416],{"class":105},"    font-size",[91,127418,51518],{"class":250},[91,127420,1049],{"class":105},[91,127422,51573],{"class":153},[91,127424,1415],{"class":250},[91,127426,127427],{"class":93,"line":1325},[91,127428,127429],{"class":250},"  }\n",[91,127431,127432,127434,127436],{"class":93,"line":1339},[91,127433,51866],{"class":250},[91,127435,168],{"class":51381},[91,127437,51388],{"class":250},[21,127439,127440,26594],{},[398,127441,126721],{},[21,127443,77307,127444,127447,127448,127451],{},[88,127445,127446],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[88,127449,127450],{},"\u003Chead>","标签中",[21,127453,127454],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[21,127456,127457],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[217,127459,127461],{"id":127460},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[82,127463,127465],{"className":127380,"code":127464,"language":127382,"meta":26,"style":26},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[88,127466,127467],{"__ignoreMap":26},[91,127468,127469,127471,127473,127475,127477,127480,127483,127485],{"class":93,"line":94},[91,127470,1159],{"class":250},[91,127472,21],{"class":51381},[91,127474,62707],{"class":97},[91,127476,296],{"class":250},[91,127478,127479],{"class":101},"\"color: red; font-size: 16px;\"",[91,127481,127482],{"class":250},">这是一个段落\u003C\u002F",[91,127484,21],{"class":51381},[91,127486,51388],{"class":250},[21,127488,127489,26594],{},[398,127490,126721],{},[21,127492,127493],{},"①style其实就是标签的属性",[21,127495,127496],{},"②在双引号中间，写法要符合css规范",[21,127498,127499],{},"③可以控制当前的标签设置样式",[21,127501,127502],{},"④书写繁琐，简单时才用",[21,127504,127505],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[217,127507,127509],{"id":127508},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[21,127511,127512],{},"使用最多，单独建一个css文件，然后html引用",[21,127514,127515],{},"①css文件部分： style.css",[82,127517,127519],{"className":126633,"code":127518,"language":126635,"meta":26,"style":26},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[88,127520,127521,127526,127532,127542,127554],{"__ignoreMap":26},[91,127522,127523],{"class":93,"line":94},[91,127524,127525],{"class":308},"\u002F* style.css *\u002F\n",[91,127527,127528,127530],{"class":93,"line":38},[91,127529,10],{"class":51381},[91,127531,15695],{"class":250},[91,127533,127534,127536,127538,127540],{"class":93,"line":1304},[91,127535,70986],{"class":105},[91,127537,51518],{"class":250},[91,127539,127409],{"class":105},[91,127541,1415],{"class":250},[91,127543,127544,127546,127548,127550,127552],{"class":93,"line":1319},[91,127545,70707],{"class":105},[91,127547,51518],{"class":250},[91,127549,1049],{"class":105},[91,127551,51573],{"class":153},[91,127553,1415],{"class":250},[91,127555,127556],{"class":93,"line":1325},[91,127557,1689],{"class":250},[21,127559,127560],{},"②html部分",[82,127562,127564],{"className":127380,"code":127563,"language":127382,"meta":26,"style":26},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[88,127565,127566],{"__ignoreMap":26},[91,127567,127568,127570,127572,127574,127576,127578,127580,127582,127585],{"class":93,"line":94},[91,127569,1159],{"class":250},[91,127571,69086],{"class":51381},[91,127573,69089],{"class":97},[91,127575,296],{"class":250},[91,127577,69094],{"class":101},[91,127579,61138],{"class":97},[91,127581,296],{"class":250},[91,127583,127584],{"class":101},"\"style.css\"",[91,127586,51388],{"class":250},[21,127588,127589,127592],{},[88,127590,127591],{},"\u003Chr>","水平线标签（但是不常用！）",[21,127594,127595],{},"ctrl+0回到页面原来大小",[190,127597,127599],{"id":127598},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[217,127601,127603],{"id":127602},"_721-快速生成html","7.2.1 快速生成html",[21,127605,127606,127607],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[88,127608,127609],{},"\u003Cdiv>``\u003C\u002Fdiv>",[21,127611,127612],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[21,127614,127615],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[21,127617,127618],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[21,127620,127621],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[21,127623,127624],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[21,127626,127627],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[82,127629,127631],{"className":127380,"code":127630,"language":127382,"meta":26,"style":26},"\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",[88,127632,127633,127638,127643,127648,127653,127658,127663,127668],{"__ignoreMap":26},[91,127634,127635],{"class":93,"line":94},[91,127636,127637],{"class":308},"\u003C!-- Emmet 语法示例 -->\n",[91,127639,127640],{"class":93,"line":38},[91,127641,127642],{"class":308},"\u003C!-- div*3        → 生成3个div -->\n",[91,127644,127645],{"class":93,"line":1304},[91,127646,127647],{"class":308},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[91,127649,127650],{"class":93,"line":1319},[91,127651,127652],{"class":308},"\u003C!-- div+p        → 兄弟div和p -->\n",[91,127654,127655],{"class":93,"line":1325},[91,127656,127657],{"class":308},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[91,127659,127660],{"class":93,"line":1339},[91,127661,127662],{"class":308},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[91,127664,127665],{"class":93,"line":1345},[91,127666,127667],{"class":308},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[91,127669,127670],{"class":93,"line":1436},[91,127671,127672],{"class":308},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[217,127674,127676],{"id":127675},"_722-快速生成css","7.2.2 快速生成css",[21,127678,127679],{},"简写开头",[21,127681,127682],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[190,127684,127686],{"id":127685},"_73-css复合选择器","7.3 css复合选择器",[217,127688,127690],{"id":127689},"_731-后代选择器","7.3.1 后代选择器",[82,127692,127694],{"className":126633,"code":127693,"language":126635,"meta":26,"style":26},".parent .child {\n  color: blue;\n}\n",[88,127695,127696,127706,127716],{"__ignoreMap":26},[91,127697,127698,127701,127704],{"class":93,"line":94},[91,127699,127700],{"class":97},".parent",[91,127702,127703],{"class":97}," .child",[91,127705,15695],{"class":250},[91,127707,127708,127710,127712,127714],{"class":93,"line":38},[91,127709,70986],{"class":105},[91,127711,51518],{"class":250},[91,127713,127409],{"class":105},[91,127715,1415],{"class":250},[91,127717,127718],{"class":93,"line":1304},[91,127719,1689],{"class":250},[21,127721,127722],{},"元素1 元素2 {样式声明}",[21,127724,127725],{},[398,127726,127727],{},"注意点:",[21,127729,127730],{},"①元素1和元素2中间用空格隔开",[21,127732,127733],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[21,127735,127736],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[21,127738,127739],{},"④元素1和元素2可以是任意基础选择器",[217,127741,127743],{"id":127742},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[21,127745,127746],{},[398,127747,127727],{},[21,127749,127750],{},"①元素1和元素2中间用大于号隔开",[21,127752,127733],{},[21,127754,127755],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[217,127757,127759],{"id":127758},"_733-并集选择器","7.3.3 并集选择器",[21,127761,127762],{},"元素1，元素2 {样式声明}",[21,127764,127765],{},[398,127766,127727],{},[21,127768,127769],{},"①元素1和元素2中间用逗号隔开",[21,127771,127772],{},"②逗号可以理解为和的意思",[21,127774,127775],{},"③并集选择器通常用于集体声明",[217,127777,127779],{"id":127778},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[21,127781,127782],{},[398,127783,127727],{},[21,127785,127786,127787,127789],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69086,127788],{},"－:visited－:hover－:active。",[21,127791,127792,127793,127796,127797,25862],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127794,127795],"hover",{}," 、 ",[127798,127799],"first-child",{},[21,127801,127802],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[21,127804,127805],{},"link对没访问的进行设置",[21,127807,127808],{},"vistied对已访问的进行改变",[21,127810,127811],{},"hover鼠标经过就会变",[21,127813,127814],{},"active常按(点)就会变",[82,127816,127818],{"className":126633,"code":127817,"language":126635,"meta":26,"style":26},"\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",[88,127819,127820,127825,127834,127844,127854,127858,127867,127878,127882,127890,127900,127910,127914,127923,127934],{"__ignoreMap":26},[91,127821,127822],{"class":93,"line":94},[91,127823,127824],{"class":308},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[91,127826,127827,127829,127832],{"class":93,"line":38},[91,127828,487],{"class":51381},[91,127830,127831],{"class":97},":link",[91,127833,15695],{"class":250},[91,127835,127836,127838,127840,127842],{"class":93,"line":1304},[91,127837,70986],{"class":105},[91,127839,51518],{"class":250},[91,127841,62450],{"class":105},[91,127843,1415],{"class":250},[91,127845,127846,127848,127850,127852],{"class":93,"line":1319},[91,127847,70583],{"class":105},[91,127849,51518],{"class":250},[91,127851,54818],{"class":105},[91,127853,1415],{"class":250},[91,127855,127856],{"class":93,"line":1325},[91,127857,1689],{"class":250},[91,127859,127860,127862,127865],{"class":93,"line":1339},[91,127861,487],{"class":51381},[91,127863,127864],{"class":97},":visited",[91,127866,15695],{"class":250},[91,127868,127869,127871,127873,127876],{"class":93,"line":1345},[91,127870,70986],{"class":105},[91,127872,51518],{"class":250},[91,127874,127875],{"class":105},"purple",[91,127877,1415],{"class":250},[91,127879,127880],{"class":93,"line":1436},[91,127881,1689],{"class":250},[91,127883,127884,127886,127888],{"class":93,"line":1442},[91,127885,487],{"class":51381},[91,127887,61021],{"class":97},[91,127889,15695],{"class":250},[91,127891,127892,127894,127896,127898],{"class":93,"line":1454},[91,127893,70986],{"class":105},[91,127895,51518],{"class":250},[91,127897,54970],{"class":105},[91,127899,1415],{"class":250},[91,127901,127902,127904,127906,127908],{"class":93,"line":1736},[91,127903,70583],{"class":105},[91,127905,51518],{"class":250},[91,127907,127247],{"class":105},[91,127909,1415],{"class":250},[91,127911,127912],{"class":93,"line":1741},[91,127913,1689],{"class":250},[91,127915,127916,127918,127921],{"class":93,"line":1747},[91,127917,487],{"class":51381},[91,127919,127920],{"class":97},":active",[91,127922,15695],{"class":250},[91,127924,127925,127927,127929,127932],{"class":93,"line":1752},[91,127926,70986],{"class":105},[91,127928,51518],{"class":250},[91,127930,127931],{"class":105},"green",[91,127933,1415],{"class":250},[91,127935,127936],{"class":93,"line":1766},[91,127937,1689],{"class":250},[217,127939,127941,127942,127945],{"id":127940},"_735-伪类选择器","7.3.5 ",[127943,127944],"focus",{},"伪类选择器",[21,127947,127948,127950,127951,127953],{},[127943,127949],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[88,127952,126694],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[82,127955,127957],{"className":126633,"code":127956,"language":126635,"meta":26,"style":26},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[88,127958,127959,127967,127978,127988],{"__ignoreMap":26},[91,127960,127961,127963,127965],{"class":93,"line":94},[91,127962,53902],{"class":51381},[91,127964,61981],{"class":97},[91,127966,15695],{"class":250},[91,127968,127969,127972,127974,127976],{"class":93,"line":38},[91,127970,127971],{"class":105},"  border-color",[91,127973,51518],{"class":250},[91,127975,54970],{"class":105},[91,127977,1415],{"class":250},[91,127979,127980,127982,127984,127986],{"class":93,"line":1304},[91,127981,70879],{"class":105},[91,127983,51518],{"class":250},[91,127985,54818],{"class":105},[91,127987,1415],{"class":250},[91,127989,127990],{"class":93,"line":1319},[91,127991,1689],{"class":250},[168,127993,127994],{},"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":26,"searchDepth":38,"depth":38,"links":127996},[127997,128002,128006],{"id":127372,"depth":38,"text":127373,"children":127998},[127999,128000,128001],{"id":127376,"depth":1304,"text":127377},{"id":127460,"depth":1304,"text":127461},{"id":127508,"depth":1304,"text":127509},{"id":127598,"depth":38,"text":127599,"children":128003},[128004,128005],{"id":127602,"depth":1304,"text":127603},{"id":127675,"depth":1304,"text":127676},{"id":127685,"depth":38,"text":127686,"children":128007},[128008,128009,128010,128011,128012],{"id":127689,"depth":1304,"text":127690},{"id":127742,"depth":1304,"text":127743},{"id":127758,"depth":1304,"text":127759},{"id":127778,"depth":1304,"text":127779},{"id":127940,"depth":1304,"text":128013},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127364,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128020,"title":128021,"body":128022,"description":23500,"extension":173,"meta":129945,"navigation":175,"path":129946,"seo":129947,"stem":129948,"__hash__":129949},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128023,"toc":129919},[128024,128027,128031,128040,128044,128070,128075,128078,128081,128084,128087,128091,128094,128104,128112,128116,128151,128156,128159,128162,128165,128168,128172,128175,128184,128188,128201,128206,128209,128212,128215,128219,128222,128226,128229,128284,128287,128318,128321,128375,128379,128382,128548,128671,128674,128677,128680,128683,128687,128690,128694,128697,128700,128704,128707,128738,128765,128793,128796,128800,128826,128869,128873,128967,128970,128997,129000,129003,129006,129009,129012,129015,129018,129021,129024,129028,129085,129112,129116,129164,129168,129209,129211,129214,129217,129220,129223,129227,129319,129322,129325,129328,129332,129455,129656,129660,129664,129667,129670,129673,129677,129680,129683,129708,129711,129714,129717,129720,129723,129727,129735,129797,129800,129858,129861,129864,129867,129870,129873,129876,129879,129916],[10,128025,128021],{"id":128026},"_8-css显示模式与背景特性",[190,128028,128030],{"id":128029},"_81-css元素显示模式","8.1 css元素显示模式",[21,128032,128033,128034,128036,128037,128039],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[88,128035,126244],{},"自己占一行，比如一行可以放多个",[88,128038,126247],{},"，HTML 元素一般分为块元素和行内元素两种类型",[217,128041,128043],{"id":128042},"_811-块元素","8.1.1 块元素",[21,128045,128046,128047,128049,128050,461,128053,461,128055,461,128057,461,128060,461,128063,128066,128067,128069],{},"常见的块元素有",[88,128048,126148],{},"~",[88,128051,128052],{},"\u003Ch6>",[88,128054,126174],{},[88,128056,126244],{},[88,128058,128059],{},"\u003Cul>",[88,128061,128062],{},"\u003Col>",[88,128064,128065],{},"\u003Cli>","等，其中 ",[88,128068,126244],{}," 标签是最典型的块元素",[21,128071,128072],{},[398,128073,128074],{},"块级元素的特点：",[21,128076,128077],{},"① 比较霸道，自己独占一行。",[21,128079,128080],{},"② 高度，宽度、外边距以及内边距都可以控制。",[21,128082,128083],{},"③ 宽度默认是容器（父级宽度）的100%。",[21,128085,128086],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[21,128088,128089],{},[398,128090,280],{},[21,128092,128093],{},"①文字类的元素内不能使用块级元素",[21,128095,77330,128096,128098,128099,128101,128102],{},[88,128097,126174],{}," 标签主要用于存放文字，因此 ",[88,128100,126174],{}," 里面不能放块级元素，特别是不能放",[88,128103,126244],{},[21,128105,128106,128107,128049,128109,128111],{},"⑥同理， ",[88,128108,126148],{},[88,128110,128052],{},"等都是文字类块级标签，里面也不能放其他块级元素",[217,128113,128115],{"id":128114},"_812-行内元素","8.1.2 行内元素",[21,128117,128118,128119,461,128121,461,128124,461,128127,461,128130,461,128133,461,128136,461,128139,461,128142,461,128145,128147,128148,128150],{},"常见的行内元素有 ",[88,128120,126406],{},[88,128122,128123],{},"\u003Cstrong>",[88,128125,128126],{},"\u003Cb>",[88,128128,128129],{},"\u003Cem>",[88,128131,128132],{},"\u003Ci>",[88,128134,128135],{},"\u003Cdel>",[88,128137,128138],{},"\u003Cs>",[88,128140,128141],{},"\u003Cins>",[88,128143,128144],{},"\u003Cu>",[88,128146,126247],{}," 等，其中 ",[88,128149,126247],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[21,128152,128153],{},[398,128154,128155],{},"特点：",[21,128157,128158],{},"① 相邻行内元素在一行上，一行可以显示多个。",[21,128160,128161],{},"② 高、宽直接设置是无效的。",[21,128163,128164],{},"③ 默认宽度就是它本身内容的宽度。",[21,128166,128167],{},"④ 行内元素只能容纳文本或其他行内元素。",[21,128169,128170],{},[398,128171,280],{},[21,128173,128174],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[21,128176,128177,128178,128180,128181,128183],{},"②特殊情况链接 ",[88,128179,126406],{}," 里面可以放块级元素，但是给 ",[88,128182,126406],{}," 转换一下块级模式最安全",[217,128185,128187],{"id":128186},"_813-行内块元素","8.1.3 行内块元素",[21,128189,128190,128191,461,128194,461,128197,128200],{},"在行内元素中有几个特殊的标签 —— ",[88,128192,128193],{},"\u003Cimg \u002F>",[88,128195,128196],{},"\u003Cinput \u002F>",[88,128198,128199],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[21,128202,128203],{},[398,128204,128205],{},"行内块元素的特点：",[21,128207,128208],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[21,128210,128211],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[21,128213,128214],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[217,128216,128218],{"id":128217},"_814-总结","8.1.4 总结",[24,128220],{"style":126489,"src":128221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[217,128223,128225],{"id":128224},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[21,128227,128228],{},"①转换为块元素：display:block;",[82,128230,128232],{"className":126633,"code":128231,"language":126635,"meta":26,"style":26},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[88,128233,128234,128239,128245,128256,128268,128280],{"__ignoreMap":26},[91,128235,128236],{"class":93,"line":94},[91,128237,128238],{"class":308},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[91,128240,128241,128243],{"class":93,"line":38},[91,128242,487],{"class":51381},[91,128244,15695],{"class":250},[91,128246,128247,128250,128252,128254],{"class":93,"line":1304},[91,128248,128249],{"class":105},"  display",[91,128251,51518],{"class":250},[91,128253,60950],{"class":105},[91,128255,1415],{"class":250},[91,128257,128258,128260,128262,128264,128266],{"class":93,"line":1319},[91,128259,70649],{"class":105},[91,128261,51518],{"class":250},[91,128263,560],{"class":105},[91,128265,51573],{"class":153},[91,128267,1415],{"class":250},[91,128269,128270,128272,128274,128276,128278],{"class":93,"line":1325},[91,128271,70869],{"class":105},[91,128273,51518],{"class":250},[91,128275,650],{"class":105},[91,128277,51573],{"class":153},[91,128279,1415],{"class":250},[91,128281,128282],{"class":93,"line":1339},[91,128283,1689],{"class":250},[21,128285,128286],{},"②转换为行内元素：display:inline;",[82,128288,128290],{"className":126633,"code":128289,"language":126635,"meta":26,"style":26},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[88,128291,128292,128297,128303,128314],{"__ignoreMap":26},[91,128293,128294],{"class":93,"line":94},[91,128295,128296],{"class":308},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[91,128298,128299,128301],{"class":93,"line":38},[91,128300,51692],{"class":51381},[91,128302,15695],{"class":250},[91,128304,128305,128307,128309,128312],{"class":93,"line":1304},[91,128306,128249],{"class":105},[91,128308,51518],{"class":250},[91,128310,128311],{"class":105},"inline",[91,128313,1415],{"class":250},[91,128315,128316],{"class":93,"line":1319},[91,128317,1689],{"class":250},[21,128319,128320],{},"③转换为行内块：display:inline-block;",[82,128322,128324],{"className":126633,"code":128323,"language":126635,"meta":26,"style":26},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[88,128325,128326,128331,128337,128347,128359,128371],{"__ignoreMap":26},[91,128327,128328],{"class":93,"line":94},[91,128329,128330],{"class":308},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[91,128332,128333,128335],{"class":93,"line":38},[91,128334,91],{"class":51381},[91,128336,15695],{"class":250},[91,128338,128339,128341,128343,128345],{"class":93,"line":1304},[91,128340,128249],{"class":105},[91,128342,51518],{"class":250},[91,128344,72464],{"class":105},[91,128346,1415],{"class":250},[91,128348,128349,128351,128353,128355,128357],{"class":93,"line":1319},[91,128350,70649],{"class":105},[91,128352,51518],{"class":250},[91,128354,861],{"class":105},[91,128356,51573],{"class":153},[91,128358,1415],{"class":250},[91,128360,128361,128363,128365,128367,128369],{"class":93,"line":1325},[91,128362,70869],{"class":105},[91,128364,51518],{"class":250},[91,128366,1200],{"class":105},[91,128368,51573],{"class":153},[91,128370,1415],{"class":250},[91,128372,128373],{"class":93,"line":1339},[91,128374,1689],{"class":250},[217,128376,128378],{"id":128377},"_816-小米侧边栏","8.1.6 小米侧边栏",[24,128380],{"style":126489,"src":128381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[82,128383,128385],{"className":127380,"code":128384,"language":127382,"meta":26,"style":26},"\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",[88,128386,128387,128392,128407,128426,128445,128464,128483,128502,128521,128540],{"__ignoreMap":26},[91,128388,128389],{"class":93,"line":94},[91,128390,128391],{"class":308},"\u003C!-- 小米侧边栏案例 -->\n",[91,128393,128394,128396,128398,128400,128402,128405],{"class":93,"line":38},[91,128395,1159],{"class":250},[91,128397,51692],{"class":51381},[91,128399,53567],{"class":97},[91,128401,296],{"class":250},[91,128403,128404],{"class":101},"\"sidebar\"",[91,128406,51388],{"class":250},[91,128408,128409,128411,128413,128415,128417,128419,128422,128424],{"class":93,"line":1304},[91,128410,52225],{"class":250},[91,128412,487],{"class":51381},[91,128414,61138],{"class":97},[91,128416,296],{"class":250},[91,128418,61143],{"class":101},[91,128420,128421],{"class":250},">手机 电话卡\u003C\u002F",[91,128423,487],{"class":51381},[91,128425,51388],{"class":250},[91,128427,128428,128430,128432,128434,128436,128438,128441,128443],{"class":93,"line":1319},[91,128429,52225],{"class":250},[91,128431,487],{"class":51381},[91,128433,61138],{"class":97},[91,128435,296],{"class":250},[91,128437,61143],{"class":101},[91,128439,128440],{"class":250},">电视 盒子\u003C\u002F",[91,128442,487],{"class":51381},[91,128444,51388],{"class":250},[91,128446,128447,128449,128451,128453,128455,128457,128460,128462],{"class":93,"line":1325},[91,128448,52225],{"class":250},[91,128450,487],{"class":51381},[91,128452,61138],{"class":97},[91,128454,296],{"class":250},[91,128456,61143],{"class":101},[91,128458,128459],{"class":250},">笔记本 平板\u003C\u002F",[91,128461,487],{"class":51381},[91,128463,51388],{"class":250},[91,128465,128466,128468,128470,128472,128474,128476,128479,128481],{"class":93,"line":1339},[91,128467,52225],{"class":250},[91,128469,487],{"class":51381},[91,128471,61138],{"class":97},[91,128473,296],{"class":250},[91,128475,61143],{"class":101},[91,128477,128478],{"class":250},">出行 穿戴\u003C\u002F",[91,128480,487],{"class":51381},[91,128482,51388],{"class":250},[91,128484,128485,128487,128489,128491,128493,128495,128498,128500],{"class":93,"line":1345},[91,128486,52225],{"class":250},[91,128488,487],{"class":51381},[91,128490,61138],{"class":97},[91,128492,296],{"class":250},[91,128494,61143],{"class":101},[91,128496,128497],{"class":250},">智能 路由器\u003C\u002F",[91,128499,487],{"class":51381},[91,128501,51388],{"class":250},[91,128503,128504,128506,128508,128510,128512,128514,128517,128519],{"class":93,"line":1436},[91,128505,52225],{"class":250},[91,128507,487],{"class":51381},[91,128509,61138],{"class":97},[91,128511,296],{"class":250},[91,128513,61143],{"class":101},[91,128515,128516],{"class":250},">健康 儿童\u003C\u002F",[91,128518,487],{"class":51381},[91,128520,51388],{"class":250},[91,128522,128523,128525,128527,128529,128531,128533,128536,128538],{"class":93,"line":1442},[91,128524,52225],{"class":250},[91,128526,487],{"class":51381},[91,128528,61138],{"class":97},[91,128530,296],{"class":250},[91,128532,61143],{"class":101},[91,128534,128535],{"class":250},">耳机 音响\u003C\u002F",[91,128537,487],{"class":51381},[91,128539,51388],{"class":250},[91,128541,128542,128544,128546],{"class":93,"line":1454},[91,128543,51866],{"class":250},[91,128545,51692],{"class":51381},[91,128547,51388],{"class":250},[82,128549,128551],{"className":126633,"code":128550,"language":126635,"meta":26,"style":26},".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",[88,128552,128553,128562,128572,128585,128597,128609,128621,128631,128642,128646,128656,128667],{"__ignoreMap":26},[91,128554,128555,128558,128560],{"class":93,"line":94},[91,128556,128557],{"class":97},".sidebar",[91,128559,1523],{"class":51381},[91,128561,15695],{"class":250},[91,128563,128564,128566,128568,128570],{"class":93,"line":38},[91,128565,128249],{"class":105},[91,128567,51518],{"class":250},[91,128569,60950],{"class":105},[91,128571,1415],{"class":250},[91,128573,128574,128576,128578,128581,128583],{"class":93,"line":1304},[91,128575,70649],{"class":105},[91,128577,51518],{"class":250},[91,128579,128580],{"class":105},"234",[91,128582,51573],{"class":153},[91,128584,1415],{"class":250},[91,128586,128587,128589,128591,128593,128595],{"class":93,"line":1319},[91,128588,70869],{"class":105},[91,128590,51518],{"class":250},[91,128592,701],{"class":105},[91,128594,51573],{"class":153},[91,128596,1415],{"class":250},[91,128598,128599,128601,128603,128605,128607],{"class":93,"line":1325},[91,128600,127317],{"class":105},[91,128602,51518],{"class":250},[91,128604,701],{"class":105},[91,128606,51573],{"class":153},[91,128608,1415],{"class":250},[91,128610,128611,128613,128615,128617,128619],{"class":93,"line":1339},[91,128612,70904],{"class":105},[91,128614,51518],{"class":250},[91,128616,1200],{"class":105},[91,128618,51573],{"class":153},[91,128620,1415],{"class":250},[91,128622,128623,128625,128627,128629],{"class":93,"line":1345},[91,128624,70986],{"class":105},[91,128626,51518],{"class":250},[91,128628,60923],{"class":105},[91,128630,1415],{"class":250},[91,128632,128633,128635,128637,128640],{"class":93,"line":1436},[91,128634,70959],{"class":105},[91,128636,51518],{"class":250},[91,128638,128639],{"class":105},"#55585a",[91,128641,1415],{"class":250},[91,128643,128644],{"class":93,"line":1442},[91,128645,1689],{"class":250},[91,128647,128648,128650,128652,128654],{"class":93,"line":1454},[91,128649,128557],{"class":97},[91,128651,1523],{"class":51381},[91,128653,61021],{"class":97},[91,128655,15695],{"class":250},[91,128657,128658,128660,128662,128665],{"class":93,"line":1736},[91,128659,70959],{"class":105},[91,128661,51518],{"class":250},[91,128663,128664],{"class":105},"#ff6700",[91,128666,1415],{"class":250},[91,128668,128669],{"class":93,"line":1741},[91,128670,1689],{"class":250},[24,128672],{"style":126489,"src":128673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[21,128675,128676],{},"行高=盒子高度：实现文字的垂直居中",[21,128678,128679],{},"原理讲解：",[24,128681],{"style":126489,"src":128682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[190,128684,128686],{"id":128685},"_82-css背景","8.2 css背景",[21,128688,128689],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[217,128691,128693],{"id":128692},"_821-背景颜色","8.2.1 背景颜色",[21,128695,128696],{},"background-color:颜色值;",[21,128698,128699],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[217,128701,128703],{"id":128702},"_822-背景图片","8.2.2 背景图片",[21,128705,128706],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[82,128708,128710],{"className":126633,"code":128709,"language":126635,"meta":26,"style":26},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[88,128711,128712,128718,128734],{"__ignoreMap":26},[91,128713,128714,128716],{"class":93,"line":94},[91,128715,51692],{"class":51381},[91,128717,15695],{"class":250},[91,128719,128720,128723,128725,128727,128729,128732],{"class":93,"line":38},[91,128721,128722],{"class":105},"  background-image",[91,128724,51518],{"class":250},[91,128726,61807],{"class":105},[91,128728,251],{"class":250},[91,128730,128731],{"class":5339},"images\u002Fbg.png",[91,128733,2842],{"class":250},[91,128735,128736],{"class":93,"line":1304},[91,128737,1689],{"class":250},[386,128739,128740,128749],{},[389,128741,128742],{},[392,128743,128744,128747],{},[395,128745,128746],{"align":23860},"参数值",[395,128748,102777],{"align":23860},[433,128750,128751,128758],{},[392,128752,128753,128755],{},[438,128754,54818],{"align":23860},[438,128756,128757],{"align":23860},"无背景图（默认的）",[392,128759,128760,128762],{},[438,128761,61807],{"align":23860},[438,128763,128764],{"align":23860},"使用绝对或相对地址指定背景图像",[82,128766,128767],{"className":126633,"code":128709,"language":126635,"meta":26,"style":26},[88,128768,128769,128775,128789],{"__ignoreMap":26},[91,128770,128771,128773],{"class":93,"line":94},[91,128772,51692],{"class":51381},[91,128774,15695],{"class":250},[91,128776,128777,128779,128781,128783,128785,128787],{"class":93,"line":38},[91,128778,128722],{"class":105},[91,128780,51518],{"class":250},[91,128782,61807],{"class":105},[91,128784,251],{"class":250},[91,128786,128731],{"class":5339},[91,128788,2842],{"class":250},[91,128790,128791],{"class":93,"line":1304},[91,128792,1689],{"class":250},[21,128794,128795],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[217,128797,128799],{"id":128798},"_823-背景平铺","8.2.3 背景平铺",[82,128801,128803],{"className":126633,"code":128802,"language":126635,"meta":26,"style":26},"div {\n  background-repeat: no-repeat;\n}\n",[88,128804,128805,128811,128822],{"__ignoreMap":26},[91,128806,128807,128809],{"class":93,"line":94},[91,128808,51692],{"class":51381},[91,128810,15695],{"class":250},[91,128812,128813,128816,128818,128820],{"class":93,"line":38},[91,128814,128815],{"class":105},"  background-repeat",[91,128817,51518],{"class":250},[91,128819,61817],{"class":105},[91,128821,1415],{"class":250},[91,128823,128824],{"class":93,"line":1304},[91,128825,1689],{"class":250},[386,128827,128828,128836],{},[389,128829,128830],{},[392,128831,128832,128834],{},[395,128833,128746],{"align":23860},[395,128835,102777],{"align":23860},[433,128837,128838,128846,128853,128861],{},[392,128839,128840,128843],{},[438,128841,128842],{"align":23860},"repeat",[438,128844,128845],{"align":23860},"背景图像在纵向和横向上平铺（默认的）",[392,128847,128848,128850],{},[438,128849,61817],{"align":23860},[438,128851,128852],{"align":23860},"背景图像不平铺",[392,128854,128855,128858],{},[438,128856,128857],{"align":23860},"repeat-x",[438,128859,128860],{"align":23860},"背景图像在横向上平铺",[392,128862,128863,128866],{},[438,128864,128865],{"align":23860},"repeat-y",[438,128867,128868],{"align":23860},"背景图像在纵向平铺",[217,128870,128872],{"id":128871},"_824-背景图片位置","8.2.4 背景图片位置",[82,128874,128876],{"className":126633,"code":128875,"language":126635,"meta":26,"style":26},"\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",[88,128877,128878,128883,128889,128903,128907,128912,128918,128934,128938,128943,128949,128963],{"__ignoreMap":26},[91,128879,128880],{"class":93,"line":94},[91,128881,128882],{"class":308},"\u002F* 方位名词 *\u002F\n",[91,128884,128885,128887],{"class":93,"line":38},[91,128886,51692],{"class":51381},[91,128888,15695],{"class":250},[91,128890,128891,128894,128896,128898,128901],{"class":93,"line":1304},[91,128892,128893],{"class":105},"  background-position",[91,128895,51518],{"class":250},[91,128897,51673],{"class":105},[91,128899,128900],{"class":105}," top",[91,128902,1415],{"class":250},[91,128904,128905],{"class":93,"line":1319},[91,128906,1689],{"class":250},[91,128908,128909],{"class":93,"line":1325},[91,128910,128911],{"class":308},"\u002F* 精确单位 *\u002F\n",[91,128913,128914,128916],{"class":93,"line":1339},[91,128915,51692],{"class":51381},[91,128917,15695],{"class":250},[91,128919,128920,128922,128924,128926,128928,128930,128932],{"class":93,"line":1345},[91,128921,128893],{"class":105},[91,128923,51518],{"class":250},[91,128925,949],{"class":105},[91,128927,51573],{"class":153},[91,128929,57585],{"class":105},[91,128931,51573],{"class":153},[91,128933,1415],{"class":250},[91,128935,128936],{"class":93,"line":1436},[91,128937,1689],{"class":250},[91,128939,128940],{"class":93,"line":1442},[91,128941,128942],{"class":308},"\u002F* 混合单位 *\u002F\n",[91,128944,128945,128947],{"class":93,"line":1454},[91,128946,51692],{"class":51381},[91,128948,15695],{"class":250},[91,128950,128951,128953,128955,128957,128959,128961],{"class":93,"line":1736},[91,128952,128893],{"class":105},[91,128954,51518],{"class":250},[91,128956,949],{"class":105},[91,128958,51573],{"class":153},[91,128960,17267],{"class":105},[91,128962,1415],{"class":250},[91,128964,128965],{"class":93,"line":1741},[91,128966,1689],{"class":250},[21,128968,128969],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[386,128971,128972,128980],{},[389,128973,128974],{},[392,128975,128976,128978],{},[395,128977,128746],{"align":23860},[395,128979,25991],{"align":23860},[433,128981,128982,128989],{},[392,128983,128984,128986],{},[438,128985,52049],{"align":23860},[438,128987,128988],{"align":23860},"百分数|由浮点数和单位标识符组成的长度值",[392,128990,128991,128994],{},[438,128992,128993],{"align":23860},"position",[438,128995,128996],{"align":23860},"top|center|bottom|left|center|right 方位名词",[21,128998,128999],{},"其他说明：",[21,129001,129002],{},"①参数是方位名词",[21,129004,129005],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[21,129007,129008],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[21,129010,129011],{},"②参数是精确单位",[21,129013,129014],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[21,129016,129017],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[21,129019,129020],{},"③参数是混合单位",[21,129022,129023],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[217,129025,129027],{"id":129026},"_825-背景图片固定","8.2.5 背景图片固定",[82,129029,129031],{"className":126633,"code":129030,"language":126635,"meta":26,"style":26},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[88,129032,129033,129038,129044,129056,129060,129065,129071,129081],{"__ignoreMap":26},[91,129034,129035],{"class":93,"line":94},[91,129036,129037],{"class":308},"\u002F* 背景滚动（默认） *\u002F\n",[91,129039,129040,129042],{"class":93,"line":38},[91,129041,51692],{"class":51381},[91,129043,15695],{"class":250},[91,129045,129046,129049,129051,129054],{"class":93,"line":1304},[91,129047,129048],{"class":105},"  background-attachment",[91,129050,51518],{"class":250},[91,129052,129053],{"class":105},"scroll",[91,129055,1415],{"class":250},[91,129057,129058],{"class":93,"line":1319},[91,129059,1689],{"class":250},[91,129061,129062],{"class":93,"line":1325},[91,129063,129064],{"class":308},"\u002F* 背景固定 *\u002F\n",[91,129066,129067,129069],{"class":93,"line":1339},[91,129068,51692],{"class":51381},[91,129070,15695],{"class":250},[91,129072,129073,129075,129077,129079],{"class":93,"line":1345},[91,129074,129048],{"class":105},[91,129076,51518],{"class":250},[91,129078,86314],{"class":105},[91,129080,1415],{"class":250},[91,129082,129083],{"class":93,"line":1436},[91,129084,1689],{"class":250},[386,129086,129087,129096],{},[389,129088,129089],{},[392,129090,129091,129094],{},[395,129092,129093],{"align":23860},"参数",[395,129095,102777],{"align":23860},[433,129097,129098,129105],{},[392,129099,129100,129102],{},[438,129101,129053],{"align":23860},[438,129103,129104],{"align":23860},"背景图像是随对象内容滚动",[392,129106,129107,129109],{},[438,129108,86314],{"align":23860},[438,129110,129111],{"align":23860},"背景图像固定",[217,129113,129115],{"id":129114},"_826-背景样式合写","8.2.6 背景样式合写",[82,129117,129119],{"className":126633,"code":129118,"language":126635,"meta":26,"style":26},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[88,129120,129121,129126,129132,129160],{"__ignoreMap":26},[91,129122,129123],{"class":93,"line":94},[91,129124,129125],{"class":308},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[91,129127,129128,129130],{"class":93,"line":38},[91,129129,51692],{"class":51381},[91,129131,15695],{"class":250},[91,129133,129134,129136,129138,129140,129143,129145,129147,129149,129151,129154,129156,129158],{"class":93,"line":1304},[91,129135,70692],{"class":105},[91,129137,51518],{"class":250},[91,129139,60923],{"class":105},[91,129141,129142],{"class":105}," url",[91,129144,251],{"class":250},[91,129146,128731],{"class":5339},[91,129148,13837],{"class":250},[91,129150,61817],{"class":105},[91,129152,129153],{"class":105}," fixed",[91,129155,17267],{"class":105},[91,129157,128900],{"class":105},[91,129159,1415],{"class":250},[91,129161,129162],{"class":93,"line":1319},[91,129163,1689],{"class":250},[217,129165,129167],{"id":129166},"_827-背景色半透明","8.2.7 背景色半透明",[82,129169,129171],{"className":126633,"code":129170,"language":126635,"meta":26,"style":26},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[88,129172,129173,129179,129205],{"__ignoreMap":26},[91,129174,129175,129177],{"class":93,"line":94},[91,129176,51692],{"class":51381},[91,129178,15695],{"class":250},[91,129180,129181,129183,129185,129187,129189,129191,129193,129195,129197,129199,129201,129203],{"class":93,"line":38},[91,129182,70692],{"class":105},[91,129184,51518],{"class":250},[91,129186,55191],{"class":105},[91,129188,251],{"class":250},[91,129190,440],{"class":105},[91,129192,12558],{"class":250},[91,129194,440],{"class":105},[91,129196,12558],{"class":250},[91,129198,440],{"class":105},[91,129200,12558],{"class":250},[91,129202,100602],{"class":105},[91,129204,2842],{"class":250},[91,129206,129207],{"class":93,"line":1304},[91,129208,1689],{"class":250},[21,129210,99477],{},[21,129212,129213],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[21,129215,129216],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[21,129218,129219],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[21,129221,129222],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[217,129224,129226],{"id":129225},"_828-总结","8.2.8 总结",[386,129228,129229,129240],{},[389,129230,129231],{},[392,129232,129233,129236,129238],{},[395,129234,129235],{"align":23860},"属性",[395,129237,102777],{"align":23860},[395,129239,401],{"align":23860},[433,129241,129242,129253,129264,129275,129286,129297,129308],{},[392,129243,129244,129247,129250],{},[438,129245,129246],{"align":23860},"background-color",[438,129248,129249],{"align":23860},"背景颜色",[438,129251,129252],{"align":23860},"预定义的颜色值\u002F十六进制\u002FRGB代码",[392,129254,129255,129258,129261],{},[438,129256,129257],{"align":23860},"background-image",[438,129259,129260],{"align":23860},"背景图片",[438,129262,129263],{"align":23860},"url(图片路径)",[392,129265,129266,129269,129272],{},[438,129267,129268],{"align":23860},"background-repeat",[438,129270,129271],{"align":23860},"是否平铺",[438,129273,129274],{"align":23860},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[392,129276,129277,129280,129283],{},[438,129278,129279],{"align":23860},"background-position",[438,129281,129282],{"align":23860},"背景位置",[438,129284,129285],{"align":23860},"length\u002Fposition 分别是x和y坐标",[392,129287,129288,129291,129294],{},[438,129289,129290],{"align":23860},"background-attachment",[438,129292,129293],{"align":23860},"背景附着",[438,129295,129296],{"align":23860},"scroll(背景滚动) \u002Ffixed (背景固定)",[392,129298,129299,129302,129305],{},[438,129300,129301],{"align":23860},"背景简写",[438,129303,129304],{"align":23860},"书写更简单",[438,129306,129307],{"align":23860},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[392,129309,129310,129313,129316],{},[438,129311,129312],{"align":23860},"背景半透明",[438,129314,129315],{"align":23860},"背景颜色半透明",[438,129317,129318],{"align":23860},"background: rgba(0,0,0.3); 后面必须是4个值",[21,129320,129321],{},"颜色渐变：",[24,129323],{"style":126489,"src":129324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[24,129326],{"style":126489,"src":129327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[217,129329,129331],{"id":129330},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[82,129333,129335],{"className":127380,"code":129334,"language":127382,"meta":26,"style":26},"\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",[88,129336,129337,129352,129371,129390,129409,129428,129447],{"__ignoreMap":26},[91,129338,129339,129341,129343,129345,129347,129350],{"class":93,"line":94},[91,129340,1159],{"class":250},[91,129342,51692],{"class":51381},[91,129344,53567],{"class":97},[91,129346,296],{"class":250},[91,129348,129349],{"class":101},"\"nav\"",[91,129351,51388],{"class":250},[91,129353,129354,129356,129358,129360,129362,129364,129367,129369],{"class":93,"line":38},[91,129355,52225],{"class":250},[91,129357,487],{"class":51381},[91,129359,61138],{"class":97},[91,129361,296],{"class":250},[91,129363,61143],{"class":101},[91,129365,129366],{"class":250},">五彩导航1\u003C\u002F",[91,129368,487],{"class":51381},[91,129370,51388],{"class":250},[91,129372,129373,129375,129377,129379,129381,129383,129386,129388],{"class":93,"line":1304},[91,129374,52225],{"class":250},[91,129376,487],{"class":51381},[91,129378,61138],{"class":97},[91,129380,296],{"class":250},[91,129382,61143],{"class":101},[91,129384,129385],{"class":250},">五彩导航2\u003C\u002F",[91,129387,487],{"class":51381},[91,129389,51388],{"class":250},[91,129391,129392,129394,129396,129398,129400,129402,129405,129407],{"class":93,"line":1319},[91,129393,52225],{"class":250},[91,129395,487],{"class":51381},[91,129397,61138],{"class":97},[91,129399,296],{"class":250},[91,129401,61143],{"class":101},[91,129403,129404],{"class":250},">五彩导航3\u003C\u002F",[91,129406,487],{"class":51381},[91,129408,51388],{"class":250},[91,129410,129411,129413,129415,129417,129419,129421,129424,129426],{"class":93,"line":1325},[91,129412,52225],{"class":250},[91,129414,487],{"class":51381},[91,129416,61138],{"class":97},[91,129418,296],{"class":250},[91,129420,61143],{"class":101},[91,129422,129423],{"class":250},">五彩导航4\u003C\u002F",[91,129425,487],{"class":51381},[91,129427,51388],{"class":250},[91,129429,129430,129432,129434,129436,129438,129440,129443,129445],{"class":93,"line":1339},[91,129431,52225],{"class":250},[91,129433,487],{"class":51381},[91,129435,61138],{"class":97},[91,129437,296],{"class":250},[91,129439,61143],{"class":101},[91,129441,129442],{"class":250},">五彩导航5\u003C\u002F",[91,129444,487],{"class":51381},[91,129446,51388],{"class":250},[91,129448,129449,129451,129453],{"class":93,"line":1345},[91,129450,51866],{"class":250},[91,129452,51692],{"class":51381},[91,129454,51388],{"class":250},[82,129456,129458],{"className":126633,"code":129457,"language":126635,"meta":26,"style":26},".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",[88,129459,129460,129469,129479,129491,129503,129513,129525,129535,129539,129564,129587,129610,129633],{"__ignoreMap":26},[91,129461,129462,129465,129467],{"class":93,"line":94},[91,129463,129464],{"class":97},".nav",[91,129466,1523],{"class":51381},[91,129468,15695],{"class":250},[91,129470,129471,129473,129475,129477],{"class":93,"line":38},[91,129472,128249],{"class":105},[91,129474,51518],{"class":250},[91,129476,72464],{"class":105},[91,129478,1415],{"class":250},[91,129480,129481,129483,129485,129487,129489],{"class":93,"line":1304},[91,129482,70649],{"class":105},[91,129484,51518],{"class":250},[91,129486,1066],{"class":105},[91,129488,51573],{"class":153},[91,129490,1415],{"class":250},[91,129492,129493,129495,129497,129499,129501],{"class":93,"line":1319},[91,129494,70869],{"class":105},[91,129496,51518],{"class":250},[91,129498,1105],{"class":105},[91,129500,51573],{"class":153},[91,129502,1415],{"class":250},[91,129504,129505,129507,129509,129511],{"class":93,"line":1325},[91,129506,70607],{"class":105},[91,129508,51518],{"class":250},[91,129510,51673],{"class":105},[91,129512,1415],{"class":250},[91,129514,129515,129517,129519,129521,129523],{"class":93,"line":1339},[91,129516,127317],{"class":105},[91,129518,51518],{"class":250},[91,129520,1105],{"class":105},[91,129522,51573],{"class":153},[91,129524,1415],{"class":250},[91,129526,129527,129529,129531,129533],{"class":93,"line":1345},[91,129528,70986],{"class":105},[91,129530,51518],{"class":250},[91,129532,60923],{"class":105},[91,129534,1415],{"class":250},[91,129536,129537],{"class":93,"line":1436},[91,129538,1689],{"class":250},[91,129540,129541,129543,129545,129548,129550,129552,129555,129557,129559,129561],{"class":93,"line":1442},[91,129542,129464],{"class":97},[91,129544,1523],{"class":51381},[91,129546,129547],{"class":97},":nth-child",[91,129549,251],{"class":250},[91,129551,466],{"class":105},[91,129553,129554],{"class":250},") { ",[91,129556,129246],{"class":105},[91,129558,51518],{"class":250},[91,129560,128664],{"class":105},[91,129562,129563],{"class":250},"; }\n",[91,129565,129566,129568,129570,129572,129574,129576,129578,129580,129582,129585],{"class":93,"line":1454},[91,129567,129464],{"class":97},[91,129569,1523],{"class":51381},[91,129571,129547],{"class":97},[91,129573,251],{"class":250},[91,129575,327],{"class":105},[91,129577,129554],{"class":250},[91,129579,129246],{"class":105},[91,129581,51518],{"class":250},[91,129583,129584],{"class":105},"#ff0000",[91,129586,129563],{"class":250},[91,129588,129589,129591,129593,129595,129597,129599,129601,129603,129605,129608],{"class":93,"line":1736},[91,129590,129464],{"class":97},[91,129592,1523],{"class":51381},[91,129594,129547],{"class":97},[91,129596,251],{"class":250},[91,129598,321],{"class":105},[91,129600,129554],{"class":250},[91,129602,129246],{"class":105},[91,129604,51518],{"class":250},[91,129606,129607],{"class":105},"#00a4ff",[91,129609,129563],{"class":250},[91,129611,129612,129614,129616,129618,129620,129622,129624,129626,129628,129631],{"class":93,"line":1741},[91,129613,129464],{"class":97},[91,129615,1523],{"class":51381},[91,129617,129547],{"class":97},[91,129619,251],{"class":250},[91,129621,542],{"class":105},[91,129623,129554],{"class":250},[91,129625,129246],{"class":105},[91,129627,51518],{"class":250},[91,129629,129630],{"class":105},"#ff00ff",[91,129632,129563],{"class":250},[91,129634,129635,129637,129639,129641,129643,129645,129647,129649,129651,129654],{"class":93,"line":1747},[91,129636,129464],{"class":97},[91,129638,1523],{"class":51381},[91,129640,129547],{"class":97},[91,129642,251],{"class":250},[91,129644,568],{"class":105},[91,129646,129554],{"class":250},[91,129648,129246],{"class":105},[91,129650,51518],{"class":250},[91,129652,129653],{"class":105},"#00ff00",[91,129655,129563],{"class":250},[190,129657,129659],{"id":129658},"_83-css三大特性","8.3 css三大特性",[217,129661,129663],{"id":129662},"_831-层叠性","8.3.1 层叠性",[21,129665,129666],{},"为了解决样式冲突问题",[21,129668,129669],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[21,129671,129672],{},"   ②样式不冲突，不会层叠",[217,129674,129676],{"id":129675},"_832-继承性","8.3.2 继承性",[21,129678,129679],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[21,129681,129682],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[82,129684,129686],{"className":126633,"code":129685,"language":126635,"meta":26,"style":26},"p {\n  color: #333;\n}\n",[88,129687,129688,129694,129704],{"__ignoreMap":26},[91,129689,129690,129692],{"class":93,"line":94},[91,129691,21],{"class":51381},[91,129693,15695],{"class":250},[91,129695,129696,129698,129700,129702],{"class":93,"line":38},[91,129697,70986],{"class":105},[91,129699,51518],{"class":250},[91,129701,62450],{"class":105},[91,129703,1415],{"class":250},[91,129705,129706],{"class":93,"line":1304},[91,129707,1689],{"class":250},[24,129709],{"style":126489,"src":129710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[21,129712,129713],{},"解释：①行高可以跟单位也可以不跟单位",[21,129715,129716],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[21,129718,129719],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[21,129721,129722],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[217,129724,129726],{"id":129725},"_833-优先级","8.3.3 优先级",[14,129728,129729,129732],{},[17,129730,129731],{},"选择器相同，则执行层叠性",[17,129733,129734],{},"选择器不同，则根据选择器权重执行",[386,129736,129737,129747],{},[389,129738,129739],{},[392,129740,129741,129744],{},[395,129742,129743],{"align":23860},"选择器",[395,129745,129746],{"align":23860},"选择器权重",[433,129748,129749,129757,129765,129773,129781,129789],{},[392,129750,129751,129754],{},[438,129752,129753],{"align":23860},"继承 或者*",[438,129755,129756],{"align":23860},"0，0，0，0",[392,129758,129759,129762],{},[438,129760,129761],{"align":23860},"标签选择器",[438,129763,129764],{"align":23860},"0，0，0，1",[392,129766,129767,129770],{},[438,129768,129769],{"align":23860},"类选择器，伪类选择器",[438,129771,129772],{"align":23860},"0，0，1，0",[392,129774,129775,129778],{},[438,129776,129777],{"align":23860},"ID选择器",[438,129779,129780],{"align":23860},"0，1，0，0",[392,129782,129783,129786],{},[438,129784,129785],{"align":23860},"行内样式",[438,129787,129788],{"align":23860},"1，0，0，0",[392,129790,129791,129794],{},[438,129792,129793],{"align":23860},"！important",[438,129795,129796],{"align":23860},"无穷大",[21,129798,129799],{},"! important用法：",[82,129801,129803],{"className":126633,"code":129802,"language":126635,"meta":26,"style":26},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[88,129804,129805,129810,129816,129829,129833,129838,129844,129854],{"__ignoreMap":26},[91,129806,129807],{"class":93,"line":94},[91,129808,129809],{"class":308},"\u002F* !important 拥有最高优先级 *\u002F\n",[91,129811,129812,129814],{"class":93,"line":38},[91,129813,51692],{"class":51381},[91,129815,15695],{"class":250},[91,129817,129818,129820,129822,129824,129827],{"class":93,"line":1304},[91,129819,70986],{"class":105},[91,129821,51518],{"class":250},[91,129823,51726],{"class":105},[91,129825,129826],{"class":153}," !important",[91,129828,1415],{"class":250},[91,129830,129831],{"class":93,"line":1319},[91,129832,1689],{"class":250},[91,129834,129835],{"class":93,"line":1325},[91,129836,129837],{"class":308},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[91,129839,129840,129842],{"class":93,"line":1339},[91,129841,51692],{"class":51381},[91,129843,15695],{"class":250},[91,129845,129846,129848,129850,129852],{"class":93,"line":1345},[91,129847,70986],{"class":105},[91,129849,51518],{"class":250},[91,129851,57502],{"class":105},[91,129853,1415],{"class":250},[91,129855,129856],{"class":93,"line":1436},[91,129857,1689],{"class":250},[21,129859,129860],{},"优先级注意点：",[21,129862,129863],{},"①权重是有4组数字组成,但是不会有进位",[21,129865,129866],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[21,129868,129869],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[21,129871,129872],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[21,129874,129875],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[21,129877,129878],{},"⑥复合选择器",[386,129880,129881,129891],{},[389,129882,129883],{},[392,129884,129885,129888],{},[395,129886,129887],{"align":23860},"div ul li",[395,129889,129890],{"align":23860},"0,0,0,3",[433,129892,129893,129901,129909],{},[392,129894,129895,129898],{},[438,129896,129897],{"align":23860},".nav ul li",[438,129899,129900],{"align":23860},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[392,129902,129903,129906],{},[438,129904,129905],{"align":23860},"a:hover",[438,129907,129908],{"align":23860},"0,0,1,1",[392,129910,129911,129914],{},[438,129912,129913],{"align":23860},".nav a",[438,129915,129908],{"align":23860},[168,129917,129918],{},"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":26,"searchDepth":38,"depth":38,"links":129920},[129921,129929,129940],{"id":128029,"depth":38,"text":128030,"children":129922},[129923,129924,129925,129926,129927,129928],{"id":128042,"depth":1304,"text":128043},{"id":128114,"depth":1304,"text":128115},{"id":128186,"depth":1304,"text":128187},{"id":128217,"depth":1304,"text":128218},{"id":128224,"depth":1304,"text":128225},{"id":128377,"depth":1304,"text":128378},{"id":128685,"depth":38,"text":128686,"children":129930},[129931,129932,129933,129934,129935,129936,129937,129938,129939],{"id":128692,"depth":1304,"text":128693},{"id":128702,"depth":1304,"text":128703},{"id":128798,"depth":1304,"text":128799},{"id":128871,"depth":1304,"text":128872},{"id":129026,"depth":1304,"text":129027},{"id":129114,"depth":1304,"text":129115},{"id":129166,"depth":1304,"text":129167},{"id":129225,"depth":1304,"text":129226},{"id":129330,"depth":1304,"text":129331},{"id":129658,"depth":38,"text":129659,"children":129941},[129942,129943,129944],{"id":129662,"depth":1304,"text":129663},{"id":129675,"depth":1304,"text":129676},{"id":129725,"depth":1304,"text":129726},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128021,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129951,"title":129952,"body":129953,"description":23500,"extension":173,"meta":131543,"navigation":175,"path":131544,"seo":131545,"stem":131546,"__hash__":131547},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129954,"toc":131522},[129955,129958,129962,129965,129968,129971,129974,129977,129980,129983,129987,129995,130032,130068,130071,130085,130090,130124,130127,130220,130225,130228,130258,130261,130266,130274,130278,130285,130331,130375,130380,130383,130386,130389,130392,130395,130398,130400,130403,130407,130412,130456,130461,130464,130467,130504,130509,130512,130515,130518,130521,130553,130556,130559,130562,130594,130597,130600,130603,130607,130610,130642,130645,130649,130669,130672,130680,130683,130687,130692,130695,130727,130732,130735,130773,130777,130782,130785,130788,130819,130822,130839,130844,130896,130956,130961,131015,131053,131057,131061,131064,131068,131076,131079,131081,131092,131097,131145,131179,131182,131185,131188,131191,131235,131238,131241,131244,131247,131250,131253,131297,131300,131303,131306,131309,131312,131315,131321,131324,131368,131371,131374,131377,131380,131383,131427,131430,131432,131435,131439,131443,131481,131485,131488,131491,131495,131503,131507,131510,131513,131516,131519],[10,129956,129952],{"id":129957},"_9-css盒模型浮动与切图",[190,129959,129961],{"id":129960},"_91-盒子模型","9.1 盒子模型",[21,129963,129964],{},"利用盒子来设计网页",[21,129966,129967],{},"盒子包含：边框、外边距、内边距、实际内容",[21,129969,129970],{},"网页布局设置：",[21,129972,129973],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[21,129975,129976],{},"②利用css设置好盒子样式，然后摆放到相应位置",[21,129978,129979],{},"③往盒子里装内容",[24,129981],{"style":126489,"src":129982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[217,129984,129986],{"id":129985},"_911-边框border","9.1.1 边框（border）",[14,129988,129989,129992],{},[17,129990,129991],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[17,129993,129994],{},"语法",[82,129996,129998],{"className":126633,"code":129997,"language":126635,"meta":26,"style":26},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[88,129999,130000,130005,130011,130028],{"__ignoreMap":26},[91,130001,130002],{"class":93,"line":94},[91,130003,130004],{"class":308},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[91,130006,130007,130009],{"class":93,"line":38},[91,130008,51692],{"class":51381},[91,130010,15695],{"class":250},[91,130012,130013,130015,130017,130019,130021,130023,130026],{"class":93,"line":1304},[91,130014,70977],{"class":105},[91,130016,51518],{"class":250},[91,130018,466],{"class":105},[91,130020,51573],{"class":153},[91,130022,51602],{"class":105},[91,130024,130025],{"class":105}," #ccc",[91,130027,1415],{"class":250},[91,130029,130030],{"class":93,"line":1319},[91,130031,1689],{"class":250},[386,130033,130034,130042],{},[389,130035,130036],{},[392,130037,130038,130040],{},[395,130039,129235],{"align":23860},[395,130041,102777],{"align":23860},[433,130043,130044,130052,130060],{},[392,130045,130046,130049],{},[438,130047,130048],{"align":23860},"border-width",[438,130050,130051],{"align":23860},"定义边框粗细，单位是px",[392,130053,130054,130057],{},[438,130055,130056],{"align":23860},"border-style",[438,130058,130059],{"align":23860},"边框的样式",[392,130061,130062,130065],{},[438,130063,130064],{"align":23860},"border-color",[438,130066,130067],{"align":23860},"边框的颜色",[21,130069,130070],{},"边框样式 border-style 可以设置如下值：",[1256,130072,130073,130076,130079,130082],{},[17,130074,130075],{},"none：没有边框即忽略所有边框的宽度（默认值）",[17,130077,130078],{},"solid：边框为单实线(最为常用的)",[17,130080,130081],{},"dashed：边框为虚线",[17,130083,130084],{},"dotted：边框为点线",[14,130086,130087],{"start":1304},[17,130088,130089],{},"边框的合写分写",[82,130091,130092],{"className":126633,"code":129997,"language":126635,"meta":26,"style":26},[88,130093,130094,130098,130104,130120],{"__ignoreMap":26},[91,130095,130096],{"class":93,"line":94},[91,130097,130004],{"class":308},[91,130099,130100,130102],{"class":93,"line":38},[91,130101,51692],{"class":51381},[91,130103,15695],{"class":250},[91,130105,130106,130108,130110,130112,130114,130116,130118],{"class":93,"line":1304},[91,130107,70977],{"class":105},[91,130109,51518],{"class":250},[91,130111,466],{"class":105},[91,130113,51573],{"class":153},[91,130115,51602],{"class":105},[91,130117,130025],{"class":105},[91,130119,1415],{"class":250},[91,130121,130122],{"class":93,"line":1319},[91,130123,1689],{"class":250},[21,130125,130126],{},"边框分开写法：",[82,130128,130130],{"className":126633,"code":130129,"language":126635,"meta":26,"style":26},"\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",[88,130131,130132,130137,130143,130161,130179,130198,130216],{"__ignoreMap":26},[91,130133,130134],{"class":93,"line":94},[91,130135,130136],{"class":308},"\u002F* 边框分开写法 *\u002F\n",[91,130138,130139,130141],{"class":93,"line":38},[91,130140,51692],{"class":51381},[91,130142,15695],{"class":250},[91,130144,130145,130148,130150,130152,130154,130156,130159],{"class":93,"line":1304},[91,130146,130147],{"class":105},"  border-top",[91,130149,51518],{"class":250},[91,130151,466],{"class":105},[91,130153,51573],{"class":153},[91,130155,51602],{"class":105},[91,130157,130158],{"class":105}," #000",[91,130160,1415],{"class":250},[91,130162,130163,130166,130168,130170,130172,130174,130177],{"class":93,"line":1319},[91,130164,130165],{"class":105},"  border-right",[91,130167,51518],{"class":250},[91,130169,327],{"class":105},[91,130171,51573],{"class":153},[91,130173,62322],{"class":105},[91,130175,130176],{"class":105}," #333",[91,130178,1415],{"class":250},[91,130180,130181,130184,130186,130188,130190,130193,130196],{"class":93,"line":1325},[91,130182,130183],{"class":105},"  border-bottom",[91,130185,51518],{"class":250},[91,130187,321],{"class":105},[91,130189,51573],{"class":153},[91,130191,130192],{"class":105}," dotted",[91,130194,130195],{"class":105}," #666",[91,130197,1415],{"class":250},[91,130199,130200,130203,130205,130207,130209,130211,130214],{"class":93,"line":1339},[91,130201,130202],{"class":105},"  border-left",[91,130204,51518],{"class":250},[91,130206,466],{"class":105},[91,130208,51573],{"class":153},[91,130210,51602],{"class":105},[91,130212,130213],{"class":105}," #999",[91,130215,1415],{"class":250},[91,130217,130218],{"class":93,"line":1345},[91,130219,1689],{"class":250},[14,130221,130222],{"start":1319},[17,130223,130224],{},"表格的细线边框",[21,130226,130227],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[82,130229,130231],{"className":126633,"code":130230,"language":126635,"meta":26,"style":26},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[88,130232,130233,130238,130244,130254],{"__ignoreMap":26},[91,130234,130235],{"class":93,"line":94},[91,130236,130237],{"class":308},"\u002F* 表格细线边框合并 *\u002F\n",[91,130239,130240,130242],{"class":93,"line":38},[91,130241,386],{"class":51381},[91,130243,15695],{"class":250},[91,130245,130246,130248,130250,130252],{"class":93,"line":1304},[91,130247,70659],{"class":105},[91,130249,51518],{"class":250},[91,130251,65116],{"class":105},[91,130253,1415],{"class":250},[91,130255,130256],{"class":93,"line":1319},[91,130257,1689],{"class":250},[21,130259,130260],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[14,130262,130263],{"start":1325},[17,130264,130265],{},"解决边框额外增加盒子的实际大小的方法：",[1256,130267,130268,130271],{},[17,130269,130270],{},"测量盒子大小的时候,不量边框",[17,130272,130273],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[217,130275,130277],{"id":130276},"_912-内边距","9.1.2 内边距",[14,130279,130280,130283],{},[17,130281,130282],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[17,130284,129994],{},[386,130286,130287,130297],{},[389,130288,130289],{},[392,130290,130291,130294],{},[395,130292,130293],{"align":23860},"值的个数",[395,130295,130296],{"align":23860},"表达意思",[433,130298,130299,130307,130315,130323],{},[392,130300,130301,130304],{},[438,130302,130303],{"align":23860},"padding: 5px;",[438,130305,130306],{"align":23860},"1个值，代表上下左右都有5个元素",[392,130308,130309,130312],{},[438,130310,130311],{"align":23860},"padding: 5px 10px;",[438,130313,130314],{"align":23860},"2个值，代表上下内边距为5像素，左右内边距为10像素",[392,130316,130317,130320],{},[438,130318,130319],{"align":23860},"padding: 5px 10px 20px;",[438,130321,130322],{"align":23860},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[392,130324,130325,130328],{},[438,130326,130327],{"align":23860},"padding: 5px 10px 20px 30px;",[438,130329,130330],{"align":23860},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[386,130332,130333,130341],{},[389,130334,130335],{},[392,130336,130337,130339],{},[395,130338,129235],{"align":23860},[395,130340,102777],{"align":23860},[433,130342,130343,130351,130359,130367],{},[392,130344,130345,130348],{},[438,130346,130347],{"align":23860},"padding-left",[438,130349,130350],{"align":23860},"左内边距",[392,130352,130353,130356],{},[438,130354,130355],{"align":23860},"padding-right",[438,130357,130358],{"align":23860},"右内边距",[392,130360,130361,130364],{},[438,130362,130363],{"align":23860},"padding-top",[438,130365,130366],{"align":23860},"上内边距",[392,130368,130369,130372],{},[438,130370,130371],{"align":23860},"padding-bottom",[438,130373,130374],{"align":23860},"下内边距",[14,130376,130377],{"start":1304},[17,130378,130379],{},"内边距会影响盒子的实际大小",[21,130381,130382],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[21,130384,130385],{},"①内容和边框有了距离，添加了内边距",[21,130387,130388],{},"②padding影响了盒子实际大小",[21,130390,130391],{},"内边距对盒子大小的影响：",[21,130393,130394],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[21,130396,130397],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[21,130399,95301],{},[21,130401,130402],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[217,130404,130406],{"id":130405},"_913-外边距","9.1.3 外边距",[14,130408,130409],{},[17,130410,130411],{},"控制盒子与盒子之间的距离",[386,130413,130414,130422],{},[389,130415,130416],{},[392,130417,130418,130420],{},[395,130419,129235],{"align":23860},[395,130421,102777],{"align":23860},[433,130423,130424,130432,130440,130448],{},[392,130425,130426,130429],{},[438,130427,130428],{"align":23860},"margin-left",[438,130430,130431],{"align":23860},"左外边距",[392,130433,130434,130437],{},[438,130435,130436],{"align":23860},"margin-right",[438,130438,130439],{"align":23860},"右外边距",[392,130441,130442,130445],{},[438,130443,130444],{"align":23860},"margin-top",[438,130446,130447],{"align":23860},"上外边距",[392,130449,130450,130453],{},[438,130451,130452],{"align":23860},"margin-bottom",[438,130454,130455],{"align":23860},"下外边距",[14,130457,130458],{"start":38},[17,130459,130460],{},"外边距可以让块级盒子水平居中的两个条件：",[21,130462,130463],{},"①盒子必须指定了宽度（width）",[21,130465,130466],{},"②盒子左右的外边距都设置为 auto",[82,130468,130470],{"className":126633,"code":130469,"language":126635,"meta":26,"style":26},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[88,130471,130472,130477,130484,130500],{"__ignoreMap":26},[91,130473,130474],{"class":93,"line":94},[91,130475,130476],{"class":308},"\u002F* margin 复合写法（同上） *\u002F\n",[91,130478,130479,130482],{"class":93,"line":38},[91,130480,130481],{"class":97},".box",[91,130483,15695],{"class":250},[91,130485,130486,130488,130490,130492,130494,130497],{"class":93,"line":1304},[91,130487,70551],{"class":105},[91,130489,51518],{"class":250},[91,130491,440],{"class":105},[91,130493,51637],{"class":105},[91,130495,130496],{"class":250},";  ",[91,130498,130499],{"class":308},"\u002F* 块级盒子水平居中 *\u002F\n",[91,130501,130502],{"class":93,"line":1319},[91,130503,1689],{"class":250},[14,130505,130506],{"start":1304},[17,130507,130508],{},"外边距塌陷问题",[21,130510,130511],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[24,130513],{"style":126489,"src":130514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[21,130516,130517],{},"解决方案：",[21,130519,130520],{},"①可以为父亲元素定义上边距",[82,130522,130523],{"className":126633,"code":130469,"language":126635,"meta":26,"style":26},[88,130524,130525,130529,130535,130549],{"__ignoreMap":26},[91,130526,130527],{"class":93,"line":94},[91,130528,130476],{"class":308},[91,130530,130531,130533],{"class":93,"line":38},[91,130532,130481],{"class":97},[91,130534,15695],{"class":250},[91,130536,130537,130539,130541,130543,130545,130547],{"class":93,"line":1304},[91,130538,70551],{"class":105},[91,130540,51518],{"class":250},[91,130542,440],{"class":105},[91,130544,51637],{"class":105},[91,130546,130496],{"class":250},[91,130548,130499],{"class":308},[91,130550,130551],{"class":93,"line":1319},[91,130552,1689],{"class":250},[21,130554,130555],{},"②可以为父亲元素定义上内边距",[21,130557,130558],{},"③可以为父亲元素添加overflow:hidden",[24,130560],{"style":126489,"src":130561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[82,130563,130564],{"className":126633,"code":130469,"language":126635,"meta":26,"style":26},[88,130565,130566,130570,130576,130590],{"__ignoreMap":26},[91,130567,130568],{"class":93,"line":94},[91,130569,130476],{"class":308},[91,130571,130572,130574],{"class":93,"line":38},[91,130573,130481],{"class":97},[91,130575,15695],{"class":250},[91,130577,130578,130580,130582,130584,130586,130588],{"class":93,"line":1304},[91,130579,70551],{"class":105},[91,130581,51518],{"class":250},[91,130583,440],{"class":105},[91,130585,51637],{"class":105},[91,130587,130496],{"class":250},[91,130589,130499],{"class":308},[91,130591,130592],{"class":93,"line":1319},[91,130593,1689],{"class":250},[24,130595],{"style":126489,"src":130596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[21,130598,130599],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[21,130601,130602],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[217,130604,130606],{"id":130605},"_914-清除内外边距","9.1.4 清除内外边距",[21,130608,130609],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[82,130611,130612],{"className":126633,"code":130469,"language":126635,"meta":26,"style":26},[88,130613,130614,130618,130624,130638],{"__ignoreMap":26},[91,130615,130616],{"class":93,"line":94},[91,130617,130476],{"class":308},[91,130619,130620,130622],{"class":93,"line":38},[91,130621,130481],{"class":97},[91,130623,15695],{"class":250},[91,130625,130626,130628,130630,130632,130634,130636],{"class":93,"line":1304},[91,130627,70551],{"class":105},[91,130629,51518],{"class":250},[91,130631,440],{"class":105},[91,130633,51637],{"class":105},[91,130635,130496],{"class":250},[91,130637,130499],{"class":308},[91,130639,130640],{"class":93,"line":1319},[91,130641,1689],{"class":250},[21,130643,130644],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[217,130646,130648],{"id":130647},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1256,130650,130651,130654,130657,130660,130663,130666],{},[17,130652,130653],{},"文件→打开 ：可以打开我们要测量的图片",[17,130655,130656],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[17,130658,130659],{},"右击标尺，把里面的单位改为像素",[17,130661,130662],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[17,130664,130665],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[17,130667,130668],{},"用选区拖动 可以测量大小",[24,130670],{"style":126489,"src":130671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1256,130673,130674,130677],{},[17,130675,130676],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[17,130678,130679],{},"吸管取色工具",[24,130681],{"style":126489,"src":130682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[217,130684,130686],{"id":130685},"_916-案例","9.1.6 案例",[14,130688,130689],{},[17,130690,130691],{},"小米商品",[24,130693],{"style":126489,"src":130694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[82,130696,130697],{"className":126633,"code":130469,"language":126635,"meta":26,"style":26},[88,130698,130699,130703,130709,130723],{"__ignoreMap":26},[91,130700,130701],{"class":93,"line":94},[91,130702,130476],{"class":308},[91,130704,130705,130707],{"class":93,"line":38},[91,130706,130481],{"class":97},[91,130708,15695],{"class":250},[91,130710,130711,130713,130715,130717,130719,130721],{"class":93,"line":1304},[91,130712,70551],{"class":105},[91,130714,51518],{"class":250},[91,130716,440],{"class":105},[91,130718,51637],{"class":105},[91,130720,130496],{"class":250},[91,130722,130499],{"class":308},[91,130724,130725],{"class":93,"line":1319},[91,130726,1689],{"class":250},[14,130728,130729],{"start":38},[17,130730,130731],{},"快报模块",[24,130733],{"style":126489,"src":130734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[82,130736,130738],{"className":127380,"code":130737,"language":127382,"meta":26,"style":26},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[88,130739,130740,130745,130760,130765],{"__ignoreMap":26},[91,130741,130742],{"class":93,"line":94},[91,130743,130744],{"class":308},"\u003C!-- HTML 代码示例 -->\n",[91,130746,130747,130749,130751,130753,130755,130758],{"class":93,"line":38},[91,130748,1159],{"class":250},[91,130750,51692],{"class":51381},[91,130752,53567],{"class":97},[91,130754,296],{"class":250},[91,130756,130757],{"class":101},"\"example\"",[91,130759,51388],{"class":250},[91,130761,130762],{"class":93,"line":1304},[91,130763,130764],{"class":250},"  示例内容\n",[91,130766,130767,130769,130771],{"class":93,"line":1319},[91,130768,51866],{"class":250},[91,130770,51692],{"class":51381},[91,130772,51388],{"class":250},[217,130774,130776],{"id":130775},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[14,130778,130779],{},[17,130780,130781],{},"圆角边框",[21,130783,130784],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[24,130786],{"style":126489,"src":130787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[82,130789,130791],{"className":126633,"code":130790,"language":126635,"meta":26,"style":26},"div {\n  border: 1px solid #ccc;\n}\n",[88,130792,130793,130799,130815],{"__ignoreMap":26},[91,130794,130795,130797],{"class":93,"line":94},[91,130796,51692],{"class":51381},[91,130798,15695],{"class":250},[91,130800,130801,130803,130805,130807,130809,130811,130813],{"class":93,"line":38},[91,130802,70977],{"class":105},[91,130804,51518],{"class":250},[91,130806,466],{"class":105},[91,130808,51573],{"class":153},[91,130810,51602],{"class":105},[91,130812,130025],{"class":105},[91,130814,1415],{"class":250},[91,130816,130817],{"class":93,"line":1304},[91,130818,1689],{"class":250},[21,130820,130821],{},"解释:",[1256,130823,130824,130827,130830,130833,130836],{},[17,130825,130826],{},"参数值可以为数值或百分比的形式",[17,130828,130829],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[17,130831,130832],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[17,130834,130835],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[17,130837,130838],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[14,130840,130841],{"start":38},[17,130842,130843],{},"盒子阴影",[82,130845,130847],{"className":126633,"code":130846,"language":126635,"meta":26,"style":26},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[88,130848,130849,130855,130892],{"__ignoreMap":26},[91,130850,130851,130853],{"class":93,"line":94},[91,130852,51692],{"class":51381},[91,130854,15695],{"class":250},[91,130856,130857,130860,130862,130864,130866,130868,130870,130872,130874,130876,130878,130880,130882,130884,130886,130888,130890],{"class":93,"line":38},[91,130858,130859],{"class":105},"  box-shadow",[91,130861,51518],{"class":250},[91,130863,440],{"class":105},[91,130865,14878],{"class":105},[91,130867,51573],{"class":153},[91,130869,2161],{"class":105},[91,130871,51573],{"class":153},[91,130873,78848],{"class":105},[91,130875,251],{"class":250},[91,130877,440],{"class":105},[91,130879,12558],{"class":250},[91,130881,440],{"class":105},[91,130883,12558],{"class":250},[91,130885,440],{"class":105},[91,130887,12558],{"class":250},[91,130889,86291],{"class":105},[91,130891,2842],{"class":250},[91,130893,130894],{"class":93,"line":1304},[91,130895,1689],{"class":250},[386,130897,130898,130906],{},[389,130899,130900],{},[392,130901,130902,130904],{},[395,130903,401],{"align":23860},[395,130905,27608],{"align":23860},[433,130907,130908,130916,130924,130932,130940,130948],{},[392,130909,130910,130913],{},[438,130911,130912],{"align":23860},"h-shadow",[438,130914,130915],{"align":23860},"必需,水平阴影的位置,允许负值",[392,130917,130918,130921],{},[438,130919,130920],{"align":23860},"v-shadow",[438,130922,130923],{"align":23860},"必需,垂直阴影的位置,允许负值",[392,130925,130926,130929],{},[438,130927,130928],{"align":23860},"blur",[438,130930,130931],{"align":23860},"可选,模糊距离,就是影子的虚实",[392,130933,130934,130937],{},[438,130935,130936],{"align":23860},"spread",[438,130938,130939],{"align":23860},"可选,阴影尺寸",[392,130941,130942,130945],{},[438,130943,130944],{"align":23860},"color",[438,130946,130947],{"align":23860},"可选,阴影的颜色",[392,130949,130950,130953],{},[438,130951,130952],{"align":23860},"inset",[438,130954,130955],{"align":23860},"可选,将外部阴影(outset)改为内部阴影",[14,130957,130958],{"start":1304},[17,130959,130960],{},"文字阴影",[82,130962,130964],{"className":126633,"code":130963,"language":126635,"meta":26,"style":26},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[88,130965,130966,130972,131011],{"__ignoreMap":26},[91,130967,130968,130970],{"class":93,"line":94},[91,130969,21],{"class":51381},[91,130971,15695],{"class":250},[91,130973,130974,130977,130979,130981,130983,130985,130987,130989,130991,130993,130995,130997,130999,131001,131003,131005,131007,131009],{"class":93,"line":38},[91,130975,130976],{"class":105},"  text-shadow",[91,130978,51518],{"class":250},[91,130980,466],{"class":105},[91,130982,51573],{"class":153},[91,130984,25240],{"class":105},[91,130986,51573],{"class":153},[91,130988,14878],{"class":105},[91,130990,51573],{"class":153},[91,130992,78848],{"class":105},[91,130994,251],{"class":250},[91,130996,440],{"class":105},[91,130998,12558],{"class":250},[91,131000,440],{"class":105},[91,131002,12558],{"class":250},[91,131004,440],{"class":105},[91,131006,12558],{"class":250},[91,131008,100602],{"class":105},[91,131010,2842],{"class":250},[91,131012,131013],{"class":93,"line":1304},[91,131014,1689],{"class":250},[386,131016,131017,131025],{},[389,131018,131019],{},[392,131020,131021,131023],{},[395,131022,401],{"align":23860},[395,131024,27608],{"align":23860},[433,131026,131027,131033,131040,131047],{},[392,131028,131029,131031],{},[438,131030,130912],{"align":23860},[438,131032,130915],{"align":23860},[392,131034,131035,131037],{},[438,131036,130920],{"align":23860},[438,131038,131039],{"align":23860},"必需,垂直阴影位置,允许负值",[392,131041,131042,131044],{},[438,131043,130928],{"align":23860},[438,131045,131046],{"align":23860},"可选,模糊的距离",[392,131048,131049,131051],{},[438,131050,130944],{"align":23860},[438,131052,130947],{"align":23860},[190,131054,131056],{"id":131055},"_92-浮动","9.2 浮动",[217,131058,131060],{"id":131059},"_921-浮动介绍","9.2.1 浮动介绍",[21,131062,131063],{},"在16.2中详细介绍",[217,131065,131067],{"id":131066},"_922-清除浮动","9.2.2 清除浮动",[14,131069,131070,131073],{},[17,131071,131072],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[17,131074,131075],{},"清除浮动的本质",[21,131077,131078],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[21,131080,9148],{},[1256,131082,131083,131086,131089],{},[17,131084,131085],{},"如果父盒子本身有高度，则不需要清除浮动",[17,131087,131088],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[17,131090,131091],{},"父级有了高度，就不会影响下面的标准流了",[14,131093,131094],{"start":1304},[17,131095,131096],{},"清除浮动样式",[82,131098,131100],{"className":126633,"code":131099,"language":126635,"meta":26,"style":26},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[88,131101,131102,131109,131120,131124,131131,131141],{"__ignoreMap":26},[91,131103,131104,131107],{"class":93,"line":94},[91,131105,131106],{"class":97},".left",[91,131108,15695],{"class":250},[91,131110,131111,131114,131116,131118],{"class":93,"line":38},[91,131112,131113],{"class":105},"  float",[91,131115,51518],{"class":250},[91,131117,23860],{"class":105},[91,131119,1415],{"class":250},[91,131121,131122],{"class":93,"line":1304},[91,131123,1689],{"class":250},[91,131125,131126,131129],{"class":93,"line":1319},[91,131127,131128],{"class":97},".right",[91,131130,15695],{"class":250},[91,131132,131133,131135,131137,131139],{"class":93,"line":1325},[91,131134,131113],{"class":105},[91,131136,51518],{"class":250},[91,131138,72603],{"class":105},[91,131140,1415],{"class":250},[91,131142,131143],{"class":93,"line":1339},[91,131144,1689],{"class":250},[386,131146,131147,131155],{},[389,131148,131149],{},[392,131150,131151,131153],{},[395,131152,127097],{"align":23860},[395,131154,27608],{"align":23860},[433,131156,131157,131164,131171],{},[392,131158,131159,131161],{},[438,131160,23860],{"align":23860},[438,131162,131163],{"align":23860},"不允许左侧有浮动元素（清除左侧浮动的影响）",[392,131165,131166,131168],{},[438,131167,72603],{"align":23860},[438,131169,131170],{"align":23860},"不允许右侧有浮动元素（清除右侧浮动的影响）",[392,131172,131173,131176],{},[438,131174,131175],{"align":23860},"both",[438,131177,131178],{"align":23860},"同时清除左右侧浮动的影响",[21,131180,131181],{},"法一",[21,131183,131184],{},"额外标签法也称为隔墙法",[21,131186,131187],{},"使用方式：",[21,131189,131190],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[82,131192,131193],{"className":126633,"code":131099,"language":126635,"meta":26,"style":26},[88,131194,131195,131201,131211,131215,131221,131231],{"__ignoreMap":26},[91,131196,131197,131199],{"class":93,"line":94},[91,131198,131106],{"class":97},[91,131200,15695],{"class":250},[91,131202,131203,131205,131207,131209],{"class":93,"line":38},[91,131204,131113],{"class":105},[91,131206,51518],{"class":250},[91,131208,23860],{"class":105},[91,131210,1415],{"class":250},[91,131212,131213],{"class":93,"line":1304},[91,131214,1689],{"class":250},[91,131216,131217,131219],{"class":93,"line":1319},[91,131218,131128],{"class":97},[91,131220,15695],{"class":250},[91,131222,131223,131225,131227,131229],{"class":93,"line":1325},[91,131224,131113],{"class":105},[91,131226,51518],{"class":250},[91,131228,72603],{"class":105},[91,131230,1415],{"class":250},[91,131232,131233],{"class":93,"line":1339},[91,131234,1689],{"class":250},[21,131236,131237],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[21,131239,131240],{},"优点： 通俗易懂，书写方便",[21,131242,131243],{},"缺点： 添加许多无意义的标签，结构化较差",[21,131245,131246],{},"注意： 要求这个新的空标签必须是块级元素。",[21,131248,131249],{},"法二",[21,131251,131252],{},"父级添加overflow属性",[82,131254,131255],{"className":126633,"code":131099,"language":126635,"meta":26,"style":26},[88,131256,131257,131263,131273,131277,131283,131293],{"__ignoreMap":26},[91,131258,131259,131261],{"class":93,"line":94},[91,131260,131106],{"class":97},[91,131262,15695],{"class":250},[91,131264,131265,131267,131269,131271],{"class":93,"line":38},[91,131266,131113],{"class":105},[91,131268,51518],{"class":250},[91,131270,23860],{"class":105},[91,131272,1415],{"class":250},[91,131274,131275],{"class":93,"line":1304},[91,131276,1689],{"class":250},[91,131278,131279,131281],{"class":93,"line":1319},[91,131280,131128],{"class":97},[91,131282,15695],{"class":250},[91,131284,131285,131287,131289,131291],{"class":93,"line":1325},[91,131286,131113],{"class":105},[91,131288,51518],{"class":250},[91,131290,72603],{"class":105},[91,131292,1415],{"class":250},[91,131294,131295],{"class":93,"line":1339},[91,131296,1689],{"class":250},[21,131298,131299],{},"overflow: hidden;",[21,131301,131302],{},"优点：代码简洁",[21,131304,131305],{},"缺点：无法显示溢出的部分",[21,131307,131308],{},"注意：是给父元素添加代码",[21,131310,131311],{},"法三",[21,131313,131314],{},"父级添加after伪元素",[21,131316,131317,131320],{},[131318,131319],"after",{}," 方式是额外标签法的升级版",[21,131322,131323],{},"使用的时候复制就可以",[82,131325,131326],{"className":126633,"code":131099,"language":126635,"meta":26,"style":26},[88,131327,131328,131334,131344,131348,131354,131364],{"__ignoreMap":26},[91,131329,131330,131332],{"class":93,"line":94},[91,131331,131106],{"class":97},[91,131333,15695],{"class":250},[91,131335,131336,131338,131340,131342],{"class":93,"line":38},[91,131337,131113],{"class":105},[91,131339,51518],{"class":250},[91,131341,23860],{"class":105},[91,131343,1415],{"class":250},[91,131345,131346],{"class":93,"line":1304},[91,131347,1689],{"class":250},[91,131349,131350,131352],{"class":93,"line":1319},[91,131351,131128],{"class":97},[91,131353,15695],{"class":250},[91,131355,131356,131358,131360,131362],{"class":93,"line":1325},[91,131357,131113],{"class":105},[91,131359,51518],{"class":250},[91,131361,72603],{"class":105},[91,131363,1415],{"class":250},[91,131365,131366],{"class":93,"line":1339},[91,131367,1689],{"class":250},[21,131369,131370],{},"优点：没有增加标签，结构更简单",[21,131372,131373],{},"缺点：照顾低版本浏览器",[21,131375,131376],{},"代表网站： 百度、淘宝网、网易等",[21,131378,131379],{},"法四",[21,131381,131382],{},"父级添加双伪元素",[82,131384,131385],{"className":126633,"code":131099,"language":126635,"meta":26,"style":26},[88,131386,131387,131393,131403,131407,131413,131423],{"__ignoreMap":26},[91,131388,131389,131391],{"class":93,"line":94},[91,131390,131106],{"class":97},[91,131392,15695],{"class":250},[91,131394,131395,131397,131399,131401],{"class":93,"line":38},[91,131396,131113],{"class":105},[91,131398,51518],{"class":250},[91,131400,23860],{"class":105},[91,131402,1415],{"class":250},[91,131404,131405],{"class":93,"line":1304},[91,131406,1689],{"class":250},[91,131408,131409,131411],{"class":93,"line":1319},[91,131410,131128],{"class":97},[91,131412,15695],{"class":250},[91,131414,131415,131417,131419,131421],{"class":93,"line":1325},[91,131416,131113],{"class":105},[91,131418,51518],{"class":250},[91,131420,72603],{"class":105},[91,131422,1415],{"class":250},[91,131424,131425],{"class":93,"line":1339},[91,131426,1689],{"class":250},[21,131428,131429],{},"优点：代码更简洁",[21,131431,131373],{},[21,131433,131434],{},"代表网站：小米、腾讯等",[190,131436,131438],{"id":131437},"_93-ps切图","9.3 PS切图",[217,131440,131442],{"id":131441},"_931-常见图片格式","9.3.1 常见图片格式",[386,131444,131445,131455],{},[389,131446,131447],{},[392,131448,131449,131452],{},[395,131450,131451],{"align":23860},"jpg图像格式",[395,131453,131454],{"align":23860},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[433,131456,131457,131465,131473],{},[392,131458,131459,131462],{},[438,131460,131461],{"align":23860},"gif图像格式",[438,131463,131464],{"align":23860},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[392,131466,131467,131470],{},[438,131468,131469],{"align":23860},"png图像格式",[438,131471,131472],{"align":23860},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[392,131474,131475,131478],{},[438,131476,131477],{"align":23860},"PSD图像格式",[438,131479,131480],{"align":23860},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[217,131482,131484],{"id":131483},"_932-图层切图","9.3.2 图层切图",[21,131486,131487],{},"最简单的切图方式：右击图层 → 导出 → 切片",[21,131489,131490],{},"按住shift选中两个图层->图层菜单->合并图层",[217,131492,131494],{"id":131493},"_933-切片切图","9.3.3 切片切图",[1256,131496,131497,131500],{},[17,131498,131499],{},"利用切片工具手动划出",[17,131501,131502],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[217,131504,131506],{"id":131505},"_934-切图步骤","9.3.4 切图步骤",[21,131508,131509],{},"用切片工具选中：",[24,131511],{"style":126489,"src":131512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[21,131514,131515],{},"文件 -> 导出",[24,131517],{"style":126489,"src":131518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[168,131520,131521],{},"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":26,"searchDepth":38,"depth":38,"links":131523},[131524,131533,131537],{"id":129960,"depth":38,"text":129961,"children":131525},[131526,131527,131528,131529,131530,131531,131532],{"id":129985,"depth":1304,"text":129986},{"id":130276,"depth":1304,"text":130277},{"id":130405,"depth":1304,"text":130406},{"id":130605,"depth":1304,"text":130606},{"id":130647,"depth":1304,"text":130648},{"id":130685,"depth":1304,"text":130686},{"id":130775,"depth":1304,"text":130776},{"id":131055,"depth":38,"text":131056,"children":131534},[131535,131536],{"id":131059,"depth":1304,"text":131060},{"id":131066,"depth":1304,"text":131067},{"id":131437,"depth":38,"text":131438,"children":131538},[131539,131540,131541,131542],{"id":131441,"depth":1304,"text":131442},{"id":131483,"depth":1304,"text":131484},{"id":131493,"depth":1304,"text":131494},{"id":131505,"depth":1304,"text":131506},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129952,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131549,"title":131550,"body":131551,"description":23500,"extension":173,"meta":132192,"navigation":175,"path":132193,"seo":132194,"stem":132195,"__hash__":132196},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131552,"toc":132180},[131553,131556,131560,131586,131620,131624,131628,131631,131673,131680,131690,131698,131700,131703,131706,131709,131716,131730,131734,131737,131766,131770,131773,131787,131791,131794,131822,131826,131829,131855,131859,131864,131897,131902,131930,131934,131951,131997,132002,132046,132063,132170,132178],[10,131554,131550],{"id":131555},"_10-css规范与学成在线案例",[190,131557,131559],{"id":131558},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[14,131561,131562,131568,131574,131580],{},[17,131563,131564,131567],{},[398,131565,131566],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[17,131569,131570,131573],{},[398,131571,131572],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[17,131575,131576,131579],{},[398,131577,131578],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[17,131581,131582,131585],{},[398,131583,131584],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[82,131587,131588],{"className":126633,"code":129997,"language":126635,"meta":26,"style":26},[88,131589,131590,131594,131600,131616],{"__ignoreMap":26},[91,131591,131592],{"class":93,"line":94},[91,131593,130004],{"class":308},[91,131595,131596,131598],{"class":93,"line":38},[91,131597,51692],{"class":51381},[91,131599,15695],{"class":250},[91,131601,131602,131604,131606,131608,131610,131612,131614],{"class":93,"line":1304},[91,131603,70977],{"class":105},[91,131605,51518],{"class":250},[91,131607,466],{"class":105},[91,131609,51573],{"class":153},[91,131611,51602],{"class":105},[91,131613,130025],{"class":105},[91,131615,1415],{"class":250},[91,131617,131618],{"class":93,"line":1319},[91,131619,1689],{"class":250},[190,131621,131623],{"id":131622},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[217,131625,131627],{"id":131626},"_1021-header头部制作","10.2.1 header头部制作",[24,131629],{"style":126489,"src":131630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1256,131632,131633,131640,131647,131653,131660,131667],{},[17,131634,131635,131636,131639],{},"1号是版心盒子 ",[398,131637,131638],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[17,131641,131642,131643,131646],{},"版心盒子 里面包含 2号盒子 ",[398,131644,131645],{},"logo"," 图标",[17,131648,131649,131650,131652],{},"版心盒子 里面包含 3号盒子 ",[398,131651,53794],{}," 导航栏",[17,131654,131655,131656,131659],{},"版心盒子 里面包含 4号盒子 ",[398,131657,131658],{},"search"," 搜索框",[17,131661,131662,131663,131666],{},"版心盒子 里面包含 5号盒子 ",[398,131664,131665],{},"user"," 个人信息",[17,131668,131669,131670],{},"注意，要求里面的 ",[398,131671,131672],{},"4个子盒子 必须都浮动",[14,131674,131675],{},[17,131676,131677],{},[398,131678,131679],{},"导航栏注意点:",[21,131681,131682,131683,131686,131687],{},"实际开发中， ",[398,131684,131685],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[398,131688,131689],{},"用 li 包含链接(li+a)的做法",[1256,131691,131692,131695],{},[17,131693,131694],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[17,131696,131697],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[21,131699,9148],{},[21,131701,131702],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[21,131704,131705],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[21,131707,131708],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[14,131710,131711],{"start":38},[17,131712,131713],{},[398,131714,131715],{},"4号盒子search的细节：",[1256,131717,131718,131721,131724],{},[17,131719,131720],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[17,131722,131723],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[17,131725,131726,131729],{},[88,131727,131728],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[217,131731,131733],{"id":131732},"_1022-banner制作","10.2.2 banner制作",[24,131735],{"style":126489,"src":131736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1256,131738,131739,131746,131752,131759],{},[17,131740,131741,131742,131745],{},"1号盒子是通栏的大盒子 ",[398,131743,131744],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[17,131747,131748,131749,131751],{},"2号盒子是版心 ",[398,131750,1044],{}," ， 要水平居中对齐",[17,131753,131754,131755,131758],{},"3号盒子版心内，左对齐 ",[398,131756,131757],{},"subnav"," 侧导航栏",[17,131760,131761,131762,131765],{},"4号盒子版心内，右对齐 ",[398,131763,131764],{},"course"," 课程",[217,131767,131769],{"id":131768},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[24,131771],{"style":126489,"src":131772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1256,131774,131775,131778,131781,131784],{},[17,131776,131777],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[17,131779,131780],{},"1号盒子是标题 H3 左侧浮动",[17,131782,131783],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[17,131785,131786],{},"3号盒子 右浮动 mod 修改",[217,131788,131790],{"id":131789},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[24,131792],{"style":126489,"src":131793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1256,131795,131796,131802,131809,131816,131819],{},[17,131797,131798,131799,131801],{},"1号盒子为最大的盒子 ",[398,131800,53795],{}," 版心水平居中对齐",[17,131803,131804,131805,131808],{},"2号盒子为上面部分 ",[398,131806,131807],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[17,131810,131811,131812,131815],{},"3号盒子为底下部分 ",[398,131813,131814],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[17,131817,131818],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[17,131820,131821],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[217,131823,131825],{"id":131824},"_1025-底部模块制作","10.2.5 底部模块制作",[24,131827],{"style":126489,"src":131828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1256,131830,131831,131838,131841,131848],{},[17,131832,131833,131834,131837],{},"1号盒子通栏大盒子 底部 ",[398,131835,131836],{},"footer"," 给高度 底色是白色",[17,131839,131840],{},"2号盒子版心水平居中",[17,131842,131843,131844,131847],{},"3号盒子版权 ",[398,131845,131846],{},"copyright"," 左对齐",[17,131849,131850,131851,131854],{},"4号盒子 链接组 ",[398,131852,131853],{},"links"," 右对齐",[217,131856,131858],{"id":131857},"_1026-代码模块","10.2.6 代码模块",[14,131860,131861],{},[17,131862,131863],{},"html部分",[82,131865,131867],{"className":127380,"code":131866,"language":127382,"meta":26,"style":26},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[88,131868,131869],{"__ignoreMap":26},[91,131870,131871,131873,131875,131877,131879,131882,131885,131887,131890,131893,131895],{"class":93,"line":94},[91,131872,1159],{"class":250},[91,131874,487],{"class":51381},[91,131876,61138],{"class":97},[91,131878,296],{"class":250},[91,131880,131881],{"class":101},"\"https:\u002F\u002Fexample.com\"",[91,131883,131884],{"class":97}," target",[91,131886,296],{"class":250},[91,131888,131889],{"class":101},"\"_blank\"",[91,131891,131892],{"class":250},">链接文字\u003C\u002F",[91,131894,487],{"class":51381},[91,131896,51388],{"class":250},[14,131898,131899],{"start":38},[17,131900,131901],{},"css部分",[82,131903,131904],{"className":127380,"code":131866,"language":127382,"meta":26,"style":26},[88,131905,131906],{"__ignoreMap":26},[91,131907,131908,131910,131912,131914,131916,131918,131920,131922,131924,131926,131928],{"class":93,"line":94},[91,131909,1159],{"class":250},[91,131911,487],{"class":51381},[91,131913,61138],{"class":97},[91,131915,296],{"class":250},[91,131917,131881],{"class":101},[91,131919,131884],{"class":97},[91,131921,296],{"class":250},[91,131923,131889],{"class":101},[91,131925,131892],{"class":250},[91,131927,487],{"class":51381},[91,131929,51388],{"class":250},[217,131931,131933],{"id":131932},"_1027-收获","10.2.7 收获",[14,131935,131936,131939,131942,131945,131948],{},[17,131937,131938],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[17,131940,131941],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[17,131943,131944],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[17,131946,131947],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[17,131949,131950],{},"遗忘代码",[82,131952,131954],{"className":126633,"code":131953,"language":126635,"meta":26,"style":26},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[88,131955,131956,131978,131983,131993],{"__ignoreMap":26},[91,131957,131958,131960,131962,131964,131966,131968,131970,131972,131974,131976],{"class":93,"line":94},[91,131959,51692],{"class":51381},[91,131961,12558],{"class":250},[91,131963,21],{"class":51381},[91,131965,12558],{"class":250},[91,131967,10],{"class":51381},[91,131969,12558],{"class":250},[91,131971,1256],{"class":51381},[91,131973,12558],{"class":250},[91,131975,17],{"class":51381},[91,131977,15695],{"class":250},[91,131979,131980],{"class":93,"line":38},[91,131981,131982],{"class":308},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[91,131984,131985,131987,131989,131991],{"class":93,"line":1304},[91,131986,128249],{"class":105},[91,131988,51518],{"class":250},[91,131990,60950],{"class":105},[91,131992,1415],{"class":250},[91,131994,131995],{"class":93,"line":1319},[91,131996,1689],{"class":250},[14,131998,131999],{"start":1339},[17,132000,132001],{},"html引css的程序",[82,132003,132004],{"className":126633,"code":131953,"language":126635,"meta":26,"style":26},[88,132005,132006,132028,132032,132042],{"__ignoreMap":26},[91,132007,132008,132010,132012,132014,132016,132018,132020,132022,132024,132026],{"class":93,"line":94},[91,132009,51692],{"class":51381},[91,132011,12558],{"class":250},[91,132013,21],{"class":51381},[91,132015,12558],{"class":250},[91,132017,10],{"class":51381},[91,132019,12558],{"class":250},[91,132021,1256],{"class":51381},[91,132023,12558],{"class":250},[91,132025,17],{"class":51381},[91,132027,15695],{"class":250},[91,132029,132030],{"class":93,"line":38},[91,132031,131982],{"class":308},[91,132033,132034,132036,132038,132040],{"class":93,"line":1304},[91,132035,128249],{"class":105},[91,132037,51518],{"class":250},[91,132039,60950],{"class":105},[91,132041,1415],{"class":250},[91,132043,132044],{"class":93,"line":1319},[91,132045,1689],{"class":250},[14,132047,132048,132051,132054,132057,132060],{"start":1345},[17,132049,132050],{},"浮动的盒子不会有外边距合并问题",[17,132052,132053],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[17,132055,132056],{},"ctrl+g快速定位行；shift+alt多个光标",[17,132058,132059],{},"学习上方各个模块的选择器起名方法，以后就这样用",[17,132061,132062],{},"在写选择器时尽量写全一些，例如",[82,132064,132066],{"className":126633,"code":132065,"language":126635,"meta":26,"style":26},"\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",[88,132067,132068,132073,132089,132094,132109,132114,132129,132134,132149,132154],{"__ignoreMap":26},[91,132069,132070],{"class":93,"line":94},[91,132071,132072],{"class":308},"\u002F* 静态定位（默认） *\u002F\n",[91,132074,132075,132078,132080,132082,132084,132087],{"class":93,"line":38},[91,132076,132077],{"class":97},".static",[91,132079,79888],{"class":250},[91,132081,128993],{"class":105},[91,132083,51518],{"class":250},[91,132085,132086],{"class":105},"static",[91,132088,129563],{"class":250},[91,132090,132091],{"class":93,"line":1304},[91,132092,132093],{"class":308},"\u002F* 相对定位 *\u002F\n",[91,132095,132096,132099,132101,132103,132105,132107],{"class":93,"line":1319},[91,132097,132098],{"class":97},".relative",[91,132100,79888],{"class":250},[91,132102,128993],{"class":105},[91,132104,51518],{"class":250},[91,132106,54845],{"class":105},[91,132108,129563],{"class":250},[91,132110,132111],{"class":93,"line":1325},[91,132112,132113],{"class":308},"\u002F* 绝对定位 *\u002F\n",[91,132115,132116,132119,132121,132123,132125,132127],{"class":93,"line":1339},[91,132117,132118],{"class":97},".absolute",[91,132120,79888],{"class":250},[91,132122,128993],{"class":105},[91,132124,51518],{"class":250},[91,132126,54912],{"class":105},[91,132128,129563],{"class":250},[91,132130,132131],{"class":93,"line":1345},[91,132132,132133],{"class":308},"\u002F* 固定定位 *\u002F\n",[91,132135,132136,132139,132141,132143,132145,132147],{"class":93,"line":1436},[91,132137,132138],{"class":97},".fixed",[91,132140,79888],{"class":250},[91,132142,128993],{"class":105},[91,132144,51518],{"class":250},[91,132146,86314],{"class":105},[91,132148,129563],{"class":250},[91,132150,132151],{"class":93,"line":1442},[91,132152,132153],{"class":308},"\u002F* 粘性定位 *\u002F\n",[91,132155,132156,132159,132161,132163,132165,132168],{"class":93,"line":1454},[91,132157,132158],{"class":97},".sticky",[91,132160,79888],{"class":250},[91,132162,128993],{"class":105},[91,132164,51518],{"class":250},[91,132166,132167],{"class":105},"sticky",[91,132169,129563],{"class":250},[14,132171,132172,132175],{"start":1741},[17,132173,132174],{},"一定要用好注释",[17,132176,132177],{},"浮动的盒子不会有外边距合并的问题",[168,132179,131521],{},{"title":26,"searchDepth":38,"depth":38,"links":132181},[132182,132183],{"id":131558,"depth":38,"text":131559},{"id":131622,"depth":38,"text":131623,"children":132184},[132185,132186,132187,132188,132189,132190,132191],{"id":131626,"depth":1304,"text":131627},{"id":131732,"depth":1304,"text":131733},{"id":131768,"depth":1304,"text":131769},{"id":131789,"depth":1304,"text":131790},{"id":131824,"depth":1304,"text":131825},{"id":131857,"depth":1304,"text":131858},{"id":131932,"depth":1304,"text":131933},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131550,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132198,"title":132199,"body":132200,"description":23500,"extension":173,"meta":133686,"navigation":175,"path":133687,"seo":133688,"stem":133689,"__hash__":133690},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132201,"toc":133678},[132202,132205,132209,132213,132224,132228,132245,132289,132322,132325,132342,132345,132348,132392,132396,132400,132403,132406,132410,132413,132424,132487,132528,132531,132546,132600,132608,132611,132622,132676,132702,132705,132718,132772,132804,132858,132881,132935,132938,132941,132948,133002,133023,133077,133080,133083,133168,133176,133233,133256,133260,133263,133281,133285,133304,133358,133396,133400,133403,133406,133428,133432,133440,133443,133448,133459,133462,133466,133480,133524,133527,133531,133534,133539,133565,133570,133647,133650,133654,133657,133660,133663,133666,133669,133672,133675],[10,132203,132199],{"id":132204},"_11-传统布局与定位体系",[190,132206,132208],{"id":132207},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[217,132210,132212],{"id":132211},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1256,132214,132215,132218,132221],{},[17,132216,132217],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[17,132219,132220],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[17,132222,132223],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[217,132225,132227],{"id":132226},"_1112-浮动","11.1.2 浮动",[1256,132229,132230,132233,132236,132239,132242],{},[17,132231,132232],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[17,132234,132235],{},"浮动可以改变元素标签默认的排列方式",[17,132237,132238],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[17,132240,132241],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[17,132243,132244],{},"在使用行内块转换时盒子之间是有空隙的",[82,132246,132247],{"className":126633,"code":131099,"language":126635,"meta":26,"style":26},[88,132248,132249,132255,132265,132269,132275,132285],{"__ignoreMap":26},[91,132250,132251,132253],{"class":93,"line":94},[91,132252,131106],{"class":97},[91,132254,15695],{"class":250},[91,132256,132257,132259,132261,132263],{"class":93,"line":38},[91,132258,131113],{"class":105},[91,132260,51518],{"class":250},[91,132262,23860],{"class":105},[91,132264,1415],{"class":250},[91,132266,132267],{"class":93,"line":1304},[91,132268,1689],{"class":250},[91,132270,132271,132273],{"class":93,"line":1319},[91,132272,131128],{"class":97},[91,132274,15695],{"class":250},[91,132276,132277,132279,132281,132283],{"class":93,"line":1325},[91,132278,131113],{"class":105},[91,132280,51518],{"class":250},[91,132282,72603],{"class":105},[91,132284,1415],{"class":250},[91,132286,132287],{"class":93,"line":1339},[91,132288,1689],{"class":250},[386,132290,132291,132299],{},[389,132292,132293],{},[392,132294,132295,132297],{},[395,132296,127097],{"align":23860},[395,132298,27608],{"align":23860},[433,132300,132301,132308,132315],{},[392,132302,132303,132305],{},[438,132304,54818],{"align":23860},[438,132306,132307],{"align":23860},"元素不浮动（默认值）",[392,132309,132310,132312],{},[438,132311,23860],{"align":23860},[438,132313,132314],{"align":23860},"元素向左浮动",[392,132316,132317,132319],{},[438,132318,72603],{"align":23860},[438,132320,132321],{"align":23860},"元素向右浮动",[21,132323,132324],{},"浮动重点：",[1256,132326,132327,132330,132333,132336,132339],{},[17,132328,132329],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[17,132331,132332],{},"浮动的元素会一行内显示并且元素顶部对齐",[17,132334,132335],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[17,132337,132338],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[17,132340,132341],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[21,132343,132344],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[21,132346,132347],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[82,132349,132350],{"className":126633,"code":131099,"language":126635,"meta":26,"style":26},[88,132351,132352,132358,132368,132372,132378,132388],{"__ignoreMap":26},[91,132353,132354,132356],{"class":93,"line":94},[91,132355,131106],{"class":97},[91,132357,15695],{"class":250},[91,132359,132360,132362,132364,132366],{"class":93,"line":38},[91,132361,131113],{"class":105},[91,132363,51518],{"class":250},[91,132365,23860],{"class":105},[91,132367,1415],{"class":250},[91,132369,132370],{"class":93,"line":1304},[91,132371,1689],{"class":250},[91,132373,132374,132376],{"class":93,"line":1319},[91,132375,131128],{"class":97},[91,132377,15695],{"class":250},[91,132379,132380,132382,132384,132386],{"class":93,"line":1325},[91,132381,131113],{"class":105},[91,132383,51518],{"class":250},[91,132385,72603],{"class":105},[91,132387,1415],{"class":250},[91,132389,132390],{"class":93,"line":1339},[91,132391,1689],{"class":250},[217,132393,132395],{"id":132394},"_1113-定位","11.1.3 定位",[22121,132397,132399],{"id":132398},"_11131-使用场景","11.1.3.1 使用场景",[21,132401,132402],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[21,132404,132405],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22121,132407,132409],{"id":132408},"_11132-定位组成","11.1.3.2 定位组成",[21,132411,132412],{},"定位 = 定位模式 + 边偏移",[14,132414,132415],{},[17,132416,132417,132420,132421],{},[398,132418,132419],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[398,132422,132423],{},"定位模式",[82,132425,132427],{"className":126633,"code":132426,"language":126635,"meta":26,"style":26},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[88,132428,132429,132435,132449,132466,132483],{"__ignoreMap":26},[91,132430,132431,132433],{"class":93,"line":94},[91,132432,130481],{"class":97},[91,132434,15695],{"class":250},[91,132436,132437,132440,132442,132444,132446],{"class":93,"line":38},[91,132438,132439],{"class":105},"  position",[91,132441,51518],{"class":250},[91,132443,54845],{"class":105},[91,132445,130496],{"class":250},[91,132447,132448],{"class":308},"\u002F* 定位模式 *\u002F\n",[91,132450,132451,132454,132456,132458,132460,132463],{"class":93,"line":1304},[91,132452,132453],{"class":105},"  top",[91,132455,51518],{"class":250},[91,132457,695],{"class":105},[91,132459,51573],{"class":153},[91,132461,132462],{"class":250},";           ",[91,132464,132465],{"class":308},"\u002F* 边偏移：上 *\u002F\n",[91,132467,132468,132471,132473,132475,132477,132480],{"class":93,"line":1319},[91,132469,132470],{"class":105},"  left",[91,132472,51518],{"class":250},[91,132474,949],{"class":105},[91,132476,51573],{"class":153},[91,132478,132479],{"class":250},";          ",[91,132481,132482],{"class":308},"\u002F* 边偏移：左 *\u002F\n",[91,132484,132485],{"class":93,"line":1325},[91,132486,1689],{"class":250},[386,132488,132489,132498],{},[389,132490,132491],{},[392,132492,132493,132495],{},[395,132494,401],{"align":23860},[395,132496,132497],{"align":23860},"语义",[433,132499,132500,132507,132514,132521],{},[392,132501,132502,132504],{},[438,132503,132086],{"align":23860},[438,132505,132506],{"align":23860},"静态定位",[392,132508,132509,132511],{},[438,132510,54845],{"align":23860},[438,132512,132513],{"align":23860},"相对定位",[392,132515,132516,132518],{},[438,132517,54912],{"align":23860},[438,132519,132520],{"align":23860},"绝对定位",[392,132522,132523,132525],{},[438,132524,86314],{"align":23860},[438,132526,132527],{"align":23860},"固定定位",[21,132529,132530],{},"（1）静态定位：",[1256,132532,132533,132544],{},[17,132534,132535,132536,132539,132540,132543],{},"静态定位是元素的 ",[398,132537,132538],{},"默认定位方式"," ， ",[398,132541,132542],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[17,132545,5304],{},[82,132547,132548],{"className":126633,"code":132426,"language":126635,"meta":26,"style":26},[88,132549,132550,132556,132568,132582,132596],{"__ignoreMap":26},[91,132551,132552,132554],{"class":93,"line":94},[91,132553,130481],{"class":97},[91,132555,15695],{"class":250},[91,132557,132558,132560,132562,132564,132566],{"class":93,"line":38},[91,132559,132439],{"class":105},[91,132561,51518],{"class":250},[91,132563,54845],{"class":105},[91,132565,130496],{"class":250},[91,132567,132448],{"class":308},[91,132569,132570,132572,132574,132576,132578,132580],{"class":93,"line":1304},[91,132571,132453],{"class":105},[91,132573,51518],{"class":250},[91,132575,695],{"class":105},[91,132577,51573],{"class":153},[91,132579,132462],{"class":250},[91,132581,132465],{"class":308},[91,132583,132584,132586,132588,132590,132592,132594],{"class":93,"line":1319},[91,132585,132470],{"class":105},[91,132587,51518],{"class":250},[91,132589,949],{"class":105},[91,132591,51573],{"class":153},[91,132593,132479],{"class":250},[91,132595,132482],{"class":308},[91,132597,132598],{"class":93,"line":1325},[91,132599,1689],{"class":250},[1256,132601,132602,132605],{},[17,132603,132604],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[17,132606,132607],{},"静态定位在布局时我们几乎不用的",[21,132609,132610],{},"（2）相对定位",[1256,132612,132613,132620],{},[17,132614,132615,132616,132619],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[398,132617,132618],{},"原来的位置"," 来说的（自恋型）",[17,132621,5304],{},[82,132623,132624],{"className":126633,"code":132426,"language":126635,"meta":26,"style":26},[88,132625,132626,132632,132644,132658,132672],{"__ignoreMap":26},[91,132627,132628,132630],{"class":93,"line":94},[91,132629,130481],{"class":97},[91,132631,15695],{"class":250},[91,132633,132634,132636,132638,132640,132642],{"class":93,"line":38},[91,132635,132439],{"class":105},[91,132637,51518],{"class":250},[91,132639,54845],{"class":105},[91,132641,130496],{"class":250},[91,132643,132448],{"class":308},[91,132645,132646,132648,132650,132652,132654,132656],{"class":93,"line":1304},[91,132647,132453],{"class":105},[91,132649,51518],{"class":250},[91,132651,695],{"class":105},[91,132653,51573],{"class":153},[91,132655,132462],{"class":250},[91,132657,132465],{"class":308},[91,132659,132660,132662,132664,132666,132668,132670],{"class":93,"line":1319},[91,132661,132470],{"class":105},[91,132663,51518],{"class":250},[91,132665,949],{"class":105},[91,132667,51573],{"class":153},[91,132669,132479],{"class":250},[91,132671,132482],{"class":308},[91,132673,132674],{"class":93,"line":1325},[91,132675,1689],{"class":250},[1256,132677,132678],{},[17,132679,132680,132681,132683,132684,132686,132687,132690,132691,132694,132695,132697,132698,132701],{},"相对定位的特点：",[53797,132682],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53797,132685],{},"  ② ",[398,132688,132689],{},"原来"," 在标准流的 ",[398,132692,132693],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53797,132696],{},"  ③因此， ",[398,132699,132700],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[21,132703,132704],{},"（3）绝对定位",[1256,132706,132707,132716],{},[17,132708,132709,132711,132712,132715],{},[398,132710,132520],{}," 是元素在移动位置的时候，是相对于它 ",[398,132713,132714],{},"祖先元素"," 来说的（拼爹型）",[17,132717,5304],{},[82,132719,132720],{"className":126633,"code":132426,"language":126635,"meta":26,"style":26},[88,132721,132722,132728,132740,132754,132768],{"__ignoreMap":26},[91,132723,132724,132726],{"class":93,"line":94},[91,132725,130481],{"class":97},[91,132727,15695],{"class":250},[91,132729,132730,132732,132734,132736,132738],{"class":93,"line":38},[91,132731,132439],{"class":105},[91,132733,51518],{"class":250},[91,132735,54845],{"class":105},[91,132737,130496],{"class":250},[91,132739,132448],{"class":308},[91,132741,132742,132744,132746,132748,132750,132752],{"class":93,"line":1304},[91,132743,132453],{"class":105},[91,132745,51518],{"class":250},[91,132747,695],{"class":105},[91,132749,51573],{"class":153},[91,132751,132462],{"class":250},[91,132753,132465],{"class":308},[91,132755,132756,132758,132760,132762,132764,132766],{"class":93,"line":1319},[91,132757,132470],{"class":105},[91,132759,51518],{"class":250},[91,132761,949],{"class":105},[91,132763,51573],{"class":153},[91,132765,132479],{"class":250},[91,132767,132482],{"class":308},[91,132769,132770],{"class":93,"line":1325},[91,132771,1689],{"class":250},[1256,132773,132774,132789,132798,132801],{},[17,132775,132776,132777,132779,132780,132782,132783,132785,132786,132788],{},"绝对定位的特点：",[53797,132778],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53797,132781],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53797,132784],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53797,132787],{},"  (4)固定定位",[17,132790,132791,132793,132794,132797],{},[398,132792,132527],{}," 是元素 ",[398,132795,132796],{},"固定于浏览器可视区的位置"," 。（认死理型）",[17,132799,132800],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[17,132802,132803],{},"语法:",[82,132805,132806],{"className":126633,"code":132426,"language":126635,"meta":26,"style":26},[88,132807,132808,132814,132826,132840,132854],{"__ignoreMap":26},[91,132809,132810,132812],{"class":93,"line":94},[91,132811,130481],{"class":97},[91,132813,15695],{"class":250},[91,132815,132816,132818,132820,132822,132824],{"class":93,"line":38},[91,132817,132439],{"class":105},[91,132819,51518],{"class":250},[91,132821,54845],{"class":105},[91,132823,130496],{"class":250},[91,132825,132448],{"class":308},[91,132827,132828,132830,132832,132834,132836,132838],{"class":93,"line":1304},[91,132829,132453],{"class":105},[91,132831,51518],{"class":250},[91,132833,695],{"class":105},[91,132835,51573],{"class":153},[91,132837,132462],{"class":250},[91,132839,132465],{"class":308},[91,132841,132842,132844,132846,132848,132850,132852],{"class":93,"line":1319},[91,132843,132470],{"class":105},[91,132845,51518],{"class":250},[91,132847,949],{"class":105},[91,132849,51573],{"class":153},[91,132851,132479],{"class":250},[91,132853,132482],{"class":308},[91,132855,132856],{"class":93,"line":1325},[91,132857,1689],{"class":250},[1256,132859,132860,132869],{},[17,132861,132862,132863,132865,132866,132868],{},"特点:",[53797,132864],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53797,132867],{},"  ②固定定位不再占有原先的位置,完全脱标",[17,132870,132871,132872,132874,132875,132877,132878,132880],{},"固定在版心位置的方法:",[53797,132873],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53797,132876],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53797,132879],{},"  实例：",[82,132882,132883],{"className":126633,"code":132426,"language":126635,"meta":26,"style":26},[88,132884,132885,132891,132903,132917,132931],{"__ignoreMap":26},[91,132886,132887,132889],{"class":93,"line":94},[91,132888,130481],{"class":97},[91,132890,15695],{"class":250},[91,132892,132893,132895,132897,132899,132901],{"class":93,"line":38},[91,132894,132439],{"class":105},[91,132896,51518],{"class":250},[91,132898,54845],{"class":105},[91,132900,130496],{"class":250},[91,132902,132448],{"class":308},[91,132904,132905,132907,132909,132911,132913,132915],{"class":93,"line":1304},[91,132906,132453],{"class":105},[91,132908,51518],{"class":250},[91,132910,695],{"class":105},[91,132912,51573],{"class":153},[91,132914,132462],{"class":250},[91,132916,132465],{"class":308},[91,132918,132919,132921,132923,132925,132927,132929],{"class":93,"line":1319},[91,132920,132470],{"class":105},[91,132922,51518],{"class":250},[91,132924,949],{"class":105},[91,132926,51573],{"class":153},[91,132928,132479],{"class":250},[91,132930,132482],{"class":308},[91,132932,132933],{"class":93,"line":1325},[91,132934,1689],{"class":250},[24,132936],{"style":126489,"src":132937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[21,132939,132940],{},"(5)粘性定位",[1256,132942,132943,132946],{},[17,132944,132945],{},"粘性定位可以被认为是相对定位和固定定位的混合",[17,132947,5304],{},[82,132949,132950],{"className":126633,"code":132426,"language":126635,"meta":26,"style":26},[88,132951,132952,132958,132970,132984,132998],{"__ignoreMap":26},[91,132953,132954,132956],{"class":93,"line":94},[91,132955,130481],{"class":97},[91,132957,15695],{"class":250},[91,132959,132960,132962,132964,132966,132968],{"class":93,"line":38},[91,132961,132439],{"class":105},[91,132963,51518],{"class":250},[91,132965,54845],{"class":105},[91,132967,130496],{"class":250},[91,132969,132448],{"class":308},[91,132971,132972,132974,132976,132978,132980,132982],{"class":93,"line":1304},[91,132973,132453],{"class":105},[91,132975,51518],{"class":250},[91,132977,695],{"class":105},[91,132979,51573],{"class":153},[91,132981,132462],{"class":250},[91,132983,132465],{"class":308},[91,132985,132986,132988,132990,132992,132994,132996],{"class":93,"line":1319},[91,132987,132470],{"class":105},[91,132989,51518],{"class":250},[91,132991,949],{"class":105},[91,132993,51573],{"class":153},[91,132995,132479],{"class":250},[91,132997,132482],{"class":308},[91,132999,133000],{"class":93,"line":1325},[91,133001,1689],{"class":250},[1256,133003,133004],{},[17,133005,133006,133007,133009,133010,133012,133013,133015,133016,133019,133020,133022],{},"粘性定位的特点：",[53797,133008],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53797,133011],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53797,133014],{},"  ③必须添加 top 、left、right、bottom ",[398,133017,133018],{},"其中一个"," 才有效",[53797,133021],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[82,133024,133025],{"className":126633,"code":132426,"language":126635,"meta":26,"style":26},[88,133026,133027,133033,133045,133059,133073],{"__ignoreMap":26},[91,133028,133029,133031],{"class":93,"line":94},[91,133030,130481],{"class":97},[91,133032,15695],{"class":250},[91,133034,133035,133037,133039,133041,133043],{"class":93,"line":38},[91,133036,132439],{"class":105},[91,133038,51518],{"class":250},[91,133040,54845],{"class":105},[91,133042,130496],{"class":250},[91,133044,132448],{"class":308},[91,133046,133047,133049,133051,133053,133055,133057],{"class":93,"line":1304},[91,133048,132453],{"class":105},[91,133050,51518],{"class":250},[91,133052,695],{"class":105},[91,133054,51573],{"class":153},[91,133056,132462],{"class":250},[91,133058,132465],{"class":308},[91,133060,133061,133063,133065,133067,133069,133071],{"class":93,"line":1319},[91,133062,132470],{"class":105},[91,133064,51518],{"class":250},[91,133066,949],{"class":105},[91,133068,51573],{"class":153},[91,133070,132479],{"class":250},[91,133072,132482],{"class":308},[91,133074,133075],{"class":93,"line":1325},[91,133076,1689],{"class":250},[24,133078],{"style":126489,"src":133079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[21,133081,133082],{},"(6)总结",[386,133084,133085,133100],{},[389,133086,133087],{},[392,133088,133089,133091,133094,133097],{},[395,133090,132423],{"align":23860},[395,133092,133093],{"align":23860},"是否脱标",[395,133095,133096],{"align":23860},"移动位置",[395,133098,133099],{"align":23860},"是否常用",[433,133101,133102,133115,133129,133143,133156],{},[392,133103,133104,133107,133109,133112],{},[438,133105,133106],{"align":23860},"Static 静态定位",[438,133108,104759],{"align":23860},[438,133110,133111],{"align":23860},"不能使用边偏移",[438,133113,133114],{"align":23860},"很少",[392,133116,133117,133120,133123,133126],{},[438,133118,133119],{"align":23860},"Relative 相对定位",[438,133121,133122],{"align":23860},"否(占有位置)",[438,133124,133125],{"align":23860},"相对于自身位置移动",[438,133127,133128],{"align":23860},"基本单独使用",[392,133130,133131,133134,133137,133140],{},[438,133132,133133],{"align":23860},"Absolute 绝对定位",[438,133135,133136],{"align":23860},"是(不占有位置)",[438,133138,133139],{"align":23860},"带有定位的父级",[438,133141,133142],{"align":23860},"要和定位父级元素搭配使用",[392,133144,133145,133148,133150,133153],{},[438,133146,133147],{"align":23860},"Fixed 固定定位",[438,133149,133136],{"align":23860},[438,133151,133152],{"align":23860},"浏览器可视区",[438,133154,133155],{"align":23860},"单独使用,不需要父级",[392,133157,133158,133161,133163,133165],{},[438,133159,133160],{"align":23860},"Sticky 粘性定位",[438,133162,133122],{"align":23860},[438,133164,133152],{"align":23860},[438,133166,133167],{"align":23860},"当前阶段少",[14,133169,133170],{"start":38},[17,133171,133172,133175],{},[398,133173,133174],{},"边偏移"," 则决定了该元素的最终位置",[386,133177,133178,133189],{},[389,133179,133180],{},[392,133181,133182,133185,133187],{},[395,133183,133184],{"align":23860},"边偏移属性",[395,133186,27611],{"align":23860},[395,133188,27608],{"align":23860},[433,133190,133191,133202,133213,133223],{},[392,133192,133193,133196,133199],{},[438,133194,133195],{"align":23860},"top",[438,133197,133198],{"align":23860},"top: 80px;",[438,133200,133201],{"align":23860},"顶端偏移量，定义元素相对于父元素上边线的距离",[392,133203,133204,133207,133210],{},[438,133205,133206],{"align":23860},"bottom",[438,133208,133209],{"align":23860},"bottom: 80px ;",[438,133211,133212],{"align":23860},"底部偏移量，定义元素相对于其父元素下边线的距离",[392,133214,133215,133217,133220],{},[438,133216,23860],{"align":23860},[438,133218,133219],{"align":23860},"left: 80px ;",[438,133221,133222],{"align":23860},"左侧偏移量，定义元素相对于其父元素左边线的距离",[392,133224,133225,133227,133230],{},[438,133226,72603],{"align":23860},[438,133228,133229],{"align":23860},"right: 80px ;",[438,133231,133232],{"align":23860},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1256,133234,133235],{},[17,133236,9148,133237,133239,133240,133242,133243,133245,133246,133249,133250,133252,133253,133255],{},[53797,133238],{},"  ① ",[398,133241,133174],{}," 需要和 ",[398,133244,132423],{}," 联合使用， ",[398,133247,133248],{},"单独使用无效"," ；",[53797,133251],{},"  ②top和bottom不要同时使用",[53797,133254],{},"  ③left和right不要同时使用",[22121,133257,133259],{"id":133258},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[21,133261,133262],{},"子级是绝对定位的话，父级要用相对定位",[1256,133264,133265,133268,133271,133274],{},[17,133266,133267],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[17,133269,133270],{},"父盒子需要加定位限制子盒子在父盒子内显示",[17,133272,133273],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[17,133275,133276,133277,133280],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[398,133278,133279],{},"子绝父绝"," 也会遇到",[22121,133282,133284],{"id":133283},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1256,133286,133287,133302],{},[17,133288,133289,133290,133293,133294,133297,133298,133301],{},"在使用 ",[398,133291,133292],{},"定位"," 布局时，可能会 ",[398,133295,133296],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[398,133299,133300],{},"z-index"," 来控制盒子的前后次序 (z轴)",[17,133303,5304],{},[82,133305,133306],{"className":126633,"code":132426,"language":126635,"meta":26,"style":26},[88,133307,133308,133314,133326,133340,133354],{"__ignoreMap":26},[91,133309,133310,133312],{"class":93,"line":94},[91,133311,130481],{"class":97},[91,133313,15695],{"class":250},[91,133315,133316,133318,133320,133322,133324],{"class":93,"line":38},[91,133317,132439],{"class":105},[91,133319,51518],{"class":250},[91,133321,54845],{"class":105},[91,133323,130496],{"class":250},[91,133325,132448],{"class":308},[91,133327,133328,133330,133332,133334,133336,133338],{"class":93,"line":1304},[91,133329,132453],{"class":105},[91,133331,51518],{"class":250},[91,133333,695],{"class":105},[91,133335,51573],{"class":153},[91,133337,132462],{"class":250},[91,133339,132465],{"class":308},[91,133341,133342,133344,133346,133348,133350,133352],{"class":93,"line":1319},[91,133343,132470],{"class":105},[91,133345,51518],{"class":250},[91,133347,949],{"class":105},[91,133349,51573],{"class":153},[91,133351,132479],{"class":250},[91,133353,132482],{"class":308},[91,133355,133356],{"class":93,"line":1325},[91,133357,1689],{"class":250},[1256,133359,133360],{},[17,133361,133362,133363,133239,133365,133367,133368,127796,133371,82620,133374,133376,133377,133379,133380,133383,133384,133249,133387,133389,133390,133393,133395],{},"z-index的特性",[53797,133364],{},[398,133366,127097],{}," ： ",[398,133369,133370],{},"正整数",[398,133372,133373],{},"负整数",[398,133375,440],{}," ，默认值是 0，数值越大，盒子越靠上；",[53797,133378],{},"  ②如果 ",[398,133381,133382],{},"属性值相同"," ，则按照书写顺序， ",[398,133385,133386],{},"后来居上",[53797,133388],{},"  ③数字后面 ",[398,133391,133392],{},"不能加单位",[53797,133394],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22121,133397,133399],{"id":133398},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[21,133401,133402],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[21,133404,133405],{},"方法:",[1256,133407,133408,133418],{},[17,133409,133410,133411,133414,133415],{},"left: 50%; 让 ",[398,133412,133413],{},"盒子的左侧"," 移动到 ",[398,133416,133417],{},"父级元素的水平中心位置",[17,133419,133420,133421,133424,133425],{},"margin-left: -100px; 让盒子 ",[398,133422,133423],{},"向左"," 移动 ",[398,133426,133427],{},"自身宽度的一半",[22121,133429,133431],{"id":133430},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[14,133433,133434,133437],{},[17,133435,133436],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[17,133438,133439],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[21,133441,133442],{},"也就是说绝对定位和固定定位和浮动类似",[14,133444,133445],{"start":1304},[17,133446,133447],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1256,133449,133450,133453,133456],{},[17,133451,133452],{},"可以用inline-block 转换为行内块",[17,133454,133455],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[17,133457,133458],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[21,133460,133461],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22121,133463,133465],{"id":133464},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[14,133467,133468,133471,133474,133477],{},[17,133469,133470],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[17,133472,133473],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[17,133475,133476],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[17,133478,133479],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[82,133481,133482],{"className":126633,"code":131099,"language":126635,"meta":26,"style":26},[88,133483,133484,133490,133500,133504,133510,133520],{"__ignoreMap":26},[91,133485,133486,133488],{"class":93,"line":94},[91,133487,131106],{"class":97},[91,133489,15695],{"class":250},[91,133491,133492,133494,133496,133498],{"class":93,"line":38},[91,133493,131113],{"class":105},[91,133495,51518],{"class":250},[91,133497,23860],{"class":105},[91,133499,1415],{"class":250},[91,133501,133502],{"class":93,"line":1304},[91,133503,1689],{"class":250},[91,133505,133506,133508],{"class":93,"line":1319},[91,133507,131128],{"class":97},[91,133509,15695],{"class":250},[91,133511,133512,133514,133516,133518],{"class":93,"line":1325},[91,133513,131113],{"class":105},[91,133515,51518],{"class":250},[91,133517,72603],{"class":105},[91,133519,1415],{"class":250},[91,133521,133522],{"class":93,"line":1339},[91,133523,1689],{"class":250},[24,133525],{"style":126489,"src":133526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22121,133528,133530],{"id":133529},"_11138-轮播图","11.1.3.8 轮播图",[24,133532],{"style":126489,"src":133533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[14,133535,133536],{},[17,133537,133538],{},"制作顺序:",[1256,133540,133541,133544,133547,133556],{},[17,133542,133543],{},"大盒子我们类名为： tb-promo 淘宝广告",[17,133545,133546],{},"里面先放一张图片",[17,133548,133549,133550,133552,133553,133555],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53797,133551],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53797,133554],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[17,133557,133558,133559,133561,133562,133564],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53797,133560],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53797,133563],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[14,133566,133567],{"start":38},[17,133568,133569],{},"代码模块",[82,133571,133573],{"className":126633,"code":133572,"language":126635,"meta":26,"style":26},"\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",[88,133574,133575,133580,133587,133597,133607,133617,133621,133626,133633,133643],{"__ignoreMap":26},[91,133576,133577],{"class":93,"line":94},[91,133578,133579],{"class":308},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[91,133581,133582,133585],{"class":93,"line":38},[91,133583,133584],{"class":97},".son",[91,133586,15695],{"class":250},[91,133588,133589,133591,133593,133595],{"class":93,"line":1304},[91,133590,132439],{"class":105},[91,133592,51518],{"class":250},[91,133594,54912],{"class":105},[91,133596,1415],{"class":250},[91,133598,133599,133601,133603,133605],{"class":93,"line":1319},[91,133600,132453],{"class":105},[91,133602,51518],{"class":250},[91,133604,440],{"class":105},[91,133606,1415],{"class":250},[91,133608,133609,133611,133613,133615],{"class":93,"line":1325},[91,133610,132470],{"class":105},[91,133612,51518],{"class":250},[91,133614,440],{"class":105},[91,133616,1415],{"class":250},[91,133618,133619],{"class":93,"line":1339},[91,133620,1689],{"class":250},[91,133622,133623],{"class":93,"line":1345},[91,133624,133625],{"class":308},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[91,133627,133628,133631],{"class":93,"line":1436},[91,133629,133630],{"class":97},".father",[91,133632,15695],{"class":250},[91,133634,133635,133637,133639,133641],{"class":93,"line":1442},[91,133636,132439],{"class":105},[91,133638,51518],{"class":250},[91,133640,54845],{"class":105},[91,133642,1415],{"class":250},[91,133644,133645],{"class":93,"line":1454},[91,133646,1689],{"class":250},[21,133648,133649],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[217,133651,133653],{"id":133652},"_1114-定位数值的移动","11.1.4 定位数值的移动",[24,133655],{"style":126489,"src":133656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[21,133658,133659],{},"✨ 黄金口诀：",[21,133661,133662],{},"\"TOP正下负上，LEFT正右负左\"",[21,133664,133665],{},"\"RIGHT正左负右，BOTTOM正上负下",[21,133667,133668],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[21,133670,133671],{},"✨ 简单记：",[21,133673,133674],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[168,133676,133677],{},"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":26,"searchDepth":38,"depth":38,"links":133679},[133680],{"id":132207,"depth":38,"text":132208,"children":133681},[133682,133683,133684,133685],{"id":132211,"depth":1304,"text":132212},{"id":132226,"depth":1304,"text":132227},{"id":132394,"depth":1304,"text":132395},{"id":133652,"depth":1304,"text":133653},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132199,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133692,"title":133693,"body":133694,"description":23500,"extension":173,"meta":135117,"navigation":175,"path":135118,"seo":135119,"stem":135120,"__hash__":135121},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133695,"toc":135096},[133696,133699,133703,133711,133715,133720,133728,133740,133744,133749,133757,133768,133772,133777,133818,133826,133830,133833,133836,133839,133933,133936,134030,134033,134127,134130,134133,134168,134171,134174,134204,134207,134210,134213,134216,134219,134222,134225,134295,134298,134302,134306,134347,134351,134357,134360,134363,134367,134370,134373,134376,134457,134460,134463,134467,134471,134474,134477,134480,134483,134486,134492,134501,134505,134524,134528,134538,134541,134544,134547,134550,134553,134556,134559,134562,134571,134575,134584,134587,134592,134645,134650,134816,134819,134822,134827,134830,134833,134836,134839,134844,134992,134995,134998,135003,135006,135011,135045,135048,135051,135055,135058,135065,135068,135071,135074,135077,135080,135083,135086,135090,135093],[10,133697,133693],{"id":133698},"_12-显示隐藏与图形资源",[190,133700,133702],{"id":133701},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1256,133704,133705,133708],{},[17,133706,133707],{},"目的:让一个元素在页面中消失或者显示出来",[17,133709,133710],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[217,133712,133714],{"id":133713},"_1211-display-显示","12.1.1 display 显示",[14,133716,133717],{},[17,133718,133719],{},"display 设置或检索对象是否及如何显示",[1256,133721,133722,133725],{},[17,133723,133724],{},"display: none;隐藏对象",[17,133726,133727],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[14,133729,133730,133737],{"start":38},[17,133731,133732,133733,133736],{},"特点： display 隐藏元素后， ",[398,133734,133735],{},"不再占"," 有原来的位置",[17,133738,133739],{},"在js中使用非常的广泛",[217,133741,133743],{"id":133742},"_1212-visibility可见性","12.1.2 visibility可见性",[14,133745,133746],{},[17,133747,133748],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1256,133750,133751,133754],{},[17,133752,133753],{},"visibility： visible；元素可见",[17,133755,133756],{},"visibility：hidden；元素隐藏",[14,133758,133759,133762,133765],{"start":38},[17,133760,133761],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[17,133763,133764],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[17,133766,133767],{},"隐藏后继续占有原有位置",[217,133769,133771],{"id":133770},"_1213-overflow溢出","12.1.3 overflow溢出",[1256,133773,133774],{},[17,133775,133776],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[386,133778,133779,133787],{},[389,133780,133781],{},[392,133782,133783,133785],{},[395,133784,127097],{"align":23860},[395,133786,27608],{"align":23860},[433,133788,133789,133797,133804,133811],{},[392,133790,133791,133794],{},[438,133792,133793],{"align":23860},"visible",[438,133795,133796],{"align":23860},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[392,133798,133799,133801],{},[438,133800,61795],{"align":23860},[438,133802,133803],{"align":23860},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[392,133805,133806,133808],{},[438,133807,129053],{"align":23860},[438,133809,133810],{"align":23860},"不管超出内容否，总是显示滚动条",[392,133812,133813,133815],{},[438,133814,72744],{"align":23860},[438,133816,133817],{"align":23860},"超出自动显示滚动条，不超出不显示滚动条",[1256,133819,133820,133823],{},[17,133821,133822],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[17,133824,133825],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[217,133827,133829],{"id":133828},"_1214-案例收获","12.1.4 案例收获",[24,133831],{"style":126489,"src":133832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[21,133834,133835],{},"问题：没做出来动态效果，使用hover没实现",[21,133837,133838],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[82,133840,133841],{"className":126633,"code":132065,"language":126635,"meta":26,"style":26},[88,133842,133843,133847,133861,133865,133879,133883,133897,133901,133915,133919],{"__ignoreMap":26},[91,133844,133845],{"class":93,"line":94},[91,133846,132072],{"class":308},[91,133848,133849,133851,133853,133855,133857,133859],{"class":93,"line":38},[91,133850,132077],{"class":97},[91,133852,79888],{"class":250},[91,133854,128993],{"class":105},[91,133856,51518],{"class":250},[91,133858,132086],{"class":105},[91,133860,129563],{"class":250},[91,133862,133863],{"class":93,"line":1304},[91,133864,132093],{"class":308},[91,133866,133867,133869,133871,133873,133875,133877],{"class":93,"line":1319},[91,133868,132098],{"class":97},[91,133870,79888],{"class":250},[91,133872,128993],{"class":105},[91,133874,51518],{"class":250},[91,133876,54845],{"class":105},[91,133878,129563],{"class":250},[91,133880,133881],{"class":93,"line":1325},[91,133882,132113],{"class":308},[91,133884,133885,133887,133889,133891,133893,133895],{"class":93,"line":1339},[91,133886,132118],{"class":97},[91,133888,79888],{"class":250},[91,133890,128993],{"class":105},[91,133892,51518],{"class":250},[91,133894,54912],{"class":105},[91,133896,129563],{"class":250},[91,133898,133899],{"class":93,"line":1345},[91,133900,132133],{"class":308},[91,133902,133903,133905,133907,133909,133911,133913],{"class":93,"line":1436},[91,133904,132138],{"class":97},[91,133906,79888],{"class":250},[91,133908,128993],{"class":105},[91,133910,51518],{"class":250},[91,133912,86314],{"class":105},[91,133914,129563],{"class":250},[91,133916,133917],{"class":93,"line":1442},[91,133918,132153],{"class":308},[91,133920,133921,133923,133925,133927,133929,133931],{"class":93,"line":1454},[91,133922,132158],{"class":97},[91,133924,79888],{"class":250},[91,133926,128993],{"class":105},[91,133928,51518],{"class":250},[91,133930,132167],{"class":105},[91,133932,129563],{"class":250},[21,133934,133935],{},"完整代码：",[82,133937,133938],{"className":126633,"code":132065,"language":126635,"meta":26,"style":26},[88,133939,133940,133944,133958,133962,133976,133980,133994,133998,134012,134016],{"__ignoreMap":26},[91,133941,133942],{"class":93,"line":94},[91,133943,132072],{"class":308},[91,133945,133946,133948,133950,133952,133954,133956],{"class":93,"line":38},[91,133947,132077],{"class":97},[91,133949,79888],{"class":250},[91,133951,128993],{"class":105},[91,133953,51518],{"class":250},[91,133955,132086],{"class":105},[91,133957,129563],{"class":250},[91,133959,133960],{"class":93,"line":1304},[91,133961,132093],{"class":308},[91,133963,133964,133966,133968,133970,133972,133974],{"class":93,"line":1319},[91,133965,132098],{"class":97},[91,133967,79888],{"class":250},[91,133969,128993],{"class":105},[91,133971,51518],{"class":250},[91,133973,54845],{"class":105},[91,133975,129563],{"class":250},[91,133977,133978],{"class":93,"line":1325},[91,133979,132113],{"class":308},[91,133981,133982,133984,133986,133988,133990,133992],{"class":93,"line":1339},[91,133983,132118],{"class":97},[91,133985,79888],{"class":250},[91,133987,128993],{"class":105},[91,133989,51518],{"class":250},[91,133991,54912],{"class":105},[91,133993,129563],{"class":250},[91,133995,133996],{"class":93,"line":1345},[91,133997,132133],{"class":308},[91,133999,134000,134002,134004,134006,134008,134010],{"class":93,"line":1436},[91,134001,132138],{"class":97},[91,134003,79888],{"class":250},[91,134005,128993],{"class":105},[91,134007,51518],{"class":250},[91,134009,86314],{"class":105},[91,134011,129563],{"class":250},[91,134013,134014],{"class":93,"line":1442},[91,134015,132153],{"class":308},[91,134017,134018,134020,134022,134024,134026,134028],{"class":93,"line":1454},[91,134019,132158],{"class":97},[91,134021,79888],{"class":250},[91,134023,128993],{"class":105},[91,134025,51518],{"class":250},[91,134027,132167],{"class":105},[91,134029,129563],{"class":250},[21,134031,134032],{},"分布思路重点详解：",[82,134034,134035],{"className":126633,"code":132065,"language":126635,"meta":26,"style":26},[88,134036,134037,134041,134055,134059,134073,134077,134091,134095,134109,134113],{"__ignoreMap":26},[91,134038,134039],{"class":93,"line":94},[91,134040,132072],{"class":308},[91,134042,134043,134045,134047,134049,134051,134053],{"class":93,"line":38},[91,134044,132077],{"class":97},[91,134046,79888],{"class":250},[91,134048,128993],{"class":105},[91,134050,51518],{"class":250},[91,134052,132086],{"class":105},[91,134054,129563],{"class":250},[91,134056,134057],{"class":93,"line":1304},[91,134058,132093],{"class":308},[91,134060,134061,134063,134065,134067,134069,134071],{"class":93,"line":1319},[91,134062,132098],{"class":97},[91,134064,79888],{"class":250},[91,134066,128993],{"class":105},[91,134068,51518],{"class":250},[91,134070,54845],{"class":105},[91,134072,129563],{"class":250},[91,134074,134075],{"class":93,"line":1325},[91,134076,132113],{"class":308},[91,134078,134079,134081,134083,134085,134087,134089],{"class":93,"line":1339},[91,134080,132118],{"class":97},[91,134082,79888],{"class":250},[91,134084,128993],{"class":105},[91,134086,51518],{"class":250},[91,134088,54912],{"class":105},[91,134090,129563],{"class":250},[91,134092,134093],{"class":93,"line":1345},[91,134094,132133],{"class":308},[91,134096,134097,134099,134101,134103,134105,134107],{"class":93,"line":1436},[91,134098,132138],{"class":97},[91,134100,79888],{"class":250},[91,134102,128993],{"class":105},[91,134104,51518],{"class":250},[91,134106,86314],{"class":105},[91,134108,129563],{"class":250},[91,134110,134111],{"class":93,"line":1442},[91,134112,132153],{"class":308},[91,134114,134115,134117,134119,134121,134123,134125],{"class":93,"line":1454},[91,134116,132158],{"class":97},[91,134118,79888],{"class":250},[91,134120,128993],{"class":105},[91,134122,51518],{"class":250},[91,134124,132167],{"class":105},[91,134126,129563],{"class":250},[24,134128],{"style":126489,"src":134129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[21,134131,134132],{},"图片太大，盒子太小，此时需要修改图片的大小",[82,134134,134136],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[88,134137,134138],{"__ignoreMap":26},[91,134139,134140,134142,134144,134146,134148,134151,134153,134155,134158,134161,134163,134166],{"class":93,"line":94},[91,134141,1159],{"class":250},[91,134143,24],{"class":51381},[91,134145,55320],{"class":97},[91,134147,296],{"class":250},[91,134149,134150],{"class":101},"\"images\u002Fpic.jpg\"",[91,134152,55328],{"class":97},[91,134154,296],{"class":250},[91,134156,134157],{"class":101},"\"描述文字\"",[91,134159,134160],{"class":97}," title",[91,134162,296],{"class":250},[91,134164,134165],{"class":101},"\"悬停提示\"",[91,134167,51388],{"class":250},[24,134169],{"style":126489,"src":134170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[21,134172,134173],{},"制造遮罩层",[82,134175,134176],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,134177,134178],{"__ignoreMap":26},[91,134179,134180,134182,134184,134186,134188,134190,134192,134194,134196,134198,134200,134202],{"class":93,"line":94},[91,134181,1159],{"class":250},[91,134183,24],{"class":51381},[91,134185,55320],{"class":97},[91,134187,296],{"class":250},[91,134189,134150],{"class":101},[91,134191,55328],{"class":97},[91,134193,296],{"class":250},[91,134195,134157],{"class":101},[91,134197,134160],{"class":97},[91,134199,296],{"class":250},[91,134201,134165],{"class":101},[91,134203,51388],{"class":250},[21,134205,134206],{},"此时是这样的为标准流",[24,134208],{"style":126489,"src":134209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[21,134211,134212],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[21,134214,134215],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[21,134217,134218],{},"让他在中间，用center(background-position)",[21,134220,134221],{},"将需要变的尽可能放到一个盒子中",[21,134223,134224],{},"放大盒子上内部盒子发生变化",[82,134226,134228],{"className":126633,"code":134227,"language":126635,"meta":26,"style":26},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[88,134229,134230,134236,134246,134250,134257,134267,134279,134291],{"__ignoreMap":26},[91,134231,134232,134234],{"class":93,"line":94},[91,134233,127700],{"class":97},[91,134235,15695],{"class":250},[91,134237,134238,134240,134242,134244],{"class":93,"line":38},[91,134239,132439],{"class":105},[91,134241,51518],{"class":250},[91,134243,54845],{"class":105},[91,134245,1415],{"class":250},[91,134247,134248],{"class":93,"line":1304},[91,134249,1689],{"class":250},[91,134251,134252,134255],{"class":93,"line":1319},[91,134253,134254],{"class":97},".child",[91,134256,15695],{"class":250},[91,134258,134259,134261,134263,134265],{"class":93,"line":1325},[91,134260,132439],{"class":105},[91,134262,51518],{"class":250},[91,134264,54912],{"class":105},[91,134266,1415],{"class":250},[91,134268,134269,134271,134273,134275,134277],{"class":93,"line":1339},[91,134270,132453],{"class":105},[91,134272,51518],{"class":250},[91,134274,905],{"class":105},[91,134276,577],{"class":153},[91,134278,1415],{"class":250},[91,134280,134281,134283,134285,134287,134289],{"class":93,"line":1345},[91,134282,132470],{"class":105},[91,134284,51518],{"class":250},[91,134286,905],{"class":105},[91,134288,577],{"class":153},[91,134290,1415],{"class":250},[91,134292,134293],{"class":93,"line":1436},[91,134294,1689],{"class":250},[21,134296,134297],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[190,134299,134301],{"id":134300},"_122-精灵图","12.2 精灵图",[217,134303,134305],{"id":134304},"_1221-理解","12.2.1 理解",[14,134307,134308,134326],{},[17,134309,134310,134311,132539,134314,134317,134318,134321,134322,134325],{},"目的： ",[398,134312,134313],{},"为了有效地减少服务器接收和发送请求的次数",[398,134315,134316],{},"提高"," 页面的 ",[398,134319,134320],{},"加载速度"," ，出现了 ",[398,134323,134324],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[17,134327,134328,134329,134331,134332,134334,134335,134337,134338,134340,134341,134343,134344,134346],{},"使用精灵图核心：",[53797,134330],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53797,134333],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53797,134336],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53797,134339],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53797,134342],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53797,134345],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[217,134348,134350],{"id":134349},"_1222-扒图","12.2.2 扒图",[82,134352,134355],{"className":134353,"code":134354,"language":5310},[5308],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[88,134356,134354],{"__ignoreMap":26},[24,134358],{"style":126489,"src":134359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[24,134361],{"style":126489,"src":134362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[217,134364,134366],{"id":134365},"_1223-精灵图的实现","12.2.3 精灵图的实现",[24,134368],{"style":126489,"src":134369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[21,134371,134372],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[24,134374],{"style":126489,"src":134375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[82,134377,134379],{"className":126633,"code":134378,"language":126635,"meta":26,"style":26},"\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",[88,134380,134381,134386,134393,134405,134417,134436,134453],{"__ignoreMap":26},[91,134382,134383],{"class":93,"line":94},[91,134384,134385],{"class":308},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[91,134387,134388,134391],{"class":93,"line":38},[91,134389,134390],{"class":97},".icon",[91,134392,15695],{"class":250},[91,134394,134395,134397,134399,134401,134403],{"class":93,"line":1304},[91,134396,70649],{"class":105},[91,134398,51518],{"class":250},[91,134400,949],{"class":105},[91,134402,51573],{"class":153},[91,134404,1415],{"class":250},[91,134406,134407,134409,134411,134413,134415],{"class":93,"line":1319},[91,134408,70869],{"class":105},[91,134410,51518],{"class":250},[91,134412,949],{"class":105},[91,134414,51573],{"class":153},[91,134416,1415],{"class":250},[91,134418,134419,134421,134423,134425,134427,134430,134432,134434],{"class":93,"line":1325},[91,134420,70692],{"class":105},[91,134422,51518],{"class":250},[91,134424,61807],{"class":105},[91,134426,251],{"class":250},[91,134428,134429],{"class":5339},"sprites.png",[91,134431,13837],{"class":250},[91,134433,61817],{"class":105},[91,134435,1415],{"class":250},[91,134437,134438,134440,134442,134444,134446,134449,134451],{"class":93,"line":1339},[91,134439,128893],{"class":105},[91,134441,51518],{"class":250},[91,134443,51844],{"class":105},[91,134445,51573],{"class":153},[91,134447,134448],{"class":105}," -20",[91,134450,51573],{"class":153},[91,134452,1415],{"class":250},[91,134454,134455],{"class":93,"line":1345},[91,134456,1689],{"class":250},[24,134458],{"style":126489,"src":134459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[21,134461,134462],{},"在前端中坐标轴的正方向是右和下",[190,134464,134466],{"id":134465},"_123-字体图标","12.3 字体图标",[217,134468,134470],{"id":134469},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[21,134472,134473],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[21,134475,134476],{},"精灵图是有诸多优点的，但是缺点很明显。",[21,134478,134479],{},"1.图片文件还是比较大的。",[21,134481,134482],{},"2.图片本身放大和缩小会失真。",[21,134484,134485],{},"3.一旦图片制作完毕想要更换非常复杂。",[21,134487,134488,134489,25862],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[398,134490,134491],{},"字体图标 iconfont",[21,134493,134494,134497,134498,28504],{},[398,134495,134496],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[398,134499,134500],{},"展示的是图标，本质属于字体",[217,134502,134504],{"id":134503},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1256,134506,134507,134512,134515,134518,134521],{},[17,134508,134509,134511],{},[398,134510,25998],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[17,134513,134514],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[17,134516,134517],{},"兼容性：几乎支持所有的浏览器，请放心使用",[17,134519,134520],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[17,134522,134523],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[217,134525,134527],{"id":134526},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1256,134529,134530],{},[17,134531,134532,134533],{},"icomoon字体库：",[487,134534,134537],{"href":134535,"rel":134536},"http:\u002F\u002Ficomoon.io\u002F",[23987],"http:\u002F\u002Ficomoon.io",[21,134539,134540],{},"进去之后点icomoon app",[24,134542],{"style":126489,"src":134543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[21,134545,134546],{},"可以对其编辑：",[24,134548],{"style":126489,"src":134549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[21,134551,134552],{},"生成字体：",[24,134554],{"style":126489,"src":134555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[21,134557,134558],{},"下载：",[24,134560],{"style":126489,"src":134561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1256,134563,134564],{},[17,134565,134566,134567],{},"阿里iconfont字体库： ",[487,134568,134569],{"href":134569,"rel":134570},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23987],[217,134572,134574],{"id":134573},"_1234-字体图标的引入","12.3.4 字体图标的引入",[14,134576,134577],{},[17,134578,134579,134580,134583],{},"把下载包里面的 ",[398,134581,134582],{},"fonts"," 文件夹放入页面根目录下",[24,134585],{"style":126489,"src":134586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[14,134588,134589],{"start":38},[17,134590,134591],{},"字体文件格式",[386,134593,134594,134603],{},[389,134595,134596],{},[392,134597,134598,134601],{},[395,134599,134600],{"align":23860},"格式",[395,134602,23864],{"align":23860},[433,134604,134605,134615,134625,134635],{},[392,134606,134607,134612],{},[438,134608,134609],{"align":23860},[398,134610,134611],{},".ttf",[438,134613,134614],{"align":23860},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[392,134616,134617,134622],{},[438,134618,134619],{"align":23860},[398,134620,134621],{},".woff",[438,134623,134624],{"align":23860},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[392,134626,134627,134632],{},[438,134628,134629],{"align":23860},[398,134630,134631],{},".eot",[438,134633,134634],{"align":23860},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[392,134636,134637,134642],{},[438,134638,134639],{"align":23860},[398,134640,134641],{},"svg",[438,134643,134644],{"align":23860},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[14,134646,134647],{"start":1304},[17,134648,134649],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[82,134651,134653],{"className":126633,"code":134652,"language":126635,"meta":26,"style":26},"\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",[88,134654,134655,134660,134667,134679,134695,134720,134741,134761,134781,134785,134791,134801,134812],{"__ignoreMap":26},[91,134656,134657],{"class":93,"line":94},[91,134658,134659],{"class":308},"\u002F* 引入字体图标 *\u002F\n",[91,134661,134662,134665],{"class":93,"line":38},[91,134663,134664],{"class":153},"@font-face",[91,134666,15695],{"class":250},[91,134668,134669,134672,134674,134677],{"class":93,"line":1304},[91,134670,134671],{"class":105},"  font-family",[91,134673,51518],{"class":250},[91,134675,134676],{"class":101},"'icomoon'",[91,134678,1415],{"class":250},[91,134680,134681,134684,134686,134688,134690,134693],{"class":93,"line":1319},[91,134682,134683],{"class":105},"  src",[91,134685,51518],{"class":250},[91,134687,61807],{"class":105},[91,134689,251],{"class":250},[91,134691,134692],{"class":101},"'fonts\u002Ficomoon.eot'",[91,134694,2842],{"class":250},[91,134696,134697,134699,134701,134703,134705,134708,134710,134713,134715,134718],{"class":93,"line":1325},[91,134698,134683],{"class":105},[91,134700,51518],{"class":250},[91,134702,61807],{"class":105},[91,134704,251],{"class":250},[91,134706,134707],{"class":101},"'fonts\u002Ficomoon.eot?#iefix'",[91,134709,13837],{"class":250},[91,134711,134712],{"class":105},"format",[91,134714,251],{"class":250},[91,134716,134717],{"class":101},"'embedded-opentype'",[91,134719,38128],{"class":250},[91,134721,134722,134725,134727,134730,134732,134734,134736,134739],{"class":93,"line":1339},[91,134723,134724],{"class":105},"       url",[91,134726,251],{"class":250},[91,134728,134729],{"class":101},"'fonts\u002Ficomoon.woff'",[91,134731,13837],{"class":250},[91,134733,134712],{"class":105},[91,134735,251],{"class":250},[91,134737,134738],{"class":101},"'woff'",[91,134740,38128],{"class":250},[91,134742,134743,134745,134747,134750,134752,134754,134756,134759],{"class":93,"line":1345},[91,134744,134724],{"class":105},[91,134746,251],{"class":250},[91,134748,134749],{"class":101},"'fonts\u002Ficomoon.ttf'",[91,134751,13837],{"class":250},[91,134753,134712],{"class":105},[91,134755,251],{"class":250},[91,134757,134758],{"class":101},"'truetype'",[91,134760,38128],{"class":250},[91,134762,134763,134765,134767,134770,134772,134774,134776,134779],{"class":93,"line":1436},[91,134764,134724],{"class":105},[91,134766,251],{"class":250},[91,134768,134769],{"class":101},"'fonts\u002Ficomoon.svg#icomoon'",[91,134771,13837],{"class":250},[91,134773,134712],{"class":105},[91,134775,251],{"class":250},[91,134777,134778],{"class":101},"'svg'",[91,134780,2842],{"class":250},[91,134782,134783],{"class":93,"line":1442},[91,134784,1689],{"class":250},[91,134786,134787,134789],{"class":93,"line":1454},[91,134788,134390],{"class":97},[91,134790,15695],{"class":250},[91,134792,134793,134795,134797,134799],{"class":93,"line":1736},[91,134794,134671],{"class":105},[91,134796,51518],{"class":250},[91,134798,134676],{"class":101},[91,134800,1415],{"class":250},[91,134802,134803,134806,134808,134810],{"class":93,"line":1741},[91,134804,134805],{"class":105},"  font-style",[91,134807,51518],{"class":250},[91,134809,63922],{"class":105},[91,134811,1415],{"class":250},[91,134813,134814],{"class":93,"line":1747},[91,134815,1689],{"class":250},[21,134817,134818],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[24,134820],{"style":126489,"src":134821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[14,134823,134824],{"start":1319},[17,134825,134826],{},"添加字体",[24,134828],{"style":126489,"src":134829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[21,134831,134832],{},"复制：",[24,134834],{"style":126489,"src":134835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[21,134837,134838],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[14,134840,134841],{"start":1325},[17,134842,134843],{},"代码展示：",[82,134845,134846],{"className":126633,"code":134652,"language":126635,"meta":26,"style":26},[88,134847,134848,134852,134858,134868,134882,134904,134922,134940,134958,134962,134968,134978,134988],{"__ignoreMap":26},[91,134849,134850],{"class":93,"line":94},[91,134851,134659],{"class":308},[91,134853,134854,134856],{"class":93,"line":38},[91,134855,134664],{"class":153},[91,134857,15695],{"class":250},[91,134859,134860,134862,134864,134866],{"class":93,"line":1304},[91,134861,134671],{"class":105},[91,134863,51518],{"class":250},[91,134865,134676],{"class":101},[91,134867,1415],{"class":250},[91,134869,134870,134872,134874,134876,134878,134880],{"class":93,"line":1319},[91,134871,134683],{"class":105},[91,134873,51518],{"class":250},[91,134875,61807],{"class":105},[91,134877,251],{"class":250},[91,134879,134692],{"class":101},[91,134881,2842],{"class":250},[91,134883,134884,134886,134888,134890,134892,134894,134896,134898,134900,134902],{"class":93,"line":1325},[91,134885,134683],{"class":105},[91,134887,51518],{"class":250},[91,134889,61807],{"class":105},[91,134891,251],{"class":250},[91,134893,134707],{"class":101},[91,134895,13837],{"class":250},[91,134897,134712],{"class":105},[91,134899,251],{"class":250},[91,134901,134717],{"class":101},[91,134903,38128],{"class":250},[91,134905,134906,134908,134910,134912,134914,134916,134918,134920],{"class":93,"line":1339},[91,134907,134724],{"class":105},[91,134909,251],{"class":250},[91,134911,134729],{"class":101},[91,134913,13837],{"class":250},[91,134915,134712],{"class":105},[91,134917,251],{"class":250},[91,134919,134738],{"class":101},[91,134921,38128],{"class":250},[91,134923,134924,134926,134928,134930,134932,134934,134936,134938],{"class":93,"line":1345},[91,134925,134724],{"class":105},[91,134927,251],{"class":250},[91,134929,134749],{"class":101},[91,134931,13837],{"class":250},[91,134933,134712],{"class":105},[91,134935,251],{"class":250},[91,134937,134758],{"class":101},[91,134939,38128],{"class":250},[91,134941,134942,134944,134946,134948,134950,134952,134954,134956],{"class":93,"line":1436},[91,134943,134724],{"class":105},[91,134945,251],{"class":250},[91,134947,134769],{"class":101},[91,134949,13837],{"class":250},[91,134951,134712],{"class":105},[91,134953,251],{"class":250},[91,134955,134778],{"class":101},[91,134957,2842],{"class":250},[91,134959,134960],{"class":93,"line":1442},[91,134961,1689],{"class":250},[91,134963,134964,134966],{"class":93,"line":1454},[91,134965,134390],{"class":97},[91,134967,15695],{"class":250},[91,134969,134970,134972,134974,134976],{"class":93,"line":1736},[91,134971,134671],{"class":105},[91,134973,51518],{"class":250},[91,134975,134676],{"class":101},[91,134977,1415],{"class":250},[91,134979,134980,134982,134984,134986],{"class":93,"line":1741},[91,134981,134805],{"class":105},[91,134983,51518],{"class":250},[91,134985,63922],{"class":105},[91,134987,1415],{"class":250},[91,134989,134990],{"class":93,"line":1747},[91,134991,1689],{"class":250},[24,134993],{"style":126489,"src":134994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[21,134996,134997],{},"更加细节展示：",[14,134999,135000],{},[17,135001,135002],{},"html 标签内添加小图标",[24,135004],{"style":126489,"src":135005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[14,135007,135008],{"start":38},[17,135009,135010],{},"给标签定义字体",[82,135012,135013],{"className":127380,"code":130737,"language":127382,"meta":26,"style":26},[88,135014,135015,135019,135033,135037],{"__ignoreMap":26},[91,135016,135017],{"class":93,"line":94},[91,135018,130744],{"class":308},[91,135020,135021,135023,135025,135027,135029,135031],{"class":93,"line":38},[91,135022,1159],{"class":250},[91,135024,51692],{"class":51381},[91,135026,53567],{"class":97},[91,135028,296],{"class":250},[91,135030,130757],{"class":101},[91,135032,51388],{"class":250},[91,135034,135035],{"class":93,"line":1304},[91,135036,130764],{"class":250},[91,135038,135039,135041,135043],{"class":93,"line":1319},[91,135040,51866],{"class":250},[91,135042,51692],{"class":51381},[91,135044,51388],{"class":250},[21,135046,135047],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[24,135049],{"style":126489,"src":135050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[217,135052,135054],{"id":135053},"_1235-字体图标的追加","12.3.5 字体图标的追加",[21,135056,135057],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[21,135059,135060,135061,135064],{},"把压缩包里面的 ",[398,135062,135063],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[21,135066,135067],{},"打开网站，点下方：",[24,135069],{"style":126489,"src":135070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[24,135072],{"style":126489,"src":135073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[24,135075],{"style":126489,"src":135076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[21,135078,135079],{},"点yes重新加载",[21,135081,135082],{},"然后重复之前的操作就可以实现了",[21,135084,135085],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[217,135087,135089],{"id":135088},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[24,135091],{"style":126489,"src":135092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[168,135094,135095],{},"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":26,"searchDepth":38,"depth":38,"links":135097},[135098,135104,135109],{"id":133701,"depth":38,"text":133702,"children":135099},[135100,135101,135102,135103],{"id":133713,"depth":1304,"text":133714},{"id":133742,"depth":1304,"text":133743},{"id":133770,"depth":1304,"text":133771},{"id":133828,"depth":1304,"text":133829},{"id":134300,"depth":38,"text":134301,"children":135105},[135106,135107,135108],{"id":134304,"depth":1304,"text":134305},{"id":134349,"depth":1304,"text":134350},{"id":134365,"depth":1304,"text":134366},{"id":134465,"depth":38,"text":134466,"children":135110},[135111,135112,135113,135114,135115,135116],{"id":134469,"depth":1304,"text":134470},{"id":134503,"depth":1304,"text":134504},{"id":134526,"depth":1304,"text":134527},{"id":134573,"depth":1304,"text":134574},{"id":135053,"depth":1304,"text":135054},{"id":135088,"depth":1304,"text":135089},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133693,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135123,"title":135124,"body":135125,"description":23500,"extension":173,"meta":136352,"navigation":175,"path":136353,"seo":136354,"stem":136355,"__hash__":136356},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135126,"toc":136333},[135127,135130,135134,135137,135151,135219,135249,135252,135256,135260,135362,135409,135413,135416,135419,135453,135456,135459,135462,135465,135468,135471,135474,135476,135479,135482,135485,135488,135491,135494,135497,135525,135528,135532,135535,135542,135545,135548,135574,135577,135581,135584,135587,135594,135598,135601,135603,135635,135638,135641,135653,135659,135662,135665,135668,135670,135674,135677,135680,135683,135728,135732,135734,135737,135744,135786,135789,135793,135798,135812,135816,135819,135822,135825,135828,135831,135865,135868,135871,135925,135928,135931,135934,135937,135989,135992,135995,136044,136048,136050,136053,136056,136059,136062,136065,136123,136126,136132,136135,136138,136170,136173,136177,136181,136184,136216,136220,136223,136267,136271,136274,136277,136280,136283,136286,136289,136292,136294,136297,136299,136302,136305,136308,136311,136316,136319,136321,136324,136327,136330],[10,135128,135124],{"id":135129},"_13-界面样式与布局技巧",[190,135131,135133],{"id":135132},"_131-css三角","13.1 css三角",[21,135135,135136],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1256,135138,135139,135142,135145,135148],{},[17,135140,135141],{},"用css 边框可以模拟三角效果",[17,135143,135144],{},"宽度高度为0",[17,135146,135147],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[17,135149,135150],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[82,135152,135154],{"className":126633,"code":135153,"language":126635,"meta":26,"style":26},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[88,135155,135156,135161,135168,135178,135188,135204,135215],{"__ignoreMap":26},[91,135157,135158],{"class":93,"line":94},[91,135159,135160],{"class":308},"\u002F* CSS 实现三角形 *\u002F\n",[91,135162,135163,135166],{"class":93,"line":38},[91,135164,135165],{"class":97},".triangle",[91,135167,15695],{"class":250},[91,135169,135170,135172,135174,135176],{"class":93,"line":1304},[91,135171,70649],{"class":105},[91,135173,51518],{"class":250},[91,135175,440],{"class":105},[91,135177,1415],{"class":250},[91,135179,135180,135182,135184,135186],{"class":93,"line":1319},[91,135181,70869],{"class":105},[91,135183,51518],{"class":250},[91,135185,440],{"class":105},[91,135187,1415],{"class":250},[91,135189,135190,135192,135194,135196,135198,135200,135202],{"class":93,"line":1325},[91,135191,70977],{"class":105},[91,135193,51518],{"class":250},[91,135195,695],{"class":105},[91,135197,51573],{"class":153},[91,135199,51602],{"class":105},[91,135201,64072],{"class":105},[91,135203,1415],{"class":250},[91,135205,135206,135209,135211,135213],{"class":93,"line":1339},[91,135207,135208],{"class":105},"  border-bottom-color",[91,135210,51518],{"class":250},[91,135212,62450],{"class":105},[91,135214,1415],{"class":250},[91,135216,135217],{"class":93,"line":1345},[91,135218,1689],{"class":250},[82,135220,135221],{"className":126633,"code":130790,"language":126635,"meta":26,"style":26},[88,135222,135223,135229,135245],{"__ignoreMap":26},[91,135224,135225,135227],{"class":93,"line":94},[91,135226,51692],{"class":51381},[91,135228,15695],{"class":250},[91,135230,135231,135233,135235,135237,135239,135241,135243],{"class":93,"line":38},[91,135232,70977],{"class":105},[91,135234,51518],{"class":250},[91,135236,466],{"class":105},[91,135238,51573],{"class":153},[91,135240,51602],{"class":105},[91,135242,130025],{"class":105},[91,135244,1415],{"class":250},[91,135246,135247],{"class":93,"line":1304},[91,135248,1689],{"class":250},[24,135250],{"style":126489,"src":135251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[190,135253,135255],{"id":135254},"_132-css用户界面样式","13.2 css用户界面样式",[217,135257,135259],{"id":135258},"_1321-鼠标样式","13.2.1 鼠标样式",[82,135261,135263],{"className":126633,"code":135262,"language":126635,"meta":26,"style":26},"\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",[88,135264,135265,135270,135289,135307,135326,135343],{"__ignoreMap":26},[91,135266,135267],{"class":93,"line":94},[91,135268,135269],{"class":308},"\u002F* 鼠标样式 *\u002F\n",[91,135271,135272,135274,135276,135279,135281,135283,135286],{"class":93,"line":38},[91,135273,51692],{"class":51381},[91,135275,79888],{"class":250},[91,135277,135278],{"class":105},"cursor",[91,135280,51518],{"class":250},[91,135282,62111],{"class":105},[91,135284,135285],{"class":250},"; }   ",[91,135287,135288],{"class":308},"\u002F* 手型 *\u002F\n",[91,135290,135291,135293,135295,135297,135299,135302,135304],{"class":93,"line":1304},[91,135292,51692],{"class":51381},[91,135294,79888],{"class":250},[91,135296,135278],{"class":105},[91,135298,51518],{"class":250},[91,135300,135301],{"class":105},"default",[91,135303,135285],{"class":250},[91,135305,135306],{"class":308},"\u002F* 默认 *\u002F\n",[91,135308,135309,135311,135313,135315,135317,135320,135323],{"class":93,"line":1319},[91,135310,51692],{"class":51381},[91,135312,79888],{"class":250},[91,135314,135278],{"class":105},[91,135316,51518],{"class":250},[91,135318,135319],{"class":105},"move",[91,135321,135322],{"class":250},"; }      ",[91,135324,135325],{"class":308},"\u002F* 移动 *\u002F\n",[91,135327,135328,135330,135332,135334,135336,135338,135340],{"class":93,"line":1325},[91,135329,51692],{"class":51381},[91,135331,79888],{"class":250},[91,135333,135278],{"class":105},[91,135335,51518],{"class":250},[91,135337,5310],{"class":105},[91,135339,135322],{"class":250},[91,135341,135342],{"class":308},"\u002F* 文本 *\u002F\n",[91,135344,135345,135347,135349,135351,135353,135356,135359],{"class":93,"line":1339},[91,135346,51692],{"class":51381},[91,135348,79888],{"class":250},[91,135350,135278],{"class":105},[91,135352,51518],{"class":250},[91,135354,135355],{"class":105},"not-allowed",[91,135357,135358],{"class":250},"; } ",[91,135360,135361],{"class":308},"\u002F* 禁止 *\u002F\n",[386,135363,135364,135372],{},[389,135365,135366],{},[392,135367,135368,135370],{},[395,135369,127097],{"align":23860},[395,135371,27608],{"align":23860},[433,135373,135374,135381,135388,135395,135402],{},[392,135375,135376,135378],{},[438,135377,135301],{"align":23860},[438,135379,135380],{"align":23860},"小白 默认",[392,135382,135383,135385],{},[438,135384,62111],{"align":23860},[438,135386,135387],{"align":23860},"小手",[392,135389,135390,135392],{},[438,135391,135319],{"align":23860},[438,135393,135394],{"align":23860},"移动",[392,135396,135397,135399],{},[438,135398,5310],{"align":23860},[438,135400,135401],{"align":23860},"文本",[392,135403,135404,135406],{},[438,135405,135355],{"align":23860},[438,135407,135408],{"align":23860},"禁止",[217,135410,135412],{"id":135411},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[21,135414,135415],{},"去除表单轮廓线",[21,135417,135418],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[82,135420,135421],{"className":126633,"code":129997,"language":126635,"meta":26,"style":26},[88,135422,135423,135427,135433,135449],{"__ignoreMap":26},[91,135424,135425],{"class":93,"line":94},[91,135426,130004],{"class":308},[91,135428,135429,135431],{"class":93,"line":38},[91,135430,51692],{"class":51381},[91,135432,15695],{"class":250},[91,135434,135435,135437,135439,135441,135443,135445,135447],{"class":93,"line":1304},[91,135436,70977],{"class":105},[91,135438,51518],{"class":250},[91,135440,466],{"class":105},[91,135442,51573],{"class":153},[91,135444,51602],{"class":105},[91,135446,130025],{"class":105},[91,135448,1415],{"class":250},[91,135450,135451],{"class":93,"line":1319},[91,135452,1689],{"class":250},[21,135454,135455],{},"文本域：",[24,135457],{"style":126489,"src":135458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[21,135460,135461],{},"此时会有一个空白区域",[24,135463],{"style":126489,"src":135464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[21,135466,135467],{},"写在同一行就不会出现这个问题",[24,135469],{"style":126489,"src":135470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[21,135472,135473],{},"文本域是行内块元素，一定记住！！！",[21,135475,98314],{},[24,135477],{"style":126489,"src":135478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[21,135480,135481],{},"文本域尽量放在一行",[21,135483,135484],{},"知识回顾：cols是列，rols是行",[24,135486],{"style":126489,"src":135487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[21,135489,135490],{},"它可以进行拖动，显然这是我们不愿意看到的",[24,135492],{"style":126489,"src":135493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[21,135495,135496],{},"使用resize进行解决",[82,135498,135500],{"className":126633,"code":135499,"language":126635,"meta":26,"style":26},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[88,135501,135502,135508,135521],{"__ignoreMap":26},[91,135503,135504,135506],{"class":93,"line":94},[91,135505,53902],{"class":51381},[91,135507,15695],{"class":250},[91,135509,135510,135512,135514,135516,135518],{"class":93,"line":38},[91,135511,70879],{"class":105},[91,135513,51518],{"class":250},[91,135515,54818],{"class":105},[91,135517,130496],{"class":250},[91,135519,135520],{"class":308},"\u002F* 取消表单轮廓线 *\u002F\n",[91,135522,135523],{"class":93,"line":1304},[91,135524,1689],{"class":250},[21,135526,135527],{},"此时就无法通过右下方实现拖动了",[217,135529,135531],{"id":135530},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[21,135533,135534],{},"实现一个盒子中的文字和图片对齐",[21,135536,135537,135538,135541],{},"用于设置一个元素的 ",[398,135539,135540],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[21,135543,135544],{},"图片和文字默认是基线对齐",[24,135546],{"style":126489,"src":135547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[82,135549,135550],{"className":126633,"code":135499,"language":126635,"meta":26,"style":26},[88,135551,135552,135558,135570],{"__ignoreMap":26},[91,135553,135554,135556],{"class":93,"line":94},[91,135555,53902],{"class":51381},[91,135557,15695],{"class":250},[91,135559,135560,135562,135564,135566,135568],{"class":93,"line":38},[91,135561,70879],{"class":105},[91,135563,51518],{"class":250},[91,135565,54818],{"class":105},[91,135567,130496],{"class":250},[91,135569,135520],{"class":308},[91,135571,135572],{"class":93,"line":1304},[91,135573,1689],{"class":250},[24,135575],{"style":126489,"src":135576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22121,135578,135580],{"id":135579},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[21,135582,135583],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[24,135585],{"style":126489,"src":135586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[21,135588,135589,135590,135593],{},"此时可以给图片、表单这些行内块元素的 ",[398,135591,135592],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22121,135595,135597],{"id":135596},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[21,135599,135600],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[21,135602,14756],{},[82,135604,135606],{"className":126633,"code":135605,"language":126635,"meta":26,"style":26},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[88,135607,135608,135613,135619,135631],{"__ignoreMap":26},[91,135609,135610],{"class":93,"line":94},[91,135611,135612],{"class":308},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[91,135614,135615,135617],{"class":93,"line":38},[91,135616,24],{"class":51381},[91,135618,15695],{"class":250},[91,135620,135621,135624,135626,135629],{"class":93,"line":1304},[91,135622,135623],{"class":105},"  vertical-align",[91,135625,51518],{"class":250},[91,135627,135628],{"class":105},"middle",[91,135630,1415],{"class":250},[91,135632,135633],{"class":93,"line":1319},[91,135634,1689],{"class":250},[24,135636],{"style":126489,"src":135637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[21,135639,135640],{},"主要解决方法有两种：",[14,135642,135643],{},[17,135644,135645,135648,135649,135652],{},[398,135646,135647],{},"给图片"," 添加 ",[398,135650,135651],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[21,135654,135655,135656],{},"2.把图片转换为块级元素 ",[398,135657,135658],{},"display: block",[21,135660,135661],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[21,135663,135664],{},"img {",[21,135666,135667],{},"vertical-align:middle;",[21,135669,1195],{},[217,135671,135673],{"id":135672},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[21,135675,135676],{},"效果：",[24,135678],{"style":126489,"src":135679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[21,135681,135682],{},"单行文本溢出显示省略号--必须满足三个条件：",[82,135684,135686],{"className":126633,"code":135685,"language":126635,"meta":26,"style":26},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[88,135687,135688,135693,135699,135709,135714,135724],{"__ignoreMap":26},[91,135689,135690],{"class":93,"line":94},[91,135691,135692],{"class":308},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[91,135694,135695,135697],{"class":93,"line":38},[91,135696,24],{"class":51381},[91,135698,15695],{"class":250},[91,135700,135701,135703,135705,135707],{"class":93,"line":1304},[91,135702,135623],{"class":105},[91,135704,51518],{"class":250},[91,135706,135628],{"class":105},[91,135708,1415],{"class":250},[91,135710,135711],{"class":93,"line":1319},[91,135712,135713],{"class":308},"  \u002F* 或 *\u002F\n",[91,135715,135716,135718,135720,135722],{"class":93,"line":1325},[91,135717,128249],{"class":105},[91,135719,51518],{"class":250},[91,135721,60950],{"class":105},[91,135723,1415],{"class":250},[91,135725,135726],{"class":93,"line":1339},[91,135727,1689],{"class":250},[217,135729,135731],{"id":135730},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[21,135733,135676],{},[24,135735],{"style":126489,"src":135736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[21,135738,135739,135740,135743],{},"多行文本溢出显示省略号， ",[398,135741,135742],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[82,135745,135746],{"className":126633,"code":135685,"language":126635,"meta":26,"style":26},[88,135747,135748,135752,135758,135768,135772,135782],{"__ignoreMap":26},[91,135749,135750],{"class":93,"line":94},[91,135751,135692],{"class":308},[91,135753,135754,135756],{"class":93,"line":38},[91,135755,24],{"class":51381},[91,135757,15695],{"class":250},[91,135759,135760,135762,135764,135766],{"class":93,"line":1304},[91,135761,135623],{"class":105},[91,135763,51518],{"class":250},[91,135765,135628],{"class":105},[91,135767,1415],{"class":250},[91,135769,135770],{"class":93,"line":1319},[91,135771,135713],{"class":308},[91,135773,135774,135776,135778,135780],{"class":93,"line":1325},[91,135775,128249],{"class":105},[91,135777,51518],{"class":250},[91,135779,60950],{"class":105},[91,135781,1415],{"class":250},[91,135783,135784],{"class":93,"line":1339},[91,135785,1689],{"class":250},[21,135787,135788],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[190,135790,135792],{"id":135791},"_133-常见布局技巧","13.3 常见布局技巧",[21,135794,135795],{},[398,135796,135797],{},"巧妙利用一个技术更快更好的布局：",[14,135799,135800,135803,135806,135809],{},[17,135801,135802],{},"margin负值的运用",[17,135804,135805],{},"文字围绕浮动元素",[17,135807,135808],{},"行内块的巧妙运用",[17,135810,135811],{},"CSS三角强化",[217,135813,135815],{"id":135814},"_1331-margin负值的运用","13.3.1 margin负值的运用",[21,135817,135818],{},"应用场景：",[24,135820],{"style":126489,"src":135821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[24,135823],{"style":126489,"src":135824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[21,135826,135827],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[21,135829,135830],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[82,135832,135833],{"className":126633,"code":129997,"language":126635,"meta":26,"style":26},[88,135834,135835,135839,135845,135861],{"__ignoreMap":26},[91,135836,135837],{"class":93,"line":94},[91,135838,130004],{"class":308},[91,135840,135841,135843],{"class":93,"line":38},[91,135842,51692],{"class":51381},[91,135844,15695],{"class":250},[91,135846,135847,135849,135851,135853,135855,135857,135859],{"class":93,"line":1304},[91,135848,70977],{"class":105},[91,135850,51518],{"class":250},[91,135852,466],{"class":105},[91,135854,51573],{"class":153},[91,135856,51602],{"class":105},[91,135858,130025],{"class":105},[91,135860,1415],{"class":250},[91,135862,135863],{"class":93,"line":1319},[91,135864,1689],{"class":250},[24,135866],{"style":126489,"src":135867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[21,135869,135870],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[82,135872,135874],{"className":126633,"code":135873,"language":126635,"meta":26,"style":26},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[88,135875,135876,135881,135887,135897,135909,135921],{"__ignoreMap":26},[91,135877,135878],{"class":93,"line":94},[91,135879,135880],{"class":308},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[91,135882,135883,135885],{"class":93,"line":38},[91,135884,130481],{"class":97},[91,135886,15695],{"class":250},[91,135888,135889,135891,135893,135895],{"class":93,"line":1304},[91,135890,132439],{"class":105},[91,135892,51518],{"class":250},[91,135894,54845],{"class":105},[91,135896,1415],{"class":250},[91,135898,135899,135901,135903,135905,135907],{"class":93,"line":1319},[91,135900,132453],{"class":105},[91,135902,51518],{"class":250},[91,135904,695],{"class":105},[91,135906,51573],{"class":153},[91,135908,1415],{"class":250},[91,135910,135911,135913,135915,135917,135919],{"class":93,"line":1325},[91,135912,132470],{"class":105},[91,135914,51518],{"class":250},[91,135916,949],{"class":105},[91,135918,51573],{"class":153},[91,135920,1415],{"class":250},[91,135922,135923],{"class":93,"line":1339},[91,135924,1689],{"class":250},[21,135926,135927],{},"加上上述代码会发现：",[24,135929],{"style":126489,"src":135930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[21,135932,135933],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[21,135935,135936],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[82,135938,135939],{"className":126633,"code":135873,"language":126635,"meta":26,"style":26},[88,135940,135941,135945,135951,135961,135973,135985],{"__ignoreMap":26},[91,135942,135943],{"class":93,"line":94},[91,135944,135880],{"class":308},[91,135946,135947,135949],{"class":93,"line":38},[91,135948,130481],{"class":97},[91,135950,15695],{"class":250},[91,135952,135953,135955,135957,135959],{"class":93,"line":1304},[91,135954,132439],{"class":105},[91,135956,51518],{"class":250},[91,135958,54845],{"class":105},[91,135960,1415],{"class":250},[91,135962,135963,135965,135967,135969,135971],{"class":93,"line":1319},[91,135964,132453],{"class":105},[91,135966,51518],{"class":250},[91,135968,695],{"class":105},[91,135970,51573],{"class":153},[91,135972,1415],{"class":250},[91,135974,135975,135977,135979,135981,135983],{"class":93,"line":1325},[91,135976,132470],{"class":105},[91,135978,51518],{"class":250},[91,135980,949],{"class":105},[91,135982,51573],{"class":153},[91,135984,1415],{"class":250},[91,135986,135987],{"class":93,"line":1339},[91,135988,1689],{"class":250},[21,135990,135991],{},"解决方式2：",[21,135993,135994],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[82,135996,135998],{"className":126633,"code":135997,"language":126635,"meta":26,"style":26},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[88,135999,136000,136006,136016,136028,136040],{"__ignoreMap":26},[91,136001,136002,136004],{"class":93,"line":94},[91,136003,51692],{"class":51381},[91,136005,15695],{"class":250},[91,136007,136008,136010,136012,136014],{"class":93,"line":38},[91,136009,132439],{"class":105},[91,136011,51518],{"class":250},[91,136013,54845],{"class":105},[91,136015,1415],{"class":250},[91,136017,136018,136020,136022,136024,136026],{"class":93,"line":1304},[91,136019,132453],{"class":105},[91,136021,51518],{"class":250},[91,136023,695],{"class":105},[91,136025,51573],{"class":153},[91,136027,1415],{"class":250},[91,136029,136030,136032,136034,136036,136038],{"class":93,"line":1319},[91,136031,132470],{"class":105},[91,136033,51518],{"class":250},[91,136035,949],{"class":105},[91,136037,51573],{"class":153},[91,136039,1415],{"class":250},[91,136041,136042],{"class":93,"line":1325},[91,136043,1689],{"class":250},[217,136045,136047],{"id":136046},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[21,136049,135818],{},[24,136051],{"style":126489,"src":136052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[21,136054,136055],{},"实现结构图：",[24,136057],{"style":126489,"src":136058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[21,136060,136061],{},"巧妙运用浮动元素不会压住文字的特性",[21,136063,136064],{},"代码显示：",[82,136066,136068],{"className":126633,"code":136067,"language":126635,"meta":26,"style":26},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[88,136069,136070,136076,136086,136090,136095,136099,136105,136119],{"__ignoreMap":26},[91,136071,136072,136074],{"class":93,"line":94},[91,136073,130481],{"class":97},[91,136075,15695],{"class":250},[91,136077,136078,136080,136082,136084],{"class":93,"line":38},[91,136079,131113],{"class":105},[91,136081,51518],{"class":250},[91,136083,23860],{"class":105},[91,136085,1415],{"class":250},[91,136087,136088],{"class":93,"line":1304},[91,136089,1689],{"class":250},[91,136091,136092],{"class":93,"line":1319},[91,136093,136094],{"class":250},"```Css\n",[91,136096,136097],{"class":93,"line":1325},[91,136098,130476],{"class":308},[91,136100,136101,136103],{"class":93,"line":1339},[91,136102,130481],{"class":97},[91,136104,15695],{"class":250},[91,136106,136107,136109,136111,136113,136115,136117],{"class":93,"line":1345},[91,136108,70551],{"class":105},[91,136110,51518],{"class":250},[91,136112,440],{"class":105},[91,136114,51637],{"class":105},[91,136116,130496],{"class":250},[91,136118,130499],{"class":308},[91,136120,136121],{"class":93,"line":1436},[91,136122,1689],{"class":250},[21,136124,136125],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[82,136127,136130],{"className":136128,"code":136129,"language":5310},[5308],"\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",[88,136131,136129],{"__ignoreMap":26},[24,136133],{"style":126489,"src":136134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[21,136136,136137],{},"最终展示结果：",[82,136139,136140],{"className":126633,"code":130469,"language":126635,"meta":26,"style":26},[88,136141,136142,136146,136152,136166],{"__ignoreMap":26},[91,136143,136144],{"class":93,"line":94},[91,136145,130476],{"class":308},[91,136147,136148,136150],{"class":93,"line":38},[91,136149,130481],{"class":97},[91,136151,15695],{"class":250},[91,136153,136154,136156,136158,136160,136162,136164],{"class":93,"line":1304},[91,136155,70551],{"class":105},[91,136157,51518],{"class":250},[91,136159,440],{"class":105},[91,136161,51637],{"class":105},[91,136163,130496],{"class":250},[91,136165,130499],{"class":308},[91,136167,136168],{"class":93,"line":1319},[91,136169,1689],{"class":250},[24,136171],{"style":126489,"src":136172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[190,136174,136176],{"id":136175},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[217,136178,136180],{"id":136179},"_1341-原理","13.4.1 原理",[24,136182],{"style":126489,"src":136183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[82,136185,136186],{"className":126633,"code":130469,"language":126635,"meta":26,"style":26},[88,136187,136188,136192,136198,136212],{"__ignoreMap":26},[91,136189,136190],{"class":93,"line":94},[91,136191,130476],{"class":308},[91,136193,136194,136196],{"class":93,"line":38},[91,136195,130481],{"class":97},[91,136197,15695],{"class":250},[91,136199,136200,136202,136204,136206,136208,136210],{"class":93,"line":1304},[91,136201,70551],{"class":105},[91,136203,51518],{"class":250},[91,136205,440],{"class":105},[91,136207,51637],{"class":105},[91,136209,130496],{"class":250},[91,136211,130499],{"class":308},[91,136213,136214],{"class":93,"line":1319},[91,136215,1689],{"class":250},[217,136217,136219],{"id":136218},"_1342-实例","13.4.2 实例",[24,136221],{"style":126489,"src":136222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[82,136224,136225],{"className":126633,"code":131099,"language":126635,"meta":26,"style":26},[88,136226,136227,136233,136243,136247,136253,136263],{"__ignoreMap":26},[91,136228,136229,136231],{"class":93,"line":94},[91,136230,131106],{"class":97},[91,136232,15695],{"class":250},[91,136234,136235,136237,136239,136241],{"class":93,"line":38},[91,136236,131113],{"class":105},[91,136238,51518],{"class":250},[91,136240,23860],{"class":105},[91,136242,1415],{"class":250},[91,136244,136245],{"class":93,"line":1304},[91,136246,1689],{"class":250},[91,136248,136249,136251],{"class":93,"line":1319},[91,136250,131128],{"class":97},[91,136252,15695],{"class":250},[91,136254,136255,136257,136259,136261],{"class":93,"line":1325},[91,136256,131113],{"class":105},[91,136258,51518],{"class":250},[91,136260,72603],{"class":105},[91,136262,1415],{"class":250},[91,136264,136265],{"class":93,"line":1339},[91,136266,1689],{"class":250},[190,136268,136270],{"id":136269},"_135-css的初始化","13.5 css的初始化",[21,136272,136273],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[21,136275,136276],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[21,136278,136279],{},"每个网页都必须首先进行 CSS初始化。",[21,136281,136282],{},"这里我们以 京东CSS初始化代码为例。",[21,136284,136285],{},"在网页右键查看网页源代码",[21,136287,136288],{},"找到css的link引入语句",[21,136290,136291],{},"然后ctrl+f 输入body",[21,136293,77307],{},[24,136295],{"style":126489,"src":136296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[21,136298,77330],{},[24,136300],{"style":126489,"src":136301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[21,136303,136304],{},"③打开了网页上传压缩的代码",[24,136306],{"style":126489,"src":136307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[21,136309,136310],{},"④从body前可以查看这个网页的初始化代码",[21,136312,136313],{},[398,136314,136315],{},"Unicode编码字体：",[21,136317,136318],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[21,136320,83288],{},[21,136322,136323],{},"黑体 \\9ED1\\4F53",[21,136325,136326],{},"宋体 \\5B8B\\4F53",[21,136328,136329],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[168,136331,136332],{},"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":26,"searchDepth":38,"depth":38,"links":136334},[136335,136336,136343,136347,136351],{"id":135132,"depth":38,"text":135133},{"id":135254,"depth":38,"text":135255,"children":136337},[136338,136339,136340,136341,136342],{"id":135258,"depth":1304,"text":135259},{"id":135411,"depth":1304,"text":135412},{"id":135530,"depth":1304,"text":135531},{"id":135672,"depth":1304,"text":135673},{"id":135730,"depth":1304,"text":135731},{"id":135791,"depth":38,"text":135792,"children":136344},[136345,136346],{"id":135814,"depth":1304,"text":135815},{"id":136046,"depth":1304,"text":136047},{"id":136175,"depth":38,"text":136176,"children":136348},[136349,136350],{"id":136179,"depth":1304,"text":136180},{"id":136218,"depth":1304,"text":136219},{"id":136269,"depth":38,"text":136270},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135124,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136358,"title":136359,"body":136360,"description":23500,"extension":173,"meta":138046,"navigation":175,"path":138047,"seo":138048,"stem":138049,"__hash__":138050},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136361,"toc":138035},[136362,136365,136369,136373,136376,136383,136386,136389,136427,136430,136432,136446,136450,136459,136463,136468,136471,136474,136477,136512,136517,136520,136550,136553,136558,136561,136564,136594,136597,136651,136654,136658,136663,136675,136678,136682,136712,136715,136720,136723,136753,136756,136760,136777,136781,136785,136788,136821,136824,136828,136831,136834,136837,136840,136843,136954,136957,136960,136963,137065,137068,137072,137076,137080,137083,137123,137126,137128,137144,137148,137151,137156,137237,137240,137243,137369,137374,137377,137385,137388,137393,137478,137481,137485,137488,137491,137495,137515,137520,137604,137607,137612,137615,137618,137696,137699,137702,137705,137708,137711,137716,137719,137722,137794,137797,137802,137805,137902,137905,137911,137914,137917,137920,137923,137926,137929,137932,137935,137939,137944,137947,137980,137985,137988,138029,138032],[10,136363,136359],{"id":136364},"_14-html5与css3新特性",[190,136366,136368],{"id":136367},"_141-html5的新特性","14.1 HTML5的新特性",[217,136370,136372],{"id":136371},"_1411-基本标签","14.1.1 基本标签",[21,136374,136375],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[21,136377,136378,136379,136382],{},"这些新特性都有兼容性问题，基本是 ",[398,136380,136381],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[21,136384,136385],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[21,136387,136388],{},"现在使用的是新特性：",[1256,136390,136391,136397,136403,136409,136415,136421],{},[17,136392,136393,136396],{},[88,136394,136395],{},"\u003Cheader>"," 头部标签",[17,136398,136399,136402],{},[88,136400,136401],{},"\u003Cnav>"," 导航标签",[17,136404,136405,136408],{},[88,136406,136407],{},"\u003Carticle>"," 内容标签",[17,136410,136411,136414],{},[88,136412,136413],{},"\u003Csection>"," 定义文档某个区域",[17,136416,136417,136420],{},[88,136418,136419],{},"\u003Caside>"," 侧边栏标签",[17,136422,136423,136426],{},[88,136424,136425],{},"\u003Cfooter>"," 尾部标签",[24,136428],{"style":126489,"src":136429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[21,136431,280],{},[1256,136433,136434,136437,136440,136443],{},[17,136435,136436],{},"这种语义化标准主要是针对搜索引擎的",[17,136438,136439],{},"这些标签页面中可以经常使用",[17,136441,136442],{},"在IE9中，需要把这些元素转换为块级元素",[17,136444,136445],{},"移动端更喜欢使用这些标签",[217,136447,136449],{"id":136448},"_1412-多媒体标签","14.1.2 多媒体标签",[21,136451,136452,136453,136455,136456,136458],{},"音频 ",[398,136454,28293],{}," 和视频 ",[398,136457,28302],{}," 两个标签",[22121,136460,136462],{"id":136461},"_14121-视频标签-video","14.1.2.1 视频标签- video",[14,136464,136465],{},[17,136466,136467],{},"支持格式：",[24,136469],{"style":126489,"src":136470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[21,136472,136473],{},"尽量使用MP4，兼容性好",[21,136475,136476],{},"用MP4就可以",[82,136478,136480],{"className":127380,"code":136479,"language":127382,"meta":26,"style":26},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[88,136481,136482],{"__ignoreMap":26},[91,136483,136484,136486,136488,136490,136492,136495,136497,136500,136503,136506,136508,136510],{"class":93,"line":94},[91,136485,1159],{"class":250},[91,136487,28302],{"class":51381},[91,136489,55320],{"class":97},[91,136491,296],{"class":250},[91,136493,136494],{"class":101},"\"movie.mp4\"",[91,136496,92504],{"class":97},[91,136498,136499],{"class":97}," autoplay",[91,136501,136502],{"class":97}," muted",[91,136504,136505],{"class":97}," loop",[91,136507,55395],{"class":250},[91,136509,28302],{"class":51381},[91,136511,51388],{"class":250},[14,136513,136514],{"start":38},[17,136515,136516],{},"兼容写法",[21,136518,136519],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[82,136521,136522],{"className":127380,"code":136479,"language":127382,"meta":26,"style":26},[88,136523,136524],{"__ignoreMap":26},[91,136525,136526,136528,136530,136532,136534,136536,136538,136540,136542,136544,136546,136548],{"class":93,"line":94},[91,136527,1159],{"class":250},[91,136529,28302],{"class":51381},[91,136531,55320],{"class":97},[91,136533,296],{"class":250},[91,136535,136494],{"class":101},[91,136537,92504],{"class":97},[91,136539,136499],{"class":97},[91,136541,136502],{"class":97},[91,136543,136505],{"class":97},[91,136545,55395],{"class":250},[91,136547,28302],{"class":51381},[91,136549,51388],{"class":250},[21,136551,136552],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[14,136554,136555],{"start":1304},[17,136556,136557],{},"video常用属性",[24,136559],{"style":126489,"src":136560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[21,136562,136563],{},"poster属性后面是跟的等待加载图片的地址",[82,136565,136566],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,136567,136568],{"__ignoreMap":26},[91,136569,136570,136572,136574,136576,136578,136580,136582,136584,136586,136588,136590,136592],{"class":93,"line":94},[91,136571,1159],{"class":250},[91,136573,24],{"class":51381},[91,136575,55320],{"class":97},[91,136577,296],{"class":250},[91,136579,134150],{"class":101},[91,136581,55328],{"class":97},[91,136583,296],{"class":250},[91,136585,134157],{"class":101},[91,136587,134160],{"class":97},[91,136589,296],{"class":250},[91,136591,134165],{"class":101},[91,136593,51388],{"class":250},[21,136595,136596],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[82,136598,136600],{"className":126633,"code":136599,"language":126635,"meta":26,"style":26},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[88,136601,136602,136607,136613,136637,136642,136647],{"__ignoreMap":26},[91,136603,136604],{"class":93,"line":94},[91,136605,136606],{"class":308},"\u002F* 2D 位移 *\u002F\n",[91,136608,136609,136611],{"class":93,"line":38},[91,136610,51692],{"class":51381},[91,136612,15695],{"class":250},[91,136614,136615,136618,136620,136623,136625,136627,136629,136631,136633,136635],{"class":93,"line":1304},[91,136616,136617],{"class":105},"  transform",[91,136619,51518],{"class":250},[91,136621,136622],{"class":105},"translate",[91,136624,251],{"class":250},[91,136626,560],{"class":105},[91,136628,51573],{"class":153},[91,136630,12558],{"class":250},[91,136632,905],{"class":105},[91,136634,51573],{"class":153},[91,136636,2842],{"class":250},[91,136638,136639],{"class":93,"line":1319},[91,136640,136641],{"class":308},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[91,136643,136644],{"class":93,"line":1325},[91,136645,136646],{"class":308},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[91,136648,136649],{"class":93,"line":1339},[91,136650,1689],{"class":250},[21,136652,136653],{},"muted:自动静音属性",[22121,136655,136657],{"id":136656},"_14122-音频标签audio","14.1.2.2 音频标签audio",[14,136659,136660],{},[17,136661,136662],{},"基本使用",[21,136664,136665,136666,136671,136672],{},"当前 ",[398,136667,136668],{},[88,136669,136670],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[398,136673,136674],{},"mp3格式",[24,136676],{"style":126489,"src":136677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[14,136679,136680],{"start":38},[17,136681,136516],{},[82,136683,136684],{"className":127380,"code":136479,"language":127382,"meta":26,"style":26},[88,136685,136686],{"__ignoreMap":26},[91,136687,136688,136690,136692,136694,136696,136698,136700,136702,136704,136706,136708,136710],{"class":93,"line":94},[91,136689,1159],{"class":250},[91,136691,28302],{"class":51381},[91,136693,55320],{"class":97},[91,136695,296],{"class":250},[91,136697,136494],{"class":101},[91,136699,92504],{"class":97},[91,136701,136499],{"class":97},[91,136703,136502],{"class":97},[91,136705,136505],{"class":97},[91,136707,55395],{"class":250},[91,136709,28302],{"class":51381},[91,136711,51388],{"class":250},[21,136713,136714],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[14,136716,136717],{"start":1304},[17,136718,136719],{},"常用属性",[24,136721],{"style":126489,"src":136722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[82,136724,136725],{"className":127380,"code":136479,"language":127382,"meta":26,"style":26},[88,136726,136727],{"__ignoreMap":26},[91,136728,136729,136731,136733,136735,136737,136739,136741,136743,136745,136747,136749,136751],{"class":93,"line":94},[91,136730,1159],{"class":250},[91,136732,28302],{"class":51381},[91,136734,55320],{"class":97},[91,136736,296],{"class":250},[91,136738,136494],{"class":101},[91,136740,92504],{"class":97},[91,136742,136499],{"class":97},[91,136744,136502],{"class":97},[91,136746,136505],{"class":97},[91,136748,55395],{"class":250},[91,136750,28302],{"class":51381},[91,136752,51388],{"class":250},[21,136754,136755],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22121,136757,136759],{"id":136758},"_14123-总结","14.1.2.3 总结",[1256,136761,136762,136765,136768,136771,136774],{},[17,136763,136764],{},"音频标签和视频标签使用方式基本一致",[17,136766,136767],{},"浏览器支持情况不同",[17,136769,136770],{},"谷歌浏览器把音频和视频自动播放禁止了",[17,136772,136773],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[17,136775,136776],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[217,136778,136780],{"id":136779},"_1413-表单元素","14.1.3 表单元素",[22121,136782,136784],{"id":136783},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[24,136786],{"style":126489,"src":136787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[82,136789,136791],{"className":127380,"code":136790,"language":127382,"meta":26,"style":26},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[88,136792,136793],{"__ignoreMap":26},[91,136794,136795,136797,136799,136801,136803,136805,136807,136809,136812,136814,136816,136819],{"class":93,"line":94},[91,136796,1159],{"class":250},[91,136798,53902],{"class":51381},[91,136800,53905],{"class":97},[91,136802,296],{"class":250},[91,136804,62780],{"class":101},[91,136806,15043],{"class":97},[91,136808,296],{"class":250},[91,136810,136811],{"class":101},"\"username\"",[91,136813,61101],{"class":97},[91,136815,296],{"class":250},[91,136817,136818],{"class":101},"\"请输入用户名\"",[91,136820,51388],{"class":250},[24,136822],{"style":126489,"src":136823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22121,136825,136827],{"id":136826},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[24,136829],{"style":126489,"src":136830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[21,136832,136833],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[21,136835,136836],{},"快捷操作：",[24,136838],{"style":126489,"src":136839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[21,136841,136842],{},"例子1：",[82,136844,136846],{"className":127380,"code":136845,"language":127382,"meta":26,"style":26},"\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",[88,136847,136848,136871,136898,136927,136946],{"__ignoreMap":26},[91,136849,136850,136852,136854,136856,136858,136861,136864,136866,136869],{"class":93,"line":94},[91,136851,1159],{"class":250},[91,136853,66706],{"class":51381},[91,136855,66709],{"class":97},[91,136857,296],{"class":250},[91,136859,136860],{"class":101},"\"\u002Fsubmit\"",[91,136862,136863],{"class":97}," method",[91,136865,296],{"class":250},[91,136867,136868],{"class":101},"\"post\"",[91,136870,51388],{"class":250},[91,136872,136873,136875,136877,136879,136881,136883,136885,136887,136889,136891,136893,136896],{"class":93,"line":38},[91,136874,52225],{"class":250},[91,136876,53902],{"class":51381},[91,136878,53905],{"class":97},[91,136880,296],{"class":250},[91,136882,62780],{"class":101},[91,136884,15043],{"class":97},[91,136886,296],{"class":250},[91,136888,136811],{"class":101},[91,136890,61101],{"class":97},[91,136892,296],{"class":250},[91,136894,136895],{"class":101},"\"用户名\"",[91,136897,51388],{"class":250},[91,136899,136900,136902,136904,136906,136908,136911,136913,136915,136918,136920,136922,136925],{"class":93,"line":1304},[91,136901,52225],{"class":250},[91,136903,53902],{"class":51381},[91,136905,53905],{"class":97},[91,136907,296],{"class":250},[91,136909,136910],{"class":101},"\"password\"",[91,136912,15043],{"class":97},[91,136914,296],{"class":250},[91,136916,136917],{"class":101},"\"pwd\"",[91,136919,61101],{"class":97},[91,136921,296],{"class":250},[91,136923,136924],{"class":101},"\"密码\"",[91,136926,51388],{"class":250},[91,136928,136929,136931,136933,136935,136937,136939,136942,136944],{"class":93,"line":1319},[91,136930,52225],{"class":250},[91,136932,53968],{"class":51381},[91,136934,53905],{"class":97},[91,136936,296],{"class":250},[91,136938,66729],{"class":101},[91,136940,136941],{"class":250},">提交\u003C\u002F",[91,136943,53968],{"class":51381},[91,136945,51388],{"class":250},[91,136947,136948,136950,136952],{"class":93,"line":1325},[91,136949,51866],{"class":250},[91,136951,66706],{"class":51381},[91,136953,51388],{"class":250},[24,136955],{"style":126489,"src":136956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[21,136958,136959],{},"value是表单域的内容",[21,136961,136962],{},"例子2：",[82,136964,136965],{"className":127380,"code":136845,"language":127382,"meta":26,"style":26},[88,136966,136967,136987,137013,137039,137057],{"__ignoreMap":26},[91,136968,136969,136971,136973,136975,136977,136979,136981,136983,136985],{"class":93,"line":94},[91,136970,1159],{"class":250},[91,136972,66706],{"class":51381},[91,136974,66709],{"class":97},[91,136976,296],{"class":250},[91,136978,136860],{"class":101},[91,136980,136863],{"class":97},[91,136982,296],{"class":250},[91,136984,136868],{"class":101},[91,136986,51388],{"class":250},[91,136988,136989,136991,136993,136995,136997,136999,137001,137003,137005,137007,137009,137011],{"class":93,"line":38},[91,136990,52225],{"class":250},[91,136992,53902],{"class":51381},[91,136994,53905],{"class":97},[91,136996,296],{"class":250},[91,136998,62780],{"class":101},[91,137000,15043],{"class":97},[91,137002,296],{"class":250},[91,137004,136811],{"class":101},[91,137006,61101],{"class":97},[91,137008,296],{"class":250},[91,137010,136895],{"class":101},[91,137012,51388],{"class":250},[91,137014,137015,137017,137019,137021,137023,137025,137027,137029,137031,137033,137035,137037],{"class":93,"line":1304},[91,137016,52225],{"class":250},[91,137018,53902],{"class":51381},[91,137020,53905],{"class":97},[91,137022,296],{"class":250},[91,137024,136910],{"class":101},[91,137026,15043],{"class":97},[91,137028,296],{"class":250},[91,137030,136917],{"class":101},[91,137032,61101],{"class":97},[91,137034,296],{"class":250},[91,137036,136924],{"class":101},[91,137038,51388],{"class":250},[91,137040,137041,137043,137045,137047,137049,137051,137053,137055],{"class":93,"line":1319},[91,137042,52225],{"class":250},[91,137044,53968],{"class":51381},[91,137046,53905],{"class":97},[91,137048,296],{"class":250},[91,137050,66729],{"class":101},[91,137052,136941],{"class":250},[91,137054,53968],{"class":51381},[91,137056,51388],{"class":250},[91,137058,137059,137061,137063],{"class":93,"line":1325},[91,137060,51866],{"class":250},[91,137062,66706],{"class":51381},[91,137064,51388],{"class":250},[24,137066],{"style":126489,"src":137067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[190,137069,137071],{"id":137070},"_142-css新特性","14.2 CSS新特性",[217,137073,137075],{"id":137074},"_1421-新增选择器","14.2.1 新增选择器",[22121,137077,137079],{"id":137078},"_14211-属性选择器","14.2.1.1 属性选择器",[24,137081],{"style":126489,"src":137082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[82,137084,137086],{"className":126633,"code":137085,"language":126635,"meta":26,"style":26},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[88,137087,137088,137103,137119],{"__ignoreMap":26},[91,137089,137090,137092,137094,137096,137098,137100],{"class":93,"line":94},[91,137091,53902],{"class":51381},[91,137093,1139],{"class":250},[91,137095,103188],{"class":97},[91,137097,296],{"class":153},[91,137099,62780],{"class":101},[91,137101,137102],{"class":250},"] {\n",[91,137104,137105,137107,137109,137111,137113,137115,137117],{"class":93,"line":38},[91,137106,70977],{"class":105},[91,137108,51518],{"class":250},[91,137110,466],{"class":105},[91,137112,51573],{"class":153},[91,137114,51602],{"class":105},[91,137116,130213],{"class":105},[91,137118,1415],{"class":250},[91,137120,137121],{"class":93,"line":1304},[91,137122,1689],{"class":250},[24,137124],{"style":126489,"src":137125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[21,137127,280],{},[1256,137129,137130,137133,137136,137139],{},[17,137131,137132],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[17,137134,137135],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[17,137137,137138],{},"属性选择器也可以选择出来自定义的属性",[17,137140,137141,137143],{},[398,137142,9148],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22121,137145,137147],{"id":137146},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[24,137149],{"style":126489,"src":137150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[14,137152,137153],{},[17,137154,137155],{},"fist-child",[82,137157,137159],{"className":126633,"code":137158,"language":126635,"meta":26,"style":26},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[88,137160,137161,137166,137181,137201,137219],{"__ignoreMap":26},[91,137162,137163],{"class":93,"line":94},[91,137164,137165],{"class":308},"\u002F* 属性选择器 *\u002F\n",[91,137167,137168,137170,137172,137174,137176,137178],{"class":93,"line":38},[91,137169,53902],{"class":51381},[91,137171,1139],{"class":250},[91,137173,103188],{"class":97},[91,137175,296],{"class":153},[91,137177,62780],{"class":101},[91,137179,137180],{"class":250},"] { }\n",[91,137182,137183,137185,137187,137189,137192,137195,137198],{"class":93,"line":1304},[91,137184,53902],{"class":51381},[91,137186,1139],{"class":250},[91,137188,14817],{"class":97},[91,137190,137191],{"class":153},"^=",[91,137193,137194],{"class":101},"\"icon\"",[91,137196,137197],{"class":250},"] { }  ",[91,137199,137200],{"class":308},"\u002F* 以 icon 开头 *\u002F\n",[91,137202,137203,137205,137207,137209,137212,137214,137216],{"class":93,"line":1319},[91,137204,53902],{"class":51381},[91,137206,1139],{"class":250},[91,137208,14817],{"class":97},[91,137210,137211],{"class":153},"$=",[91,137213,137194],{"class":101},[91,137215,137197],{"class":250},[91,137217,137218],{"class":308},"\u002F* 以 icon 结尾 *\u002F\n",[91,137220,137221,137223,137225,137227,137230,137232,137234],{"class":93,"line":1325},[91,137222,53902],{"class":51381},[91,137224,1139],{"class":250},[91,137226,14817],{"class":97},[91,137228,137229],{"class":153},"*=",[91,137231,137194],{"class":101},[91,137233,137197],{"class":250},[91,137235,137236],{"class":308},"\u002F* 包含 icon *\u002F\n",[21,137238,137239],{},"ul的第一个儿子文本为红色",[21,137241,137242],{},"一定要在冒号前加空格，不然就是选中所有的了",[82,137244,137246],{"className":126633,"code":137245,"language":126635,"meta":26,"style":26},".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",[88,137247,137248,137254,137264,137268,137272,137277,137290,137303,137319,137336,137353],{"__ignoreMap":26},[91,137249,137250,137252],{"class":93,"line":94},[91,137251,126924],{"class":97},[91,137253,15695],{"class":250},[91,137255,137256,137258,137260,137262],{"class":93,"line":38},[91,137257,70986],{"class":105},[91,137259,51518],{"class":250},[91,137261,57502],{"class":105},[91,137263,1415],{"class":250},[91,137265,137266],{"class":93,"line":1304},[91,137267,1689],{"class":250},[91,137269,137270],{"class":93,"line":1319},[91,137271,136094],{"class":250},[91,137273,137274],{"class":93,"line":1325},[91,137275,137276],{"class":308},"\u002F* 结构伪类选择器 *\u002F\n",[91,137278,137279,137281,137284,137287],{"class":93,"line":1339},[91,137280,17],{"class":51381},[91,137282,137283],{"class":97},":first-child",[91,137285,137286],{"class":250}," { }           ",[91,137288,137289],{"class":308},"\u002F* 第一个 *\u002F\n",[91,137291,137292,137294,137297,137300],{"class":93,"line":1345},[91,137293,17],{"class":51381},[91,137295,137296],{"class":97},":last-child",[91,137298,137299],{"class":250}," { }            ",[91,137301,137302],{"class":308},"\u002F* 最后一个 *\u002F\n",[91,137304,137305,137307,137309,137311,137313,137316],{"class":93,"line":1436},[91,137306,17],{"class":51381},[91,137308,129547],{"class":97},[91,137310,251],{"class":250},[91,137312,327],{"class":105},[91,137314,137315],{"class":250},") { }          ",[91,137317,137318],{"class":308},"\u002F* 第2个 *\u002F\n",[91,137320,137321,137323,137325,137327,137330,137333],{"class":93,"line":1442},[91,137322,17],{"class":51381},[91,137324,129547],{"class":97},[91,137326,251],{"class":250},[91,137328,137329],{"class":105},"2n",[91,137331,137332],{"class":250},") { }         ",[91,137334,137335],{"class":308},"\u002F* 偶数 *\u002F\n",[91,137337,137338,137340,137342,137344,137347,137350],{"class":93,"line":1454},[91,137339,17],{"class":51381},[91,137341,129547],{"class":97},[91,137343,251],{"class":250},[91,137345,137346],{"class":105},"2n+1",[91,137348,137349],{"class":250},") { }       ",[91,137351,137352],{"class":308},"\u002F* 奇数 *\u002F\n",[91,137354,137355,137357,137359,137361,137364,137366],{"class":93,"line":1736},[91,137356,17],{"class":51381},[91,137358,129547],{"class":97},[91,137360,251],{"class":250},[91,137362,137363],{"class":105},"-n+3",[91,137365,137349],{"class":250},[91,137367,137368],{"class":308},"\u002F* 前3个 *\u002F\n",[51692,137370,137373],{"className":137371},[137372],"example","\n  示例内容\n",[21,137375,137376],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1256,137378,137379],{},[17,137380,137381,137384],{},[88,137382,137383],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[21,137386,137387],{},"也就是说它选择的是熊大",[14,137389,137390],{"start":1339},[17,137391,137392],{},"权重",[82,137394,137396],{"className":126633,"code":137395,"language":126635,"meta":26,"style":26},"\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",[88,137397,137398,137402,137412,137422,137436,137450,137464],{"__ignoreMap":26},[91,137399,137400],{"class":93,"line":94},[91,137401,137276],{"class":308},[91,137403,137404,137406,137408,137410],{"class":93,"line":38},[91,137405,17],{"class":51381},[91,137407,137283],{"class":97},[91,137409,137286],{"class":250},[91,137411,137289],{"class":308},[91,137413,137414,137416,137418,137420],{"class":93,"line":1304},[91,137415,17],{"class":51381},[91,137417,137296],{"class":97},[91,137419,137299],{"class":250},[91,137421,137302],{"class":308},[91,137423,137424,137426,137428,137430,137432,137434],{"class":93,"line":1319},[91,137425,17],{"class":51381},[91,137427,129547],{"class":97},[91,137429,251],{"class":250},[91,137431,327],{"class":105},[91,137433,137315],{"class":250},[91,137435,137318],{"class":308},[91,137437,137438,137440,137442,137444,137446,137448],{"class":93,"line":1325},[91,137439,17],{"class":51381},[91,137441,129547],{"class":97},[91,137443,251],{"class":250},[91,137445,137329],{"class":105},[91,137447,137332],{"class":250},[91,137449,137335],{"class":308},[91,137451,137452,137454,137456,137458,137460,137462],{"class":93,"line":1339},[91,137453,17],{"class":51381},[91,137455,129547],{"class":97},[91,137457,251],{"class":250},[91,137459,137346],{"class":105},[91,137461,137349],{"class":250},[91,137463,137352],{"class":308},[91,137465,137466,137468,137470,137472,137474,137476],{"class":93,"line":1345},[91,137467,17],{"class":51381},[91,137469,129547],{"class":97},[91,137471,251],{"class":250},[91,137473,137363],{"class":105},[91,137475,137349],{"class":250},[91,137477,137368],{"class":308},[21,137479,137480],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22121,137482,137484],{"id":137483},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[21,137486,137487],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[24,137489],{"style":126489,"src":137490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[14,137492,137493],{},[17,137494,280],{},[1256,137496,137497,137500,137503,137506,137509,137512],{},[17,137498,137499],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[17,137501,137502],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[17,137504,137505],{},"语法： element::before {}",[17,137507,137508],{},"before 和 after 必须有 content 属性",[17,137510,137511],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[17,137513,137514],{},"伪元素选择器和标签选择器一样，权重为 1",[14,137516,137517],{"start":38},[17,137518,137519],{},"实例",[82,137521,137522],{"className":126633,"code":137395,"language":126635,"meta":26,"style":26},[88,137523,137524,137528,137538,137548,137562,137576,137590],{"__ignoreMap":26},[91,137525,137526],{"class":93,"line":94},[91,137527,137276],{"class":308},[91,137529,137530,137532,137534,137536],{"class":93,"line":38},[91,137531,17],{"class":51381},[91,137533,137283],{"class":97},[91,137535,137286],{"class":250},[91,137537,137289],{"class":308},[91,137539,137540,137542,137544,137546],{"class":93,"line":1304},[91,137541,17],{"class":51381},[91,137543,137296],{"class":97},[91,137545,137299],{"class":250},[91,137547,137302],{"class":308},[91,137549,137550,137552,137554,137556,137558,137560],{"class":93,"line":1319},[91,137551,17],{"class":51381},[91,137553,129547],{"class":97},[91,137555,251],{"class":250},[91,137557,327],{"class":105},[91,137559,137315],{"class":250},[91,137561,137318],{"class":308},[91,137563,137564,137566,137568,137570,137572,137574],{"class":93,"line":1325},[91,137565,17],{"class":51381},[91,137567,129547],{"class":97},[91,137569,251],{"class":250},[91,137571,137329],{"class":105},[91,137573,137332],{"class":250},[91,137575,137335],{"class":308},[91,137577,137578,137580,137582,137584,137586,137588],{"class":93,"line":1339},[91,137579,17],{"class":51381},[91,137581,129547],{"class":97},[91,137583,251],{"class":250},[91,137585,137346],{"class":105},[91,137587,137349],{"class":250},[91,137589,137352],{"class":308},[91,137591,137592,137594,137596,137598,137600,137602],{"class":93,"line":1345},[91,137593,17],{"class":51381},[91,137595,129547],{"class":97},[91,137597,251],{"class":250},[91,137599,137363],{"class":105},[91,137601,137349],{"class":250},[91,137603,137368],{"class":308},[24,137605],{"style":126489,"src":137606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[14,137608,137609],{"start":1304},[17,137610,137611],{},"使用场景1",[24,137613],{"style":126489,"src":137614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[21,137616,137617],{},"不需要再加盒子来整红色那部分了",[82,137619,137621],{"className":126633,"code":137620,"language":126635,"meta":26,"style":26},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[88,137622,137623,137628,137637,137648,137658,137662,137671,137682,137692],{"__ignoreMap":26},[91,137624,137625],{"class":93,"line":94},[91,137626,137627],{"class":308},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[91,137629,137630,137632,137635],{"class":93,"line":38},[91,137631,51692],{"class":51381},[91,137633,137634],{"class":97},"::before",[91,137636,15695],{"class":250},[91,137638,137639,137642,137644,137646],{"class":93,"line":1304},[91,137640,137641],{"class":105},"  content",[91,137643,51518],{"class":250},[91,137645,7775],{"class":101},[91,137647,1415],{"class":250},[91,137649,137650,137652,137654,137656],{"class":93,"line":1319},[91,137651,128249],{"class":105},[91,137653,51518],{"class":250},[91,137655,60950],{"class":105},[91,137657,1415],{"class":250},[91,137659,137660],{"class":93,"line":1325},[91,137661,1689],{"class":250},[91,137663,137664,137666,137669],{"class":93,"line":1339},[91,137665,51692],{"class":51381},[91,137667,137668],{"class":97},"::after",[91,137670,15695],{"class":250},[91,137672,137673,137675,137677,137680],{"class":93,"line":1345},[91,137674,137641],{"class":105},[91,137676,51518],{"class":250},[91,137678,137679],{"class":101},"\"→\"",[91,137681,1415],{"class":250},[91,137683,137684,137686,137688,137690],{"class":93,"line":1436},[91,137685,70986],{"class":105},[91,137687,51518],{"class":250},[91,137689,62151],{"class":105},[91,137691,1415],{"class":250},[91,137693,137694],{"class":93,"line":1442},[91,137695,1689],{"class":250},[24,137697],{"style":126489,"src":137698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[21,137700,137701],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[24,137703],{"style":126489,"src":137704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[21,137706,137707],{},"但是在引用时需要先转义一下",[21,137709,137710],{},"content='\\e930'",[14,137712,137713],{"start":1319},[17,137714,137715],{},"使用场景2",[21,137717,137718],{},"仿土豆效果",[21,137720,137721],{},"通过使用伪元素选择器可以减少body中盒子的数量",[82,137723,137724],{"className":126633,"code":137620,"language":126635,"meta":26,"style":26},[88,137725,137726,137730,137738,137748,137758,137762,137770,137780,137790],{"__ignoreMap":26},[91,137727,137728],{"class":93,"line":94},[91,137729,137627],{"class":308},[91,137731,137732,137734,137736],{"class":93,"line":38},[91,137733,51692],{"class":51381},[91,137735,137634],{"class":97},[91,137737,15695],{"class":250},[91,137739,137740,137742,137744,137746],{"class":93,"line":1304},[91,137741,137641],{"class":105},[91,137743,51518],{"class":250},[91,137745,7775],{"class":101},[91,137747,1415],{"class":250},[91,137749,137750,137752,137754,137756],{"class":93,"line":1319},[91,137751,128249],{"class":105},[91,137753,51518],{"class":250},[91,137755,60950],{"class":105},[91,137757,1415],{"class":250},[91,137759,137760],{"class":93,"line":1325},[91,137761,1689],{"class":250},[91,137763,137764,137766,137768],{"class":93,"line":1339},[91,137765,51692],{"class":51381},[91,137767,137668],{"class":97},[91,137769,15695],{"class":250},[91,137771,137772,137774,137776,137778],{"class":93,"line":1345},[91,137773,137641],{"class":105},[91,137775,51518],{"class":250},[91,137777,137679],{"class":101},[91,137779,1415],{"class":250},[91,137781,137782,137784,137786,137788],{"class":93,"line":1436},[91,137783,70986],{"class":105},[91,137785,51518],{"class":250},[91,137787,62151],{"class":105},[91,137789,1415],{"class":250},[91,137791,137792],{"class":93,"line":1442},[91,137793,1689],{"class":250},[24,137795],{"style":126489,"src":137796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[14,137798,137799],{"start":1325},[17,137800,137801],{},"使用场景3",[21,137803,137804],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[82,137806,137808],{"className":126633,"code":137807,"language":126635,"meta":26,"style":26},".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",[88,137809,137810,137816,137826,137830,137834,137838,137846,137856,137866,137870,137878,137888,137898],{"__ignoreMap":26},[91,137811,137812,137814],{"class":93,"line":94},[91,137813,130481],{"class":97},[91,137815,15695],{"class":250},[91,137817,137818,137820,137822,137824],{"class":93,"line":38},[91,137819,131113],{"class":105},[91,137821,51518],{"class":250},[91,137823,23860],{"class":105},[91,137825,1415],{"class":250},[91,137827,137828],{"class":93,"line":1304},[91,137829,1689],{"class":250},[91,137831,137832],{"class":93,"line":1319},[91,137833,136094],{"class":250},[91,137835,137836],{"class":93,"line":1325},[91,137837,137627],{"class":308},[91,137839,137840,137842,137844],{"class":93,"line":1339},[91,137841,51692],{"class":51381},[91,137843,137634],{"class":97},[91,137845,15695],{"class":250},[91,137847,137848,137850,137852,137854],{"class":93,"line":1345},[91,137849,137641],{"class":105},[91,137851,51518],{"class":250},[91,137853,7775],{"class":101},[91,137855,1415],{"class":250},[91,137857,137858,137860,137862,137864],{"class":93,"line":1436},[91,137859,128249],{"class":105},[91,137861,51518],{"class":250},[91,137863,60950],{"class":105},[91,137865,1415],{"class":250},[91,137867,137868],{"class":93,"line":1442},[91,137869,1689],{"class":250},[91,137871,137872,137874,137876],{"class":93,"line":1454},[91,137873,51692],{"class":51381},[91,137875,137668],{"class":97},[91,137877,15695],{"class":250},[91,137879,137880,137882,137884,137886],{"class":93,"line":1736},[91,137881,137641],{"class":105},[91,137883,51518],{"class":250},[91,137885,137679],{"class":101},[91,137887,1415],{"class":250},[91,137889,137890,137892,137894,137896],{"class":93,"line":1741},[91,137891,70986],{"class":105},[91,137893,51518],{"class":250},[91,137895,62151],{"class":105},[91,137897,1415],{"class":250},[91,137899,137900],{"class":93,"line":1747},[91,137901,1689],{"class":250},[21,137903,137904],{},"div {\nmargin: 0 auto;\n}",[82,137906,137909],{"className":137907,"code":137908,"language":5310},[5308],"\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",[88,137910,137908],{"__ignoreMap":26},[21,137912,137913],{},"如果想让多个元素都发生变化",[21,137915,137916],{},"不能如下操作：",[21,137918,137919],{},"transition: width 2s ease 0.5s;",[21,137921,137922],{},"transition: height 2s ease 0.5s;不对！！！",[21,137924,137925],{},"上方会样式冲突，导致不显示任何过渡效果",[21,137927,137928],{},"使用如下：加逗号隔开",[21,137930,137931],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[21,137933,137934],{},"transition all 2s ease;",[217,137936,137938],{"id":137937},"_1426-过渡练习","14.2.6 过渡练习",[14,137940,137941],{},[17,137942,137943],{},"进度条",[24,137945],{"style":126489,"src":137946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[82,137948,137950],{"className":126633,"code":137949,"language":126635,"meta":26,"style":26},"div {\n  transition: all 0.3s ease;\n}\n",[88,137951,137952,137958,137976],{"__ignoreMap":26},[91,137953,137954,137956],{"class":93,"line":94},[91,137955,51692],{"class":51381},[91,137957,15695],{"class":250},[91,137959,137960,137963,137965,137967,137970,137972,137974],{"class":93,"line":38},[91,137961,137962],{"class":105},"  transition",[91,137964,51518],{"class":250},[91,137966,28240],{"class":105},[91,137968,137969],{"class":105}," 0.3",[91,137971,944],{"class":153},[91,137973,78761],{"class":105},[91,137975,1415],{"class":250},[91,137977,137978],{"class":93,"line":1304},[91,137979,1689],{"class":250},[14,137981,137982],{"start":38},[17,137983,137984],{},"小米logo",[21,137986,137987],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[82,137989,137991],{"className":126633,"code":137990,"language":126635,"meta":26,"style":26},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[88,137992,137993,137998,138004,138020,138025],{"__ignoreMap":26},[91,137994,137995],{"class":93,"line":94},[91,137996,137997],{"class":308},"\u002F* CSS3 过渡 *\u002F\n",[91,137999,138000,138002],{"class":93,"line":38},[91,138001,51692],{"class":51381},[91,138003,15695],{"class":250},[91,138005,138006,138008,138010,138012,138014,138016,138018],{"class":93,"line":1304},[91,138007,137962],{"class":105},[91,138009,51518],{"class":250},[91,138011,28240],{"class":105},[91,138013,137969],{"class":105},[91,138015,944],{"class":153},[91,138017,78761],{"class":105},[91,138019,1415],{"class":250},[91,138021,138022],{"class":93,"line":1319},[91,138023,138024],{"class":308},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[91,138026,138027],{"class":93,"line":1325},[91,138028,1689],{"class":250},[21,138030,138031],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[168,138033,138034],{},"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":26,"searchDepth":38,"depth":38,"links":138036},[138037,138042],{"id":136367,"depth":38,"text":136368,"children":138038},[138039,138040,138041],{"id":136371,"depth":1304,"text":136372},{"id":136448,"depth":1304,"text":136449},{"id":136779,"depth":1304,"text":136780},{"id":137070,"depth":38,"text":137071,"children":138043},[138044,138045],{"id":137074,"depth":1304,"text":137075},{"id":137937,"depth":1304,"text":137938},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136359,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138052,"title":138053,"body":138054,"description":23500,"extension":173,"meta":139798,"navigation":175,"path":139799,"seo":139800,"stem":139801,"__hash__":139802},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138055,"toc":139779},[138056,138059,138063,138066,138072,138078,138082,138084,138087,138090,138093,138096,138099,138102,138105,138109,138113,138116,138119,138122,138126,138129,138132,138137,138140,138143,138146,138150,138153,138162,138165,138168,138172,138175,138178,138183,138190,138204,138212,138219,138224,138227,138230,138233,138240,138244,138250,138256,138259,138262,138267,138273,138275,138283,138288,138291,138297,138299,138304,138309,138312,138314,138319,138322,138327,138332,138366,138370,138374,138377,138381,138384,138470,138473,138510,138513,138549,138553,138558,138571,138625,138627,138655,138657,138685,138691,138705,138707,138751,138753,138797,138800,138807,138818,138820,138847,138849,138875,138882,138898,138900,138994,138996,139090,139097,139100,139105,139111,139185,139188,139190,139226,139228,139264,139267,139274,139293,139296,139299,139301,139326,139328,139352,139355,139358,139388,139392,139395,139458,139460,139526,139528,139592,139595,139627,139629,139655,139657,139683,139686,139717,139719,139745,139747,139773,139776],[10,138057,138053],{"id":138058},"_15-品优购项目上篇-搭建与公共模块",[190,138060,138062],{"id":138061},"_151-项目规划","15.1 项目规划",[24,138064],{"style":126489,"src":138065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[21,138067,138068,138071],{},[398,138069,138070],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[21,138073,138074,138077],{},[398,138075,138076],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[190,138079,138081],{"id":138080},"_152-项目介绍","15.2 项目介绍",[21,138083,138070],{},[24,138085],{"style":126489,"src":138086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[21,138088,138089],{},"主页：",[24,138091],{"style":126489,"src":138092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[21,138094,138095],{},"列表页：",[24,138097],{"style":126489,"src":138098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[21,138100,138101],{},"注册页：",[24,138103],{"style":126489,"src":138104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[190,138106,138108],{"id":138107},"_153-项目搭建工作","15.3 项目搭建工作",[217,138110,138112],{"id":138111},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[24,138114],{"style":126489,"src":138115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[21,138117,138118],{},"经常更换的图片要放到upload文件夹中",[21,138120,138121],{},"不经常换的放到images文件夹中",[217,138123,138125],{"id":138124},"_1532-创建文件如下","15.3.2 创建文件如下",[24,138127],{"style":126489,"src":138128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[24,138130],{"style":126489,"src":138131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[21,138133,138134],{},[398,138135,138136],{},"初始化样式：",[21,138138,138139],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[21,138141,138142],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[21,138144,138145],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[217,138147,138149],{"id":138148},"_1533-项目模块化开发","15.3.3 项目模块化开发",[21,138151,138152],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[21,138154,138155,138156,138161],{},"这里最典型的应用就是 ",[398,138157,138158],{},[88,138159,138160],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[24,138163],{"style":126489,"src":138164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[21,138166,138167],{},"通过link方法来引入",[217,138169,138171],{"id":138170},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[24,138173],{"style":126489,"src":138174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[21,138176,138177],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[14,138179,138180],{},[17,138181,138182],{},"制作favicon图标",[21,138184,138185,138186,138189],{},"①把品优购图标切成 ",[88,138187,138188],{},"png"," 图片",[21,138191,138192,138193,138195,138196,138199,138200],{},"②把 ",[88,138194,138188],{}," 图片转换为 ",[88,138197,138198],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[487,138201,138202],{"href":138202,"rel":138203},"http:\u002F\u002Fwww.bitbug.net\u002F",[23987],[14,138205,138206,138209],{"start":38},[17,138207,138208],{},"favicon图标放到网站根目录下",[17,138210,138211],{},"HTML页面引入favicon",[21,138213,138214,138215,138218],{},"在html 页面里面的 ",[88,138216,138217],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[21,138220,138221],{},[88,138222,138223],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[21,138225,138226],{},"复制这行代码或者在生成这个的网站进行复制",[24,138228],{"style":126489,"src":138229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[21,138231,138232],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[21,138234,138235,138236],{},"例如:",[487,138237,138238],{"href":138238,"rel":138239},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23987],[217,138241,138243],{"id":138242},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[21,138245,138246,138249],{},[398,138247,138248],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[21,138251,138252,138255],{},[398,138253,138254],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[21,138257,138258],{},"页面必须有三个标签用来符合 SEO 优化",[24,138260],{"style":126489,"src":138261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[14,138263,138264],{},[17,138265,138266],{},"title网站标题",[21,138268,138269,138272],{},[398,138270,138271],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[21,138274,68871],{},[1256,138276,138277,138280],{},[17,138278,138279],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[17,138281,138282],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[14,138284,138285],{"start":38},[17,138286,138287],{},"description网站描述",[21,138289,138290],{},"简要说明我们网站主要是做什么的",[21,138292,138293,138296],{},[398,138294,138295],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[21,138298,68871],{},[21,138300,138301],{},[88,138302,138303],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[14,138305,138306],{"start":1304},[17,138307,138308],{},"keywords关键词",[21,138310,138311],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[21,138313,68871],{},[21,138315,138316],{},[88,138317,138318],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[21,138320,138321],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[21,138323,138324],{},[398,138325,138326],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[14,138328,138329],{"start":1319},[17,138330,138331],{},"代码总结",[82,138333,138334],{"className":127380,"code":130737,"language":127382,"meta":26,"style":26},[88,138335,138336,138340,138354,138358],{"__ignoreMap":26},[91,138337,138338],{"class":93,"line":94},[91,138339,130744],{"class":308},[91,138341,138342,138344,138346,138348,138350,138352],{"class":93,"line":38},[91,138343,1159],{"class":250},[91,138345,51692],{"class":51381},[91,138347,53567],{"class":97},[91,138349,296],{"class":250},[91,138351,130757],{"class":101},[91,138353,51388],{"class":250},[91,138355,138356],{"class":93,"line":1304},[91,138357,130764],{"class":250},[91,138359,138360,138362,138364],{"class":93,"line":1319},[91,138361,51866],{"class":250},[91,138363,51692],{"class":51381},[91,138365,51388],{"class":250},[190,138367,138369],{"id":138368},"_154-项目公共部分制作","15.4 项目公共部分制作",[217,138371,138373],{"id":138372},"_1541-常用模块类命名","15.4.1 常用模块类命名",[24,138375],{"style":126489,"src":138376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[217,138378,138380],{"id":138379},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[21,138382,138383],{},"布局思路：",[1256,138385,138386,138389,138392,138414,138447],{},[17,138387,138388],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[17,138390,138391],{},"里面包含版心的盒子",[17,138393,138394,138395],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1256,138396,138397,138405,138411],{},[17,138398,138399,138400,21623,138402,138404],{},"1 号盒子 里面包含一个",[88,138401,1256],{},[88,138403,1256],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[17,138406,138407,138408,138410],{},"里面的内容是水平排列，所以需要给",[88,138409,17],{},"设置浮动",[17,138412,138413],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[17,138415,138416,138417],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1256,138418,138419,138433,138438],{},[17,138420,138421,138422,21623,138424,138426,138427,138429,138430,138432],{},"2 号盒子 里面包含一个",[88,138423,1256],{},[88,138425,1256],{},"包裹",[88,138428,17],{},"，中间的",[88,138431,1170],{},"可以用样式去设置，也可以用字符 |",[17,138434,138435,138436,138410],{},"里面内容水平排列，给",[88,138437,17],{},[17,138439,138440,138441,138443,138444,138446],{},"找到里面所有偶数的 ",[88,138442,17],{}," 设置样式（偶数的 ",[88,138445,17],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[17,138448,138449,138450],{},"需要用到字体图标",[1256,138451,138452,138458,138461,138464,138467],{},[17,138453,138454,138455],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[88,138456,138457],{},"arrow-icon",[17,138459,138460],{},"先要引入字体图片的资源",[17,138462,138463],{},"在样式里面利用 font-face 来进行声明",[17,138465,138466],{},"在伪元素的 content属性设置 图标的编码",[17,138468,138469],{},"给伪元素设置font-family属性",[21,138471,138472],{},"结构实例代码：",[82,138474,138476],{"className":126633,"code":138475,"language":126635,"meta":26,"style":26},"div::before {\n  content: \"\";\n  display: block;\n}\n",[88,138477,138478,138486,138496,138506],{"__ignoreMap":26},[91,138479,138480,138482,138484],{"class":93,"line":94},[91,138481,51692],{"class":51381},[91,138483,137634],{"class":97},[91,138485,15695],{"class":250},[91,138487,138488,138490,138492,138494],{"class":93,"line":38},[91,138489,137641],{"class":105},[91,138491,51518],{"class":250},[91,138493,7775],{"class":101},[91,138495,1415],{"class":250},[91,138497,138498,138500,138502,138504],{"class":93,"line":1304},[91,138499,128249],{"class":105},[91,138501,51518],{"class":250},[91,138503,60950],{"class":105},[91,138505,1415],{"class":250},[91,138507,138508],{"class":93,"line":1319},[91,138509,1689],{"class":250},[21,138511,138512],{},"样式实例代码：",[82,138514,138515],{"className":126633,"code":138475,"language":126635,"meta":26,"style":26},[88,138516,138517,138525,138535,138545],{"__ignoreMap":26},[91,138518,138519,138521,138523],{"class":93,"line":94},[91,138520,51692],{"class":51381},[91,138522,137634],{"class":97},[91,138524,15695],{"class":250},[91,138526,138527,138529,138531,138533],{"class":93,"line":38},[91,138528,137641],{"class":105},[91,138530,51518],{"class":250},[91,138532,7775],{"class":101},[91,138534,1415],{"class":250},[91,138536,138537,138539,138541,138543],{"class":93,"line":1304},[91,138538,128249],{"class":105},[91,138540,51518],{"class":250},[91,138542,60950],{"class":105},[91,138544,1415],{"class":250},[91,138546,138547],{"class":93,"line":1319},[91,138548,1689],{"class":250},[217,138550,138552],{"id":138551},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1256,138554,138555],{},[17,138556,138557],{},"header 盒子必须要有高度",[21,138559,138560,138561,138563,138564],{},"1 号盒子是 ",[88,138562,131645],{}," 标志定位，在正常开发过程中， ",[398,138565,138566,138567,138570],{},"logo的布局其实是有讲究的，需要进行 ",[88,138568,138569],{},"logoSEO","的优化 （★★★）",[1256,138572,138573,138581,138589,138616],{},[17,138574,138575,138577,138578,138580],{},[88,138576,131645],{}," 里面首先放一个 ",[88,138579,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[17,138582,138583,138585,138586,138588],{},[88,138584,10],{}," 里面再放一个链接，可以返回首页的，把 ",[88,138587,131645],{}," 的背景图片给链接即可",[17,138590,138591,138592],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1256,138593,138594,138609],{},[17,138595,138596,138597,138600,138601,138604,138605,138608],{},"方法1：",[88,138598,138599],{},"text-indent"," 移到盒子外面（",[88,138602,138603],{},"text-indent: -9999px",") ，然后 ",[88,138606,138607],{},"overflow:hidden"," ，淘宝的做法",[17,138610,138611,138612,138615],{},"方法2：直接给 ",[88,138613,138614],{},"font-size: 0;"," 就看不到文字了，京东的做法",[17,138617,138618,138619,138621,138622,138624],{},"最后给链接一个 ",[88,138620,51488],{}," 属性，这样鼠标放到 ",[88,138623,131645],{}," 上就可以看到提示文字了",[21,138626,138472],{},[82,138628,138629],{"className":127380,"code":131866,"language":127382,"meta":26,"style":26},[88,138630,138631],{"__ignoreMap":26},[91,138632,138633,138635,138637,138639,138641,138643,138645,138647,138649,138651,138653],{"class":93,"line":94},[91,138634,1159],{"class":250},[91,138636,487],{"class":51381},[91,138638,61138],{"class":97},[91,138640,296],{"class":250},[91,138642,131881],{"class":101},[91,138644,131884],{"class":97},[91,138646,296],{"class":250},[91,138648,131889],{"class":101},[91,138650,131892],{"class":250},[91,138652,487],{"class":51381},[91,138654,51388],{"class":250},[21,138656,138512],{},[82,138658,138659],{"className":127380,"code":131866,"language":127382,"meta":26,"style":26},[88,138660,138661],{"__ignoreMap":26},[91,138662,138663,138665,138667,138669,138671,138673,138675,138677,138679,138681,138683],{"class":93,"line":94},[91,138664,1159],{"class":250},[91,138666,487],{"class":51381},[91,138668,61138],{"class":97},[91,138670,296],{"class":250},[91,138672,131881],{"class":101},[91,138674,131884],{"class":97},[91,138676,296],{"class":250},[91,138678,131889],{"class":101},[91,138680,131892],{"class":250},[91,138682,487],{"class":51381},[91,138684,51388],{"class":250},[21,138686,138687,138688,138690],{},"2 号盒子是 ",[88,138689,131658],{}," 搜索模块定位",[1256,138692,138693,138696,138699,138702],{},[17,138694,138695],{},"search盒子利用定位的方式放在对应的位置",[17,138697,138698],{},"search盒子设置绝对定位，header盒子设置相对定位",[17,138700,138701],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[17,138703,138704],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[21,138706,138472],{},[82,138708,138709],{"className":126633,"code":131953,"language":126635,"meta":26,"style":26},[88,138710,138711,138733,138737,138747],{"__ignoreMap":26},[91,138712,138713,138715,138717,138719,138721,138723,138725,138727,138729,138731],{"class":93,"line":94},[91,138714,51692],{"class":51381},[91,138716,12558],{"class":250},[91,138718,21],{"class":51381},[91,138720,12558],{"class":250},[91,138722,10],{"class":51381},[91,138724,12558],{"class":250},[91,138726,1256],{"class":51381},[91,138728,12558],{"class":250},[91,138730,17],{"class":51381},[91,138732,15695],{"class":250},[91,138734,138735],{"class":93,"line":38},[91,138736,131982],{"class":308},[91,138738,138739,138741,138743,138745],{"class":93,"line":1304},[91,138740,128249],{"class":105},[91,138742,51518],{"class":250},[91,138744,60950],{"class":105},[91,138746,1415],{"class":250},[91,138748,138749],{"class":93,"line":1319},[91,138750,1689],{"class":250},[21,138752,138512],{},[82,138754,138755],{"className":126633,"code":131953,"language":126635,"meta":26,"style":26},[88,138756,138757,138779,138783,138793],{"__ignoreMap":26},[91,138758,138759,138761,138763,138765,138767,138769,138771,138773,138775,138777],{"class":93,"line":94},[91,138760,51692],{"class":51381},[91,138762,12558],{"class":250},[91,138764,21],{"class":51381},[91,138766,12558],{"class":250},[91,138768,10],{"class":51381},[91,138770,12558],{"class":250},[91,138772,1256],{"class":51381},[91,138774,12558],{"class":250},[91,138776,17],{"class":51381},[91,138778,15695],{"class":250},[91,138780,138781],{"class":93,"line":38},[91,138782,131982],{"class":308},[91,138784,138785,138787,138789,138791],{"class":93,"line":1304},[91,138786,128249],{"class":105},[91,138788,51518],{"class":250},[91,138790,60950],{"class":105},[91,138792,1415],{"class":250},[91,138794,138795],{"class":93,"line":1319},[91,138796,1689],{"class":250},[21,138798,138799],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[21,138801,138802,138803,138806],{},"3 号盒子是 ",[88,138804,138805],{},"hotwords"," 热词模块定位",[1256,138808,138809,138812,138815],{},[17,138810,138811],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[17,138813,138814],{},"给里面所有的a标签设置 左右10px的外边距",[17,138816,138817],{},"给第一个a标签设置文字变红色（#c81623）",[21,138819,138472],{},[82,138821,138823],{"className":126633,"code":138822,"language":126635,"meta":26,"style":26},"div {\n  margin: 0 auto;\n}\n",[88,138824,138825,138831,138843],{"__ignoreMap":26},[91,138826,138827,138829],{"class":93,"line":94},[91,138828,51692],{"class":51381},[91,138830,15695],{"class":250},[91,138832,138833,138835,138837,138839,138841],{"class":93,"line":38},[91,138834,70551],{"class":105},[91,138836,51518],{"class":250},[91,138838,440],{"class":105},[91,138840,51637],{"class":105},[91,138842,1415],{"class":250},[91,138844,138845],{"class":93,"line":1304},[91,138846,1689],{"class":250},[21,138848,138512],{},[82,138850,138851],{"className":126633,"code":138822,"language":126635,"meta":26,"style":26},[88,138852,138853,138859,138871],{"__ignoreMap":26},[91,138854,138855,138857],{"class":93,"line":94},[91,138856,51692],{"class":51381},[91,138858,15695],{"class":250},[91,138860,138861,138863,138865,138867,138869],{"class":93,"line":38},[91,138862,70551],{"class":105},[91,138864,51518],{"class":250},[91,138866,440],{"class":105},[91,138868,51637],{"class":105},[91,138870,1415],{"class":250},[91,138872,138873],{"class":93,"line":1304},[91,138874,1689],{"class":250},[21,138876,138877,138878,138881],{},"4 号盒子是 ",[88,138879,138880],{},"shopcar"," 购物车模块",[1256,138883,138884,138889,138892,138895],{},[17,138885,123416,138886,138888],{},[88,138887,138880],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[17,138890,138891],{},"count 统计部分用绝对定位做",[17,138893,138894],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[17,138896,138897],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[21,138899,138472],{},[82,138901,138902],{"className":126633,"code":132065,"language":126635,"meta":26,"style":26},[88,138903,138904,138908,138922,138926,138940,138944,138958,138962,138976,138980],{"__ignoreMap":26},[91,138905,138906],{"class":93,"line":94},[91,138907,132072],{"class":308},[91,138909,138910,138912,138914,138916,138918,138920],{"class":93,"line":38},[91,138911,132077],{"class":97},[91,138913,79888],{"class":250},[91,138915,128993],{"class":105},[91,138917,51518],{"class":250},[91,138919,132086],{"class":105},[91,138921,129563],{"class":250},[91,138923,138924],{"class":93,"line":1304},[91,138925,132093],{"class":308},[91,138927,138928,138930,138932,138934,138936,138938],{"class":93,"line":1319},[91,138929,132098],{"class":97},[91,138931,79888],{"class":250},[91,138933,128993],{"class":105},[91,138935,51518],{"class":250},[91,138937,54845],{"class":105},[91,138939,129563],{"class":250},[91,138941,138942],{"class":93,"line":1325},[91,138943,132113],{"class":308},[91,138945,138946,138948,138950,138952,138954,138956],{"class":93,"line":1339},[91,138947,132118],{"class":97},[91,138949,79888],{"class":250},[91,138951,128993],{"class":105},[91,138953,51518],{"class":250},[91,138955,54912],{"class":105},[91,138957,129563],{"class":250},[91,138959,138960],{"class":93,"line":1345},[91,138961,132133],{"class":308},[91,138963,138964,138966,138968,138970,138972,138974],{"class":93,"line":1436},[91,138965,132138],{"class":97},[91,138967,79888],{"class":250},[91,138969,128993],{"class":105},[91,138971,51518],{"class":250},[91,138973,86314],{"class":105},[91,138975,129563],{"class":250},[91,138977,138978],{"class":93,"line":1442},[91,138979,132153],{"class":308},[91,138981,138982,138984,138986,138988,138990,138992],{"class":93,"line":1454},[91,138983,132158],{"class":97},[91,138985,79888],{"class":250},[91,138987,128993],{"class":105},[91,138989,51518],{"class":250},[91,138991,132167],{"class":105},[91,138993,129563],{"class":250},[21,138995,138512],{},[82,138997,138998],{"className":126633,"code":132065,"language":126635,"meta":26,"style":26},[88,138999,139000,139004,139018,139022,139036,139040,139054,139058,139072,139076],{"__ignoreMap":26},[91,139001,139002],{"class":93,"line":94},[91,139003,132072],{"class":308},[91,139005,139006,139008,139010,139012,139014,139016],{"class":93,"line":38},[91,139007,132077],{"class":97},[91,139009,79888],{"class":250},[91,139011,128993],{"class":105},[91,139013,51518],{"class":250},[91,139015,132086],{"class":105},[91,139017,129563],{"class":250},[91,139019,139020],{"class":93,"line":1304},[91,139021,132093],{"class":308},[91,139023,139024,139026,139028,139030,139032,139034],{"class":93,"line":1319},[91,139025,132098],{"class":97},[91,139027,79888],{"class":250},[91,139029,128993],{"class":105},[91,139031,51518],{"class":250},[91,139033,54845],{"class":105},[91,139035,129563],{"class":250},[91,139037,139038],{"class":93,"line":1325},[91,139039,132113],{"class":308},[91,139041,139042,139044,139046,139048,139050,139052],{"class":93,"line":1339},[91,139043,132118],{"class":97},[91,139045,79888],{"class":250},[91,139047,128993],{"class":105},[91,139049,51518],{"class":250},[91,139051,54912],{"class":105},[91,139053,129563],{"class":250},[91,139055,139056],{"class":93,"line":1345},[91,139057,132133],{"class":308},[91,139059,139060,139062,139064,139066,139068,139070],{"class":93,"line":1436},[91,139061,132138],{"class":97},[91,139063,79888],{"class":250},[91,139065,128993],{"class":105},[91,139067,51518],{"class":250},[91,139069,86314],{"class":105},[91,139071,129563],{"class":250},[91,139073,139074],{"class":93,"line":1442},[91,139075,132153],{"class":308},[91,139077,139078,139080,139082,139084,139086,139088],{"class":93,"line":1454},[91,139079,132158],{"class":97},[91,139081,79888],{"class":250},[91,139083,128993],{"class":105},[91,139085,51518],{"class":250},[91,139087,132167],{"class":105},[91,139089,129563],{"class":250},[217,139091,139093,139094,139096],{"id":139092},"_1544-nav导航模块制作","15.4.4 ",[88,139095,53794],{},"导航模块制作",[24,139098],{"style":126489,"src":139099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[21,139101,139102,139104],{},[88,139103,53794],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[21,139106,139107,139108],{},"1 号盒子左侧浮动，",[88,139109,139110],{},"dropdown",[1256,139112,139113,139123,139131,139137,139145,139155,139163,139174],{},[17,139114,139115,139116,101099,139119,139122],{},"1号盒子有讲究，根据相关性 里面包含 ",[88,139117,139118],{},".dt",[88,139120,139121],{},".dd"," 两个盒子",[17,139124,139125,139127,139128,139130],{},[88,139126,139118],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[88,139129,139121],{}," 挤到下面去了",[17,139132,139133,139134,139136],{},"给 ",[88,139135,139121],{}," 盒子设置宽度 和 高度，以及背景颜色",[17,139138,139133,139139,139141,139142,120318],{},[88,139140,139121],{}," 盒子里面定义 无序列表 （",[88,139143,139144],{},"ul > li > a",[17,139146,139147,139148,139150,139151,139154],{},"每个 ",[88,139149,17],{}," 都有一个高度（",[88,139152,139153],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[17,139156,139133,139157,139159,139160,120318],{},[88,139158,17],{}," 里面的a设置文字大小（",[88,139161,139162],{},"14px",[17,139164,139133,139165,139167,139168,139170,139171,139173],{},[88,139166,17],{}," 设置 ",[88,139169,127794],{},"，当鼠标移入的时候，让",[88,139172,17],{},"的背景变成白色，让里面的文字变成红色",[17,139175,139176,139178,139179,139181,139182,139184],{},[88,139177,17],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[88,139180,17],{},"的右侧，那么给",[88,139183,17],{},"设置相对定位",[21,139186,139187],{},"一定要注意相关性",[21,139189,138472],{},[82,139191,139192],{"className":126633,"code":138475,"language":126635,"meta":26,"style":26},[88,139193,139194,139202,139212,139222],{"__ignoreMap":26},[91,139195,139196,139198,139200],{"class":93,"line":94},[91,139197,51692],{"class":51381},[91,139199,137634],{"class":97},[91,139201,15695],{"class":250},[91,139203,139204,139206,139208,139210],{"class":93,"line":38},[91,139205,137641],{"class":105},[91,139207,51518],{"class":250},[91,139209,7775],{"class":101},[91,139211,1415],{"class":250},[91,139213,139214,139216,139218,139220],{"class":93,"line":1304},[91,139215,128249],{"class":105},[91,139217,51518],{"class":250},[91,139219,60950],{"class":105},[91,139221,1415],{"class":250},[91,139223,139224],{"class":93,"line":1319},[91,139225,1689],{"class":250},[21,139227,138512],{},[82,139229,139230],{"className":126633,"code":138475,"language":126635,"meta":26,"style":26},[88,139231,139232,139240,139250,139260],{"__ignoreMap":26},[91,139233,139234,139236,139238],{"class":93,"line":94},[91,139235,51692],{"class":51381},[91,139237,137634],{"class":97},[91,139239,15695],{"class":250},[91,139241,139242,139244,139246,139248],{"class":93,"line":38},[91,139243,137641],{"class":105},[91,139245,51518],{"class":250},[91,139247,7775],{"class":101},[91,139249,1415],{"class":250},[91,139251,139252,139254,139256,139258],{"class":93,"line":1304},[91,139253,128249],{"class":105},[91,139255,51518],{"class":250},[91,139257,60950],{"class":105},[91,139259,1415],{"class":250},[91,139261,139262],{"class":93,"line":1319},[91,139263,1689],{"class":250},[21,139265,139266],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[21,139268,139269,139270,139273],{},"2 号盒子左侧浮动，",[88,139271,139272],{},"navitems"," 导航栏组",[1256,139275,139276,139281,139290],{},[17,139277,139278,139279],{},"里面结构是 ",[88,139280,139144],{},[17,139282,139283,139284,139286,139287,139289],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[88,139285,487],{},"左右的",[88,139288,30964],{},"把两侧撑开",[17,139291,139292],{},"让文字垂直居中（行高等于高度）",[24,139294],{"style":126489,"src":139295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[21,139297,139298],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[21,139300,138472],{},[82,139302,139304],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},".box {\n  float: left;\n}\n",[88,139305,139306,139312,139322],{"__ignoreMap":26},[91,139307,139308,139310],{"class":93,"line":94},[91,139309,130481],{"class":97},[91,139311,15695],{"class":250},[91,139313,139314,139316,139318,139320],{"class":93,"line":38},[91,139315,131113],{"class":105},[91,139317,51518],{"class":250},[91,139319,23860],{"class":105},[91,139321,1415],{"class":250},[91,139323,139324],{"class":93,"line":1304},[91,139325,1689],{"class":250},[21,139327,138512],{},[82,139329,139330],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,139331,139332,139338,139348],{"__ignoreMap":26},[91,139333,139334,139336],{"class":93,"line":94},[91,139335,130481],{"class":97},[91,139337,15695],{"class":250},[91,139339,139340,139342,139344,139346],{"class":93,"line":38},[91,139341,131113],{"class":105},[91,139343,51518],{"class":250},[91,139345,23860],{"class":105},[91,139347,1415],{"class":250},[91,139349,139350],{"class":93,"line":1304},[91,139351,1689],{"class":250},[21,139353,139354],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[24,139356],{"style":126489,"src":139357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[82,139359,139360],{"className":126633,"code":130790,"language":126635,"meta":26,"style":26},[88,139361,139362,139368,139384],{"__ignoreMap":26},[91,139363,139364,139366],{"class":93,"line":94},[91,139365,51692],{"class":51381},[91,139367,15695],{"class":250},[91,139369,139370,139372,139374,139376,139378,139380,139382],{"class":93,"line":38},[91,139371,70977],{"class":105},[91,139373,51518],{"class":250},[91,139375,466],{"class":105},[91,139377,51573],{"class":153},[91,139379,51602],{"class":105},[91,139381,130025],{"class":105},[91,139383,1415],{"class":250},[91,139385,139386],{"class":93,"line":1304},[91,139387,1689],{"class":250},[217,139389,139391],{"id":139390},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[24,139393],{"style":126489,"src":139394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1256,139396,139397,139402,139407],{},[17,139398,139399,139401],{},[88,139400,131836],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[17,139403,139404,139406],{},[88,139405,131836],{}," 里面有一个大的版心",[17,139408,139409,139410,139413,139414],{},"版心里面包含 1 号盒子，",[88,139411,139412],{},"mod_service"," 是服务模块，mod 是模块的意思",[1256,139415,139416,139421,139434,139450,139455],{},[17,139417,139133,139418,139420],{},[88,139419,139412],{}," 设置高度（80px）和下边框",[17,139422,139423,139424,139427,139428,139430,139431,139433],{},"在里面定义 ",[88,139425,139426],{},"ul > li"," ,每个",[88,139429,17],{}," 宽度是300px 高度是 50px，给每个",[88,139432,17],{},"设置35px的左内边距",[17,139435,139436,139437,139439,139440,139442,139443,139445,139446,18533,139448,120318],{},"在每个",[88,139438,17],{},"里面，放一个 ",[88,139441,23033],{},"（里面放图标），一个",[88,139444,51692],{},"（里面放",[88,139447,51692],{},[88,139449,21],{},[17,139451,139133,139452,139454],{},[88,139453,23033],{},"设置浮动，让h5与这个div左右排列",[17,139456,139457],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[21,139459,138472],{},[82,139461,139463],{"className":126633,"code":139462,"language":126635,"meta":26,"style":26},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[88,139464,139465,139471,139483,139495,139522],{"__ignoreMap":26},[91,139466,139467,139469],{"class":93,"line":94},[91,139468,134390],{"class":97},[91,139470,15695],{"class":250},[91,139472,139473,139475,139477,139479,139481],{"class":93,"line":38},[91,139474,70649],{"class":105},[91,139476,51518],{"class":250},[91,139478,949],{"class":105},[91,139480,51573],{"class":153},[91,139482,1415],{"class":250},[91,139484,139485,139487,139489,139491,139493],{"class":93,"line":1304},[91,139486,70869],{"class":105},[91,139488,51518],{"class":250},[91,139490,949],{"class":105},[91,139492,51573],{"class":153},[91,139494,1415],{"class":250},[91,139496,139497,139499,139501,139503,139505,139507,139509,139511,139514,139516,139518,139520],{"class":93,"line":1319},[91,139498,70692],{"class":105},[91,139500,51518],{"class":250},[91,139502,61807],{"class":105},[91,139504,251],{"class":250},[91,139506,134429],{"class":5339},[91,139508,13837],{"class":250},[91,139510,61817],{"class":105},[91,139512,139513],{"class":105}," -10",[91,139515,51573],{"class":153},[91,139517,134448],{"class":105},[91,139519,51573],{"class":153},[91,139521,1415],{"class":250},[91,139523,139524],{"class":93,"line":1325},[91,139525,1689],{"class":250},[21,139527,138512],{},[82,139529,139530],{"className":126633,"code":139462,"language":126635,"meta":26,"style":26},[88,139531,139532,139538,139550,139562,139588],{"__ignoreMap":26},[91,139533,139534,139536],{"class":93,"line":94},[91,139535,134390],{"class":97},[91,139537,15695],{"class":250},[91,139539,139540,139542,139544,139546,139548],{"class":93,"line":38},[91,139541,70649],{"class":105},[91,139543,51518],{"class":250},[91,139545,949],{"class":105},[91,139547,51573],{"class":153},[91,139549,1415],{"class":250},[91,139551,139552,139554,139556,139558,139560],{"class":93,"line":1304},[91,139553,70869],{"class":105},[91,139555,51518],{"class":250},[91,139557,949],{"class":105},[91,139559,51573],{"class":153},[91,139561,1415],{"class":250},[91,139563,139564,139566,139568,139570,139572,139574,139576,139578,139580,139582,139584,139586],{"class":93,"line":1319},[91,139565,70692],{"class":105},[91,139567,51518],{"class":250},[91,139569,61807],{"class":105},[91,139571,251],{"class":250},[91,139573,134429],{"class":5339},[91,139575,13837],{"class":250},[91,139577,61817],{"class":105},[91,139579,139513],{"class":105},[91,139581,51573],{"class":153},[91,139583,134448],{"class":105},[91,139585,51573],{"class":153},[91,139587,1415],{"class":250},[91,139589,139590],{"class":93,"line":1325},[91,139591,1689],{"class":250},[21,139593,139594],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1256,139596,139597,139600,139606,139612,139624],{},[17,139598,139599],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[17,139601,139602,139603,120318],{},"里面的布局利用 自定义列表来实现（",[88,139604,139605],{},"dl > dt + dd",[17,139607,139133,139608,139611],{},[88,139609,139610],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[17,139613,139133,139614,139617,139618,18533,139620,139623],{},[88,139615,139616],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[88,139619,139616],{},[88,139621,139622],{},"dd","之间有些距离",[17,139625,139626],{},"最后一个 dl 结构和样式不一样，需要单独设置",[21,139628,138472],{},[82,139630,139631],{"className":126633,"code":138822,"language":126635,"meta":26,"style":26},[88,139632,139633,139639,139651],{"__ignoreMap":26},[91,139634,139635,139637],{"class":93,"line":94},[91,139636,51692],{"class":51381},[91,139638,15695],{"class":250},[91,139640,139641,139643,139645,139647,139649],{"class":93,"line":38},[91,139642,70551],{"class":105},[91,139644,51518],{"class":250},[91,139646,440],{"class":105},[91,139648,51637],{"class":105},[91,139650,1415],{"class":250},[91,139652,139653],{"class":93,"line":1304},[91,139654,1689],{"class":250},[21,139656,138512],{},[82,139658,139659],{"className":126633,"code":138822,"language":126635,"meta":26,"style":26},[88,139660,139661,139667,139679],{"__ignoreMap":26},[91,139662,139663,139665],{"class":93,"line":94},[91,139664,51692],{"class":51381},[91,139666,15695],{"class":250},[91,139668,139669,139671,139673,139675,139677],{"class":93,"line":38},[91,139670,70551],{"class":105},[91,139672,51518],{"class":250},[91,139674,440],{"class":105},[91,139676,51637],{"class":105},[91,139678,1415],{"class":250},[91,139680,139681],{"class":93,"line":1304},[91,139682,1689],{"class":250},[21,139684,139685],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1256,139687,139688,139697,139700,139711],{},[17,139689,139690,139691,139693,139694,139696],{},"分为上下两块，上面是 ",[88,139692,131853],{}," 友情链接，下面是 ",[88,139695,131846],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[17,139698,139699],{},"把内容分别复制到相应模块中",[17,139701,139133,139702,139704,139705,139707,139708,139710],{},[88,139703,131853],{}," 设置 15px 的下外边距，给",[88,139706,131853],{}," 里面 的 ",[88,139709,487],{}," 标签设置 左右 3px 的外边距",[17,139712,139713,139714,139716],{},"给",[88,139715,131846],{}," 设置 20px 的行高",[21,139718,138472],{},[82,139720,139721],{"className":126633,"code":138822,"language":126635,"meta":26,"style":26},[88,139722,139723,139729,139741],{"__ignoreMap":26},[91,139724,139725,139727],{"class":93,"line":94},[91,139726,51692],{"class":51381},[91,139728,15695],{"class":250},[91,139730,139731,139733,139735,139737,139739],{"class":93,"line":38},[91,139732,70551],{"class":105},[91,139734,51518],{"class":250},[91,139736,440],{"class":105},[91,139738,51637],{"class":105},[91,139740,1415],{"class":250},[91,139742,139743],{"class":93,"line":1304},[91,139744,1689],{"class":250},[21,139746,138512],{},[82,139748,139749],{"className":126633,"code":138822,"language":126635,"meta":26,"style":26},[88,139750,139751,139757,139769],{"__ignoreMap":26},[91,139752,139753,139755],{"class":93,"line":94},[91,139754,51692],{"class":51381},[91,139756,15695],{"class":250},[91,139758,139759,139761,139763,139765,139767],{"class":93,"line":38},[91,139760,70551],{"class":105},[91,139762,51518],{"class":250},[91,139764,440],{"class":105},[91,139766,51637],{"class":105},[91,139768,1415],{"class":250},[91,139770,139771],{"class":93,"line":1304},[91,139772,1689],{"class":250},[21,139774,139775],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[168,139777,139778],{},"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":26,"searchDepth":38,"depth":38,"links":139780},[139781,139782,139783,139790],{"id":138061,"depth":38,"text":138062},{"id":138080,"depth":38,"text":138081},{"id":138107,"depth":38,"text":138108,"children":139784},[139785,139786,139787,139788,139789],{"id":138111,"depth":1304,"text":138112},{"id":138124,"depth":1304,"text":138125},{"id":138148,"depth":1304,"text":138149},{"id":138170,"depth":1304,"text":138171},{"id":138242,"depth":1304,"text":138243},{"id":138368,"depth":38,"text":138369,"children":139791},[139792,139793,139794,139795,139797],{"id":138372,"depth":1304,"text":138373},{"id":138379,"depth":1304,"text":138380},{"id":138551,"depth":1304,"text":138552},{"id":139092,"depth":1304,"text":139796},"15.4.4 nav导航模块制作",{"id":139390,"depth":1304,"text":139391},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138053,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139804,"title":139805,"body":139806,"description":23500,"extension":173,"meta":142208,"navigation":175,"path":142209,"seo":142210,"stem":142211,"__hash__":142212},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139807,"toc":142185},[139808,139811,139815,139819,139831,139834,139837,139840,139851,139853,139877,139879,139903,139908,139911,139913,139949,139951,139987,139990,139995,139998,140001,140004,140034,140041,140044,140054,140056,140090,140093,140127,140133,140150,140152,140188,140190,140226,140231,140256,140258,140284,140286,140310,140317,140320,140384,140386,140428,140430,140470,140477,140482,140484,140514,140516,140546,140550,140553,140560,140572,140574,140600,140602,140626,140629,140631,140655,140661,140671,140673,140703,140705,140735,140742,140783,140785,140821,140823,140859,140863,140866,140869,140872,140878,140883,140886,140909,140912,140936,140939,140963,140968,140971,140974,140977,140980,140983,141057,141059,141089,141091,141121,141124,141127,141159,141163,141167,141181,141190,141193,141198,141200,141294,141296,141390,141413,141415,141439,141441,141465,141472,141475,141485,141487,141511,141516,141524,141526,141556,141561,141601,141603,141629,141631,141657,141661,141664,141669,141672,141676,141684,141691,141699,141701,141731,141733,141763,141771,141774,141777,141779,141809,141811,141841,141844,141849,141851,141875,141877,141901,141904,141989,141991,142015,142017,142041,142045,142047,142071,142073,142107,142111,142125,142128,142133,142136,142141,142144,142174,142182],[10,139809,139805],{"id":139810},"_16-品优购项目下篇-主体与页面开发",[190,139812,139814],{"id":139813},"_161-项目主体模块制作","16.1 项目主体模块制作",[217,139816,139818],{"id":139817},"_1611-首页制作","16.1.1 首页制作",[21,139820,139821,139823,139824,139826,139827,139830],{},[398,139822,102139],{}," 主体模块是 ",[398,139825,74139],{}," 里面专有的，注意需要新的样式文件 ",[398,139828,139829],{},"index.css，"," 就不要写在common.css中了",[24,139832],{"style":126489,"src":139833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[24,139835],{"style":126489,"src":139836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[21,139838,139839],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1256,139841,139842,139845,139848],{},[17,139843,139844],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[17,139846,139847],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[17,139849,139850],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[21,139852,138472],{},[82,139854,139855],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,139856,139857,139863,139873],{"__ignoreMap":26},[91,139858,139859,139861],{"class":93,"line":94},[91,139860,130481],{"class":97},[91,139862,15695],{"class":250},[91,139864,139865,139867,139869,139871],{"class":93,"line":38},[91,139866,131113],{"class":105},[91,139868,51518],{"class":250},[91,139870,23860],{"class":105},[91,139872,1415],{"class":250},[91,139874,139875],{"class":93,"line":1304},[91,139876,1689],{"class":250},[21,139878,138512],{},[82,139880,139881],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,139882,139883,139889,139899],{"__ignoreMap":26},[91,139884,139885,139887],{"class":93,"line":94},[91,139886,130481],{"class":97},[91,139888,15695],{"class":250},[91,139890,139891,139893,139895,139897],{"class":93,"line":38},[91,139892,131113],{"class":105},[91,139894,51518],{"class":250},[91,139896,23860],{"class":105},[91,139898,1415],{"class":250},[91,139900,139901],{"class":93,"line":1304},[91,139902,1689],{"class":250},[14,139904,139905],{},[17,139906,139907],{},"左侧focus模块制作",[24,139909],{"style":126489,"src":139910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[21,139912,138472],{},[82,139914,139915],{"className":126633,"code":127956,"language":126635,"meta":26,"style":26},[88,139916,139917,139925,139935,139945],{"__ignoreMap":26},[91,139918,139919,139921,139923],{"class":93,"line":94},[91,139920,53902],{"class":51381},[91,139922,61981],{"class":97},[91,139924,15695],{"class":250},[91,139926,139927,139929,139931,139933],{"class":93,"line":38},[91,139928,127971],{"class":105},[91,139930,51518],{"class":250},[91,139932,54970],{"class":105},[91,139934,1415],{"class":250},[91,139936,139937,139939,139941,139943],{"class":93,"line":1304},[91,139938,70879],{"class":105},[91,139940,51518],{"class":250},[91,139942,54818],{"class":105},[91,139944,1415],{"class":250},[91,139946,139947],{"class":93,"line":1319},[91,139948,1689],{"class":250},[21,139950,138512],{},[82,139952,139953],{"className":126633,"code":127956,"language":126635,"meta":26,"style":26},[88,139954,139955,139963,139973,139983],{"__ignoreMap":26},[91,139956,139957,139959,139961],{"class":93,"line":94},[91,139958,53902],{"class":51381},[91,139960,61981],{"class":97},[91,139962,15695],{"class":250},[91,139964,139965,139967,139969,139971],{"class":93,"line":38},[91,139966,127971],{"class":105},[91,139968,51518],{"class":250},[91,139970,54970],{"class":105},[91,139972,1415],{"class":250},[91,139974,139975,139977,139979,139981],{"class":93,"line":1304},[91,139976,70879],{"class":105},[91,139978,51518],{"class":250},[91,139980,54818],{"class":105},[91,139982,1415],{"class":250},[91,139984,139985],{"class":93,"line":1319},[91,139986,1689],{"class":250},[21,139988,139989],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[14,139991,139992],{"start":38},[17,139993,139994],{},"右侧newsflash模块制作",[24,139996],{"style":126489,"src":139997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[21,139999,140000],{},"右侧的模块 分为上中下三个盒子",[21,140002,140003],{},"结构代码：",[82,140005,140006],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,140007,140008],{"__ignoreMap":26},[91,140009,140010,140012,140014,140016,140018,140020,140022,140024,140026,140028,140030,140032],{"class":93,"line":94},[91,140011,1159],{"class":250},[91,140013,24],{"class":51381},[91,140015,55320],{"class":97},[91,140017,296],{"class":250},[91,140019,134150],{"class":101},[91,140021,55328],{"class":97},[91,140023,296],{"class":250},[91,140025,134157],{"class":101},[91,140027,134160],{"class":97},[91,140029,296],{"class":250},[91,140031,134165],{"class":101},[91,140033,51388],{"class":250},[21,140035,140036,140037,140040],{},"1 号盒子为 ",[88,140038,140039],{},"news"," 新闻模块 高度为 165px",[24,140042],{"style":126489,"src":140043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[21,140045,140046,140047,140050,140051],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[88,140048,140049],{},"news-hd","，下面是 ",[88,140052,140053],{},"news-bd",[21,140055,140003],{},[82,140057,140058],{"className":127380,"code":130737,"language":127382,"meta":26,"style":26},[88,140059,140060,140064,140078,140082],{"__ignoreMap":26},[91,140061,140062],{"class":93,"line":94},[91,140063,130744],{"class":308},[91,140065,140066,140068,140070,140072,140074,140076],{"class":93,"line":38},[91,140067,1159],{"class":250},[91,140069,51692],{"class":51381},[91,140071,53567],{"class":97},[91,140073,296],{"class":250},[91,140075,130757],{"class":101},[91,140077,51388],{"class":250},[91,140079,140080],{"class":93,"line":1304},[91,140081,130764],{"class":250},[91,140083,140084,140086,140088],{"class":93,"line":1319},[91,140085,51866],{"class":250},[91,140087,51692],{"class":51381},[91,140089,51388],{"class":250},[21,140091,140092],{},"样式代码：",[82,140094,140095],{"className":127380,"code":130737,"language":127382,"meta":26,"style":26},[88,140096,140097,140101,140115,140119],{"__ignoreMap":26},[91,140098,140099],{"class":93,"line":94},[91,140100,130744],{"class":308},[91,140102,140103,140105,140107,140109,140111,140113],{"class":93,"line":38},[91,140104,1159],{"class":250},[91,140106,51692],{"class":51381},[91,140108,53567],{"class":97},[91,140110,296],{"class":250},[91,140112,130757],{"class":101},[91,140114,51388],{"class":250},[91,140116,140117],{"class":93,"line":1304},[91,140118,130764],{"class":250},[91,140120,140121,140123,140125],{"class":93,"line":1319},[91,140122,51866],{"class":250},[91,140124,51692],{"class":51381},[91,140126,51388],{"class":250},[21,140128,140129,140130,140132],{},"上面是",[88,140131,140049],{},"，设置高度是 33px，设置下边框",[1256,140134,140135,140141],{},[17,140136,140137,140138,140140],{},"里面放一个",[88,140139,23033],{}," 标题",[17,140142,140143,140144,140146,140147,140149],{},"放一个a",[88,140145,102774],{},"，内容是 更多，然后让 ",[88,140148,487],{}," 进行右浮动，三角用伪元素设置字体图标就好",[21,140151,140003],{},[82,140153,140154],{"className":126633,"code":138475,"language":126635,"meta":26,"style":26},[88,140155,140156,140164,140174,140184],{"__ignoreMap":26},[91,140157,140158,140160,140162],{"class":93,"line":94},[91,140159,51692],{"class":51381},[91,140161,137634],{"class":97},[91,140163,15695],{"class":250},[91,140165,140166,140168,140170,140172],{"class":93,"line":38},[91,140167,137641],{"class":105},[91,140169,51518],{"class":250},[91,140171,7775],{"class":101},[91,140173,1415],{"class":250},[91,140175,140176,140178,140180,140182],{"class":93,"line":1304},[91,140177,128249],{"class":105},[91,140179,51518],{"class":250},[91,140181,60950],{"class":105},[91,140183,1415],{"class":250},[91,140185,140186],{"class":93,"line":1319},[91,140187,1689],{"class":250},[21,140189,140092],{},[82,140191,140192],{"className":126633,"code":138475,"language":126635,"meta":26,"style":26},[88,140193,140194,140202,140212,140222],{"__ignoreMap":26},[91,140195,140196,140198,140200],{"class":93,"line":94},[91,140197,51692],{"class":51381},[91,140199,137634],{"class":97},[91,140201,15695],{"class":250},[91,140203,140204,140206,140208,140210],{"class":93,"line":38},[91,140205,137641],{"class":105},[91,140207,51518],{"class":250},[91,140209,7775],{"class":101},[91,140211,1415],{"class":250},[91,140213,140214,140216,140218,140220],{"class":93,"line":1304},[91,140215,128249],{"class":105},[91,140217,51518],{"class":250},[91,140219,60950],{"class":105},[91,140221,1415],{"class":250},[91,140223,140224],{"class":93,"line":1319},[91,140225,1689],{"class":250},[21,140227,140228,140229],{},"下面是",[88,140230,140053],{},[1256,140232,140233,140241],{},[17,140234,140235,140236,101099,140238,140240],{},"里面包含 ",[88,140237,1256],{},[88,140239,17],{}," 还有链接",[17,140242,139713,140243,140245,140246,140248,140249,140252,140253],{},[88,140244,17],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[88,140247,131299],{}," 2.设置 ",[88,140250,140251],{},"white-space: nowrap;"," 3. 设置 ",[88,140254,140255],{},"text-overflow: ellipsis;",[21,140257,140003],{},[82,140259,140261],{"className":126633,"code":140260,"language":126635,"meta":26,"style":26},"div {\n  overflow: hidden;\n}\n",[88,140262,140263,140269,140280],{"__ignoreMap":26},[91,140264,140265,140267],{"class":93,"line":94},[91,140266,51692],{"class":51381},[91,140268,15695],{"class":250},[91,140270,140271,140274,140276,140278],{"class":93,"line":38},[91,140272,140273],{"class":105},"  overflow",[91,140275,51518],{"class":250},[91,140277,61795],{"class":105},[91,140279,1415],{"class":250},[91,140281,140282],{"class":93,"line":1304},[91,140283,1689],{"class":250},[21,140285,140092],{},[82,140287,140288],{"className":126633,"code":140260,"language":126635,"meta":26,"style":26},[88,140289,140290,140296,140306],{"__ignoreMap":26},[91,140291,140292,140294],{"class":93,"line":94},[91,140293,51692],{"class":51381},[91,140295,15695],{"class":250},[91,140297,140298,140300,140302,140304],{"class":93,"line":38},[91,140299,140273],{"class":105},[91,140301,51518],{"class":250},[91,140303,61795],{"class":105},[91,140305,1415],{"class":250},[91,140307,140308],{"class":93,"line":1304},[91,140309,1689],{"class":250},[21,140311,140312,140313,140316],{},"2 号盒子为 ",[88,140314,140315],{},"lifeservice"," 生活服务模块 高度为 209px",[24,140318],{"style":126489,"src":140319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1256,140321,140322,140325,140335,140359,140370],{},[17,140323,140324],{},"设置边框（左右下边框）",[17,140326,140327,140328,140331,140332,140334],{},"里面的内容 是 ",[88,140329,140330],{},"ul > 12*li","，给",[88,140333,17],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[17,140336,140337,140338],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1256,140339,140340,140345,140354],{},[17,140341,140342,140344],{},[88,140343,140315],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[17,140346,140347,140348,140350,140351,140353],{},"可以让 ",[88,140349,140315],{}," 里面的 ",[88,140352,1256],{}," 宽度为 252，就可以装的下 4 个 小 li",[17,140355,140356,140358],{},[88,140357,140315],{}," 盒子 overflow 隐藏多余的部分就可以了",[17,140360,116548,140361,140363,140364,140366,140367,140369],{},[88,140362,17],{}," 里面放一个 ",[88,140365,690],{},"（里面放图标），下面的文本用 ",[88,140368,21],{}," 标签包裹",[17,140371,139133,140372,140374,140375,140377,140378,139167,140380,140383],{},[88,140373,690],{}," 设置 24px宽和28px的高（注意 ",[88,140376,690],{}," 是行内元素， 转成行内块），给 ",[88,140379,17],{},[88,140381,140382],{},"text-align:center"," 让里面内容居中显示",[21,140385,140003],{},[82,140387,140389],{"className":126633,"code":140388,"language":126635,"meta":26,"style":26},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[88,140390,140391,140409,140414,140424],{"__ignoreMap":26},[91,140392,140393,140395,140397,140399,140401,140403,140405,140407],{"class":93,"line":94},[91,140394,91],{"class":51381},[91,140396,12558],{"class":250},[91,140398,487],{"class":51381},[91,140400,12558],{"class":250},[91,140402,23677],{"class":51381},[91,140404,12558],{"class":250},[91,140406,398],{"class":51381},[91,140408,15695],{"class":250},[91,140410,140411],{"class":93,"line":38},[91,140412,140413],{"class":308},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[91,140415,140416,140418,140420,140422],{"class":93,"line":1304},[91,140417,128249],{"class":105},[91,140419,51518],{"class":250},[91,140421,128311],{"class":105},[91,140423,1415],{"class":250},[91,140425,140426],{"class":93,"line":1319},[91,140427,1689],{"class":250},[21,140429,140092],{},[82,140431,140432],{"className":126633,"code":140388,"language":126635,"meta":26,"style":26},[88,140433,140434,140452,140456,140466],{"__ignoreMap":26},[91,140435,140436,140438,140440,140442,140444,140446,140448,140450],{"class":93,"line":94},[91,140437,91],{"class":51381},[91,140439,12558],{"class":250},[91,140441,487],{"class":51381},[91,140443,12558],{"class":250},[91,140445,23677],{"class":51381},[91,140447,12558],{"class":250},[91,140449,398],{"class":51381},[91,140451,15695],{"class":250},[91,140453,140454],{"class":93,"line":38},[91,140455,140413],{"class":308},[91,140457,140458,140460,140462,140464],{"class":93,"line":1304},[91,140459,128249],{"class":105},[91,140461,51518],{"class":250},[91,140463,128311],{"class":105},[91,140465,1415],{"class":250},[91,140467,140468],{"class":93,"line":1319},[91,140469,1689],{"class":250},[21,140471,140472,140473,140476],{},"3 号盒子为 ",[88,140474,140475],{},"bargain"," 特价商品",[1256,140478,140479],{},[17,140480,140481],{},"这个比较简单，直接插入一张图片即可",[21,140483,140003],{},[82,140485,140486],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,140487,140488],{"__ignoreMap":26},[91,140489,140490,140492,140494,140496,140498,140500,140502,140504,140506,140508,140510,140512],{"class":93,"line":94},[91,140491,1159],{"class":250},[91,140493,24],{"class":51381},[91,140495,55320],{"class":97},[91,140497,296],{"class":250},[91,140499,134150],{"class":101},[91,140501,55328],{"class":97},[91,140503,296],{"class":250},[91,140505,134157],{"class":101},[91,140507,134160],{"class":97},[91,140509,296],{"class":250},[91,140511,134165],{"class":101},[91,140513,51388],{"class":250},[21,140515,140092],{},[82,140517,140518],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,140519,140520],{"__ignoreMap":26},[91,140521,140522,140524,140526,140528,140530,140532,140534,140536,140538,140540,140542,140544],{"class":93,"line":94},[91,140523,1159],{"class":250},[91,140525,24],{"class":51381},[91,140527,55320],{"class":97},[91,140529,296],{"class":250},[91,140531,134150],{"class":101},[91,140533,55328],{"class":97},[91,140535,296],{"class":250},[91,140537,134157],{"class":101},[91,140539,134160],{"class":97},[91,140541,296],{"class":250},[91,140543,134165],{"class":101},[91,140545,51388],{"class":250},[217,140547,140549],{"id":140548},"_1612-推荐模块制作","16.1.2 推荐模块制作",[24,140551],{"style":126489,"src":140552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[21,140554,140555,140556,140559],{},"大盒子 ",[88,140557,140558],{},"recom"," 推荐模块 recommend",[1256,140561,140562],{},[17,140563,140564,140565,140567,140568,140571],{},"给这个 ",[88,140566,140558],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[88,140569,140570],{},"#ebebeb","），设置距离上边 12px",[21,140573,140003],{},[82,140575,140577],{"className":126633,"code":140576,"language":126635,"meta":26,"style":26},"div {\n  background-color: #f0f0f0;\n}\n",[88,140578,140579,140585,140596],{"__ignoreMap":26},[91,140580,140581,140583],{"class":93,"line":94},[91,140582,51692],{"class":51381},[91,140584,15695],{"class":250},[91,140586,140587,140589,140591,140594],{"class":93,"line":38},[91,140588,70959],{"class":105},[91,140590,51518],{"class":250},[91,140592,140593],{"class":105},"#f0f0f0",[91,140595,1415],{"class":250},[91,140597,140598],{"class":93,"line":1304},[91,140599,1689],{"class":250},[21,140601,140092],{},[82,140603,140604],{"className":126633,"code":140576,"language":126635,"meta":26,"style":26},[88,140605,140606,140612,140622],{"__ignoreMap":26},[91,140607,140608,140610],{"class":93,"line":94},[91,140609,51692],{"class":51381},[91,140611,15695],{"class":250},[91,140613,140614,140616,140618,140620],{"class":93,"line":38},[91,140615,70959],{"class":105},[91,140617,51518],{"class":250},[91,140619,140593],{"class":105},[91,140621,1415],{"class":250},[91,140623,140624],{"class":93,"line":1304},[91,140625,1689],{"class":250},[21,140627,140628],{},"里面包含 2 个盒子， 浮动即可",[21,140630,140003],{},[82,140632,140633],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,140634,140635,140641,140651],{"__ignoreMap":26},[91,140636,140637,140639],{"class":93,"line":94},[91,140638,130481],{"class":97},[91,140640,15695],{"class":250},[91,140642,140643,140645,140647,140649],{"class":93,"line":38},[91,140644,131113],{"class":105},[91,140646,51518],{"class":250},[91,140648,23860],{"class":105},[91,140650,1415],{"class":250},[91,140652,140653],{"class":93,"line":1304},[91,140654,1689],{"class":250},[21,140656,140657,140658],{},"1 号盒子 ",[88,140659,140660],{},"recom_hd",[1256,140662,140663,140666],{},[17,140664,140665],{},"设置宽度205px，高度163px",[17,140667,140137,140668,140670],{},[88,140669,24],{},"标签，插入图片即可",[21,140672,140003],{},[82,140674,140675],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,140676,140677],{"__ignoreMap":26},[91,140678,140679,140681,140683,140685,140687,140689,140691,140693,140695,140697,140699,140701],{"class":93,"line":94},[91,140680,1159],{"class":250},[91,140682,24],{"class":51381},[91,140684,55320],{"class":97},[91,140686,296],{"class":250},[91,140688,134150],{"class":101},[91,140690,55328],{"class":97},[91,140692,296],{"class":250},[91,140694,134157],{"class":101},[91,140696,134160],{"class":97},[91,140698,296],{"class":250},[91,140700,134165],{"class":101},[91,140702,51388],{"class":250},[21,140704,140092],{},[82,140706,140707],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,140708,140709],{"__ignoreMap":26},[91,140710,140711,140713,140715,140717,140719,140721,140723,140725,140727,140729,140731,140733],{"class":93,"line":94},[91,140712,1159],{"class":250},[91,140714,24],{"class":51381},[91,140716,55320],{"class":97},[91,140718,296],{"class":250},[91,140720,134150],{"class":101},[91,140722,55328],{"class":97},[91,140724,296],{"class":250},[91,140726,134157],{"class":101},[91,140728,134160],{"class":97},[91,140730,296],{"class":250},[91,140732,134165],{"class":101},[91,140734,51388],{"class":250},[21,140736,140737,140738,140741],{},"2 号盒子 ",[88,140739,140740],{},"recom_bd"," ，注意里面的小竖线",[1256,140743,140744,140755,140758,140763,140768],{},[17,140745,140746,140747,140749,140750,140752,140753],{},"右侧结构里面放 ",[88,140748,1256],{}," 包含 4个 ",[88,140751,17],{},"，每个li里面包含一个",[88,140754,24],{},[17,140756,140757],{},"直接利用切片工具把里面的内容当成一张图片",[17,140759,139133,140760,140762],{},[88,140761,17],{}," 设置浮动",[17,140764,139133,140765,140767],{},[88,140766,24],{}," 设置宽高，宽度 248px，高度 163px",[17,140769,140770,140771,140331,140774,140776,140777,140779,140780],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[88,140772,140773],{},"top 10px",[88,140775,17],{},"设置相对定位（注意，最后一个",[88,140778,17],{},"不用设置伪元素），可以利用 ",[88,140781,140782],{},"nth-child(-n+3){...}",[21,140784,140003],{},[82,140786,140787],{"className":126633,"code":138475,"language":126635,"meta":26,"style":26},[88,140788,140789,140797,140807,140817],{"__ignoreMap":26},[91,140790,140791,140793,140795],{"class":93,"line":94},[91,140792,51692],{"class":51381},[91,140794,137634],{"class":97},[91,140796,15695],{"class":250},[91,140798,140799,140801,140803,140805],{"class":93,"line":38},[91,140800,137641],{"class":105},[91,140802,51518],{"class":250},[91,140804,7775],{"class":101},[91,140806,1415],{"class":250},[91,140808,140809,140811,140813,140815],{"class":93,"line":1304},[91,140810,128249],{"class":105},[91,140812,51518],{"class":250},[91,140814,60950],{"class":105},[91,140816,1415],{"class":250},[91,140818,140819],{"class":93,"line":1319},[91,140820,1689],{"class":250},[21,140822,140092],{},[82,140824,140825],{"className":126633,"code":138475,"language":126635,"meta":26,"style":26},[88,140826,140827,140835,140845,140855],{"__ignoreMap":26},[91,140828,140829,140831,140833],{"class":93,"line":94},[91,140830,51692],{"class":51381},[91,140832,137634],{"class":97},[91,140834,15695],{"class":250},[91,140836,140837,140839,140841,140843],{"class":93,"line":38},[91,140838,137641],{"class":105},[91,140840,51518],{"class":250},[91,140842,7775],{"class":101},[91,140844,1415],{"class":250},[91,140846,140847,140849,140851,140853],{"class":93,"line":1304},[91,140848,128249],{"class":105},[91,140850,51518],{"class":250},[91,140852,60950],{"class":105},[91,140854,1415],{"class":250},[91,140856,140857],{"class":93,"line":1319},[91,140858,1689],{"class":250},[217,140860,140862],{"id":140861},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[24,140864],{"style":126489,"src":140865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[21,140867,140868],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[21,140870,140871],{},"第一楼是家用电器模块： 里面包含两个盒子",[21,140873,140874,140877],{},[88,140875,140876],{},"box_hd"," 制作",[21,140879,140657,140880,140882],{},[88,140881,140876],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[24,140884],{"style":126489,"src":140885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1256,140887,140888,140893,140898,140901],{},[17,140889,140890,140892],{},[88,140891,140876],{}," 给 30px 的高度，2个像素的下边框",[17,140894,140895,140896],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[88,140897,139144],{},[17,140899,140900],{},"左侧盒左浮动，右侧盒子右浮动",[17,140902,140903,140905,140906,140908],{},[88,140904,487],{},"标签之间的距离用左右的",[88,140907,30964],{},"撑开即可",[21,140910,140911],{},"结构代码",[82,140913,140914],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,140915,140916,140922,140932],{"__ignoreMap":26},[91,140917,140918,140920],{"class":93,"line":94},[91,140919,130481],{"class":97},[91,140921,15695],{"class":250},[91,140923,140924,140926,140928,140930],{"class":93,"line":38},[91,140925,131113],{"class":105},[91,140927,51518],{"class":250},[91,140929,23860],{"class":105},[91,140931,1415],{"class":250},[91,140933,140934],{"class":93,"line":1304},[91,140935,1689],{"class":250},[21,140937,140938],{},"样式代码",[82,140940,140941],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,140942,140943,140949,140959],{"__ignoreMap":26},[91,140944,140945,140947],{"class":93,"line":94},[91,140946,130481],{"class":97},[91,140948,15695],{"class":250},[91,140950,140951,140953,140955,140957],{"class":93,"line":38},[91,140952,131113],{"class":105},[91,140954,51518],{"class":250},[91,140956,23860],{"class":105},[91,140958,1415],{"class":250},[91,140960,140961],{"class":93,"line":1304},[91,140962,1689],{"class":250},[21,140964,140965,140877],{},[88,140966,140967],{},"box_bd",[21,140969,140970],{},"2 号盒子 box_bd，不要给高度",[24,140972],{"style":126489,"src":140973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[21,140975,140976],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[21,140978,140979],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[21,140981,140982],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1256,140984,140985,140997,141013],{},[17,140986,140987,140989,140990,140993,140994,140996],{},[88,140988,140967],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[88,140991,140992],{},"tab_content","，在",[88,140995,140992],{}," 里面包裹tab选项卡对应的内容",[17,140998,140999,141000,141003,141004,141006,141007,141009,141010,141012],{},"内容被一个大盒子包裹（",[88,141001,141002],{},"tab_list_item","），里面是 ",[88,141005,1256],{}," 包裹 5个 ",[88,141008,17],{},"，每个",[88,141011,17],{},"设置对应的宽度，然后设置浮动",[17,141014,141015,141016,141018,141019,141021,141022],{},"而这5个",[88,141017,17],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[88,141020,17],{},"设置",[1256,141023,141024,141042,141045],{},[17,141025,141026,141027,141029,141030,141032,141033,141035,141036,141038,141039,141041],{},"第一个小 ",[88,141028,17],{}," 分为上下结构，上面是 ",[88,141031,1256],{}," 包裹 ",[88,141034,17],{}," ，",[88,141037,17],{},"里面包裹 ",[88,141040,487],{},"，下面插入一张图片",[17,141043,141044],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[17,141046,141047,141048,141050,141051,141053,141054,141056],{},"后面的小 ",[88,141049,17],{}," 里面先放一个",[88,141052,487],{},"标签，然后在",[88,141055,487],{},"标签里面插入图片即可",[21,141058,140911],{},[82,141060,141061],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,141062,141063],{"__ignoreMap":26},[91,141064,141065,141067,141069,141071,141073,141075,141077,141079,141081,141083,141085,141087],{"class":93,"line":94},[91,141066,1159],{"class":250},[91,141068,24],{"class":51381},[91,141070,55320],{"class":97},[91,141072,296],{"class":250},[91,141074,134150],{"class":101},[91,141076,55328],{"class":97},[91,141078,296],{"class":250},[91,141080,134157],{"class":101},[91,141082,134160],{"class":97},[91,141084,296],{"class":250},[91,141086,134165],{"class":101},[91,141088,51388],{"class":250},[21,141090,140938],{},[82,141092,141093],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,141094,141095],{"__ignoreMap":26},[91,141096,141097,141099,141101,141103,141105,141107,141109,141111,141113,141115,141117,141119],{"class":93,"line":94},[91,141098,1159],{"class":250},[91,141100,24],{"class":51381},[91,141102,55320],{"class":97},[91,141104,296],{"class":250},[91,141106,134150],{"class":101},[91,141108,55328],{"class":97},[91,141110,296],{"class":250},[91,141112,134157],{"class":101},[91,141114,134160],{"class":97},[91,141116,296],{"class":250},[91,141118,134165],{"class":101},[91,141120,51388],{"class":250},[21,141122,141123],{},"tab栏切换需求！！！！！！介绍：",[24,141125],{"style":126489,"src":141126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1256,141128,141129,141137,141143,141146],{},[17,141130,141131,141134,141135],{},[88,141132,141133],{},"tab","栏的布局是 ",[88,141136,139144],{},[17,141138,141139,141140,141142],{},"有多少个",[88,141141,141133],{},"选项卡，那么对应就有多少个内容",[17,141144,141145],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[17,141147,141148,141149,141152,141153,141155,141156,141158],{},"等后面我们学习了",[88,141150,141151],{},"js","之后，我们就会配合",[88,141154,141151],{},"来实现，",[88,141157,141133],{},"栏的切换",[190,141160,141162],{"id":141161},"_162-列表制作","16.2 列表制作",[217,141164,141166],{"id":141165},"_1621-准备工作","16.2.1 准备工作",[1256,141168,141169,141172,141175,141178],{},[17,141170,141171],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[17,141173,141174],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[17,141176,141177],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[17,141179,141180],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[217,141182,141184,141185,101099,141187,141189],{"id":141183},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[88,141186,131638],{},[88,141188,53794],{}," 修改",[24,141191],{"style":126489,"src":141192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1256,141194,141195],{},[17,141196,141197],{},"秒杀盒子 sk（ second kill ） 定位即可",[21,141199,140003],{},[82,141201,141202],{"className":126633,"code":132065,"language":126635,"meta":26,"style":26},[88,141203,141204,141208,141222,141226,141240,141244,141258,141262,141276,141280],{"__ignoreMap":26},[91,141205,141206],{"class":93,"line":94},[91,141207,132072],{"class":308},[91,141209,141210,141212,141214,141216,141218,141220],{"class":93,"line":38},[91,141211,132077],{"class":97},[91,141213,79888],{"class":250},[91,141215,128993],{"class":105},[91,141217,51518],{"class":250},[91,141219,132086],{"class":105},[91,141221,129563],{"class":250},[91,141223,141224],{"class":93,"line":1304},[91,141225,132093],{"class":308},[91,141227,141228,141230,141232,141234,141236,141238],{"class":93,"line":1319},[91,141229,132098],{"class":97},[91,141231,79888],{"class":250},[91,141233,128993],{"class":105},[91,141235,51518],{"class":250},[91,141237,54845],{"class":105},[91,141239,129563],{"class":250},[91,141241,141242],{"class":93,"line":1325},[91,141243,132113],{"class":308},[91,141245,141246,141248,141250,141252,141254,141256],{"class":93,"line":1339},[91,141247,132118],{"class":97},[91,141249,79888],{"class":250},[91,141251,128993],{"class":105},[91,141253,51518],{"class":250},[91,141255,54912],{"class":105},[91,141257,129563],{"class":250},[91,141259,141260],{"class":93,"line":1345},[91,141261,132133],{"class":308},[91,141263,141264,141266,141268,141270,141272,141274],{"class":93,"line":1436},[91,141265,132138],{"class":97},[91,141267,79888],{"class":250},[91,141269,128993],{"class":105},[91,141271,51518],{"class":250},[91,141273,86314],{"class":105},[91,141275,129563],{"class":250},[91,141277,141278],{"class":93,"line":1442},[91,141279,132153],{"class":308},[91,141281,141282,141284,141286,141288,141290,141292],{"class":93,"line":1454},[91,141283,132158],{"class":97},[91,141285,79888],{"class":250},[91,141287,128993],{"class":105},[91,141289,51518],{"class":250},[91,141291,132167],{"class":105},[91,141293,129563],{"class":250},[21,141295,140092],{},[82,141297,141298],{"className":126633,"code":132065,"language":126635,"meta":26,"style":26},[88,141299,141300,141304,141318,141322,141336,141340,141354,141358,141372,141376],{"__ignoreMap":26},[91,141301,141302],{"class":93,"line":94},[91,141303,132072],{"class":308},[91,141305,141306,141308,141310,141312,141314,141316],{"class":93,"line":38},[91,141307,132077],{"class":97},[91,141309,79888],{"class":250},[91,141311,128993],{"class":105},[91,141313,51518],{"class":250},[91,141315,132086],{"class":105},[91,141317,129563],{"class":250},[91,141319,141320],{"class":93,"line":1304},[91,141321,132093],{"class":308},[91,141323,141324,141326,141328,141330,141332,141334],{"class":93,"line":1319},[91,141325,132098],{"class":97},[91,141327,79888],{"class":250},[91,141329,128993],{"class":105},[91,141331,51518],{"class":250},[91,141333,54845],{"class":105},[91,141335,129563],{"class":250},[91,141337,141338],{"class":93,"line":1325},[91,141339,132113],{"class":308},[91,141341,141342,141344,141346,141348,141350,141352],{"class":93,"line":1339},[91,141343,132118],{"class":97},[91,141345,79888],{"class":250},[91,141347,128993],{"class":105},[91,141349,51518],{"class":250},[91,141351,54912],{"class":105},[91,141353,129563],{"class":250},[91,141355,141356],{"class":93,"line":1345},[91,141357,132133],{"class":308},[91,141359,141360,141362,141364,141366,141368,141370],{"class":93,"line":1436},[91,141361,132138],{"class":97},[91,141363,79888],{"class":250},[91,141365,128993],{"class":105},[91,141367,51518],{"class":250},[91,141369,86314],{"class":105},[91,141371,129563],{"class":250},[91,141373,141374],{"class":93,"line":1442},[91,141375,132153],{"class":308},[91,141377,141378,141380,141382,141384,141386,141388],{"class":93,"line":1454},[91,141379,132158],{"class":97},[91,141381,79888],{"class":250},[91,141383,128993],{"class":105},[91,141385,51518],{"class":250},[91,141387,132167],{"class":105},[91,141389,129563],{"class":250},[1256,141391,141392,141403],{},[17,141393,141394,141395,141398,141399,101099,141401],{},"1 号盒子左侧浮动 ",[88,141396,141397],{},"sk_list"," 里面包含 ",[88,141400,1256],{},[88,141402,17],{},[17,141404,141405,141406,141398,141409,101099,141411],{},"2 号盒子左侧浮动 ",[88,141407,141408],{},"sk_con",[88,141410,1256],{},[88,141412,17],{},[21,141414,140003],{},[82,141416,141417],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,141418,141419,141425,141435],{"__ignoreMap":26},[91,141420,141421,141423],{"class":93,"line":94},[91,141422,130481],{"class":97},[91,141424,15695],{"class":250},[91,141426,141427,141429,141431,141433],{"class":93,"line":38},[91,141428,131113],{"class":105},[91,141430,51518],{"class":250},[91,141432,23860],{"class":105},[91,141434,1415],{"class":250},[91,141436,141437],{"class":93,"line":1304},[91,141438,1689],{"class":250},[21,141440,140092],{},[82,141442,141443],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,141444,141445,141451,141461],{"__ignoreMap":26},[91,141446,141447,141449],{"class":93,"line":94},[91,141448,130481],{"class":97},[91,141450,15695],{"class":250},[91,141452,141453,141455,141457,141459],{"class":93,"line":38},[91,141454,131113],{"class":105},[91,141456,51518],{"class":250},[91,141458,23860],{"class":105},[91,141460,1415],{"class":250},[91,141462,141463],{"class":93,"line":1304},[91,141464,1689],{"class":250},[217,141466,141468,141469],{"id":141467},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[88,141470,141471],{},"sk_container",[24,141473],{"style":126489,"src":141474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1256,141476,141477,141482],{},[17,141478,140657,141479,141481],{},[88,141480,141471],{}," 给宽度 1200，不要给高度",[17,141483,141484],{},"一定不要忘记清除浮动",[21,141486,140003],{},[82,141488,141489],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,141490,141491,141497,141507],{"__ignoreMap":26},[91,141492,141493,141495],{"class":93,"line":94},[91,141494,130481],{"class":97},[91,141496,15695],{"class":250},[91,141498,141499,141501,141503,141505],{"class":93,"line":38},[91,141500,131113],{"class":105},[91,141502,51518],{"class":250},[91,141504,23860],{"class":105},[91,141506,1415],{"class":250},[91,141508,141509],{"class":93,"line":1304},[91,141510,1689],{"class":250},[14,141512,141513],{},[17,141514,141515],{},"sk_hd制作",[1256,141517,141518],{},[17,141519,140737,141520,141523],{},[88,141521,141522],{},"sk_hd"," ，插入图片即可",[21,141525,140003],{},[82,141527,141528],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,141529,141530],{"__ignoreMap":26},[91,141531,141532,141534,141536,141538,141540,141542,141544,141546,141548,141550,141552,141554],{"class":93,"line":94},[91,141533,1159],{"class":250},[91,141535,24],{"class":51381},[91,141537,55320],{"class":97},[91,141539,296],{"class":250},[91,141541,134150],{"class":101},[91,141543,55328],{"class":97},[91,141545,296],{"class":250},[91,141547,134157],{"class":101},[91,141549,134160],{"class":97},[91,141551,296],{"class":250},[91,141553,134165],{"class":101},[91,141555,51388],{"class":250},[14,141557,141558],{"start":38},[17,141559,141560],{},"sk_bd制作",[1256,141562,141563],{},[17,141564,141565,141566,141569,141570,101099,141572,141574],{},"3 号盒子 ",[88,141567,141568],{},"sk_bd"," ，里面包含很多的 ",[88,141571,1256],{},[88,141573,17],{},[1256,141575,141576,141585],{},[17,141577,141578,141579,141581,141582,141584],{},"当鼠标移入到 ",[88,141580,17],{}," 上面的时候显示红色的边框，在这里先给 ",[88,141583,17],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[17,141586,141587,141588,141590,141591,141593,141594,141597,141598,141600],{},"由于给每个 ",[88,141589,17],{}," 都设置了外边距，导致一行的最后一个 ",[88,141592,17],{}," 掉了下来，在这里我们利用 ",[88,141595,141596],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[88,141599,17],{},"，去掉外边距就好了",[21,141602,140003],{},[82,141604,141605],{"className":126633,"code":138822,"language":126635,"meta":26,"style":26},[88,141606,141607,141613,141625],{"__ignoreMap":26},[91,141608,141609,141611],{"class":93,"line":94},[91,141610,51692],{"class":51381},[91,141612,15695],{"class":250},[91,141614,141615,141617,141619,141621,141623],{"class":93,"line":38},[91,141616,70551],{"class":105},[91,141618,51518],{"class":250},[91,141620,440],{"class":105},[91,141622,51637],{"class":105},[91,141624,1415],{"class":250},[91,141626,141627],{"class":93,"line":1304},[91,141628,1689],{"class":250},[21,141630,140092],{},[82,141632,141633],{"className":126633,"code":138822,"language":126635,"meta":26,"style":26},[88,141634,141635,141641,141653],{"__ignoreMap":26},[91,141636,141637,141639],{"class":93,"line":94},[91,141638,51692],{"class":51381},[91,141640,15695],{"class":250},[91,141642,141643,141645,141647,141649,141651],{"class":93,"line":38},[91,141644,70551],{"class":105},[91,141646,51518],{"class":250},[91,141648,440],{"class":105},[91,141650,51637],{"class":105},[91,141652,1415],{"class":250},[91,141654,141655],{"class":93,"line":1304},[91,141656,1689],{"class":250},[190,141658,141660],{"id":141659},"_163-注册页面制作","16.3 注册页面制作",[24,141662],{"style":126489,"src":141663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[21,141665,141666,141668],{},[398,141667,9148],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[24,141670],{"style":126489,"src":141671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[217,141673,141675],{"id":141674},"_1631-准备工作","16.3.1 准备工作",[1256,141677,141678,141681],{},[17,141679,141680],{},"创建register.html，引入 base.css，引入favicon图标",[17,141682,141683],{},"创建register.css ，在html页面进行引入",[217,141685,141687,141688,141690],{"id":141686},"_1632-header-头部实现","16.3.2 ",[88,141689,131638],{}," 头部实现",[1256,141692,141693,141696],{},[17,141694,141695],{},"整个内容用 版心 进行包裹",[17,141697,141698],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[21,141700,140003],{},[82,141702,141703],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,141704,141705],{"__ignoreMap":26},[91,141706,141707,141709,141711,141713,141715,141717,141719,141721,141723,141725,141727,141729],{"class":93,"line":94},[91,141708,1159],{"class":250},[91,141710,24],{"class":51381},[91,141712,55320],{"class":97},[91,141714,296],{"class":250},[91,141716,134150],{"class":101},[91,141718,55328],{"class":97},[91,141720,296],{"class":250},[91,141722,134157],{"class":101},[91,141724,134160],{"class":97},[91,141726,296],{"class":250},[91,141728,134165],{"class":101},[91,141730,51388],{"class":250},[21,141732,140092],{},[82,141734,141735],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,141736,141737],{"__ignoreMap":26},[91,141738,141739,141741,141743,141745,141747,141749,141751,141753,141755,141757,141759,141761],{"class":93,"line":94},[91,141740,1159],{"class":250},[91,141742,24],{"class":51381},[91,141744,55320],{"class":97},[91,141746,296],{"class":250},[91,141748,134150],{"class":101},[91,141750,55328],{"class":97},[91,141752,296],{"class":250},[91,141754,134157],{"class":101},[91,141756,134160],{"class":97},[91,141758,296],{"class":250},[91,141760,134165],{"class":101},[91,141762,51388],{"class":250},[217,141764,141766,141767,141770],{"id":141765},"_1633-registerarea-主体模块实现","16.3.3 ",[88,141768,141769],{},"registerarea"," 主体模块实现",[24,141772],{"style":126489,"src":141773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[21,141775,141776],{},"整个大盒子 高度为 522px，设置4个边框",[21,141778,140003],{},[82,141780,141781],{"className":126633,"code":130790,"language":126635,"meta":26,"style":26},[88,141782,141783,141789,141805],{"__ignoreMap":26},[91,141784,141785,141787],{"class":93,"line":94},[91,141786,51692],{"class":51381},[91,141788,15695],{"class":250},[91,141790,141791,141793,141795,141797,141799,141801,141803],{"class":93,"line":38},[91,141792,70977],{"class":105},[91,141794,51518],{"class":250},[91,141796,466],{"class":105},[91,141798,51573],{"class":153},[91,141800,51602],{"class":105},[91,141802,130025],{"class":105},[91,141804,1415],{"class":250},[91,141806,141807],{"class":93,"line":1304},[91,141808,1689],{"class":250},[21,141810,140092],{},[82,141812,141813],{"className":126633,"code":130790,"language":126635,"meta":26,"style":26},[88,141814,141815,141821,141837],{"__ignoreMap":26},[91,141816,141817,141819],{"class":93,"line":94},[91,141818,51692],{"class":51381},[91,141820,15695],{"class":250},[91,141822,141823,141825,141827,141829,141831,141833,141835],{"class":93,"line":38},[91,141824,70977],{"class":105},[91,141826,51518],{"class":250},[91,141828,466],{"class":105},[91,141830,51573],{"class":153},[91,141832,51602],{"class":105},[91,141834,130025],{"class":105},[91,141836,1415],{"class":250},[91,141838,141839],{"class":93,"line":1304},[91,141840,1689],{"class":250},[21,141842,141843],{},"1号盒子 是一个 h3 标签，放标题",[1256,141845,141846],{},[17,141847,141848],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[21,141850,140003],{},[82,141852,141853],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,141854,141855,141861,141871],{"__ignoreMap":26},[91,141856,141857,141859],{"class":93,"line":94},[91,141858,130481],{"class":97},[91,141860,15695],{"class":250},[91,141862,141863,141865,141867,141869],{"class":93,"line":38},[91,141864,131113],{"class":105},[91,141866,51518],{"class":250},[91,141868,23860],{"class":105},[91,141870,1415],{"class":250},[91,141872,141873],{"class":93,"line":1304},[91,141874,1689],{"class":250},[21,141876,140092],{},[82,141878,141879],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,141880,141881,141887,141897],{"__ignoreMap":26},[91,141882,141883,141885],{"class":93,"line":94},[91,141884,130481],{"class":97},[91,141886,15695],{"class":250},[91,141888,141889,141891,141893,141895],{"class":93,"line":38},[91,141890,131113],{"class":105},[91,141892,51518],{"class":250},[91,141894,23860],{"class":105},[91,141896,1415],{"class":250},[91,141898,141899],{"class":93,"line":1304},[91,141900,1689],{"class":250},[21,141902,141903],{},"2号盒子 里面放注册的内容",[1256,141905,141906,141909,141918,141932,141945,141948,141951,141969,141983],{},[17,141907,141908],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[17,141910,141911,141912,141914,141915,141917],{},"里面的内容利用 ",[88,141913,1256],{}," 包含 ",[88,141916,17],{}," 来实现的（不需要用表格）",[17,141919,139147,141920,141922,141923,141925,141926,141928,141929,141931],{},[88,141921,17],{}," 里面，左侧放 ",[88,141924,33689],{}," 标签， 中间放",[88,141927,53902],{}," 标签， 右侧放 ",[88,141930,91],{}," 提示信息",[17,141933,141934,141935,141937,141938,141940,141941,141944],{},"左侧 ",[88,141936,33689],{},"里面的文字都是右对齐，我们可以给",[88,141939,33689],{},"设置一个宽度（88px），然后利用",[88,141942,141943],{},"text-align"," 来设置右对齐",[17,141946,141947],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[17,141949,141950],{},"右侧 span修饰一下文字颜色",[17,141952,141953,141954],{},"提示信息的样式优化",[1256,141955,141956,141959,141962],{},[17,141957,141958],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[17,141960,141961],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[17,141963,141964,141965,141968],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[88,141966,141967],{},"vertical-algin"," 来设置 图片与文字对齐方式",[17,141970,141971,141972],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1256,141973,141974,141980],{},[17,141975,141976,141977,141979],{},"设置 ",[88,141978,23677],{}," 的 左右 12px 的内边距，设置一下文字颜色",[17,141981,141982],{},"分别设置 背景颜色",[17,141984,141985,141986,141988],{},"同意协议 和 完成注册 都是用 ",[88,141987,17],{}," 进行包裹",[21,141990,140003],{},[82,141992,141993],{"className":126633,"code":140576,"language":126635,"meta":26,"style":26},[88,141994,141995,142001,142011],{"__ignoreMap":26},[91,141996,141997,141999],{"class":93,"line":94},[91,141998,51692],{"class":51381},[91,142000,15695],{"class":250},[91,142002,142003,142005,142007,142009],{"class":93,"line":38},[91,142004,70959],{"class":105},[91,142006,51518],{"class":250},[91,142008,140593],{"class":105},[91,142010,1415],{"class":250},[91,142012,142013],{"class":93,"line":1304},[91,142014,1689],{"class":250},[21,142016,140092],{},[82,142018,142019],{"className":126633,"code":140576,"language":126635,"meta":26,"style":26},[88,142020,142021,142027,142037],{"__ignoreMap":26},[91,142022,142023,142025],{"class":93,"line":94},[91,142024,51692],{"class":51381},[91,142026,15695],{"class":250},[91,142028,142029,142031,142033,142035],{"class":93,"line":38},[91,142030,70959],{"class":105},[91,142032,51518],{"class":250},[91,142034,140593],{"class":105},[91,142036,1415],{"class":250},[91,142038,142039],{"class":93,"line":1304},[91,142040,1689],{"class":250},[217,142042,142044],{"id":142043},"_1634-底部实现","16.3.4 底部实现",[21,142046,140003],{},[82,142048,142049],{"className":126633,"code":140576,"language":126635,"meta":26,"style":26},[88,142050,142051,142057,142067],{"__ignoreMap":26},[91,142052,142053,142055],{"class":93,"line":94},[91,142054,51692],{"class":51381},[91,142056,15695],{"class":250},[91,142058,142059,142061,142063,142065],{"class":93,"line":38},[91,142060,70959],{"class":105},[91,142062,51518],{"class":250},[91,142064,140593],{"class":105},[91,142066,1415],{"class":250},[91,142068,142069],{"class":93,"line":1304},[91,142070,1689],{"class":250},[21,142072,140092],{},[82,142074,142075],{"className":127380,"code":130737,"language":127382,"meta":26,"style":26},[88,142076,142077,142081,142095,142099],{"__ignoreMap":26},[91,142078,142079],{"class":93,"line":94},[91,142080,130744],{"class":308},[91,142082,142083,142085,142087,142089,142091,142093],{"class":93,"line":38},[91,142084,1159],{"class":250},[91,142086,51692],{"class":51381},[91,142088,53567],{"class":97},[91,142090,296],{"class":250},[91,142092,130757],{"class":101},[91,142094,51388],{"class":250},[91,142096,142097],{"class":93,"line":1304},[91,142098,130764],{"class":250},[91,142100,142101,142103,142105],{"class":93,"line":1319},[91,142102,51866],{"class":250},[91,142104,51692],{"class":51381},[91,142106,51388],{"class":250},[190,142108,142110],{"id":142109},"_164-项目总结","16.4 项目总结",[14,142112,142113,142116,142119,142122],{},[17,142114,142115],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[17,142117,142118],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[17,142120,142121],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[17,142123,142124],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[24,142126],{"style":126489,"src":142127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[14,142129,142130],{"start":1325},[17,142131,142132],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[24,142134],{"style":126489,"src":142135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[14,142137,142138],{"start":1339},[17,142139,142140],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[24,142142],{"style":126489,"src":142143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[82,142145,142146],{"className":127380,"code":136790,"language":127382,"meta":26,"style":26},[88,142147,142148],{"__ignoreMap":26},[91,142149,142150,142152,142154,142156,142158,142160,142162,142164,142166,142168,142170,142172],{"class":93,"line":94},[91,142151,1159],{"class":250},[91,142153,53902],{"class":51381},[91,142155,53905],{"class":97},[91,142157,296],{"class":250},[91,142159,62780],{"class":101},[91,142161,15043],{"class":97},[91,142163,296],{"class":250},[91,142165,136811],{"class":101},[91,142167,61101],{"class":97},[91,142169,296],{"class":250},[91,142171,136818],{"class":101},[91,142173,51388],{"class":250},[14,142175,142176,142179],{"start":1345},[17,142177,142178],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[17,142180,142181],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[168,142183,142184],{},"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":26,"searchDepth":38,"depth":38,"links":142186},[142187,142192,142199,142207],{"id":139813,"depth":38,"text":139814,"children":142188},[142189,142190,142191],{"id":139817,"depth":1304,"text":139818},{"id":140548,"depth":1304,"text":140549},{"id":140861,"depth":1304,"text":140862},{"id":141161,"depth":38,"text":141162,"children":142193},[142194,142195,142197],{"id":141165,"depth":1304,"text":141166},{"id":141183,"depth":1304,"text":142196},"16.2.2 列表页 header 和 nav 修改",{"id":141467,"depth":1304,"text":142198},"16.2.3 列表页主体 sk_container",{"id":141659,"depth":38,"text":141660,"children":142200},[142201,142202,142204,142206],{"id":141674,"depth":1304,"text":141675},{"id":141686,"depth":1304,"text":142203},"16.3.2 header 头部实现",{"id":141765,"depth":1304,"text":142205},"16.3.3 registerarea 主体模块实现",{"id":142043,"depth":1304,"text":142044},{"id":142109,"depth":38,"text":142110},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139805,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142214,"title":142215,"body":142216,"description":23500,"extension":173,"meta":142324,"navigation":175,"path":142325,"seo":142326,"stem":142327,"__hash__":142328},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142217,"toc":142319},[142218,142221,142225,142228,142231,142240,142249,142253,142258,142265,142283,142286,142289,142292,142295,142298,142301,142304,142307,142310,142313,142316],[10,142219,142215],{"id":142220},"_17-web服务器与网站发布",[190,142222,142224],{"id":142223},"_171-web服务器","17.1 Web服务器",[21,142226,142227],{},"把自己网站上传到服务器上，可以让其他人访问",[24,142229],{"style":126489,"src":142230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[21,142232,142233,142236,142237],{},[398,142234,142235],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[398,142238,142239],{},"Web 服务器等",[21,142241,142242,142243,101099,142246,25862],{},"根据服务器在网络中所在的位置不同，又可分为 ",[398,142244,142245],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[398,142247,142248],{},"远程服务器",[217,142250,142252],{"id":142251},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[21,142254,142255],{},[398,142256,142257],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[21,142259,142260,142261],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[487,142262,142263],{"href":142263,"rel":142264},"http:\u002F\u002Ffree.3v.do\u002F",[23987],[1256,142266,142267,142270,142273,142280],{},[17,142268,142269],{},"去免费空间网站注册账号。",[17,142271,142272],{},"记录下主机名、用户名、密码、域名。",[17,142274,142275,142276,142279],{},"利用 ",[88,142277,142278],{},"utftp"," 软件 上传网站到远程服务器",[17,142281,142282],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[21,142284,142285],{},"使用软件上传，对上传软件文件进行解压",[24,142287],{"style":126489,"src":142288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[24,142290],{"style":126489,"src":142291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[21,142293,142294],{},"输入刚刚申请的服务器账号信息：",[24,142296],{"style":126489,"src":142297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[24,142299],{"style":126489,"src":142300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[24,142302],{"style":126489,"src":142303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[24,142305],{"style":126489,"src":142306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[21,142308,142309],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[24,142311],{"style":126489,"src":142312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[21,142314,142315],{},"浏览器输入域名即可访问",[21,142317,142318],{},"首页一定必须是index",{"title":26,"searchDepth":38,"depth":38,"links":142320},[142321],{"id":142223,"depth":38,"text":142224,"children":142322},[142323],{"id":142251,"depth":1304,"text":142252},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142215,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142330,"title":142331,"body":142332,"description":23500,"extension":173,"meta":143259,"navigation":175,"path":143260,"seo":143261,"stem":143262,"__hash__":143263},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142333,"toc":143242},[142334,142337,142341,142344,142347,142358,142361,142365,142369,142374,142377,142380,142383,142386,142390,142416,142420,142424,142427,142430,142434,142467,142471,142474,142477,142541,142545,142549,142552,142555,142558,142562,142607,142611,142614,142644,142648,142652,142655,142658,142662,142665,142734,142737,142845,142847,142853,142857,142860,142863,142959,142962,142966,142990,142994,142997,143001,143004,143008,143011,143014,143017,143020,143024,143027,143030,143034,143038,143041,143044,143047,143050,143054,143057,143061,143064,143067,143112,143116,143120,143123,143126,143129,143161,143165,143168,143202,143206,143209,143239],[10,142335,142331],{"id":142336},"_18-2d动画与3d转换",[190,142338,142340],{"id":142339},"_181-css3-2d转换","18.1 CSS3 2D转换",[21,142342,142343],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[21,142345,142346],{},"转换（transform）你可以简单理解为变形",[1256,142348,142349,142352,142355],{},[17,142350,142351],{},"移动：translate",[17,142353,142354],{},"旋转：rotate",[17,142356,142357],{},"缩放：scale",[24,142359],{"style":126489,"src":142360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[217,142362,142364],{"id":142363},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22121,142366,142368],{"id":142367},"_18111-translate介绍","18.1.1.1 translate介绍",[21,142370,142371,142372],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[398,142373,133292],{},[24,142375],{"style":126489,"src":142376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[21,142378,142379],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[21,142381,142382],{},"对于行内元素无效",[21,142384,142385],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22121,142387,142389],{"id":142388},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[82,142391,142392],{"className":126633,"code":138822,"language":126635,"meta":26,"style":26},[88,142393,142394,142400,142412],{"__ignoreMap":26},[91,142395,142396,142398],{"class":93,"line":94},[91,142397,51692],{"class":51381},[91,142399,15695],{"class":250},[91,142401,142402,142404,142406,142408,142410],{"class":93,"line":38},[91,142403,70551],{"class":105},[91,142405,51518],{"class":250},[91,142407,440],{"class":105},[91,142409,51637],{"class":105},[91,142411,1415],{"class":250},[91,142413,142414],{"class":93,"line":1304},[91,142415,1689],{"class":250},[217,142417,142419],{"id":142418},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22121,142421,142423],{"id":142422},"_18121-rotate介绍","18.1.2.1 rotate介绍",[21,142425,142426],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[24,142428],{"style":126489,"src":142429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22121,142431,142433],{"id":142432},"_18122-旋转效果","18.1.2.2 旋转效果",[82,142435,142437],{"className":126633,"code":142436,"language":126635,"meta":26,"style":26},"div {\n  transform: rotate(45deg);\n}\n",[88,142438,142439,142445,142463],{"__ignoreMap":26},[91,142440,142441,142443],{"class":93,"line":94},[91,142442,51692],{"class":51381},[91,142444,15695],{"class":250},[91,142446,142447,142449,142451,142454,142456,142458,142461],{"class":93,"line":38},[91,142448,136617],{"class":105},[91,142450,51518],{"class":250},[91,142452,142453],{"class":105},"rotate",[91,142455,251],{"class":250},[91,142457,778],{"class":105},[91,142459,142460],{"class":153},"deg",[91,142462,2842],{"class":250},[91,142464,142465],{"class":93,"line":1304},[91,142466,1689],{"class":250},[22121,142468,142470],{"id":142469},"_18123-三角做法","18.1.2.3 三角做法",[21,142472,142473],{},"该下标当经过最外层大盒子时会实现向上反转",[24,142475],{"style":126489,"src":142476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[82,142478,142479],{"className":126633,"code":135153,"language":126635,"meta":26,"style":26},[88,142480,142481,142485,142491,142501,142511,142527,142537],{"__ignoreMap":26},[91,142482,142483],{"class":93,"line":94},[91,142484,135160],{"class":308},[91,142486,142487,142489],{"class":93,"line":38},[91,142488,135165],{"class":97},[91,142490,15695],{"class":250},[91,142492,142493,142495,142497,142499],{"class":93,"line":1304},[91,142494,70649],{"class":105},[91,142496,51518],{"class":250},[91,142498,440],{"class":105},[91,142500,1415],{"class":250},[91,142502,142503,142505,142507,142509],{"class":93,"line":1319},[91,142504,70869],{"class":105},[91,142506,51518],{"class":250},[91,142508,440],{"class":105},[91,142510,1415],{"class":250},[91,142512,142513,142515,142517,142519,142521,142523,142525],{"class":93,"line":1325},[91,142514,70977],{"class":105},[91,142516,51518],{"class":250},[91,142518,695],{"class":105},[91,142520,51573],{"class":153},[91,142522,51602],{"class":105},[91,142524,64072],{"class":105},[91,142526,1415],{"class":250},[91,142528,142529,142531,142533,142535],{"class":93,"line":1339},[91,142530,135208],{"class":105},[91,142532,51518],{"class":250},[91,142534,62450],{"class":105},[91,142536,1415],{"class":250},[91,142538,142539],{"class":93,"line":1345},[91,142540,1689],{"class":250},[217,142542,142544],{"id":142543},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22121,142546,142548],{"id":142547},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[21,142550,142551],{},"设置中心点",[24,142553],{"style":126489,"src":142554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[21,142556,142557],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22121,142559,142561],{"id":142560},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[82,142563,142565],{"className":126633,"code":142564,"language":126635,"meta":26,"style":26},"\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",[88,142566,142567,142572,142578,142593,142598,142603],{"__ignoreMap":26},[91,142568,142569],{"class":93,"line":94},[91,142570,142571],{"class":308},"\u002F* 转换中心点 *\u002F\n",[91,142573,142574,142576],{"class":93,"line":38},[91,142575,51692],{"class":51381},[91,142577,15695],{"class":250},[91,142579,142580,142583,142585,142587,142589,142591],{"class":93,"line":1304},[91,142581,142582],{"class":105},"  transform-origin",[91,142584,51518],{"class":250},[91,142586,51673],{"class":105},[91,142588,17267],{"class":105},[91,142590,130496],{"class":250},[91,142592,135306],{"class":308},[91,142594,142595],{"class":93,"line":1319},[91,142596,142597],{"class":308},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[91,142599,142600],{"class":93,"line":1325},[91,142601,142602],{"class":308},"  \u002F* transform-origin: left top; *\u002F\n",[91,142604,142605],{"class":93,"line":1339},[91,142606,1689],{"class":250},[22121,142608,142610],{"id":142609},"_18133-旋转案例","18.1.3.3 旋转案例",[24,142612],{"style":126489,"src":142613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[82,142615,142616],{"className":126633,"code":142436,"language":126635,"meta":26,"style":26},[88,142617,142618,142624,142640],{"__ignoreMap":26},[91,142619,142620,142622],{"class":93,"line":94},[91,142621,51692],{"class":51381},[91,142623,15695],{"class":250},[91,142625,142626,142628,142630,142632,142634,142636,142638],{"class":93,"line":38},[91,142627,136617],{"class":105},[91,142629,51518],{"class":250},[91,142631,142453],{"class":105},[91,142633,251],{"class":250},[91,142635,778],{"class":105},[91,142637,142460],{"class":153},[91,142639,2842],{"class":250},[91,142641,142642],{"class":93,"line":1304},[91,142643,1689],{"class":250},[217,142645,142647],{"id":142646},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22121,142649,142651],{"id":142650},"_18141-scale介绍","18.1.4.1 scale介绍",[21,142653,142654],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[24,142656],{"style":126489,"src":142657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22121,142659,142661],{"id":142660},"_18142-分页按钮","18.1.4.2 分页按钮",[24,142663],{"style":126489,"src":142664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[82,142666,142668],{"className":126633,"code":142667,"language":126635,"meta":26,"style":26},"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",[88,142669,142670,142676,142692,142696,142700,142705,142711,142725,142730],{"__ignoreMap":26},[91,142671,142672,142674],{"class":93,"line":94},[91,142673,51692],{"class":51381},[91,142675,15695],{"class":250},[91,142677,142678,142680,142682,142685,142687,142690],{"class":93,"line":38},[91,142679,136617],{"class":105},[91,142681,51518],{"class":250},[91,142683,142684],{"class":105},"scale",[91,142686,251],{"class":250},[91,142688,142689],{"class":105},"1.2",[91,142691,2842],{"class":250},[91,142693,142694],{"class":93,"line":1304},[91,142695,1689],{"class":250},[91,142697,142698],{"class":93,"line":1319},[91,142699,136094],{"class":250},[91,142701,142702],{"class":93,"line":1325},[91,142703,142704],{"class":308},"\u002F* 2D 缩放 *\u002F\n",[91,142706,142707,142709],{"class":93,"line":1339},[91,142708,51692],{"class":51381},[91,142710,15695],{"class":250},[91,142712,142713,142715,142717,142719,142721,142723],{"class":93,"line":1345},[91,142714,136617],{"class":105},[91,142716,51518],{"class":250},[91,142718,142684],{"class":105},[91,142720,251],{"class":250},[91,142722,142689],{"class":105},[91,142724,2842],{"class":250},[91,142726,142727],{"class":93,"line":1436},[91,142728,142729],{"class":308},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[91,142731,142732],{"class":93,"line":1442},[91,142733,1689],{"class":250},[21,142735,142736],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[82,142738,142740],{"className":126633,"code":142739,"language":126635,"meta":26,"style":26},"\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",[88,142741,142742,142747,142757,142778,142799,142803,142808,142814,142841],{"__ignoreMap":26},[91,142743,142744],{"class":93,"line":94},[91,142745,142746],{"class":308},"\u002F* 定义动画 *\u002F\n",[91,142748,142749,142752,142755],{"class":93,"line":38},[91,142750,142751],{"class":153},"@keyframes",[91,142753,142754],{"class":5339}," move",[91,142756,15695],{"class":250},[91,142758,142759,142762,142764,142766,142768,142771,142773,142775],{"class":93,"line":1304},[91,142760,142761],{"class":97},"  0%",[91,142763,79888],{"class":250},[91,142765,48215],{"class":105},[91,142767,51518],{"class":250},[91,142769,142770],{"class":105},"translateX",[91,142772,251],{"class":250},[91,142774,440],{"class":105},[91,142776,142777],{"class":250},"); }\n",[91,142779,142780,142783,142785,142787,142789,142791,142793,142795,142797],{"class":93,"line":1319},[91,142781,142782],{"class":97},"  100%",[91,142784,79888],{"class":250},[91,142786,48215],{"class":105},[91,142788,51518],{"class":250},[91,142790,142770],{"class":105},[91,142792,251],{"class":250},[91,142794,560],{"class":105},[91,142796,51573],{"class":153},[91,142798,142777],{"class":250},[91,142800,142801],{"class":93,"line":1325},[91,142802,1689],{"class":250},[91,142804,142805],{"class":93,"line":1339},[91,142806,142807],{"class":308},"\u002F* 调用动画 *\u002F\n",[91,142809,142810,142812],{"class":93,"line":1345},[91,142811,51692],{"class":51381},[91,142813,15695],{"class":250},[91,142815,142816,142819,142821,142823,142825,142827,142829,142831,142833,142836,142839],{"class":93,"line":1436},[91,142817,142818],{"class":105},"  animation",[91,142820,51518],{"class":250},[91,142822,135319],{"class":105},[91,142824,25240],{"class":105},[91,142826,944],{"class":153},[91,142828,78761],{"class":105},[91,142830,4216],{"class":105},[91,142832,944],{"class":153},[91,142834,142835],{"class":105}," infinite",[91,142837,142838],{"class":105}," alternate",[91,142840,1415],{"class":250},[91,142842,142843],{"class":93,"line":1442},[91,142844,1689],{"class":250},[21,142846,142736],{},[82,142848,142851],{"className":142849,"code":142850,"language":5310},[5308],"\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",[88,142852,142850],{"__ignoreMap":26},[22121,142854,142856],{"id":142855},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[21,142858,142859],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[24,142861],{"style":126489,"src":142862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[82,142864,142865],{"className":126633,"code":142739,"language":126635,"meta":26,"style":26},[88,142866,142867,142871,142879,142897,142917,142921,142925,142931,142955],{"__ignoreMap":26},[91,142868,142869],{"class":93,"line":94},[91,142870,142746],{"class":308},[91,142872,142873,142875,142877],{"class":93,"line":38},[91,142874,142751],{"class":153},[91,142876,142754],{"class":5339},[91,142878,15695],{"class":250},[91,142880,142881,142883,142885,142887,142889,142891,142893,142895],{"class":93,"line":1304},[91,142882,142761],{"class":97},[91,142884,79888],{"class":250},[91,142886,48215],{"class":105},[91,142888,51518],{"class":250},[91,142890,142770],{"class":105},[91,142892,251],{"class":250},[91,142894,440],{"class":105},[91,142896,142777],{"class":250},[91,142898,142899,142901,142903,142905,142907,142909,142911,142913,142915],{"class":93,"line":1319},[91,142900,142782],{"class":97},[91,142902,79888],{"class":250},[91,142904,48215],{"class":105},[91,142906,51518],{"class":250},[91,142908,142770],{"class":105},[91,142910,251],{"class":250},[91,142912,560],{"class":105},[91,142914,51573],{"class":153},[91,142916,142777],{"class":250},[91,142918,142919],{"class":93,"line":1325},[91,142920,1689],{"class":250},[91,142922,142923],{"class":93,"line":1339},[91,142924,142807],{"class":308},[91,142926,142927,142929],{"class":93,"line":1345},[91,142928,51692],{"class":51381},[91,142930,15695],{"class":250},[91,142932,142933,142935,142937,142939,142941,142943,142945,142947,142949,142951,142953],{"class":93,"line":1436},[91,142934,142818],{"class":105},[91,142936,51518],{"class":250},[91,142938,135319],{"class":105},[91,142940,25240],{"class":105},[91,142942,944],{"class":153},[91,142944,78761],{"class":105},[91,142946,4216],{"class":105},[91,142948,944],{"class":153},[91,142950,142835],{"class":105},[91,142952,142838],{"class":105},[91,142954,1415],{"class":250},[91,142956,142957],{"class":93,"line":1442},[91,142958,1689],{"class":250},[21,142960,142961],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[217,142963,142965],{"id":142964},"_1823-知识点回顾","18.2.3 知识点回顾",[82,142967,142968],{"className":126633,"code":128802,"language":126635,"meta":26,"style":26},[88,142969,142970,142976,142986],{"__ignoreMap":26},[91,142971,142972,142974],{"class":93,"line":94},[91,142973,51692],{"class":51381},[91,142975,15695],{"class":250},[91,142977,142978,142980,142982,142984],{"class":93,"line":38},[91,142979,128815],{"class":105},[91,142981,51518],{"class":250},[91,142983,61817],{"class":105},[91,142985,1415],{"class":250},[91,142987,142988],{"class":93,"line":1304},[91,142989,1689],{"class":250},[190,142991,142993],{"id":142992},"_183-3d-转换","18.3 3D 转换",[21,142995,142996],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[217,142998,143000],{"id":142999},"_1831-坐标轴认识","18.3.1 坐标轴认识",[24,143002],{"style":126489,"src":143003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[217,143005,143007],{"id":143006},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[24,143009],{"style":126489,"src":143010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[21,143012,143013],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[21,143015,143016],{},"translate3d的效果需要搭配透视perspective来使用",[24,143018],{"style":126489,"src":143019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[217,143021,143023],{"id":143022},"_1833-透视-perspective","18.3.3 透视 perspective",[24,143025],{"style":126489,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[21,143028,143029],{},"透视写在父盒子上，单位为像素",[217,143031,143033],{"id":143032},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22121,143035,143037],{"id":143036},"_18341-分开解释","18.3.4.1 分开解释",[24,143039],{"style":126489,"src":143040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[24,143042],{"style":126489,"src":143043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[24,143045],{"style":126489,"src":143046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[21,143048,143049],{},"总结来说就是左手原则",[22121,143051,143053],{"id":143052},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[24,143055],{"style":126489,"src":143056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[217,143058,143060],{"id":143059},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[24,143062],{"style":126489,"src":143063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[24,143065],{"style":126489,"src":143066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[82,143068,143070],{"className":126633,"code":143069,"language":126635,"meta":26,"style":26},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[88,143071,143072,143078,143091,143108],{"__ignoreMap":26},[91,143073,143074,143076],{"class":93,"line":94},[91,143075,51692],{"class":51381},[91,143077,15695],{"class":250},[91,143079,143080,143083,143085,143087,143089],{"class":93,"line":38},[91,143081,143082],{"class":105},"  perspective",[91,143084,51518],{"class":250},[91,143086,65155],{"class":105},[91,143088,51573],{"class":153},[91,143090,1415],{"class":250},[91,143092,143093,143095,143097,143100,143102,143104,143106],{"class":93,"line":1304},[91,143094,136617],{"class":105},[91,143096,51518],{"class":250},[91,143098,143099],{"class":105},"rotateX",[91,143101,251],{"class":250},[91,143103,778],{"class":105},[91,143105,142460],{"class":153},[91,143107,2842],{"class":250},[91,143109,143110],{"class":93,"line":1319},[91,143111,1689],{"class":250},[217,143113,143115],{"id":143114},"_1836-案例","18.3.6 案例",[22121,143117,143119],{"id":143118},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[24,143121],{"style":126489,"src":143122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[24,143124],{"style":126489,"src":143125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[24,143127],{"style":126489,"src":143128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[82,143130,143132],{"className":126633,"code":143131,"language":126635,"meta":26,"style":26},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[88,143133,143134,143139,143145,143157],{"__ignoreMap":26},[91,143135,143136],{"class":93,"line":94},[91,143137,143138],{"class":308},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[91,143140,143141,143143],{"class":93,"line":38},[91,143142,133630],{"class":97},[91,143144,15695],{"class":250},[91,143146,143147,143149,143151,143153,143155],{"class":93,"line":1304},[91,143148,143082],{"class":105},[91,143150,51518],{"class":250},[91,143152,65155],{"class":105},[91,143154,51573],{"class":153},[91,143156,1415],{"class":250},[91,143158,143159],{"class":93,"line":1319},[91,143160,1689],{"class":250},[22121,143162,143164],{"id":143163},"_18362-3d导航栏","18.3.6.2 3D导航栏",[24,143166],{"style":126489,"src":143167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[82,143169,143170],{"className":127380,"code":130737,"language":127382,"meta":26,"style":26},[88,143171,143172,143176,143190,143194],{"__ignoreMap":26},[91,143173,143174],{"class":93,"line":94},[91,143175,130744],{"class":308},[91,143177,143178,143180,143182,143184,143186,143188],{"class":93,"line":38},[91,143179,1159],{"class":250},[91,143181,51692],{"class":51381},[91,143183,53567],{"class":97},[91,143185,296],{"class":250},[91,143187,130757],{"class":101},[91,143189,51388],{"class":250},[91,143191,143192],{"class":93,"line":1304},[91,143193,130764],{"class":250},[91,143195,143196,143198,143200],{"class":93,"line":1319},[91,143197,51866],{"class":250},[91,143199,51692],{"class":51381},[91,143201,51388],{"class":250},[22121,143203,143205],{"id":143204},"_18363-旋转木马","18.3.6.3 旋转木马",[24,143207],{"style":126489,"src":143208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[82,143210,143211],{"className":126633,"code":142436,"language":126635,"meta":26,"style":26},[88,143212,143213,143219,143235],{"__ignoreMap":26},[91,143214,143215,143217],{"class":93,"line":94},[91,143216,51692],{"class":51381},[91,143218,15695],{"class":250},[91,143220,143221,143223,143225,143227,143229,143231,143233],{"class":93,"line":38},[91,143222,136617],{"class":105},[91,143224,51518],{"class":250},[91,143226,142453],{"class":105},[91,143228,251],{"class":250},[91,143230,778],{"class":105},[91,143232,142460],{"class":153},[91,143234,2842],{"class":250},[91,143236,143237],{"class":93,"line":1304},[91,143238,1689],{"class":250},[168,143240,143241],{},"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":26,"searchDepth":38,"depth":38,"links":143243},[143244,143251],{"id":142339,"depth":38,"text":142340,"children":143245},[143246,143247,143248,143249,143250],{"id":142363,"depth":1304,"text":142364},{"id":142418,"depth":1304,"text":142419},{"id":142543,"depth":1304,"text":142544},{"id":142646,"depth":1304,"text":142647},{"id":142964,"depth":1304,"text":142965},{"id":142992,"depth":38,"text":142993,"children":143252},[143253,143254,143255,143256,143257,143258],{"id":142999,"depth":1304,"text":143000},{"id":143006,"depth":1304,"text":143007},{"id":143022,"depth":1304,"text":143023},{"id":143032,"depth":1304,"text":143033},{"id":143059,"depth":1304,"text":143060},{"id":143114,"depth":1304,"text":143115},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142331,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143265,"title":143266,"body":143267,"description":23500,"extension":173,"meta":143470,"navigation":175,"path":143471,"seo":143472,"stem":143473,"__hash__":143474},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143268,"toc":143459},[143269,143272,143276,143279,143282,143286,143289,143292,143295,143299,143302,143306,143309,143313,143316,143320,143334,143338,143363,143366,143369,143386,143390,143394,143397,143400,143404,143407,143410,143428,143432,143435,143449,143453,143456],[10,143270,143266],{"id":143271},"_19-移动端基础-前缀现状与视口",[190,143273,143275],{"id":143274},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[24,143277],{"style":126489,"src":143278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[21,143280,143281],{},"意思就是加个前缀，增加兼容性",[190,143283,143285],{"id":143284},"_192-移动端现状认识","19.2 移动端现状认识",[24,143287],{"style":126489,"src":143288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[21,143290,143291],{},"调试方法：",[24,143293],{"style":126489,"src":143294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[190,143296,143298],{"id":143297},"_193-视口","19.3 视口",[21,143300,143301],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[217,143303,143305],{"id":143304},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[24,143307],{"style":126489,"src":143308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[217,143310,143312],{"id":143311},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[24,143314],{"style":126489,"src":143315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[217,143317,143319],{"id":143318},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1256,143321,143322,143325,143328,143331],{},[17,143323,143324],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[17,143326,143327],{},"理想视口，对设备来讲，是最理想的视口尺寸",[17,143329,143330],{},"需要手动添写meta视口标签通知浏览器操作",[17,143332,143333],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[217,143335,143337],{"id":143336},"_1934-meta视口标签","19.3.4 meta视口标签",[82,143339,143341],{"className":127380,"code":143340,"language":127382,"meta":26,"style":26},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[88,143342,143343],{"__ignoreMap":26},[91,143344,143345,143347,143349,143351,143353,143355,143357,143359,143361],{"class":93,"line":94},[91,143346,1159],{"class":250},[91,143348,51425],{"class":51381},[91,143350,15043],{"class":97},[91,143352,296],{"class":250},[91,143354,51472],{"class":101},[91,143356,51452],{"class":97},[91,143358,296],{"class":250},[91,143360,51479],{"class":101},[91,143362,51388],{"class":250},[24,143364],{"style":126489,"src":143365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[21,143367,143368],{},"标准视口设置：",[14,143370,143371,143374,143377,143380,143383],{},[17,143372,143373],{},"视口宽度和设备保持一致",[17,143375,143376],{},"视口的默认缩放比例1.0",[17,143378,143379],{},"不允许用户自行缩放",[17,143381,143382],{},"最大允许的缩放比例1.0",[17,143384,143385],{},"最小允许的缩放比例1.0",[217,143387,143389],{"id":143388},"_1935-二倍图","19.3.5 二倍图",[22121,143391,143393],{"id":143392},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[24,143395],{"style":126489,"src":143396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[24,143398],{"style":126489,"src":143399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22121,143401,143403],{"id":143402},"_19352-多倍图","19.3.5.2 多倍图",[24,143405],{"style":126489,"src":143406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[21,143408,143409],{},"二倍图法，代码如下：",[82,143411,143413],{"className":126633,"code":143412,"language":126635,"meta":26,"style":26},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[88,143414,143415,143420],{"__ignoreMap":26},[91,143416,143417],{"class":93,"line":94},[91,143418,143419],{"class":308},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[91,143421,143422,143425],{"class":93,"line":38},[91,143423,143424],{"class":51381},"background-size",[91,143426,143427],{"class":250},": 50% 50%;\n",[22121,143429,143431],{"id":143430},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[24,143433],{"style":126489,"src":143434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[14,143436,143437,143440,143443,143446],{},[17,143438,143439],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[17,143441,143442],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[17,143444,143445],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[17,143447,143448],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22121,143450,143452],{"id":143451},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[24,143454],{"style":126489,"src":143455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[168,143457,143458],{},"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":26,"searchDepth":38,"depth":38,"links":143460},[143461,143462,143463],{"id":143274,"depth":38,"text":143275},{"id":143284,"depth":38,"text":143285},{"id":143297,"depth":38,"text":143298,"children":143464},[143465,143466,143467,143468,143469],{"id":143304,"depth":1304,"text":143305},{"id":143311,"depth":1304,"text":143312},{"id":143318,"depth":1304,"text":143319},{"id":143336,"depth":1304,"text":143337},{"id":143388,"depth":1304,"text":143389},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143266,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143476,"title":143477,"body":143478,"description":23500,"extension":173,"meta":144355,"navigation":175,"path":144356,"seo":144357,"stem":144358,"__hash__":144359},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143479,"toc":144339},[143480,143483,143487,143494,143497,143504,143507,143512,143515,143519,143523,143530,143533,143536,143540,143543,143546,143549,143552,143555,143559,143562,143566,143568,143571,143574,143577,143580,143582,143585,143587,143617,143619,143649,143653,143656,143660,143663,143680,143683,143686,143762,143764,143767,143770,143773,143776,143778,143781,143784,143788,143810,143813,143816,143820,143823,143829,143832,143836,143839,143842,143846,143849,143852,143855,143859,143862,143865,143868,143871,143875,143878,143882,143889,143892,143895,143898,143901,143911,143914,143917,143924,143927,143931,143934,143937,143941,143944,143947,143950,143995,143998,144001,144004,144006,144135,144137,144175,144178,144181,144183,144301,144303,144337],[10,143481,143477],{"id":143482},"_20-移动端布局实战上篇",[190,143484,143486],{"id":143485},"_201-移动端主流方案","20.1 移动端主流方案",[14,143488,143489],{},[17,143490,143491],{},[398,143492,143493],{},"单独移动端页面（主流）",[24,143495],{"style":126489,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[14,143498,143499],{"start":38},[17,143500,143501],{},[398,143502,143503],{},"响应式兼容PC移动端",[24,143505],{"style":126489,"src":143506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[14,143508,143509],{"start":1304},[17,143510,143511],{},"两种页面选型布局方式",[24,143513],{"style":126489,"src":143514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[190,143516,143518],{"id":143517},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[217,143520,143522],{"id":143521},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[21,143524,143525,143526],{},"官网地址： ",[487,143527,143528],{"href":143528,"rel":143529},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23987],[24,143531],{"style":126489,"src":143532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[24,143534],{"style":126489,"src":143535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[217,143537,143539],{"id":143538},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[24,143541],{"style":126489,"src":143542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[24,143544],{"style":126489,"src":143545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[21,143547,143548],{},"去除高亮：",[21,143550,143551],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[21,143553,143554],{},"-webkit- tap-highlight-color: transparent;",[190,143556,143558],{"id":143557},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[24,143560],{"style":126489,"src":143561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[190,143563,143565],{"id":143564},"_204-流式布局案例","20.4 流式布局案例",[21,143567,280],{},[21,143569,143570],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[21,143572,143573],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[21,143575,143576],{},"图片格式：",[24,143578],{"style":126489,"src":143579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[21,143581,135676],{},[24,143583],{"style":126489,"src":143584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[21,143586,140003],{},[82,143588,143589],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,143590,143591],{"__ignoreMap":26},[91,143592,143593,143595,143597,143599,143601,143603,143605,143607,143609,143611,143613,143615],{"class":93,"line":94},[91,143594,1159],{"class":250},[91,143596,24],{"class":51381},[91,143598,55320],{"class":97},[91,143600,296],{"class":250},[91,143602,134150],{"class":101},[91,143604,55328],{"class":97},[91,143606,296],{"class":250},[91,143608,134157],{"class":101},[91,143610,134160],{"class":97},[91,143612,296],{"class":250},[91,143614,134165],{"class":101},[91,143616,51388],{"class":250},[21,143618,140092],{},[82,143620,143621],{"className":127380,"code":134135,"language":127382,"meta":26,"style":26},[88,143622,143623],{"__ignoreMap":26},[91,143624,143625,143627,143629,143631,143633,143635,143637,143639,143641,143643,143645,143647],{"class":93,"line":94},[91,143626,1159],{"class":250},[91,143628,24],{"class":51381},[91,143630,55320],{"class":97},[91,143632,296],{"class":250},[91,143634,134150],{"class":101},[91,143636,55328],{"class":97},[91,143638,296],{"class":250},[91,143640,134157],{"class":101},[91,143642,134160],{"class":97},[91,143644,296],{"class":250},[91,143646,134165],{"class":101},[91,143648,51388],{"class":250},[190,143650,143652],{"id":143651},"_205-flex布局","20.5 flex布局",[24,143654],{"style":126489,"src":143655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[217,143657,143659],{"id":143658},"_2051-布局原理","20.5.1 布局原理",[21,143661,143662],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1256,143664,143665,143668,143671,143674,143677],{},[17,143666,143667],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[17,143669,143670],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[17,143672,143673],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[17,143675,143676],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[17,143678,143679],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[21,143681,143682],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[21,143684,143685],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[82,143687,143689],{"className":126633,"code":143688,"language":126635,"meta":26,"style":26},"\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",[88,143690,143691,143696,143703,143713,143725,143736,143747,143758],{"__ignoreMap":26},[91,143692,143693],{"class":93,"line":94},[91,143694,143695],{"class":308},"\u002F* Flex 弹性布局 *\u002F\n",[91,143697,143698,143701],{"class":93,"line":38},[91,143699,143700],{"class":97},".container",[91,143702,15695],{"class":250},[91,143704,143705,143707,143709,143711],{"class":93,"line":1304},[91,143706,128249],{"class":105},[91,143708,51518],{"class":250},[91,143710,51558],{"class":105},[91,143712,1415],{"class":250},[91,143714,143715,143718,143720,143723],{"class":93,"line":1319},[91,143716,143717],{"class":105},"  flex-direction",[91,143719,51518],{"class":250},[91,143721,143722],{"class":105},"row",[91,143724,1415],{"class":250},[91,143726,143727,143730,143732,143734],{"class":93,"line":1325},[91,143728,143729],{"class":105},"  justify-content",[91,143731,51518],{"class":250},[91,143733,51749],{"class":105},[91,143735,1415],{"class":250},[91,143737,143738,143741,143743,143745],{"class":93,"line":1339},[91,143739,143740],{"class":105},"  align-items",[91,143742,51518],{"class":250},[91,143744,51673],{"class":105},[91,143746,1415],{"class":250},[91,143748,143749,143752,143754,143756],{"class":93,"line":1345},[91,143750,143751],{"class":105},"  flex-wrap",[91,143753,51518],{"class":250},[91,143755,78691],{"class":105},[91,143757,1415],{"class":250},[91,143759,143760],{"class":93,"line":1436},[91,143761,1689],{"class":250},[21,143763,70534],{},[21,143765,143766],{},".form-item .male-label {",[21,143768,143769],{},"   margin-right: 20px;",[21,143771,143772],{},"   display: inline-flex;",[21,143774,143775],{},"   align-items: center;",[21,143777,1195],{},[24,143779],{"style":126489,"src":143780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[24,143782],{"style":126489,"src":143783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[217,143785,143787],{"id":143786},"_2052-常见父项属性","20.5.2 常见父项属性",[14,143789,143790,143793,143796,143799,143802,143805,143808],{},[17,143791,143792],{},"flex-direction：设置主轴的方向",[17,143794,143795],{},"justify-content：设置主轴上的子元素排列方式",[17,143797,143798],{},"flex-wrap：设置子元素是否换行",[17,143800,143801],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[17,143803,143804],{},"align-items：设置侧轴上的子元素排列方式（单行）",[17,143806,143807],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[17,143809,143792],{},[24,143811],{"style":126489,"src":143812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[24,143814],{"style":126489,"src":143815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[14,143817,143818],{"start":38},[17,143819,143795],{},[24,143821],{"style":126489,"src":143822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[21,143824,143825,143828],{},[88,143826,143827],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[21,143830,143831],{},"跟着主轴走",[14,143833,143834],{"start":1304},[17,143835,143798],{},[24,143837],{"style":126489,"src":143838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[21,143840,143841],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[14,143843,143844],{"start":1319},[17,143845,143801],{},[24,143847],{"style":126489,"src":143848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[21,143850,143851],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[21,143853,143854],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[14,143856,143857],{"start":1325},[17,143858,143804],{},[24,143860],{"style":126489,"src":143861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[21,143863,143864],{},"align-items与align-content之间的区别：",[21,143866,143867],{},"单找items，多找content",[24,143869],{"style":126489,"src":143870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[14,143872,143873],{"start":1339},[17,143874,143807],{},[24,143876],{"style":126489,"src":143877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[217,143879,143881],{"id":143880},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[14,143883,143884],{},[17,143885,143886],{},[398,143887,143888],{},"flex 属性",[21,143890,143891],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[24,143893],{"style":126489,"src":143894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[21,143896,143897],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[21,143899,143900],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[14,143902,143903],{"start":38},[17,143904,143905,13918,143908],{},[398,143906,143907],{},"align-self",[398,143909,143910],{},"控制子项自己在侧轴上的排列方式",[24,143912],{"style":126489,"src":143913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[21,143915,143916],{},"单个子盒子在父盒子侧轴上的排列方式",[14,143918,143919],{"start":1304},[17,143920,143921,143923],{},[398,143922,95378],{}," 属性定义项目的排列顺序",[24,143925],{"style":126489,"src":143926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[217,143928,143930],{"id":143929},"_2054-背景线性渐变","20.5.4 背景线性渐变",[24,143932],{"style":126489,"src":143933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[21,143935,143936],{},"必须要添加浏览器的私有前缀",[217,143938,143940],{"id":143939},"_2055-携程网首页案例","20.5.5 携程网首页案例",[21,143942,143943],{},"学到最重要的知识：",[21,143945,143946],{},"flex处理这样的布局思路",[24,143948],{"style":126489,"src":143949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[82,143951,143953],{"className":126633,"code":143952,"language":126635,"meta":26,"style":26},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[88,143954,143955,143961,143971,143981,143991],{"__ignoreMap":26},[91,143956,143957,143959],{"class":93,"line":94},[91,143958,143700],{"class":97},[91,143960,15695],{"class":250},[91,143962,143963,143965,143967,143969],{"class":93,"line":38},[91,143964,128249],{"class":105},[91,143966,51518],{"class":250},[91,143968,51558],{"class":105},[91,143970,1415],{"class":250},[91,143972,143973,143975,143977,143979],{"class":93,"line":1304},[91,143974,143729],{"class":105},[91,143976,51518],{"class":250},[91,143978,51673],{"class":105},[91,143980,1415],{"class":250},[91,143982,143983,143985,143987,143989],{"class":93,"line":1319},[91,143984,143740],{"class":105},[91,143986,51518],{"class":250},[91,143988,51673],{"class":105},[91,143990,1415],{"class":250},[91,143992,143993],{"class":93,"line":1325},[91,143994,1689],{"class":250},[21,143996,143997],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[21,143999,144000],{},"使用属性选择器",[24,144002],{"style":126489,"src":144003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[21,144005,68970],{},[82,144007,144009],{"className":127380,"code":144008,"language":127382,"meta":26,"style":26},"\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",[88,144010,144011,144016,144030,144035,144055,144060,144079,144084,144103,144108,144127],{"__ignoreMap":26},[91,144012,144013],{"class":93,"line":94},[91,144014,144015],{"class":308},"\u003C!-- 携程网移动端案例结构 -->\n",[91,144017,144018,144020,144022,144024,144026,144028],{"class":93,"line":38},[91,144019,1159],{"class":250},[91,144021,51692],{"class":51381},[91,144023,53567],{"class":97},[91,144025,296],{"class":250},[91,144027,92404],{"class":101},[91,144029,51388],{"class":250},[91,144031,144032],{"class":93,"line":1304},[91,144033,144034],{"class":308},"  \u003C!-- 搜索栏 -->\n",[91,144036,144037,144039,144041,144043,144045,144048,144051,144053],{"class":93,"line":1319},[91,144038,52225],{"class":250},[91,144040,51692],{"class":51381},[91,144042,53567],{"class":97},[91,144044,296],{"class":250},[91,144046,144047],{"class":101},"\"search-index\"",[91,144049,144050],{"class":250},">...\u003C\u002F",[91,144052,51692],{"class":51381},[91,144054,51388],{"class":250},[91,144056,144057],{"class":93,"line":1325},[91,144058,144059],{"class":308},"  \u003C!-- 焦点图 -->\n",[91,144061,144062,144064,144066,144068,144070,144073,144075,144077],{"class":93,"line":1339},[91,144063,52225],{"class":250},[91,144065,51692],{"class":51381},[91,144067,53567],{"class":97},[91,144069,296],{"class":250},[91,144071,144072],{"class":101},"\"focus\"",[91,144074,144050],{"class":250},[91,144076,51692],{"class":51381},[91,144078,51388],{"class":250},[91,144080,144081],{"class":93,"line":1345},[91,144082,144083],{"class":308},"  \u003C!-- 主导航 -->\n",[91,144085,144086,144088,144090,144092,144094,144097,144099,144101],{"class":93,"line":1436},[91,144087,52225],{"class":250},[91,144089,51692],{"class":51381},[91,144091,53567],{"class":97},[91,144093,296],{"class":250},[91,144095,144096],{"class":101},"\"local-nav\"",[91,144098,144050],{"class":250},[91,144100,51692],{"class":51381},[91,144102,51388],{"class":250},[91,144104,144105],{"class":93,"line":1442},[91,144106,144107],{"class":308},"  \u003C!-- 子导航 -->\n",[91,144109,144110,144112,144114,144116,144118,144121,144123,144125],{"class":93,"line":1454},[91,144111,52225],{"class":250},[91,144113,51692],{"class":51381},[91,144115,53567],{"class":97},[91,144117,296],{"class":250},[91,144119,144120],{"class":101},"\"nav-common\"",[91,144122,144050],{"class":250},[91,144124,51692],{"class":51381},[91,144126,51388],{"class":250},[91,144128,144129,144131,144133],{"class":93,"line":1736},[91,144130,51866],{"class":250},[91,144132,51692],{"class":51381},[91,144134,51388],{"class":250},[21,144136,70534],{},[82,144138,144139],{"className":126633,"code":137085,"language":126635,"meta":26,"style":26},[88,144140,144141,144155,144171],{"__ignoreMap":26},[91,144142,144143,144145,144147,144149,144151,144153],{"class":93,"line":94},[91,144144,53902],{"class":51381},[91,144146,1139],{"class":250},[91,144148,103188],{"class":97},[91,144150,296],{"class":153},[91,144152,62780],{"class":101},[91,144154,137102],{"class":250},[91,144156,144157,144159,144161,144163,144165,144167,144169],{"class":93,"line":38},[91,144158,70977],{"class":105},[91,144160,51518],{"class":250},[91,144162,466],{"class":105},[91,144164,51573],{"class":153},[91,144166,51602],{"class":105},[91,144168,130213],{"class":105},[91,144170,1415],{"class":250},[91,144172,144173],{"class":93,"line":1304},[91,144174,1689],{"class":250},[21,144176,144177],{},"总代码和效果展示：",[24,144179],{"style":126489,"src":144180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[21,144182,68970],{},[82,144184,144185],{"className":127380,"code":144008,"language":127382,"meta":26,"style":26},[88,144186,144187,144191,144205,144209,144227,144231,144249,144253,144271,144275,144293],{"__ignoreMap":26},[91,144188,144189],{"class":93,"line":94},[91,144190,144015],{"class":308},[91,144192,144193,144195,144197,144199,144201,144203],{"class":93,"line":38},[91,144194,1159],{"class":250},[91,144196,51692],{"class":51381},[91,144198,53567],{"class":97},[91,144200,296],{"class":250},[91,144202,92404],{"class":101},[91,144204,51388],{"class":250},[91,144206,144207],{"class":93,"line":1304},[91,144208,144034],{"class":308},[91,144210,144211,144213,144215,144217,144219,144221,144223,144225],{"class":93,"line":1319},[91,144212,52225],{"class":250},[91,144214,51692],{"class":51381},[91,144216,53567],{"class":97},[91,144218,296],{"class":250},[91,144220,144047],{"class":101},[91,144222,144050],{"class":250},[91,144224,51692],{"class":51381},[91,144226,51388],{"class":250},[91,144228,144229],{"class":93,"line":1325},[91,144230,144059],{"class":308},[91,144232,144233,144235,144237,144239,144241,144243,144245,144247],{"class":93,"line":1339},[91,144234,52225],{"class":250},[91,144236,51692],{"class":51381},[91,144238,53567],{"class":97},[91,144240,296],{"class":250},[91,144242,144072],{"class":101},[91,144244,144050],{"class":250},[91,144246,51692],{"class":51381},[91,144248,51388],{"class":250},[91,144250,144251],{"class":93,"line":1345},[91,144252,144083],{"class":308},[91,144254,144255,144257,144259,144261,144263,144265,144267,144269],{"class":93,"line":1436},[91,144256,52225],{"class":250},[91,144258,51692],{"class":51381},[91,144260,53567],{"class":97},[91,144262,296],{"class":250},[91,144264,144096],{"class":101},[91,144266,144050],{"class":250},[91,144268,51692],{"class":51381},[91,144270,51388],{"class":250},[91,144272,144273],{"class":93,"line":1442},[91,144274,144107],{"class":308},[91,144276,144277,144279,144281,144283,144285,144287,144289,144291],{"class":93,"line":1454},[91,144278,52225],{"class":250},[91,144280,51692],{"class":51381},[91,144282,53567],{"class":97},[91,144284,296],{"class":250},[91,144286,144120],{"class":101},[91,144288,144050],{"class":250},[91,144290,51692],{"class":51381},[91,144292,51388],{"class":250},[91,144294,144295,144297,144299],{"class":93,"line":1736},[91,144296,51866],{"class":250},[91,144298,51692],{"class":51381},[91,144300,51388],{"class":250},[21,144302,70534],{},[82,144304,144305],{"className":127380,"code":130737,"language":127382,"meta":26,"style":26},[88,144306,144307,144311,144325,144329],{"__ignoreMap":26},[91,144308,144309],{"class":93,"line":94},[91,144310,130744],{"class":308},[91,144312,144313,144315,144317,144319,144321,144323],{"class":93,"line":38},[91,144314,1159],{"class":250},[91,144316,51692],{"class":51381},[91,144318,53567],{"class":97},[91,144320,296],{"class":250},[91,144322,130757],{"class":101},[91,144324,51388],{"class":250},[91,144326,144327],{"class":93,"line":1304},[91,144328,130764],{"class":250},[91,144330,144331,144333,144335],{"class":93,"line":1319},[91,144332,51866],{"class":250},[91,144334,51692],{"class":51381},[91,144336,51388],{"class":250},[168,144338,138034],{},{"title":26,"searchDepth":38,"depth":38,"links":144340},[144341,144342,144346,144347,144348],{"id":143485,"depth":38,"text":143486},{"id":143517,"depth":38,"text":143518,"children":144343},[144344,144345],{"id":143521,"depth":1304,"text":143522},{"id":143538,"depth":1304,"text":143539},{"id":143557,"depth":38,"text":143558},{"id":143564,"depth":38,"text":143565},{"id":143651,"depth":38,"text":143652,"children":144349},[144350,144351,144352,144353,144354],{"id":143658,"depth":1304,"text":143659},{"id":143786,"depth":1304,"text":143787},{"id":143880,"depth":1304,"text":143881},{"id":143929,"depth":1304,"text":143930},{"id":143939,"depth":1304,"text":143940},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143477,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144361,"title":144362,"body":144363,"description":23500,"extension":173,"meta":145590,"navigation":175,"path":145591,"seo":145592,"stem":145593,"__hash__":145594},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144364,"toc":145568},[144365,144368,144372,144376,144379,144382,144386,144391,144394,144397,144400,144403,144406,144463,144466,144471,144474,144477,144481,144492,144496,144499,144502,144509,144514,144518,144521,144527,144530,144534,144537,144544,144547,144550,144557,144560,144567,144570,144573,144580,144583,144586,144588,144605,144609,144612,144615,144618,144622,144625,144628,144631,144634,144637,144640,144642,144645,144648,144710,144713,144823,144830,144836,144839,144842,144846,144849,144853,144858,144861,144868,144871,144877,144882,144885,144888,144891,144894,144897,144900,144903,144906,144962,144964,144990,144994,144997,145000,145003,145011,145014,145017,145021,145077,145080,145084,145090,145101,145104,145109,145112,145115,145121,145124,145127,145130,145133,145136,145139,145142,145145,145170,145176,145179,145182,145185,145188,145191,145194,145199,145202,145205,145208,145216,145219,145226,145229,145232,145234,145258,145260,145263,145266,145269,145272,145275,145278,145281,145315,145318,145321,145355,145362,145365,145368,145371,145374,145377,145380,145387,145390,145393,145396,145399,145406,145409,145412,145419,145422,145425,145429,145432,145435,145438,145441,145444,145447,145450,145453,145455,145479,145481,145505,145509,145520,145523,145526,145529,145532,145535,145538,145541,145544,145547,145550,145553,145556,145559,145562,145565],[10,144366,144362],{"id":144367},"_21-移动端布局实战下篇",[190,144369,144371],{"id":144370},"_211-rem适配布局","21.1 rem适配布局",[217,144373,144375],{"id":144374},"_2111-rem单位","21.1.1 rem单位",[24,144377],{"style":126489,"src":144378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[21,144380,144381],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[217,144383,144385],{"id":144384},"_2112-媒体查询","21.1.2 媒体查询",[14,144387,144388],{},[17,144389,144390],{},"参数介绍",[24,144392],{"style":126489,"src":144393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[24,144395],{"style":126489,"src":144396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[24,144398],{"style":126489,"src":144399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[24,144401],{"style":126489,"src":144402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[24,144404],{"style":126489,"src":144405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[82,144407,144409],{"className":126633,"code":144408,"language":126635,"meta":26,"style":26},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[88,144410,144411,144416,144435,144442,144455,144459],{"__ignoreMap":26},[91,144412,144413],{"class":93,"line":94},[91,144414,144415],{"class":308},"\u002F* 媒体查询 *\u002F\n",[91,144417,144418,144421,144423,144426,144428,144431,144433],{"class":93,"line":38},[91,144419,144420],{"class":153},"@media",[91,144422,1782],{"class":250},[91,144424,144425],{"class":105},"max-width",[91,144427,51518],{"class":250},[91,144429,144430],{"class":105},"768",[91,144432,51573],{"class":153},[91,144434,12565],{"class":250},[91,144436,144437,144440],{"class":93,"line":1304},[91,144438,144439],{"class":97},"  .container",[91,144441,15695],{"class":250},[91,144443,144444,144447,144449,144451,144453],{"class":93,"line":1319},[91,144445,144446],{"class":105},"    width",[91,144448,51518],{"class":250},[91,144450,560],{"class":105},[91,144452,577],{"class":153},[91,144454,1415],{"class":250},[91,144456,144457],{"class":93,"line":1325},[91,144458,127429],{"class":250},[91,144460,144461],{"class":93,"line":1339},[91,144462,1689],{"class":250},[21,144464,144465],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[14,144467,144468],{"start":38},[17,144469,144470],{},"引入资源",[24,144472],{"style":126489,"src":144473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[21,144475,144476],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[217,144478,144480],{"id":144479},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1256,144482,144483,144486,144489],{},[17,144484,144485],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[17,144487,144488],{},"媒体查询可以根据不同设备宽度来修改样式",[17,144490,144491],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[190,144493,144495],{"id":144494},"_212-less基础","21.2 Less基础",[21,144497,144498],{},"css冗余度较高，不利于复用，没有很好的计算能力",[21,144500,144501],{},"Less可以解决该问题，它是css的扩展语言",[21,144503,144504,144505],{},"Less中文网址： ",[487,144506,144507],{"href":144507,"rel":144508},"http:\u002F\u002Flesscss.cn\u002F",[23987],[21,144510,144511],{},[398,144512,144513],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[217,144515,144517],{"id":144516},"_2121-less安装","21.2.1 less安装",[21,144519,144520],{},"如果使用vscode，则无需进行下方安装步骤",[21,144522,144523],{},[487,144524,144525],{"href":144525,"rel":144526},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23987],[24,144528],{"style":126489,"src":144529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[217,144531,144533],{"id":144532},"_2122-less使用","21.2.2 less使用",[21,144535,144536],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[14,144538,144539],{},[17,144540,144541],{},[398,144542,144543],{},"Less 变量",[24,144545],{"style":126489,"src":144546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[24,144548],{"style":126489,"src":144549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[14,144551,144552],{"start":38},[17,144553,144554],{},[398,144555,144556],{},"Less 编译",[24,144558],{"style":126489,"src":144559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[14,144561,144562],{"start":1304},[17,144563,144564],{},[398,144565,144566],{},"Less 嵌套",[24,144568],{"style":126489,"src":144569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[24,144571],{"style":126489,"src":144572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[14,144574,144575],{"start":1319},[17,144576,144577],{},[398,144578,144579],{},"Less 运算",[24,144581],{"style":126489,"src":144582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[21,144584,144585],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[21,144587,280],{},[1256,144589,144590,144593,144596,144599,144602],{},[17,144591,144592],{},"乘号（*）和除号（\u002F）的写法",[17,144594,144595],{},"运算符中间左右有个空格隔开 1px + 5",[17,144597,144598],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[17,144600,144601],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[17,144603,144604],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[190,144606,144608],{"id":144607},"_213-rem-适配方案","21.3 rem 适配方案",[21,144610,144611],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[21,144613,144614],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[24,144616],{"style":126489,"src":144617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[217,144619,144621],{"id":144620},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[21,144623,144624],{},"rem + 媒体查询 + less 技术",[24,144626],{"style":126489,"src":144627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[21,144629,144630],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[21,144632,144633],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[24,144635],{"style":126489,"src":144636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[21,144638,144639],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[21,144641,14756],{},[24,144643],{"style":126489,"src":144644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[21,144646,144647],{},"index.html:",[82,144649,144651],{"className":126633,"code":144650,"language":126635,"meta":26,"style":26},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[88,144652,144653,144658,144664,144680,144684,144690,144706],{"__ignoreMap":26},[91,144654,144655],{"class":93,"line":94},[91,144656,144657],{"class":308},"\u002F* rem 适配方案 *\u002F\n",[91,144659,144660,144662],{"class":93,"line":38},[91,144661,50716],{"class":51381},[91,144663,15695],{"class":250},[91,144665,144666,144668,144670,144673,144675,144677],{"class":93,"line":1304},[91,144667,70707],{"class":105},[91,144669,51518],{"class":250},[91,144671,144672],{"class":105},"62.5",[91,144674,577],{"class":153},[91,144676,130496],{"class":250},[91,144678,144679],{"class":308},"\u002F* 1rem = 10px *\u002F\n",[91,144681,144682],{"class":93,"line":1319},[91,144683,1689],{"class":250},[91,144685,144686,144688],{"class":93,"line":1325},[91,144687,130481],{"class":97},[91,144689,15695],{"class":250},[91,144691,144692,144694,144696,144698,144701,144703],{"class":93,"line":1339},[91,144693,70649],{"class":105},[91,144695,51518],{"class":250},[91,144697,695],{"class":105},[91,144699,144700],{"class":153},"rem",[91,144702,130496],{"class":250},[91,144704,144705],{"class":308},"\u002F* 100px *\u002F\n",[91,144707,144708],{"class":93,"line":1345},[91,144709,1689],{"class":250},[21,144711,144712],{},"common.less",[82,144714,144716],{"className":126633,"code":144715,"language":126635,"meta":26,"style":26},"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",[88,144717,144718,144724,144739,144743,144749,144763,144767,144771,144775,144781,144795,144799,144805,144819],{"__ignoreMap":26},[91,144719,144720,144722],{"class":93,"line":94},[91,144721,50716],{"class":51381},[91,144723,15695],{"class":250},[91,144725,144726,144728,144730,144732,144734,144736],{"class":93,"line":38},[91,144727,70707],{"class":105},[91,144729,51518],{"class":250},[91,144731,144672],{"class":105},[91,144733,577],{"class":153},[91,144735,26189],{"class":250},[91,144737,144738],{"class":308},"\u002F* 10px *\u002F\n",[91,144740,144741],{"class":93,"line":1304},[91,144742,1689],{"class":250},[91,144744,144745,144747],{"class":93,"line":1319},[91,144746,51692],{"class":51381},[91,144748,15695],{"class":250},[91,144750,144751,144753,144755,144757,144759,144761],{"class":93,"line":1325},[91,144752,70649],{"class":105},[91,144754,51518],{"class":250},[91,144756,695],{"class":105},[91,144758,144700],{"class":153},[91,144760,26189],{"class":250},[91,144762,144705],{"class":308},[91,144764,144765],{"class":93,"line":1339},[91,144766,1689],{"class":250},[91,144768,144769],{"class":93,"line":1345},[91,144770,136094],{"class":250},[91,144772,144773],{"class":93,"line":1436},[91,144774,144657],{"class":308},[91,144776,144777,144779],{"class":93,"line":1442},[91,144778,50716],{"class":51381},[91,144780,15695],{"class":250},[91,144782,144783,144785,144787,144789,144791,144793],{"class":93,"line":1454},[91,144784,70707],{"class":105},[91,144786,51518],{"class":250},[91,144788,144672],{"class":105},[91,144790,577],{"class":153},[91,144792,130496],{"class":250},[91,144794,144679],{"class":308},[91,144796,144797],{"class":93,"line":1736},[91,144798,1689],{"class":250},[91,144800,144801,144803],{"class":93,"line":1741},[91,144802,130481],{"class":97},[91,144804,15695],{"class":250},[91,144806,144807,144809,144811,144813,144815,144817],{"class":93,"line":1747},[91,144808,70649],{"class":105},[91,144810,51518],{"class":250},[91,144812,695],{"class":105},[91,144814,144700],{"class":153},[91,144816,130496],{"class":250},[91,144818,144705],{"class":308},[91,144820,144821],{"class":93,"line":1752},[91,144822,1689],{"class":250},[21,144824,144825,144826,144829],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23677,144827,144828],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[82,144831,144834],{"className":144832,"code":144833,"language":5310},[5308],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[88,144835,144833],{"__ignoreMap":26},[21,144837,144838],{},"less保存时会自动变成.css文件",[21,144840,144841],{},"好好搞懂上述代码写法",[217,144843,144845],{"id":144844},"_2132-样式导入样式","21.3.2 样式导入样式",[24,144847],{"style":126489,"src":144848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[217,144850,144852],{"id":144851},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[14,144854,144855],{},[17,144856,144857],{},"准备工作",[24,144859],{"style":126489,"src":144860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[21,144862,144863,144864],{},"github地址：",[487,144865,144866],{"href":144866,"rel":144867},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23987],[21,144869,144870],{},"下载之后，将index.js文件拖到项目中就可以了",[21,144872,144873,144874],{},"js文件引入到index.html中使用的是",[88,144875,144876],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[14,144878,144879],{"start":38},[17,144880,144881],{},"vscode插件",[24,144883],{"style":126489,"src":144884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[21,144886,144887],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[21,144889,144890],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[24,144892],{"style":126489,"src":144893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[21,144895,144896],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[24,144898],{"style":126489,"src":144899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[21,144901,144902],{},"修改成75就可以，alt+z为快捷键",[21,144904,144905],{},"index.css：",[82,144907,144908],{"className":126633,"code":144650,"language":126635,"meta":26,"style":26},[88,144909,144910,144914,144920,144934,144938,144944,144958],{"__ignoreMap":26},[91,144911,144912],{"class":93,"line":94},[91,144913,144657],{"class":308},[91,144915,144916,144918],{"class":93,"line":38},[91,144917,50716],{"class":51381},[91,144919,15695],{"class":250},[91,144921,144922,144924,144926,144928,144930,144932],{"class":93,"line":1304},[91,144923,70707],{"class":105},[91,144925,51518],{"class":250},[91,144927,144672],{"class":105},[91,144929,577],{"class":153},[91,144931,130496],{"class":250},[91,144933,144679],{"class":308},[91,144935,144936],{"class":93,"line":1319},[91,144937,1689],{"class":250},[91,144939,144940,144942],{"class":93,"line":1325},[91,144941,130481],{"class":97},[91,144943,15695],{"class":250},[91,144945,144946,144948,144950,144952,144954,144956],{"class":93,"line":1339},[91,144947,70649],{"class":105},[91,144949,51518],{"class":250},[91,144951,695],{"class":105},[91,144953,144700],{"class":153},[91,144955,130496],{"class":250},[91,144957,144705],{"class":308},[91,144959,144960],{"class":93,"line":1345},[91,144961,1689],{"class":250},[21,144963,144647],{},[82,144965,144966],{"className":126633,"code":127037,"language":126635,"meta":26,"style":26},[88,144967,144968,144974,144986],{"__ignoreMap":26},[91,144969,144970,144972],{"class":93,"line":94},[91,144971,51881],{"class":51381},[91,144973,15695],{"class":250},[91,144975,144976,144978,144980,144982,144984],{"class":93,"line":38},[91,144977,70707],{"class":105},[91,144979,51518],{"class":250},[91,144981,850],{"class":105},[91,144983,51573],{"class":153},[91,144985,1415],{"class":250},[91,144987,144988],{"class":93,"line":1304},[91,144989,1689],{"class":250},[190,144991,144993],{"id":144992},"_214-响应式开发","21.4 响应式开发",[21,144995,144996],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[24,144998],{"style":126489,"src":144999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[21,145001,145002],{},"做法：",[1256,145004,145005,145008],{},[17,145006,145007],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[17,145009,145010],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[24,145012],{"style":126489,"src":145013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[21,145015,145016],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[217,145018,145020],{"id":145019},"_2141-简单代码示范","21.4.1 简单代码示范",[82,145022,145023],{"className":126633,"code":144650,"language":126635,"meta":26,"style":26},[88,145024,145025,145029,145035,145049,145053,145059,145073],{"__ignoreMap":26},[91,145026,145027],{"class":93,"line":94},[91,145028,144657],{"class":308},[91,145030,145031,145033],{"class":93,"line":38},[91,145032,50716],{"class":51381},[91,145034,15695],{"class":250},[91,145036,145037,145039,145041,145043,145045,145047],{"class":93,"line":1304},[91,145038,70707],{"class":105},[91,145040,51518],{"class":250},[91,145042,144672],{"class":105},[91,145044,577],{"class":153},[91,145046,130496],{"class":250},[91,145048,144679],{"class":308},[91,145050,145051],{"class":93,"line":1319},[91,145052,1689],{"class":250},[91,145054,145055,145057],{"class":93,"line":1325},[91,145056,130481],{"class":97},[91,145058,15695],{"class":250},[91,145060,145061,145063,145065,145067,145069,145071],{"class":93,"line":1339},[91,145062,70649],{"class":105},[91,145064,51518],{"class":250},[91,145066,695],{"class":105},[91,145068,144700],{"class":153},[91,145070,130496],{"class":250},[91,145072,144705],{"class":308},[91,145074,145075],{"class":93,"line":1345},[91,145076,1689],{"class":250},[21,145078,145079],{},"父盒子一般命名为container",[217,145081,145083],{"id":145082},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[21,145085,145086,145087],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[398,145088,145089],{},"使得 Web 开发更加快捷",[1256,145091,145092],{},[17,145093,145094,145095],{},"官网：",[398,145096,145097],{},[487,145098,145099],{"href":145099,"rel":145100},"http:\u002F\u002Fgetbootstrap.com\u002F",[23987],[21,145102,145103],{},"可以直接去官网拿现成的东西",[14,145105,145106],{},[17,145107,145108],{},"Bootstrap的使用",[21,145110,145111],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[21,145113,145114],{},"Bootstrap 使用四步曲：",[21,145116,145117,145120],{},[398,145118,145119],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[24,145122],{"style":126489,"src":145123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[21,145125,145126],{},"打开Bootstrap官网，然后下载",[24,145128],{"style":126489,"src":145129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[24,145131],{"style":126489,"src":145132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[21,145134,145135],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[21,145137,145138],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[21,145140,145141],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[24,145143],{"style":126489,"src":145144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[82,145146,145148],{"className":126633,"code":145147,"language":126635,"meta":26,"style":26},".center {\n  color: red;\n}\n",[88,145149,145150,145156,145166],{"__ignoreMap":26},[91,145151,145152,145154],{"class":93,"line":94},[91,145153,126924],{"class":97},[91,145155,15695],{"class":250},[91,145157,145158,145160,145162,145164],{"class":93,"line":38},[91,145159,70986],{"class":105},[91,145161,51518],{"class":250},[91,145163,57502],{"class":105},[91,145165,1415],{"class":250},[91,145167,145168],{"class":93,"line":1304},[91,145169,1689],{"class":250},[21,145171,145172,145175],{},[88,145173,145174],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[24,145177],{"style":126489,"src":145178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[24,145180],{"style":126489,"src":145181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[24,145183],{"style":126489,"src":145184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[21,145186,145187],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[24,145189],{"style":126489,"src":145190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[21,145192,145193],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[14,145195,145196],{"start":38},[17,145197,145198],{},"布局容器",[24,145200],{"style":126489,"src":145201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[21,145203,145204],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[21,145206,145207],{},"container-fluid用于移动式布局比较方便",[14,145209,145210],{"start":1304},[17,145211,145212,145213],{},"bootstrap ",[398,145214,145215],{},"栅格系统原理",[24,145217],{"style":126489,"src":145218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[14,145220,145221],{"start":1319},[17,145222,145223],{},[398,145224,145225],{},"栅格选项参数",[24,145227],{"style":126489,"src":145228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[21,145230,145231],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[21,145233,14756],{},[82,145235,145236],{"className":126633,"code":145147,"language":126635,"meta":26,"style":26},[88,145237,145238,145244,145254],{"__ignoreMap":26},[91,145239,145240,145242],{"class":93,"line":94},[91,145241,126924],{"class":97},[91,145243,15695],{"class":250},[91,145245,145246,145248,145250,145252],{"class":93,"line":38},[91,145247,70986],{"class":105},[91,145249,51518],{"class":250},[91,145251,57502],{"class":105},[91,145253,1415],{"class":250},[91,145255,145256],{"class":93,"line":1304},[91,145257,1689],{"class":250},[21,145259,135676],{},[24,145261],{"style":126489,"src":145262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[21,145264,145265],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[21,145267,145268],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[21,145270,145271],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[21,145273,145274],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[21,145276,145277],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[21,145279,145280],{},"汇总展示说明：",[82,145282,145283],{"className":127380,"code":130737,"language":127382,"meta":26,"style":26},[88,145284,145285,145289,145303,145307],{"__ignoreMap":26},[91,145286,145287],{"class":93,"line":94},[91,145288,130744],{"class":308},[91,145290,145291,145293,145295,145297,145299,145301],{"class":93,"line":38},[91,145292,1159],{"class":250},[91,145294,51692],{"class":51381},[91,145296,53567],{"class":97},[91,145298,296],{"class":250},[91,145300,130757],{"class":101},[91,145302,51388],{"class":250},[91,145304,145305],{"class":93,"line":1304},[91,145306,130764],{"class":250},[91,145308,145309,145311,145313],{"class":93,"line":1319},[91,145310,51866],{"class":250},[91,145312,51692],{"class":51381},[91,145314,51388],{"class":250},[24,145316],{"style":126489,"src":145317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[21,145319,145320],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[82,145322,145323],{"className":127380,"code":130737,"language":127382,"meta":26,"style":26},[88,145324,145325,145329,145343,145347],{"__ignoreMap":26},[91,145326,145327],{"class":93,"line":94},[91,145328,130744],{"class":308},[91,145330,145331,145333,145335,145337,145339,145341],{"class":93,"line":38},[91,145332,1159],{"class":250},[91,145334,51692],{"class":51381},[91,145336,53567],{"class":97},[91,145338,296],{"class":250},[91,145340,130757],{"class":101},[91,145342,51388],{"class":250},[91,145344,145345],{"class":93,"line":1304},[91,145346,130764],{"class":250},[91,145348,145349,145351,145353],{"class":93,"line":1319},[91,145350,51866],{"class":250},[91,145352,51692],{"class":51381},[91,145354,51388],{"class":250},[14,145356,145357],{"start":1325},[17,145358,145359],{},[398,145360,145361],{},"列嵌套",[24,145363],{"style":126489,"src":145364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[21,145366,145367],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[21,145369,145370],{},"没加row内部这样：",[24,145372],{"style":126489,"src":145373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[21,145375,145376],{},"加上row之后内部为：",[24,145378],{"style":126489,"src":145379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[14,145381,145382],{"start":1339},[17,145383,145384],{},[398,145385,145386],{},"列偏移",[24,145388],{"style":126489,"src":145389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[21,145391,145392],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[21,145394,145395],{},"要加偏移量，即偏移份数",[21,145397,145398],{},"偏移的份数=12-两个盒子的份数",[14,145400,145401],{"start":1345},[17,145402,145403],{},[398,145404,145405],{},"列排序",[24,145407],{"style":126489,"src":145408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[21,145410,145411],{},"pull拉左；push推右",[14,145413,145414],{"start":1436},[17,145415,145416],{},[398,145417,145418],{},"响应式工具",[24,145420],{"style":126489,"src":145421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[21,145423,145424],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[217,145426,145428],{"id":145427},"_2143-响应式小项目","21.4.3 响应式小项目",[21,145430,145431],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[21,145433,145434],{},"ul {",[21,145436,145437],{},"list-style: none;",[21,145439,145440],{},"margin:0;",[21,145442,145443],{},"padding:0; }",[24,145445],{"style":126489,"src":145446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[24,145448],{"style":126489,"src":145449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[21,145451,145452],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[21,145454,68970],{},[82,145456,145457],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,145458,145459,145465,145475],{"__ignoreMap":26},[91,145460,145461,145463],{"class":93,"line":94},[91,145462,130481],{"class":97},[91,145464,15695],{"class":250},[91,145466,145467,145469,145471,145473],{"class":93,"line":38},[91,145468,131113],{"class":105},[91,145470,51518],{"class":250},[91,145472,23860],{"class":105},[91,145474,1415],{"class":250},[91,145476,145477],{"class":93,"line":1304},[91,145478,1689],{"class":250},[21,145480,70534],{},[82,145482,145483],{"className":126633,"code":139303,"language":126635,"meta":26,"style":26},[88,145484,145485,145491,145501],{"__ignoreMap":26},[91,145486,145487,145489],{"class":93,"line":94},[91,145488,130481],{"class":97},[91,145490,15695],{"class":250},[91,145492,145493,145495,145497,145499],{"class":93,"line":38},[91,145494,131113],{"class":105},[91,145496,51518],{"class":250},[91,145498,23860],{"class":105},[91,145500,1415],{"class":250},[91,145502,145503],{"class":93,"line":1304},[91,145504,1689],{"class":250},[190,145506,145508],{"id":145507},"_215-swiper-插件使用","21.5 swiper 插件使用",[1256,145510,145511,145514,145517],{},[17,145512,145513],{},"下载需要的css和js文件html页面中 引入相关文件",[17,145515,145516],{},"官网找到类似案例，复制html结构，css样式 js 语法",[17,145518,145519],{},"根据需求定制修改模块",[24,145521],{"style":126489,"src":145522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[21,145524,145525],{},"解压后将这两部分放到项目中",[24,145527],{"style":126489,"src":145528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[21,145530,145531],{},"这个插件可以帮助我们实现轮播图效果",[21,145533,145534],{},"用法：",[24,145536],{"style":126489,"src":145537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[21,145539,145540],{},"找到自己喜欢的",[24,145542],{"style":126489,"src":145543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[21,145545,145546],{},"右键，查看网页源代码",[24,145548],{"style":126489,"src":145549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[21,145551,145552],{},"复制人家的结构内容",[21,145554,145555],{},"然后去看API文档：",[24,145557],{"style":126489,"src":145558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[21,145560,145561],{},"可以看看如何修改样式",[21,145563,145564],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[168,145566,145567],{},"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":26,"searchDepth":38,"depth":38,"links":145569},[145570,145575,145579,145584,145589],{"id":144370,"depth":38,"text":144371,"children":145571},[145572,145573,145574],{"id":144374,"depth":1304,"text":144375},{"id":144384,"depth":1304,"text":144385},{"id":144479,"depth":1304,"text":144480},{"id":144494,"depth":38,"text":144495,"children":145576},[145577,145578],{"id":144516,"depth":1304,"text":144517},{"id":144532,"depth":1304,"text":144533},{"id":144607,"depth":38,"text":144608,"children":145580},[145581,145582,145583],{"id":144620,"depth":1304,"text":144621},{"id":144844,"depth":1304,"text":144845},{"id":144851,"depth":1304,"text":144852},{"id":144992,"depth":38,"text":144993,"children":145585},[145586,145587,145588],{"id":145019,"depth":1304,"text":145020},{"id":145082,"depth":1304,"text":145083},{"id":145427,"depth":1304,"text":145428},{"id":145507,"depth":38,"text":145508},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144362,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145596,"title":145597,"body":145598,"description":23500,"extension":173,"meta":145818,"navigation":175,"path":145819,"seo":145820,"stem":145821,"__hash__":145822},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145599,"toc":145814},[145600,145603,145607,145610,145625,145630,145633,145638,145673,145678,145690,145695,145708,145713,145730,145735,145755,145760,145778,145781,145784,145787,145790,145794,145797,145800,145803,145806,145809,145812],[10,145601,145597],{"id":145602},"_22-代码提交与新型相对单位",[190,145604,145606],{"id":145605},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[21,145608,145609],{},"法1：",[14,145611,145612,145619,145622],{},[17,145613,145614,145615],{},"登录网站注册：",[487,145616,145617],{"href":145617,"rel":145618},"https:\u002F\u002Fgitee.com\u002F",[23987],[17,145620,145621],{},"码云创建新的仓库",[17,145623,145624],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1256,145626,145627],{},[17,145628,145629],{},"在网站根目录右键-- Git Bash Here",[24,145631],{"style":126489,"src":145632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1256,145634,145635],{},[17,145636,145637],{},"如果是第一次利用git提交，请配置好全局选项",[82,145639,145641],{"className":117377,"code":145640,"language":117379,"meta":26,"style":26},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[88,145642,145643,145659],{"__ignoreMap":26},[91,145644,145645,145648,145650,145653,145656],{"class":93,"line":94},[91,145646,145647],{"class":97},"git",[91,145649,119800],{"class":101},[91,145651,145652],{"class":105}," --global",[91,145654,145655],{"class":101}," user.name",[91,145657,145658],{"class":101}," \"你的名字\"\n",[91,145660,145661,145663,145665,145667,145670],{"class":93,"line":38},[91,145662,145647],{"class":97},[91,145664,119800],{"class":101},[91,145666,145652],{"class":105},[91,145668,145669],{"class":101}," user.email",[91,145671,145672],{"class":101}," \"你的邮箱\"\n",[1256,145674,145675],{},[17,145676,145677],{},"初始化仓库",[82,145679,145681],{"className":117377,"code":145680,"language":117379,"meta":26,"style":26},"git init\n",[88,145682,145683],{"__ignoreMap":26},[91,145684,145685,145687],{"class":93,"line":94},[91,145686,145647],{"class":97},[91,145688,145689],{"class":101}," init\n",[1256,145691,145692],{},[17,145693,145694],{},"把本地文件放到暂存区",[82,145696,145698],{"className":117377,"code":145697,"language":117379,"meta":26,"style":26},"git add .\n",[88,145699,145700],{"__ignoreMap":26},[91,145701,145702,145704,145706],{"class":93,"line":94},[91,145703,145647],{"class":97},[91,145705,5332],{"class":101},[91,145707,28860],{"class":101},[1256,145709,145710],{},[17,145711,145712],{},"把本地文件放到本地仓库里面",[82,145714,145716],{"className":117377,"code":145715,"language":117379,"meta":26,"style":26},"git commit -m \"first commit\"\n",[88,145717,145718],{"__ignoreMap":26},[91,145719,145720,145722,145725,145727],{"class":93,"line":94},[91,145721,145647],{"class":97},[91,145723,145724],{"class":101}," commit",[91,145726,100963],{"class":105},[91,145728,145729],{"class":101}," \"first commit\"\n",[1256,145731,145732],{},[17,145733,145734],{},"链接远程仓库",[82,145736,145738],{"className":117377,"code":145737,"language":117379,"meta":26,"style":26},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[88,145739,145740],{"__ignoreMap":26},[91,145741,145742,145744,145747,145749,145752],{"class":93,"line":94},[91,145743,145647],{"class":97},[91,145745,145746],{"class":101}," remote",[91,145748,5332],{"class":101},[91,145750,145751],{"class":101}," origin",[91,145753,145754],{"class":101}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1256,145756,145757],{},[17,145758,145759],{},"把本地仓库的文件推送到远程仓库 push",[82,145761,145763],{"className":117377,"code":145762,"language":117379,"meta":26,"style":26},"git push -u origin master\n",[88,145764,145765],{"__ignoreMap":26},[91,145766,145767,145769,145771,145773,145775],{"class":93,"line":94},[91,145768,145647],{"class":97},[91,145770,29135],{"class":101},[91,145772,28409],{"class":105},[91,145774,145751],{"class":101},[91,145776,145777],{"class":101}," master\n",[24,145779],{"style":126489,"src":145780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[21,145782,145783],{},"上方方法暂未实现，后边学完git后在整",[21,145785,145786],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[24,145788],{"style":126489,"src":145789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[190,145791,145793],{"id":145792},"_222-新型相对单位","22.2 新型相对单位",[24,145795],{"style":126489,"src":145796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[24,145798],{"style":126489,"src":145799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[21,145801,145802],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[21,145804,145805],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[24,145807],{"style":126489,"src":145808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[21,145810,145811],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[168,145813,24080],{},{"title":26,"searchDepth":38,"depth":38,"links":145815},[145816,145817],{"id":145605,"depth":38,"text":145606},{"id":145792,"depth":38,"text":145793},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145597,"description":23500},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145824,"title":145825,"body":145826,"description":145830,"extension":173,"meta":145831,"navigation":175,"path":145832,"seo":145833,"stem":145834,"__hash__":145835},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145827,"toc":145828},[],{"title":26,"searchDepth":38,"depth":38,"links":145829},[],"自己正经开始学编程的第一门语言！",{"category":92920},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145825,"description":145830},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145837,"title":145838,"body":145839,"description":23500,"extension":173,"meta":146986,"navigation":175,"path":146987,"seo":146988,"stem":146989,"__hash__":146990},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145840,"toc":146962},[145841,145844,145848,145851,145854,145879,145882,145888,145892,145895,145922,145925,145965,145968,145980,145983,145989,145993,145997,146024,146041,146048,146052,146055,146081,146084,146088,146091,146131,146134,146151,146157,146161,146166,146210,146213,146231,146234,146302,146306,146313,146316,146331,146334,146343,146346,146357,146360,146369,146372,146389,146392,146407,146411,146415,146418,146420,146440,146444,146447,146450,146461,146464,146470,146474,146480,146507,146510,146522,146525,146536,146539,146545,146549,146555,146605,146608,146650,146653,146686,146689,146723,146727,146730,146750,146753,146789,146792,146805,146809,146813,146819,146822,146835,146839,146842,146848,146851,146855,146858,146861,146910,146914,146930,146936,146943,146949,146959],[10,145842,145838],{"id":145843},"_1-python环境与第一个程序",[190,145845,145847],{"id":145846},"_11-什么是python","1.1 什么是Python",[21,145849,145850],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[21,145852,145853],{},"理解 Python 时抓住三个关键词：",[14,145855,145856,145859,145862],{},[17,145857,145858],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[17,145860,145861],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[17,145863,145864,145865,461,145868,461,145871,461,145874,461,145876,28504],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[88,145866,145867],{},"os",[88,145869,145870],{},"sys",[88,145872,145873],{},"json",[88,145875,57941],{},[88,145877,145878],{},"datetime",[21,145880,145881],{},"Python 程序的运行链路：",[82,145883,145886],{"className":145884,"code":145885,"language":5310,"meta":26},[5308],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[88,145887,145885],{"__ignoreMap":26},[190,145889,145891],{"id":145890},"_12-python解释器","1.2 Python解释器",[21,145893,145894],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[82,145896,145898],{"className":84,"code":145897,"language":86,"meta":26,"style":26},"python --version\npython3 --version\npython\npython3\n",[88,145899,145900,145906,145912,145917],{"__ignoreMap":26},[91,145901,145902,145904],{"class":93,"line":94},[91,145903,30461],{"class":97},[91,145905,26415],{"class":105},[91,145907,145908,145910],{"class":93,"line":38},[91,145909,100960],{"class":97},[91,145911,26415],{"class":105},[91,145913,145914],{"class":93,"line":1304},[91,145915,145916],{"class":97},"python\n",[91,145918,145919],{"class":93,"line":1319},[91,145920,145921],{"class":97},"python3\n",[21,145923,145924],{},"进入交互模式后，可以直接输入表达式：",[82,145926,145928],{"className":30459,"code":145927,"language":30461,"meta":26,"style":26},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[88,145929,145930,145941,145946,145960],{"__ignoreMap":26},[91,145931,145932,145935,145937,145939],{"class":93,"line":94},[91,145933,145934],{"class":153},">>>",[91,145936,25240],{"class":105},[91,145938,45647],{"class":153},[91,145940,47804],{"class":105},[91,145942,145943],{"class":93,"line":38},[91,145944,145945],{"class":105},"3\n",[91,145947,145948,145950,145953,145955,145958],{"class":93,"line":1304},[91,145949,145934],{"class":153},[91,145951,145952],{"class":105}," print",[91,145954,251],{"class":250},[91,145956,145957],{"class":101},"\"hello python\"",[91,145959,257],{"class":250},[91,145961,145962],{"class":93,"line":1319},[91,145963,145964],{"class":250},"hello python\n",[21,145966,145967],{},"退出交互模式：",[82,145969,145971],{"className":30459,"code":145970,"language":30461,"meta":26,"style":26},"exit()\n",[88,145972,145973],{"__ignoreMap":26},[91,145974,145975,145978],{"class":93,"line":94},[91,145976,145977],{"class":105},"exit",[91,145979,2099],{"class":250},[21,145981,145982],{},"或使用快捷键：",[82,145984,145987],{"className":145985,"code":145986,"language":5310,"meta":26},[5308],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[88,145988,145986],{"__ignoreMap":26},[190,145990,145992],{"id":145991},"_13-安装python","1.3 安装Python",[217,145994,145996],{"id":145995},"_131-windows安装","1.3.1 Windows安装",[14,145998,145999,146006,146009,146015,146021],{},[17,146000,146001,146002],{},"打开 Python 官网：",[487,146003,146004],{"href":146004,"rel":146005},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23987],[17,146007,146008],{},"下载 Windows Installer。",[17,146010,146011,146012,28504],{},"安装时勾选 ",[88,146013,146014],{},"Add Python to PATH",[17,146016,146017,146018,28504],{},"点击 ",[88,146019,146020],{},"Install Now",[17,146022,146023],{},"安装完成后打开命令提示符验证：",[82,146025,146027],{"className":84,"code":146026,"language":86,"meta":26,"style":26},"python --version\npip --version\n",[88,146028,146029,146035],{"__ignoreMap":26},[91,146030,146031,146033],{"class":93,"line":94},[91,146032,30461],{"class":97},[91,146034,26415],{"class":105},[91,146036,146037,146039],{"class":93,"line":38},[91,146038,23953],{"class":97},[91,146040,26415],{"class":105},[21,146042,146043,146044,146047],{},"如果提示 ",[88,146045,146046],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[217,146049,146051],{"id":146050},"_132-macos安装","1.3.2 macOS安装",[21,146053,146054],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[82,146056,146058],{"className":84,"code":146057,"language":86,"meta":26,"style":26},"brew install python\npython3 --version\npip3 --version\n",[88,146059,146060,146069,146075],{"__ignoreMap":26},[91,146061,146062,146065,146067],{"class":93,"line":94},[91,146063,146064],{"class":97},"brew",[91,146066,23956],{"class":101},[91,146068,124399],{"class":101},[91,146070,146071,146073],{"class":93,"line":38},[91,146072,100960],{"class":97},[91,146074,26415],{"class":105},[91,146076,146077,146079],{"class":93,"line":1304},[91,146078,119781],{"class":97},[91,146080,26415],{"class":105},[21,146082,146083],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[217,146085,146087],{"id":146086},"_133-linux安装","1.3.3 Linux安装",[21,146089,146090],{},"Ubuntu\u002FDebian：",[82,146092,146094],{"className":84,"code":146093,"language":86,"meta":26,"style":26},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[88,146095,146096,146104,146119,146125],{"__ignoreMap":26},[91,146097,146098,146100,146102],{"class":93,"line":94},[91,146099,24699],{"class":97},[91,146101,117398],{"class":101},[91,146103,26364],{"class":101},[91,146105,146106,146108,146110,146112,146114,146116],{"class":93,"line":38},[91,146107,24699],{"class":97},[91,146109,117398],{"class":101},[91,146111,23956],{"class":101},[91,146113,104484],{"class":101},[91,146115,100879],{"class":101},[91,146117,146118],{"class":101}," python3-venv\n",[91,146120,146121,146123],{"class":93,"line":1304},[91,146122,100960],{"class":97},[91,146124,26415],{"class":105},[91,146126,146127,146129],{"class":93,"line":1319},[91,146128,119781],{"class":97},[91,146130,26415],{"class":105},[21,146132,146133],{},"Fedora：",[82,146135,146137],{"className":84,"code":146136,"language":86,"meta":26,"style":26},"sudo dnf install python3 python3-pip\n",[88,146138,146139],{"__ignoreMap":26},[91,146140,146141,146143,146145,146147,146149],{"class":93,"line":94},[91,146142,24699],{"class":97},[91,146144,26437],{"class":101},[91,146146,23956],{"class":101},[91,146148,104484],{"class":101},[91,146150,119846],{"class":101},[21,146152,146153,146154,146156],{},"Linux 上通常使用 ",[88,146155,100960],{}," 命令，避免和系统旧版本 Python 冲突。",[190,146158,146160],{"id":146159},"_14-pip包管理器","1.4 pip包管理器",[21,146162,146163,146165],{},[88,146164,23953],{}," 用来安装第三方库。",[82,146167,146169],{"className":84,"code":146168,"language":86,"meta":26,"style":26},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[88,146170,146171,146180,146189,146197,146203],{"__ignoreMap":26},[91,146172,146173,146175,146177],{"class":93,"line":94},[91,146174,23953],{"class":97},[91,146176,23956],{"class":101},[91,146178,146179],{"class":101}," requests\n",[91,146181,146182,146184,146187],{"class":93,"line":38},[91,146183,23953],{"class":97},[91,146185,146186],{"class":101}," uninstall",[91,146188,146179],{"class":101},[91,146190,146191,146193,146195],{"class":93,"line":1304},[91,146192,23953],{"class":97},[91,146194,117655],{"class":101},[91,146196,146179],{"class":101},[91,146198,146199,146201],{"class":93,"line":1319},[91,146200,23953],{"class":97},[91,146202,119036],{"class":101},[91,146204,146205,146207],{"class":93,"line":1325},[91,146206,23953],{"class":97},[91,146208,146209],{"class":101}," freeze\n",[21,146211,146212],{},"国内网络较慢时可以临时使用镜像：",[82,146214,146216],{"className":84,"code":146215,"language":86,"meta":26,"style":26},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[88,146217,146218],{"__ignoreMap":26},[91,146219,146220,146222,146224,146227,146229],{"class":93,"line":94},[91,146221,23953],{"class":97},[91,146223,23956],{"class":101},[91,146225,146226],{"class":101}," requests",[91,146228,160],{"class":105},[91,146230,119809],{"class":101},[21,146232,146233],{},"常见第三方库：",[386,146235,146236,146245],{},[389,146237,146238],{},[392,146239,146240,146243],{},[395,146241,146242],{},"库",[395,146244,102777],{},[433,146246,146247,146255,146262,146270,146278,146286,146294],{},[392,146248,146249,146252],{},[438,146250,146251],{},"requests",[438,146253,146254],{},"网络请求",[392,146256,146257,146259],{},[438,146258,100707],{},[438,146260,146261],{},"数值计算",[392,146263,146264,146267],{},[438,146265,146266],{},"pandas",[438,146268,146269],{},"表格数据处理",[392,146271,146272,146275],{},[438,146273,146274],{},"matplotlib",[438,146276,146277],{},"绘图",[392,146279,146280,146283],{},[438,146281,146282],{},"pyecharts",[438,146284,146285],{},"ECharts 图表",[392,146287,146288,146291],{},[438,146289,146290],{},"flask",[438,146292,146293],{},"Web 后端",[392,146295,146296,146299],{},[438,146297,146298],{},"pytest",[438,146300,146301],{},"自动化测试",[190,146303,146305],{"id":146304},"_15-虚拟环境","1.5 虚拟环境",[21,146307,146308,146309,146312],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[88,146310,146311],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[21,146314,146315],{},"创建虚拟环境：",[82,146317,146319],{"className":84,"code":146318,"language":86,"meta":26,"style":26},"python -m venv .venv\n",[88,146320,146321],{"__ignoreMap":26},[91,146322,146323,146325,146327,146329],{"class":93,"line":94},[91,146324,30461],{"class":97},[91,146326,100963],{"class":105},[91,146328,100966],{"class":101},[91,146330,100969],{"class":101},[21,146332,146333],{},"Windows 激活：",[82,146335,146337],{"className":84,"code":146336,"language":86,"meta":26,"style":26},".venv\\Scripts\\activate\n",[88,146338,146339],{"__ignoreMap":26},[91,146340,146341],{"class":93,"line":94},[91,146342,146336],{"class":97},[21,146344,146345],{},"macOS\u002FLinux 激活：",[82,146347,146349],{"className":84,"code":146348,"language":86,"meta":26,"style":26},"source .venv\u002Fbin\u002Factivate\n",[88,146350,146351],{"__ignoreMap":26},[91,146352,146353,146355],{"class":93,"line":94},[91,146354,100974],{"class":105},[91,146356,100977],{"class":101},[21,146358,146359],{},"退出虚拟环境：",[82,146361,146363],{"className":84,"code":146362,"language":86,"meta":26,"style":26},"deactivate\n",[88,146364,146365],{"__ignoreMap":26},[91,146366,146367],{"class":93,"line":94},[91,146368,146362],{"class":97},[21,146370,146371],{},"保存依赖：",[82,146373,146375],{"className":84,"code":146374,"language":86,"meta":26,"style":26},"pip freeze > requirements.txt\n",[88,146376,146377],{"__ignoreMap":26},[91,146378,146379,146381,146384,146386],{"class":93,"line":94},[91,146380,23953],{"class":97},[91,146382,146383],{"class":101}," freeze",[91,146385,26344],{"class":153},[91,146387,146388],{"class":101}," requirements.txt\n",[21,146390,146391],{},"安装依赖：",[82,146393,146395],{"className":84,"code":146394,"language":86,"meta":26,"style":26},"pip install -r requirements.txt\n",[88,146396,146397],{"__ignoreMap":26},[91,146398,146399,146401,146403,146405],{"class":93,"line":94},[91,146400,23953],{"class":97},[91,146402,23956],{"class":101},[91,146404,119720],{"class":105},[91,146406,146388],{"class":101},[190,146408,146410],{"id":146409},"_16-开发工具","1.6 开发工具",[217,146412,146414],{"id":146413},"_161-pycharm","1.6.1 PyCharm",[21,146416,146417],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[21,146419,122143],{},[14,146421,146422,146425,146428,146434,146437],{},[17,146423,146424],{},"New Project：创建项目。",[17,146426,146427],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[17,146429,146430,146431,126064],{},"New Python File：创建 ",[88,146432,146433],{},".py",[17,146435,146436],{},"Run：运行当前文件。",[17,146438,146439],{},"Debug：断点调试。",[217,146441,146443],{"id":146442},"_162-vs-code","1.6.2 VS Code",[21,146445,146446],{},"VS Code 轻量，适合后续多语言开发。",[21,146448,146449],{},"建议安装插件：",[14,146451,146452,146455,146458],{},[17,146453,146454],{},"Python。",[17,146456,146457],{},"Pylance。",[17,146459,146460],{},"Jupyter。",[21,146462,146463],{},"选择解释器：",[82,146465,146468],{"className":146466,"code":146467,"language":5310,"meta":26},[5308],"Ctrl + Shift + P -> Python: Select Interpreter\n",[88,146469,146467],{"__ignoreMap":26},[190,146471,146473],{"id":146472},"_17-第一个python程序","1.7 第一个Python程序",[21,146475,146476,146477,24741],{},"创建文件 ",[88,146478,146479],{},"hello.py",[82,146481,146483],{"className":30459,"code":146482,"language":30461,"meta":26,"style":26},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[88,146484,146485,146496],{"__ignoreMap":26},[91,146486,146487,146489,146491,146494],{"class":93,"line":94},[91,146488,30496],{"class":105},[91,146490,251],{"class":250},[91,146492,146493],{"class":101},"\"Hello World\"",[91,146495,257],{"class":250},[91,146497,146498,146500,146502,146505],{"class":93,"line":38},[91,146499,30496],{"class":105},[91,146501,251],{"class":250},[91,146503,146504],{"class":101},"\"你好，Python\"",[91,146506,257],{"class":250},[21,146508,146509],{},"在终端运行：",[82,146511,146513],{"className":84,"code":146512,"language":86,"meta":26,"style":26},"python hello.py\n",[88,146514,146515],{"__ignoreMap":26},[91,146516,146517,146519],{"class":93,"line":94},[91,146518,30461],{"class":97},[91,146520,146521],{"class":101}," hello.py\n",[21,146523,146524],{},"或：",[82,146526,146528],{"className":84,"code":146527,"language":86,"meta":26,"style":26},"python3 hello.py\n",[88,146529,146530],{"__ignoreMap":26},[91,146531,146532,146534],{"class":93,"line":94},[91,146533,100960],{"class":97},[91,146535,146521],{"class":101},[21,146537,146538],{},"输出：",[82,146540,146543],{"className":146541,"code":146542,"language":5310,"meta":26},[5308],"Hello World\n你好，Python\n",[88,146544,146542],{"__ignoreMap":26},[190,146546,146548],{"id":146547},"_18-print函数","1.8 print函数",[21,146550,146551,146554],{},[88,146552,146553],{},"print()"," 用来输出内容。",[82,146556,146558],{"className":30459,"code":146557,"language":30461,"meta":26,"style":26},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[88,146559,146560,146570,146580,146590],{"__ignoreMap":26},[91,146561,146562,146564,146566,146568],{"class":93,"line":94},[91,146563,30496],{"class":105},[91,146565,251],{"class":250},[91,146567,5967],{"class":101},[91,146569,257],{"class":250},[91,146571,146572,146574,146576,146578],{"class":93,"line":38},[91,146573,30496],{"class":105},[91,146575,251],{"class":250},[91,146577,560],{"class":105},[91,146579,257],{"class":250},[91,146581,146582,146584,146586,146588],{"class":93,"line":1304},[91,146583,30496],{"class":105},[91,146585,251],{"class":250},[91,146587,299],{"class":105},[91,146589,257],{"class":250},[91,146591,146592,146594,146596,146599,146601,146603],{"class":93,"line":1319},[91,146593,30496],{"class":105},[91,146595,251],{"class":250},[91,146597,146598],{"class":101},"\"年龄:\"",[91,146600,12558],{"class":250},[91,146602,899],{"class":105},[91,146604,257],{"class":250},[21,146606,146607],{},"多个内容用逗号隔开，默认中间加空格：",[82,146609,146611],{"className":30459,"code":146610,"language":30461,"meta":26,"style":26},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[88,146612,146613,146623,146633],{"__ignoreMap":26},[91,146614,146615,146618,146620],{"class":93,"line":94},[91,146616,146617],{"class":250},"name ",[91,146619,296],{"class":153},[91,146621,146622],{"class":101}," \"张三\"\n",[91,146624,146625,146628,146630],{"class":93,"line":38},[91,146626,146627],{"class":250},"age ",[91,146629,296],{"class":153},[91,146631,146632],{"class":105}," 18\n",[91,146634,146635,146637,146639,146642,146645,146647],{"class":93,"line":1304},[91,146636,30496],{"class":105},[91,146638,251],{"class":250},[91,146640,146641],{"class":101},"\"姓名:\"",[91,146643,146644],{"class":250},", name, ",[91,146646,146598],{"class":101},[91,146648,146649],{"class":250},", age)\n",[21,146651,146652],{},"修改分隔符：",[82,146654,146656],{"className":30459,"code":146655,"language":30461,"meta":26,"style":26},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[88,146657,146658],{"__ignoreMap":26},[91,146659,146660,146662,146664,146667,146669,146671,146673,146675,146677,146680,146682,146684],{"class":93,"line":94},[91,146661,30496],{"class":105},[91,146663,251],{"class":250},[91,146665,146666],{"class":101},"\"2024\"",[91,146668,12558],{"class":250},[91,146670,54397],{"class":101},[91,146672,12558],{"class":250},[91,146674,54397],{"class":101},[91,146676,12558],{"class":250},[91,146678,146679],{"class":5339},"sep",[91,146681,296],{"class":153},[91,146683,32564],{"class":101},[91,146685,257],{"class":250},[21,146687,146688],{},"修改结尾符：",[82,146690,146692],{"className":30459,"code":146691,"language":30461,"meta":26,"style":26},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[88,146693,146694,146712],{"__ignoreMap":26},[91,146695,146696,146698,146700,146702,146704,146706,146708,146710],{"class":93,"line":94},[91,146697,30496],{"class":105},[91,146699,251],{"class":250},[91,146701,5967],{"class":101},[91,146703,12558],{"class":250},[91,146705,45882],{"class":5339},[91,146707,296],{"class":153},[91,146709,4482],{"class":101},[91,146711,257],{"class":250},[91,146713,146714,146716,146718,146721],{"class":93,"line":38},[91,146715,30496],{"class":105},[91,146717,251],{"class":250},[91,146719,146720],{"class":101},"\"python\"",[91,146722,257],{"class":250},[190,146724,146726],{"id":146725},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[21,146728,146729],{},"交互运行适合临时验证：",[82,146731,146733],{"className":30459,"code":146732,"language":30461,"meta":26,"style":26},">>> 10 * 3\n30\n",[88,146734,146735,146745],{"__ignoreMap":26},[91,146736,146737,146739,146741,146743],{"class":93,"line":94},[91,146738,145934],{"class":153},[91,146740,2161],{"class":105},[91,146742,6641],{"class":153},[91,146744,120117],{"class":105},[91,146746,146747],{"class":93,"line":38},[91,146748,146749],{"class":105},"30\n",[21,146751,146752],{},"脚本运行适合保存程序：",[82,146754,146756],{"className":30459,"code":146755,"language":30461,"meta":26,"style":26},"price = 8\ncount = 5\nprint(price * count)\n",[88,146757,146758,146768,146777],{"__ignoreMap":26},[91,146759,146760,146763,146765],{"class":93,"line":94},[91,146761,146762],{"class":250},"price ",[91,146764,296],{"class":153},[91,146766,146767],{"class":105}," 8\n",[91,146769,146770,146773,146775],{"class":93,"line":38},[91,146771,146772],{"class":250},"count ",[91,146774,296],{"class":153},[91,146776,54508],{"class":105},[91,146778,146779,146781,146784,146786],{"class":93,"line":1304},[91,146780,30496],{"class":105},[91,146782,146783],{"class":250},"(price ",[91,146785,704],{"class":153},[91,146787,146788],{"class":250}," count)\n",[21,146790,146791],{},"实际学习中推荐：",[14,146793,146794,146797,146802],{},[17,146795,146796],{},"临时试一个语法，用交互模式。",[17,146798,146799,146800,126064],{},"写完整练习，用 ",[88,146801,146433],{},[17,146803,146804],{},"写项目，用独立目录和虚拟环境。",[190,146806,146808],{"id":146807},"_110-常见错误","1.10 常见错误",[217,146810,146812],{"id":146811},"_1101-命令找不到","1.10.1 命令找不到",[82,146814,146817],{"className":146815,"code":146816,"language":5310,"meta":26},[5308],"python: command not found\n",[88,146818,146816],{"__ignoreMap":26},[21,146820,146821],{},"原因：",[14,146823,146824,146827,146830],{},[17,146825,146826],{},"没安装 Python。",[17,146828,146829],{},"PATH 没配置。",[17,146831,146832,146833,28504],{},"Linux\u002FmacOS 应该使用 ",[88,146834,100960],{},[217,146836,146838],{"id":146837},"_1102-文件名冲突","1.10.2 文件名冲突",[21,146840,146841],{},"不要把文件命名为：",[82,146843,146846],{"className":146844,"code":146845,"language":5310,"meta":26},[5308],"random.py\njson.py\ntime.py\nrequests.py\n",[88,146847,146845],{"__ignoreMap":26},[21,146849,146850],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[217,146852,146854],{"id":146853},"_1103-中文乱码","1.10.3 中文乱码",[21,146856,146857],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[21,146859,146860],{},"如果读写文件出现乱码，要明确指定编码：",[82,146862,146864],{"className":30459,"code":146863,"language":30461,"meta":26,"style":26},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[88,146865,146866,146900],{"__ignoreMap":26},[91,146867,146868,146870,146873,146875,146878,146880,146883,146885,146888,146890,146893,146895,146897],{"class":93,"line":94},[91,146869,107914],{"class":153},[91,146871,146872],{"class":105}," open",[91,146874,251],{"class":250},[91,146876,146877],{"class":101},"\"data.txt\"",[91,146879,12558],{"class":250},[91,146881,146882],{"class":101},"\"r\"",[91,146884,12558],{"class":250},[91,146886,146887],{"class":5339},"encoding",[91,146889,296],{"class":153},[91,146891,146892],{"class":101},"\"utf-8\"",[91,146894,13837],{"class":250},[91,146896,31464],{"class":153},[91,146898,146899],{"class":250}," f:\n",[91,146901,146902,146905,146907],{"class":93,"line":38},[91,146903,146904],{"class":250},"    content ",[91,146906,296],{"class":153},[91,146908,146909],{"class":250}," f.read()\n",[190,146911,146913],{"id":146912},"_111-本章练习","1.11 本章练习",[14,146915,146916,146919,146925],{},[17,146917,146918],{},"安装 Python，并在终端输出版本号。",[17,146920,146921,146922,146924],{},"新建 ",[88,146923,146479],{},"，输出自己的姓名、年龄、学习目标。",[17,146926,104447,146927,146929],{},[88,146928,146553],{}," 输出下面格式：",[82,146931,146934],{"className":146932,"code":146933,"language":5310,"meta":26},[5308],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[88,146935,146933],{"__ignoreMap":26},[14,146937,146938],{"start":1319},[17,146939,104447,146940,146942],{},[88,146941,146679],{}," 输出日期：",[82,146944,146947],{"className":146945,"code":146946,"language":5310,"meta":26},[5308],"2024-10-10\n",[88,146948,146946],{"__ignoreMap":26},[14,146950,146951],{"start":1325},[17,146952,104447,146953,146955,146956,146958],{},[88,146954,45882],{}," 让两次 ",[88,146957,146553],{}," 输出在同一行。",[168,146960,146961],{},"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":26,"searchDepth":38,"depth":38,"links":146963},[146964,146965,146966,146971,146972,146973,146977,146978,146979,146980,146985],{"id":145846,"depth":38,"text":145847},{"id":145890,"depth":38,"text":145891},{"id":145991,"depth":38,"text":145992,"children":146967},[146968,146969,146970],{"id":145995,"depth":1304,"text":145996},{"id":146050,"depth":1304,"text":146051},{"id":146086,"depth":1304,"text":146087},{"id":146159,"depth":38,"text":146160},{"id":146304,"depth":38,"text":146305},{"id":146409,"depth":38,"text":146410,"children":146974},[146975,146976],{"id":146413,"depth":1304,"text":146414},{"id":146442,"depth":1304,"text":146443},{"id":146472,"depth":38,"text":146473},{"id":146547,"depth":38,"text":146548},{"id":146725,"depth":38,"text":146726},{"id":146807,"depth":38,"text":146808,"children":146981},[146982,146983,146984],{"id":146811,"depth":1304,"text":146812},{"id":146837,"depth":1304,"text":146838},{"id":146853,"depth":1304,"text":146854},{"id":146912,"depth":38,"text":146913},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145838,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146992,"title":146993,"body":146994,"description":23500,"extension":173,"meta":149398,"navigation":175,"path":149399,"seo":149400,"stem":149401,"__hash__":149402},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146995,"toc":149383},[146996,146999,147003,147006,147009,147026,147029,147071,147074,147078,147081,147084,147121,147124,147158,147161,147253,147257,147271,147274,147301,147304,147308,147411,147418,147421,147438,147442,147449,147638,147641,147714,147718,147721,147805,147808,147840,147844,148048,148051,148055,148061,148163,148166,148422,148426,148429,148432,148446,148448,148634,148638,149000,149006,149010,149013,149137,149140,149319,149322,149326,149359,149363,149380],[10,146997,146993],{"id":146998},"_10-json与pyecharts折线图",[190,147000,147002],{"id":147001},"_101-数据可视化","10.1 数据可视化",[21,147004,147005],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[21,147007,147008],{},"常见图表：",[14,147010,147011,147014,147017,147020,147023],{},[17,147012,147013],{},"折线图：看趋势。",[17,147015,147016],{},"柱状图：看分类对比。",[17,147018,147019],{},"饼图：看占比。",[17,147021,147022],{},"地图：看地域分布。",[17,147024,147025],{},"散点图：看两个变量之间的关系。",[21,147027,147028],{},"Python 可视化常用库：",[386,147030,147031,147039],{},[389,147032,147033],{},[392,147034,147035,147037],{},[395,147036,146242],{},[395,147038,23864],{},[433,147040,147041,147048,147056,147063],{},[392,147042,147043,147045],{},[438,147044,146274],{},[438,147046,147047],{},"基础、经典、可定制",[392,147049,147050,147053],{},[438,147051,147052],{},"seaborn",[438,147054,147055],{},"统计图表更美观",[392,147057,147058,147060],{},[438,147059,146282],{},[438,147061,147062],{},"生成交互式网页图表",[392,147064,147065,147068],{},[438,147066,147067],{},"plotly",[438,147069,147070],{},"交互图表能力强",[21,147072,147073],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[190,147075,147077],{"id":147076},"_102-json回顾","10.2 JSON回顾",[21,147079,147080],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[21,147082,147083],{},"Python 字典：",[82,147085,147087],{"className":30459,"code":147086,"language":30461,"meta":26,"style":26},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[88,147088,147089,147097,147108,147117],{"__ignoreMap":26},[91,147090,147091,147093,147095],{"class":93,"line":94},[91,147092,101739],{"class":250},[91,147094,296],{"class":153},[91,147096,15695],{"class":250},[91,147098,147099,147102,147104,147106],{"class":93,"line":38},[91,147100,147101],{"class":101},"    \"name\"",[91,147103,51518],{"class":250},[91,147105,69350],{"class":101},[91,147107,31547],{"class":250},[91,147109,147110,147113,147115],{"class":93,"line":1304},[91,147111,147112],{"class":101},"    \"value\"",[91,147114,51518],{"class":250},[91,147116,97539],{"class":105},[91,147118,147119],{"class":93,"line":1319},[91,147120,1689],{"class":250},[21,147122,147123],{},"JSON 字符串：",[82,147125,147128],{"className":147126,"code":147127,"language":145873,"meta":26,"style":26},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[88,147129,147130,147134,147145,147154],{"__ignoreMap":26},[91,147131,147132],{"class":93,"line":94},[91,147133,1670],{"class":250},[91,147135,147136,147139,147141,147143],{"class":93,"line":38},[91,147137,147138],{"class":105},"  \"name\"",[91,147140,51518],{"class":250},[91,147142,69350],{"class":101},[91,147144,31547],{"class":250},[91,147146,147147,147150,147152],{"class":93,"line":1304},[91,147148,147149],{"class":105},"  \"value\"",[91,147151,51518],{"class":250},[91,147153,97539],{"class":105},[91,147155,147156],{"class":93,"line":1319},[91,147157,1689],{"class":250},[21,147159,147160],{},"Python 与 JSON 的转换：",[82,147162,147164],{"className":30459,"code":147163,"language":30461,"meta":26,"style":26},"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",[88,147165,147166,147173,147177,147202,147206,147225,147232,147236,147246],{"__ignoreMap":26},[91,147167,147168,147170],{"class":93,"line":94},[91,147169,30473],{"class":153},[91,147171,147172],{"class":250}," json\n",[91,147174,147175],{"class":93,"line":38},[91,147176,2523],{"emptyLinePlaceholder":175},[91,147178,147179,147181,147183,147185,147187,147189,147191,147193,147196,147198,147200],{"class":93,"line":1304},[91,147180,101739],{"class":250},[91,147182,296],{"class":153},[91,147184,4571],{"class":250},[91,147186,62760],{"class":101},[91,147188,51518],{"class":250},[91,147190,69350],{"class":101},[91,147192,12558],{"class":250},[91,147194,147195],{"class":101},"\"value\"",[91,147197,51518],{"class":250},[91,147199,560],{"class":105},[91,147201,1689],{"class":250},[91,147203,147204],{"class":93,"line":1319},[91,147205,2523],{"emptyLinePlaceholder":175},[91,147207,147208,147211,147213,147216,147219,147221,147223],{"class":93,"line":1325},[91,147209,147210],{"class":250},"json_text ",[91,147212,296],{"class":153},[91,147214,147215],{"class":250}," json.dumps(data, ",[91,147217,147218],{"class":5339},"ensure_ascii",[91,147220,296],{"class":153},[91,147222,34068],{"class":105},[91,147224,257],{"class":250},[91,147226,147227,147229],{"class":93,"line":1339},[91,147228,30496],{"class":105},[91,147230,147231],{"class":250},"(json_text)\n",[91,147233,147234],{"class":93,"line":1345},[91,147235,2523],{"emptyLinePlaceholder":175},[91,147237,147238,147241,147243],{"class":93,"line":1436},[91,147239,147240],{"class":250},"new_data ",[91,147242,296],{"class":153},[91,147244,147245],{"class":250}," json.loads(json_text)\n",[91,147247,147248,147250],{"class":93,"line":1442},[91,147249,30496],{"class":105},[91,147251,147252],{"class":250},"(new_data)\n",[190,147254,147256],{"id":147255},"_103-安装pyecharts","10.3 安装pyecharts",[82,147258,147260],{"className":84,"code":147259,"language":86,"meta":26,"style":26},"pip install pyecharts\n",[88,147261,147262],{"__ignoreMap":26},[91,147263,147264,147266,147268],{"class":93,"line":94},[91,147265,23953],{"class":97},[91,147267,23956],{"class":101},[91,147269,147270],{"class":101}," pyecharts\n",[21,147272,147273],{},"验证：",[82,147275,147277],{"className":30459,"code":147276,"language":30461,"meta":26,"style":26},"import pyecharts\n\nprint(pyecharts.__version__)\n",[88,147278,147279,147285,147289],{"__ignoreMap":26},[91,147280,147281,147283],{"class":93,"line":94},[91,147282,30473],{"class":153},[91,147284,147270],{"class":250},[91,147286,147287],{"class":93,"line":38},[91,147288,2523],{"emptyLinePlaceholder":175},[91,147290,147291,147293,147296,147299],{"class":93,"line":1304},[91,147292,30496],{"class":105},[91,147294,147295],{"class":250},"(pyecharts.",[91,147297,147298],{"class":105},"__version__",[91,147300,257],{"class":250},[21,147302,147303],{},"如果使用虚拟环境，要先激活环境再安装。",[190,147305,147307],{"id":147306},"_104-第一个折线图","10.4 第一个折线图",[82,147309,147311],{"className":30459,"code":147310,"language":30461,"meta":26,"style":26},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[88,147312,147313,147325,147329,147339,147369,147401],{"__ignoreMap":26},[91,147314,147315,147317,147320,147322],{"class":93,"line":94},[91,147316,30818],{"class":153},[91,147318,147319],{"class":250}," pyecharts.charts ",[91,147321,30473],{"class":153},[91,147323,147324],{"class":250}," Line\n",[91,147326,147327],{"class":93,"line":38},[91,147328,2523],{"emptyLinePlaceholder":175},[91,147330,147331,147334,147336],{"class":93,"line":1304},[91,147332,147333],{"class":250},"line ",[91,147335,296],{"class":153},[91,147337,147338],{"class":250}," Line()\n",[91,147340,147341,147344,147347,147349,147352,147354,147357,147359,147362,147364,147367],{"class":93,"line":1319},[91,147342,147343],{"class":250},"line.add_xaxis([",[91,147345,147346],{"class":101},"\"周一\"",[91,147348,12558],{"class":250},[91,147350,147351],{"class":101},"\"周二\"",[91,147353,12558],{"class":250},[91,147355,147356],{"class":101},"\"周三\"",[91,147358,12558],{"class":250},[91,147360,147361],{"class":101},"\"周四\"",[91,147363,12558],{"class":250},[91,147365,147366],{"class":101},"\"周五\"",[91,147368,4780],{"class":250},[91,147370,147371,147374,147377,147379,147381,147383,147385,147387,147389,147391,147394,147396,147399],{"class":93,"line":1325},[91,147372,147373],{"class":250},"line.add_yaxis(",[91,147375,147376],{"class":101},"\"销售额\"",[91,147378,77599],{"class":250},[91,147380,560],{"class":105},[91,147382,12558],{"class":250},[91,147384,1066],{"class":105},[91,147386,12558],{"class":250},[91,147388,1111],{"class":105},[91,147390,12558],{"class":250},[91,147392,147393],{"class":105},"150",[91,147395,12558],{"class":250},[91,147397,147398],{"class":105},"180",[91,147400,4780],{"class":250},[91,147402,147403,147406,147409],{"class":93,"line":1339},[91,147404,147405],{"class":250},"line.render(",[91,147407,147408],{"class":101},"\"line.html\"",[91,147410,257],{"class":250},[21,147412,147413,147414,147417],{},"运行后会生成 ",[88,147415,147416],{},"line.html","，用浏览器打开即可看到图表。",[21,147419,147420],{},"核心步骤：",[14,147422,147423,147426,147429,147432,147435],{},[17,147424,147425],{},"导入图表类。",[17,147427,147428],{},"创建图表对象。",[17,147430,147431],{},"添加 x 轴数据。",[17,147433,147434],{},"添加 y 轴数据。",[17,147436,147437],{},"渲染为 HTML。",[190,147439,147441],{"id":147440},"_105-全局配置","10.5 全局配置",[21,147443,147444,147445,147448],{},"常用配置在 ",[88,147446,147447],{},"pyecharts.options"," 中。",[82,147450,147452],{"className":30459,"code":147451,"language":30461,"meta":26,"style":26},"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",[88,147453,147454,147471,147481,147485,147493,147517,147545,147550,147569,147588,147606,147626,147630],{"__ignoreMap":26},[91,147455,147456,147458,147461,147463,147466,147468],{"class":93,"line":94},[91,147457,30818],{"class":153},[91,147459,147460],{"class":250}," pyecharts ",[91,147462,30473],{"class":153},[91,147464,147465],{"class":250}," options ",[91,147467,31464],{"class":153},[91,147469,147470],{"class":250}," opts\n",[91,147472,147473,147475,147477,147479],{"class":93,"line":38},[91,147474,30818],{"class":153},[91,147476,147319],{"class":250},[91,147478,30473],{"class":153},[91,147480,147324],{"class":250},[91,147482,147483],{"class":93,"line":1304},[91,147484,2523],{"emptyLinePlaceholder":175},[91,147486,147487,147489,147491],{"class":93,"line":1319},[91,147488,147333],{"class":250},[91,147490,296],{"class":153},[91,147492,147338],{"class":250},[91,147494,147495,147497,147499,147501,147503,147505,147507,147509,147511,147513,147515],{"class":93,"line":1325},[91,147496,147343],{"class":250},[91,147498,147346],{"class":101},[91,147500,12558],{"class":250},[91,147502,147351],{"class":101},[91,147504,12558],{"class":250},[91,147506,147356],{"class":101},[91,147508,12558],{"class":250},[91,147510,147361],{"class":101},[91,147512,12558],{"class":250},[91,147514,147366],{"class":101},[91,147516,4780],{"class":250},[91,147518,147519,147521,147523,147525,147527,147529,147531,147533,147535,147537,147539,147541,147543],{"class":93,"line":1339},[91,147520,147373],{"class":250},[91,147522,147376],{"class":101},[91,147524,77599],{"class":250},[91,147526,560],{"class":105},[91,147528,12558],{"class":250},[91,147530,1066],{"class":105},[91,147532,12558],{"class":250},[91,147534,1111],{"class":105},[91,147536,12558],{"class":250},[91,147538,147393],{"class":105},[91,147540,12558],{"class":250},[91,147542,147398],{"class":105},[91,147544,4780],{"class":250},[91,147546,147547],{"class":93,"line":1345},[91,147548,147549],{"class":250},"line.set_global_opts(\n",[91,147551,147552,147555,147557,147560,147562,147564,147567],{"class":93,"line":1436},[91,147553,147554],{"class":5339},"    title_opts",[91,147556,296],{"class":153},[91,147558,147559],{"class":250},"opts.TitleOpts(",[91,147561,51488],{"class":5339},[91,147563,296],{"class":153},[91,147565,147566],{"class":101},"\"一周销售额\"",[91,147568,38128],{"class":250},[91,147570,147571,147574,147576,147579,147581,147583,147586],{"class":93,"line":1442},[91,147572,147573],{"class":5339},"    xaxis_opts",[91,147575,296],{"class":153},[91,147577,147578],{"class":250},"opts.AxisOpts(",[91,147580,79891],{"class":5339},[91,147582,296],{"class":153},[91,147584,147585],{"class":101},"\"日期\"",[91,147587,38128],{"class":250},[91,147589,147590,147593,147595,147597,147599,147601,147604],{"class":93,"line":1454},[91,147591,147592],{"class":5339},"    yaxis_opts",[91,147594,296],{"class":153},[91,147596,147578],{"class":250},[91,147598,79891],{"class":5339},[91,147600,296],{"class":153},[91,147602,147603],{"class":101},"\"金额\"",[91,147605,38128],{"class":250},[91,147607,147608,147611,147613,147616,147619,147621,147624],{"class":93,"line":1736},[91,147609,147610],{"class":5339},"    tooltip_opts",[91,147612,296],{"class":153},[91,147614,147615],{"class":250},"opts.TooltipOpts(",[91,147617,147618],{"class":5339},"trigger",[91,147620,296],{"class":153},[91,147622,147623],{"class":101},"\"axis\"",[91,147625,38128],{"class":250},[91,147627,147628],{"class":93,"line":1741},[91,147629,257],{"class":250},[91,147631,147632,147634,147636],{"class":93,"line":1747},[91,147633,147405],{"class":250},[91,147635,147408],{"class":101},[91,147637,257],{"class":250},[21,147639,147640],{},"常见全局配置：",[386,147642,147643,147652],{},[389,147644,147645],{},[392,147646,147647,147650],{},[395,147648,147649],{},"配置",[395,147651,102777],{},[433,147653,147654,147664,147674,147684,147694,147704],{},[392,147655,147656,147661],{},[438,147657,147658],{},[88,147659,147660],{},"TitleOpts",[438,147662,147663],{},"标题",[392,147665,147666,147671],{},[438,147667,147668],{},[88,147669,147670],{},"LegendOpts",[438,147672,147673],{},"图例",[392,147675,147676,147681],{},[438,147677,147678],{},[88,147679,147680],{},"TooltipOpts",[438,147682,147683],{},"提示框",[392,147685,147686,147691],{},[438,147687,147688],{},[88,147689,147690],{},"AxisOpts",[438,147692,147693],{},"坐标轴",[392,147695,147696,147701],{},[438,147697,147698],{},[88,147699,147700],{},"VisualMapOpts",[438,147702,147703],{},"视觉映射",[392,147705,147706,147711],{},[438,147707,147708],{},[88,147709,147710],{},"DataZoomOpts",[438,147712,147713],{},"区域缩放",[190,147715,147717],{"id":147716},"_106-系列配置","10.6 系列配置",[21,147719,147720],{},"系列配置作用于某一组数据。",[82,147722,147724],{"className":30459,"code":147723,"language":30461,"meta":26,"style":26},"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",[88,147725,147726,147731,147742,147771,147782,147801],{"__ignoreMap":26},[91,147727,147728],{"class":93,"line":94},[91,147729,147730],{"class":250},"line.add_yaxis(\n",[91,147732,147733,147736,147738,147740],{"class":93,"line":38},[91,147734,147735],{"class":5339},"    series_name",[91,147737,296],{"class":153},[91,147739,147376],{"class":101},[91,147741,31547],{"class":250},[91,147743,147744,147747,147749,147751,147753,147755,147757,147759,147761,147763,147765,147767,147769],{"class":93,"line":1304},[91,147745,147746],{"class":5339},"    y_axis",[91,147748,296],{"class":153},[91,147750,1139],{"class":250},[91,147752,560],{"class":105},[91,147754,12558],{"class":250},[91,147756,1066],{"class":105},[91,147758,12558],{"class":250},[91,147760,1111],{"class":105},[91,147762,12558],{"class":250},[91,147764,147393],{"class":105},[91,147766,12558],{"class":250},[91,147768,147398],{"class":105},[91,147770,87917],{"class":250},[91,147772,147773,147776,147778,147780],{"class":93,"line":1319},[91,147774,147775],{"class":5339},"    is_smooth",[91,147777,296],{"class":153},[91,147779,31557],{"class":105},[91,147781,31547],{"class":250},[91,147783,147784,147787,147789,147792,147795,147797,147799],{"class":93,"line":1325},[91,147785,147786],{"class":5339},"    label_opts",[91,147788,296],{"class":153},[91,147790,147791],{"class":250},"opts.LabelOpts(",[91,147793,147794],{"class":5339},"is_show",[91,147796,296],{"class":153},[91,147798,31557],{"class":105},[91,147800,38128],{"class":250},[91,147802,147803],{"class":93,"line":1339},[91,147804,257],{"class":250},[21,147806,147807],{},"常用参数：",[14,147809,147810,147816,147822,147828,147834],{},[17,147811,147812,147815],{},[88,147813,147814],{},"series_name","：系列名称。",[17,147817,147818,147821],{},[88,147819,147820],{},"y_axis","：y 轴数据。",[17,147823,147824,147827],{},[88,147825,147826],{},"is_smooth","：是否平滑曲线。",[17,147829,147830,147833],{},[88,147831,147832],{},"label_opts","：标签配置。",[17,147835,147836,147839],{},[88,147837,147838],{},"symbol_size","：标记点大小。",[190,147841,147843],{"id":147842},"_107-多条折线","10.7 多条折线",[82,147845,147847],{"className":30459,"code":147846,"language":30461,"meta":26,"style":26},"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",[88,147848,147849,147863,147873,147877,147906,147910,147918,147923,147961,147998,148002,148019,148035,148039],{"__ignoreMap":26},[91,147850,147851,147853,147855,147857,147859,147861],{"class":93,"line":94},[91,147852,30818],{"class":153},[91,147854,147460],{"class":250},[91,147856,30473],{"class":153},[91,147858,147465],{"class":250},[91,147860,31464],{"class":153},[91,147862,147470],{"class":250},[91,147864,147865,147867,147869,147871],{"class":93,"line":38},[91,147866,30818],{"class":153},[91,147868,147319],{"class":250},[91,147870,30473],{"class":153},[91,147872,147324],{"class":250},[91,147874,147875],{"class":93,"line":1304},[91,147876,2523],{"emptyLinePlaceholder":175},[91,147878,147879,147882,147884,147886,147888,147890,147892,147894,147896,147898,147900,147902,147904],{"class":93,"line":1319},[91,147880,147881],{"class":250},"dates ",[91,147883,296],{"class":153},[91,147885,52307],{"class":250},[91,147887,147346],{"class":101},[91,147889,12558],{"class":250},[91,147891,147351],{"class":101},[91,147893,12558],{"class":250},[91,147895,147356],{"class":101},[91,147897,12558],{"class":250},[91,147899,147361],{"class":101},[91,147901,12558],{"class":250},[91,147903,147366],{"class":101},[91,147905,33327],{"class":250},[91,147907,147908],{"class":93,"line":1325},[91,147909,2523],{"emptyLinePlaceholder":175},[91,147911,147912,147914,147916],{"class":93,"line":1339},[91,147913,147333],{"class":250},[91,147915,296],{"class":153},[91,147917,147338],{"class":250},[91,147919,147920],{"class":93,"line":1345},[91,147921,147922],{"class":250},"line.add_xaxis(dates)\n",[91,147924,147925,147927,147930,147932,147934,147936,147939,147941,147943,147945,147947,147949,147951,147953,147955,147957,147959],{"class":93,"line":1436},[91,147926,147373],{"class":250},[91,147928,147929],{"class":101},"\"线上销售\"",[91,147931,77599],{"class":250},[91,147933,560],{"class":105},[91,147935,12558],{"class":250},[91,147937,147938],{"class":105},"130",[91,147940,12558],{"class":250},[91,147942,1066],{"class":105},[91,147944,12558],{"class":250},[91,147946,21171],{"class":105},[91,147948,12558],{"class":250},[91,147950,1846],{"class":105},[91,147952,112283],{"class":250},[91,147954,147826],{"class":5339},[91,147956,296],{"class":153},[91,147958,31557],{"class":105},[91,147960,257],{"class":250},[91,147962,147963,147965,147968,147970,147972,147974,147976,147978,147980,147982,147984,147986,147988,147990,147992,147994,147996],{"class":93,"line":1442},[91,147964,147373],{"class":250},[91,147966,147967],{"class":101},"\"线下销售\"",[91,147969,77599],{"class":250},[91,147971,861],{"class":105},[91,147973,12558],{"class":250},[91,147975,1111],{"class":105},[91,147977,12558],{"class":250},[91,147979,560],{"class":105},[91,147981,12558],{"class":250},[91,147983,1066],{"class":105},[91,147985,12558],{"class":250},[91,147987,147393],{"class":105},[91,147989,112283],{"class":250},[91,147991,147826],{"class":5339},[91,147993,296],{"class":153},[91,147995,31557],{"class":105},[91,147997,257],{"class":250},[91,147999,148000],{"class":93,"line":1454},[91,148001,147549],{"class":250},[91,148003,148004,148006,148008,148010,148012,148014,148017],{"class":93,"line":1736},[91,148005,147554],{"class":5339},[91,148007,296],{"class":153},[91,148009,147559],{"class":250},[91,148011,51488],{"class":5339},[91,148013,296],{"class":153},[91,148015,148016],{"class":101},"\"线上线下销售趋势\"",[91,148018,38128],{"class":250},[91,148020,148021,148023,148025,148027,148029,148031,148033],{"class":93,"line":1741},[91,148022,147610],{"class":5339},[91,148024,296],{"class":153},[91,148026,147615],{"class":250},[91,148028,147618],{"class":5339},[91,148030,296],{"class":153},[91,148032,147623],{"class":101},[91,148034,38128],{"class":250},[91,148036,148037],{"class":93,"line":1747},[91,148038,257],{"class":250},[91,148040,148041,148043,148046],{"class":93,"line":1752},[91,148042,147405],{"class":250},[91,148044,148045],{"class":101},"\"sales.html\"",[91,148047,257],{"class":250},[21,148049,148050],{},"多条折线适合比较不同指标或不同地区。",[190,148052,148054],{"id":148053},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[21,148056,148057,148058,24741],{},"假设 ",[88,148059,148060],{},"sales.json",[82,148062,148064],{"className":147126,"code":148063,"language":145873,"meta":26,"style":26},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[88,148065,148066,148071,148103,148131,148159],{"__ignoreMap":26},[91,148067,148068],{"class":93,"line":94},[91,148069,148070],{"class":250},"[\n",[91,148072,148073,148076,148079,148081,148083,148085,148088,148090,148092,148094,148097,148099,148101],{"class":93,"line":38},[91,148074,148075],{"class":250},"  {",[91,148077,148078],{"class":105},"\"date\"",[91,148080,51518],{"class":250},[91,148082,147346],{"class":101},[91,148084,12558],{"class":250},[91,148086,148087],{"class":105},"\"online\"",[91,148089,51518],{"class":250},[91,148091,560],{"class":105},[91,148093,12558],{"class":250},[91,148095,148096],{"class":105},"\"offline\"",[91,148098,51518],{"class":250},[91,148100,861],{"class":105},[91,148102,5053],{"class":250},[91,148104,148105,148107,148109,148111,148113,148115,148117,148119,148121,148123,148125,148127,148129],{"class":93,"line":1304},[91,148106,148075],{"class":250},[91,148108,148078],{"class":105},[91,148110,51518],{"class":250},[91,148112,147351],{"class":101},[91,148114,12558],{"class":250},[91,148116,148087],{"class":105},[91,148118,51518],{"class":250},[91,148120,147938],{"class":105},[91,148122,12558],{"class":250},[91,148124,148096],{"class":105},[91,148126,51518],{"class":250},[91,148128,1111],{"class":105},[91,148130,5053],{"class":250},[91,148132,148133,148135,148137,148139,148141,148143,148145,148147,148149,148151,148153,148155,148157],{"class":93,"line":1319},[91,148134,148075],{"class":250},[91,148136,148078],{"class":105},[91,148138,51518],{"class":250},[91,148140,147356],{"class":101},[91,148142,12558],{"class":250},[91,148144,148087],{"class":105},[91,148146,51518],{"class":250},[91,148148,1066],{"class":105},[91,148150,12558],{"class":250},[91,148152,148096],{"class":105},[91,148154,51518],{"class":250},[91,148156,560],{"class":105},[91,148158,1689],{"class":250},[91,148160,148161],{"class":93,"line":1325},[91,148162,33327],{"class":250},[21,148164,148165],{},"读取并绘图：",[82,148167,148169],{"className":30459,"code":148168,"language":30461,"meta":26,"style":26},"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",[88,148170,148171,148177,148191,148201,148205,148237,148250,148254,148262,148271,148280,148284,148296,148305,148314,148323,148327,148335,148339,148356,148373,148377,148394,148410,148414],{"__ignoreMap":26},[91,148172,148173,148175],{"class":93,"line":94},[91,148174,30473],{"class":153},[91,148176,147172],{"class":250},[91,148178,148179,148181,148183,148185,148187,148189],{"class":93,"line":38},[91,148180,30818],{"class":153},[91,148182,147460],{"class":250},[91,148184,30473],{"class":153},[91,148186,147465],{"class":250},[91,148188,31464],{"class":153},[91,148190,147470],{"class":250},[91,148192,148193,148195,148197,148199],{"class":93,"line":1304},[91,148194,30818],{"class":153},[91,148196,147319],{"class":250},[91,148198,30473],{"class":153},[91,148200,147324],{"class":250},[91,148202,148203],{"class":93,"line":1319},[91,148204,2523],{"emptyLinePlaceholder":175},[91,148206,148207,148209,148211,148213,148216,148218,148220,148222,148224,148226,148228,148230,148232,148235],{"class":93,"line":1325},[91,148208,107914],{"class":153},[91,148210,146872],{"class":105},[91,148212,251],{"class":250},[91,148214,148215],{"class":101},"\"sales.json\"",[91,148217,12558],{"class":250},[91,148219,146882],{"class":101},[91,148221,12558],{"class":250},[91,148223,146887],{"class":5339},[91,148225,296],{"class":153},[91,148227,146892],{"class":101},[91,148229,13837],{"class":250},[91,148231,31464],{"class":153},[91,148233,148234],{"class":5339}," file",[91,148236,3862],{"class":250},[91,148238,148239,148241,148243,148246,148248],{"class":93,"line":1339},[91,148240,101502],{"class":250},[91,148242,296],{"class":153},[91,148244,148245],{"class":250}," json.load(",[91,148247,45435],{"class":5339},[91,148249,257],{"class":250},[91,148251,148252],{"class":93,"line":1345},[91,148253,2523],{"emptyLinePlaceholder":175},[91,148255,148256,148258,148260],{"class":93,"line":1436},[91,148257,147881],{"class":250},[91,148259,296],{"class":153},[91,148261,51919],{"class":250},[91,148263,148264,148267,148269],{"class":93,"line":1442},[91,148265,148266],{"class":250},"online_sales ",[91,148268,296],{"class":153},[91,148270,51919],{"class":250},[91,148272,148273,148276,148278],{"class":93,"line":1454},[91,148274,148275],{"class":250},"offline_sales ",[91,148277,296],{"class":153},[91,148279,51919],{"class":250},[91,148281,148282],{"class":93,"line":1736},[91,148283,2523],{"emptyLinePlaceholder":175},[91,148285,148286,148288,148291,148293],{"class":93,"line":1741},[91,148287,3148],{"class":153},[91,148289,148290],{"class":250}," item ",[91,148292,26165],{"class":153},[91,148294,148295],{"class":250}," data:\n",[91,148297,148298,148301,148303],{"class":93,"line":1747},[91,148299,148300],{"class":250},"    dates.append(item[",[91,148302,148078],{"class":101},[91,148304,4780],{"class":250},[91,148306,148307,148310,148312],{"class":93,"line":1752},[91,148308,148309],{"class":250},"    online_sales.append(item[",[91,148311,148087],{"class":101},[91,148313,4780],{"class":250},[91,148315,148316,148319,148321],{"class":93,"line":1766},[91,148317,148318],{"class":250},"    offline_sales.append(item[",[91,148320,148096],{"class":101},[91,148322,4780],{"class":250},[91,148324,148325],{"class":93,"line":1771},[91,148326,2523],{"emptyLinePlaceholder":175},[91,148328,148329,148331,148333],{"class":93,"line":1777},[91,148330,147333],{"class":250},[91,148332,296],{"class":153},[91,148334,147338],{"class":250},[91,148336,148337],{"class":93,"line":1798},[91,148338,147922],{"class":250},[91,148340,148341,148343,148345,148348,148350,148352,148354],{"class":93,"line":1803},[91,148342,147373],{"class":250},[91,148344,147929],{"class":101},[91,148346,148347],{"class":250},", online_sales, ",[91,148349,147826],{"class":5339},[91,148351,296],{"class":153},[91,148353,31557],{"class":105},[91,148355,257],{"class":250},[91,148357,148358,148360,148362,148365,148367,148369,148371],{"class":93,"line":1817},[91,148359,147373],{"class":250},[91,148361,147967],{"class":101},[91,148363,148364],{"class":250},", offline_sales, ",[91,148366,147826],{"class":5339},[91,148368,296],{"class":153},[91,148370,31557],{"class":105},[91,148372,257],{"class":250},[91,148374,148375],{"class":93,"line":1822},[91,148376,147549],{"class":250},[91,148378,148379,148381,148383,148385,148387,148389,148392],{"class":93,"line":1851},[91,148380,147554],{"class":5339},[91,148382,296],{"class":153},[91,148384,147559],{"class":250},[91,148386,51488],{"class":5339},[91,148388,296],{"class":153},[91,148390,148391],{"class":101},"\"销售趋势\"",[91,148393,38128],{"class":250},[91,148395,148396,148398,148400,148402,148404,148406,148408],{"class":93,"line":1856},[91,148397,147610],{"class":5339},[91,148399,296],{"class":153},[91,148401,147615],{"class":250},[91,148403,147618],{"class":5339},[91,148405,296],{"class":153},[91,148407,147623],{"class":101},[91,148409,38128],{"class":250},[91,148411,148412],{"class":93,"line":1873},[91,148413,257],{"class":250},[91,148415,148416,148418,148420],{"class":93,"line":1878},[91,148417,147405],{"class":250},[91,148419,148045],{"class":101},[91,148421,257],{"class":250},[190,148423,148425],{"id":148424},"_109-数据清洗","10.9 数据清洗",[21,148427,148428],{},"真实数据经常不整齐，需要清洗。",[21,148430,148431],{},"常见问题：",[14,148433,148434,148437,148440,148443],{},[17,148435,148436],{},"数字是字符串。",[17,148438,148439],{},"字段缺失。",[17,148441,148442],{},"空值。",[17,148444,148445],{},"日期格式不统一。",[21,148447,15258],{},[82,148449,148451],{"className":30459,"code":148450,"language":30461,"meta":26,"style":26},"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",[88,148452,148453,148462,148485,148505,148526,148530,148534,148542,148551,148555,148566,148580,148589,148594,148598,148606,148616,148620,148627],{"__ignoreMap":26},[91,148454,148455,148458,148460],{"class":93,"line":94},[91,148456,148457],{"class":250},"raw_data ",[91,148459,296],{"class":153},[91,148461,55528],{"class":250},[91,148463,148464,148467,148469,148471,148473,148475,148478,148480,148483],{"class":93,"line":38},[91,148465,148466],{"class":250},"    {",[91,148468,148078],{"class":101},[91,148470,51518],{"class":250},[91,148472,147346],{"class":101},[91,148474,12558],{"class":250},[91,148476,148477],{"class":101},"\"sales\"",[91,148479,51518],{"class":250},[91,148481,148482],{"class":101},"\"100\"",[91,148484,5053],{"class":250},[91,148486,148487,148489,148491,148493,148495,148497,148499,148501,148503],{"class":93,"line":1304},[91,148488,148466],{"class":250},[91,148490,148078],{"class":101},[91,148492,51518],{"class":250},[91,148494,147351],{"class":101},[91,148496,12558],{"class":250},[91,148498,148477],{"class":101},[91,148500,51518],{"class":250},[91,148502,7775],{"class":101},[91,148504,5053],{"class":250},[91,148506,148507,148509,148511,148513,148515,148517,148519,148521,148524],{"class":93,"line":1319},[91,148508,148466],{"class":250},[91,148510,148078],{"class":101},[91,148512,51518],{"class":250},[91,148514,147356],{"class":101},[91,148516,12558],{"class":250},[91,148518,148477],{"class":101},[91,148520,51518],{"class":250},[91,148522,148523],{"class":101},"\"120\"",[91,148525,5053],{"class":250},[91,148527,148528],{"class":93,"line":1325},[91,148529,33327],{"class":250},[91,148531,148532],{"class":93,"line":1339},[91,148533,2523],{"emptyLinePlaceholder":175},[91,148535,148536,148538,148540],{"class":93,"line":1345},[91,148537,147881],{"class":250},[91,148539,296],{"class":153},[91,148541,51919],{"class":250},[91,148543,148544,148547,148549],{"class":93,"line":1436},[91,148545,148546],{"class":250},"sales ",[91,148548,296],{"class":153},[91,148550,51919],{"class":250},[91,148552,148553],{"class":93,"line":1442},[91,148554,2523],{"emptyLinePlaceholder":175},[91,148556,148557,148559,148561,148563],{"class":93,"line":1454},[91,148558,3148],{"class":153},[91,148560,148290],{"class":250},[91,148562,26165],{"class":153},[91,148564,148565],{"class":250}," raw_data:\n",[91,148567,148568,148571,148573,148576,148578],{"class":93,"line":1736},[91,148569,148570],{"class":250},"    value ",[91,148572,296],{"class":153},[91,148574,148575],{"class":250}," item.get(",[91,148577,148477],{"class":101},[91,148579,257],{"class":250},[91,148581,148582,148584,148586],{"class":93,"line":1741},[91,148583,3224],{"class":153},[91,148585,39011],{"class":153},[91,148587,148588],{"class":250}," value:\n",[91,148590,148591],{"class":93,"line":1747},[91,148592,148593],{"class":153},"        continue\n",[91,148595,148596],{"class":93,"line":1752},[91,148597,2523],{"emptyLinePlaceholder":175},[91,148599,148600,148602,148604],{"class":93,"line":1766},[91,148601,148300],{"class":250},[91,148603,148078],{"class":101},[91,148605,4780],{"class":250},[91,148607,148608,148611,148613],{"class":93,"line":1771},[91,148609,148610],{"class":250},"    sales.append(",[91,148612,254],{"class":105},[91,148614,148615],{"class":250},"(value))\n",[91,148617,148618],{"class":93,"line":1777},[91,148619,2523],{"emptyLinePlaceholder":175},[91,148621,148622,148624],{"class":93,"line":1798},[91,148623,30496],{"class":105},[91,148625,148626],{"class":250},"(dates)\n",[91,148628,148629,148631],{"class":93,"line":1803},[91,148630,30496],{"class":105},[91,148632,148633],{"class":250},"(sales)\n",[190,148635,148637],{"id":148636},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[82,148639,148641],{"className":30459,"code":148640,"language":30461,"meta":26,"style":26},"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",[88,148642,148643,148657,148667,148671,148679,148700,148722,148744,148766,148788,148792,148796,148818,148839,148843,148851,148855,148859,148869,148878,148888,148904,148908,148912,148929,148945,148961,148977,148987,148991],{"__ignoreMap":26},[91,148644,148645,148647,148649,148651,148653,148655],{"class":93,"line":94},[91,148646,30818],{"class":153},[91,148648,147460],{"class":250},[91,148650,30473],{"class":153},[91,148652,147465],{"class":250},[91,148654,31464],{"class":153},[91,148656,147470],{"class":250},[91,148658,148659,148661,148663,148665],{"class":93,"line":38},[91,148660,30818],{"class":153},[91,148662,147319],{"class":250},[91,148664,30473],{"class":153},[91,148666,147324],{"class":250},[91,148668,148669],{"class":93,"line":1304},[91,148670,2523],{"emptyLinePlaceholder":175},[91,148672,148673,148675,148677],{"class":93,"line":1319},[91,148674,148546],{"class":250},[91,148676,296],{"class":153},[91,148678,55528],{"class":250},[91,148680,148681,148683,148685,148687,148690,148692,148694,148696,148698],{"class":93,"line":1325},[91,148682,148466],{"class":250},[91,148684,148078],{"class":101},[91,148686,51518],{"class":250},[91,148688,148689],{"class":101},"\"2024-10-01\"",[91,148691,12558],{"class":250},[91,148693,84165],{"class":101},[91,148695,51518],{"class":250},[91,148697,92104],{"class":105},[91,148699,5053],{"class":250},[91,148701,148702,148704,148706,148708,148711,148713,148715,148717,148720],{"class":93,"line":1339},[91,148703,148466],{"class":250},[91,148705,148078],{"class":101},[91,148707,51518],{"class":250},[91,148709,148710],{"class":101},"\"2024-10-02\"",[91,148712,12558],{"class":250},[91,148714,84165],{"class":101},[91,148716,51518],{"class":250},[91,148718,148719],{"class":105},"1800",[91,148721,5053],{"class":250},[91,148723,148724,148726,148728,148730,148733,148735,148737,148739,148742],{"class":93,"line":1345},[91,148725,148466],{"class":250},[91,148727,148078],{"class":101},[91,148729,51518],{"class":250},[91,148731,148732],{"class":101},"\"2024-10-03\"",[91,148734,12558],{"class":250},[91,148736,84165],{"class":101},[91,148738,51518],{"class":250},[91,148740,148741],{"class":105},"1500",[91,148743,5053],{"class":250},[91,148745,148746,148748,148750,148752,148755,148757,148759,148761,148764],{"class":93,"line":1436},[91,148747,148466],{"class":250},[91,148749,148078],{"class":101},[91,148751,51518],{"class":250},[91,148753,148754],{"class":101},"\"2024-10-04\"",[91,148756,12558],{"class":250},[91,148758,84165],{"class":101},[91,148760,51518],{"class":250},[91,148762,148763],{"class":105},"2100",[91,148765,5053],{"class":250},[91,148767,148768,148770,148772,148774,148777,148779,148781,148783,148786],{"class":93,"line":1442},[91,148769,148466],{"class":250},[91,148771,148078],{"class":101},[91,148773,51518],{"class":250},[91,148775,148776],{"class":101},"\"2024-10-05\"",[91,148778,12558],{"class":250},[91,148780,84165],{"class":101},[91,148782,51518],{"class":250},[91,148784,148785],{"class":105},"2600",[91,148787,5053],{"class":250},[91,148789,148790],{"class":93,"line":1454},[91,148791,33327],{"class":250},[91,148793,148794],{"class":93,"line":1736},[91,148795,2523],{"emptyLinePlaceholder":175},[91,148797,148798,148800,148802,148805,148807,148809,148811,148813,148815],{"class":93,"line":1741},[91,148799,147881],{"class":250},[91,148801,296],{"class":153},[91,148803,148804],{"class":250}," [item[",[91,148806,148078],{"class":101},[91,148808,4566],{"class":250},[91,148810,3148],{"class":153},[91,148812,148290],{"class":250},[91,148814,26165],{"class":153},[91,148816,148817],{"class":250}," sales]\n",[91,148819,148820,148823,148825,148827,148829,148831,148833,148835,148837],{"class":93,"line":1747},[91,148821,148822],{"class":250},"amounts ",[91,148824,296],{"class":153},[91,148826,148804],{"class":250},[91,148828,84165],{"class":101},[91,148830,4566],{"class":250},[91,148832,3148],{"class":153},[91,148834,148290],{"class":250},[91,148836,26165],{"class":153},[91,148838,148817],{"class":250},[91,148840,148841],{"class":93,"line":1752},[91,148842,2523],{"emptyLinePlaceholder":175},[91,148844,148845,148847,148849],{"class":93,"line":1766},[91,148846,147333],{"class":250},[91,148848,296],{"class":153},[91,148850,147338],{"class":250},[91,148852,148853],{"class":93,"line":1771},[91,148854,147922],{"class":250},[91,148856,148857],{"class":93,"line":1777},[91,148858,147730],{"class":250},[91,148860,148861,148863,148865,148867],{"class":93,"line":1798},[91,148862,147735],{"class":5339},[91,148864,296],{"class":153},[91,148866,147376],{"class":101},[91,148868,31547],{"class":250},[91,148870,148871,148873,148875],{"class":93,"line":1803},[91,148872,147746],{"class":5339},[91,148874,296],{"class":153},[91,148876,148877],{"class":250},"amounts,\n",[91,148879,148880,148882,148884,148886],{"class":93,"line":1817},[91,148881,147775],{"class":5339},[91,148883,296],{"class":153},[91,148885,31557],{"class":105},[91,148887,31547],{"class":250},[91,148889,148890,148892,148894,148896,148898,148900,148902],{"class":93,"line":1822},[91,148891,147786],{"class":5339},[91,148893,296],{"class":153},[91,148895,147791],{"class":250},[91,148897,147794],{"class":5339},[91,148899,296],{"class":153},[91,148901,31557],{"class":105},[91,148903,38128],{"class":250},[91,148905,148906],{"class":93,"line":1851},[91,148907,257],{"class":250},[91,148909,148910],{"class":93,"line":1856},[91,148911,147549],{"class":250},[91,148913,148914,148916,148918,148920,148922,148924,148927],{"class":93,"line":1873},[91,148915,147554],{"class":5339},[91,148917,296],{"class":153},[91,148919,147559],{"class":250},[91,148921,51488],{"class":5339},[91,148923,296],{"class":153},[91,148925,148926],{"class":101},"\"每日销售额\"",[91,148928,38128],{"class":250},[91,148930,148931,148933,148935,148937,148939,148941,148943],{"class":93,"line":1878},[91,148932,147573],{"class":5339},[91,148934,296],{"class":153},[91,148936,147578],{"class":250},[91,148938,79891],{"class":5339},[91,148940,296],{"class":153},[91,148942,147585],{"class":101},[91,148944,38128],{"class":250},[91,148946,148947,148949,148951,148953,148955,148957,148959],{"class":93,"line":1883},[91,148948,147592],{"class":5339},[91,148950,296],{"class":153},[91,148952,147578],{"class":250},[91,148954,79891],{"class":5339},[91,148956,296],{"class":153},[91,148958,147603],{"class":101},[91,148960,38128],{"class":250},[91,148962,148963,148965,148967,148969,148971,148973,148975],{"class":93,"line":1888},[91,148964,147610],{"class":5339},[91,148966,296],{"class":153},[91,148968,147615],{"class":250},[91,148970,147618],{"class":5339},[91,148972,296],{"class":153},[91,148974,147623],{"class":101},[91,148976,38128],{"class":250},[91,148978,148979,148982,148984],{"class":93,"line":1902},[91,148980,148981],{"class":5339},"    datazoom_opts",[91,148983,296],{"class":153},[91,148985,148986],{"class":250},"[opts.DataZoomOpts()],\n",[91,148988,148989],{"class":93,"line":1907},[91,148990,257],{"class":250},[91,148992,148993,148995,148998],{"class":93,"line":2700},[91,148994,147405],{"class":250},[91,148996,148997],{"class":101},"\"daily_sales.html\"",[91,148999,257],{"class":250},[21,149001,149002,149005],{},[88,149003,149004],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[190,149007,149009],{"id":149008},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[21,149011,149012],{},"如果数据结构如下：",[82,149014,149016],{"className":30459,"code":149015,"language":30461,"meta":26,"style":26},"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",[88,149017,149018,149026,149034,149056,149077,149082,149089,149109,149129,149133],{"__ignoreMap":26},[91,149019,149020,149022,149024],{"class":93,"line":94},[91,149021,101739],{"class":250},[91,149023,296],{"class":153},[91,149025,15695],{"class":250},[91,149027,149028,149031],{"class":93,"line":38},[91,149029,149030],{"class":101},"    \"北京\"",[91,149032,149033],{"class":250},": [\n",[91,149035,149036,149038,149040,149042,149045,149047,149050,149052,149054],{"class":93,"line":1304},[91,149037,5040],{"class":250},[91,149039,148078],{"class":101},[91,149041,51518],{"class":250},[91,149043,149044],{"class":101},"\"2024-01-01\"",[91,149046,12558],{"class":250},[91,149048,149049],{"class":101},"\"confirm\"",[91,149051,51518],{"class":250},[91,149053,695],{"class":105},[91,149055,5053],{"class":250},[91,149057,149058,149060,149062,149064,149067,149069,149071,149073,149075],{"class":93,"line":1319},[91,149059,5040],{"class":250},[91,149061,148078],{"class":101},[91,149063,51518],{"class":250},[91,149065,149066],{"class":101},"\"2024-01-02\"",[91,149068,12558],{"class":250},[91,149070,149049],{"class":101},[91,149072,51518],{"class":250},[91,149074,747],{"class":105},[91,149076,5053],{"class":250},[91,149078,149079],{"class":93,"line":1325},[91,149080,149081],{"class":250},"    ],\n",[91,149083,149084,149087],{"class":93,"line":1339},[91,149085,149086],{"class":101},"    \"上海\"",[91,149088,149033],{"class":250},[91,149090,149091,149093,149095,149097,149099,149101,149103,149105,149107],{"class":93,"line":1345},[91,149092,5040],{"class":250},[91,149094,148078],{"class":101},[91,149096,51518],{"class":250},[91,149098,149044],{"class":101},[91,149100,12558],{"class":250},[91,149102,149049],{"class":101},[91,149104,51518],{"class":250},[91,149106,644],{"class":105},[91,149108,5053],{"class":250},[91,149110,149111,149113,149115,149117,149119,149121,149123,149125,149127],{"class":93,"line":1436},[91,149112,5040],{"class":250},[91,149114,148078],{"class":101},[91,149116,51518],{"class":250},[91,149118,149066],{"class":101},[91,149120,12558],{"class":250},[91,149122,149049],{"class":101},[91,149124,51518],{"class":250},[91,149126,772],{"class":105},[91,149128,5053],{"class":250},[91,149130,149131],{"class":93,"line":1442},[91,149132,149081],{"class":250},[91,149134,149135],{"class":93,"line":1454},[91,149136,1689],{"class":250},[21,149138,149139],{},"绘制多地区趋势：",[82,149141,149143],{"className":30459,"code":149142,"language":30461,"meta":26,"style":26},"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",[88,149144,149145,149159,149169,149173,149198,149202,149210,149214,149218,149230,149252,149265,149269,149273,149290,149306,149310],{"__ignoreMap":26},[91,149146,149147,149149,149151,149153,149155,149157],{"class":93,"line":94},[91,149148,30818],{"class":153},[91,149150,147460],{"class":250},[91,149152,30473],{"class":153},[91,149154,147465],{"class":250},[91,149156,31464],{"class":153},[91,149158,147470],{"class":250},[91,149160,149161,149163,149165,149167],{"class":93,"line":38},[91,149162,30818],{"class":153},[91,149164,147319],{"class":250},[91,149166,30473],{"class":153},[91,149168,147324],{"class":250},[91,149170,149171],{"class":93,"line":1304},[91,149172,2523],{"emptyLinePlaceholder":175},[91,149174,149175,149177,149179,149181,149183,149185,149187,149189,149191,149194,149196],{"class":93,"line":1319},[91,149176,147881],{"class":250},[91,149178,296],{"class":153},[91,149180,148804],{"class":250},[91,149182,148078],{"class":101},[91,149184,4566],{"class":250},[91,149186,3148],{"class":153},[91,149188,148290],{"class":250},[91,149190,26165],{"class":153},[91,149192,149193],{"class":250}," data[",[91,149195,69350],{"class":101},[91,149197,77608],{"class":250},[91,149199,149200],{"class":93,"line":1325},[91,149201,2523],{"emptyLinePlaceholder":175},[91,149203,149204,149206,149208],{"class":93,"line":1339},[91,149205,147333],{"class":250},[91,149207,296],{"class":153},[91,149209,147338],{"class":250},[91,149211,149212],{"class":93,"line":1345},[91,149213,147922],{"class":250},[91,149215,149216],{"class":93,"line":1436},[91,149217,2523],{"emptyLinePlaceholder":175},[91,149219,149220,149222,149225,149227],{"class":93,"line":1442},[91,149221,3148],{"class":153},[91,149223,149224],{"class":250}," city, records ",[91,149226,26165],{"class":153},[91,149228,149229],{"class":250}," data.items():\n",[91,149231,149232,149235,149237,149239,149241,149243,149245,149247,149249],{"class":93,"line":1454},[91,149233,149234],{"class":250},"    values ",[91,149236,296],{"class":153},[91,149238,148804],{"class":250},[91,149240,149049],{"class":101},[91,149242,4566],{"class":250},[91,149244,3148],{"class":153},[91,149246,148290],{"class":250},[91,149248,26165],{"class":153},[91,149250,149251],{"class":250}," records]\n",[91,149253,149254,149257,149259,149261,149263],{"class":93,"line":1736},[91,149255,149256],{"class":250},"    line.add_yaxis(city, values, ",[91,149258,147826],{"class":5339},[91,149260,296],{"class":153},[91,149262,31557],{"class":105},[91,149264,257],{"class":250},[91,149266,149267],{"class":93,"line":1741},[91,149268,2523],{"emptyLinePlaceholder":175},[91,149270,149271],{"class":93,"line":1747},[91,149272,147549],{"class":250},[91,149274,149275,149277,149279,149281,149283,149285,149288],{"class":93,"line":1752},[91,149276,147554],{"class":5339},[91,149278,296],{"class":153},[91,149280,147559],{"class":250},[91,149282,51488],{"class":5339},[91,149284,296],{"class":153},[91,149286,149287],{"class":101},"\"多地区趋势图\"",[91,149289,38128],{"class":250},[91,149291,149292,149294,149296,149298,149300,149302,149304],{"class":93,"line":1766},[91,149293,147610],{"class":5339},[91,149295,296],{"class":153},[91,149297,147615],{"class":250},[91,149299,147618],{"class":5339},[91,149301,296],{"class":153},[91,149303,147623],{"class":101},[91,149305,38128],{"class":250},[91,149307,149308],{"class":93,"line":1771},[91,149309,257],{"class":250},[91,149311,149312,149314,149317],{"class":93,"line":1777},[91,149313,147405],{"class":250},[91,149315,149316],{"class":101},"\"trend.html\"",[91,149318,257],{"class":250},[21,149320,149321],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[190,149323,149325],{"id":149324},"_1012-易错点","10.12 易错点",[14,149327,149328,149334,149340,149350,149356],{},[17,149329,149330,149333],{},[88,149331,149332],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[17,149335,149336,149339],{},[88,149337,149338],{},"render()"," 生成的是 HTML，不是图片。",[17,149341,149342,149343,149346,149347,28504],{},"JSON 字符串用 ",[88,149344,149345],{},"json.loads()","，JSON 文件用 ",[88,149348,149349],{},"json.load()",[17,149351,149352,149353,28504],{},"中文 JSON 保存时加 ",[88,149354,149355],{},"ensure_ascii=False",[17,149357,149358],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[190,149360,149362],{"id":149361},"_1013-本章练习","10.13 本章练习",[14,149364,149365,149368,149371,149374,149377],{},[17,149366,149367],{},"安装 pyecharts 并生成第一个折线图。",[17,149369,149370],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[17,149372,149373],{},"绘制两条折线，对比线上和线下销售额。",[17,149375,149376],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[17,149378,149379],{},"对含有空值的销售数据进行清洗后再绘图。",[168,149381,149382],{},"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":26,"searchDepth":38,"depth":38,"links":149384},[149385,149386,149387,149388,149389,149390,149391,149392,149393,149394,149395,149396,149397],{"id":147001,"depth":38,"text":147002},{"id":147076,"depth":38,"text":147077},{"id":147255,"depth":38,"text":147256},{"id":147306,"depth":38,"text":147307},{"id":147440,"depth":38,"text":147441},{"id":147716,"depth":38,"text":147717},{"id":147842,"depth":38,"text":147843},{"id":148053,"depth":38,"text":148054},{"id":148424,"depth":38,"text":148425},{"id":148636,"depth":38,"text":148637},{"id":149008,"depth":38,"text":149009},{"id":149324,"depth":38,"text":149325},{"id":149361,"depth":38,"text":149362},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146993,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149404,"title":149405,"body":149406,"description":23500,"extension":173,"meta":151766,"navigation":175,"path":151767,"seo":151768,"stem":151769,"__hash__":151770},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149407,"toc":151743},[149408,149411,149415,149418,149421,149497,149500,149591,149594,149598,149601,149645,149658,149662,149665,149732,149735,149739,149742,149826,149834,149838,149843,149984,149987,149998,150004,150010,150124,150128,150131,150134,150387,150390,150394,150397,150501,150504,150508,150659,150663,150670,150783,150787,150790,150896,150899,150903,150906,150937,150940,151045,151048,151052,151056,151066,151134,151138,151145,151209,151212,151216,151222,151318,151327,151331,151655,151664,151668,151696,151700,151740],[10,149409,149405],{"id":149410},"_11-面向对象基础",[190,149412,149414],{"id":149413},"_111-什么是面向对象","11.1 什么是面向对象",[21,149416,149417],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[21,149419,149420],{},"面向过程：",[82,149422,149424],{"className":30459,"code":149423,"language":30461,"meta":26,"style":26},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[88,149425,149426,149435,149443,149447,149457,149488,149492],{"__ignoreMap":26},[91,149427,149428,149430,149432],{"class":93,"line":94},[91,149429,146617],{"class":250},[91,149431,296],{"class":153},[91,149433,149434],{"class":101}," \"小明\"\n",[91,149436,149437,149439,149441],{"class":93,"line":38},[91,149438,146627],{"class":250},[91,149440,296],{"class":153},[91,149442,146632],{"class":105},[91,149444,149445],{"class":93,"line":1304},[91,149446,2523],{"emptyLinePlaceholder":175},[91,149448,149449,149451,149454],{"class":93,"line":1319},[91,149450,32028],{"class":153},[91,149452,149453],{"class":97}," introduce",[91,149455,149456],{"class":250},"(name, age):\n",[91,149458,149459,149461,149463,149465,149468,149470,149472,149474,149477,149479,149481,149483,149486],{"class":93,"line":1325},[91,149460,31380],{"class":105},[91,149462,251],{"class":250},[91,149464,302],{"class":153},[91,149466,149467],{"class":101},"\"我叫",[91,149469,1145],{"class":105},[91,149471,79891],{"class":250},[91,149473,1195],{"class":105},[91,149475,149476],{"class":101},"，今年",[91,149478,1145],{"class":105},[91,149480,70302],{"class":250},[91,149482,1195],{"class":105},[91,149484,149485],{"class":101},"岁\"",[91,149487,257],{"class":250},[91,149489,149490],{"class":93,"line":1339},[91,149491,2523],{"emptyLinePlaceholder":175},[91,149493,149494],{"class":93,"line":1345},[91,149495,149496],{"class":250},"introduce(name, age)\n",[21,149498,149499],{},"面向对象：",[82,149501,149503],{"className":30459,"code":149502,"language":30461,"meta":26,"style":26},"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",[88,149504,149505,149513,149521,149550,149554,149558,149568,149577,149586],{"__ignoreMap":26},[91,149506,149507,149509,149511],{"class":93,"line":94},[91,149508,14817],{"class":153},[91,149510,8021],{"class":97},[91,149512,3862],{"class":250},[91,149514,149515,149517,149519],{"class":93,"line":38},[91,149516,30882],{"class":153},[91,149518,149453],{"class":97},[91,149520,30888],{"class":250},[91,149522,149523,149525,149527,149529,149531,149534,149536,149538,149540,149542,149544,149546,149548],{"class":93,"line":1304},[91,149524,32532],{"class":105},[91,149526,251],{"class":250},[91,149528,302],{"class":153},[91,149530,149467],{"class":101},[91,149532,149533],{"class":105},"{self",[91,149535,80382],{"class":250},[91,149537,1195],{"class":105},[91,149539,149476],{"class":101},[91,149541,149533],{"class":105},[91,149543,80394],{"class":250},[91,149545,1195],{"class":105},[91,149547,149485],{"class":101},[91,149549,257],{"class":250},[91,149551,149552],{"class":93,"line":1319},[91,149553,2523],{"emptyLinePlaceholder":175},[91,149555,149556],{"class":93,"line":1325},[91,149557,2523],{"emptyLinePlaceholder":175},[91,149559,149560,149563,149565],{"class":93,"line":1339},[91,149561,149562],{"class":250},"student ",[91,149564,296],{"class":153},[91,149566,149567],{"class":250}," Student()\n",[91,149569,149570,149573,149575],{"class":93,"line":1345},[91,149571,149572],{"class":250},"student.name ",[91,149574,296],{"class":153},[91,149576,149434],{"class":101},[91,149578,149579,149582,149584],{"class":93,"line":1436},[91,149580,149581],{"class":250},"student.age ",[91,149583,296],{"class":153},[91,149585,146632],{"class":105},[91,149587,149588],{"class":93,"line":1442},[91,149589,149590],{"class":250},"student.introduce()\n",[21,149592,149593],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[190,149595,149597],{"id":149596},"_112-类和对象","11.2 类和对象",[21,149599,149600],{},"类是模板，对象是根据模板创建出来的具体实例。",[82,149602,149604],{"className":30459,"code":149603,"language":30461,"meta":26,"style":26},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[88,149605,149606,149614,149619,149623,149627,149636],{"__ignoreMap":26},[91,149607,149608,149610,149612],{"class":93,"line":94},[91,149609,14817],{"class":153},[91,149611,8021],{"class":97},[91,149613,3862],{"class":250},[91,149615,149616],{"class":93,"line":38},[91,149617,149618],{"class":153},"    pass\n",[91,149620,149621],{"class":93,"line":1304},[91,149622,2523],{"emptyLinePlaceholder":175},[91,149624,149625],{"class":93,"line":1319},[91,149626,2523],{"emptyLinePlaceholder":175},[91,149628,149629,149632,149634],{"class":93,"line":1325},[91,149630,149631],{"class":250},"student1 ",[91,149633,296],{"class":153},[91,149635,149567],{"class":250},[91,149637,149638,149641,149643],{"class":93,"line":1339},[91,149639,149640],{"class":250},"student2 ",[91,149642,296],{"class":153},[91,149644,149567],{"class":250},[21,149646,149647,149650,149651,101099,149654,149657],{},[88,149648,149649],{},"Student"," 是类，",[88,149652,149653],{},"student1",[88,149655,149656],{},"student2"," 是对象。",[190,149659,149661],{"id":149660},"_113-属性","11.3 属性",[21,149663,149664],{},"属性是对象保存的数据。",[82,149666,149668],{"className":30459,"code":149667,"language":30461,"meta":26,"style":26},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[88,149669,149670,149678,149682,149686,149690,149698,149706,149714,149718,149725],{"__ignoreMap":26},[91,149671,149672,149674,149676],{"class":93,"line":94},[91,149673,14817],{"class":153},[91,149675,8021],{"class":97},[91,149677,3862],{"class":250},[91,149679,149680],{"class":93,"line":38},[91,149681,149618],{"class":153},[91,149683,149684],{"class":93,"line":1304},[91,149685,2523],{"emptyLinePlaceholder":175},[91,149687,149688],{"class":93,"line":1319},[91,149689,2523],{"emptyLinePlaceholder":175},[91,149691,149692,149694,149696],{"class":93,"line":1325},[91,149693,149562],{"class":250},[91,149695,296],{"class":153},[91,149697,149567],{"class":250},[91,149699,149700,149702,149704],{"class":93,"line":1339},[91,149701,149572],{"class":250},[91,149703,296],{"class":153},[91,149705,149434],{"class":101},[91,149707,149708,149710,149712],{"class":93,"line":1345},[91,149709,149581],{"class":250},[91,149711,296],{"class":153},[91,149713,146632],{"class":105},[91,149715,149716],{"class":93,"line":1436},[91,149717,2523],{"emptyLinePlaceholder":175},[91,149719,149720,149722],{"class":93,"line":1442},[91,149721,30496],{"class":105},[91,149723,149724],{"class":250},"(student.name)\n",[91,149726,149727,149729],{"class":93,"line":1454},[91,149728,30496],{"class":105},[91,149730,149731],{"class":250},"(student.age)\n",[21,149733,149734],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[190,149736,149738],{"id":149737},"_114-方法","11.4 方法",[21,149740,149741],{},"类中的函数叫方法。",[82,149743,149744],{"className":30459,"code":149502,"language":30461,"meta":26,"style":26},[88,149745,149746,149754,149762,149790,149794,149798,149806,149814,149822],{"__ignoreMap":26},[91,149747,149748,149750,149752],{"class":93,"line":94},[91,149749,14817],{"class":153},[91,149751,8021],{"class":97},[91,149753,3862],{"class":250},[91,149755,149756,149758,149760],{"class":93,"line":38},[91,149757,30882],{"class":153},[91,149759,149453],{"class":97},[91,149761,30888],{"class":250},[91,149763,149764,149766,149768,149770,149772,149774,149776,149778,149780,149782,149784,149786,149788],{"class":93,"line":1304},[91,149765,32532],{"class":105},[91,149767,251],{"class":250},[91,149769,302],{"class":153},[91,149771,149467],{"class":101},[91,149773,149533],{"class":105},[91,149775,80382],{"class":250},[91,149777,1195],{"class":105},[91,149779,149476],{"class":101},[91,149781,149533],{"class":105},[91,149783,80394],{"class":250},[91,149785,1195],{"class":105},[91,149787,149485],{"class":101},[91,149789,257],{"class":250},[91,149791,149792],{"class":93,"line":1319},[91,149793,2523],{"emptyLinePlaceholder":175},[91,149795,149796],{"class":93,"line":1325},[91,149797,2523],{"emptyLinePlaceholder":175},[91,149799,149800,149802,149804],{"class":93,"line":1339},[91,149801,149562],{"class":250},[91,149803,296],{"class":153},[91,149805,149567],{"class":250},[91,149807,149808,149810,149812],{"class":93,"line":1345},[91,149809,149572],{"class":250},[91,149811,296],{"class":153},[91,149813,149434],{"class":101},[91,149815,149816,149818,149820],{"class":93,"line":1436},[91,149817,149581],{"class":250},[91,149819,296],{"class":153},[91,149821,146632],{"class":105},[91,149823,149824],{"class":93,"line":1442},[91,149825,149590],{"class":250},[21,149827,149828,149830,149831,149833],{},[88,149829,30904],{}," 表示当前对象。调用方法时不需要手动传入 ",[88,149832,30904],{},"，Python 会自动传。",[190,149835,149837],{"id":149836},"_115-构造方法__init__","11.5 构造方法__init__",[21,149839,149840,149842],{},[88,149841,30910],{}," 在对象创建时自动执行，用于初始化属性。",[82,149844,149846],{"className":30459,"code":149845,"language":30461,"meta":26,"style":26},"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",[88,149847,149848,149856,149865,149877,149889,149900,149904,149912,149950,149954,149958,149980],{"__ignoreMap":26},[91,149849,149850,149852,149854],{"class":93,"line":94},[91,149851,14817],{"class":153},[91,149853,8021],{"class":97},[91,149855,3862],{"class":250},[91,149857,149858,149860,149862],{"class":93,"line":38},[91,149859,30882],{"class":153},[91,149861,30885],{"class":105},[91,149863,149864],{"class":250},"(self, name, age, score):\n",[91,149866,149867,149869,149872,149874],{"class":93,"line":1304},[91,149868,30926],{"class":105},[91,149870,149871],{"class":250},".name ",[91,149873,296],{"class":153},[91,149875,149876],{"class":250}," name\n",[91,149878,149879,149881,149884,149886],{"class":93,"line":1319},[91,149880,30926],{"class":105},[91,149882,149883],{"class":250},".age ",[91,149885,296],{"class":153},[91,149887,149888],{"class":250}," age\n",[91,149890,149891,149893,149896,149898],{"class":93,"line":1325},[91,149892,30926],{"class":105},[91,149894,149895],{"class":250},".score ",[91,149897,296],{"class":153},[91,149899,1703],{"class":250},[91,149901,149902],{"class":93,"line":1339},[91,149903,2523],{"emptyLinePlaceholder":175},[91,149905,149906,149908,149910],{"class":93,"line":1345},[91,149907,30882],{"class":153},[91,149909,149453],{"class":97},[91,149911,30888],{"class":250},[91,149913,149914,149916,149918,149920,149922,149924,149926,149928,149930,149932,149934,149936,149939,149941,149944,149946,149948],{"class":93,"line":1436},[91,149915,32532],{"class":105},[91,149917,251],{"class":250},[91,149919,302],{"class":153},[91,149921,149467],{"class":101},[91,149923,149533],{"class":105},[91,149925,80382],{"class":250},[91,149927,1195],{"class":105},[91,149929,149476],{"class":101},[91,149931,149533],{"class":105},[91,149933,80394],{"class":250},[91,149935,1195],{"class":105},[91,149937,149938],{"class":101},"岁，成绩",[91,149940,149533],{"class":105},[91,149942,149943],{"class":250},".score",[91,149945,1195],{"class":105},[91,149947,500],{"class":101},[91,149949,257],{"class":250},[91,149951,149952],{"class":93,"line":1442},[91,149953,2523],{"emptyLinePlaceholder":175},[91,149955,149956],{"class":93,"line":1454},[91,149957,2523],{"emptyLinePlaceholder":175},[91,149959,149960,149962,149964,149967,149970,149972,149974,149976,149978],{"class":93,"line":1736},[91,149961,149562],{"class":250},[91,149963,296],{"class":153},[91,149965,149966],{"class":250}," Student(",[91,149968,149969],{"class":101},"\"小明\"",[91,149971,12558],{"class":250},[91,149973,899],{"class":105},[91,149975,12558],{"class":250},[91,149977,1238],{"class":105},[91,149979,257],{"class":250},[91,149981,149982],{"class":93,"line":1741},[91,149983,149590],{"class":250},[21,149985,149986],{},"构造方法的好处：",[14,149988,149989,149992,149995],{},[17,149990,149991],{},"创建对象时必须提供必要数据。",[17,149993,149994],{},"属性初始化集中，不容易漏。",[17,149996,149997],{},"对象状态更完整。",[190,149999,150001,150002],{"id":150000},"_116-str","11.6 ",[398,150003,1424],{},[21,150005,150006,150007,28504],{},"直接打印对象时，默认输出不直观。可以定义 ",[88,150008,150009],{},"__str__",[82,150011,150013],{"className":30459,"code":150012,"language":30461,"meta":26,"style":26},"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",[88,150014,150015,150023,150032,150042,150052,150056,150065,150093,150097,150101,150117],{"__ignoreMap":26},[91,150016,150017,150019,150021],{"class":93,"line":94},[91,150018,14817],{"class":153},[91,150020,8021],{"class":97},[91,150022,3862],{"class":250},[91,150024,150025,150027,150029],{"class":93,"line":38},[91,150026,30882],{"class":153},[91,150028,30885],{"class":105},[91,150030,150031],{"class":250},"(self, name, age):\n",[91,150033,150034,150036,150038,150040],{"class":93,"line":1304},[91,150035,30926],{"class":105},[91,150037,149871],{"class":250},[91,150039,296],{"class":153},[91,150041,149876],{"class":250},[91,150043,150044,150046,150048,150050],{"class":93,"line":1319},[91,150045,30926],{"class":105},[91,150047,149883],{"class":250},[91,150049,296],{"class":153},[91,150051,149888],{"class":250},[91,150053,150054],{"class":93,"line":1325},[91,150055,2523],{"emptyLinePlaceholder":175},[91,150057,150058,150060,150063],{"class":93,"line":1339},[91,150059,30882],{"class":153},[91,150061,150062],{"class":105}," __str__",[91,150064,30888],{"class":250},[91,150066,150067,150069,150072,150075,150077,150079,150081,150084,150086,150088,150090],{"class":93,"line":1345},[91,150068,14875],{"class":153},[91,150070,150071],{"class":153}," f",[91,150073,150074],{"class":101},"\"Student(name=",[91,150076,149533],{"class":105},[91,150078,80382],{"class":250},[91,150080,1195],{"class":105},[91,150082,150083],{"class":101},", age=",[91,150085,149533],{"class":105},[91,150087,80394],{"class":250},[91,150089,1195],{"class":105},[91,150091,150092],{"class":101},")\"\n",[91,150094,150095],{"class":93,"line":1436},[91,150096,2523],{"emptyLinePlaceholder":175},[91,150098,150099],{"class":93,"line":1442},[91,150100,2523],{"emptyLinePlaceholder":175},[91,150102,150103,150105,150107,150109,150111,150113,150115],{"class":93,"line":1454},[91,150104,149562],{"class":250},[91,150106,296],{"class":153},[91,150108,149966],{"class":250},[91,150110,149969],{"class":101},[91,150112,12558],{"class":250},[91,150114,899],{"class":105},[91,150116,257],{"class":250},[91,150118,150119,150121],{"class":93,"line":1736},[91,150120,30496],{"class":105},[91,150122,150123],{"class":250},"(student)\n",[190,150125,150127],{"id":150126},"_117-封装","11.7 封装",[21,150129,150130],{},"封装就是把数据和方法放到类中，并控制访问方式。",[21,150132,150133],{},"Python 中以双下划线开头的属性通常视为私有属性。",[82,150135,150137],{"className":30459,"code":150136,"language":30461,"meta":26,"style":26},"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",[88,150138,150139,150148,150157,150169,150181,150185,150194,150203,150207,150217,150230,150241,150246,150257,150261,150270,150282,150293,150297,150310,150321,150325,150336,150340,150344,150362,150371,150380],{"__ignoreMap":26},[91,150140,150141,150143,150146],{"class":93,"line":94},[91,150142,14817],{"class":153},[91,150144,150145],{"class":97}," Account",[91,150147,3862],{"class":250},[91,150149,150150,150152,150154],{"class":93,"line":38},[91,150151,30882],{"class":153},[91,150153,30885],{"class":105},[91,150155,150156],{"class":250},"(self, owner, balance):\n",[91,150158,150159,150161,150164,150166],{"class":93,"line":1304},[91,150160,30926],{"class":105},[91,150162,150163],{"class":250},".owner ",[91,150165,296],{"class":153},[91,150167,150168],{"class":250}," owner\n",[91,150170,150171,150173,150176,150178],{"class":93,"line":1319},[91,150172,30926],{"class":105},[91,150174,150175],{"class":250},".__balance ",[91,150177,296],{"class":153},[91,150179,150180],{"class":250}," balance\n",[91,150182,150183],{"class":93,"line":1325},[91,150184,2523],{"emptyLinePlaceholder":175},[91,150186,150187,150189,150192],{"class":93,"line":1339},[91,150188,30882],{"class":153},[91,150190,150191],{"class":97}," get_balance",[91,150193,30888],{"class":250},[91,150195,150196,150198,150200],{"class":93,"line":1345},[91,150197,14875],{"class":153},[91,150199,38954],{"class":105},[91,150201,150202],{"class":250},".__balance\n",[91,150204,150205],{"class":93,"line":1436},[91,150206,2523],{"emptyLinePlaceholder":175},[91,150208,150209,150211,150214],{"class":93,"line":1442},[91,150210,30882],{"class":153},[91,150212,150213],{"class":97}," deposit",[91,150215,150216],{"class":250},"(self, money):\n",[91,150218,150219,150221,150224,150226,150228],{"class":93,"line":1454},[91,150220,2620],{"class":153},[91,150222,150223],{"class":250}," money ",[91,150225,1712],{"class":153},[91,150227,4216],{"class":105},[91,150229,3862],{"class":250},[91,150231,150232,150234,150236,150239],{"class":93,"line":1736},[91,150233,34731],{"class":105},[91,150235,251],{"class":250},[91,150237,150238],{"class":101},"\"存款金额必须大于0\"",[91,150240,257],{"class":250},[91,150242,150243],{"class":93,"line":1741},[91,150244,150245],{"class":153},"            return\n",[91,150247,150248,150250,150252,150254],{"class":93,"line":1747},[91,150249,30926],{"class":105},[91,150251,150175],{"class":250},[91,150253,9600],{"class":153},[91,150255,150256],{"class":250}," money\n",[91,150258,150259],{"class":93,"line":1752},[91,150260,2523],{"emptyLinePlaceholder":175},[91,150262,150263,150265,150268],{"class":93,"line":1766},[91,150264,30882],{"class":153},[91,150266,150267],{"class":97}," withdraw",[91,150269,150216],{"class":250},[91,150271,150272,150274,150276,150278,150280],{"class":93,"line":1771},[91,150273,2620],{"class":153},[91,150275,150223],{"class":250},[91,150277,1712],{"class":153},[91,150279,4216],{"class":105},[91,150281,3862],{"class":250},[91,150283,150284,150286,150288,150291],{"class":93,"line":1777},[91,150285,34731],{"class":105},[91,150287,251],{"class":250},[91,150289,150290],{"class":101},"\"取款金额必须大于0\"",[91,150292,257],{"class":250},[91,150294,150295],{"class":93,"line":1798},[91,150296,150245],{"class":153},[91,150298,150299,150301,150303,150305,150307],{"class":93,"line":1803},[91,150300,2620],{"class":153},[91,150302,150223],{"class":250},[91,150304,1209],{"class":153},[91,150306,38954],{"class":105},[91,150308,150309],{"class":250},".__balance:\n",[91,150311,150312,150314,150316,150319],{"class":93,"line":1817},[91,150313,34731],{"class":105},[91,150315,251],{"class":250},[91,150317,150318],{"class":101},"\"余额不足\"",[91,150320,257],{"class":250},[91,150322,150323],{"class":93,"line":1822},[91,150324,150245],{"class":153},[91,150326,150327,150329,150331,150334],{"class":93,"line":1851},[91,150328,30926],{"class":105},[91,150330,150175],{"class":250},[91,150332,150333],{"class":153},"-=",[91,150335,150256],{"class":250},[91,150337,150338],{"class":93,"line":1856},[91,150339,2523],{"emptyLinePlaceholder":175},[91,150341,150342],{"class":93,"line":1873},[91,150343,2523],{"emptyLinePlaceholder":175},[91,150345,150346,150349,150351,150354,150356,150358,150360],{"class":93,"line":1878},[91,150347,150348],{"class":250},"account ",[91,150350,296],{"class":153},[91,150352,150353],{"class":250}," Account(",[91,150355,149969],{"class":101},[91,150357,12558],{"class":250},[91,150359,6533],{"class":105},[91,150361,257],{"class":250},[91,150363,150364,150367,150369],{"class":93,"line":1883},[91,150365,150366],{"class":250},"account.deposit(",[91,150368,1846],{"class":105},[91,150370,257],{"class":250},[91,150372,150373,150376,150378],{"class":93,"line":1888},[91,150374,150375],{"class":250},"account.withdraw(",[91,150377,560],{"class":105},[91,150379,257],{"class":250},[91,150381,150382,150384],{"class":93,"line":1902},[91,150383,30496],{"class":105},[91,150385,150386],{"class":250},"(account.get_balance())\n",[21,150388,150389],{},"封装的意义是避免外部随意修改内部状态。",[190,150391,150393],{"id":150392},"_118-继承","11.8 继承",[21,150395,150396],{},"继承可以让子类复用父类的属性和方法。",[82,150398,150400],{"className":30459,"code":150399,"language":30461,"meta":26,"style":26},"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",[88,150401,150402,150411,150420,150431,150435,150439,150453,150462,150473,150477,150481,150491,150496],{"__ignoreMap":26},[91,150403,150404,150406,150409],{"class":93,"line":94},[91,150405,14817],{"class":153},[91,150407,150408],{"class":97}," Animal",[91,150410,3862],{"class":250},[91,150412,150413,150415,150418],{"class":93,"line":38},[91,150414,30882],{"class":153},[91,150416,150417],{"class":97}," eat",[91,150419,30888],{"class":250},[91,150421,150422,150424,150426,150429],{"class":93,"line":1304},[91,150423,32532],{"class":105},[91,150425,251],{"class":250},[91,150427,150428],{"class":101},"\"吃东西\"",[91,150430,257],{"class":250},[91,150432,150433],{"class":93,"line":1319},[91,150434,2523],{"emptyLinePlaceholder":175},[91,150436,150437],{"class":93,"line":1325},[91,150438,2523],{"emptyLinePlaceholder":175},[91,150440,150441,150443,150446,150448,150451],{"class":93,"line":1339},[91,150442,14817],{"class":153},[91,150444,150445],{"class":97}," Dog",[91,150447,251],{"class":250},[91,150449,150450],{"class":97},"Animal",[91,150452,30867],{"class":250},[91,150454,150455,150457,150460],{"class":93,"line":1345},[91,150456,30882],{"class":153},[91,150458,150459],{"class":97}," bark",[91,150461,30888],{"class":250},[91,150463,150464,150466,150468,150471],{"class":93,"line":1436},[91,150465,32532],{"class":105},[91,150467,251],{"class":250},[91,150469,150470],{"class":101},"\"汪汪\"",[91,150472,257],{"class":250},[91,150474,150475],{"class":93,"line":1442},[91,150476,2523],{"emptyLinePlaceholder":175},[91,150478,150479],{"class":93,"line":1454},[91,150480,2523],{"emptyLinePlaceholder":175},[91,150482,150483,150486,150488],{"class":93,"line":1736},[91,150484,150485],{"class":250},"dog ",[91,150487,296],{"class":153},[91,150489,150490],{"class":250}," Dog()\n",[91,150492,150493],{"class":93,"line":1741},[91,150494,150495],{"class":250},"dog.eat()\n",[91,150497,150498],{"class":93,"line":1747},[91,150499,150500],{"class":250},"dog.bark()\n",[21,150502,150503],{},"子类可以扩展新方法，也可以重写父类方法。",[190,150505,150507],{"id":150506},"_119-方法重写","11.9 方法重写",[82,150509,150511],{"className":30459,"code":150510,"language":30461,"meta":26,"style":26},"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",[88,150512,150513,150521,150530,150541,150545,150549,150561,150569,150579,150583,150587,150600,150608,150619,150623,150627,150635,150645,150649,150654],{"__ignoreMap":26},[91,150514,150515,150517,150519],{"class":93,"line":94},[91,150516,14817],{"class":153},[91,150518,150408],{"class":97},[91,150520,3862],{"class":250},[91,150522,150523,150525,150528],{"class":93,"line":38},[91,150524,30882],{"class":153},[91,150526,150527],{"class":97}," speak",[91,150529,30888],{"class":250},[91,150531,150532,150534,150536,150539],{"class":93,"line":1304},[91,150533,32532],{"class":105},[91,150535,251],{"class":250},[91,150537,150538],{"class":101},"\"动物叫\"",[91,150540,257],{"class":250},[91,150542,150543],{"class":93,"line":1319},[91,150544,2523],{"emptyLinePlaceholder":175},[91,150546,150547],{"class":93,"line":1325},[91,150548,2523],{"emptyLinePlaceholder":175},[91,150550,150551,150553,150555,150557,150559],{"class":93,"line":1339},[91,150552,14817],{"class":153},[91,150554,150445],{"class":97},[91,150556,251],{"class":250},[91,150558,150450],{"class":97},[91,150560,30867],{"class":250},[91,150562,150563,150565,150567],{"class":93,"line":1345},[91,150564,30882],{"class":153},[91,150566,150527],{"class":97},[91,150568,30888],{"class":250},[91,150570,150571,150573,150575,150577],{"class":93,"line":1436},[91,150572,32532],{"class":105},[91,150574,251],{"class":250},[91,150576,150470],{"class":101},[91,150578,257],{"class":250},[91,150580,150581],{"class":93,"line":1442},[91,150582,2523],{"emptyLinePlaceholder":175},[91,150584,150585],{"class":93,"line":1454},[91,150586,2523],{"emptyLinePlaceholder":175},[91,150588,150589,150591,150594,150596,150598],{"class":93,"line":1736},[91,150590,14817],{"class":153},[91,150592,150593],{"class":97}," Cat",[91,150595,251],{"class":250},[91,150597,150450],{"class":97},[91,150599,30867],{"class":250},[91,150601,150602,150604,150606],{"class":93,"line":1741},[91,150603,30882],{"class":153},[91,150605,150527],{"class":97},[91,150607,30888],{"class":250},[91,150609,150610,150612,150614,150617],{"class":93,"line":1747},[91,150611,32532],{"class":105},[91,150613,251],{"class":250},[91,150615,150616],{"class":101},"\"喵喵\"",[91,150618,257],{"class":250},[91,150620,150621],{"class":93,"line":1752},[91,150622,2523],{"emptyLinePlaceholder":175},[91,150624,150625],{"class":93,"line":1766},[91,150626,2523],{"emptyLinePlaceholder":175},[91,150628,150629,150631,150633],{"class":93,"line":1771},[91,150630,150485],{"class":250},[91,150632,296],{"class":153},[91,150634,150490],{"class":250},[91,150636,150637,150640,150642],{"class":93,"line":1777},[91,150638,150639],{"class":250},"cat ",[91,150641,296],{"class":153},[91,150643,150644],{"class":250}," Cat()\n",[91,150646,150647],{"class":93,"line":1798},[91,150648,2523],{"emptyLinePlaceholder":175},[91,150650,150651],{"class":93,"line":1803},[91,150652,150653],{"class":250},"dog.speak()\n",[91,150655,150656],{"class":93,"line":1817},[91,150657,150658],{"class":250},"cat.speak()\n",[190,150660,150662],{"id":150661},"_1110-super","11.10 super",[21,150664,150665,150666,150669],{},"子类可以通过 ",[88,150667,150668],{},"super()"," 调用父类方法。",[82,150671,150673],{"className":30459,"code":150672,"language":30461,"meta":26,"style":26},"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",[88,150674,150675,150683,150692,150702,150706,150710,150722,150731,150742,150752,150756,150760,150776],{"__ignoreMap":26},[91,150676,150677,150679,150681],{"class":93,"line":94},[91,150678,14817],{"class":153},[91,150680,15692],{"class":97},[91,150682,3862],{"class":250},[91,150684,150685,150687,150689],{"class":93,"line":38},[91,150686,30882],{"class":153},[91,150688,30885],{"class":105},[91,150690,150691],{"class":250},"(self, name):\n",[91,150693,150694,150696,150698,150700],{"class":93,"line":1304},[91,150695,30926],{"class":105},[91,150697,149871],{"class":250},[91,150699,296],{"class":153},[91,150701,149876],{"class":250},[91,150703,150704],{"class":93,"line":1319},[91,150705,2523],{"emptyLinePlaceholder":175},[91,150707,150708],{"class":93,"line":1325},[91,150709,2523],{"emptyLinePlaceholder":175},[91,150711,150712,150714,150716,150718,150720],{"class":93,"line":1339},[91,150713,14817],{"class":153},[91,150715,8021],{"class":97},[91,150717,251],{"class":250},[91,150719,19169],{"class":97},[91,150721,30867],{"class":250},[91,150723,150724,150726,150728],{"class":93,"line":1345},[91,150725,30882],{"class":153},[91,150727,30885],{"class":105},[91,150729,150730],{"class":250},"(self, name, score):\n",[91,150732,150733,150735,150737,150739],{"class":93,"line":1436},[91,150734,30898],{"class":105},[91,150736,17384],{"class":250},[91,150738,30910],{"class":105},[91,150740,150741],{"class":250},"(name)\n",[91,150743,150744,150746,150748,150750],{"class":93,"line":1442},[91,150745,30926],{"class":105},[91,150747,149895],{"class":250},[91,150749,296],{"class":153},[91,150751,1703],{"class":250},[91,150753,150754],{"class":93,"line":1454},[91,150755,2523],{"emptyLinePlaceholder":175},[91,150757,150758],{"class":93,"line":1736},[91,150759,2523],{"emptyLinePlaceholder":175},[91,150761,150762,150764,150766,150768,150770,150772,150774],{"class":93,"line":1741},[91,150763,149562],{"class":250},[91,150765,296],{"class":153},[91,150767,149966],{"class":250},[91,150769,149969],{"class":101},[91,150771,12558],{"class":250},[91,150773,1238],{"class":105},[91,150775,257],{"class":250},[91,150777,150778,150780],{"class":93,"line":1747},[91,150779,30496],{"class":105},[91,150781,150782],{"class":250},"(student.name, student.score)\n",[190,150784,150786],{"id":150785},"_1111-多态","11.11 多态",[21,150788,150789],{},"多态指不同对象响应同一个方法，表现出不同结果。",[82,150791,150793],{"className":30459,"code":150792,"language":30461,"meta":26,"style":26},"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",[88,150794,150795,150803,150811,150821,150825,150829,150837,150845,150855,150859,150863,150873,150878,150882,150886,150891],{"__ignoreMap":26},[91,150796,150797,150799,150801],{"class":93,"line":94},[91,150798,14817],{"class":153},[91,150800,150445],{"class":97},[91,150802,3862],{"class":250},[91,150804,150805,150807,150809],{"class":93,"line":38},[91,150806,30882],{"class":153},[91,150808,150527],{"class":97},[91,150810,30888],{"class":250},[91,150812,150813,150815,150817,150819],{"class":93,"line":1304},[91,150814,32532],{"class":105},[91,150816,251],{"class":250},[91,150818,150470],{"class":101},[91,150820,257],{"class":250},[91,150822,150823],{"class":93,"line":1319},[91,150824,2523],{"emptyLinePlaceholder":175},[91,150826,150827],{"class":93,"line":1325},[91,150828,2523],{"emptyLinePlaceholder":175},[91,150830,150831,150833,150835],{"class":93,"line":1339},[91,150832,14817],{"class":153},[91,150834,150593],{"class":97},[91,150836,3862],{"class":250},[91,150838,150839,150841,150843],{"class":93,"line":1345},[91,150840,30882],{"class":153},[91,150842,150527],{"class":97},[91,150844,30888],{"class":250},[91,150846,150847,150849,150851,150853],{"class":93,"line":1436},[91,150848,32532],{"class":105},[91,150850,251],{"class":250},[91,150852,150616],{"class":101},[91,150854,257],{"class":250},[91,150856,150857],{"class":93,"line":1442},[91,150858,2523],{"emptyLinePlaceholder":175},[91,150860,150861],{"class":93,"line":1454},[91,150862,2523],{"emptyLinePlaceholder":175},[91,150864,150865,150867,150870],{"class":93,"line":1736},[91,150866,32028],{"class":153},[91,150868,150869],{"class":97}," make_sound",[91,150871,150872],{"class":250},"(animal):\n",[91,150874,150875],{"class":93,"line":1741},[91,150876,150877],{"class":250},"    animal.speak()\n",[91,150879,150880],{"class":93,"line":1747},[91,150881,2523],{"emptyLinePlaceholder":175},[91,150883,150884],{"class":93,"line":1752},[91,150885,2523],{"emptyLinePlaceholder":175},[91,150887,150888],{"class":93,"line":1766},[91,150889,150890],{"class":250},"make_sound(Dog())\n",[91,150892,150893],{"class":93,"line":1771},[91,150894,150895],{"class":250},"make_sound(Cat())\n",[21,150897,150898],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[190,150900,150902],{"id":150901},"_1112-类属性和实例属性","11.12 类属性和实例属性",[21,150904,150905],{},"实例属性属于对象：",[82,150907,150909],{"className":30459,"code":150908,"language":30461,"meta":26,"style":26},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[88,150910,150911,150919,150927],{"__ignoreMap":26},[91,150912,150913,150915,150917],{"class":93,"line":94},[91,150914,14817],{"class":153},[91,150916,8021],{"class":97},[91,150918,3862],{"class":250},[91,150920,150921,150923,150925],{"class":93,"line":38},[91,150922,30882],{"class":153},[91,150924,30885],{"class":105},[91,150926,150691],{"class":250},[91,150928,150929,150931,150933,150935],{"class":93,"line":1304},[91,150930,30926],{"class":105},[91,150932,149871],{"class":250},[91,150934,296],{"class":153},[91,150936,149876],{"class":250},[21,150938,150939],{},"类属性属于类，所有对象共享：",[82,150941,150943],{"className":30459,"code":150942,"language":30461,"meta":26,"style":26},"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",[88,150944,150945,150953,150963,150967,150975,150985,150989,150993,151006,151020,151024,151031,151038],{"__ignoreMap":26},[91,150946,150947,150949,150951],{"class":93,"line":94},[91,150948,14817],{"class":153},[91,150950,8021],{"class":97},[91,150952,3862],{"class":250},[91,150954,150955,150958,150960],{"class":93,"line":38},[91,150956,150957],{"class":250},"    school ",[91,150959,296],{"class":153},[91,150961,150962],{"class":101}," \"黑马学校\"\n",[91,150964,150965],{"class":93,"line":1304},[91,150966,2523],{"emptyLinePlaceholder":175},[91,150968,150969,150971,150973],{"class":93,"line":1319},[91,150970,30882],{"class":153},[91,150972,30885],{"class":105},[91,150974,150691],{"class":250},[91,150976,150977,150979,150981,150983],{"class":93,"line":1325},[91,150978,30926],{"class":105},[91,150980,149871],{"class":250},[91,150982,296],{"class":153},[91,150984,149876],{"class":250},[91,150986,150987],{"class":93,"line":1339},[91,150988,2523],{"emptyLinePlaceholder":175},[91,150990,150991],{"class":93,"line":1345},[91,150992,2523],{"emptyLinePlaceholder":175},[91,150994,150995,150998,151000,151002,151004],{"class":93,"line":1436},[91,150996,150997],{"class":250},"s1 ",[91,150999,296],{"class":153},[91,151001,149966],{"class":250},[91,151003,149969],{"class":101},[91,151005,257],{"class":250},[91,151007,151008,151011,151013,151015,151018],{"class":93,"line":1442},[91,151009,151010],{"class":250},"s2 ",[91,151012,296],{"class":153},[91,151014,149966],{"class":250},[91,151016,151017],{"class":101},"\"小红\"",[91,151019,257],{"class":250},[91,151021,151022],{"class":93,"line":1454},[91,151023,2523],{"emptyLinePlaceholder":175},[91,151025,151026,151028],{"class":93,"line":1736},[91,151027,30496],{"class":105},[91,151029,151030],{"class":250},"(s1.school)\n",[91,151032,151033,151035],{"class":93,"line":1741},[91,151034,30496],{"class":105},[91,151036,151037],{"class":250},"(s2.school)\n",[91,151039,151040,151042],{"class":93,"line":1747},[91,151041,30496],{"class":105},[91,151043,151044],{"class":250},"(Student.school)\n",[21,151046,151047],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[190,151049,151051],{"id":151050},"_1113-类方法和静态方法","11.13 类方法和静态方法",[217,151053,151055],{"id":151054},"_11131-类方法","11.13.1 类方法",[21,151057,151058,151059,151062,151063,28504],{},"类方法使用 ",[88,151060,151061],{},"@classmethod","，第一个参数通常是 ",[88,151064,151065],{},"cls",[82,151067,151069],{"className":30459,"code":151068,"language":30461,"meta":26,"style":26},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[88,151070,151071,151079,151087,151091,151099,151109,151119,151123,151127],{"__ignoreMap":26},[91,151072,151073,151075,151077],{"class":93,"line":94},[91,151074,14817],{"class":153},[91,151076,8021],{"class":97},[91,151078,3862],{"class":250},[91,151080,151081,151083,151085],{"class":93,"line":38},[91,151082,150957],{"class":250},[91,151084,296],{"class":153},[91,151086,150962],{"class":101},[91,151088,151089],{"class":93,"line":1304},[91,151090,2523],{"emptyLinePlaceholder":175},[91,151092,151093,151096],{"class":93,"line":1319},[91,151094,151095],{"class":97},"    @",[91,151097,151098],{"class":105},"classmethod\n",[91,151100,151101,151103,151106],{"class":93,"line":1325},[91,151102,30882],{"class":153},[91,151104,151105],{"class":97}," get_school",[91,151107,151108],{"class":250},"(cls):\n",[91,151110,151111,151113,151116],{"class":93,"line":1339},[91,151112,14875],{"class":153},[91,151114,151115],{"class":105}," cls",[91,151117,151118],{"class":250},".school\n",[91,151120,151121],{"class":93,"line":1345},[91,151122,2523],{"emptyLinePlaceholder":175},[91,151124,151125],{"class":93,"line":1436},[91,151126,2523],{"emptyLinePlaceholder":175},[91,151128,151129,151131],{"class":93,"line":1442},[91,151130,30496],{"class":105},[91,151132,151133],{"class":250},"(Student.get_school())\n",[217,151135,151137],{"id":151136},"_11132-静态方法","11.13.2 静态方法",[21,151139,151140,151141,151144],{},"静态方法使用 ",[88,151142,151143],{},"@staticmethod","，不需要访问实例和类。",[82,151146,151148],{"className":30459,"code":151147,"language":30461,"meta":26,"style":26},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[88,151149,151150,151159,151166,151175,151186,151190,151194],{"__ignoreMap":26},[91,151151,151152,151154,151157],{"class":93,"line":94},[91,151153,14817],{"class":153},[91,151155,151156],{"class":97}," MathUtils",[91,151158,3862],{"class":250},[91,151160,151161,151163],{"class":93,"line":38},[91,151162,151095],{"class":97},[91,151164,151165],{"class":105},"staticmethod\n",[91,151167,151168,151170,151172],{"class":93,"line":1304},[91,151169,30882],{"class":153},[91,151171,5332],{"class":97},[91,151173,151174],{"class":250},"(a, b):\n",[91,151176,151177,151179,151181,151183],{"class":93,"line":1319},[91,151178,14875],{"class":153},[91,151180,10992],{"class":250},[91,151182,730],{"class":153},[91,151184,151185],{"class":250}," b\n",[91,151187,151188],{"class":93,"line":1325},[91,151189,2523],{"emptyLinePlaceholder":175},[91,151191,151192],{"class":93,"line":1339},[91,151193,2523],{"emptyLinePlaceholder":175},[91,151195,151196,151198,151201,151203,151205,151207],{"class":93,"line":1345},[91,151197,30496],{"class":105},[91,151199,151200],{"class":250},"(MathUtils.add(",[91,151202,466],{"class":105},[91,151204,12558],{"class":250},[91,151206,327],{"class":105},[91,151208,30578],{"class":250},[21,151210,151211],{},"静态方法本质上是放在类命名空间里的普通函数。",[190,151213,151215],{"id":151214},"_1114-dataclass","11.14 dataclass",[21,151217,151218,151221],{},[88,151219,151220],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[82,151223,151225],{"className":30459,"code":151224,"language":30461,"meta":26,"style":26},"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",[88,151226,151227,151239,151243,151247,151252,151260,151268,151276,151284,151288,151292,151312],{"__ignoreMap":26},[91,151228,151229,151231,151234,151236],{"class":93,"line":94},[91,151230,30818],{"class":153},[91,151232,151233],{"class":250}," dataclasses ",[91,151235,30473],{"class":153},[91,151237,151238],{"class":250}," dataclass\n",[91,151240,151241],{"class":93,"line":38},[91,151242,2523],{"emptyLinePlaceholder":175},[91,151244,151245],{"class":93,"line":1304},[91,151246,2523],{"emptyLinePlaceholder":175},[91,151248,151249],{"class":93,"line":1319},[91,151250,151251],{"class":97},"@dataclass\n",[91,151253,151254,151256,151258],{"class":93,"line":1325},[91,151255,14817],{"class":153},[91,151257,8021],{"class":97},[91,151259,3862],{"class":250},[91,151261,151262,151265],{"class":93,"line":1339},[91,151263,151264],{"class":250},"    name: ",[91,151266,151267],{"class":105},"str\n",[91,151269,151270,151273],{"class":93,"line":1345},[91,151271,151272],{"class":250},"    age: ",[91,151274,151275],{"class":105},"int\n",[91,151277,151278,151281],{"class":93,"line":1436},[91,151279,151280],{"class":250},"    score: ",[91,151282,151283],{"class":105},"float\n",[91,151285,151286],{"class":93,"line":1442},[91,151287,2523],{"emptyLinePlaceholder":175},[91,151289,151290],{"class":93,"line":1454},[91,151291,2523],{"emptyLinePlaceholder":175},[91,151293,151294,151296,151298,151300,151302,151304,151306,151308,151310],{"class":93,"line":1736},[91,151295,149562],{"class":250},[91,151297,296],{"class":153},[91,151299,149966],{"class":250},[91,151301,149969],{"class":101},[91,151303,12558],{"class":250},[91,151305,899],{"class":105},[91,151307,12558],{"class":250},[91,151309,1238],{"class":105},[91,151311,257],{"class":250},[91,151313,151314,151316],{"class":93,"line":1741},[91,151315,30496],{"class":105},[91,151317,150123],{"class":250},[21,151319,151320,151321,461,151323,151326],{},"它会自动生成 ",[88,151322,30910],{},[88,151324,151325],{},"__repr__"," 等方法。适合数据模型类。",[190,151328,151330],{"id":151329},"_1115-小案例学生类","11.15 小案例：学生类",[82,151332,151334],{"className":30459,"code":151333,"language":30461,"meta":26,"style":26},"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",[88,151335,151336,151344,151353,151365,151375,151385,151395,151399,151408,151421,151425,151434,151440,151452,151464,151476,151488,151492,151496,151502,151512,151521,151531,151539,151547,151556,151560,151564,151572,151608,151612,151616,151641,151648],{"__ignoreMap":26},[91,151337,151338,151340,151342],{"class":93,"line":94},[91,151339,14817],{"class":153},[91,151341,8021],{"class":97},[91,151343,3862],{"class":250},[91,151345,151346,151348,151350],{"class":93,"line":38},[91,151347,30882],{"class":153},[91,151349,30885],{"class":105},[91,151351,151352],{"class":250},"(self, student_id, name, age, score):\n",[91,151354,151355,151357,151360,151362],{"class":93,"line":1304},[91,151356,30926],{"class":105},[91,151358,151359],{"class":250},".student_id ",[91,151361,296],{"class":153},[91,151363,151364],{"class":250}," student_id\n",[91,151366,151367,151369,151371,151373],{"class":93,"line":1319},[91,151368,30926],{"class":105},[91,151370,149871],{"class":250},[91,151372,296],{"class":153},[91,151374,149876],{"class":250},[91,151376,151377,151379,151381,151383],{"class":93,"line":1325},[91,151378,30926],{"class":105},[91,151380,149883],{"class":250},[91,151382,296],{"class":153},[91,151384,149888],{"class":250},[91,151386,151387,151389,151391,151393],{"class":93,"line":1339},[91,151388,30926],{"class":105},[91,151390,149895],{"class":250},[91,151392,296],{"class":153},[91,151394,1703],{"class":250},[91,151396,151397],{"class":93,"line":1345},[91,151398,2523],{"emptyLinePlaceholder":175},[91,151400,151401,151403,151406],{"class":93,"line":1436},[91,151402,30882],{"class":153},[91,151404,151405],{"class":97}," is_passed",[91,151407,30888],{"class":250},[91,151409,151410,151412,151414,151416,151418],{"class":93,"line":1442},[91,151411,14875],{"class":153},[91,151413,38954],{"class":105},[91,151415,149895],{"class":250},[91,151417,1834],{"class":153},[91,151419,151420],{"class":105}," 60\n",[91,151422,151423],{"class":93,"line":1454},[91,151424,2523],{"emptyLinePlaceholder":175},[91,151426,151427,151429,151432],{"class":93,"line":1736},[91,151428,30882],{"class":153},[91,151430,151431],{"class":97}," to_dict",[91,151433,30888],{"class":250},[91,151435,151436,151438],{"class":93,"line":1741},[91,151437,14875],{"class":153},[91,151439,15695],{"class":250},[91,151441,151442,151445,151447,151449],{"class":93,"line":1747},[91,151443,151444],{"class":101},"            \"student_id\"",[91,151446,51518],{"class":250},[91,151448,30904],{"class":105},[91,151450,151451],{"class":250},".student_id,\n",[91,151453,151454,151457,151459,151461],{"class":93,"line":1752},[91,151455,151456],{"class":101},"            \"name\"",[91,151458,51518],{"class":250},[91,151460,30904],{"class":105},[91,151462,151463],{"class":250},".name,\n",[91,151465,151466,151469,151471,151473],{"class":93,"line":1766},[91,151467,151468],{"class":101},"            \"age\"",[91,151470,51518],{"class":250},[91,151472,30904],{"class":105},[91,151474,151475],{"class":250},".age,\n",[91,151477,151478,151481,151483,151485],{"class":93,"line":1771},[91,151479,151480],{"class":101},"            \"score\"",[91,151482,51518],{"class":250},[91,151484,30904],{"class":105},[91,151486,151487],{"class":250},".score,\n",[91,151489,151490],{"class":93,"line":1777},[91,151491,2652],{"class":250},[91,151493,151494],{"class":93,"line":1798},[91,151495,2523],{"emptyLinePlaceholder":175},[91,151497,151498,151500],{"class":93,"line":1803},[91,151499,151095],{"class":97},[91,151501,151098],{"class":105},[91,151503,151504,151506,151509],{"class":93,"line":1817},[91,151505,30882],{"class":153},[91,151507,151508],{"class":97}," from_dict",[91,151510,151511],{"class":250},"(cls, data):\n",[91,151513,151514,151516,151518],{"class":93,"line":1822},[91,151515,14875],{"class":153},[91,151517,151115],{"class":105},[91,151519,151520],{"class":250},"(\n",[91,151522,151523,151526,151529],{"class":93,"line":1851},[91,151524,151525],{"class":250},"            data[",[91,151527,151528],{"class":101},"\"student_id\"",[91,151530,87917],{"class":250},[91,151532,151533,151535,151537],{"class":93,"line":1856},[91,151534,151525],{"class":250},[91,151536,62760],{"class":101},[91,151538,87917],{"class":250},[91,151540,151541,151543,151545],{"class":93,"line":1873},[91,151542,151525],{"class":250},[91,151544,69205],{"class":101},[91,151546,87917],{"class":250},[91,151548,151549,151551,151554],{"class":93,"line":1878},[91,151550,151525],{"class":250},[91,151552,151553],{"class":101},"\"score\"",[91,151555,87917],{"class":250},[91,151557,151558],{"class":93,"line":1883},[91,151559,38207],{"class":250},[91,151561,151562],{"class":93,"line":1888},[91,151563,2523],{"emptyLinePlaceholder":175},[91,151565,151566,151568,151570],{"class":93,"line":1902},[91,151567,30882],{"class":153},[91,151569,150062],{"class":105},[91,151571,30888],{"class":250},[91,151573,151574,151576,151578,151580,151582,151585,151587,151590,151592,151594,151596,151598,151600,151602,151604,151606],{"class":93,"line":1907},[91,151575,14875],{"class":153},[91,151577,150071],{"class":153},[91,151579,500],{"class":101},[91,151581,149533],{"class":105},[91,151583,151584],{"class":250},".student_id",[91,151586,1195],{"class":105},[91,151588,151589],{"class":105}," {self",[91,151591,80382],{"class":250},[91,151593,1195],{"class":105},[91,151595,151589],{"class":105},[91,151597,80394],{"class":250},[91,151599,1195],{"class":105},[91,151601,151589],{"class":105},[91,151603,149943],{"class":250},[91,151605,1195],{"class":105},[91,151607,25255],{"class":101},[91,151609,151610],{"class":93,"line":2700},[91,151611,2523],{"emptyLinePlaceholder":175},[91,151613,151614],{"class":93,"line":2714},[91,151615,2523],{"emptyLinePlaceholder":175},[91,151617,151618,151620,151622,151624,151627,151629,151631,151633,151635,151637,151639],{"class":93,"line":2722},[91,151619,149562],{"class":250},[91,151621,296],{"class":153},[91,151623,149966],{"class":250},[91,151625,151626],{"class":101},"\"001\"",[91,151628,12558],{"class":250},[91,151630,149969],{"class":101},[91,151632,12558],{"class":250},[91,151634,899],{"class":105},[91,151636,12558],{"class":250},[91,151638,1238],{"class":105},[91,151640,257],{"class":250},[91,151642,151643,151645],{"class":93,"line":2727},[91,151644,30496],{"class":105},[91,151646,151647],{"class":250},"(student.is_passed())\n",[91,151649,151650,151652],{"class":93,"line":2733},[91,151651,30496],{"class":105},[91,151653,151654],{"class":250},"(student.to_dict())\n",[21,151656,151657,101099,151660,151663],{},[88,151658,151659],{},"to_dict()",[88,151661,151662],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[190,151665,151667],{"id":151666},"_1116-易错点","11.16 易错点",[14,151669,151670,151676,151682,151687,151690,151693],{},[17,151671,151672,151673,28504],{},"类名推荐使用大驼峰，如 ",[88,151674,151675],{},"StudentManager",[17,151677,151678,151679,151681],{},"方法第一个参数必须写 ",[88,151680,30904],{},"，调用时不用传。",[17,151683,151684,151686],{},[88,151685,30910],{}," 不是普通方法，它在创建对象时自动执行。",[17,151688,151689],{},"私有属性不是绝对安全，只是约定和名称改写。",[17,151691,151692],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[17,151694,151695],{},"类中方法太多时，说明职责可能过重。",[190,151697,151699],{"id":151698},"_1117-本章练习","11.17 本章练习",[14,151701,151702,151708,151714,151719,151732],{},[17,151703,151704,151705,151707],{},"定义 ",[88,151706,149649],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[17,151709,151704,151710,151713],{},[88,151711,151712],{},"Account"," 类，实现存款、取款、查询余额。",[17,151715,151704,151716,151718],{},[88,151717,17349],{}," 类，计算圆的周长和面积。",[17,151720,151704,151721,461,151724,151727,151728,151731],{},[88,151722,151723],{},"Dog",[88,151725,151726],{},"Cat"," 类，并用同一个函数调用它们的 ",[88,151729,151730],{},"speak()"," 方法。",[17,151733,104447,151734,151736,151737,28504],{},[88,151735,151220],{}," 定义一个商品类 ",[88,151738,151739],{},"Product",[168,151741,151742],{},"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":26,"searchDepth":38,"depth":38,"links":151744},[151745,151746,151747,151748,151749,151750,151752,151753,151754,151755,151756,151757,151758,151762,151763,151764,151765],{"id":149413,"depth":38,"text":149414},{"id":149596,"depth":38,"text":149597},{"id":149660,"depth":38,"text":149661},{"id":149737,"depth":38,"text":149738},{"id":149836,"depth":38,"text":149837},{"id":150000,"depth":38,"text":151751},"11.6 str",{"id":150126,"depth":38,"text":150127},{"id":150392,"depth":38,"text":150393},{"id":150506,"depth":38,"text":150507},{"id":150661,"depth":38,"text":150662},{"id":150785,"depth":38,"text":150786},{"id":150901,"depth":38,"text":150902},{"id":151050,"depth":38,"text":151051,"children":151759},[151760,151761],{"id":151054,"depth":1304,"text":151055},{"id":151136,"depth":1304,"text":151137},{"id":151214,"depth":38,"text":151215},{"id":151329,"depth":38,"text":151330},{"id":151666,"depth":38,"text":151667},{"id":151698,"depth":38,"text":151699},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149405,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151772,"title":151773,"body":151774,"description":23500,"extension":173,"meta":155087,"navigation":175,"path":155088,"seo":155089,"stem":155090,"__hash__":155091},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151775,"toc":155063},[151776,151779,151783,151786,151789,151818,151821,151829,151833,151837,151840,151863,151866,151872,151876,153322,153325,153346,153350,153353,153365,153368,153552,153555,153681,153684,153688,153692,153828,153832,153918,153922,154004,154008,154045,154049,154238,154242,154245,154475,154479,154482,154663,154666,154670,154673,154679,154682,154708,154712,154715,154729,154732,154757,154760,154774,154777,154794,154797,154814,154817,154834,154838,154864,154868,154891,154895,154898,154900,154906,154908,154929,154932,154938,154944,154948,154951,155027,155030,155034,155060],[10,151777,151773],{"id":151778},"_12-综合案例与复习路线",[190,151780,151782],{"id":151781},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[21,151784,151785],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[21,151787,151788],{},"一个合格的入门综合项目最好覆盖：",[14,151790,151791,151794,151797,151800,151803,151806,151809,151812,151815],{},[17,151792,151793],{},"输入输出。",[17,151795,151796],{},"判断和循环。",[17,151798,151799],{},"函数拆分。",[17,151801,151802],{},"列表、字典等容器。",[17,151804,151805],{},"文件持久化。",[17,151807,151808],{},"异常处理。",[17,151810,151811],{},"模块拆分。",[17,151813,151814],{},"可选：面向对象。",[17,151816,151817],{},"可选：数据可视化。",[21,151819,151820],{},"本章整理两个方向：",[14,151822,151823,151826],{},[17,151824,151825],{},"学生管理系统。",[17,151827,151828],{},"销售数据统计和可视化。",[190,151830,151832],{"id":151831},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[217,151834,151836],{"id":151835},"_1221-需求","12.2.1 需求",[21,151838,151839],{},"实现一个命令行学生管理系统：",[14,151841,151842,151845,151848,151851,151854,151857,151860],{},[17,151843,151844],{},"添加学生。",[17,151846,151847],{},"删除学生。",[17,151849,151850],{},"修改学生。",[17,151852,151853],{},"查询学生。",[17,151855,151856],{},"显示所有学生。",[17,151858,151859],{},"保存到 JSON 文件。",[17,151861,151862],{},"程序启动时自动读取 JSON 文件。",[21,151864,151865],{},"学生字段：",[82,151867,151870],{"className":151868,"code":151869,"language":5310,"meta":26},[5308],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[88,151871,151869],{"__ignoreMap":26},[190,151873,151875],{"id":151874},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[82,151877,151879],{"className":30459,"code":151878,"language":30461,"meta":26,"style":26},"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",[88,151880,151881,151887,151897,151901,151915,151919,151923,151932,151944,151950,151954,151960,151991,152001,152008,152019,152025,152029,152033,152043,152074,152100,152104,152108,152117,152128,152139,152150,152161,152172,152183,152194,152198,152202,152212,152224,152240,152247,152254,152258,152262,152272,152280,152287,152300,152310,152321,152325,152329,152338,152346,152352,152364,152372,152383,152387,152391,152400,152416,152420,152427,152438,152443,152447,152463,152478,152493,152497,152502,152510,152518,152526,152534,152538,152543,152554,152558,152562,152571,152586,152596,152600,152612,152623,152627,152631,152636,152640,152651,152655,152659,152668,152683,152691,152695,152707,152717,152721,152725,152740,152753,152766,152770,152783,152795,152807,152811,152815,152826,152830,152834,152843,152858,152866,152870,152882,152892,152896,152900,152905,152909,152913,152923,152929,152951,152970,152989,153008,153013,153017,153021,153030,153038,153049,153053,153057,153083,153093,153098,153102,153106,153114,153124,153128,153136,153141,153157,153161,153175,153180,153194,153199,153212,153217,153230,153235,153248,153253,153266,153277,153281,153287,153298,153302,153306,153318],{"__ignoreMap":26},[91,151882,151883,151885],{"class":93,"line":94},[91,151884,30473],{"class":153},[91,151886,147172],{"class":250},[91,151888,151889,151891,151893,151895],{"class":93,"line":38},[91,151890,30818],{"class":153},[91,151892,108392],{"class":250},[91,151894,30473],{"class":153},[91,151896,108397],{"class":250},[91,151898,151899],{"class":93,"line":1304},[91,151900,2523],{"emptyLinePlaceholder":175},[91,151902,151903,151906,151908,151910,151913],{"class":93,"line":1319},[91,151904,151905],{"class":105},"DATA_FILE",[91,151907,13687],{"class":153},[91,151909,108626],{"class":250},[91,151911,151912],{"class":101},"\"students.json\"",[91,151914,257],{"class":250},[91,151916,151917],{"class":93,"line":1325},[91,151918,2523],{"emptyLinePlaceholder":175},[91,151920,151921],{"class":93,"line":1339},[91,151922,2523],{"emptyLinePlaceholder":175},[91,151924,151925,151927,151930],{"class":93,"line":1345},[91,151926,32028],{"class":153},[91,151928,151929],{"class":97}," load_students",[91,151931,32034],{"class":250},[91,151933,151934,151936,151938,151941],{"class":93,"line":1436},[91,151935,3224],{"class":153},[91,151937,39011],{"class":153},[91,151939,151940],{"class":105}," DATA_FILE",[91,151942,151943],{"class":250},".exists():\n",[91,151945,151946,151948],{"class":93,"line":1442},[91,151947,14875],{"class":153},[91,151949,51919],{"class":250},[91,151951,151952],{"class":93,"line":1454},[91,151953,2523],{"emptyLinePlaceholder":175},[91,151955,151956,151958],{"class":93,"line":1736},[91,151957,125865],{"class":153},[91,151959,3862],{"class":250},[91,151961,151962,151965,151967,151969,151971,151973,151975,151977,151979,151981,151983,151985,151987,151989],{"class":93,"line":1741},[91,151963,151964],{"class":153},"        with",[91,151966,146872],{"class":105},[91,151968,251],{"class":250},[91,151970,151905],{"class":105},[91,151972,12558],{"class":250},[91,151974,146882],{"class":101},[91,151976,12558],{"class":250},[91,151978,146887],{"class":5339},[91,151980,296],{"class":153},[91,151982,146892],{"class":101},[91,151984,13837],{"class":250},[91,151986,31464],{"class":153},[91,151988,148234],{"class":5339},[91,151990,3862],{"class":250},[91,151992,151993,151995,151997,151999],{"class":93,"line":1747},[91,151994,15855],{"class":153},[91,151996,148245],{"class":250},[91,151998,45435],{"class":5339},[91,152000,257],{"class":250},[91,152002,152003,152005],{"class":93,"line":1752},[91,152004,125893],{"class":153},[91,152006,152007],{"class":250}," json.JSONDecodeError:\n",[91,152009,152010,152012,152014,152017],{"class":93,"line":1766},[91,152011,32532],{"class":105},[91,152013,251],{"class":250},[91,152015,152016],{"class":101},"\"数据文件格式错误，已使用空数据启动\"",[91,152018,257],{"class":250},[91,152020,152021,152023],{"class":93,"line":1771},[91,152022,14875],{"class":153},[91,152024,51919],{"class":250},[91,152026,152027],{"class":93,"line":1777},[91,152028,2523],{"emptyLinePlaceholder":175},[91,152030,152031],{"class":93,"line":1798},[91,152032,2523],{"emptyLinePlaceholder":175},[91,152034,152035,152037,152040],{"class":93,"line":1803},[91,152036,32028],{"class":153},[91,152038,152039],{"class":97}," save_students",[91,152041,152042],{"class":250},"(students):\n",[91,152044,152045,152047,152049,152051,152053,152055,152058,152060,152062,152064,152066,152068,152070,152072],{"class":93,"line":1817},[91,152046,34259],{"class":153},[91,152048,146872],{"class":105},[91,152050,251],{"class":250},[91,152052,151905],{"class":105},[91,152054,12558],{"class":250},[91,152056,152057],{"class":101},"\"w\"",[91,152059,12558],{"class":250},[91,152061,146887],{"class":5339},[91,152063,296],{"class":153},[91,152065,146892],{"class":101},[91,152067,13837],{"class":250},[91,152069,31464],{"class":153},[91,152071,148234],{"class":5339},[91,152073,3862],{"class":250},[91,152075,152076,152079,152081,152083,152085,152087,152089,152091,152094,152096,152098],{"class":93,"line":1822},[91,152077,152078],{"class":250},"        json.dump(students, ",[91,152080,45435],{"class":5339},[91,152082,12558],{"class":250},[91,152084,147218],{"class":5339},[91,152086,296],{"class":153},[91,152088,34068],{"class":105},[91,152090,12558],{"class":250},[91,152092,152093],{"class":5339},"indent",[91,152095,296],{"class":153},[91,152097,327],{"class":105},[91,152099,257],{"class":250},[91,152101,152102],{"class":93,"line":1851},[91,152103,2523],{"emptyLinePlaceholder":175},[91,152105,152106],{"class":93,"line":1856},[91,152107,2523],{"emptyLinePlaceholder":175},[91,152109,152110,152112,152115],{"class":93,"line":1873},[91,152111,32028],{"class":153},[91,152113,152114],{"class":97}," show_menu",[91,152116,32034],{"class":250},[91,152118,152119,152121,152123,152126],{"class":93,"line":1878},[91,152120,31380],{"class":105},[91,152122,251],{"class":250},[91,152124,152125],{"class":101},"\"====== 学生管理系统 ======\"",[91,152127,257],{"class":250},[91,152129,152130,152132,152134,152137],{"class":93,"line":1883},[91,152131,31380],{"class":105},[91,152133,251],{"class":250},[91,152135,152136],{"class":101},"\"1. 添加学生\"",[91,152138,257],{"class":250},[91,152140,152141,152143,152145,152148],{"class":93,"line":1888},[91,152142,31380],{"class":105},[91,152144,251],{"class":250},[91,152146,152147],{"class":101},"\"2. 删除学生\"",[91,152149,257],{"class":250},[91,152151,152152,152154,152156,152159],{"class":93,"line":1902},[91,152153,31380],{"class":105},[91,152155,251],{"class":250},[91,152157,152158],{"class":101},"\"3. 修改学生\"",[91,152160,257],{"class":250},[91,152162,152163,152165,152167,152170],{"class":93,"line":1907},[91,152164,31380],{"class":105},[91,152166,251],{"class":250},[91,152168,152169],{"class":101},"\"4. 查询学生\"",[91,152171,257],{"class":250},[91,152173,152174,152176,152178,152181],{"class":93,"line":2700},[91,152175,31380],{"class":105},[91,152177,251],{"class":250},[91,152179,152180],{"class":101},"\"5. 显示所有学生\"",[91,152182,257],{"class":250},[91,152184,152185,152187,152189,152192],{"class":93,"line":2714},[91,152186,31380],{"class":105},[91,152188,251],{"class":250},[91,152190,152191],{"class":101},"\"0. 退出系统\"",[91,152193,257],{"class":250},[91,152195,152196],{"class":93,"line":2722},[91,152197,2523],{"emptyLinePlaceholder":175},[91,152199,152200],{"class":93,"line":2727},[91,152201,2523],{"emptyLinePlaceholder":175},[91,152203,152204,152206,152209],{"class":93,"line":2733},[91,152205,32028],{"class":153},[91,152207,152208],{"class":97}," find_student",[91,152210,152211],{"class":250},"(students, student_id):\n",[91,152213,152214,152216,152219,152221],{"class":93,"line":2739},[91,152215,3324],{"class":153},[91,152217,152218],{"class":250}," student ",[91,152220,26165],{"class":153},[91,152222,152223],{"class":250}," students:\n",[91,152225,152226,152228,152231,152233,152235,152237],{"class":93,"line":2744},[91,152227,2620],{"class":153},[91,152229,152230],{"class":250}," student[",[91,152232,151528],{"class":101},[91,152234,4566],{"class":250},[91,152236,3072],{"class":153},[91,152238,152239],{"class":250}," student_id:\n",[91,152241,152242,152244],{"class":93,"line":8071},[91,152243,15855],{"class":153},[91,152245,152246],{"class":250}," student\n",[91,152248,152249,152251],{"class":93,"line":8095},[91,152250,4213],{"class":153},[91,152252,152253],{"class":105}," None\n",[91,152255,152256],{"class":93,"line":8100},[91,152257,2523],{"emptyLinePlaceholder":175},[91,152259,152260],{"class":93,"line":8106},[91,152261,2523],{"emptyLinePlaceholder":175},[91,152263,152264,152266,152269],{"class":93,"line":8133},[91,152265,32028],{"class":153},[91,152267,152268],{"class":97}," input_int",[91,152270,152271],{"class":250},"(prompt):\n",[91,152273,152274,152276,152278],{"class":93,"line":8138},[91,152275,2374],{"class":153},[91,152277,95373],{"class":105},[91,152279,3862],{"class":250},[91,152281,152282,152285],{"class":93,"line":8144},[91,152283,152284],{"class":153},"        try",[91,152286,3862],{"class":250},[91,152288,152289,152291,152293,152295,152297],{"class":93,"line":8156},[91,152290,15855],{"class":153},[91,152292,2505],{"class":105},[91,152294,251],{"class":250},[91,152296,53902],{"class":105},[91,152298,152299],{"class":250},"(prompt))\n",[91,152301,152302,152305,152308],{"class":93,"line":8168},[91,152303,152304],{"class":153},"        except",[91,152306,152307],{"class":105}," ValueError",[91,152309,3862],{"class":250},[91,152311,152312,152314,152316,152319],{"class":93,"line":8180},[91,152313,34731],{"class":105},[91,152315,251],{"class":250},[91,152317,152318],{"class":101},"\"请输入整数\"",[91,152320,257],{"class":250},[91,152322,152323],{"class":93,"line":9839},[91,152324,2523],{"emptyLinePlaceholder":175},[91,152326,152327],{"class":93,"line":9864},[91,152328,2523],{"emptyLinePlaceholder":175},[91,152330,152331,152333,152336],{"class":93,"line":9887},[91,152332,32028],{"class":153},[91,152334,152335],{"class":97}," input_float",[91,152337,152271],{"class":250},[91,152339,152340,152342,152344],{"class":93,"line":9911},[91,152341,2374],{"class":153},[91,152343,95373],{"class":105},[91,152345,3862],{"class":250},[91,152347,152348,152350],{"class":93,"line":9916},[91,152349,152284],{"class":153},[91,152351,3862],{"class":250},[91,152353,152354,152356,152358,152360,152362],{"class":93,"line":9921},[91,152355,15855],{"class":153},[91,152357,109878],{"class":105},[91,152359,251],{"class":250},[91,152361,53902],{"class":105},[91,152363,152299],{"class":250},[91,152365,152366,152368,152370],{"class":93,"line":9926},[91,152367,152304],{"class":153},[91,152369,152307],{"class":105},[91,152371,3862],{"class":250},[91,152373,152374,152376,152378,152381],{"class":93,"line":9935},[91,152375,34731],{"class":105},[91,152377,251],{"class":250},[91,152379,152380],{"class":101},"\"请输入数字\"",[91,152382,257],{"class":250},[91,152384,152385],{"class":93,"line":9940},[91,152386,2523],{"emptyLinePlaceholder":175},[91,152388,152389],{"class":93,"line":9946},[91,152390,2523],{"emptyLinePlaceholder":175},[91,152392,152393,152395,152398],{"class":93,"line":9967},[91,152394,32028],{"class":153},[91,152396,152397],{"class":97}," add_student",[91,152399,152042],{"class":250},[91,152401,152402,152405,152407,152409,152411,152414],{"class":93,"line":9973},[91,152403,152404],{"class":250},"    student_id ",[91,152406,296],{"class":153},[91,152408,60686],{"class":105},[91,152410,251],{"class":250},[91,152412,152413],{"class":101},"\"请输入学号:\"",[91,152415,257],{"class":250},[91,152417,152418],{"class":93,"line":9987},[91,152419,2523],{"emptyLinePlaceholder":175},[91,152421,152422,152424],{"class":93,"line":9993},[91,152423,3224],{"class":153},[91,152425,152426],{"class":250}," find_student(students, student_id):\n",[91,152428,152429,152431,152433,152436],{"class":93,"line":10020},[91,152430,32532],{"class":105},[91,152432,251],{"class":250},[91,152434,152435],{"class":101},"\"学号已存在\"",[91,152437,257],{"class":250},[91,152439,152440],{"class":93,"line":10029},[91,152441,152442],{"class":153},"        return\n",[91,152444,152445],{"class":93,"line":10035},[91,152446,2523],{"emptyLinePlaceholder":175},[91,152448,152449,152452,152454,152456,152458,152461],{"class":93,"line":10043},[91,152450,152451],{"class":250},"    name ",[91,152453,296],{"class":153},[91,152455,60686],{"class":105},[91,152457,251],{"class":250},[91,152459,152460],{"class":101},"\"请输入姓名:\"",[91,152462,257],{"class":250},[91,152464,152465,152468,152470,152473,152476],{"class":93,"line":10048},[91,152466,152467],{"class":250},"    age ",[91,152469,296],{"class":153},[91,152471,152472],{"class":250}," input_int(",[91,152474,152475],{"class":101},"\"请输入年龄:\"",[91,152477,257],{"class":250},[91,152479,152480,152483,152485,152488,152491],{"class":93,"line":16727},[91,152481,152482],{"class":250},"    score ",[91,152484,296],{"class":153},[91,152486,152487],{"class":250}," input_float(",[91,152489,152490],{"class":101},"\"请输入成绩:\"",[91,152492,257],{"class":250},[91,152494,152495],{"class":93,"line":16733},[91,152496,2523],{"emptyLinePlaceholder":175},[91,152498,152499],{"class":93,"line":16756},[91,152500,152501],{"class":250},"    students.append({\n",[91,152503,152504,152507],{"class":93,"line":16762},[91,152505,152506],{"class":101},"        \"student_id\"",[91,152508,152509],{"class":250},": student_id,\n",[91,152511,152512,152515],{"class":93,"line":16785},[91,152513,152514],{"class":101},"        \"name\"",[91,152516,152517],{"class":250},": name,\n",[91,152519,152520,152523],{"class":93,"line":16799},[91,152521,152522],{"class":101},"        \"age\"",[91,152524,152525],{"class":250},": age,\n",[91,152527,152528,152531],{"class":93,"line":16819},[91,152529,152530],{"class":101},"        \"score\"",[91,152532,152533],{"class":250},": score,\n",[91,152535,152536],{"class":93,"line":16825},[91,152537,33542],{"class":250},[91,152539,152540],{"class":93,"line":16836},[91,152541,152542],{"class":250},"    save_students(students)\n",[91,152544,152545,152547,152549,152552],{"class":93,"line":16859},[91,152546,31380],{"class":105},[91,152548,251],{"class":250},[91,152550,152551],{"class":101},"\"添加成功\"",[91,152553,257],{"class":250},[91,152555,152556],{"class":93,"line":16881},[91,152557,2523],{"emptyLinePlaceholder":175},[91,152559,152560],{"class":93,"line":16886},[91,152561,2523],{"emptyLinePlaceholder":175},[91,152563,152564,152566,152569],{"class":93,"line":16892},[91,152565,32028],{"class":153},[91,152567,152568],{"class":97}," delete_student",[91,152570,152042],{"class":250},[91,152572,152573,152575,152577,152579,152581,152584],{"class":93,"line":16906},[91,152574,152404],{"class":250},[91,152576,296],{"class":153},[91,152578,60686],{"class":105},[91,152580,251],{"class":250},[91,152582,152583],{"class":101},"\"请输入要删除的学号:\"",[91,152585,257],{"class":250},[91,152587,152588,152591,152593],{"class":93,"line":16919},[91,152589,152590],{"class":250},"    student ",[91,152592,296],{"class":153},[91,152594,152595],{"class":250}," find_student(students, student_id)\n",[91,152597,152598],{"class":93,"line":16924},[91,152599,2523],{"emptyLinePlaceholder":175},[91,152601,152602,152604,152606,152608,152610],{"class":93,"line":16938},[91,152603,3224],{"class":153},[91,152605,152218],{"class":250},[91,152607,39008],{"class":153},[91,152609,39014],{"class":105},[91,152611,3862],{"class":250},[91,152613,152614,152616,152618,152621],{"class":93,"line":16943},[91,152615,32532],{"class":105},[91,152617,251],{"class":250},[91,152619,152620],{"class":101},"\"学生不存在\"",[91,152622,257],{"class":250},[91,152624,152625],{"class":93,"line":16949},[91,152626,152442],{"class":153},[91,152628,152629],{"class":93,"line":16954},[91,152630,2523],{"emptyLinePlaceholder":175},[91,152632,152633],{"class":93,"line":16968},[91,152634,152635],{"class":250},"    students.remove(student)\n",[91,152637,152638],{"class":93,"line":16973},[91,152639,152542],{"class":250},[91,152641,152642,152644,152646,152649],{"class":93,"line":16978},[91,152643,31380],{"class":105},[91,152645,251],{"class":250},[91,152647,152648],{"class":101},"\"删除成功\"",[91,152650,257],{"class":250},[91,152652,152653],{"class":93,"line":16992},[91,152654,2523],{"emptyLinePlaceholder":175},[91,152656,152657],{"class":93,"line":17004},[91,152658,2523],{"emptyLinePlaceholder":175},[91,152660,152661,152663,152666],{"class":93,"line":17009},[91,152662,32028],{"class":153},[91,152664,152665],{"class":97}," update_student",[91,152667,152042],{"class":250},[91,152669,152670,152672,152674,152676,152678,152681],{"class":93,"line":17022},[91,152671,152404],{"class":250},[91,152673,296],{"class":153},[91,152675,60686],{"class":105},[91,152677,251],{"class":250},[91,152679,152680],{"class":101},"\"请输入要修改的学号:\"",[91,152682,257],{"class":250},[91,152684,152685,152687,152689],{"class":93,"line":17027},[91,152686,152590],{"class":250},[91,152688,296],{"class":153},[91,152690,152595],{"class":250},[91,152692,152693],{"class":93,"line":17032},[91,152694,2523],{"emptyLinePlaceholder":175},[91,152696,152697,152699,152701,152703,152705],{"class":93,"line":17037},[91,152698,3224],{"class":153},[91,152700,152218],{"class":250},[91,152702,39008],{"class":153},[91,152704,39014],{"class":105},[91,152706,3862],{"class":250},[91,152708,152709,152711,152713,152715],{"class":93,"line":17050},[91,152710,32532],{"class":105},[91,152712,251],{"class":250},[91,152714,152620],{"class":101},[91,152716,257],{"class":250},[91,152718,152719],{"class":93,"line":17055},[91,152720,152442],{"class":153},[91,152722,152723],{"class":93,"line":32714},[91,152724,2523],{"emptyLinePlaceholder":175},[91,152726,152727,152729,152731,152733,152735,152738],{"class":93,"line":32720},[91,152728,152451],{"class":250},[91,152730,296],{"class":153},[91,152732,60686],{"class":105},[91,152734,251],{"class":250},[91,152736,152737],{"class":101},"\"请输入新姓名:\"",[91,152739,257],{"class":250},[91,152741,152742,152744,152746,152748,152751],{"class":93,"line":32726},[91,152743,152467],{"class":250},[91,152745,296],{"class":153},[91,152747,152472],{"class":250},[91,152749,152750],{"class":101},"\"请输入新年龄:\"",[91,152752,257],{"class":250},[91,152754,152755,152757,152759,152761,152764],{"class":93,"line":32732},[91,152756,152482],{"class":250},[91,152758,296],{"class":153},[91,152760,152487],{"class":250},[91,152762,152763],{"class":101},"\"请输入新成绩:\"",[91,152765,257],{"class":250},[91,152767,152768],{"class":93,"line":32738},[91,152769,2523],{"emptyLinePlaceholder":175},[91,152771,152772,152775,152777,152779,152781],{"class":93,"line":32749},[91,152773,152774],{"class":250},"    student[",[91,152776,62760],{"class":101},[91,152778,4566],{"class":250},[91,152780,296],{"class":153},[91,152782,149876],{"class":250},[91,152784,152785,152787,152789,152791,152793],{"class":93,"line":32755},[91,152786,152774],{"class":250},[91,152788,69205],{"class":101},[91,152790,4566],{"class":250},[91,152792,296],{"class":153},[91,152794,149888],{"class":250},[91,152796,152797,152799,152801,152803,152805],{"class":93,"line":32775},[91,152798,152774],{"class":250},[91,152800,151553],{"class":101},[91,152802,4566],{"class":250},[91,152804,296],{"class":153},[91,152806,1703],{"class":250},[91,152808,152809],{"class":93,"line":32781},[91,152810,2523],{"emptyLinePlaceholder":175},[91,152812,152813],{"class":93,"line":32792},[91,152814,152542],{"class":250},[91,152816,152817,152819,152821,152824],{"class":93,"line":32798},[91,152818,31380],{"class":105},[91,152820,251],{"class":250},[91,152822,152823],{"class":101},"\"修改成功\"",[91,152825,257],{"class":250},[91,152827,152828],{"class":93,"line":32804},[91,152829,2523],{"emptyLinePlaceholder":175},[91,152831,152832],{"class":93,"line":32810},[91,152833,2523],{"emptyLinePlaceholder":175},[91,152835,152836,152838,152841],{"class":93,"line":32816},[91,152837,32028],{"class":153},[91,152839,152840],{"class":97}," query_student",[91,152842,152042],{"class":250},[91,152844,152845,152847,152849,152851,152853,152856],{"class":93,"line":32822},[91,152846,152404],{"class":250},[91,152848,296],{"class":153},[91,152850,60686],{"class":105},[91,152852,251],{"class":250},[91,152854,152855],{"class":101},"\"请输入要查询的学号:\"",[91,152857,257],{"class":250},[91,152859,152860,152862,152864],{"class":93,"line":32828},[91,152861,152590],{"class":250},[91,152863,296],{"class":153},[91,152865,152595],{"class":250},[91,152867,152868],{"class":93,"line":32834},[91,152869,2523],{"emptyLinePlaceholder":175},[91,152871,152872,152874,152876,152878,152880],{"class":93,"line":32854},[91,152873,3224],{"class":153},[91,152875,152218],{"class":250},[91,152877,39008],{"class":153},[91,152879,39014],{"class":105},[91,152881,3862],{"class":250},[91,152883,152884,152886,152888,152890],{"class":93,"line":32860},[91,152885,32532],{"class":105},[91,152887,251],{"class":250},[91,152889,152620],{"class":101},[91,152891,257],{"class":250},[91,152893,152894],{"class":93,"line":32876},[91,152895,152442],{"class":153},[91,152897,152898],{"class":93,"line":32882},[91,152899,2523],{"emptyLinePlaceholder":175},[91,152901,152902],{"class":93,"line":32896},[91,152903,152904],{"class":250},"    print_student(student)\n",[91,152906,152907],{"class":93,"line":32902},[91,152908,2523],{"emptyLinePlaceholder":175},[91,152910,152911],{"class":93,"line":32917},[91,152912,2523],{"emptyLinePlaceholder":175},[91,152914,152915,152917,152920],{"class":93,"line":32923},[91,152916,32028],{"class":153},[91,152918,152919],{"class":97}," print_student",[91,152921,152922],{"class":250},"(student):\n",[91,152924,152925,152927],{"class":93,"line":32932},[91,152926,31380],{"class":105},[91,152928,151520],{"class":250},[91,152930,152931,152934,152936,152938,152941,152944,152946,152949],{"class":93,"line":32938},[91,152932,152933],{"class":153},"        f",[91,152935,500],{"class":101},[91,152937,1145],{"class":105},[91,152939,152940],{"class":250},"student[",[91,152942,152943],{"class":101},"'student_id'",[91,152945,1189],{"class":250},[91,152947,152948],{"class":105},"}\\t",[91,152950,25255],{"class":101},[91,152952,152953,152955,152957,152959,152961,152964,152966,152968],{"class":93,"line":32947},[91,152954,152933],{"class":153},[91,152956,500],{"class":101},[91,152958,1145],{"class":105},[91,152960,152940],{"class":250},[91,152962,152963],{"class":101},"'name'",[91,152965,1189],{"class":250},[91,152967,152948],{"class":105},[91,152969,25255],{"class":101},[91,152971,152972,152974,152976,152978,152980,152983,152985,152987],{"class":93,"line":32953},[91,152973,152933],{"class":153},[91,152975,500],{"class":101},[91,152977,1145],{"class":105},[91,152979,152940],{"class":250},[91,152981,152982],{"class":101},"'age'",[91,152984,1189],{"class":250},[91,152986,152948],{"class":105},[91,152988,25255],{"class":101},[91,152990,152991,152993,152995,152997,152999,153002,153004,153006],{"class":93,"line":32959},[91,152992,152933],{"class":153},[91,152994,500],{"class":101},[91,152996,1145],{"class":105},[91,152998,152940],{"class":250},[91,153000,153001],{"class":101},"'score'",[91,153003,1189],{"class":250},[91,153005,1195],{"class":105},[91,153007,25255],{"class":101},[91,153009,153010],{"class":93,"line":32968},[91,153011,153012],{"class":250},"    )\n",[91,153014,153015],{"class":93,"line":32974},[91,153016,2523],{"emptyLinePlaceholder":175},[91,153018,153019],{"class":93,"line":32985},[91,153020,2523],{"emptyLinePlaceholder":175},[91,153022,153023,153025,153028],{"class":93,"line":32991},[91,153024,32028],{"class":153},[91,153026,153027],{"class":97}," show_all_students",[91,153029,152042],{"class":250},[91,153031,153032,153034,153036],{"class":93,"line":33010},[91,153033,3224],{"class":153},[91,153035,39011],{"class":153},[91,153037,152223],{"class":250},[91,153039,153040,153042,153044,153047],{"class":93,"line":33016},[91,153041,32532],{"class":105},[91,153043,251],{"class":250},[91,153045,153046],{"class":101},"\"暂无学生\"",[91,153048,257],{"class":250},[91,153050,153051],{"class":93,"line":33027},[91,153052,152442],{"class":153},[91,153054,153055],{"class":93,"line":33033},[91,153056,2523],{"emptyLinePlaceholder":175},[91,153058,153059,153061,153063,153066,153068,153071,153073,153076,153078,153081],{"class":93,"line":33053},[91,153060,31380],{"class":105},[91,153062,251],{"class":250},[91,153064,153065],{"class":101},"\"学号",[91,153067,1355],{"class":105},[91,153069,153070],{"class":101},"姓名",[91,153072,1355],{"class":105},[91,153074,153075],{"class":101},"年龄",[91,153077,1355],{"class":105},[91,153079,153080],{"class":101},"成绩\"",[91,153082,257],{"class":250},[91,153084,153085,153087,153089,153091],{"class":93,"line":33069},[91,153086,3324],{"class":153},[91,153088,152218],{"class":250},[91,153090,26165],{"class":153},[91,153092,152223],{"class":250},[91,153094,153095],{"class":93,"line":33075},[91,153096,153097],{"class":250},"        print_student(student)\n",[91,153099,153100],{"class":93,"line":33089},[91,153101,2523],{"emptyLinePlaceholder":175},[91,153103,153104],{"class":93,"line":33095},[91,153105,2523],{"emptyLinePlaceholder":175},[91,153107,153108,153110,153112],{"class":93,"line":33101},[91,153109,32028],{"class":153},[91,153111,2096],{"class":97},[91,153113,32034],{"class":250},[91,153115,153116,153119,153121],{"class":93,"line":33112},[91,153117,153118],{"class":250},"    students ",[91,153120,296],{"class":153},[91,153122,153123],{"class":250}," load_students()\n",[91,153125,153126],{"class":93,"line":33118},[91,153127,2523],{"emptyLinePlaceholder":175},[91,153129,153130,153132,153134],{"class":93,"line":33124},[91,153131,2374],{"class":153},[91,153133,95373],{"class":105},[91,153135,3862],{"class":250},[91,153137,153138],{"class":93,"line":33134},[91,153139,153140],{"class":250},"        show_menu()\n",[91,153142,153143,153146,153148,153150,153152,153155],{"class":93,"line":33140},[91,153144,153145],{"class":250},"        choice ",[91,153147,296],{"class":153},[91,153149,60686],{"class":105},[91,153151,251],{"class":250},[91,153153,153154],{"class":101},"\"请输入操作:\"",[91,153156,257],{"class":250},[91,153158,153159],{"class":93,"line":33151},[91,153160,2523],{"emptyLinePlaceholder":175},[91,153162,153163,153165,153168,153170,153173],{"class":93,"line":33157},[91,153164,2620],{"class":153},[91,153166,153167],{"class":250}," choice ",[91,153169,3072],{"class":153},[91,153171,153172],{"class":101}," \"1\"",[91,153174,3862],{"class":250},[91,153176,153177],{"class":93,"line":33167},[91,153178,153179],{"class":250},"            add_student(students)\n",[91,153181,153182,153185,153187,153189,153192],{"class":93,"line":33172},[91,153183,153184],{"class":153},"        elif",[91,153186,153167],{"class":250},[91,153188,3072],{"class":153},[91,153190,153191],{"class":101}," \"2\"",[91,153193,3862],{"class":250},[91,153195,153196],{"class":93,"line":33178},[91,153197,153198],{"class":250},"            delete_student(students)\n",[91,153200,153201,153203,153205,153207,153210],{"class":93,"line":33227},[91,153202,153184],{"class":153},[91,153204,153167],{"class":250},[91,153206,3072],{"class":153},[91,153208,153209],{"class":101}," \"3\"",[91,153211,3862],{"class":250},[91,153213,153214],{"class":93,"line":33274},[91,153215,153216],{"class":250},"            update_student(students)\n",[91,153218,153219,153221,153223,153225,153228],{"class":93,"line":33279},[91,153220,153184],{"class":153},[91,153222,153167],{"class":250},[91,153224,3072],{"class":153},[91,153226,153227],{"class":101}," \"4\"",[91,153229,3862],{"class":250},[91,153231,153232],{"class":93,"line":33285},[91,153233,153234],{"class":250},"            query_student(students)\n",[91,153236,153237,153239,153241,153243,153246],{"class":93,"line":33304},[91,153238,153184],{"class":153},[91,153240,153167],{"class":250},[91,153242,3072],{"class":153},[91,153244,153245],{"class":101}," \"5\"",[91,153247,3862],{"class":250},[91,153249,153250],{"class":93,"line":33310},[91,153251,153252],{"class":250},"            show_all_students(students)\n",[91,153254,153255,153257,153259,153261,153264],{"class":93,"line":33330},[91,153256,153184],{"class":153},[91,153258,153167],{"class":250},[91,153260,3072],{"class":153},[91,153262,153263],{"class":101}," \"0\"",[91,153265,3862],{"class":250},[91,153267,153268,153270,153272,153275],{"class":93,"line":33336},[91,153269,34731],{"class":105},[91,153271,251],{"class":250},[91,153273,153274],{"class":101},"\"退出系统\"",[91,153276,257],{"class":250},[91,153278,153279],{"class":93,"line":33342},[91,153280,115179],{"class":153},[91,153282,153283,153285],{"class":93,"line":33352},[91,153284,2657],{"class":153},[91,153286,3862],{"class":250},[91,153288,153289,153291,153293,153296],{"class":93,"line":33357},[91,153290,34731],{"class":105},[91,153292,251],{"class":250},[91,153294,153295],{"class":101},"\"输入错误\"",[91,153297,257],{"class":250},[91,153299,153300],{"class":93,"line":33363},[91,153301,2523],{"emptyLinePlaceholder":175},[91,153303,153304],{"class":93,"line":33379},[91,153305,2523],{"emptyLinePlaceholder":175},[91,153307,153308,153310,153312,153314,153316],{"class":93,"line":33424},[91,153309,1655],{"class":153},[91,153311,31301],{"class":105},[91,153313,101640],{"class":153},[91,153315,101643],{"class":101},[91,153317,3862],{"class":250},[91,153319,153320],{"class":93,"line":33430},[91,153321,101650],{"class":250},[21,153323,153324],{},"这个项目串联了：",[14,153326,153327,153330,153333,153336,153339,153341],{},[17,153328,153329],{},"菜单循环。",[17,153331,153332],{},"函数封装。",[17,153334,153335],{},"列表字典。",[17,153337,153338],{},"JSON 读写。",[17,153340,151808],{},[17,153342,153343,28504],{},[88,153344,153345],{},"if __name__ == \"__main__\"",[190,153347,153349],{"id":153348},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[21,153351,153352],{},"可以进一步拆成两个类：",[14,153354,153355,153360],{},[17,153356,153357,153359],{},[88,153358,149649],{},"：表示单个学生。",[17,153361,153362,153364],{},[88,153363,151675],{},"：负责学生增删改查和文件保存。",[21,153366,153367],{},"示意代码：",[82,153369,153371],{"className":30459,"code":153370,"language":30461,"meta":26,"style":26},"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",[88,153372,153373,153383,153387,153391,153395,153403,153410,153416,153422,153428,153432,153440,153446,153456,153466,153476,153486,153490,153494,153500,153508,153516,153524,153532,153540,153548],{"__ignoreMap":26},[91,153374,153375,153377,153379,153381],{"class":93,"line":94},[91,153376,30818],{"class":153},[91,153378,151233],{"class":250},[91,153380,30473],{"class":153},[91,153382,151238],{"class":250},[91,153384,153385],{"class":93,"line":38},[91,153386,2523],{"emptyLinePlaceholder":175},[91,153388,153389],{"class":93,"line":1304},[91,153390,2523],{"emptyLinePlaceholder":175},[91,153392,153393],{"class":93,"line":1319},[91,153394,151251],{"class":97},[91,153396,153397,153399,153401],{"class":93,"line":1325},[91,153398,14817],{"class":153},[91,153400,8021],{"class":97},[91,153402,3862],{"class":250},[91,153404,153405,153408],{"class":93,"line":1339},[91,153406,153407],{"class":250},"    student_id: ",[91,153409,151267],{"class":105},[91,153411,153412,153414],{"class":93,"line":1345},[91,153413,151264],{"class":250},[91,153415,151267],{"class":105},[91,153417,153418,153420],{"class":93,"line":1436},[91,153419,151272],{"class":250},[91,153421,151275],{"class":105},[91,153423,153424,153426],{"class":93,"line":1442},[91,153425,151280],{"class":250},[91,153427,151283],{"class":105},[91,153429,153430],{"class":93,"line":1454},[91,153431,2523],{"emptyLinePlaceholder":175},[91,153433,153434,153436,153438],{"class":93,"line":1736},[91,153435,30882],{"class":153},[91,153437,151431],{"class":97},[91,153439,30888],{"class":250},[91,153441,153442,153444],{"class":93,"line":1741},[91,153443,14875],{"class":153},[91,153445,15695],{"class":250},[91,153447,153448,153450,153452,153454],{"class":93,"line":1747},[91,153449,151444],{"class":101},[91,153451,51518],{"class":250},[91,153453,30904],{"class":105},[91,153455,151451],{"class":250},[91,153457,153458,153460,153462,153464],{"class":93,"line":1752},[91,153459,151456],{"class":101},[91,153461,51518],{"class":250},[91,153463,30904],{"class":105},[91,153465,151463],{"class":250},[91,153467,153468,153470,153472,153474],{"class":93,"line":1766},[91,153469,151468],{"class":101},[91,153471,51518],{"class":250},[91,153473,30904],{"class":105},[91,153475,151475],{"class":250},[91,153477,153478,153480,153482,153484],{"class":93,"line":1771},[91,153479,151480],{"class":101},[91,153481,51518],{"class":250},[91,153483,30904],{"class":105},[91,153485,151487],{"class":250},[91,153487,153488],{"class":93,"line":1777},[91,153489,2652],{"class":250},[91,153491,153492],{"class":93,"line":1798},[91,153493,2523],{"emptyLinePlaceholder":175},[91,153495,153496,153498],{"class":93,"line":1803},[91,153497,151095],{"class":97},[91,153499,151098],{"class":105},[91,153501,153502,153504,153506],{"class":93,"line":1817},[91,153503,30882],{"class":153},[91,153505,151508],{"class":97},[91,153507,151511],{"class":250},[91,153509,153510,153512,153514],{"class":93,"line":1822},[91,153511,14875],{"class":153},[91,153513,151115],{"class":105},[91,153515,151520],{"class":250},[91,153517,153518,153520,153522],{"class":93,"line":1851},[91,153519,151525],{"class":250},[91,153521,151528],{"class":101},[91,153523,87917],{"class":250},[91,153525,153526,153528,153530],{"class":93,"line":1856},[91,153527,151525],{"class":250},[91,153529,62760],{"class":101},[91,153531,87917],{"class":250},[91,153533,153534,153536,153538],{"class":93,"line":1873},[91,153535,151525],{"class":250},[91,153537,69205],{"class":101},[91,153539,87917],{"class":250},[91,153541,153542,153544,153546],{"class":93,"line":1878},[91,153543,151525],{"class":250},[91,153545,151553],{"class":101},[91,153547,87917],{"class":250},[91,153549,153550],{"class":93,"line":1883},[91,153551,38207],{"class":250},[21,153553,153554],{},"管理器示意：",[82,153556,153558],{"className":30459,"code":153557,"language":30461,"meta":26,"style":26},"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",[88,153559,153560,153569,153577,153588,153592,153602,153615,153626,153633,153639,153643,153652,153661,153667,153674],{"__ignoreMap":26},[91,153561,153562,153564,153567],{"class":93,"line":94},[91,153563,14817],{"class":153},[91,153565,153566],{"class":97}," StudentManager",[91,153568,3862],{"class":250},[91,153570,153571,153573,153575],{"class":93,"line":38},[91,153572,30882],{"class":153},[91,153574,30885],{"class":105},[91,153576,30888],{"class":250},[91,153578,153579,153581,153584,153586],{"class":93,"line":1304},[91,153580,30926],{"class":105},[91,153582,153583],{"class":250},".students ",[91,153585,296],{"class":153},[91,153587,51919],{"class":250},[91,153589,153590],{"class":93,"line":1319},[91,153591,2523],{"emptyLinePlaceholder":175},[91,153593,153594,153596,153599],{"class":93,"line":1325},[91,153595,30882],{"class":153},[91,153597,153598],{"class":97}," find_by_id",[91,153600,153601],{"class":250},"(self, student_id):\n",[91,153603,153604,153606,153608,153610,153612],{"class":93,"line":1339},[91,153605,3526],{"class":153},[91,153607,152218],{"class":250},[91,153609,26165],{"class":153},[91,153611,38954],{"class":105},[91,153613,153614],{"class":250},".students:\n",[91,153616,153617,153619,153622,153624],{"class":93,"line":1345},[91,153618,4765],{"class":153},[91,153620,153621],{"class":250}," student.student_id ",[91,153623,3072],{"class":153},[91,153625,152239],{"class":250},[91,153627,153628,153631],{"class":93,"line":1436},[91,153629,153630],{"class":153},"                return",[91,153632,152246],{"class":250},[91,153634,153635,153637],{"class":93,"line":1442},[91,153636,14875],{"class":153},[91,153638,152253],{"class":105},[91,153640,153641],{"class":93,"line":1454},[91,153642,2523],{"emptyLinePlaceholder":175},[91,153644,153645,153647,153649],{"class":93,"line":1736},[91,153646,30882],{"class":153},[91,153648,5332],{"class":97},[91,153650,153651],{"class":250},"(self, student):\n",[91,153653,153654,153656,153658],{"class":93,"line":1741},[91,153655,2620],{"class":153},[91,153657,38954],{"class":105},[91,153659,153660],{"class":250},".find_by_id(student.student_id):\n",[91,153662,153663,153665],{"class":93,"line":1747},[91,153664,15855],{"class":153},[91,153666,125888],{"class":105},[91,153668,153669,153671],{"class":93,"line":1752},[91,153670,30926],{"class":105},[91,153672,153673],{"class":250},".students.append(student)\n",[91,153675,153676,153678],{"class":93,"line":1766},[91,153677,14875],{"class":153},[91,153679,153680],{"class":105}," True\n",[21,153682,153683],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[190,153685,153687],{"id":153686},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[217,153689,153691],{"id":153690},"_1251-数据结构","12.5.1 数据结构",[82,153693,153695],{"className":30459,"code":153694,"language":30461,"meta":26,"style":26},"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",[88,153696,153697,153705,153736,153766,153795,153824],{"__ignoreMap":26},[91,153698,153699,153701,153703],{"class":93,"line":94},[91,153700,148546],{"class":250},[91,153702,296],{"class":153},[91,153704,55528],{"class":250},[91,153706,153707,153709,153711,153713,153715,153717,153720,153722,153725,153727,153729,153731,153734],{"class":93,"line":38},[91,153708,148466],{"class":250},[91,153710,148078],{"class":101},[91,153712,51518],{"class":250},[91,153714,148689],{"class":101},[91,153716,12558],{"class":250},[91,153718,153719],{"class":101},"\"category\"",[91,153721,51518],{"class":250},[91,153723,153724],{"class":101},"\"手机\"",[91,153726,12558],{"class":250},[91,153728,84165],{"class":101},[91,153730,51518],{"class":250},[91,153732,153733],{"class":105},"12000",[91,153735,5053],{"class":250},[91,153737,153738,153740,153742,153744,153746,153748,153750,153752,153755,153757,153759,153761,153764],{"class":93,"line":1304},[91,153739,148466],{"class":250},[91,153741,148078],{"class":101},[91,153743,51518],{"class":250},[91,153745,148689],{"class":101},[91,153747,12558],{"class":250},[91,153749,153719],{"class":101},[91,153751,51518],{"class":250},[91,153753,153754],{"class":101},"\"电脑\"",[91,153756,12558],{"class":250},[91,153758,84165],{"class":101},[91,153760,51518],{"class":250},[91,153762,153763],{"class":105},"18000",[91,153765,5053],{"class":250},[91,153767,153768,153770,153772,153774,153776,153778,153780,153782,153784,153786,153788,153790,153793],{"class":93,"line":1319},[91,153769,148466],{"class":250},[91,153771,148078],{"class":101},[91,153773,51518],{"class":250},[91,153775,148710],{"class":101},[91,153777,12558],{"class":250},[91,153779,153719],{"class":101},[91,153781,51518],{"class":250},[91,153783,153724],{"class":101},[91,153785,12558],{"class":250},[91,153787,84165],{"class":101},[91,153789,51518],{"class":250},[91,153791,153792],{"class":105},"15000",[91,153794,5053],{"class":250},[91,153796,153797,153799,153801,153803,153805,153807,153809,153811,153813,153815,153817,153819,153822],{"class":93,"line":1325},[91,153798,148466],{"class":250},[91,153800,148078],{"class":101},[91,153802,51518],{"class":250},[91,153804,148710],{"class":101},[91,153806,12558],{"class":250},[91,153808,153719],{"class":101},[91,153810,51518],{"class":250},[91,153812,153754],{"class":101},[91,153814,12558],{"class":250},[91,153816,84165],{"class":101},[91,153818,51518],{"class":250},[91,153820,153821],{"class":105},"16000",[91,153823,5053],{"class":250},[91,153825,153826],{"class":93,"line":1339},[91,153827,33327],{"class":250},[217,153829,153831],{"id":153830},"_1252-按日期统计","12.5.2 按日期统计",[82,153833,153835],{"className":30459,"code":153834,"language":30461,"meta":26,"style":26},"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",[88,153836,153837,153846,153850,153861,153875,153888,153907,153911],{"__ignoreMap":26},[91,153838,153839,153842,153844],{"class":93,"line":94},[91,153840,153841],{"class":250},"daily_total ",[91,153843,296],{"class":153},[91,153845,87949],{"class":250},[91,153847,153848],{"class":93,"line":38},[91,153849,2523],{"emptyLinePlaceholder":175},[91,153851,153852,153854,153856,153858],{"class":93,"line":1304},[91,153853,3148],{"class":153},[91,153855,148290],{"class":250},[91,153857,26165],{"class":153},[91,153859,153860],{"class":250}," sales:\n",[91,153862,153863,153866,153868,153871,153873],{"class":93,"line":1319},[91,153864,153865],{"class":250},"    date ",[91,153867,296],{"class":153},[91,153869,153870],{"class":250}," item[",[91,153872,148078],{"class":101},[91,153874,33327],{"class":250},[91,153876,153877,153880,153882,153884,153886],{"class":93,"line":1325},[91,153878,153879],{"class":250},"    amount ",[91,153881,296],{"class":153},[91,153883,153870],{"class":250},[91,153885,84165],{"class":101},[91,153887,33327],{"class":250},[91,153889,153890,153893,153895,153898,153900,153902,153904],{"class":93,"line":1339},[91,153891,153892],{"class":250},"    daily_total[date] ",[91,153894,296],{"class":153},[91,153896,153897],{"class":250}," daily_total.get(date, ",[91,153899,440],{"class":105},[91,153901,13837],{"class":250},[91,153903,730],{"class":153},[91,153905,153906],{"class":250}," amount\n",[91,153908,153909],{"class":93,"line":1345},[91,153910,2523],{"emptyLinePlaceholder":175},[91,153912,153913,153915],{"class":93,"line":1436},[91,153914,30496],{"class":105},[91,153916,153917],{"class":250},"(daily_total)\n",[217,153919,153921],{"id":153920},"_1253-按类别统计","12.5.3 按类别统计",[82,153923,153925],{"className":30459,"code":153924,"language":30461,"meta":26,"style":26},"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",[88,153926,153927,153936,153940,153950,153963,153975,153993,153997],{"__ignoreMap":26},[91,153928,153929,153932,153934],{"class":93,"line":94},[91,153930,153931],{"class":250},"category_total ",[91,153933,296],{"class":153},[91,153935,87949],{"class":250},[91,153937,153938],{"class":93,"line":38},[91,153939,2523],{"emptyLinePlaceholder":175},[91,153941,153942,153944,153946,153948],{"class":93,"line":1304},[91,153943,3148],{"class":153},[91,153945,148290],{"class":250},[91,153947,26165],{"class":153},[91,153949,153860],{"class":250},[91,153951,153952,153955,153957,153959,153961],{"class":93,"line":1319},[91,153953,153954],{"class":250},"    category ",[91,153956,296],{"class":153},[91,153958,153870],{"class":250},[91,153960,153719],{"class":101},[91,153962,33327],{"class":250},[91,153964,153965,153967,153969,153971,153973],{"class":93,"line":1325},[91,153966,153879],{"class":250},[91,153968,296],{"class":153},[91,153970,153870],{"class":250},[91,153972,84165],{"class":101},[91,153974,33327],{"class":250},[91,153976,153977,153980,153982,153985,153987,153989,153991],{"class":93,"line":1339},[91,153978,153979],{"class":250},"    category_total[category] ",[91,153981,296],{"class":153},[91,153983,153984],{"class":250}," category_total.get(category, ",[91,153986,440],{"class":105},[91,153988,13837],{"class":250},[91,153990,730],{"class":153},[91,153992,153906],{"class":250},[91,153994,153995],{"class":93,"line":1345},[91,153996,2523],{"emptyLinePlaceholder":175},[91,153998,153999,154001],{"class":93,"line":1436},[91,154000,30496],{"class":105},[91,154002,154003],{"class":250},"(category_total)\n",[217,154005,154007],{"id":154006},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[82,154009,154011],{"className":30459,"code":154010,"language":30461,"meta":26,"style":26},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[88,154012,154013,154038],{"__ignoreMap":26},[91,154014,154015,154018,154020,154022,154025,154028,154031,154034,154036],{"class":93,"line":94},[91,154016,154017],{"class":250},"top_date, top_amount ",[91,154019,296],{"class":153},[91,154021,6074],{"class":105},[91,154023,154024],{"class":250},"(daily_total.items(), ",[91,154026,154027],{"class":5339},"key",[91,154029,154030],{"class":153},"=lambda",[91,154032,154033],{"class":250}," item: item[",[91,154035,466],{"class":105},[91,154037,4780],{"class":250},[91,154039,154040,154042],{"class":93,"line":38},[91,154041,30496],{"class":105},[91,154043,154044],{"class":250},"(top_date, top_amount)\n",[190,154046,154048],{"id":154047},"_126-绘制柱状图","12.6 绘制柱状图",[82,154050,154052],{"className":30459,"code":154051,"language":30461,"meta":26,"style":26},"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",[88,154053,154054,154068,154079,154083,154091,154103,154115,154126,154130,154134,154144,154155,154169,154174,154191,154208,154224,154228],{"__ignoreMap":26},[91,154055,154056,154058,154060,154062,154064,154066],{"class":93,"line":94},[91,154057,30818],{"class":153},[91,154059,147460],{"class":250},[91,154061,30473],{"class":153},[91,154063,147465],{"class":250},[91,154065,31464],{"class":153},[91,154067,147470],{"class":250},[91,154069,154070,154072,154074,154076],{"class":93,"line":38},[91,154071,30818],{"class":153},[91,154073,147319],{"class":250},[91,154075,30473],{"class":153},[91,154077,154078],{"class":250}," Bar\n",[91,154080,154081],{"class":93,"line":1304},[91,154082,2523],{"emptyLinePlaceholder":175},[91,154084,154085,154087,154089],{"class":93,"line":1319},[91,154086,153931],{"class":250},[91,154088,296],{"class":153},[91,154090,15695],{"class":250},[91,154092,154093,154096,154098,154101],{"class":93,"line":1325},[91,154094,154095],{"class":101},"    \"手机\"",[91,154097,51518],{"class":250},[91,154099,154100],{"class":105},"27000",[91,154102,31547],{"class":250},[91,154104,154105,154108,154110,154113],{"class":93,"line":1339},[91,154106,154107],{"class":101},"    \"电脑\"",[91,154109,51518],{"class":250},[91,154111,154112],{"class":105},"34000",[91,154114,31547],{"class":250},[91,154116,154117,154120,154122,154124],{"class":93,"line":1345},[91,154118,154119],{"class":101},"    \"耳机\"",[91,154121,51518],{"class":250},[91,154123,124480],{"class":105},[91,154125,31547],{"class":250},[91,154127,154128],{"class":93,"line":1436},[91,154129,1689],{"class":250},[91,154131,154132],{"class":93,"line":1442},[91,154133,2523],{"emptyLinePlaceholder":175},[91,154135,154136,154139,154141],{"class":93,"line":1454},[91,154137,154138],{"class":250},"bar ",[91,154140,296],{"class":153},[91,154142,154143],{"class":250}," Bar()\n",[91,154145,154146,154149,154152],{"class":93,"line":1736},[91,154147,154148],{"class":250},"bar.add_xaxis(",[91,154150,154151],{"class":105},"list",[91,154153,154154],{"class":250},"(category_total.keys()))\n",[91,154156,154157,154160,154162,154164,154166],{"class":93,"line":1741},[91,154158,154159],{"class":250},"bar.add_yaxis(",[91,154161,147376],{"class":101},[91,154163,12558],{"class":250},[91,154165,154151],{"class":105},[91,154167,154168],{"class":250},"(category_total.values()))\n",[91,154170,154171],{"class":93,"line":1747},[91,154172,154173],{"class":250},"bar.set_global_opts(\n",[91,154175,154176,154178,154180,154182,154184,154186,154189],{"class":93,"line":1752},[91,154177,147554],{"class":5339},[91,154179,296],{"class":153},[91,154181,147559],{"class":250},[91,154183,51488],{"class":5339},[91,154185,296],{"class":153},[91,154187,154188],{"class":101},"\"品类销售额\"",[91,154190,38128],{"class":250},[91,154192,154193,154195,154197,154199,154201,154203,154206],{"class":93,"line":1766},[91,154194,147573],{"class":5339},[91,154196,296],{"class":153},[91,154198,147578],{"class":250},[91,154200,79891],{"class":5339},[91,154202,296],{"class":153},[91,154204,154205],{"class":101},"\"品类\"",[91,154207,38128],{"class":250},[91,154209,154210,154212,154214,154216,154218,154220,154222],{"class":93,"line":1771},[91,154211,147592],{"class":5339},[91,154213,296],{"class":153},[91,154215,147578],{"class":250},[91,154217,79891],{"class":5339},[91,154219,296],{"class":153},[91,154221,147376],{"class":101},[91,154223,38128],{"class":250},[91,154225,154226],{"class":93,"line":1777},[91,154227,257],{"class":250},[91,154229,154230,154233,154236],{"class":93,"line":1798},[91,154231,154232],{"class":250},"bar.render(",[91,154234,154235],{"class":101},"\"category_sales.html\"",[91,154237,257],{"class":250},[190,154239,154241],{"id":154240},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[21,154243,154244],{},"时间线适合展示不同日期、月份、年份的数据变化。",[82,154246,154248],{"className":30459,"code":154247,"language":30461,"meta":26,"style":26},"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",[88,154249,154250,154264,154275,154279,154287,154311,154334,154359,154363,154367,154377,154381,154392,154401,154411,154425,154456,154461,154465],{"__ignoreMap":26},[91,154251,154252,154254,154256,154258,154260,154262],{"class":93,"line":94},[91,154253,30818],{"class":153},[91,154255,147460],{"class":250},[91,154257,30473],{"class":153},[91,154259,147465],{"class":250},[91,154261,31464],{"class":153},[91,154263,147470],{"class":250},[91,154265,154266,154268,154270,154272],{"class":93,"line":38},[91,154267,30818],{"class":153},[91,154269,147319],{"class":250},[91,154271,30473],{"class":153},[91,154273,154274],{"class":250}," Bar, Timeline\n",[91,154276,154277],{"class":93,"line":1304},[91,154278,2523],{"emptyLinePlaceholder":175},[91,154280,154281,154283,154285],{"class":93,"line":1319},[91,154282,101739],{"class":250},[91,154284,296],{"class":153},[91,154286,15695],{"class":250},[91,154288,154289,154292,154295,154297,154299,154301,154303,154305,154307,154309],{"class":93,"line":1325},[91,154290,154291],{"class":101},"    \"2024-10-01\"",[91,154293,154294],{"class":250},": {",[91,154296,153724],{"class":101},[91,154298,51518],{"class":250},[91,154300,153733],{"class":105},[91,154302,12558],{"class":250},[91,154304,153754],{"class":101},[91,154306,51518],{"class":250},[91,154308,153763],{"class":105},[91,154310,5053],{"class":250},[91,154312,154313,154316,154318,154320,154322,154324,154326,154328,154330,154332],{"class":93,"line":1339},[91,154314,154315],{"class":101},"    \"2024-10-02\"",[91,154317,154294],{"class":250},[91,154319,153724],{"class":101},[91,154321,51518],{"class":250},[91,154323,153792],{"class":105},[91,154325,12558],{"class":250},[91,154327,153754],{"class":101},[91,154329,51518],{"class":250},[91,154331,153821],{"class":105},[91,154333,5053],{"class":250},[91,154335,154336,154339,154341,154343,154345,154348,154350,154352,154354,154357],{"class":93,"line":1345},[91,154337,154338],{"class":101},"    \"2024-10-03\"",[91,154340,154294],{"class":250},[91,154342,153724],{"class":101},[91,154344,51518],{"class":250},[91,154346,154347],{"class":105},"17000",[91,154349,12558],{"class":250},[91,154351,153754],{"class":101},[91,154353,51518],{"class":250},[91,154355,154356],{"class":105},"19000",[91,154358,5053],{"class":250},[91,154360,154361],{"class":93,"line":1436},[91,154362,1689],{"class":250},[91,154364,154365],{"class":93,"line":1442},[91,154366,2523],{"emptyLinePlaceholder":175},[91,154368,154369,154372,154374],{"class":93,"line":1454},[91,154370,154371],{"class":250},"timeline ",[91,154373,296],{"class":153},[91,154375,154376],{"class":250}," Timeline()\n",[91,154378,154379],{"class":93,"line":1736},[91,154380,2523],{"emptyLinePlaceholder":175},[91,154382,154383,154385,154388,154390],{"class":93,"line":1741},[91,154384,3148],{"class":153},[91,154386,154387],{"class":250}," date, category_data ",[91,154389,26165],{"class":153},[91,154391,149229],{"class":250},[91,154393,154394,154397,154399],{"class":93,"line":1747},[91,154395,154396],{"class":250},"    bar ",[91,154398,296],{"class":153},[91,154400,154143],{"class":250},[91,154402,154403,154406,154408],{"class":93,"line":1752},[91,154404,154405],{"class":250},"    bar.add_xaxis(",[91,154407,154151],{"class":105},[91,154409,154410],{"class":250},"(category_data.keys()))\n",[91,154412,154413,154416,154418,154420,154422],{"class":93,"line":1766},[91,154414,154415],{"class":250},"    bar.add_yaxis(",[91,154417,147376],{"class":101},[91,154419,12558],{"class":250},[91,154421,154151],{"class":105},[91,154423,154424],{"class":250},"(category_data.values()))\n",[91,154426,154427,154430,154433,154435,154437,154439,154441,154443,154445,154447,154449,154451,154454],{"class":93,"line":1771},[91,154428,154429],{"class":250},"    bar.set_global_opts(",[91,154431,154432],{"class":5339},"title_opts",[91,154434,296],{"class":153},[91,154436,147559],{"class":250},[91,154438,51488],{"class":5339},[91,154440,296],{"class":153},[91,154442,302],{"class":153},[91,154444,500],{"class":101},[91,154446,1145],{"class":105},[91,154448,74007],{"class":250},[91,154450,1195],{"class":105},[91,154452,154453],{"class":101},"销售额\"",[91,154455,30578],{"class":250},[91,154457,154458],{"class":93,"line":1777},[91,154459,154460],{"class":250},"    timeline.add(bar, date)\n",[91,154462,154463],{"class":93,"line":1798},[91,154464,2523],{"emptyLinePlaceholder":175},[91,154466,154467,154470,154473],{"class":93,"line":1803},[91,154468,154469],{"class":250},"timeline.render(",[91,154471,154472],{"class":101},"\"timeline_sales.html\"",[91,154474,257],{"class":250},[190,154476,154478],{"id":154477},"_128-绘制地图","12.8 绘制地图",[21,154480,154481],{},"地图适合展示地区数据。",[82,154483,154485],{"className":30459,"code":154484,"language":30461,"meta":26,"style":26},"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",[88,154486,154487,154501,154512,154516,154524,154537,154549,154562,154575,154579,154583,154593,154608,154613,154630,154649,154653],{"__ignoreMap":26},[91,154488,154489,154491,154493,154495,154497,154499],{"class":93,"line":94},[91,154490,30818],{"class":153},[91,154492,147460],{"class":250},[91,154494,30473],{"class":153},[91,154496,147465],{"class":250},[91,154498,31464],{"class":153},[91,154500,147470],{"class":250},[91,154502,154503,154505,154507,154509],{"class":93,"line":38},[91,154504,30818],{"class":153},[91,154506,147319],{"class":250},[91,154508,30473],{"class":153},[91,154510,154511],{"class":250}," Map\n",[91,154513,154514],{"class":93,"line":1304},[91,154515,2523],{"emptyLinePlaceholder":175},[91,154517,154518,154520,154522],{"class":93,"line":1319},[91,154519,101739],{"class":250},[91,154521,296],{"class":153},[91,154523,55528],{"class":250},[91,154525,154526,154529,154531,154533,154535],{"class":93,"line":1325},[91,154527,154528],{"class":250},"    (",[91,154530,69350],{"class":101},[91,154532,12558],{"class":250},[91,154534,1066],{"class":105},[91,154536,38128],{"class":250},[91,154538,154539,154541,154543,154545,154547],{"class":93,"line":1339},[91,154540,154528],{"class":250},[91,154542,69370],{"class":101},[91,154544,12558],{"class":250},[91,154546,147393],{"class":105},[91,154548,38128],{"class":250},[91,154550,154551,154553,154556,154558,154560],{"class":93,"line":1345},[91,154552,154528],{"class":250},[91,154554,154555],{"class":101},"\"广东\"",[91,154557,12558],{"class":250},[91,154559,1846],{"class":105},[91,154561,38128],{"class":250},[91,154563,154564,154566,154569,154571,154573],{"class":93,"line":1436},[91,154565,154528],{"class":250},[91,154567,154568],{"class":101},"\"浙江\"",[91,154570,12558],{"class":250},[91,154572,147398],{"class":105},[91,154574,38128],{"class":250},[91,154576,154577],{"class":93,"line":1442},[91,154578,33327],{"class":250},[91,154580,154581],{"class":93,"line":1454},[91,154582,2523],{"emptyLinePlaceholder":175},[91,154584,154585,154588,154590],{"class":93,"line":1736},[91,154586,154587],{"class":250},"map_chart ",[91,154589,296],{"class":153},[91,154591,154592],{"class":250}," Map()\n",[91,154594,154595,154598,154600,154603,154606],{"class":93,"line":1741},[91,154596,154597],{"class":250},"map_chart.add(",[91,154599,147376],{"class":101},[91,154601,154602],{"class":250},", data, ",[91,154604,154605],{"class":101},"\"china\"",[91,154607,257],{"class":250},[91,154609,154610],{"class":93,"line":1747},[91,154611,154612],{"class":250},"map_chart.set_global_opts(\n",[91,154614,154615,154617,154619,154621,154623,154625,154628],{"class":93,"line":1752},[91,154616,147554],{"class":5339},[91,154618,296],{"class":153},[91,154620,147559],{"class":250},[91,154622,51488],{"class":5339},[91,154624,296],{"class":153},[91,154626,154627],{"class":101},"\"地区销售额\"",[91,154629,38128],{"class":250},[91,154631,154632,154635,154637,154640,154643,154645,154647],{"class":93,"line":1766},[91,154633,154634],{"class":5339},"    visualmap_opts",[91,154636,296],{"class":153},[91,154638,154639],{"class":250},"opts.VisualMapOpts(",[91,154641,154642],{"class":5339},"max_",[91,154644,296],{"class":153},[91,154646,1846],{"class":105},[91,154648,38128],{"class":250},[91,154650,154651],{"class":93,"line":1771},[91,154652,257],{"class":250},[91,154654,154655,154658,154661],{"class":93,"line":1777},[91,154656,154657],{"class":250},"map_chart.render(",[91,154659,154660],{"class":101},"\"map_sales.html\"",[91,154662,257],{"class":250},[21,154664,154665],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[190,154667,154669],{"id":154668},"_129-项目拆分建议","12.9 项目拆分建议",[21,154671,154672],{},"当代码超过一个文件时，可以这样组织：",[82,154674,154677],{"className":154675,"code":154676,"language":5310,"meta":26},[5308],"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",[88,154678,154676],{"__ignoreMap":26},[21,154680,154681],{},"职责：",[14,154683,154684,154690,154696,154702],{},[17,154685,154686,154689],{},[88,154687,154688],{},"main.py","：程序入口。",[17,154691,154692,154695],{},[88,154693,154694],{},"file_utils.py","：读写 JSON。",[17,154697,154698,154701],{},[88,154699,154700],{},"sales_service.py","：统计销售数据。",[17,154703,154704,154707],{},[88,154705,154706],{},"chart_builder.py","：生成图表。",[190,154709,154711],{"id":154710},"_1210-python基础复习清单","12.10 Python基础复习清单",[21,154713,154714],{},"语法基础：",[14,154716,154717,154720,154723,154726],{},[17,154718,154719],{},"会写变量、注释、输入输出。",[17,154721,154722],{},"会使用 int、float、str、bool。",[17,154724,154725],{},"会做类型转换。",[17,154727,154728],{},"会使用 f-string 格式化输出。",[21,154730,154731],{},"流程控制：",[14,154733,154734,154740,154746,154754],{},[17,154735,154736,154737,28504],{},"会写 ",[88,154738,154739],{},"if elif else",[17,154741,154736,154742,101099,154744,28504],{},[88,154743,108744],{},[88,154745,3148],{},[17,154747,154748,154749,101099,154751,28504],{},"理解 ",[88,154750,2176],{},[88,154752,154753],{},"continue",[17,154755,154756],{},"能写嵌套循环。",[21,154758,154759],{},"函数：",[14,154761,154762,154765,154768,154771],{},[17,154763,154764],{},"会定义和调用函数。",[17,154766,154767],{},"理解参数和返回值。",[17,154769,154770],{},"知道局部变量和全局变量。",[17,154772,154773],{},"会使用默认参数、关键字参数、不定长参数。",[21,154775,154776],{},"容器：",[14,154778,154779,154782,154785,154788,154791],{},[17,154780,154781],{},"会使用列表增删改查。",[17,154783,154784],{},"会遍历列表、字典。",[17,154786,154787],{},"会使用切片。",[17,154789,154790],{},"会用集合去重。",[17,154792,154793],{},"会处理列表嵌套字典。",[21,154795,154796],{},"文件和模块：",[14,154798,154799,154802,154805,154808,154811],{},[17,154800,154801],{},"会读写文本文件。",[17,154803,154804],{},"会读写 JSON。",[17,154806,154807],{},"会捕获常见异常。",[17,154809,154810],{},"会导入模块和第三方包。",[17,154812,154813],{},"会创建简单包结构。",[21,154815,154816],{},"项目能力：",[14,154818,154819,154822,154825,154828,154831],{},[17,154820,154821],{},"能把代码拆成函数。",[17,154823,154824],{},"能把数据保存到文件。",[17,154826,154827],{},"能处理用户输入错误。",[17,154829,154830],{},"能写一个完整菜单程序。",[17,154832,154833],{},"能用 pyecharts 生成图表。",[190,154835,154837],{"id":154836},"_1211-推荐练习顺序","12.11 推荐练习顺序",[14,154839,154840,154843,154846,154849,154852,154855,154858,154861],{},[17,154841,154842],{},"猜数字游戏。",[17,154844,154845],{},"ATM 菜单程序。",[17,154847,154848],{},"学生成绩统计。",[17,154850,154851],{},"学生管理系统函数版。",[17,154853,154854],{},"学生管理系统文件持久化版。",[17,154856,154857],{},"学生管理系统面向对象版。",[17,154859,154860],{},"销售数据统计。",[17,154862,154863],{},"销售数据可视化。",[190,154865,154867],{"id":154866},"_1212-常见学习误区","12.12 常见学习误区",[14,154869,154870,154873,154876,154879,154882,154885,154888],{},[17,154871,154872],{},"只看视频不敲代码。",[17,154874,154875],{},"一报错就复制错误去搜，不先读报错位置。",[17,154877,154878],{},"变量名随便写，后续自己看不懂。",[17,154880,154881],{},"所有代码都写在一个文件一个函数里。",[17,154883,154884],{},"不保存练习代码，复习时没有材料。",[17,154886,154887],{},"还没掌握列表字典就急着学框架。",[17,154889,154890],{},"不会读官方文档，只依赖教程。",[190,154892,154894],{"id":154893},"_1213-如何读报错","12.13 如何读报错",[21,154896,154897],{},"报错通常从下往上看最后几行。",[21,154899,15258],{},[82,154901,154904],{"className":154902,"code":154903,"language":5310,"meta":26},[5308],"ValueError: invalid literal for int() with base 10: 'abc'\n",[88,154905,154903],{"__ignoreMap":26},[21,154907,24722],{},[14,154909,154910,154916,154926],{},[17,154911,154912,154913,28504],{},"异常类型是 ",[88,154914,154915],{},"ValueError",[17,154917,107426,154918,154921,154922,154925],{},[88,154919,154920],{},"int()"," 无法把 ",[88,154923,154924],{},"'abc'"," 转成整数。",[17,154927,154928],{},"应该检查输入内容或增加异常处理。",[21,154930,154931],{},"再看文件名和行号：",[82,154933,154936],{"className":154934,"code":154935,"language":5310,"meta":26},[5308],"File \"main.py\", line 10, in \u003Cmodule>\n",[88,154937,154935],{"__ignoreMap":26},[21,154939,154940,154941,154943],{},"表示错误发生在 ",[88,154942,154688],{}," 第 10 行。",[190,154945,154947],{"id":154946},"_1214-后续学习方向","12.14 后续学习方向",[21,154949,154950],{},"Python 基础完成后，可以按兴趣选择方向：",[14,154952,154953,154965,154974,154986,154997,155006,155016],{},[17,154954,154955,154956,461,154959,461,154962,28504],{},"自动化办公：",[88,154957,154958],{},"openpyxl",[88,154960,154961],{},"python-docx",[88,154963,154964],{},"pdfplumber",[17,154966,154967,154968,461,154970,461,154972,28504],{},"数据分析：",[88,154969,100707],{},[88,154971,146266],{},[88,154973,146274],{},[17,154975,154976,154977,461,154980,461,154983,28504],{},"Web 后端：",[88,154978,154979],{},"Flask",[88,154981,154982],{},"FastAPI",[88,154984,154985],{},"Django",[17,154987,154988,154989,461,154991,461,154994,28504],{},"爬虫：",[88,154990,146251],{},[88,154992,154993],{},"BeautifulSoup",[88,154995,154996],{},"Scrapy",[17,154998,154999,155000,461,155002,155005],{},"测试开发：",[88,155001,146298],{},[88,155003,155004],{},"selenium","、接口测试。",[17,155007,155008,155009,461,155011,461,155013,28504],{},"人工智能：",[88,155010,100707],{},[88,155012,146266],{},[88,155014,155015],{},"pytorch",[17,155017,155018,155019,461,155021,461,155024,28504],{},"运维脚本：",[88,155020,145867],{},[88,155022,155023],{},"subprocess",[88,155025,155026],{},"paramiko",[21,155028,155029],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[190,155031,155033],{"id":155032},"_1215-结课练习","12.15 结课练习",[14,155035,155036,155039,155042,155045,155048,155051,155054,155057],{},[17,155037,155038],{},"完成函数版学生管理系统。",[17,155040,155041],{},"给学生管理系统增加 JSON 持久化。",[17,155043,155044],{},"给学生管理系统增加异常处理。",[17,155046,155047],{},"把学生管理系统改成面向对象版。",[17,155049,155050],{},"使用 pyecharts 绘制学生成绩柱状图。",[17,155052,155053],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[17,155055,155056],{},"按品类统计销售额并绘制柱状图。",[17,155058,155059],{},"写一份自己的 Python 学习路线图。",[168,155061,155062],{},"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":26,"searchDepth":38,"depth":38,"links":155064},[155065,155066,155069,155070,155071,155077,155078,155079,155080,155081,155082,155083,155084,155085,155086],{"id":151781,"depth":38,"text":151782},{"id":151831,"depth":38,"text":151832,"children":155067},[155068],{"id":151835,"depth":1304,"text":151836},{"id":151874,"depth":38,"text":151875},{"id":153348,"depth":38,"text":153349},{"id":153686,"depth":38,"text":153687,"children":155072},[155073,155074,155075,155076],{"id":153690,"depth":1304,"text":153691},{"id":153830,"depth":1304,"text":153831},{"id":153920,"depth":1304,"text":153921},{"id":154006,"depth":1304,"text":154007},{"id":154047,"depth":38,"text":154048},{"id":154240,"depth":38,"text":154241},{"id":154477,"depth":38,"text":154478},{"id":154668,"depth":38,"text":154669},{"id":154710,"depth":38,"text":154711},{"id":154836,"depth":38,"text":154837},{"id":154866,"depth":38,"text":154867},{"id":154893,"depth":38,"text":154894},{"id":154946,"depth":38,"text":154947},{"id":155032,"depth":38,"text":155033},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151773,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155093,"title":155094,"body":155095,"description":23500,"extension":173,"meta":157564,"navigation":175,"path":157565,"seo":157566,"stem":157567,"__hash__":157568},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155096,"toc":157539},[155097,155100,155104,155107,155110,155130,155133,155156,155159,155162,155184,155187,155209,155213,155216,155256,155259,155380,155384,155387,155427,155430,155454,155457,155461,155464,155478,155511,155514,155549,155552,155575,155578,155611,155614,155616,155622,155697,155700,155706,155723,155763,155767,155770,155816,155818,155856,155859,155894,155897,155932,155935,155967,155970,155989,155993,155997,156110,156112,156187,156191,156237,156240,156266,156275,156279,156282,156345,156353,156381,156385,156425,156490,156494,156497,156536,156539,156584,156587,156648,156652,156679,156682,156710,156713,156717,156721,156786,156789,156827,156830,156862,156866,156965,156969,156972,157045,157048,157096,157100,157106,157146,157149,157196,157199,157248,157252,157254,157268,157270,157451,157455,157482,157502,157509,157513,157530,157536],[10,155098,155094],{"id":155099},"_2-基础语法变量与字符串",[190,155101,155103],{"id":155102},"_21-注释","2.1 注释",[21,155105,155106],{},"注释是给人看的说明文字，不会被 Python 执行。",[21,155108,155109],{},"单行注释：",[82,155111,155113],{"className":30459,"code":155112,"language":30461,"meta":26,"style":26},"# 这是单行注释\nprint(\"hello\")\n",[88,155114,155115,155120],{"__ignoreMap":26},[91,155116,155117],{"class":93,"line":94},[91,155118,155119],{"class":308},"# 这是单行注释\n",[91,155121,155122,155124,155126,155128],{"class":93,"line":38},[91,155123,30496],{"class":105},[91,155125,251],{"class":250},[91,155127,5967],{"class":101},[91,155129,257],{"class":250},[21,155131,155132],{},"多行说明常用三引号：",[82,155134,155136],{"className":30459,"code":155135,"language":30461,"meta":26,"style":26},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[88,155137,155138,155142,155147,155152],{"__ignoreMap":26},[91,155139,155140],{"class":93,"line":94},[91,155141,95779],{"class":101},[91,155143,155144],{"class":93,"line":38},[91,155145,155146],{"class":101},"这是多行说明。\n",[91,155148,155149],{"class":93,"line":1304},[91,155150,155151],{"class":101},"常用于文件顶部说明、函数说明等。\n",[91,155153,155154],{"class":93,"line":1319},[91,155155,95779],{"class":101},[21,155157,155158],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[21,155160,155161],{},"不好：",[82,155163,155165],{"className":30459,"code":155164,"language":30461,"meta":26,"style":26},"# age 加 1\nage = age + 1\n",[88,155166,155167,155172],{"__ignoreMap":26},[91,155168,155169],{"class":93,"line":94},[91,155170,155171],{"class":308},"# age 加 1\n",[91,155173,155174,155176,155178,155180,155182],{"class":93,"line":38},[91,155175,146627],{"class":250},[91,155177,296],{"class":153},[91,155179,15830],{"class":250},[91,155181,730],{"class":153},[91,155183,55780],{"class":105},[21,155185,155186],{},"较好：",[82,155188,155190],{"className":30459,"code":155189,"language":30461,"meta":26,"style":26},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[88,155191,155192,155197],{"__ignoreMap":26},[91,155193,155194],{"class":93,"line":94},[91,155195,155196],{"class":308},"# 用户过完生日后，年龄增加一岁\n",[91,155198,155199,155201,155203,155205,155207],{"class":93,"line":38},[91,155200,146627],{"class":250},[91,155202,296],{"class":153},[91,155204,15830],{"class":250},[91,155206,730],{"class":153},[91,155208,55780],{"class":105},[190,155210,155212],{"id":155211},"_22-字面量","2.2 字面量",[21,155214,155215],{},"字面量就是代码中直接写出来的数据。",[82,155217,155219],{"className":30459,"code":155218,"language":30461,"meta":26,"style":26},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[88,155220,155221,155228,155235,155242,155249],{"__ignoreMap":26},[91,155222,155223,155225],{"class":93,"line":94},[91,155224,560],{"class":105},[91,155226,155227],{"class":308},"          # 整数\n",[91,155229,155230,155232],{"class":93,"line":38},[91,155231,299],{"class":105},[91,155233,155234],{"class":308},"         # 小数\n",[91,155236,155237,155239],{"class":93,"line":1304},[91,155238,5967],{"class":101},[91,155240,155241],{"class":308},"      # 字符串\n",[91,155243,155244,155246],{"class":93,"line":1319},[91,155245,31557],{"class":105},[91,155247,155248],{"class":308},"         # 布尔值\n",[91,155250,155251,155253],{"class":93,"line":1325},[91,155252,95767],{"class":105},[91,155254,155255],{"class":308},"         # 空值\n",[21,155257,155258],{},"常见字面量类型：",[386,155260,155261,155271],{},[389,155262,155263],{},[392,155264,155265,155267,155269],{},[395,155266,23861],{},[395,155268,27611],{},[395,155270,25991],{},[433,155272,155273,155284,155295,155306,155318,155330,155342,155355,155367],{},[392,155274,155275,155277,155281],{},[438,155276,254],{},[438,155278,155279],{},[88,155280,560],{},[438,155282,155283],{},"整数",[392,155285,155286,155288,155292],{},[438,155287,290],{},[438,155289,155290],{},[88,155291,299],{},[438,155293,155294],{},"浮点数",[392,155296,155297,155299,155303],{},[438,155298,1424],{},[438,155300,155301],{},[88,155302,5967],{},[438,155304,155305],{},"字符串",[392,155307,155308,155310,155316],{},[438,155309,1479],{},[438,155311,155312,461,155314],{},[88,155313,31557],{},[88,155315,34068],{},[438,155317,66096],{},[392,155319,155320,155323,155327],{},[438,155321,155322],{},"NoneType",[438,155324,155325],{},[88,155326,95767],{},[438,155328,155329],{},"空值",[392,155331,155332,155334,155339],{},[438,155333,154151],{},[438,155335,155336],{},[88,155337,155338],{},"[1, 2, 3]",[438,155340,155341],{},"列表",[392,155343,155344,155347,155352],{},[438,155345,155346],{},"tuple",[438,155348,155349],{},[88,155350,155351],{},"(1, 2, 3)",[438,155353,155354],{},"元组",[392,155356,155357,155359,155364],{},[438,155358,114627],{},[438,155360,155361],{},[88,155362,155363],{},"{\"name\": \"张三\"}",[438,155365,155366],{},"字典",[392,155368,155369,155372,155377],{},[438,155370,155371],{},"set",[438,155373,155374],{},[88,155375,155376],{},"{1, 2, 3}",[438,155378,155379],{},"集合",[190,155381,155383],{"id":155382},"_23-变量","2.3 变量",[21,155385,155386],{},"变量是保存数据的名字。",[82,155388,155390],{"className":30459,"code":155389,"language":30461,"meta":26,"style":26},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[88,155391,155392,155400,155408,155418],{"__ignoreMap":26},[91,155393,155394,155396,155398],{"class":93,"line":94},[91,155395,146617],{"class":250},[91,155397,296],{"class":153},[91,155399,149434],{"class":101},[91,155401,155402,155404,155406],{"class":93,"line":38},[91,155403,146627],{"class":250},[91,155405,296],{"class":153},[91,155407,146632],{"class":105},[91,155409,155410,155413,155415],{"class":93,"line":1304},[91,155411,155412],{"class":250},"height ",[91,155414,296],{"class":153},[91,155416,155417],{"class":105}," 1.75\n",[91,155419,155420,155423,155425],{"class":93,"line":1319},[91,155421,155422],{"class":250},"is_student ",[91,155424,296],{"class":153},[91,155426,153680],{"class":105},[21,155428,155429],{},"Python 的变量不需要提前声明类型：",[82,155431,155433],{"className":30459,"code":155432,"language":30461,"meta":26,"style":26},"score = 100\nscore = \"满分\"\n",[88,155434,155435,155445],{"__ignoreMap":26},[91,155436,155437,155440,155442],{"class":93,"line":94},[91,155438,155439],{"class":250},"score ",[91,155441,296],{"class":153},[91,155443,155444],{"class":105}," 100\n",[91,155446,155447,155449,155451],{"class":93,"line":38},[91,155448,155439],{"class":250},[91,155450,296],{"class":153},[91,155452,155453],{"class":101}," \"满分\"\n",[21,155455,155456],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[190,155458,155460],{"id":155459},"_24-变量命名规则","2.4 变量命名规则",[21,155462,155463],{},"硬性规则：",[14,155465,155466,155469,155472,155475],{},[17,155467,155468],{},"只能由字母、数字、下划线组成。",[17,155470,155471],{},"不能以数字开头。",[17,155473,155474],{},"不能使用 Python 关键字。",[17,155476,155477],{},"区分大小写。",[82,155479,155481],{"className":30459,"code":155480,"language":30461,"meta":26,"style":26},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[88,155482,155483,155492,155501],{"__ignoreMap":26},[91,155484,155485,155488,155490],{"class":93,"line":94},[91,155486,155487],{"class":250},"user_name ",[91,155489,296],{"class":153},[91,155491,146622],{"class":101},[91,155493,155494,155497,155499],{"class":93,"line":38},[91,155495,155496],{"class":250},"age2 ",[91,155498,296],{"class":153},[91,155500,146632],{"class":105},[91,155502,155503,155506,155508],{"class":93,"line":1304},[91,155504,155505],{"class":250},"_token ",[91,155507,296],{"class":153},[91,155509,155510],{"class":101}," \"abc\"\n",[21,155512,155513],{},"错误写法：",[82,155515,155517],{"className":30459,"code":155516,"language":30461,"meta":26,"style":26},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[88,155518,155519,155528,155540],{"__ignoreMap":26},[91,155520,155521,155524,155526],{"class":93,"line":94},[91,155522,155523],{"class":77484},"2age",[91,155525,13687],{"class":153},[91,155527,146632],{"class":105},[91,155529,155530,155532,155534,155536,155538],{"class":93,"line":38},[91,155531,131665],{"class":250},[91,155533,781],{"class":153},[91,155535,146617],{"class":250},[91,155537,296],{"class":153},[91,155539,146622],{"class":101},[91,155541,155542,155544,155546],{"class":93,"line":1304},[91,155543,14817],{"class":153},[91,155545,13687],{"class":153},[91,155547,155548],{"class":101}," \"一班\"\n",[21,155550,155551],{},"查看关键字：",[82,155553,155555],{"className":30459,"code":155554,"language":30461,"meta":26,"style":26},"import keyword\n\nprint(keyword.kwlist)\n",[88,155556,155557,155564,155568],{"__ignoreMap":26},[91,155558,155559,155561],{"class":93,"line":94},[91,155560,30473],{"class":153},[91,155562,155563],{"class":250}," keyword\n",[91,155565,155566],{"class":93,"line":38},[91,155567,2523],{"emptyLinePlaceholder":175},[91,155569,155570,155572],{"class":93,"line":1304},[91,155571,30496],{"class":105},[91,155573,155574],{"class":250},"(keyword.kwlist)\n",[21,155576,155577],{},"推荐命名风格：",[82,155579,155581],{"className":30459,"code":155580,"language":30461,"meta":26,"style":26},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[88,155582,155583,155592,155602],{"__ignoreMap":26},[91,155584,155585,155588,155590],{"class":93,"line":94},[91,155586,155587],{"class":250},"student_name ",[91,155589,296],{"class":153},[91,155591,149434],{"class":101},[91,155593,155594,155597,155599],{"class":93,"line":38},[91,155595,155596],{"class":250},"total_price ",[91,155598,296],{"class":153},[91,155600,155601],{"class":105}," 99.8\n",[91,155603,155604,155607,155609],{"class":93,"line":1304},[91,155605,155606],{"class":250},"is_finished ",[91,155608,296],{"class":153},[91,155610,125888],{"class":105},[21,155612,155613],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[190,155615,50813],{"id":50812},[21,155617,104447,155618,155621],{},[88,155619,155620],{},"type()"," 查看数据类型：",[82,155623,155625],{"className":30459,"code":155624,"language":30461,"meta":26,"style":26},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[88,155626,155627,155641,155655,155669,155683],{"__ignoreMap":26},[91,155628,155629,155631,155633,155635,155637,155639],{"class":93,"line":94},[91,155630,30496],{"class":105},[91,155632,251],{"class":250},[91,155634,103188],{"class":105},[91,155636,251],{"class":250},[91,155638,560],{"class":105},[91,155640,30578],{"class":250},[91,155642,155643,155645,155647,155649,155651,155653],{"class":93,"line":38},[91,155644,30496],{"class":105},[91,155646,251],{"class":250},[91,155648,103188],{"class":105},[91,155650,251],{"class":250},[91,155652,299],{"class":105},[91,155654,30578],{"class":250},[91,155656,155657,155659,155661,155663,155665,155667],{"class":93,"line":1304},[91,155658,30496],{"class":105},[91,155660,251],{"class":250},[91,155662,103188],{"class":105},[91,155664,251],{"class":250},[91,155666,5967],{"class":101},[91,155668,30578],{"class":250},[91,155670,155671,155673,155675,155677,155679,155681],{"class":93,"line":1319},[91,155672,30496],{"class":105},[91,155674,251],{"class":250},[91,155676,103188],{"class":105},[91,155678,251],{"class":250},[91,155680,31557],{"class":105},[91,155682,30578],{"class":250},[91,155684,155685,155687,155689,155691,155693,155695],{"class":93,"line":1325},[91,155686,30496],{"class":105},[91,155688,251],{"class":250},[91,155690,103188],{"class":105},[91,155692,251],{"class":250},[91,155694,95767],{"class":105},[91,155696,30578],{"class":250},[21,155698,155699],{},"输出类似：",[82,155701,155704],{"className":155702,"code":155703,"language":5310,"meta":26},[5308],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[88,155705,155703],{"__ignoreMap":26},[21,155707,9148,155708,107364,155710,155712,155713,155715,155716,21623,155718,155715,155720,155722],{},[88,155709,1479],{},[88,155711,254],{}," 的子类，",[88,155714,31557],{}," 可以当作 ",[88,155717,466],{},[88,155719,34068],{},[88,155721,440],{},"，但业务代码中不要滥用。",[82,155724,155726],{"className":30459,"code":155725,"language":30461,"meta":26,"style":26},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[88,155727,155728,155746],{"__ignoreMap":26},[91,155729,155730,155732,155734,155736,155738,155740,155743],{"class":93,"line":94},[91,155731,30496],{"class":105},[91,155733,251],{"class":250},[91,155735,31557],{"class":105},[91,155737,45647],{"class":153},[91,155739,25240],{"class":105},[91,155741,155742],{"class":250},")   ",[91,155744,155745],{"class":308},"# 2\n",[91,155747,155748,155750,155752,155754,155756,155758,155760],{"class":93,"line":38},[91,155749,30496],{"class":105},[91,155751,251],{"class":250},[91,155753,34068],{"class":105},[91,155755,45647],{"class":153},[91,155757,25240],{"class":105},[91,155759,45889],{"class":250},[91,155761,155762],{"class":308},"# 1\n",[190,155764,155766],{"id":155765},"_26-类型转换","2.6 类型转换",[21,155768,155769],{},"常用转换函数：",[82,155771,155773],{"className":30459,"code":155772,"language":30461,"meta":26,"style":26},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[88,155774,155775,155785,155796,155806],{"__ignoreMap":26},[91,155776,155777,155779,155781,155783],{"class":93,"line":94},[91,155778,254],{"class":105},[91,155780,251],{"class":250},[91,155782,54397],{"class":101},[91,155784,257],{"class":250},[91,155786,155787,155789,155791,155794],{"class":93,"line":38},[91,155788,290],{"class":105},[91,155790,251],{"class":250},[91,155792,155793],{"class":101},"\"3.14\"",[91,155795,257],{"class":250},[91,155797,155798,155800,155802,155804],{"class":93,"line":1304},[91,155799,1424],{"class":105},[91,155801,251],{"class":250},[91,155803,560],{"class":105},[91,155805,257],{"class":250},[91,155807,155808,155810,155812,155814],{"class":93,"line":1319},[91,155809,1479],{"class":105},[91,155811,251],{"class":250},[91,155813,466],{"class":105},[91,155815,257],{"class":250},[21,155817,15258],{},[82,155819,155821],{"className":30459,"code":155820,"language":30461,"meta":26,"style":26},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[88,155822,155823,155832,155843],{"__ignoreMap":26},[91,155824,155825,155827,155829],{"class":93,"line":94},[91,155826,146627],{"class":250},[91,155828,296],{"class":153},[91,155830,155831],{"class":101}," \"18\"\n",[91,155833,155834,155836,155838,155840],{"class":93,"line":38},[91,155835,146627],{"class":250},[91,155837,296],{"class":153},[91,155839,2505],{"class":105},[91,155841,155842],{"class":250},"(age)\n",[91,155844,155845,155847,155850,155852,155854],{"class":93,"line":1304},[91,155846,30496],{"class":105},[91,155848,155849],{"class":250},"(age ",[91,155851,730],{"class":153},[91,155853,25240],{"class":105},[91,155855,257],{"class":250},[21,155857,155858],{},"输入得到的内容永远是字符串：",[82,155860,155862],{"className":30459,"code":155861,"language":30461,"meta":26,"style":26},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[88,155863,155864,155880],{"__ignoreMap":26},[91,155865,155866,155869,155871,155873,155875,155878],{"class":93,"line":94},[91,155867,155868],{"class":250},"num ",[91,155870,296],{"class":153},[91,155872,60686],{"class":105},[91,155874,251],{"class":250},[91,155876,155877],{"class":101},"\"请输入数字:\"",[91,155879,257],{"class":250},[91,155881,155882,155884,155886,155888,155891],{"class":93,"line":38},[91,155883,30496],{"class":105},[91,155885,251],{"class":250},[91,155887,103188],{"class":105},[91,155889,155890],{"class":250},"(num))  ",[91,155892,155893],{"class":308},"# str\n",[21,155895,155896],{},"如果要做数学运算，必须转换：",[82,155898,155900],{"className":30459,"code":155899,"language":30461,"meta":26,"style":26},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[88,155901,155902,155920],{"__ignoreMap":26},[91,155903,155904,155906,155908,155910,155912,155914,155916,155918],{"class":93,"line":94},[91,155905,155868],{"class":250},[91,155907,296],{"class":153},[91,155909,2505],{"class":105},[91,155911,251],{"class":250},[91,155913,53902],{"class":105},[91,155915,251],{"class":250},[91,155917,155877],{"class":101},[91,155919,30578],{"class":250},[91,155921,155922,155924,155926,155928,155930],{"class":93,"line":38},[91,155923,30496],{"class":105},[91,155925,45700],{"class":250},[91,155927,730],{"class":153},[91,155929,2161],{"class":105},[91,155931,257],{"class":250},[21,155933,155934],{},"常见错误：",[82,155936,155938],{"className":30459,"code":155937,"language":30461,"meta":26,"style":26},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[88,155939,155940,155953],{"__ignoreMap":26},[91,155941,155942,155944,155946,155948,155950],{"class":93,"line":94},[91,155943,254],{"class":105},[91,155945,251],{"class":250},[91,155947,155793],{"class":101},[91,155949,155742],{"class":250},[91,155951,155952],{"class":308},"# 错误\n",[91,155954,155955,155957,155959,155962,155965],{"class":93,"line":38},[91,155956,254],{"class":105},[91,155958,251],{"class":250},[91,155960,155961],{"class":101},"\"abc\"",[91,155963,155964],{"class":250},")    ",[91,155966,155952],{"class":308},[21,155968,155969],{},"正确写法：",[82,155971,155973],{"className":30459,"code":155972,"language":30461,"meta":26,"style":26},"num = float(\"3.14\")\n",[88,155974,155975],{"__ignoreMap":26},[91,155976,155977,155979,155981,155983,155985,155987],{"class":93,"line":94},[91,155978,155868],{"class":250},[91,155980,296],{"class":153},[91,155982,109878],{"class":105},[91,155984,251],{"class":250},[91,155986,155793],{"class":101},[91,155988,257],{"class":250},[190,155990,155992],{"id":155991},"_27-运算符","2.7 运算符",[217,155994,155996],{"id":155995},"_271-算术运算符","2.7.1 算术运算符",[386,155998,155999,156010],{},[389,156000,156001],{},[392,156002,156003,156006,156008],{},[395,156004,156005],{},"运算符",[395,156007,25991],{},[395,156009,27611],{},[433,156011,156012,156026,156040,156054,156068,156082,156096],{},[392,156013,156014,156018,156021],{},[438,156015,156016],{},[88,156017,730],{},[438,156019,156020],{},"加法",[438,156022,156023],{},[88,156024,156025],{},"1 + 2",[392,156027,156028,156032,156035],{},[438,156029,156030],{},[88,156031,781],{},[438,156033,156034],{},"减法",[438,156036,156037],{},[88,156038,156039],{},"5 - 3",[392,156041,156042,156046,156049],{},[438,156043,156044],{},[88,156045,704],{},[438,156047,156048],{},"乘法",[438,156050,156051],{},[88,156052,156053],{},"2 * 3",[392,156055,156056,156060,156063],{},[438,156057,156058],{},[88,156059,833],{},[438,156061,156062],{},"除法，结果是浮点数",[438,156064,156065],{},[88,156066,156067],{},"5 \u002F 2",[392,156069,156070,156074,156077],{},[438,156071,156072],{},[88,156073,33410],{},[438,156075,156076],{},"整除",[438,156078,156079],{},[88,156080,156081],{},"5 \u002F\u002F 2",[392,156083,156084,156088,156091],{},[438,156085,156086],{},[88,156087,577],{},[438,156089,156090],{},"取余",[438,156092,156093],{},[88,156094,156095],{},"5 % 2",[392,156097,156098,156102,156105],{},[438,156099,156100],{},[88,156101,10784],{},[438,156103,156104],{},"幂运算",[438,156106,156107],{},[88,156108,156109],{},"2 ** 3",[21,156111,15258],{},[82,156113,156115],{"className":30459,"code":156114,"language":30461,"meta":26,"style":26},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[88,156116,156117,156135,156152,156169],{"__ignoreMap":26},[91,156118,156119,156121,156123,156125,156128,156130,156132],{"class":93,"line":94},[91,156120,30496],{"class":105},[91,156122,251],{"class":250},[91,156124,568],{"class":105},[91,156126,156127],{"class":153}," \u002F",[91,156129,14878],{"class":105},[91,156131,155742],{"class":250},[91,156133,156134],{"class":308},"# 2.5\n",[91,156136,156137,156139,156141,156143,156146,156148,156150],{"class":93,"line":38},[91,156138,30496],{"class":105},[91,156140,251],{"class":250},[91,156142,568],{"class":105},[91,156144,156145],{"class":153}," \u002F\u002F",[91,156147,14878],{"class":105},[91,156149,45889],{"class":250},[91,156151,155745],{"class":308},[91,156153,156154,156156,156158,156160,156163,156165,156167],{"class":93,"line":1304},[91,156155,30496],{"class":105},[91,156157,251],{"class":250},[91,156159,568],{"class":105},[91,156161,156162],{"class":153}," %",[91,156164,14878],{"class":105},[91,156166,155742],{"class":250},[91,156168,155762],{"class":308},[91,156170,156171,156173,156175,156177,156180,156182,156184],{"class":93,"line":1319},[91,156172,30496],{"class":105},[91,156174,251],{"class":250},[91,156176,327],{"class":105},[91,156178,156179],{"class":153}," **",[91,156181,78151],{"class":105},[91,156183,45889],{"class":250},[91,156185,156186],{"class":308},"# 8\n",[217,156188,156190],{"id":156189},"_272-赋值运算符","2.7.2 赋值运算符",[82,156192,156194],{"className":30459,"code":156193,"language":30461,"meta":26,"style":26},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[88,156195,156196,156204,156212,156220,156228],{"__ignoreMap":26},[91,156197,156198,156200,156202],{"class":93,"line":94},[91,156199,155868],{"class":250},[91,156201,296],{"class":153},[91,156203,58509],{"class":105},[91,156205,156206,156208,156210],{"class":93,"line":38},[91,156207,155868],{"class":250},[91,156209,9600],{"class":153},[91,156211,54508],{"class":105},[91,156213,156214,156216,156218],{"class":93,"line":1304},[91,156215,155868],{"class":250},[91,156217,150333],{"class":153},[91,156219,47804],{"class":105},[91,156221,156222,156224,156226],{"class":93,"line":1319},[91,156223,155868],{"class":250},[91,156225,137229],{"class":153},[91,156227,120117],{"class":105},[91,156229,156230,156232,156235],{"class":93,"line":1325},[91,156231,155868],{"class":250},[91,156233,156234],{"class":153},"\u002F=",[91,156236,47804],{"class":105},[21,156238,156239],{},"等价关系：",[82,156241,156243],{"className":30459,"code":156242,"language":30461,"meta":26,"style":26},"num += 1\nnum = num + 1\n",[88,156244,156245,156253],{"__ignoreMap":26},[91,156246,156247,156249,156251],{"class":93,"line":94},[91,156248,155868],{"class":250},[91,156250,9600],{"class":153},[91,156252,55780],{"class":105},[91,156254,156255,156257,156259,156262,156264],{"class":93,"line":38},[91,156256,155868],{"class":250},[91,156258,296],{"class":153},[91,156260,156261],{"class":250}," num ",[91,156263,730],{"class":153},[91,156265,55780],{"class":105},[21,156267,156268,156269,101099,156272,28504],{},"Python 没有 ",[88,156270,156271],{},"num++",[88,156273,156274],{},"num--",[217,156276,156278],{"id":156277},"_273-比较运算符","2.7.3 比较运算符",[21,156280,156281],{},"比较运算结果是布尔值。",[82,156283,156285],{"className":30459,"code":156284,"language":30461,"meta":26,"style":26},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[88,156286,156287,156301,156316,156330],{"__ignoreMap":26},[91,156288,156289,156291,156293,156295,156297,156299],{"class":93,"line":94},[91,156290,30496],{"class":105},[91,156292,251],{"class":250},[91,156294,695],{"class":105},[91,156296,26344],{"class":153},[91,156298,2271],{"class":105},[91,156300,257],{"class":250},[91,156302,156303,156305,156307,156309,156312,156314],{"class":93,"line":38},[91,156304,30496],{"class":105},[91,156306,251],{"class":250},[91,156308,695],{"class":105},[91,156310,156311],{"class":153}," >=",[91,156313,2161],{"class":105},[91,156315,257],{"class":250},[91,156317,156318,156320,156322,156324,156326,156328],{"class":93,"line":1304},[91,156319,30496],{"class":105},[91,156321,251],{"class":250},[91,156323,695],{"class":105},[91,156325,101640],{"class":153},[91,156327,2206],{"class":105},[91,156329,257],{"class":250},[91,156331,156332,156334,156336,156338,156341,156343],{"class":93,"line":1319},[91,156333,30496],{"class":105},[91,156335,251],{"class":250},[91,156337,695],{"class":105},[91,156339,156340],{"class":153}," !=",[91,156342,2206],{"class":105},[91,156344,257],{"class":250},[21,156346,156347,156348,156350,156351,28504],{},"注意：判断相等用 ",[88,156349,3072],{},"，赋值用 ",[88,156352,296],{},[82,156354,156356],{"className":30459,"code":156355,"language":30461,"meta":26,"style":26},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[88,156357,156358,156370],{"__ignoreMap":26},[91,156359,156360,156362,156364,156367],{"class":93,"line":94},[91,156361,146627],{"class":250},[91,156363,296],{"class":153},[91,156365,156366],{"class":105}," 18",[91,156368,156369],{"class":308},"       # 赋值\n",[91,156371,156372,156374,156376,156378],{"class":93,"line":38},[91,156373,146627],{"class":250},[91,156375,3072],{"class":153},[91,156377,156366],{"class":105},[91,156379,156380],{"class":308},"      # 判断是否相等\n",[217,156382,156384],{"id":156383},"_274-逻辑运算符","2.7.4 逻辑运算符",[386,156386,156387,156395],{},[389,156388,156389],{},[392,156390,156391,156393],{},[395,156392,156005],{},[395,156394,25991],{},[433,156396,156397,156406,156415],{},[392,156398,156399,156403],{},[438,156400,156401],{},[88,156402,30543],{},[438,156404,156405],{},"并且",[392,156407,156408,156412],{},[438,156409,156410],{},[88,156411,115171],{},[438,156413,156414],{},"或者",[392,156416,156417,156422],{},[438,156418,156419],{},[88,156420,156421],{},"not",[438,156423,156424],{},"取反",[82,156426,156428],{"className":30459,"code":156427,"language":30461,"meta":26,"style":26},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[88,156429,156430,156438,156447,156451,156466,156480],{"__ignoreMap":26},[91,156431,156432,156434,156436],{"class":93,"line":94},[91,156433,146627],{"class":250},[91,156435,296],{"class":153},[91,156437,88146],{"class":105},[91,156439,156440,156443,156445],{"class":93,"line":38},[91,156441,156442],{"class":250},"has_ticket ",[91,156444,296],{"class":153},[91,156446,153680],{"class":105},[91,156448,156449],{"class":93,"line":1304},[91,156450,2523],{"emptyLinePlaceholder":175},[91,156452,156453,156455,156457,156459,156461,156463],{"class":93,"line":1319},[91,156454,30496],{"class":105},[91,156456,155849],{"class":250},[91,156458,1834],{"class":153},[91,156460,156366],{"class":105},[91,156462,120510],{"class":153},[91,156464,156465],{"class":250}," has_ticket)\n",[91,156467,156468,156470,156472,156474,156476,156478],{"class":93,"line":1325},[91,156469,30496],{"class":105},[91,156471,155849],{"class":250},[91,156473,1159],{"class":153},[91,156475,156366],{"class":105},[91,156477,114282],{"class":153},[91,156479,156465],{"class":250},[91,156481,156482,156484,156486,156488],{"class":93,"line":1339},[91,156483,30496],{"class":105},[91,156485,251],{"class":250},[91,156487,156421],{"class":153},[91,156489,156465],{"class":250},[190,156491,156493],{"id":156492},"_28-字符串定义","2.8 字符串定义",[21,156495,156496],{},"三种常见写法：",[82,156498,156500],{"className":30459,"code":156499,"language":30461,"meta":26,"style":26},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[88,156501,156502,156512,156521,156531],{"__ignoreMap":26},[91,156503,156504,156507,156509],{"class":93,"line":94},[91,156505,156506],{"class":250},"name1 ",[91,156508,296],{"class":153},[91,156510,156511],{"class":101}," '小明'\n",[91,156513,156514,156517,156519],{"class":93,"line":38},[91,156515,156516],{"class":250},"name2 ",[91,156518,296],{"class":153},[91,156520,149434],{"class":101},[91,156522,156523,156526,156528],{"class":93,"line":1304},[91,156524,156525],{"class":250},"text ",[91,156527,296],{"class":153},[91,156529,156530],{"class":101}," \"\"\"这是多行字符串\n",[91,156532,156533],{"class":93,"line":1319},[91,156534,156535],{"class":101},"可以换行\"\"\"\n",[21,156537,156538],{},"字符串中包含引号：",[82,156540,156542],{"className":30459,"code":156541,"language":30461,"meta":26,"style":26},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[88,156543,156544,156554,156564],{"__ignoreMap":26},[91,156545,156546,156549,156551],{"class":93,"line":94},[91,156547,156548],{"class":250},"msg ",[91,156550,296],{"class":153},[91,156552,156553],{"class":101}," \"他说:'你好'\"\n",[91,156555,156556,156559,156561],{"class":93,"line":38},[91,156557,156558],{"class":250},"msg2 ",[91,156560,296],{"class":153},[91,156562,156563],{"class":101}," '他说:\"你好\"'\n",[91,156565,156566,156569,156571,156574,156577,156580,156582],{"class":93,"line":1304},[91,156567,156568],{"class":250},"msg3 ",[91,156570,296],{"class":153},[91,156572,156573],{"class":101}," \"他说:",[91,156575,156576],{"class":105},"\\\"",[91,156578,156579],{"class":101},"你好",[91,156581,156576],{"class":105},[91,156583,25255],{"class":101},[21,156585,156586],{},"常见转义字符：",[386,156588,156589,156598],{},[389,156590,156591],{},[392,156592,156593,156596],{},[395,156594,156595],{},"写法",[395,156597,100781],{},[433,156599,156600,156610,156619,156629,156638],{},[392,156601,156602,156607],{},[438,156603,156604],{},[88,156605,156606],{},"\\n",[438,156608,156609],{},"换行",[392,156611,156612,156616],{},[438,156613,156614],{},[88,156615,1355],{},[438,156617,156618],{},"制表符",[392,156620,156621,156626],{},[438,156622,156623],{},[88,156624,156625],{},"\\\\",[438,156627,156628],{},"反斜杠",[392,156630,156631,156635],{},[438,156632,156633],{},[88,156634,156576],{},[438,156636,156637],{},"双引号",[392,156639,156640,156645],{},[438,156641,156642],{},[88,156643,156644],{},"\\'",[438,156646,156647],{},"单引号",[190,156649,156651],{"id":156650},"_29-字符串拼接","2.9 字符串拼接",[82,156653,156655],{"className":30459,"code":156654,"language":30461,"meta":26,"style":26},"name = \"小明\"\nprint(\"你好，\" + name)\n",[88,156656,156657,156665],{"__ignoreMap":26},[91,156658,156659,156661,156663],{"class":93,"line":94},[91,156660,146617],{"class":250},[91,156662,296],{"class":153},[91,156664,149434],{"class":101},[91,156666,156667,156669,156671,156674,156676],{"class":93,"line":38},[91,156668,30496],{"class":105},[91,156670,251],{"class":250},[91,156672,156673],{"class":101},"\"你好，\"",[91,156675,45647],{"class":153},[91,156677,156678],{"class":250}," name)\n",[21,156680,156681],{},"字符串只能和字符串拼接：",[82,156683,156685],{"className":30459,"code":156684,"language":30461,"meta":26,"style":26},"age = 18\nprint(\"年龄:\" + str(age))\n",[88,156686,156687,156695],{"__ignoreMap":26},[91,156688,156689,156691,156693],{"class":93,"line":94},[91,156690,146627],{"class":250},[91,156692,296],{"class":153},[91,156694,146632],{"class":105},[91,156696,156697,156699,156701,156703,156705,156707],{"class":93,"line":38},[91,156698,30496],{"class":105},[91,156700,251],{"class":250},[91,156702,146598],{"class":101},[91,156704,45647],{"class":153},[91,156706,74000],{"class":105},[91,156708,156709],{"class":250},"(age))\n",[21,156711,156712],{},"更推荐使用格式化字符串。",[190,156714,156716],{"id":156715},"_210-字符串格式化","2.10 字符串格式化",[217,156718,156720],{"id":156719},"_2101-百分号格式化","2.10.1 百分号格式化",[82,156722,156724],{"className":30459,"code":156723,"language":30461,"meta":26,"style":26},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[88,156725,156726,156734,156742,156751,156755],{"__ignoreMap":26},[91,156727,156728,156730,156732],{"class":93,"line":94},[91,156729,146617],{"class":250},[91,156731,296],{"class":153},[91,156733,149434],{"class":101},[91,156735,156736,156738,156740],{"class":93,"line":38},[91,156737,146627],{"class":250},[91,156739,296],{"class":153},[91,156741,146632],{"class":105},[91,156743,156744,156746,156748],{"class":93,"line":1304},[91,156745,155439],{"class":250},[91,156747,296],{"class":153},[91,156749,156750],{"class":105}," 95.5\n",[91,156752,156753],{"class":93,"line":1319},[91,156754,2523],{"emptyLinePlaceholder":175},[91,156756,156757,156759,156761,156764,156767,156770,156773,156776,156779,156781,156783],{"class":93,"line":1325},[91,156758,30496],{"class":105},[91,156760,251],{"class":250},[91,156762,156763],{"class":101},"\"姓名:",[91,156765,156766],{"class":105},"%s",[91,156768,156769],{"class":101}," 年龄:",[91,156771,156772],{"class":105},"%d",[91,156774,156775],{"class":101}," 分数:",[91,156777,156778],{"class":105},"%.1f",[91,156780,500],{"class":101},[91,156782,156162],{"class":153},[91,156784,156785],{"class":250}," (name, age, score))\n",[21,156787,156788],{},"常用占位符：",[386,156790,156791,156800],{},[389,156792,156793],{},[392,156794,156795,156798],{},[395,156796,156797],{},"占位符",[395,156799,25991],{},[433,156801,156802,156810,156818],{},[392,156803,156804,156808],{},[438,156805,156806],{},[88,156807,156766],{},[438,156809,155305],{},[392,156811,156812,156816],{},[438,156813,156814],{},[88,156815,156772],{},[438,156817,155283],{},[392,156819,156820,156825],{},[438,156821,156822],{},[88,156823,156824],{},"%f",[438,156826,155294],{},[21,156828,156829],{},"精度控制：",[82,156831,156833],{"className":30459,"code":156832,"language":30461,"meta":26,"style":26},"price = 12.3456\nprint(\"%.2f\" % price)\n",[88,156834,156835,156844],{"__ignoreMap":26},[91,156836,156837,156839,156841],{"class":93,"line":94},[91,156838,146762],{"class":250},[91,156840,296],{"class":153},[91,156842,156843],{"class":105}," 12.3456\n",[91,156845,156846,156848,156850,156852,156855,156857,156859],{"class":93,"line":38},[91,156847,30496],{"class":105},[91,156849,251],{"class":250},[91,156851,500],{"class":101},[91,156853,156854],{"class":105},"%.2f",[91,156856,500],{"class":101},[91,156858,156162],{"class":153},[91,156860,156861],{"class":250}," price)\n",[217,156863,156865],{"id":156864},"_2102-format方法","2.10.2 format方法",[82,156867,156869],{"className":30459,"code":156868,"language":30461,"meta":26,"style":26},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[88,156870,156871,156879,156887,156891,156910,156930],{"__ignoreMap":26},[91,156872,156873,156875,156877],{"class":93,"line":94},[91,156874,146617],{"class":250},[91,156876,296],{"class":153},[91,156878,149434],{"class":101},[91,156880,156881,156883,156885],{"class":93,"line":38},[91,156882,146627],{"class":250},[91,156884,296],{"class":153},[91,156886,146632],{"class":105},[91,156888,156889],{"class":93,"line":1304},[91,156890,2523],{"emptyLinePlaceholder":175},[91,156892,156893,156895,156897,156899,156901,156903,156905,156907],{"class":93,"line":1319},[91,156894,30496],{"class":105},[91,156896,251],{"class":250},[91,156898,156763],{"class":101},[91,156900,32540],{"class":105},[91,156902,156769],{"class":101},[91,156904,32540],{"class":105},[91,156906,500],{"class":101},[91,156908,156909],{"class":250},".format(name, age))\n",[91,156911,156912,156914,156916,156918,156921,156923,156926,156928],{"class":93,"line":1325},[91,156913,30496],{"class":105},[91,156915,251],{"class":250},[91,156917,156763],{"class":101},[91,156919,156920],{"class":105},"{0}",[91,156922,156769],{"class":101},[91,156924,156925],{"class":105},"{1}",[91,156927,500],{"class":101},[91,156929,156909],{"class":250},[91,156931,156932,156934,156936,156938,156941,156943,156946,156948,156951,156953,156955,156958,156960,156962],{"class":93,"line":1339},[91,156933,30496],{"class":105},[91,156935,251],{"class":250},[91,156937,156763],{"class":101},[91,156939,156940],{"class":105},"{name}",[91,156942,156769],{"class":101},[91,156944,156945],{"class":105},"{age}",[91,156947,500],{"class":101},[91,156949,156950],{"class":250},".format(",[91,156952,79891],{"class":5339},[91,156954,296],{"class":153},[91,156956,156957],{"class":250},"name, ",[91,156959,70302],{"class":5339},[91,156961,296],{"class":153},[91,156963,156964],{"class":250},"age))\n",[217,156966,156968],{"id":156967},"_2103-f-string","2.10.3 f-string",[21,156970,156971],{},"推荐写法：",[82,156973,156975],{"className":30459,"code":156974,"language":30461,"meta":26,"style":26},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[88,156976,156977,156985,156993,157001,157005],{"__ignoreMap":26},[91,156978,156979,156981,156983],{"class":93,"line":94},[91,156980,146617],{"class":250},[91,156982,296],{"class":153},[91,156984,149434],{"class":101},[91,156986,156987,156989,156991],{"class":93,"line":38},[91,156988,146627],{"class":250},[91,156990,296],{"class":153},[91,156992,146632],{"class":105},[91,156994,156995,156997,156999],{"class":93,"line":1304},[91,156996,155439],{"class":250},[91,156998,296],{"class":153},[91,157000,156750],{"class":105},[91,157002,157003],{"class":93,"line":1319},[91,157004,2523],{"emptyLinePlaceholder":175},[91,157006,157007,157009,157011,157013,157015,157017,157019,157021,157023,157025,157027,157029,157031,157033,157036,157039,157041,157043],{"class":93,"line":1325},[91,157008,30496],{"class":105},[91,157010,251],{"class":250},[91,157012,302],{"class":153},[91,157014,156763],{"class":101},[91,157016,1145],{"class":105},[91,157018,79891],{"class":250},[91,157020,1195],{"class":105},[91,157022,156769],{"class":101},[91,157024,1145],{"class":105},[91,157026,70302],{"class":250},[91,157028,1195],{"class":105},[91,157030,156775],{"class":101},[91,157032,1145],{"class":105},[91,157034,157035],{"class":250},"score",[91,157037,157038],{"class":153},":.1f",[91,157040,1195],{"class":105},[91,157042,500],{"class":101},[91,157044,257],{"class":250},[21,157046,157047],{},"表达式也可以放进去：",[82,157049,157051],{"className":30459,"code":157050,"language":30461,"meta":26,"style":26},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[88,157052,157053,157061,157069],{"__ignoreMap":26},[91,157054,157055,157057,157059],{"class":93,"line":94},[91,157056,146762],{"class":250},[91,157058,296],{"class":153},[91,157060,146767],{"class":105},[91,157062,157063,157065,157067],{"class":93,"line":38},[91,157064,146772],{"class":250},[91,157066,296],{"class":153},[91,157068,54508],{"class":105},[91,157070,157071,157073,157075,157077,157080,157082,157084,157086,157089,157091,157094],{"class":93,"line":1304},[91,157072,30496],{"class":105},[91,157074,251],{"class":250},[91,157076,302],{"class":153},[91,157078,157079],{"class":101},"\"总价:",[91,157081,1145],{"class":105},[91,157083,146762],{"class":250},[91,157085,704],{"class":153},[91,157087,157088],{"class":250}," count",[91,157090,1195],{"class":105},[91,157092,157093],{"class":101},"元\"",[91,157095,257],{"class":250},[190,157097,157099],{"id":157098},"_211-input输入","2.11 input输入",[21,157101,157102,157105],{},[88,157103,157104],{},"input()"," 会暂停程序，等待用户输入。",[82,157107,157109],{"className":30459,"code":157108,"language":30461,"meta":26,"style":26},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[88,157110,157111,157125],{"__ignoreMap":26},[91,157112,157113,157115,157117,157119,157121,157123],{"class":93,"line":94},[91,157114,146617],{"class":250},[91,157116,296],{"class":153},[91,157118,60686],{"class":105},[91,157120,251],{"class":250},[91,157122,152460],{"class":101},[91,157124,257],{"class":250},[91,157126,157127,157129,157131,157133,157136,157138,157140,157142,157144],{"class":93,"line":38},[91,157128,30496],{"class":105},[91,157130,251],{"class":250},[91,157132,302],{"class":153},[91,157134,157135],{"class":101},"\"你好，",[91,157137,1145],{"class":105},[91,157139,79891],{"class":250},[91,157141,1195],{"class":105},[91,157143,500],{"class":101},[91,157145,257],{"class":250},[21,157147,157148],{},"输入整数：",[82,157150,157152],{"className":30459,"code":157151,"language":30461,"meta":26,"style":26},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[88,157153,157154,157172],{"__ignoreMap":26},[91,157155,157156,157158,157160,157162,157164,157166,157168,157170],{"class":93,"line":94},[91,157157,146627],{"class":250},[91,157159,296],{"class":153},[91,157161,2505],{"class":105},[91,157163,251],{"class":250},[91,157165,53902],{"class":105},[91,157167,251],{"class":250},[91,157169,152475],{"class":101},[91,157171,30578],{"class":250},[91,157173,157174,157176,157178,157180,157183,157185,157187,157189,157192,157194],{"class":93,"line":38},[91,157175,30496],{"class":105},[91,157177,251],{"class":250},[91,157179,302],{"class":153},[91,157181,157182],{"class":101},"\"明年你",[91,157184,1145],{"class":105},[91,157186,146627],{"class":250},[91,157188,730],{"class":153},[91,157190,157191],{"class":105}," 1}",[91,157193,149485],{"class":101},[91,157195,257],{"class":250},[21,157197,157198],{},"输入小数：",[82,157200,157202],{"className":30459,"code":157201,"language":30461,"meta":26,"style":26},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[88,157203,157204,157223],{"__ignoreMap":26},[91,157205,157206,157208,157210,157212,157214,157216,157218,157221],{"class":93,"line":94},[91,157207,155412],{"class":250},[91,157209,296],{"class":153},[91,157211,109878],{"class":105},[91,157213,251],{"class":250},[91,157215,53902],{"class":105},[91,157217,251],{"class":250},[91,157219,157220],{"class":101},"\"请输入身高:\"",[91,157222,30578],{"class":250},[91,157224,157225,157227,157229,157231,157234,157236,157238,157241,157243,157246],{"class":93,"line":38},[91,157226,30496],{"class":105},[91,157228,251],{"class":250},[91,157230,302],{"class":153},[91,157232,157233],{"class":101},"\"身高:",[91,157235,1145],{"class":105},[91,157237,25104],{"class":250},[91,157239,157240],{"class":153},":.2f",[91,157242,1195],{"class":105},[91,157244,157245],{"class":101},"米\"",[91,157247,257],{"class":250},[190,157249,157251],{"id":157250},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[21,157253,123373],{},[14,157255,157256,157259,157262,157265],{},[17,157257,157258],{},"输入商品单价。",[17,157260,157261],{},"输入购买数量。",[17,157263,157264],{},"输入折扣，例如 0.8 表示八折。",[17,157266,157267],{},"输出最终金额，保留两位小数。",[21,157269,10158],{},[82,157271,157273],{"className":30459,"code":157272,"language":30461,"meta":26,"style":26},"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",[88,157274,157275,157294,157313,157333,157337,157357,157361,157384,157405,157427],{"__ignoreMap":26},[91,157276,157277,157279,157281,157283,157285,157287,157289,157292],{"class":93,"line":94},[91,157278,146762],{"class":250},[91,157280,296],{"class":153},[91,157282,109878],{"class":105},[91,157284,251],{"class":250},[91,157286,53902],{"class":105},[91,157288,251],{"class":250},[91,157290,157291],{"class":101},"\"请输入商品单价:\"",[91,157293,30578],{"class":250},[91,157295,157296,157298,157300,157302,157304,157306,157308,157311],{"class":93,"line":38},[91,157297,146772],{"class":250},[91,157299,296],{"class":153},[91,157301,2505],{"class":105},[91,157303,251],{"class":250},[91,157305,53902],{"class":105},[91,157307,251],{"class":250},[91,157309,157310],{"class":101},"\"请输入购买数量:\"",[91,157312,30578],{"class":250},[91,157314,157315,157318,157320,157322,157324,157326,157328,157331],{"class":93,"line":1304},[91,157316,157317],{"class":250},"discount ",[91,157319,296],{"class":153},[91,157321,109878],{"class":105},[91,157323,251],{"class":250},[91,157325,53902],{"class":105},[91,157327,251],{"class":250},[91,157329,157330],{"class":101},"\"请输入折扣:\"",[91,157332,30578],{"class":250},[91,157334,157335],{"class":93,"line":1319},[91,157336,2523],{"emptyLinePlaceholder":175},[91,157338,157339,157342,157344,157347,157349,157352,157354],{"class":93,"line":1325},[91,157340,157341],{"class":250},"total ",[91,157343,296],{"class":153},[91,157345,157346],{"class":250}," price ",[91,157348,704],{"class":153},[91,157350,157351],{"class":250}," count ",[91,157353,704],{"class":153},[91,157355,157356],{"class":250}," discount\n",[91,157358,157359],{"class":93,"line":1339},[91,157360,2523],{"emptyLinePlaceholder":175},[91,157362,157363,157365,157367,157369,157372,157374,157376,157378,157380,157382],{"class":93,"line":1345},[91,157364,30496],{"class":105},[91,157366,251],{"class":250},[91,157368,302],{"class":153},[91,157370,157371],{"class":101},"\"商品单价:",[91,157373,1145],{"class":105},[91,157375,79896],{"class":250},[91,157377,157240],{"class":153},[91,157379,1195],{"class":105},[91,157381,500],{"class":101},[91,157383,257],{"class":250},[91,157385,157386,157388,157390,157392,157395,157397,157399,157401,157403],{"class":93,"line":1436},[91,157387,30496],{"class":105},[91,157389,251],{"class":250},[91,157391,302],{"class":153},[91,157393,157394],{"class":101},"\"购买数量:",[91,157396,1145],{"class":105},[91,157398,84515],{"class":250},[91,157400,1195],{"class":105},[91,157402,500],{"class":101},[91,157404,257],{"class":250},[91,157406,157407,157409,157411,157413,157416,157418,157421,157423,157425],{"class":93,"line":1442},[91,157408,30496],{"class":105},[91,157410,251],{"class":250},[91,157412,302],{"class":153},[91,157414,157415],{"class":101},"\"折扣:",[91,157417,1145],{"class":105},[91,157419,157420],{"class":250},"discount",[91,157422,1195],{"class":105},[91,157424,500],{"class":101},[91,157426,257],{"class":250},[91,157428,157429,157431,157433,157435,157438,157440,157443,157445,157447,157449],{"class":93,"line":1454},[91,157430,30496],{"class":105},[91,157432,251],{"class":250},[91,157434,302],{"class":153},[91,157436,157437],{"class":101},"\"应付金额:",[91,157439,1145],{"class":105},[91,157441,157442],{"class":250},"total",[91,157444,157240],{"class":153},[91,157446,1195],{"class":105},[91,157448,157093],{"class":101},[91,157450,257],{"class":250},[190,157452,157454],{"id":157453},"_213-易错点","2.13 易错点",[14,157456,157457,157462,157468,157476,157479],{},[17,157458,157459,157461],{},[88,157460,157104],{}," 的结果是字符串，做运算前要转换。",[17,157463,157464,157465,28504],{},"字符串拼接时，数字要先 ",[88,157466,157467],{},"str()",[17,157469,157470,157472,157473,157475],{},[88,157471,296],{}," 是赋值，",[88,157474,3072],{}," 是比较。",[17,157477,157478],{},"Python 没有自增自减运算符。",[17,157480,157481],{},"浮点数计算可能有精度误差：",[82,157483,157485],{"className":30459,"code":157484,"language":30461,"meta":26,"style":26},"print(0.1 + 0.2)\n",[88,157486,157487],{"__ignoreMap":26},[91,157488,157489,157491,157493,157495,157497,157500],{"class":93,"line":94},[91,157490,30496],{"class":105},[91,157492,251],{"class":250},[91,157494,86291],{"class":105},[91,157496,45647],{"class":153},[91,157498,157499],{"class":105}," 0.2",[91,157501,257],{"class":250},[21,157503,157504,157505,157508],{},"金额计算如果要求严格，可以后续学习 ",[88,157506,157507],{},"decimal"," 模块。",[190,157510,157512],{"id":157511},"_214-本章练习","2.14 本章练习",[14,157514,157515,157518,157521,157524,157527],{},[17,157516,157517],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[17,157519,157520],{},"输入圆的半径，计算面积，保留两位小数。",[17,157522,157523],{},"输入工资和奖金，计算总收入。",[17,157525,157526],{},"输入摄氏温度，转换为华氏温度。",[17,157528,157529],{},"写一个 BMI 计算程序：",[82,157531,157534],{"className":157532,"code":157533,"language":5310,"meta":26},[5308],"BMI = 体重kg \u002F 身高m ** 2\n",[88,157535,157533],{"__ignoreMap":26},[168,157537,157538],{},"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":26,"searchDepth":38,"depth":38,"links":157540},[157541,157542,157543,157544,157545,157546,157547,157553,157554,157555,157560,157561,157562,157563],{"id":155102,"depth":38,"text":155103},{"id":155211,"depth":38,"text":155212},{"id":155382,"depth":38,"text":155383},{"id":155459,"depth":38,"text":155460},{"id":50812,"depth":38,"text":50813},{"id":155765,"depth":38,"text":155766},{"id":155991,"depth":38,"text":155992,"children":157548},[157549,157550,157551,157552],{"id":155995,"depth":1304,"text":155996},{"id":156189,"depth":1304,"text":156190},{"id":156277,"depth":1304,"text":156278},{"id":156383,"depth":1304,"text":156384},{"id":156492,"depth":38,"text":156493},{"id":156650,"depth":38,"text":156651},{"id":156715,"depth":38,"text":156716,"children":157556},[157557,157558,157559],{"id":156719,"depth":1304,"text":156720},{"id":156864,"depth":1304,"text":156865},{"id":156967,"depth":1304,"text":156968},{"id":157098,"depth":38,"text":157099},{"id":157250,"depth":38,"text":157251},{"id":157453,"depth":38,"text":157454},{"id":157511,"depth":38,"text":157512},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155094,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157570,"title":157571,"body":157572,"description":23500,"extension":173,"meta":159208,"navigation":175,"path":159209,"seo":159210,"stem":159211,"__hash__":159212},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157573,"toc":159189},[157574,157577,157581,157584,157599,157602,157630,157634,157684,157686,157702,157705,157731,157734,157738,157805,157808,157824,157828,157831,157949,157952,157959,158008,158014,158018,158021,158134,158137,158141,158145,158148,158198,158202,158205,158255,158259,158262,158300,158304,158307,158353,158356,158391,158395,158400,158403,158449,158451,158518,158522,158528,158639,158648,158652,158654,158665,158667,158833,158837,158839,158853,158855,159069,159073,159092,159109,159112,159158,159162,159186],[10,157575,157571],{"id":157576},"_3-判断语句",[190,157578,157580],{"id":157579},"_31-布尔值","3.1 布尔值",[21,157582,157583],{},"判断语句依赖布尔值：",[82,157585,157587],{"className":30459,"code":157586,"language":30461,"meta":26,"style":26},"True\nFalse\n",[88,157588,157589,157594],{"__ignoreMap":26},[91,157590,157591],{"class":93,"line":94},[91,157592,157593],{"class":105},"True\n",[91,157595,157596],{"class":93,"line":38},[91,157597,157598],{"class":105},"False\n",[21,157600,157601],{},"比较表达式会产生布尔值：",[82,157603,157605],{"className":30459,"code":157604,"language":30461,"meta":26,"style":26},"age = 18\nprint(age >= 18)  # True\n",[88,157606,157607,157615],{"__ignoreMap":26},[91,157608,157609,157611,157613],{"class":93,"line":94},[91,157610,146627],{"class":250},[91,157612,296],{"class":153},[91,157614,146632],{"class":105},[91,157616,157617,157619,157621,157623,157625,157627],{"class":93,"line":38},[91,157618,30496],{"class":105},[91,157620,155849],{"class":250},[91,157622,1834],{"class":153},[91,157624,156366],{"class":105},[91,157626,45889],{"class":250},[91,157628,157629],{"class":308},"# True\n",[190,157631,157633],{"id":157632},"_32-if基础语法","3.2 if基础语法",[82,157635,157637],{"className":30459,"code":157636,"language":30461,"meta":26,"style":26},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[88,157638,157639,157657,157661,157673],{"__ignoreMap":26},[91,157640,157641,157643,157645,157647,157649,157651,157653,157655],{"class":93,"line":94},[91,157642,146627],{"class":250},[91,157644,296],{"class":153},[91,157646,2505],{"class":105},[91,157648,251],{"class":250},[91,157650,53902],{"class":105},[91,157652,251],{"class":250},[91,157654,152475],{"class":101},[91,157656,30578],{"class":250},[91,157658,157659],{"class":93,"line":38},[91,157660,2523],{"emptyLinePlaceholder":175},[91,157662,157663,157665,157667,157669,157671],{"class":93,"line":1304},[91,157664,1655],{"class":153},[91,157666,15830],{"class":250},[91,157668,1834],{"class":153},[91,157670,156366],{"class":105},[91,157672,3862],{"class":250},[91,157674,157675,157677,157679,157682],{"class":93,"line":1319},[91,157676,31380],{"class":105},[91,157678,251],{"class":250},[91,157680,157681],{"class":101},"\"可以进入网吧\"",[91,157683,257],{"class":250},[21,157685,9148],{},[14,157687,157688,157693,157696,157699],{},[17,157689,157690,157692],{},[88,157691,1655],{}," 后面是条件表达式。",[17,157694,157695],{},"条件后面必须写冒号。",[17,157697,157698],{},"条件成立时执行缩进代码块。",[17,157700,157701],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[21,157703,157704],{},"错误示例：",[82,157706,157708],{"className":30459,"code":157707,"language":30461,"meta":26,"style":26},"if age >= 18\n    print(\"可以进入\")\n",[88,157709,157710,157720],{"__ignoreMap":26},[91,157711,157712,157714,157716,157718],{"class":93,"line":94},[91,157713,1655],{"class":153},[91,157715,15830],{"class":250},[91,157717,1834],{"class":153},[91,157719,146632],{"class":105},[91,157721,157722,157724,157726,157729],{"class":93,"line":38},[91,157723,31380],{"class":105},[91,157725,251],{"class":250},[91,157727,157728],{"class":101},"\"可以进入\"",[91,157730,257],{"class":250},[21,157732,157733],{},"缺少冒号。",[190,157735,157737],{"id":157736},"_33-if-else","3.3 if else",[82,157739,157741],{"className":30459,"code":157740,"language":30461,"meta":26,"style":26},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[88,157742,157743,157761,157765,157777,157788,157794],{"__ignoreMap":26},[91,157744,157745,157747,157749,157751,157753,157755,157757,157759],{"class":93,"line":94},[91,157746,146627],{"class":250},[91,157748,296],{"class":153},[91,157750,2505],{"class":105},[91,157752,251],{"class":250},[91,157754,53902],{"class":105},[91,157756,251],{"class":250},[91,157758,152475],{"class":101},[91,157760,30578],{"class":250},[91,157762,157763],{"class":93,"line":38},[91,157764,2523],{"emptyLinePlaceholder":175},[91,157766,157767,157769,157771,157773,157775],{"class":93,"line":1304},[91,157768,1655],{"class":153},[91,157770,15830],{"class":250},[91,157772,1834],{"class":153},[91,157774,156366],{"class":105},[91,157776,3862],{"class":250},[91,157778,157779,157781,157783,157786],{"class":93,"line":1319},[91,157780,31380],{"class":105},[91,157782,251],{"class":250},[91,157784,157785],{"class":101},"\"成年人\"",[91,157787,257],{"class":250},[91,157789,157790,157792],{"class":93,"line":1325},[91,157791,1825],{"class":153},[91,157793,3862],{"class":250},[91,157795,157796,157798,157800,157803],{"class":93,"line":1339},[91,157797,31380],{"class":105},[91,157799,251],{"class":250},[91,157801,157802],{"class":101},"\"未成年人\"",[91,157804,257],{"class":250},[21,157806,157807],{},"执行逻辑：",[14,157809,157810,157816,157821],{},[17,157811,157812,157813,157815],{},"条件成立，执行 ",[88,157814,1655],{}," 代码块。",[17,157817,157818,157819,157815],{},"条件不成立，执行 ",[88,157820,1825],{},[17,157822,157823],{},"两个代码块只会执行其中一个。",[190,157825,157827],{"id":157826},"_34-if-elif-else","3.4 if elif else",[21,157829,157830],{},"多条件判断：",[82,157832,157834],{"className":30459,"code":157833,"language":30461,"meta":26,"style":26},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[88,157835,157836,157854,157858,157872,157883,157897,157908,157921,157932,157938],{"__ignoreMap":26},[91,157837,157838,157840,157842,157844,157846,157848,157850,157852],{"class":93,"line":94},[91,157839,155439],{"class":250},[91,157841,296],{"class":153},[91,157843,2505],{"class":105},[91,157845,251],{"class":250},[91,157847,53902],{"class":105},[91,157849,251],{"class":250},[91,157851,152490],{"class":101},[91,157853,30578],{"class":250},[91,157855,157856],{"class":93,"line":38},[91,157857,2523],{"emptyLinePlaceholder":175},[91,157859,157860,157862,157865,157867,157870],{"class":93,"line":1304},[91,157861,1655],{"class":153},[91,157863,157864],{"class":250}," score ",[91,157866,1834],{"class":153},[91,157868,157869],{"class":105}," 90",[91,157871,3862],{"class":250},[91,157873,157874,157876,157878,157881],{"class":93,"line":1319},[91,157875,31380],{"class":105},[91,157877,251],{"class":250},[91,157879,157880],{"class":101},"\"优秀\"",[91,157882,257],{"class":250},[91,157884,157885,157888,157890,157892,157895],{"class":93,"line":1325},[91,157886,157887],{"class":153},"elif",[91,157889,157864],{"class":250},[91,157891,1834],{"class":153},[91,157893,157894],{"class":105}," 80",[91,157896,3862],{"class":250},[91,157898,157899,157901,157903,157906],{"class":93,"line":1339},[91,157900,31380],{"class":105},[91,157902,251],{"class":250},[91,157904,157905],{"class":101},"\"良好\"",[91,157907,257],{"class":250},[91,157909,157910,157912,157914,157916,157919],{"class":93,"line":1345},[91,157911,157887],{"class":153},[91,157913,157864],{"class":250},[91,157915,1834],{"class":153},[91,157917,157918],{"class":105}," 60",[91,157920,3862],{"class":250},[91,157922,157923,157925,157927,157930],{"class":93,"line":1436},[91,157924,31380],{"class":105},[91,157926,251],{"class":250},[91,157928,157929],{"class":101},"\"及格\"",[91,157931,257],{"class":250},[91,157933,157934,157936],{"class":93,"line":1442},[91,157935,1825],{"class":153},[91,157937,3862],{"class":250},[91,157939,157940,157942,157944,157947],{"class":93,"line":1454},[91,157941,31380],{"class":105},[91,157943,251],{"class":250},[91,157945,157946],{"class":101},"\"不及格\"",[91,157948,257],{"class":250},[21,157950,157951],{},"注意判断顺序很重要。",[21,157953,157954,157955,157958],{},"如果把 ",[88,157956,157957],{},"score >= 60"," 放在最前面：",[82,157960,157962],{"className":30459,"code":157961,"language":30461,"meta":26,"style":26},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[88,157963,157964,157976,157986,157998],{"__ignoreMap":26},[91,157965,157966,157968,157970,157972,157974],{"class":93,"line":94},[91,157967,1655],{"class":153},[91,157969,157864],{"class":250},[91,157971,1834],{"class":153},[91,157973,157918],{"class":105},[91,157975,3862],{"class":250},[91,157977,157978,157980,157982,157984],{"class":93,"line":38},[91,157979,31380],{"class":105},[91,157981,251],{"class":250},[91,157983,157929],{"class":101},[91,157985,257],{"class":250},[91,157987,157988,157990,157992,157994,157996],{"class":93,"line":1304},[91,157989,157887],{"class":153},[91,157991,157864],{"class":250},[91,157993,1834],{"class":153},[91,157995,157869],{"class":105},[91,157997,3862],{"class":250},[91,157999,158000,158002,158004,158006],{"class":93,"line":1319},[91,158001,31380],{"class":105},[91,158003,251],{"class":250},[91,158005,157880],{"class":101},[91,158007,257],{"class":250},[21,158009,158010,158011,158013],{},"成绩 95 会先满足 ",[88,158012,157957],{},"，后面的优秀分支就不会执行。",[190,158015,158017],{"id":158016},"_35-判断语句嵌套","3.5 判断语句嵌套",[21,158019,158020],{},"嵌套判断就是在一个判断内部再写判断。",[82,158022,158024],{"className":30459,"code":158023,"language":30461,"meta":26,"style":26},"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",[88,158025,158026,158044,158059,158063,158075,158089,158099,158106,158117,158123],{"__ignoreMap":26},[91,158027,158028,158030,158032,158034,158036,158038,158040,158042],{"class":93,"line":94},[91,158029,146627],{"class":250},[91,158031,296],{"class":153},[91,158033,2505],{"class":105},[91,158035,251],{"class":250},[91,158037,53902],{"class":105},[91,158039,251],{"class":250},[91,158041,152475],{"class":101},[91,158043,30578],{"class":250},[91,158045,158046,158048,158050,158052,158054,158057],{"class":93,"line":38},[91,158047,156442],{"class":250},[91,158049,296],{"class":153},[91,158051,60686],{"class":105},[91,158053,251],{"class":250},[91,158055,158056],{"class":101},"\"是否有票(y\u002Fn):\"",[91,158058,257],{"class":250},[91,158060,158061],{"class":93,"line":1304},[91,158062,2523],{"emptyLinePlaceholder":175},[91,158064,158065,158067,158069,158071,158073],{"class":93,"line":1319},[91,158066,1655],{"class":153},[91,158068,15830],{"class":250},[91,158070,1834],{"class":153},[91,158072,156366],{"class":105},[91,158074,3862],{"class":250},[91,158076,158077,158079,158082,158084,158087],{"class":93,"line":1325},[91,158078,3224],{"class":153},[91,158080,158081],{"class":250}," has_ticket ",[91,158083,3072],{"class":153},[91,158085,158086],{"class":101}," \"y\"",[91,158088,3862],{"class":250},[91,158090,158091,158093,158095,158097],{"class":93,"line":1339},[91,158092,32532],{"class":105},[91,158094,251],{"class":250},[91,158096,157728],{"class":101},[91,158098,257],{"class":250},[91,158100,158101,158104],{"class":93,"line":1345},[91,158102,158103],{"class":153},"    else",[91,158105,3862],{"class":250},[91,158107,158108,158110,158112,158115],{"class":93,"line":1436},[91,158109,32532],{"class":105},[91,158111,251],{"class":250},[91,158113,158114],{"class":101},"\"请先买票\"",[91,158116,257],{"class":250},[91,158118,158119,158121],{"class":93,"line":1442},[91,158120,1825],{"class":153},[91,158122,3862],{"class":250},[91,158124,158125,158127,158129,158132],{"class":93,"line":1454},[91,158126,31380],{"class":105},[91,158128,251],{"class":250},[91,158130,158131],{"class":101},"\"未成年人禁止进入\"",[91,158133,257],{"class":250},[21,158135,158136],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[190,158138,158140],{"id":158139},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[217,158142,158144],{"id":158143},"_361-and","3.6.1 and",[21,158146,158147],{},"两个条件都成立才成立。",[82,158149,158151],{"className":30459,"code":158150,"language":30461,"meta":26,"style":26},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[88,158152,158153,158161,158169,158173,158188],{"__ignoreMap":26},[91,158154,158155,158157,158159],{"class":93,"line":94},[91,158156,146627],{"class":250},[91,158158,296],{"class":153},[91,158160,88146],{"class":105},[91,158162,158163,158165,158167],{"class":93,"line":38},[91,158164,156442],{"class":250},[91,158166,296],{"class":153},[91,158168,153680],{"class":105},[91,158170,158171],{"class":93,"line":1304},[91,158172,2523],{"emptyLinePlaceholder":175},[91,158174,158175,158177,158179,158181,158183,158185],{"class":93,"line":1319},[91,158176,1655],{"class":153},[91,158178,15830],{"class":250},[91,158180,1834],{"class":153},[91,158182,156366],{"class":105},[91,158184,120510],{"class":153},[91,158186,158187],{"class":250}," has_ticket:\n",[91,158189,158190,158192,158194,158196],{"class":93,"line":1325},[91,158191,31380],{"class":105},[91,158193,251],{"class":250},[91,158195,157728],{"class":101},[91,158197,257],{"class":250},[217,158199,158201],{"id":158200},"_362-or","3.6.2 or",[21,158203,158204],{},"只要一个条件成立就成立。",[82,158206,158208],{"className":30459,"code":158207,"language":30461,"meta":26,"style":26},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[88,158209,158210,158219,158228,158232,158244],{"__ignoreMap":26},[91,158211,158212,158215,158217],{"class":93,"line":94},[91,158213,158214],{"class":250},"is_vip ",[91,158216,296],{"class":153},[91,158218,125888],{"class":105},[91,158220,158221,158224,158226],{"class":93,"line":38},[91,158222,158223],{"class":250},"coupon ",[91,158225,296],{"class":153},[91,158227,153680],{"class":105},[91,158229,158230],{"class":93,"line":1304},[91,158231,2523],{"emptyLinePlaceholder":175},[91,158233,158234,158236,158239,158241],{"class":93,"line":1319},[91,158235,1655],{"class":153},[91,158237,158238],{"class":250}," is_vip ",[91,158240,115171],{"class":153},[91,158242,158243],{"class":250}," coupon:\n",[91,158245,158246,158248,158250,158253],{"class":93,"line":1325},[91,158247,31380],{"class":105},[91,158249,251],{"class":250},[91,158251,158252],{"class":101},"\"可以享受优惠\"",[91,158254,257],{"class":250},[217,158256,158258],{"id":158257},"_363-not","3.6.3 not",[21,158260,158261],{},"取反。",[82,158263,158265],{"className":30459,"code":158264,"language":30461,"meta":26,"style":26},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[88,158266,158267,158276,158280,158289],{"__ignoreMap":26},[91,158268,158269,158272,158274],{"class":93,"line":94},[91,158270,158271],{"class":250},"is_closed ",[91,158273,296],{"class":153},[91,158275,125888],{"class":105},[91,158277,158278],{"class":93,"line":38},[91,158279,2523],{"emptyLinePlaceholder":175},[91,158281,158282,158284,158286],{"class":93,"line":1304},[91,158283,1655],{"class":153},[91,158285,39011],{"class":153},[91,158287,158288],{"class":250}," is_closed:\n",[91,158290,158291,158293,158295,158298],{"class":93,"line":1319},[91,158292,31380],{"class":105},[91,158294,251],{"class":250},[91,158296,158297],{"class":101},"\"店铺营业中\"",[91,158299,257],{"class":250},[190,158301,158303],{"id":158302},"_37-链式比较","3.7 链式比较",[21,158305,158306],{},"Python 支持链式比较：",[82,158308,158310],{"className":30459,"code":158309,"language":30461,"meta":26,"style":26},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[88,158311,158312,158321,158325,158342],{"__ignoreMap":26},[91,158313,158314,158316,158318],{"class":93,"line":94},[91,158315,155439],{"class":250},[91,158317,296],{"class":153},[91,158319,158320],{"class":105}," 85\n",[91,158322,158323],{"class":93,"line":38},[91,158324,2523],{"emptyLinePlaceholder":175},[91,158326,158327,158329,158331,158334,158336,158338,158340],{"class":93,"line":1304},[91,158328,1655],{"class":153},[91,158330,4216],{"class":105},[91,158332,158333],{"class":153}," \u003C=",[91,158335,157864],{"class":250},[91,158337,1712],{"class":153},[91,158339,5877],{"class":105},[91,158341,3862],{"class":250},[91,158343,158344,158346,158348,158351],{"class":93,"line":1319},[91,158345,31380],{"class":105},[91,158347,251],{"class":250},[91,158349,158350],{"class":101},"\"成绩合法\"",[91,158352,257],{"class":250},[21,158354,158355],{},"等价于：",[82,158357,158359],{"className":30459,"code":158358,"language":30461,"meta":26,"style":26},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[88,158360,158361,158381],{"__ignoreMap":26},[91,158362,158363,158365,158367,158369,158371,158373,158375,158377,158379],{"class":93,"line":94},[91,158364,1655],{"class":153},[91,158366,157864],{"class":250},[91,158368,1834],{"class":153},[91,158370,4216],{"class":105},[91,158372,120510],{"class":153},[91,158374,157864],{"class":250},[91,158376,1712],{"class":153},[91,158378,5877],{"class":105},[91,158380,3862],{"class":250},[91,158382,158383,158385,158387,158389],{"class":93,"line":38},[91,158384,31380],{"class":105},[91,158386,251],{"class":250},[91,158388,158350],{"class":101},[91,158390,257],{"class":250},[190,158392,158394],{"id":158393},"_38-真值和假值","3.8 真值和假值",[21,158396,116548,158397,158399],{},[88,158398,1655],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[21,158401,158402],{},"假值：",[82,158404,158406],{"className":30459,"code":158405,"language":30461,"meta":26,"style":26},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[88,158407,158408,158412,158417,158421,158425,158430,158434,158438,158443],{"__ignoreMap":26},[91,158409,158410],{"class":93,"line":94},[91,158411,157598],{"class":105},[91,158413,158414],{"class":93,"line":38},[91,158415,158416],{"class":105},"None\n",[91,158418,158419],{"class":93,"line":1304},[91,158420,3208],{"class":105},[91,158422,158423],{"class":93,"line":1319},[91,158424,32423],{"class":105},[91,158426,158427],{"class":93,"line":1325},[91,158428,158429],{"class":101},"\"\"\n",[91,158431,158432],{"class":93,"line":1339},[91,158433,32438],{"class":250},[91,158435,158436],{"class":93,"line":1345},[91,158437,2099],{"class":250},[91,158439,158440],{"class":93,"line":1436},[91,158441,158442],{"class":250},"{}\n",[91,158444,158445,158447],{"class":93,"line":1442},[91,158446,155371],{"class":105},[91,158448,2099],{"class":250},[21,158450,15258],{},[82,158452,158454],{"className":30459,"code":158453,"language":30461,"meta":26,"style":26},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[88,158455,158456,158470,158474,158481,158501,158507],{"__ignoreMap":26},[91,158457,158458,158460,158462,158464,158466,158468],{"class":93,"line":94},[91,158459,146617],{"class":250},[91,158461,296],{"class":153},[91,158463,60686],{"class":105},[91,158465,251],{"class":250},[91,158467,152460],{"class":101},[91,158469,257],{"class":250},[91,158471,158472],{"class":93,"line":38},[91,158473,2523],{"emptyLinePlaceholder":175},[91,158475,158476,158478],{"class":93,"line":1304},[91,158477,1655],{"class":153},[91,158479,158480],{"class":250}," name:\n",[91,158482,158483,158485,158487,158489,158491,158493,158495,158497,158499],{"class":93,"line":1319},[91,158484,31380],{"class":105},[91,158486,251],{"class":250},[91,158488,302],{"class":153},[91,158490,157135],{"class":101},[91,158492,1145],{"class":105},[91,158494,79891],{"class":250},[91,158496,1195],{"class":105},[91,158498,500],{"class":101},[91,158500,257],{"class":250},[91,158502,158503,158505],{"class":93,"line":1325},[91,158504,1825],{"class":153},[91,158506,3862],{"class":250},[91,158508,158509,158511,158513,158516],{"class":93,"line":1339},[91,158510,31380],{"class":105},[91,158512,251],{"class":250},[91,158514,158515],{"class":101},"\"姓名不能为空\"",[91,158517,257],{"class":250},[190,158519,158521],{"id":158520},"_39-match语句","3.9 match语句",[21,158523,158524,158525,158527],{},"Python 3.10 开始支持 ",[88,158526,71346],{},"。它适合处理固定选项。",[82,158529,158531],{"className":30459,"code":158530,"language":30461,"meta":26,"style":26},"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",[88,158532,158533,158549,158553,158560,158570,158581,158590,158601,158610,158621,158628],{"__ignoreMap":26},[91,158534,158535,158538,158540,158542,158544,158547],{"class":93,"line":94},[91,158536,158537],{"class":250},"command ",[91,158539,296],{"class":153},[91,158541,60686],{"class":105},[91,158543,251],{"class":250},[91,158545,158546],{"class":101},"\"请输入命令:\"",[91,158548,257],{"class":250},[91,158550,158551],{"class":93,"line":38},[91,158552,2523],{"emptyLinePlaceholder":175},[91,158554,158555,158557],{"class":93,"line":1304},[91,158556,71346],{"class":153},[91,158558,158559],{"class":250}," command:\n",[91,158561,158562,158565,158568],{"class":93,"line":1319},[91,158563,158564],{"class":153},"    case",[91,158566,158567],{"class":101}," \"start\"",[91,158569,3862],{"class":250},[91,158571,158572,158574,158576,158579],{"class":93,"line":1325},[91,158573,32532],{"class":105},[91,158575,251],{"class":250},[91,158577,158578],{"class":101},"\"启动\"",[91,158580,257],{"class":250},[91,158582,158583,158585,158588],{"class":93,"line":1339},[91,158584,158564],{"class":153},[91,158586,158587],{"class":101}," \"stop\"",[91,158589,3862],{"class":250},[91,158591,158592,158594,158596,158599],{"class":93,"line":1345},[91,158593,32532],{"class":105},[91,158595,251],{"class":250},[91,158597,158598],{"class":101},"\"停止\"",[91,158600,257],{"class":250},[91,158602,158603,158605,158608],{"class":93,"line":1436},[91,158604,158564],{"class":153},[91,158606,158607],{"class":101}," \"restart\"",[91,158609,3862],{"class":250},[91,158611,158612,158614,158616,158619],{"class":93,"line":1442},[91,158613,32532],{"class":105},[91,158615,251],{"class":250},[91,158617,158618],{"class":101},"\"重启\"",[91,158620,257],{"class":250},[91,158622,158623,158625],{"class":93,"line":1454},[91,158624,158564],{"class":153},[91,158626,158627],{"class":250}," _:\n",[91,158629,158630,158632,158634,158637],{"class":93,"line":1736},[91,158631,32532],{"class":105},[91,158633,251],{"class":250},[91,158635,158636],{"class":101},"\"未知命令\"",[91,158638,257],{"class":250},[21,158640,158641,158642,158644,158645,158647],{},"入门阶段掌握 ",[88,158643,154739],{}," 更重要，",[88,158646,71346],{}," 可以作为补充。",[190,158649,158651],{"id":158650},"_310-小案例成绩等级","3.10 小案例：成绩等级",[21,158653,123373],{},[14,158655,158656,158659,158662],{},[17,158657,158658],{},"输入成绩。",[17,158660,158661],{},"判断成绩是否合法。",[17,158663,158664],{},"输出等级。",[21,158666,10158],{},[82,158668,158670],{"className":30459,"code":158669,"language":30461,"meta":26,"style":26},"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",[88,158671,158672,158690,158694,158712,158723,158735,158746,158758,158769,158782,158793,158805,158816,158822],{"__ignoreMap":26},[91,158673,158674,158676,158678,158680,158682,158684,158686,158688],{"class":93,"line":94},[91,158675,155439],{"class":250},[91,158677,296],{"class":153},[91,158679,109878],{"class":105},[91,158681,251],{"class":250},[91,158683,53902],{"class":105},[91,158685,251],{"class":250},[91,158687,152490],{"class":101},[91,158689,30578],{"class":250},[91,158691,158692],{"class":93,"line":38},[91,158693,2523],{"emptyLinePlaceholder":175},[91,158695,158696,158698,158700,158702,158704,158706,158708,158710],{"class":93,"line":1304},[91,158697,1655],{"class":153},[91,158699,39011],{"class":153},[91,158701,4216],{"class":105},[91,158703,158333],{"class":153},[91,158705,157864],{"class":250},[91,158707,1712],{"class":153},[91,158709,5877],{"class":105},[91,158711,3862],{"class":250},[91,158713,158714,158716,158718,158721],{"class":93,"line":1319},[91,158715,31380],{"class":105},[91,158717,251],{"class":250},[91,158719,158720],{"class":101},"\"成绩不合法\"",[91,158722,257],{"class":250},[91,158724,158725,158727,158729,158731,158733],{"class":93,"line":1325},[91,158726,157887],{"class":153},[91,158728,157864],{"class":250},[91,158730,1834],{"class":153},[91,158732,157869],{"class":105},[91,158734,3862],{"class":250},[91,158736,158737,158739,158741,158744],{"class":93,"line":1339},[91,158738,31380],{"class":105},[91,158740,251],{"class":250},[91,158742,158743],{"class":101},"\"等级:A\"",[91,158745,257],{"class":250},[91,158747,158748,158750,158752,158754,158756],{"class":93,"line":1345},[91,158749,157887],{"class":153},[91,158751,157864],{"class":250},[91,158753,1834],{"class":153},[91,158755,157894],{"class":105},[91,158757,3862],{"class":250},[91,158759,158760,158762,158764,158767],{"class":93,"line":1436},[91,158761,31380],{"class":105},[91,158763,251],{"class":250},[91,158765,158766],{"class":101},"\"等级:B\"",[91,158768,257],{"class":250},[91,158770,158771,158773,158775,158777,158780],{"class":93,"line":1442},[91,158772,157887],{"class":153},[91,158774,157864],{"class":250},[91,158776,1834],{"class":153},[91,158778,158779],{"class":105}," 70",[91,158781,3862],{"class":250},[91,158783,158784,158786,158788,158791],{"class":93,"line":1454},[91,158785,31380],{"class":105},[91,158787,251],{"class":250},[91,158789,158790],{"class":101},"\"等级:C\"",[91,158792,257],{"class":250},[91,158794,158795,158797,158799,158801,158803],{"class":93,"line":1736},[91,158796,157887],{"class":153},[91,158798,157864],{"class":250},[91,158800,1834],{"class":153},[91,158802,157918],{"class":105},[91,158804,3862],{"class":250},[91,158806,158807,158809,158811,158814],{"class":93,"line":1741},[91,158808,31380],{"class":105},[91,158810,251],{"class":250},[91,158812,158813],{"class":101},"\"等级:D\"",[91,158815,257],{"class":250},[91,158817,158818,158820],{"class":93,"line":1747},[91,158819,1825],{"class":153},[91,158821,3862],{"class":250},[91,158823,158824,158826,158828,158831],{"class":93,"line":1752},[91,158825,31380],{"class":105},[91,158827,251],{"class":250},[91,158829,158830],{"class":101},"\"等级:E\"",[91,158832,257],{"class":250},[190,158834,158836],{"id":158835},"_311-小案例会员折扣","3.11 小案例：会员折扣",[21,158838,123373],{},[14,158840,158841,158844,158847,158850],{},[17,158842,158843],{},"输入消费金额。",[17,158845,158846],{},"输入会员等级，普通、银卡、金卡。",[17,158848,158849],{},"普通不打折，银卡 9 折，金卡 8 折。",[17,158851,158852],{},"满 500 再减 50。",[21,158854,10158],{},[82,158856,158858],{"className":30459,"code":158857,"language":30461,"meta":26,"style":26},"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",[88,158859,158860,158880,158896,158900,158908,158912,158926,158936,158949,158958,158971,158979,158985,158996,159000,159014,159018,159032,159042,159046],{"__ignoreMap":26},[91,158861,158862,158865,158867,158869,158871,158873,158875,158878],{"class":93,"line":94},[91,158863,158864],{"class":250},"amount ",[91,158866,296],{"class":153},[91,158868,109878],{"class":105},[91,158870,251],{"class":250},[91,158872,53902],{"class":105},[91,158874,251],{"class":250},[91,158876,158877],{"class":101},"\"请输入消费金额:\"",[91,158879,30578],{"class":250},[91,158881,158882,158885,158887,158889,158891,158894],{"class":93,"line":38},[91,158883,158884],{"class":250},"level ",[91,158886,296],{"class":153},[91,158888,60686],{"class":105},[91,158890,251],{"class":250},[91,158892,158893],{"class":101},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[91,158895,257],{"class":250},[91,158897,158898],{"class":93,"line":1304},[91,158899,2523],{"emptyLinePlaceholder":175},[91,158901,158902,158904,158906],{"class":93,"line":1319},[91,158903,157317],{"class":250},[91,158905,296],{"class":153},[91,158907,55780],{"class":105},[91,158909,158910],{"class":93,"line":1325},[91,158911,2523],{"emptyLinePlaceholder":175},[91,158913,158914,158916,158919,158921,158924],{"class":93,"line":1339},[91,158915,1655],{"class":153},[91,158917,158918],{"class":250}," level ",[91,158920,3072],{"class":153},[91,158922,158923],{"class":101}," \"银卡\"",[91,158925,3862],{"class":250},[91,158927,158928,158931,158933],{"class":93,"line":1345},[91,158929,158930],{"class":250},"    discount ",[91,158932,296],{"class":153},[91,158934,158935],{"class":105}," 0.9\n",[91,158937,158938,158940,158942,158944,158947],{"class":93,"line":1436},[91,158939,157887],{"class":153},[91,158941,158918],{"class":250},[91,158943,3072],{"class":153},[91,158945,158946],{"class":101}," \"金卡\"",[91,158948,3862],{"class":250},[91,158950,158951,158953,158955],{"class":93,"line":1442},[91,158952,158930],{"class":250},[91,158954,296],{"class":153},[91,158956,158957],{"class":105}," 0.8\n",[91,158959,158960,158962,158964,158966,158969],{"class":93,"line":1454},[91,158961,157887],{"class":153},[91,158963,158918],{"class":250},[91,158965,3072],{"class":153},[91,158967,158968],{"class":101}," \"普通\"",[91,158970,3862],{"class":250},[91,158972,158973,158975,158977],{"class":93,"line":1736},[91,158974,158930],{"class":250},[91,158976,296],{"class":153},[91,158978,55780],{"class":105},[91,158980,158981,158983],{"class":93,"line":1741},[91,158982,1825],{"class":153},[91,158984,3862],{"class":250},[91,158986,158987,158989,158991,158994],{"class":93,"line":1747},[91,158988,31380],{"class":105},[91,158990,251],{"class":250},[91,158992,158993],{"class":101},"\"会员等级输入错误，按普通会员计算\"",[91,158995,257],{"class":250},[91,158997,158998],{"class":93,"line":1752},[91,158999,2523],{"emptyLinePlaceholder":175},[91,159001,159002,159005,159007,159010,159012],{"class":93,"line":1766},[91,159003,159004],{"class":250},"pay ",[91,159006,296],{"class":153},[91,159008,159009],{"class":250}," amount ",[91,159011,704],{"class":153},[91,159013,157356],{"class":250},[91,159015,159016],{"class":93,"line":1771},[91,159017,2523],{"emptyLinePlaceholder":175},[91,159019,159020,159022,159025,159027,159030],{"class":93,"line":1777},[91,159021,1655],{"class":153},[91,159023,159024],{"class":250}," pay ",[91,159026,1834],{"class":153},[91,159028,159029],{"class":105}," 500",[91,159031,3862],{"class":250},[91,159033,159034,159037,159039],{"class":93,"line":1798},[91,159035,159036],{"class":250},"    pay ",[91,159038,150333],{"class":153},[91,159040,159041],{"class":105}," 50\n",[91,159043,159044],{"class":93,"line":1803},[91,159045,2523],{"emptyLinePlaceholder":175},[91,159047,159048,159050,159052,159054,159056,159058,159061,159063,159065,159067],{"class":93,"line":1817},[91,159049,30496],{"class":105},[91,159051,251],{"class":250},[91,159053,302],{"class":153},[91,159055,157437],{"class":101},[91,159057,1145],{"class":105},[91,159059,159060],{"class":250},"pay",[91,159062,157240],{"class":153},[91,159064,1195],{"class":105},[91,159066,157093],{"class":101},[91,159068,257],{"class":250},[190,159070,159072],{"id":159071},"_312-易错点","3.12 易错点",[14,159074,159075,159078,159081,159084,159089],{},[17,159076,159077],{},"冒号不能漏。",[17,159079,159080],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[17,159082,159083],{},"多分支判断要注意顺序。",[17,159085,159086,159087,28504],{},"判断相等用 ",[88,159088,3072],{},[17,159090,159091],{},"字符串比较区分大小写：",[82,159093,159095],{"className":30459,"code":159094,"language":30461,"meta":26,"style":26},"\"Y\" == \"y\"  # False\n",[88,159096,159097],{"__ignoreMap":26},[91,159098,159099,159102,159104,159106],{"class":93,"line":94},[91,159100,159101],{"class":101},"\"Y\"",[91,159103,101640],{"class":153},[91,159105,158086],{"class":101},[91,159107,159108],{"class":308},"  # False\n",[21,159110,159111],{},"可转换后再判断：",[82,159113,159115],{"className":30459,"code":159114,"language":30461,"meta":26,"style":26},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[88,159116,159117,159134,159147],{"__ignoreMap":26},[91,159118,159119,159122,159124,159126,159128,159131],{"class":93,"line":94},[91,159120,159121],{"class":250},"answer ",[91,159123,296],{"class":153},[91,159125,60686],{"class":105},[91,159127,251],{"class":250},[91,159129,159130],{"class":101},"\"是否继续(y\u002Fn):\"",[91,159132,159133],{"class":250},").lower()\n",[91,159135,159136,159138,159141,159143,159145],{"class":93,"line":38},[91,159137,1655],{"class":153},[91,159139,159140],{"class":250}," answer ",[91,159142,3072],{"class":153},[91,159144,158086],{"class":101},[91,159146,3862],{"class":250},[91,159148,159149,159151,159153,159156],{"class":93,"line":1304},[91,159150,31380],{"class":105},[91,159152,251],{"class":250},[91,159154,159155],{"class":101},"\"继续\"",[91,159157,257],{"class":250},[190,159159,159161],{"id":159160},"_313-本章练习","3.13 本章练习",[14,159163,159164,159167,159170,159173,159183],{},[17,159165,159166],{},"输入年龄，判断是否成年。",[17,159168,159169],{},"输入年份，判断是否为闰年。",[17,159171,159172],{},"输入三个数字，输出最大值。",[17,159174,159175,159176,159179,159180,159182],{},"写登录判断：用户名是 ",[88,159177,159178],{},"admin"," 且密码是 ",[88,159181,15207],{}," 才登录成功。",[17,159184,159185],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[168,159187,159188],{},"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":26,"searchDepth":38,"depth":38,"links":159190},[159191,159192,159193,159194,159195,159196,159201,159202,159203,159204,159205,159206,159207],{"id":157579,"depth":38,"text":157580},{"id":157632,"depth":38,"text":157633},{"id":157736,"depth":38,"text":157737},{"id":157826,"depth":38,"text":157827},{"id":158016,"depth":38,"text":158017},{"id":158139,"depth":38,"text":158140,"children":159197},[159198,159199,159200],{"id":158143,"depth":1304,"text":158144},{"id":158200,"depth":1304,"text":158201},{"id":158257,"depth":1304,"text":158258},{"id":158302,"depth":38,"text":158303},{"id":158393,"depth":38,"text":158394},{"id":158520,"depth":38,"text":158521},{"id":158650,"depth":38,"text":158651},{"id":158835,"depth":38,"text":158836},{"id":159071,"depth":38,"text":159072},{"id":159160,"depth":38,"text":159161},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157571,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159214,"title":159215,"body":159216,"description":23500,"extension":173,"meta":160985,"navigation":175,"path":160986,"seo":160987,"stem":160988,"__hash__":160989},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159217,"toc":160965},[159218,159221,159225,159231,159234,159251,159255,159257,159274,159276,159321,159323,159340,159344,159347,159413,159416,159434,159438,159599,159608,159612,159616,159621,159668,159670,159676,159680,159685,159732,159734,159740,159744,159749,159785,159788,159835,159839,159845,159903,159908,159939,159944,159948,160003,160006,160078,160081,160140,160144,160147,160222,160225,160229,160335,160338,160364,160368,160380,160449,160452,160544,160548,160550,160561,160563,160693,160697,160899,160907,160911,160941,160945,160962],[10,159219,159215],{"id":159220},"_4-循环语句",[190,159222,159224],{"id":159223},"_41-为什么需要循环","4.1 为什么需要循环",[21,159226,159227,159228,159230],{},"如果要输出 1 到 100，不应该写 100 行 ",[88,159229,146553],{},"，而应该用循环。",[21,159232,159233],{},"循环适合处理重复任务：",[14,159235,159236,159239,159242,159245,159248],{},[17,159237,159238],{},"重复输出。",[17,159240,159241],{},"重复输入。",[17,159243,159244],{},"遍历数据。",[17,159246,159247],{},"持续执行菜单。",[17,159249,159250],{},"批量处理文件或数据。",[190,159252,159254],{"id":159253},"_42-while循环","4.2 while循环",[21,159256,5304],{},[82,159258,159260],{"className":30459,"code":159259,"language":30461,"meta":26,"style":26},"while 条件:\n    循环体\n",[88,159261,159262,159269],{"__ignoreMap":26},[91,159263,159264,159266],{"class":93,"line":94},[91,159265,108744],{"class":153},[91,159267,159268],{"class":250}," 条件:\n",[91,159270,159271],{"class":93,"line":38},[91,159272,159273],{"class":250},"    循环体\n",[21,159275,15258],{},[82,159277,159279],{"className":30459,"code":159278,"language":30461,"meta":26,"style":26},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[88,159280,159281,159289,159293,159305,159312],{"__ignoreMap":26},[91,159282,159283,159285,159287],{"class":93,"line":94},[91,159284,100229],{"class":250},[91,159286,296],{"class":153},[91,159288,55780],{"class":105},[91,159290,159291],{"class":93,"line":38},[91,159292,2523],{"emptyLinePlaceholder":175},[91,159294,159295,159297,159299,159301,159303],{"class":93,"line":1304},[91,159296,108744],{"class":153},[91,159298,9561],{"class":250},[91,159300,1712],{"class":153},[91,159302,2271],{"class":105},[91,159304,3862],{"class":250},[91,159306,159307,159309],{"class":93,"line":1319},[91,159308,31380],{"class":105},[91,159310,159311],{"class":250},"(i)\n",[91,159313,159314,159317,159319],{"class":93,"line":1325},[91,159315,159316],{"class":250},"    i ",[91,159318,9600],{"class":153},[91,159320,55780],{"class":105},[21,159322,81010],{},[14,159324,159325,159331,159334,159337],{},[17,159326,159327,159328,28504],{},"判断条件 ",[88,159329,159330],{},"i \u003C= 5",[17,159332,159333],{},"条件成立，执行循环体。",[17,159335,159336],{},"执行完后回到条件判断。",[17,159338,159339],{},"条件不成立，退出循环。",[190,159341,159343],{"id":159342},"_43-while累加","4.3 while累加",[21,159345,159346],{},"计算 1 到 100 的和：",[82,159348,159350],{"className":30459,"code":159349,"language":30461,"meta":26,"style":26},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[88,159351,159352,159360,159368,159372,159384,159394,159402,159406],{"__ignoreMap":26},[91,159353,159354,159356,159358],{"class":93,"line":94},[91,159355,100229],{"class":250},[91,159357,296],{"class":153},[91,159359,55780],{"class":105},[91,159361,159362,159364,159366],{"class":93,"line":38},[91,159363,157341],{"class":250},[91,159365,296],{"class":153},[91,159367,47414],{"class":105},[91,159369,159370],{"class":93,"line":1304},[91,159371,2523],{"emptyLinePlaceholder":175},[91,159373,159374,159376,159378,159380,159382],{"class":93,"line":1319},[91,159375,108744],{"class":153},[91,159377,9561],{"class":250},[91,159379,1712],{"class":153},[91,159381,5877],{"class":105},[91,159383,3862],{"class":250},[91,159385,159386,159389,159391],{"class":93,"line":1325},[91,159387,159388],{"class":250},"    total ",[91,159390,9600],{"class":153},[91,159392,159393],{"class":250}," i\n",[91,159395,159396,159398,159400],{"class":93,"line":1339},[91,159397,159316],{"class":250},[91,159399,9600],{"class":153},[91,159401,55780],{"class":105},[91,159403,159404],{"class":93,"line":1345},[91,159405,2523],{"emptyLinePlaceholder":175},[91,159407,159408,159410],{"class":93,"line":1436},[91,159409,30496],{"class":105},[91,159411,159412],{"class":250},"(total)\n",[21,159414,159415],{},"核心思想：",[14,159417,159418,159423,159428],{},[17,159419,159420,159422],{},[88,159421,690],{}," 控制循环次数。",[17,159424,159425,159427],{},[88,159426,157442],{}," 保存累加结果。",[17,159429,159430,159431,159433],{},"每轮循环都要更新 ",[88,159432,690],{},"，否则可能死循环。",[190,159435,159437],{"id":159436},"_44-while猜数字","4.4 while猜数字",[82,159439,159441],{"className":30459,"code":159440,"language":30461,"meta":26,"style":26},"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",[88,159442,159443,159449,159453,159470,159478,159482,159490,159510,159519,159523,159535,159546,159556,159567,159573,159595],{"__ignoreMap":26},[91,159444,159445,159447],{"class":93,"line":94},[91,159446,30473],{"class":153},[91,159448,45409],{"class":250},[91,159450,159451],{"class":93,"line":38},[91,159452,2523],{"emptyLinePlaceholder":175},[91,159454,159455,159457,159459,159462,159464,159466,159468],{"class":93,"line":1304},[91,159456,159121],{"class":250},[91,159458,296],{"class":153},[91,159460,159461],{"class":250}," random.randint(",[91,159463,466],{"class":105},[91,159465,12558],{"class":250},[91,159467,560],{"class":105},[91,159469,257],{"class":250},[91,159471,159472,159474,159476],{"class":93,"line":1319},[91,159473,146772],{"class":250},[91,159475,296],{"class":153},[91,159477,47414],{"class":105},[91,159479,159480],{"class":93,"line":1325},[91,159481,2523],{"emptyLinePlaceholder":175},[91,159483,159484,159486,159488],{"class":93,"line":1339},[91,159485,108744],{"class":153},[91,159487,95373],{"class":105},[91,159489,3862],{"class":250},[91,159491,159492,159495,159497,159499,159501,159503,159505,159508],{"class":93,"line":1345},[91,159493,159494],{"class":250},"    guess ",[91,159496,296],{"class":153},[91,159498,2505],{"class":105},[91,159500,251],{"class":250},[91,159502,53902],{"class":105},[91,159504,251],{"class":250},[91,159506,159507],{"class":101},"\"请输入1到100之间的数字:\"",[91,159509,30578],{"class":250},[91,159511,159512,159515,159517],{"class":93,"line":1436},[91,159513,159514],{"class":250},"    count ",[91,159516,9600],{"class":153},[91,159518,55780],{"class":105},[91,159520,159521],{"class":93,"line":1442},[91,159522,2523],{"emptyLinePlaceholder":175},[91,159524,159525,159527,159530,159532],{"class":93,"line":1454},[91,159526,3224],{"class":153},[91,159528,159529],{"class":250}," guess ",[91,159531,1209],{"class":153},[91,159533,159534],{"class":250}," answer:\n",[91,159536,159537,159539,159541,159544],{"class":93,"line":1736},[91,159538,32532],{"class":105},[91,159540,251],{"class":250},[91,159542,159543],{"class":101},"\"猜大了\"",[91,159545,257],{"class":250},[91,159547,159548,159550,159552,159554],{"class":93,"line":1741},[91,159549,39374],{"class":153},[91,159551,159529],{"class":250},[91,159553,1159],{"class":153},[91,159555,159534],{"class":250},[91,159557,159558,159560,159562,159565],{"class":93,"line":1747},[91,159559,32532],{"class":105},[91,159561,251],{"class":250},[91,159563,159564],{"class":101},"\"猜小了\"",[91,159566,257],{"class":250},[91,159568,159569,159571],{"class":93,"line":1752},[91,159570,158103],{"class":153},[91,159572,3862],{"class":250},[91,159574,159575,159577,159579,159581,159584,159586,159588,159590,159593],{"class":93,"line":1766},[91,159576,32532],{"class":105},[91,159578,251],{"class":250},[91,159580,302],{"class":153},[91,159582,159583],{"class":101},"\"猜对了，一共猜了",[91,159585,1145],{"class":105},[91,159587,84515],{"class":250},[91,159589,1195],{"class":105},[91,159591,159592],{"class":101},"次\"",[91,159594,257],{"class":250},[91,159596,159597],{"class":93,"line":1771},[91,159598,31708],{"class":153},[21,159600,159601,159604,159605,159607],{},[88,159602,159603],{},"while True"," 表示无限循环，通常配合 ",[88,159606,2176],{}," 使用。",[190,159609,159611],{"id":159610},"_45-break和continue","4.5 break和continue",[217,159613,159615],{"id":159614},"_451-break","4.5.1 break",[21,159617,159618,159620],{},[88,159619,2176],{}," 直接结束整个循环。",[82,159622,159624],{"className":30459,"code":159623,"language":30461,"meta":26,"style":26},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[88,159625,159626,159646,159658,159662],{"__ignoreMap":26},[91,159627,159628,159630,159632,159634,159636,159638,159640,159642,159644],{"class":93,"line":94},[91,159629,3148],{"class":153},[91,159631,9561],{"class":250},[91,159633,26165],{"class":153},[91,159635,32524],{"class":105},[91,159637,251],{"class":250},[91,159639,466],{"class":105},[91,159641,12558],{"class":250},[91,159643,593],{"class":105},[91,159645,30867],{"class":250},[91,159647,159648,159650,159652,159654,159656],{"class":93,"line":38},[91,159649,3224],{"class":153},[91,159651,9561],{"class":250},[91,159653,3072],{"class":153},[91,159655,78151],{"class":105},[91,159657,3862],{"class":250},[91,159659,159660],{"class":93,"line":1304},[91,159661,31708],{"class":153},[91,159663,159664,159666],{"class":93,"line":1319},[91,159665,31380],{"class":105},[91,159667,159311],{"class":250},[21,159669,146538],{},[82,159671,159674],{"className":159672,"code":159673,"language":5310,"meta":26},[5308],"1\n2\n",[88,159675,159673],{"__ignoreMap":26},[217,159677,159679],{"id":159678},"_452-continue","4.5.2 continue",[21,159681,159682,159684],{},[88,159683,154753],{}," 跳过本轮剩余代码，进入下一轮循环。",[82,159686,159688],{"className":30459,"code":159687,"language":30461,"meta":26,"style":26},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[88,159689,159690,159710,159722,159726],{"__ignoreMap":26},[91,159691,159692,159694,159696,159698,159700,159702,159704,159706,159708],{"class":93,"line":94},[91,159693,3148],{"class":153},[91,159695,9561],{"class":250},[91,159697,26165],{"class":153},[91,159699,32524],{"class":105},[91,159701,251],{"class":250},[91,159703,466],{"class":105},[91,159705,12558],{"class":250},[91,159707,593],{"class":105},[91,159709,30867],{"class":250},[91,159711,159712,159714,159716,159718,159720],{"class":93,"line":38},[91,159713,3224],{"class":153},[91,159715,9561],{"class":250},[91,159717,3072],{"class":153},[91,159719,78151],{"class":105},[91,159721,3862],{"class":250},[91,159723,159724],{"class":93,"line":1304},[91,159725,148593],{"class":153},[91,159727,159728,159730],{"class":93,"line":1319},[91,159729,31380],{"class":105},[91,159731,159311],{"class":250},[21,159733,146538],{},[82,159735,159738],{"className":159736,"code":159737,"language":5310,"meta":26},[5308],"1\n2\n4\n5\n",[88,159739,159737],{"__ignoreMap":26},[190,159741,159743],{"id":159742},"_46-for循环","4.6 for循环",[21,159745,159746,159748],{},[88,159747,3148],{}," 常用于遍历序列。",[82,159750,159752],{"className":30459,"code":159751,"language":30461,"meta":26,"style":26},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[88,159753,159754,159763,159767,159778],{"__ignoreMap":26},[91,159755,159756,159758,159760],{"class":93,"line":94},[91,159757,146617],{"class":250},[91,159759,296],{"class":153},[91,159761,159762],{"class":101}," \"python\"\n",[91,159764,159765],{"class":93,"line":38},[91,159766,2523],{"emptyLinePlaceholder":175},[91,159768,159769,159771,159774,159776],{"class":93,"line":1304},[91,159770,3148],{"class":153},[91,159772,159773],{"class":250}," ch ",[91,159775,26165],{"class":153},[91,159777,158480],{"class":250},[91,159779,159780,159782],{"class":93,"line":1319},[91,159781,31380],{"class":105},[91,159783,159784],{"class":250},"(ch)\n",[21,159786,159787],{},"遍历列表：",[82,159789,159791],{"className":30459,"code":159790,"language":30461,"meta":26,"style":26},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[88,159792,159793,159815,159819,159829],{"__ignoreMap":26},[91,159794,159795,159798,159800,159802,159804,159806,159808,159810,159813],{"class":93,"line":94},[91,159796,159797],{"class":250},"students ",[91,159799,296],{"class":153},[91,159801,52307],{"class":250},[91,159803,149969],{"class":101},[91,159805,12558],{"class":250},[91,159807,151017],{"class":101},[91,159809,12558],{"class":250},[91,159811,159812],{"class":101},"\"小刚\"",[91,159814,33327],{"class":250},[91,159816,159817],{"class":93,"line":38},[91,159818,2523],{"emptyLinePlaceholder":175},[91,159820,159821,159823,159825,159827],{"class":93,"line":1304},[91,159822,3148],{"class":153},[91,159824,152218],{"class":250},[91,159826,26165],{"class":153},[91,159828,152223],{"class":250},[91,159830,159831,159833],{"class":93,"line":1319},[91,159832,31380],{"class":105},[91,159834,150123],{"class":250},[190,159836,159838],{"id":159837},"_47-range函数","4.7 range函数",[21,159840,159841,159844],{},[88,159842,159843],{},"range()"," 用于生成整数序列。",[82,159846,159848],{"className":30459,"code":159847,"language":30461,"meta":26,"style":26},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[88,159849,159850,159864,159882],{"__ignoreMap":26},[91,159851,159852,159854,159856,159858,159861],{"class":93,"line":94},[91,159853,33497],{"class":105},[91,159855,251],{"class":250},[91,159857,568],{"class":105},[91,159859,159860],{"class":250},")          ",[91,159862,159863],{"class":308},"# 0,1,2,3,4\n",[91,159865,159866,159868,159870,159872,159874,159876,159879],{"class":93,"line":38},[91,159867,33497],{"class":105},[91,159869,251],{"class":250},[91,159871,466],{"class":105},[91,159873,12558],{"class":250},[91,159875,568],{"class":105},[91,159877,159878],{"class":250},")       ",[91,159880,159881],{"class":308},"# 1,2,3,4\n",[91,159883,159884,159886,159888,159890,159892,159894,159896,159898,159900],{"class":93,"line":1304},[91,159885,33497],{"class":105},[91,159887,251],{"class":250},[91,159889,466],{"class":105},[91,159891,12558],{"class":250},[91,159893,695],{"class":105},[91,159895,12558],{"class":250},[91,159897,327],{"class":105},[91,159899,155742],{"class":250},[91,159901,159902],{"class":308},"# 1,3,5,7,9\n",[21,159904,159905,159906,24741],{},"配合 ",[88,159907,3148],{},[82,159909,159911],{"className":30459,"code":159910,"language":30461,"meta":26,"style":26},"for i in range(1, 6):\n    print(i)\n",[88,159912,159913,159933],{"__ignoreMap":26},[91,159914,159915,159917,159919,159921,159923,159925,159927,159929,159931],{"class":93,"line":94},[91,159916,3148],{"class":153},[91,159918,9561],{"class":250},[91,159920,26165],{"class":153},[91,159922,32524],{"class":105},[91,159924,251],{"class":250},[91,159926,466],{"class":105},[91,159928,12558],{"class":250},[91,159930,593],{"class":105},[91,159932,30867],{"class":250},[91,159934,159935,159937],{"class":93,"line":38},[91,159936,31380],{"class":105},[91,159938,159311],{"class":250},[21,159940,9148,159941,159943],{},[88,159942,33497],{}," 的结束值不包含在内。",[190,159945,159947],{"id":159946},"_48-for循环求和","4.8 for循环求和",[82,159949,159951],{"className":30459,"code":159950,"language":30461,"meta":26,"style":26},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[88,159952,159953,159961,159965,159985,159993,159997],{"__ignoreMap":26},[91,159954,159955,159957,159959],{"class":93,"line":94},[91,159956,157341],{"class":250},[91,159958,296],{"class":153},[91,159960,47414],{"class":105},[91,159962,159963],{"class":93,"line":38},[91,159964,2523],{"emptyLinePlaceholder":175},[91,159966,159967,159969,159971,159973,159975,159977,159979,159981,159983],{"class":93,"line":1304},[91,159968,3148],{"class":153},[91,159970,9561],{"class":250},[91,159972,26165],{"class":153},[91,159974,32524],{"class":105},[91,159976,251],{"class":250},[91,159978,466],{"class":105},[91,159980,12558],{"class":250},[91,159982,586],{"class":105},[91,159984,30867],{"class":250},[91,159986,159987,159989,159991],{"class":93,"line":1319},[91,159988,159388],{"class":250},[91,159990,9600],{"class":153},[91,159992,159393],{"class":250},[91,159994,159995],{"class":93,"line":1325},[91,159996,2523],{"emptyLinePlaceholder":175},[91,159998,159999,160001],{"class":93,"line":1339},[91,160000,30496],{"class":105},[91,160002,159412],{"class":250},[21,160004,160005],{},"求偶数和：",[82,160007,160009],{"className":30459,"code":160008,"language":30461,"meta":26,"style":26},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[88,160010,160011,160019,160023,160043,160059,160068,160072],{"__ignoreMap":26},[91,160012,160013,160015,160017],{"class":93,"line":94},[91,160014,157341],{"class":250},[91,160016,296],{"class":153},[91,160018,47414],{"class":105},[91,160020,160021],{"class":93,"line":38},[91,160022,2523],{"emptyLinePlaceholder":175},[91,160024,160025,160027,160029,160031,160033,160035,160037,160039,160041],{"class":93,"line":1304},[91,160026,3148],{"class":153},[91,160028,9561],{"class":250},[91,160030,26165],{"class":153},[91,160032,32524],{"class":105},[91,160034,251],{"class":250},[91,160036,466],{"class":105},[91,160038,12558],{"class":250},[91,160040,586],{"class":105},[91,160042,30867],{"class":250},[91,160044,160045,160047,160049,160051,160053,160055,160057],{"class":93,"line":1319},[91,160046,3224],{"class":153},[91,160048,9561],{"class":250},[91,160050,577],{"class":153},[91,160052,14878],{"class":105},[91,160054,101640],{"class":153},[91,160056,4216],{"class":105},[91,160058,3862],{"class":250},[91,160060,160061,160064,160066],{"class":93,"line":1325},[91,160062,160063],{"class":250},"        total ",[91,160065,9600],{"class":153},[91,160067,159393],{"class":250},[91,160069,160070],{"class":93,"line":1339},[91,160071,2523],{"emptyLinePlaceholder":175},[91,160073,160074,160076],{"class":93,"line":1345},[91,160075,30496],{"class":105},[91,160077,159412],{"class":250},[21,160079,160080],{},"也可以：",[82,160082,160084],{"className":30459,"code":160083,"language":30461,"meta":26,"style":26},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[88,160085,160086,160094,160098,160122,160130,160134],{"__ignoreMap":26},[91,160087,160088,160090,160092],{"class":93,"line":94},[91,160089,157341],{"class":250},[91,160091,296],{"class":153},[91,160093,47414],{"class":105},[91,160095,160096],{"class":93,"line":38},[91,160097,2523],{"emptyLinePlaceholder":175},[91,160099,160100,160102,160104,160106,160108,160110,160112,160114,160116,160118,160120],{"class":93,"line":1304},[91,160101,3148],{"class":153},[91,160103,9561],{"class":250},[91,160105,26165],{"class":153},[91,160107,32524],{"class":105},[91,160109,251],{"class":250},[91,160111,327],{"class":105},[91,160113,12558],{"class":250},[91,160115,586],{"class":105},[91,160117,12558],{"class":250},[91,160119,327],{"class":105},[91,160121,30867],{"class":250},[91,160123,160124,160126,160128],{"class":93,"line":1319},[91,160125,159388],{"class":250},[91,160127,9600],{"class":153},[91,160129,159393],{"class":250},[91,160131,160132],{"class":93,"line":1325},[91,160133,2523],{"emptyLinePlaceholder":175},[91,160135,160136,160138],{"class":93,"line":1339},[91,160137,30496],{"class":105},[91,160139,159412],{"class":250},[190,160141,160143],{"id":160142},"_49-循环嵌套","4.9 循环嵌套",[21,160145,160146],{},"嵌套循环就是循环里面再写循环。",[82,160148,160150],{"className":30459,"code":160149,"language":30461,"meta":26,"style":26},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[88,160151,160152,160172,160192],{"__ignoreMap":26},[91,160153,160154,160156,160158,160160,160162,160164,160166,160168,160170],{"class":93,"line":94},[91,160155,3148],{"class":153},[91,160157,9561],{"class":250},[91,160159,26165],{"class":153},[91,160161,32524],{"class":105},[91,160163,251],{"class":250},[91,160165,466],{"class":105},[91,160167,12558],{"class":250},[91,160169,542],{"class":105},[91,160171,30867],{"class":250},[91,160173,160174,160176,160178,160180,160182,160184,160186,160188,160190],{"class":93,"line":38},[91,160175,3324],{"class":153},[91,160177,9623],{"class":250},[91,160179,26165],{"class":153},[91,160181,32524],{"class":105},[91,160183,251],{"class":250},[91,160185,466],{"class":105},[91,160187,12558],{"class":250},[91,160189,542],{"class":105},[91,160191,30867],{"class":250},[91,160193,160194,160196,160198,160200,160203,160205,160207,160209,160212,160214,160216,160218,160220],{"class":93,"line":1304},[91,160195,32532],{"class":105},[91,160197,251],{"class":250},[91,160199,302],{"class":153},[91,160201,160202],{"class":101},"\"i=",[91,160204,1145],{"class":105},[91,160206,690],{"class":250},[91,160208,1195],{"class":105},[91,160210,160211],{"class":101},", j=",[91,160213,1145],{"class":105},[91,160215,716],{"class":250},[91,160217,1195],{"class":105},[91,160219,500],{"class":101},[91,160221,257],{"class":250},[21,160223,160224],{},"外层循环执行一次，内层循环执行完整一轮。",[190,160226,160228],{"id":160227},"_410-九九乘法表","4.10 九九乘法表",[82,160230,160232],{"className":30459,"code":160231,"language":30461,"meta":26,"style":26},"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",[88,160233,160234,160254,160277,160329],{"__ignoreMap":26},[91,160235,160236,160238,160240,160242,160244,160246,160248,160250,160252],{"class":93,"line":94},[91,160237,3148],{"class":153},[91,160239,9561],{"class":250},[91,160241,26165],{"class":153},[91,160243,32524],{"class":105},[91,160245,251],{"class":250},[91,160247,466],{"class":105},[91,160249,12558],{"class":250},[91,160251,695],{"class":105},[91,160253,30867],{"class":250},[91,160255,160256,160258,160260,160262,160264,160266,160268,160271,160273,160275],{"class":93,"line":38},[91,160257,3324],{"class":153},[91,160259,9623],{"class":250},[91,160261,26165],{"class":153},[91,160263,32524],{"class":105},[91,160265,251],{"class":250},[91,160267,466],{"class":105},[91,160269,160270],{"class":250},", i ",[91,160272,730],{"class":153},[91,160274,25240],{"class":105},[91,160276,30867],{"class":250},[91,160278,160279,160281,160283,160285,160287,160289,160291,160293,160295,160297,160299,160301,160303,160305,160307,160309,160311,160313,160315,160317,160319,160321,160323,160325,160327],{"class":93,"line":1304},[91,160280,32532],{"class":105},[91,160282,251],{"class":250},[91,160284,302],{"class":153},[91,160286,500],{"class":101},[91,160288,1145],{"class":105},[91,160290,716],{"class":250},[91,160292,1195],{"class":105},[91,160294,704],{"class":101},[91,160296,1145],{"class":105},[91,160298,690],{"class":250},[91,160300,1195],{"class":105},[91,160302,296],{"class":101},[91,160304,1145],{"class":105},[91,160306,100229],{"class":250},[91,160308,704],{"class":153},[91,160310,3533],{"class":250},[91,160312,1195],{"class":105},[91,160314,500],{"class":101},[91,160316,12558],{"class":250},[91,160318,45882],{"class":5339},[91,160320,296],{"class":153},[91,160322,500],{"class":101},[91,160324,1355],{"class":105},[91,160326,500],{"class":101},[91,160328,257],{"class":250},[91,160330,160331,160333],{"class":93,"line":1319},[91,160332,31380],{"class":105},[91,160334,2099],{"class":250},[21,160336,160337],{},"关键点：",[14,160339,160340,160346,160352,160358],{},[17,160341,160342,160343,160345],{},"外层 ",[88,160344,690],{}," 控制行。",[17,160347,160348,160349,160351],{},"内层 ",[88,160350,716],{}," 控制列。",[17,160353,160354,160355,160357],{},"每行结束后用 ",[88,160356,146553],{}," 换行。",[17,160359,160360,160363],{},[88,160361,160362],{},"end=\"\\t\""," 让同一行的内容横向排列。",[190,160365,160367],{"id":160366},"_411-循环else","4.11 循环else",[21,160369,160370,160371,160373,160374,160376,160377,160379],{},"Python 的循环可以带 ",[88,160372,1825],{},"。当循环正常结束时执行 ",[88,160375,1825],{},"，如果被 ",[88,160378,2176],{}," 打断，则不执行。",[82,160381,160383],{"className":30459,"code":160382,"language":30461,"meta":26,"style":26},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[88,160384,160385,160405,160417,160428,160432,160438],{"__ignoreMap":26},[91,160386,160387,160389,160391,160393,160395,160397,160399,160401,160403],{"class":93,"line":94},[91,160388,3148],{"class":153},[91,160390,9561],{"class":250},[91,160392,26165],{"class":153},[91,160394,32524],{"class":105},[91,160396,251],{"class":250},[91,160398,466],{"class":105},[91,160400,12558],{"class":250},[91,160402,593],{"class":105},[91,160404,30867],{"class":250},[91,160406,160407,160409,160411,160413,160415],{"class":93,"line":38},[91,160408,3224],{"class":153},[91,160410,9561],{"class":250},[91,160412,3072],{"class":153},[91,160414,2161],{"class":105},[91,160416,3862],{"class":250},[91,160418,160419,160421,160423,160426],{"class":93,"line":1304},[91,160420,32532],{"class":105},[91,160422,251],{"class":250},[91,160424,160425],{"class":101},"\"找到了\"",[91,160427,257],{"class":250},[91,160429,160430],{"class":93,"line":1319},[91,160431,31708],{"class":153},[91,160433,160434,160436],{"class":93,"line":1325},[91,160435,1825],{"class":153},[91,160437,3862],{"class":250},[91,160439,160440,160442,160444,160447],{"class":93,"line":1339},[91,160441,31380],{"class":105},[91,160443,251],{"class":250},[91,160445,160446],{"class":101},"\"没找到\"",[91,160448,257],{"class":250},[21,160450,160451],{},"常用于搜索。",[82,160453,160455],{"className":30459,"code":160454,"language":30461,"meta":26,"style":26},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[88,160456,160457,160478,160487,160491,160503,160514,160524,160528,160534],{"__ignoreMap":26},[91,160458,160459,160462,160464,160466,160468,160470,160472,160474,160476],{"class":93,"line":94},[91,160460,160461],{"class":250},"names ",[91,160463,296],{"class":153},[91,160465,52307],{"class":250},[91,160467,149969],{"class":101},[91,160469,12558],{"class":250},[91,160471,151017],{"class":101},[91,160473,12558],{"class":250},[91,160475,159812],{"class":101},[91,160477,33327],{"class":250},[91,160479,160480,160482,160484],{"class":93,"line":38},[91,160481,111659],{"class":250},[91,160483,296],{"class":153},[91,160485,160486],{"class":101}," \"小李\"\n",[91,160488,160489],{"class":93,"line":1304},[91,160490,2523],{"emptyLinePlaceholder":175},[91,160492,160493,160495,160498,160500],{"class":93,"line":1319},[91,160494,3148],{"class":153},[91,160496,160497],{"class":250}," name ",[91,160499,26165],{"class":153},[91,160501,160502],{"class":250}," names:\n",[91,160504,160505,160507,160509,160511],{"class":93,"line":1325},[91,160506,3224],{"class":153},[91,160508,160497],{"class":250},[91,160510,3072],{"class":153},[91,160512,160513],{"class":250}," target:\n",[91,160515,160516,160518,160520,160522],{"class":93,"line":1339},[91,160517,32532],{"class":105},[91,160519,251],{"class":250},[91,160521,160425],{"class":101},[91,160523,257],{"class":250},[91,160525,160526],{"class":93,"line":1345},[91,160527,31708],{"class":153},[91,160529,160530,160532],{"class":93,"line":1436},[91,160531,1825],{"class":153},[91,160533,3862],{"class":250},[91,160535,160536,160538,160540,160542],{"class":93,"line":1442},[91,160537,31380],{"class":105},[91,160539,251],{"class":250},[91,160541,160446],{"class":101},[91,160543,257],{"class":250},[190,160545,160547],{"id":160546},"_412-小案例登录重试","4.12 小案例：登录重试",[21,160549,123373],{},[14,160551,160552,160555,160558],{},[17,160553,160554],{},"用户最多输入 3 次密码。",[17,160556,160557],{},"密码正确则登录成功。",[17,160559,160560],{},"3 次都错误则锁定账号。",[21,160562,10158],{},[82,160564,160566],{"className":30459,"code":160565,"language":30461,"meta":26,"style":26},"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",[88,160567,160568,160578,160582,160598,160614,160618,160630,160641,160645,160651,160676,160682],{"__ignoreMap":26},[91,160569,160570,160573,160575],{"class":93,"line":94},[91,160571,160572],{"class":250},"password ",[91,160574,296],{"class":153},[91,160576,160577],{"class":101}," \"123456\"\n",[91,160579,160580],{"class":93,"line":38},[91,160581,2523],{"emptyLinePlaceholder":175},[91,160583,160584,160586,160588,160590,160592,160594,160596],{"class":93,"line":1304},[91,160585,3148],{"class":153},[91,160587,9561],{"class":250},[91,160589,26165],{"class":153},[91,160591,32524],{"class":105},[91,160593,251],{"class":250},[91,160595,321],{"class":105},[91,160597,30867],{"class":250},[91,160599,160600,160603,160605,160607,160609,160612],{"class":93,"line":1319},[91,160601,160602],{"class":250},"    user_password ",[91,160604,296],{"class":153},[91,160606,60686],{"class":105},[91,160608,251],{"class":250},[91,160610,160611],{"class":101},"\"请输入密码:\"",[91,160613,257],{"class":250},[91,160615,160616],{"class":93,"line":1325},[91,160617,2523],{"emptyLinePlaceholder":175},[91,160619,160620,160622,160625,160627],{"class":93,"line":1339},[91,160621,3224],{"class":153},[91,160623,160624],{"class":250}," user_password ",[91,160626,3072],{"class":153},[91,160628,160629],{"class":250}," password:\n",[91,160631,160632,160634,160636,160639],{"class":93,"line":1345},[91,160633,32532],{"class":105},[91,160635,251],{"class":250},[91,160637,160638],{"class":101},"\"登录成功\"",[91,160640,257],{"class":250},[91,160642,160643],{"class":93,"line":1436},[91,160644,31708],{"class":153},[91,160646,160647,160649],{"class":93,"line":1442},[91,160648,158103],{"class":153},[91,160650,3862],{"class":250},[91,160652,160653,160655,160657,160659,160662,160665,160667,160669,160671,160674],{"class":93,"line":1454},[91,160654,32532],{"class":105},[91,160656,251],{"class":250},[91,160658,302],{"class":153},[91,160660,160661],{"class":101},"\"密码错误，还剩",[91,160663,160664],{"class":105},"{2",[91,160666,52352],{"class":153},[91,160668,3155],{"class":250},[91,160670,1195],{"class":105},[91,160672,160673],{"class":101},"次机会\"",[91,160675,257],{"class":250},[91,160677,160678,160680],{"class":93,"line":1736},[91,160679,1825],{"class":153},[91,160681,3862],{"class":250},[91,160683,160684,160686,160688,160691],{"class":93,"line":1741},[91,160685,31380],{"class":105},[91,160687,251],{"class":250},[91,160689,160690],{"class":101},"\"账号已锁定\"",[91,160692,257],{"class":250},[190,160694,160696],{"id":160695},"_413-小案例菜单程序","4.13 小案例：菜单程序",[82,160698,160700],{"className":30459,"code":160699,"language":30461,"meta":26,"style":26},"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",[88,160701,160702,160710,160721,160732,160743,160754,160765,160769,160784,160788,160800,160811,160823,160834,160846,160857,160869,160879,160883,160889],{"__ignoreMap":26},[91,160703,160704,160706,160708],{"class":93,"line":94},[91,160705,108744],{"class":153},[91,160707,95373],{"class":105},[91,160709,3862],{"class":250},[91,160711,160712,160714,160716,160719],{"class":93,"line":38},[91,160713,31380],{"class":105},[91,160715,251],{"class":250},[91,160717,160718],{"class":101},"\"====== 菜单 ======\"",[91,160720,257],{"class":250},[91,160722,160723,160725,160727,160730],{"class":93,"line":1304},[91,160724,31380],{"class":105},[91,160726,251],{"class":250},[91,160728,160729],{"class":101},"\"1. 查询余额\"",[91,160731,257],{"class":250},[91,160733,160734,160736,160738,160741],{"class":93,"line":1319},[91,160735,31380],{"class":105},[91,160737,251],{"class":250},[91,160739,160740],{"class":101},"\"2. 存款\"",[91,160742,257],{"class":250},[91,160744,160745,160747,160749,160752],{"class":93,"line":1325},[91,160746,31380],{"class":105},[91,160748,251],{"class":250},[91,160750,160751],{"class":101},"\"3. 取款\"",[91,160753,257],{"class":250},[91,160755,160756,160758,160760,160763],{"class":93,"line":1339},[91,160757,31380],{"class":105},[91,160759,251],{"class":250},[91,160761,160762],{"class":101},"\"0. 退出\"",[91,160764,257],{"class":250},[91,160766,160767],{"class":93,"line":1345},[91,160768,2523],{"emptyLinePlaceholder":175},[91,160770,160771,160774,160776,160778,160780,160782],{"class":93,"line":1436},[91,160772,160773],{"class":250},"    choice ",[91,160775,296],{"class":153},[91,160777,60686],{"class":105},[91,160779,251],{"class":250},[91,160781,153154],{"class":101},[91,160783,257],{"class":250},[91,160785,160786],{"class":93,"line":1442},[91,160787,2523],{"emptyLinePlaceholder":175},[91,160789,160790,160792,160794,160796,160798],{"class":93,"line":1454},[91,160791,3224],{"class":153},[91,160793,153167],{"class":250},[91,160795,3072],{"class":153},[91,160797,153172],{"class":101},[91,160799,3862],{"class":250},[91,160801,160802,160804,160806,160809],{"class":93,"line":1736},[91,160803,32532],{"class":105},[91,160805,251],{"class":250},[91,160807,160808],{"class":101},"\"余额为1000元\"",[91,160810,257],{"class":250},[91,160812,160813,160815,160817,160819,160821],{"class":93,"line":1741},[91,160814,39374],{"class":153},[91,160816,153167],{"class":250},[91,160818,3072],{"class":153},[91,160820,153191],{"class":101},[91,160822,3862],{"class":250},[91,160824,160825,160827,160829,160832],{"class":93,"line":1747},[91,160826,32532],{"class":105},[91,160828,251],{"class":250},[91,160830,160831],{"class":101},"\"存款功能\"",[91,160833,257],{"class":250},[91,160835,160836,160838,160840,160842,160844],{"class":93,"line":1752},[91,160837,39374],{"class":153},[91,160839,153167],{"class":250},[91,160841,3072],{"class":153},[91,160843,153209],{"class":101},[91,160845,3862],{"class":250},[91,160847,160848,160850,160852,160855],{"class":93,"line":1766},[91,160849,32532],{"class":105},[91,160851,251],{"class":250},[91,160853,160854],{"class":101},"\"取款功能\"",[91,160856,257],{"class":250},[91,160858,160859,160861,160863,160865,160867],{"class":93,"line":1771},[91,160860,39374],{"class":153},[91,160862,153167],{"class":250},[91,160864,3072],{"class":153},[91,160866,153263],{"class":101},[91,160868,3862],{"class":250},[91,160870,160871,160873,160875,160877],{"class":93,"line":1777},[91,160872,32532],{"class":105},[91,160874,251],{"class":250},[91,160876,153274],{"class":101},[91,160878,257],{"class":250},[91,160880,160881],{"class":93,"line":1798},[91,160882,31708],{"class":153},[91,160884,160885,160887],{"class":93,"line":1803},[91,160886,158103],{"class":153},[91,160888,3862],{"class":250},[91,160890,160891,160893,160895,160897],{"class":93,"line":1817},[91,160892,32532],{"class":105},[91,160894,251],{"class":250},[91,160896,153295],{"class":101},[91,160898,257],{"class":250},[21,160900,160901,160902,160904,160905,28504],{},"菜单类程序通常使用 ",[88,160903,159603],{},"，用户选择退出时 ",[88,160906,2176],{},[190,160908,160910],{"id":160909},"_414-易错点","4.14 易错点",[14,160912,160913,160918,160924,160932,160938],{},[17,160914,160915,160917],{},[88,160916,108744],{}," 循环必须更新控制变量。",[17,160919,160920,160923],{},[88,160921,160922],{},"range(1, 10)"," 不包含 10。",[17,160925,160926,160928,160929,160931],{},[88,160927,2176],{}," 结束整个循环，",[88,160930,154753],{}," 只跳过本轮。",[17,160933,160934,160935,160937],{},"嵌套循环中，",[88,160936,2176],{}," 只跳出当前所在的一层循环。",[17,160939,160940],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[190,160942,160944],{"id":160943},"_415-本章练习","4.15 本章练习",[14,160946,160947,160950,160953,160956,160959],{},[17,160948,160949],{},"输出 1 到 100。",[17,160951,160952],{},"计算 1 到 100 的偶数和。",[17,160954,160955],{},"输出 100 以内能被 3 和 5 同时整除的数。",[17,160957,160958],{},"编写猜数字游戏，限制最多猜 7 次。",[17,160960,160961],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[168,160963,160964],{},"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":26,"searchDepth":38,"depth":38,"links":160966},[160967,160968,160969,160970,160971,160975,160976,160977,160978,160979,160980,160981,160982,160983,160984],{"id":159223,"depth":38,"text":159224},{"id":159253,"depth":38,"text":159254},{"id":159342,"depth":38,"text":159343},{"id":159436,"depth":38,"text":159437},{"id":159610,"depth":38,"text":159611,"children":160972},[160973,160974],{"id":159614,"depth":1304,"text":159615},{"id":159678,"depth":1304,"text":159679},{"id":159742,"depth":38,"text":159743},{"id":159837,"depth":38,"text":159838},{"id":159946,"depth":38,"text":159947},{"id":160142,"depth":38,"text":160143},{"id":160227,"depth":38,"text":160228},{"id":160366,"depth":38,"text":160367},{"id":160546,"depth":38,"text":160547},{"id":160695,"depth":38,"text":160696},{"id":160909,"depth":38,"text":160910},{"id":160943,"depth":38,"text":160944},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159215,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160991,"title":160992,"body":160993,"description":23500,"extension":173,"meta":162998,"navigation":175,"path":162999,"seo":163000,"stem":163001,"__hash__":163002},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160994,"toc":162978},[160995,160998,161002,161005,161008,161022,161025,161039,161043,161045,161064,161066,161113,161115,161129,161133,161207,161210,161214,161217,161276,161284,161287,161340,161343,161347,161352,161407,161415,161465,161469,161474,161482,161581,161587,161591,161596,161599,161610,161651,161664,161668,161671,161707,161710,161723,161726,161786,161790,161794,161797,161848,161852,161855,161902,161908,161974,161977,161981,161984,162100,162103,162107,162110,162216,162220,162223,162261,162264,162306,162309,162369,162372,162376,162840,162843,162847,162874,162880,162941,162945,162975],[10,160996,160992],{"id":160997},"_5-函数基础",[190,160999,161001],{"id":161000},"_51-为什么需要函数","5.1 为什么需要函数",[21,161003,161004],{},"函数用于封装一段可以重复使用的代码。",[21,161006,161007],{},"不使用函数的问题：",[14,161009,161010,161013,161016,161019],{},[17,161011,161012],{},"重复代码多。",[17,161014,161015],{},"修改逻辑时容易漏改。",[17,161017,161018],{},"主流程不清晰。",[17,161020,161021],{},"程序越写越长，难以维护。",[21,161023,161024],{},"使用函数后的好处：",[14,161026,161027,161030,161033,161036],{},[17,161028,161029],{},"提高复用性。",[17,161031,161032],{},"提高可读性。",[17,161034,161035],{},"便于调试。",[17,161037,161038],{},"便于分工。",[190,161040,161042],{"id":161041},"_52-函数定义","5.2 函数定义",[21,161044,5304],{},[82,161046,161048],{"className":30459,"code":161047,"language":30461,"meta":26,"style":26},"def 函数名():\n    函数体\n",[88,161049,161050,161059],{"__ignoreMap":26},[91,161051,161052,161054,161057],{"class":93,"line":94},[91,161053,32028],{"class":153},[91,161055,161056],{"class":97}," 函数名",[91,161058,32034],{"class":250},[91,161060,161061],{"class":93,"line":38},[91,161062,161063],{"class":250},"    函数体\n",[21,161065,15258],{},[82,161067,161069],{"className":30459,"code":161068,"language":30461,"meta":26,"style":26},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[88,161070,161071,161080,161090,161100,161104,161108],{"__ignoreMap":26},[91,161072,161073,161075,161078],{"class":93,"line":94},[91,161074,32028],{"class":153},[91,161076,161077],{"class":97}," say_hello",[91,161079,32034],{"class":250},[91,161081,161082,161084,161086,161088],{"class":93,"line":38},[91,161083,31380],{"class":105},[91,161085,251],{"class":250},[91,161087,5967],{"class":101},[91,161089,257],{"class":250},[91,161091,161092,161094,161096,161098],{"class":93,"line":1304},[91,161093,31380],{"class":105},[91,161095,251],{"class":250},[91,161097,146720],{"class":101},[91,161099,257],{"class":250},[91,161101,161102],{"class":93,"line":1319},[91,161103,2523],{"emptyLinePlaceholder":175},[91,161105,161106],{"class":93,"line":1325},[91,161107,2523],{"emptyLinePlaceholder":175},[91,161109,161110],{"class":93,"line":1339},[91,161111,161112],{"class":250},"say_hello()\n",[21,161114,9148],{},[14,161116,161117,161120,161123,161126],{},[17,161118,161119],{},"函数必须先定义，再调用。",[17,161121,161122],{},"函数名遵循变量命名规则。",[17,161124,161125],{},"函数体需要缩进。",[17,161127,161128],{},"函数不调用就不会执行。",[190,161130,161132],{"id":161131},"_53-函数调用","5.3 函数调用",[82,161134,161136],{"className":30459,"code":161135,"language":30461,"meta":26,"style":26},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[88,161137,161138,161147,161158,161169,161180,161190,161194,161198,161203],{"__ignoreMap":26},[91,161139,161140,161142,161145],{"class":93,"line":94},[91,161141,32028],{"class":153},[91,161143,161144],{"class":97}," print_menu",[91,161146,32034],{"class":250},[91,161148,161149,161151,161153,161156],{"class":93,"line":38},[91,161150,31380],{"class":105},[91,161152,251],{"class":250},[91,161154,161155],{"class":101},"\"1. 查询\"",[91,161157,257],{"class":250},[91,161159,161160,161162,161164,161167],{"class":93,"line":1304},[91,161161,31380],{"class":105},[91,161163,251],{"class":250},[91,161165,161166],{"class":101},"\"2. 添加\"",[91,161168,257],{"class":250},[91,161170,161171,161173,161175,161178],{"class":93,"line":1319},[91,161172,31380],{"class":105},[91,161174,251],{"class":250},[91,161176,161177],{"class":101},"\"3. 删除\"",[91,161179,257],{"class":250},[91,161181,161182,161184,161186,161188],{"class":93,"line":1325},[91,161183,31380],{"class":105},[91,161185,251],{"class":250},[91,161187,160762],{"class":101},[91,161189,257],{"class":250},[91,161191,161192],{"class":93,"line":1339},[91,161193,2523],{"emptyLinePlaceholder":175},[91,161195,161196],{"class":93,"line":1345},[91,161197,2523],{"emptyLinePlaceholder":175},[91,161199,161200],{"class":93,"line":1436},[91,161201,161202],{"class":250},"print_menu()\n",[91,161204,161205],{"class":93,"line":1442},[91,161206,161202],{"class":250},[21,161208,161209],{},"函数可以多次调用，每次调用都会执行函数体。",[190,161211,161213],{"id":161212},"_54-参数","5.4 参数",[21,161215,161216],{},"参数用于向函数传递数据。",[82,161218,161220],{"className":30459,"code":161219,"language":30461,"meta":26,"style":26},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[88,161221,161222,161231,161251,161255,161259,161268],{"__ignoreMap":26},[91,161223,161224,161226,161228],{"class":93,"line":94},[91,161225,32028],{"class":153},[91,161227,161077],{"class":97},[91,161229,161230],{"class":250},"(name):\n",[91,161232,161233,161235,161237,161239,161241,161243,161245,161247,161249],{"class":93,"line":38},[91,161234,31380],{"class":105},[91,161236,251],{"class":250},[91,161238,302],{"class":153},[91,161240,157135],{"class":101},[91,161242,1145],{"class":105},[91,161244,79891],{"class":250},[91,161246,1195],{"class":105},[91,161248,500],{"class":101},[91,161250,257],{"class":250},[91,161252,161253],{"class":93,"line":1304},[91,161254,2523],{"emptyLinePlaceholder":175},[91,161256,161257],{"class":93,"line":1319},[91,161258,2523],{"emptyLinePlaceholder":175},[91,161260,161261,161264,161266],{"class":93,"line":1325},[91,161262,161263],{"class":250},"say_hello(",[91,161265,149969],{"class":101},[91,161267,257],{"class":250},[91,161269,161270,161272,161274],{"class":93,"line":1339},[91,161271,161263],{"class":250},[91,161273,151017],{"class":101},[91,161275,257],{"class":250},[21,161277,161278,161280,161281,161283],{},[88,161279,79891],{}," 是形参，",[88,161282,149969],{}," 是实参。",[21,161285,161286],{},"多个参数：",[82,161288,161290],{"className":30459,"code":161289,"language":30461,"meta":26,"style":26},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[88,161291,161292,161300,161313,161319,161323,161327],{"__ignoreMap":26},[91,161293,161294,161296,161298],{"class":93,"line":94},[91,161295,32028],{"class":153},[91,161297,5332],{"class":97},[91,161299,151174],{"class":250},[91,161301,161302,161305,161307,161309,161311],{"class":93,"line":38},[91,161303,161304],{"class":250},"    result ",[91,161306,296],{"class":153},[91,161308,10992],{"class":250},[91,161310,730],{"class":153},[91,161312,151185],{"class":250},[91,161314,161315,161317],{"class":93,"line":1304},[91,161316,31380],{"class":105},[91,161318,76666],{"class":250},[91,161320,161321],{"class":93,"line":1319},[91,161322,2523],{"emptyLinePlaceholder":175},[91,161324,161325],{"class":93,"line":1325},[91,161326,2523],{"emptyLinePlaceholder":175},[91,161328,161329,161332,161334,161336,161338],{"class":93,"line":1339},[91,161330,161331],{"class":250},"add(",[91,161333,695],{"class":105},[91,161335,12558],{"class":250},[91,161337,949],{"class":105},[91,161339,257],{"class":250},[21,161341,161342],{},"调用时参数数量必须匹配。",[190,161344,161346],{"id":161345},"_55-返回值","5.5 返回值",[21,161348,161349,161351],{},[88,161350,17169],{}," 用于把函数内部的结果返回给调用者。",[82,161353,161355],{"className":30459,"code":161354,"language":30461,"meta":26,"style":26},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[88,161356,161357,161365,161375,161379,161383,161401],{"__ignoreMap":26},[91,161358,161359,161361,161363],{"class":93,"line":94},[91,161360,32028],{"class":153},[91,161362,5332],{"class":97},[91,161364,151174],{"class":250},[91,161366,161367,161369,161371,161373],{"class":93,"line":38},[91,161368,4213],{"class":153},[91,161370,10992],{"class":250},[91,161372,730],{"class":153},[91,161374,151185],{"class":250},[91,161376,161377],{"class":93,"line":1304},[91,161378,2523],{"emptyLinePlaceholder":175},[91,161380,161381],{"class":93,"line":1319},[91,161382,2523],{"emptyLinePlaceholder":175},[91,161384,161385,161388,161390,161393,161395,161397,161399],{"class":93,"line":1325},[91,161386,161387],{"class":250},"result ",[91,161389,296],{"class":153},[91,161391,161392],{"class":250}," add(",[91,161394,695],{"class":105},[91,161396,12558],{"class":250},[91,161398,949],{"class":105},[91,161400,257],{"class":250},[91,161402,161403,161405],{"class":93,"line":1339},[91,161404,30496],{"class":105},[91,161406,76666],{"class":250},[21,161408,161409,161410,161412,161413,28504],{},"如果函数没有写 ",[88,161411,17169],{},"，默认返回 ",[88,161414,95767],{},[82,161416,161418],{"className":30459,"code":161417,"language":30461,"meta":26,"style":26},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[88,161419,161420,161428,161438,161442,161446,161455],{"__ignoreMap":26},[91,161421,161422,161424,161426],{"class":93,"line":94},[91,161423,32028],{"class":153},[91,161425,161077],{"class":97},[91,161427,32034],{"class":250},[91,161429,161430,161432,161434,161436],{"class":93,"line":38},[91,161431,31380],{"class":105},[91,161433,251],{"class":250},[91,161435,5967],{"class":101},[91,161437,257],{"class":250},[91,161439,161440],{"class":93,"line":1304},[91,161441,2523],{"emptyLinePlaceholder":175},[91,161443,161444],{"class":93,"line":1319},[91,161445,2523],{"emptyLinePlaceholder":175},[91,161447,161448,161450,161452],{"class":93,"line":1325},[91,161449,161387],{"class":250},[91,161451,296],{"class":153},[91,161453,161454],{"class":250}," say_hello()\n",[91,161456,161457,161459,161462],{"class":93,"line":1339},[91,161458,30496],{"class":105},[91,161460,161461],{"class":250},"(result)  ",[91,161463,161464],{"class":308},"# None\n",[190,161466,161468],{"id":161467},"_56-return的作用","5.6 return的作用",[21,161470,161471,161473],{},[88,161472,17169],{}," 有两个作用：",[14,161475,161476,161479],{},[17,161477,161478],{},"返回结果。",[17,161480,161481],{},"结束函数。",[82,161483,161485],{"className":30459,"code":161484,"language":30461,"meta":26,"style":26},"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",[88,161486,161487,161497,161509,161516,161520,161532,161539,161543,161550,161554,161558,161569],{"__ignoreMap":26},[91,161488,161489,161491,161494],{"class":93,"line":94},[91,161490,32028],{"class":153},[91,161492,161493],{"class":97}," check_age",[91,161495,161496],{"class":250},"(age):\n",[91,161498,161499,161501,161503,161505,161507],{"class":93,"line":38},[91,161500,3224],{"class":153},[91,161502,15830],{"class":250},[91,161504,1159],{"class":153},[91,161506,4216],{"class":105},[91,161508,3862],{"class":250},[91,161510,161511,161513],{"class":93,"line":1304},[91,161512,14875],{"class":153},[91,161514,161515],{"class":101}," \"年龄不合法\"\n",[91,161517,161518],{"class":93,"line":1319},[91,161519,2523],{"emptyLinePlaceholder":175},[91,161521,161522,161524,161526,161528,161530],{"class":93,"line":1325},[91,161523,3224],{"class":153},[91,161525,15830],{"class":250},[91,161527,1834],{"class":153},[91,161529,156366],{"class":105},[91,161531,3862],{"class":250},[91,161533,161534,161536],{"class":93,"line":1339},[91,161535,14875],{"class":153},[91,161537,161538],{"class":101}," \"成年人\"\n",[91,161540,161541],{"class":93,"line":1345},[91,161542,2523],{"emptyLinePlaceholder":175},[91,161544,161545,161547],{"class":93,"line":1436},[91,161546,4213],{"class":153},[91,161548,161549],{"class":101}," \"未成年人\"\n",[91,161551,161552],{"class":93,"line":1442},[91,161553,2523],{"emptyLinePlaceholder":175},[91,161555,161556],{"class":93,"line":1454},[91,161557,2523],{"emptyLinePlaceholder":175},[91,161559,161560,161562,161565,161567],{"class":93,"line":1736},[91,161561,30496],{"class":105},[91,161563,161564],{"class":250},"(check_age(",[91,161566,949],{"class":105},[91,161568,30578],{"class":250},[91,161570,161571,161573,161575,161577,161579],{"class":93,"line":1741},[91,161572,30496],{"class":105},[91,161574,161564],{"class":250},[91,161576,781],{"class":153},[91,161578,466],{"class":105},[91,161580,30578],{"class":250},[21,161582,161583,161584,161586],{},"函数执行到 ",[88,161585,17169],{}," 后，后面的代码不会继续执行。",[190,161588,161590],{"id":161589},"_57-none","5.7 None",[21,161592,161593,161595],{},[88,161594,95767],{}," 表示空值或没有结果。",[21,161597,161598],{},"常见使用场景：",[14,161600,161601,161604,161607],{},[17,161602,161603],{},"函数没有返回值。",[17,161605,161606],{},"变量暂时没有具体值。",[17,161608,161609],{},"表示查询不到结果。",[82,161611,161613],{"className":30459,"code":161612,"language":30461,"meta":26,"style":26},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[88,161614,161615,161623,161627,161640],{"__ignoreMap":26},[91,161616,161617,161619,161621],{"class":93,"line":94},[91,161618,161387],{"class":250},[91,161620,296],{"class":153},[91,161622,152253],{"class":105},[91,161624,161625],{"class":93,"line":38},[91,161626,2523],{"emptyLinePlaceholder":175},[91,161628,161629,161631,161634,161636,161638],{"class":93,"line":1304},[91,161630,1655],{"class":153},[91,161632,161633],{"class":250}," result ",[91,161635,39008],{"class":153},[91,161637,39014],{"class":105},[91,161639,3862],{"class":250},[91,161641,161642,161644,161646,161649],{"class":93,"line":1319},[91,161643,31380],{"class":105},[91,161645,251],{"class":250},[91,161647,161648],{"class":101},"\"没有数据\"",[91,161650,257],{"class":250},[21,161652,161653,161654,161656,161657,161660,161661,28504],{},"判断 ",[88,161655,95767],{}," 推荐使用 ",[88,161658,161659],{},"is None","，不要写成 ",[88,161662,161663],{},"== None",[190,161665,161667],{"id":161666},"_58-函数文档字符串","5.8 函数文档字符串",[21,161669,161670],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[82,161672,161674],{"className":30459,"code":161673,"language":30461,"meta":26,"style":26},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[88,161675,161676,161686,161691],{"__ignoreMap":26},[91,161677,161678,161680,161683],{"class":93,"line":94},[91,161679,32028],{"class":153},[91,161681,161682],{"class":97}," calculate_bmi",[91,161684,161685],{"class":250},"(weight, height):\n",[91,161687,161688],{"class":93,"line":38},[91,161689,161690],{"class":101},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[91,161692,161693,161695,161698,161700,161703,161705],{"class":93,"line":1304},[91,161694,4213],{"class":153},[91,161696,161697],{"class":250}," weight ",[91,161699,833],{"class":153},[91,161701,161702],{"class":250}," height ",[91,161704,10784],{"class":153},[91,161706,47804],{"class":105},[21,161708,161709],{},"查看说明：",[82,161711,161713],{"className":30459,"code":161712,"language":30461,"meta":26,"style":26},"help(calculate_bmi)\n",[88,161714,161715],{"__ignoreMap":26},[91,161716,161717,161720],{"class":93,"line":94},[91,161718,161719],{"class":105},"help",[91,161721,161722],{"class":250},"(calculate_bmi)\n",[21,161724,161725],{},"较完整的写法：",[82,161727,161729],{"className":30459,"code":161728,"language":30461,"meta":26,"style":26},"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",[88,161730,161731,161739,161744,161749,161753,161758,161763,161768,161772],{"__ignoreMap":26},[91,161732,161733,161735,161737],{"class":93,"line":94},[91,161734,32028],{"class":153},[91,161736,161682],{"class":97},[91,161738,161685],{"class":250},[91,161740,161741],{"class":93,"line":38},[91,161742,161743],{"class":101},"    \"\"\"\n",[91,161745,161746],{"class":93,"line":1304},[91,161747,161748],{"class":101},"    计算BMI。\n",[91,161750,161751],{"class":93,"line":1319},[91,161752,2523],{"emptyLinePlaceholder":175},[91,161754,161755],{"class":93,"line":1325},[91,161756,161757],{"class":101},"    :param weight: 体重，单位kg\n",[91,161759,161760],{"class":93,"line":1339},[91,161761,161762],{"class":101},"    :param height: 身高，单位m\n",[91,161764,161765],{"class":93,"line":1345},[91,161766,161767],{"class":101},"    :return: BMI数值\n",[91,161769,161770],{"class":93,"line":1436},[91,161771,161743],{"class":101},[91,161773,161774,161776,161778,161780,161782,161784],{"class":93,"line":1442},[91,161775,4213],{"class":153},[91,161777,161697],{"class":250},[91,161779,833],{"class":153},[91,161781,161702],{"class":250},[91,161783,10784],{"class":153},[91,161785,47804],{"class":105},[190,161787,161789],{"id":161788},"_59-变量作用域","5.9 变量作用域",[217,161791,161793],{"id":161792},"_591-局部变量","5.9.1 局部变量",[21,161795,161796],{},"在函数内部定义的变量，只能在函数内部使用。",[82,161798,161800],{"className":30459,"code":161799,"language":30461,"meta":26,"style":26},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[88,161801,161802,161811,161819,161825,161829,161833,161838],{"__ignoreMap":26},[91,161803,161804,161806,161809],{"class":93,"line":94},[91,161805,32028],{"class":153},[91,161807,161808],{"class":97}," test",[91,161810,32034],{"class":250},[91,161812,161813,161815,161817],{"class":93,"line":38},[91,161814,45674],{"class":250},[91,161816,296],{"class":153},[91,161818,58509],{"class":105},[91,161820,161821,161823],{"class":93,"line":1304},[91,161822,31380],{"class":105},[91,161824,264],{"class":250},[91,161826,161827],{"class":93,"line":1319},[91,161828,2523],{"emptyLinePlaceholder":175},[91,161830,161831],{"class":93,"line":1325},[91,161832,2523],{"emptyLinePlaceholder":175},[91,161834,161835],{"class":93,"line":1339},[91,161836,161837],{"class":250},"test()\n",[91,161839,161840,161842,161845],{"class":93,"line":1345},[91,161841,30496],{"class":105},[91,161843,161844],{"class":250},"(num)  ",[91,161846,161847],{"class":308},"# 报错\n",[217,161849,161851],{"id":161850},"_592-全局变量","5.9.2 全局变量",[21,161853,161854],{},"在函数外部定义的变量，可以在函数内部读取。",[82,161856,161858],{"className":30459,"code":161857,"language":30461,"meta":26,"style":26},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[88,161859,161860,161868,161872,161876,161884,161890,161894,161898],{"__ignoreMap":26},[91,161861,161862,161864,161866],{"class":93,"line":94},[91,161863,146617],{"class":250},[91,161865,296],{"class":153},[91,161867,149434],{"class":101},[91,161869,161870],{"class":93,"line":38},[91,161871,2523],{"emptyLinePlaceholder":175},[91,161873,161874],{"class":93,"line":1304},[91,161875,2523],{"emptyLinePlaceholder":175},[91,161877,161878,161880,161882],{"class":93,"line":1319},[91,161879,32028],{"class":153},[91,161881,161077],{"class":97},[91,161883,32034],{"class":250},[91,161885,161886,161888],{"class":93,"line":1325},[91,161887,31380],{"class":105},[91,161889,150741],{"class":250},[91,161891,161892],{"class":93,"line":1339},[91,161893,2523],{"emptyLinePlaceholder":175},[91,161895,161896],{"class":93,"line":1345},[91,161897,2523],{"emptyLinePlaceholder":175},[91,161899,161900],{"class":93,"line":1436},[91,161901,161112],{"class":250},[21,161903,161904,161905,28504],{},"如果要在函数内部修改全局变量，需要 ",[88,161906,161907],{},"global",[82,161909,161911],{"className":30459,"code":161910,"language":30461,"meta":26,"style":26},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[88,161912,161913,161921,161925,161929,161938,161946,161954,161958,161962,161967],{"__ignoreMap":26},[91,161914,161915,161917,161919],{"class":93,"line":94},[91,161916,146772],{"class":250},[91,161918,296],{"class":153},[91,161920,47414],{"class":105},[91,161922,161923],{"class":93,"line":38},[91,161924,2523],{"emptyLinePlaceholder":175},[91,161926,161927],{"class":93,"line":1304},[91,161928,2523],{"emptyLinePlaceholder":175},[91,161930,161931,161933,161936],{"class":93,"line":1319},[91,161932,32028],{"class":153},[91,161934,161935],{"class":97}," add_count",[91,161937,32034],{"class":250},[91,161939,161940,161943],{"class":93,"line":1325},[91,161941,161942],{"class":153},"    global",[91,161944,161945],{"class":250}," count\n",[91,161947,161948,161950,161952],{"class":93,"line":1339},[91,161949,159514],{"class":250},[91,161951,9600],{"class":153},[91,161953,55780],{"class":105},[91,161955,161956],{"class":93,"line":1345},[91,161957,2523],{"emptyLinePlaceholder":175},[91,161959,161960],{"class":93,"line":1436},[91,161961,2523],{"emptyLinePlaceholder":175},[91,161963,161964],{"class":93,"line":1442},[91,161965,161966],{"class":250},"add_count()\n",[91,161968,161969,161971],{"class":93,"line":1454},[91,161970,30496],{"class":105},[91,161972,161973],{"class":250},"(count)\n",[21,161975,161976],{},"不建议大量使用全局变量，项目变大后很难维护。",[190,161978,161980],{"id":161979},"_510-函数嵌套调用","5.10 函数嵌套调用",[21,161982,161983],{},"一个函数中可以调用另一个函数。",[82,161985,161987],{"className":30459,"code":161986,"language":30461,"meta":26,"style":26},"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",[88,161988,161989,161998,162012,162016,162020,162029,162034,162054,162075,162079,162083,162087],{"__ignoreMap":26},[91,161990,161991,161993,161996],{"class":93,"line":94},[91,161992,32028],{"class":153},[91,161994,161995],{"class":97}," print_line",[91,161997,32034],{"class":250},[91,161999,162000,162002,162004,162006,162008,162010],{"class":93,"line":38},[91,162001,31380],{"class":105},[91,162003,251],{"class":250},[91,162005,32564],{"class":101},[91,162007,6641],{"class":153},[91,162009,78746],{"class":105},[91,162011,257],{"class":250},[91,162013,162014],{"class":93,"line":1304},[91,162015,2523],{"emptyLinePlaceholder":175},[91,162017,162018],{"class":93,"line":1319},[91,162019,2523],{"emptyLinePlaceholder":175},[91,162021,162022,162024,162027],{"class":93,"line":1325},[91,162023,32028],{"class":153},[91,162025,162026],{"class":97}," print_info",[91,162028,149456],{"class":250},[91,162030,162031],{"class":93,"line":1339},[91,162032,162033],{"class":250},"    print_line()\n",[91,162035,162036,162038,162040,162042,162044,162046,162048,162050,162052],{"class":93,"line":1345},[91,162037,31380],{"class":105},[91,162039,251],{"class":250},[91,162041,302],{"class":153},[91,162043,156763],{"class":101},[91,162045,1145],{"class":105},[91,162047,79891],{"class":250},[91,162049,1195],{"class":105},[91,162051,500],{"class":101},[91,162053,257],{"class":250},[91,162055,162056,162058,162060,162062,162065,162067,162069,162071,162073],{"class":93,"line":1436},[91,162057,31380],{"class":105},[91,162059,251],{"class":250},[91,162061,302],{"class":153},[91,162063,162064],{"class":101},"\"年龄:",[91,162066,1145],{"class":105},[91,162068,70302],{"class":250},[91,162070,1195],{"class":105},[91,162072,500],{"class":101},[91,162074,257],{"class":250},[91,162076,162077],{"class":93,"line":1442},[91,162078,162033],{"class":250},[91,162080,162081],{"class":93,"line":1454},[91,162082,2523],{"emptyLinePlaceholder":175},[91,162084,162085],{"class":93,"line":1736},[91,162086,2523],{"emptyLinePlaceholder":175},[91,162088,162089,162092,162094,162096,162098],{"class":93,"line":1741},[91,162090,162091],{"class":250},"print_info(",[91,162093,149969],{"class":101},[91,162095,12558],{"class":250},[91,162097,899],{"class":105},[91,162099,257],{"class":250},[21,162101,162102],{},"这种方式可以把小功能组合成大功能。",[190,162104,162106],{"id":162105},"_511-参数检查","5.11 参数检查",[21,162108,162109],{},"函数内部可以检查参数是否合法。",[82,162111,162113],{"className":30459,"code":162112,"language":30461,"meta":26,"style":26},"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",[88,162114,162115,162124,162136,162142,162152,162156,162160,162177,162181,162193,162204,162210],{"__ignoreMap":26},[91,162116,162117,162119,162122],{"class":93,"line":94},[91,162118,32028],{"class":153},[91,162120,162121],{"class":97}," divide",[91,162123,151174],{"class":250},[91,162125,162126,162128,162130,162132,162134],{"class":93,"line":38},[91,162127,3224],{"class":153},[91,162129,11005],{"class":250},[91,162131,3072],{"class":153},[91,162133,4216],{"class":105},[91,162135,3862],{"class":250},[91,162137,162138,162140],{"class":93,"line":1304},[91,162139,14875],{"class":153},[91,162141,152253],{"class":105},[91,162143,162144,162146,162148,162150],{"class":93,"line":1319},[91,162145,4213],{"class":153},[91,162147,10992],{"class":250},[91,162149,833],{"class":153},[91,162151,151185],{"class":250},[91,162153,162154],{"class":93,"line":1325},[91,162155,2523],{"emptyLinePlaceholder":175},[91,162157,162158],{"class":93,"line":1339},[91,162159,2523],{"emptyLinePlaceholder":175},[91,162161,162162,162164,162166,162169,162171,162173,162175],{"class":93,"line":1345},[91,162163,161387],{"class":250},[91,162165,296],{"class":153},[91,162167,162168],{"class":250}," divide(",[91,162170,695],{"class":105},[91,162172,12558],{"class":250},[91,162174,440],{"class":105},[91,162176,257],{"class":250},[91,162178,162179],{"class":93,"line":1436},[91,162180,2523],{"emptyLinePlaceholder":175},[91,162182,162183,162185,162187,162189,162191],{"class":93,"line":1442},[91,162184,1655],{"class":153},[91,162186,161633],{"class":250},[91,162188,39008],{"class":153},[91,162190,39014],{"class":105},[91,162192,3862],{"class":250},[91,162194,162195,162197,162199,162202],{"class":93,"line":1454},[91,162196,31380],{"class":105},[91,162198,251],{"class":250},[91,162200,162201],{"class":101},"\"除数不能为0\"",[91,162203,257],{"class":250},[91,162205,162206,162208],{"class":93,"line":1736},[91,162207,1825],{"class":153},[91,162209,3862],{"class":250},[91,162211,162212,162214],{"class":93,"line":1741},[91,162213,31380],{"class":105},[91,162215,76666],{"class":250},[190,162217,162219],{"id":162218},"_512-类型提示","5.12 类型提示",[21,162221,162222],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[82,162224,162226],{"className":30459,"code":162225,"language":30461,"meta":26,"style":26},"def add(a: int, b: int) -> int:\n    return a + b\n",[88,162227,162228,162251],{"__ignoreMap":26},[91,162229,162230,162232,162234,162237,162239,162242,162244,162247,162249],{"class":93,"line":94},[91,162231,32028],{"class":153},[91,162233,5332],{"class":97},[91,162235,162236],{"class":250},"(a: ",[91,162238,254],{"class":105},[91,162240,162241],{"class":250},", b: ",[91,162243,254],{"class":105},[91,162245,162246],{"class":250},") -> ",[91,162248,254],{"class":105},[91,162250,3862],{"class":250},[91,162252,162253,162255,162257,162259],{"class":93,"line":38},[91,162254,4213],{"class":153},[91,162256,10992],{"class":250},[91,162258,730],{"class":153},[91,162260,151185],{"class":250},[21,162262,162263],{},"字符串参数：",[82,162265,162267],{"className":30459,"code":162266,"language":30461,"meta":26,"style":26},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[88,162268,162269,162286],{"__ignoreMap":26},[91,162270,162271,162273,162275,162278,162280,162282,162284],{"class":93,"line":94},[91,162272,32028],{"class":153},[91,162274,161077],{"class":97},[91,162276,162277],{"class":250},"(name: ",[91,162279,1424],{"class":105},[91,162281,162246],{"class":250},[91,162283,95767],{"class":105},[91,162285,3862],{"class":250},[91,162287,162288,162290,162292,162294,162296,162298,162300,162302,162304],{"class":93,"line":38},[91,162289,31380],{"class":105},[91,162291,251],{"class":250},[91,162293,302],{"class":153},[91,162295,157135],{"class":101},[91,162297,1145],{"class":105},[91,162299,79891],{"class":250},[91,162301,1195],{"class":105},[91,162303,500],{"class":101},[91,162305,257],{"class":250},[21,162307,162308],{},"列表参数：",[82,162310,162312],{"className":30459,"code":162311,"language":30461,"meta":26,"style":26},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[88,162313,162314,162333,162341,162353,162362],{"__ignoreMap":26},[91,162315,162316,162318,162321,162324,162326,162329,162331],{"class":93,"line":94},[91,162317,32028],{"class":153},[91,162319,162320],{"class":97}," get_total",[91,162322,162323],{"class":250},"(numbers: list[",[91,162325,254],{"class":105},[91,162327,162328],{"class":250},"]) -> ",[91,162330,254],{"class":105},[91,162332,3862],{"class":250},[91,162334,162335,162337,162339],{"class":93,"line":38},[91,162336,159388],{"class":250},[91,162338,296],{"class":153},[91,162340,47414],{"class":105},[91,162342,162343,162345,162348,162350],{"class":93,"line":1304},[91,162344,3324],{"class":153},[91,162346,162347],{"class":250}," number ",[91,162349,26165],{"class":153},[91,162351,162352],{"class":250}," numbers:\n",[91,162354,162355,162357,162359],{"class":93,"line":1319},[91,162356,160063],{"class":250},[91,162358,9600],{"class":153},[91,162360,162361],{"class":250}," number\n",[91,162363,162364,162366],{"class":93,"line":1325},[91,162365,4213],{"class":153},[91,162367,162368],{"class":250}," total\n",[21,162370,162371],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[190,162373,162375],{"id":162374},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[82,162377,162379],{"className":30459,"code":162378,"language":30461,"meta":26,"style":26},"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",[88,162380,162381,162391,162395,162399,162407,162418,162428,162438,162448,162458,162462,162466,162475,162497,162501,162505,162514,162520,162540,162552,162563,162567,162576,162587,162592,162596,162600,162609,162615,162634,162646,162656,162660,162671,162681,162685,162693,162704,162708,162712,162716,162724,162729,162743,162747,162759,162764,162776,162781,162793,162798,162810,162820,162824,162830],{"__ignoreMap":26},[91,162382,162383,162386,162388],{"class":93,"line":94},[91,162384,162385],{"class":250},"balance ",[91,162387,296],{"class":153},[91,162389,162390],{"class":105}," 1000\n",[91,162392,162393],{"class":93,"line":38},[91,162394,2523],{"emptyLinePlaceholder":175},[91,162396,162397],{"class":93,"line":1304},[91,162398,2523],{"emptyLinePlaceholder":175},[91,162400,162401,162403,162405],{"class":93,"line":1319},[91,162402,32028],{"class":153},[91,162404,152114],{"class":97},[91,162406,32034],{"class":250},[91,162408,162409,162411,162413,162416],{"class":93,"line":1325},[91,162410,31380],{"class":105},[91,162412,251],{"class":250},[91,162414,162415],{"class":101},"\"====== ATM ======\"",[91,162417,257],{"class":250},[91,162419,162420,162422,162424,162426],{"class":93,"line":1339},[91,162421,31380],{"class":105},[91,162423,251],{"class":250},[91,162425,160729],{"class":101},[91,162427,257],{"class":250},[91,162429,162430,162432,162434,162436],{"class":93,"line":1345},[91,162431,31380],{"class":105},[91,162433,251],{"class":250},[91,162435,160740],{"class":101},[91,162437,257],{"class":250},[91,162439,162440,162442,162444,162446],{"class":93,"line":1436},[91,162441,31380],{"class":105},[91,162443,251],{"class":250},[91,162445,160751],{"class":101},[91,162447,257],{"class":250},[91,162449,162450,162452,162454,162456],{"class":93,"line":1442},[91,162451,31380],{"class":105},[91,162453,251],{"class":250},[91,162455,160762],{"class":101},[91,162457,257],{"class":250},[91,162459,162460],{"class":93,"line":1454},[91,162461,2523],{"emptyLinePlaceholder":175},[91,162463,162464],{"class":93,"line":1736},[91,162465,2523],{"emptyLinePlaceholder":175},[91,162467,162468,162470,162473],{"class":93,"line":1741},[91,162469,32028],{"class":153},[91,162471,162472],{"class":97}," show_balance",[91,162474,32034],{"class":250},[91,162476,162477,162479,162481,162483,162486,162488,162491,162493,162495],{"class":93,"line":1747},[91,162478,31380],{"class":105},[91,162480,251],{"class":250},[91,162482,302],{"class":153},[91,162484,162485],{"class":101},"\"当前余额:",[91,162487,1145],{"class":105},[91,162489,162490],{"class":250},"balance",[91,162492,1195],{"class":105},[91,162494,157093],{"class":101},[91,162496,257],{"class":250},[91,162498,162499],{"class":93,"line":1752},[91,162500,2523],{"emptyLinePlaceholder":175},[91,162502,162503],{"class":93,"line":1766},[91,162504,2523],{"emptyLinePlaceholder":175},[91,162506,162507,162509,162512],{"class":93,"line":1771},[91,162508,32028],{"class":153},[91,162510,162511],{"class":97}," save_money",[91,162513,32034],{"class":250},[91,162515,162516,162518],{"class":93,"line":1777},[91,162517,161942],{"class":153},[91,162519,150180],{"class":250},[91,162521,162522,162525,162527,162529,162531,162533,162535,162538],{"class":93,"line":1798},[91,162523,162524],{"class":250},"    money ",[91,162526,296],{"class":153},[91,162528,109878],{"class":105},[91,162530,251],{"class":250},[91,162532,53902],{"class":105},[91,162534,251],{"class":250},[91,162536,162537],{"class":101},"\"请输入存款金额:\"",[91,162539,30578],{"class":250},[91,162541,162542,162544,162546,162548,162550],{"class":93,"line":1803},[91,162543,3224],{"class":153},[91,162545,150223],{"class":250},[91,162547,1712],{"class":153},[91,162549,4216],{"class":105},[91,162551,3862],{"class":250},[91,162553,162554,162556,162558,162561],{"class":93,"line":1817},[91,162555,32532],{"class":105},[91,162557,251],{"class":250},[91,162559,162560],{"class":101},"\"金额必须大于0\"",[91,162562,257],{"class":250},[91,162564,162565],{"class":93,"line":1822},[91,162566,152442],{"class":153},[91,162568,162569,162572,162574],{"class":93,"line":1851},[91,162570,162571],{"class":250},"    balance ",[91,162573,9600],{"class":153},[91,162575,150256],{"class":250},[91,162577,162578,162580,162582,162585],{"class":93,"line":1856},[91,162579,31380],{"class":105},[91,162581,251],{"class":250},[91,162583,162584],{"class":101},"\"存款成功\"",[91,162586,257],{"class":250},[91,162588,162589],{"class":93,"line":1873},[91,162590,162591],{"class":250},"    show_balance()\n",[91,162593,162594],{"class":93,"line":1878},[91,162595,2523],{"emptyLinePlaceholder":175},[91,162597,162598],{"class":93,"line":1883},[91,162599,2523],{"emptyLinePlaceholder":175},[91,162601,162602,162604,162607],{"class":93,"line":1888},[91,162603,32028],{"class":153},[91,162605,162606],{"class":97}," withdraw_money",[91,162608,32034],{"class":250},[91,162610,162611,162613],{"class":93,"line":1902},[91,162612,161942],{"class":153},[91,162614,150180],{"class":250},[91,162616,162617,162619,162621,162623,162625,162627,162629,162632],{"class":93,"line":1907},[91,162618,162524],{"class":250},[91,162620,296],{"class":153},[91,162622,109878],{"class":105},[91,162624,251],{"class":250},[91,162626,53902],{"class":105},[91,162628,251],{"class":250},[91,162630,162631],{"class":101},"\"请输入取款金额:\"",[91,162633,30578],{"class":250},[91,162635,162636,162638,162640,162642,162644],{"class":93,"line":2700},[91,162637,3224],{"class":153},[91,162639,150223],{"class":250},[91,162641,1712],{"class":153},[91,162643,4216],{"class":105},[91,162645,3862],{"class":250},[91,162647,162648,162650,162652,162654],{"class":93,"line":2714},[91,162649,32532],{"class":105},[91,162651,251],{"class":250},[91,162653,162560],{"class":101},[91,162655,257],{"class":250},[91,162657,162658],{"class":93,"line":2722},[91,162659,152442],{"class":153},[91,162661,162662,162664,162666,162668],{"class":93,"line":2727},[91,162663,3224],{"class":153},[91,162665,150223],{"class":250},[91,162667,1209],{"class":153},[91,162669,162670],{"class":250}," balance:\n",[91,162672,162673,162675,162677,162679],{"class":93,"line":2733},[91,162674,32532],{"class":105},[91,162676,251],{"class":250},[91,162678,150318],{"class":101},[91,162680,257],{"class":250},[91,162682,162683],{"class":93,"line":2739},[91,162684,152442],{"class":153},[91,162686,162687,162689,162691],{"class":93,"line":2744},[91,162688,162571],{"class":250},[91,162690,150333],{"class":153},[91,162692,150256],{"class":250},[91,162694,162695,162697,162699,162702],{"class":93,"line":8071},[91,162696,31380],{"class":105},[91,162698,251],{"class":250},[91,162700,162701],{"class":101},"\"取款成功\"",[91,162703,257],{"class":250},[91,162705,162706],{"class":93,"line":8095},[91,162707,162591],{"class":250},[91,162709,162710],{"class":93,"line":8100},[91,162711,2523],{"emptyLinePlaceholder":175},[91,162713,162714],{"class":93,"line":8106},[91,162715,2523],{"emptyLinePlaceholder":175},[91,162717,162718,162720,162722],{"class":93,"line":8133},[91,162719,108744],{"class":153},[91,162721,95373],{"class":105},[91,162723,3862],{"class":250},[91,162725,162726],{"class":93,"line":8138},[91,162727,162728],{"class":250},"    show_menu()\n",[91,162730,162731,162733,162735,162737,162739,162741],{"class":93,"line":8144},[91,162732,160773],{"class":250},[91,162734,296],{"class":153},[91,162736,60686],{"class":105},[91,162738,251],{"class":250},[91,162740,153154],{"class":101},[91,162742,257],{"class":250},[91,162744,162745],{"class":93,"line":8156},[91,162746,2523],{"emptyLinePlaceholder":175},[91,162748,162749,162751,162753,162755,162757],{"class":93,"line":8168},[91,162750,3224],{"class":153},[91,162752,153167],{"class":250},[91,162754,3072],{"class":153},[91,162756,153172],{"class":101},[91,162758,3862],{"class":250},[91,162760,162761],{"class":93,"line":8180},[91,162762,162763],{"class":250},"        show_balance()\n",[91,162765,162766,162768,162770,162772,162774],{"class":93,"line":9839},[91,162767,39374],{"class":153},[91,162769,153167],{"class":250},[91,162771,3072],{"class":153},[91,162773,153191],{"class":101},[91,162775,3862],{"class":250},[91,162777,162778],{"class":93,"line":9864},[91,162779,162780],{"class":250},"        save_money()\n",[91,162782,162783,162785,162787,162789,162791],{"class":93,"line":9887},[91,162784,39374],{"class":153},[91,162786,153167],{"class":250},[91,162788,3072],{"class":153},[91,162790,153209],{"class":101},[91,162792,3862],{"class":250},[91,162794,162795],{"class":93,"line":9911},[91,162796,162797],{"class":250},"        withdraw_money()\n",[91,162799,162800,162802,162804,162806,162808],{"class":93,"line":9916},[91,162801,39374],{"class":153},[91,162803,153167],{"class":250},[91,162805,3072],{"class":153},[91,162807,153263],{"class":101},[91,162809,3862],{"class":250},[91,162811,162812,162814,162816,162818],{"class":93,"line":9921},[91,162813,32532],{"class":105},[91,162815,251],{"class":250},[91,162817,153274],{"class":101},[91,162819,257],{"class":250},[91,162821,162822],{"class":93,"line":9926},[91,162823,31708],{"class":153},[91,162825,162826,162828],{"class":93,"line":9935},[91,162827,158103],{"class":153},[91,162829,3862],{"class":250},[91,162831,162832,162834,162836,162838],{"class":93,"line":9940},[91,162833,32532],{"class":105},[91,162835,251],{"class":250},[91,162837,153295],{"class":101},[91,162839,257],{"class":250},[21,162841,162842],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[190,162844,162846],{"id":162845},"_514-易错点","5.14 易错点",[14,162848,162849,162852,162855,162860,162865,162868],{},[17,162850,162851],{},"函数定义后必须调用才会执行。",[17,162853,162854],{},"函数名后面有括号才是调用。",[17,162856,162857,162859],{},[88,162858,17169],{}," 后面的代码不会执行。",[17,162861,162862,162863,28504],{},"没有返回值的函数默认返回 ",[88,162864,95767],{},[17,162866,162867],{},"局部变量不能在函数外部访问。",[17,162869,162870,162871,162873],{},"不要滥用 ",[88,162872,161907],{},"，更好的方式是让函数返回新值。",[21,162875,162876,162877,162879],{},"例如不用 ",[88,162878,161907],{}," 改写存款：",[82,162881,162883],{"className":30459,"code":162882,"language":30461,"meta":26,"style":26},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[88,162884,162885,162894,162905,162909,162913,162921,162934],{"__ignoreMap":26},[91,162886,162887,162889,162891],{"class":93,"line":94},[91,162888,32028],{"class":153},[91,162890,162511],{"class":97},[91,162892,162893],{"class":250},"(balance, money):\n",[91,162895,162896,162898,162901,162903],{"class":93,"line":38},[91,162897,4213],{"class":153},[91,162899,162900],{"class":250}," balance ",[91,162902,730],{"class":153},[91,162904,150256],{"class":250},[91,162906,162907],{"class":93,"line":1304},[91,162908,2523],{"emptyLinePlaceholder":175},[91,162910,162911],{"class":93,"line":1319},[91,162912,2523],{"emptyLinePlaceholder":175},[91,162914,162915,162917,162919],{"class":93,"line":1325},[91,162916,162385],{"class":250},[91,162918,296],{"class":153},[91,162920,162390],{"class":105},[91,162922,162923,162925,162927,162930,162932],{"class":93,"line":1339},[91,162924,162385],{"class":250},[91,162926,296],{"class":153},[91,162928,162929],{"class":250}," save_money(balance, ",[91,162931,1846],{"class":105},[91,162933,257],{"class":250},[91,162935,162936,162938],{"class":93,"line":1345},[91,162937,30496],{"class":105},[91,162939,162940],{"class":250},"(balance)\n",[190,162942,162944],{"id":162943},"_515-本章练习","5.15 本章练习",[14,162946,162947,162954,162960,162966,162972],{},[17,162948,162949,162950,162953],{},"定义函数 ",[88,162951,162952],{},"print_student(name, age)","，输出学生信息。",[17,162955,162949,162956,162959],{},[88,162957,162958],{},"get_max(a, b, c)","，返回三个数中的最大值。",[17,162961,162949,162962,162965],{},[88,162963,162964],{},"is_even(num)","，判断一个数是否为偶数。",[17,162967,162949,162968,162971],{},[88,162969,162970],{},"calculate_bmi(weight, height)","，返回 BMI。",[17,162973,162974],{},"把第 4 章的菜单程序拆分成多个函数。",[168,162976,162977],{},"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":26,"searchDepth":38,"depth":38,"links":162979},[162980,162981,162982,162983,162984,162985,162986,162987,162988,162992,162993,162994,162995,162996,162997],{"id":161000,"depth":38,"text":161001},{"id":161041,"depth":38,"text":161042},{"id":161131,"depth":38,"text":161132},{"id":161212,"depth":38,"text":161213},{"id":161345,"depth":38,"text":161346},{"id":161467,"depth":38,"text":161468},{"id":161589,"depth":38,"text":161590},{"id":161666,"depth":38,"text":161667},{"id":161788,"depth":38,"text":161789,"children":162989},[162990,162991],{"id":161792,"depth":1304,"text":161793},{"id":161850,"depth":1304,"text":161851},{"id":161979,"depth":38,"text":161980},{"id":162105,"depth":38,"text":162106},{"id":162218,"depth":38,"text":162219},{"id":162374,"depth":38,"text":162375},{"id":162845,"depth":38,"text":162846},{"id":162943,"depth":38,"text":162944},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160992,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163004,"title":163005,"body":163006,"description":23500,"extension":173,"meta":166050,"navigation":175,"path":166051,"seo":166052,"stem":166053,"__hash__":166054},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163007,"toc":166031},[163008,163011,163015,163018,163021,163125,163128,163132,163135,163215,163218,163222,163225,163285,163288,163324,163327,163342,163346,163419,163422,163477,163480,163550,163553,163637,163647,163705,163709,163754,163757,163783,163786,163892,163896,163899,163941,163944,164008,164011,164015,164018,164079,164082,164112,164115,164153,164157,164160,164169,164172,164296,164299,164340,164344,164347,164358,164398,164401,164416,164421,164424,164491,164494,164584,164588,164591,164639,164642,164669,164671,164701,164704,164724,164727,164758,164761,164794,164798,164801,164825,164828,164852,164855,164879,164883,164886,165016,165019,165099,165102,165177,165181,165184,165234,165237,165279,165282,165306,165308,165332,165335,165390,165393,165459,165463,165466,165469,165507,165510,165563,165566,165612,165615,165648,165651,165655,165974,165978,166007,166011,166028],[10,163009,163005],{"id":163010},"_6-数据容器",[190,163012,163014],{"id":163013},"_61-什么是数据容器","6.1 什么是数据容器",[21,163016,163017],{},"数据容器用于一次保存多个数据。",[21,163019,163020],{},"常见容器：",[386,163022,163023,163040],{},[389,163024,163025],{},[392,163026,163027,163029,163032,163035,163038],{},[395,163028,25893],{},[395,163030,163031],{},"是否有序",[395,163033,163034],{},"是否可变",[395,163036,163037],{},"是否允许重复",[395,163039,27611],{},[433,163041,163042,163060,163076,163091,163108],{},[392,163043,163044,163047,163050,163053,163056],{},[438,163045,163046],{},"list列表",[438,163048,163049],{},"有序",[438,163051,163052],{},"可变",[438,163054,163055],{},"允许",[438,163057,163058],{},[88,163059,155338],{},[392,163061,163062,163065,163067,163070,163072],{},[438,163063,163064],{},"tuple元组",[438,163066,163049],{},[438,163068,163069],{},"不可变",[438,163071,163055],{},[438,163073,163074],{},[88,163075,155351],{},[392,163077,163078,163081,163083,163085,163087],{},[438,163079,163080],{},"str字符串",[438,163082,163049],{},[438,163084,163069],{},[438,163086,163055],{},[438,163088,163089],{},[88,163090,155961],{},[392,163092,163093,163096,163099,163101,163104],{},[438,163094,163095],{},"set集合",[438,163097,163098],{},"无序",[438,163100,163052],{},[438,163102,163103],{},"不允许",[438,163105,163106],{},[88,163107,155376],{},[392,163109,163110,163113,163115,163117,163120],{},[438,163111,163112],{},"dict字典",[438,163114,163049],{},[438,163116,163052],{},[438,163118,163119],{},"key不允许重复",[438,163121,163122],{},[88,163123,163124],{},"{\"name\": \"小明\"}",[21,163126,163127],{},"Python 3.7 之后，字典保持插入顺序。",[190,163129,163131],{"id":163130},"_62-列表list","6.2 列表list",[21,163133,163134],{},"列表用于保存一组有顺序的数据。",[82,163136,163138],{"className":30459,"code":163137,"language":30461,"meta":26,"style":26},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[88,163139,163140,163160,163185,163206],{"__ignoreMap":26},[91,163141,163142,163144,163146,163148,163150,163152,163154,163156,163158],{"class":93,"line":94},[91,163143,160461],{"class":250},[91,163145,296],{"class":153},[91,163147,52307],{"class":250},[91,163149,149969],{"class":101},[91,163151,12558],{"class":250},[91,163153,151017],{"class":101},[91,163155,12558],{"class":250},[91,163157,159812],{"class":101},[91,163159,33327],{"class":250},[91,163161,163162,163165,163167,163169,163171,163173,163175,163177,163179,163181,163183],{"class":93,"line":38},[91,163163,163164],{"class":250},"numbers ",[91,163166,296],{"class":153},[91,163168,52307],{"class":250},[91,163170,466],{"class":105},[91,163172,12558],{"class":250},[91,163174,327],{"class":105},[91,163176,12558],{"class":250},[91,163178,321],{"class":105},[91,163180,12558],{"class":250},[91,163182,542],{"class":105},[91,163184,33327],{"class":250},[91,163186,163187,163190,163192,163194,163196,163198,163200,163202,163204],{"class":93,"line":1304},[91,163188,163189],{"class":250},"mixed ",[91,163191,296],{"class":153},[91,163193,52307],{"class":250},[91,163195,149969],{"class":101},[91,163197,12558],{"class":250},[91,163199,899],{"class":105},[91,163201,12558],{"class":250},[91,163203,31557],{"class":105},[91,163205,33327],{"class":250},[91,163207,163208,163211,163213],{"class":93,"line":1319},[91,163209,163210],{"class":250},"empty ",[91,163212,296],{"class":153},[91,163214,51919],{"class":250},[21,163216,163217],{},"推荐一个列表中保存同类数据，代码更清晰。",[190,163219,163221],{"id":163220},"_63-列表索引","6.3 列表索引",[21,163223,163224],{},"正向索引从 0 开始：",[82,163226,163228],{"className":30459,"code":163227,"language":30461,"meta":26,"style":26},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[88,163229,163230,163250,163254,163265,163275],{"__ignoreMap":26},[91,163231,163232,163234,163236,163238,163240,163242,163244,163246,163248],{"class":93,"line":94},[91,163233,160461],{"class":250},[91,163235,296],{"class":153},[91,163237,52307],{"class":250},[91,163239,149969],{"class":101},[91,163241,12558],{"class":250},[91,163243,151017],{"class":101},[91,163245,12558],{"class":250},[91,163247,159812],{"class":101},[91,163249,33327],{"class":250},[91,163251,163252],{"class":93,"line":38},[91,163253,2523],{"emptyLinePlaceholder":175},[91,163255,163256,163258,163261,163263],{"class":93,"line":1304},[91,163257,30496],{"class":105},[91,163259,163260],{"class":250},"(names[",[91,163262,440],{"class":105},[91,163264,4780],{"class":250},[91,163266,163267,163269,163271,163273],{"class":93,"line":1319},[91,163268,30496],{"class":105},[91,163270,163260],{"class":250},[91,163272,466],{"class":105},[91,163274,4780],{"class":250},[91,163276,163277,163279,163281,163283],{"class":93,"line":1325},[91,163278,30496],{"class":105},[91,163280,163260],{"class":250},[91,163282,327],{"class":105},[91,163284,4780],{"class":250},[21,163286,163287],{},"反向索引从 -1 开始：",[82,163289,163291],{"className":30459,"code":163290,"language":30461,"meta":26,"style":26},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[88,163292,163293,163309],{"__ignoreMap":26},[91,163294,163295,163297,163299,163301,163303,163306],{"class":93,"line":94},[91,163296,30496],{"class":105},[91,163298,163260],{"class":250},[91,163300,781],{"class":153},[91,163302,466],{"class":105},[91,163304,163305],{"class":250},"])  ",[91,163307,163308],{"class":308},"# 小刚\n",[91,163310,163311,163313,163315,163317,163319,163321],{"class":93,"line":38},[91,163312,30496],{"class":105},[91,163314,163260],{"class":250},[91,163316,781],{"class":153},[91,163318,327],{"class":105},[91,163320,163305],{"class":250},[91,163322,163323],{"class":308},"# 小红\n",[21,163325,163326],{},"索引越界会报错：",[82,163328,163330],{"className":30459,"code":163329,"language":30461,"meta":26,"style":26},"print(names[3])\n",[88,163331,163332],{"__ignoreMap":26},[91,163333,163334,163336,163338,163340],{"class":93,"line":94},[91,163335,30496],{"class":105},[91,163337,163260],{"class":250},[91,163339,321],{"class":105},[91,163341,4780],{"class":250},[190,163343,163345],{"id":163344},"_64-列表常用方法","6.4 列表常用方法",[82,163347,163349],{"className":30459,"code":163348,"language":30461,"meta":26,"style":26},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[88,163350,163351,163367,163371,163380,163394,163408,163412],{"__ignoreMap":26},[91,163352,163353,163355,163357,163359,163361,163363,163365],{"class":93,"line":94},[91,163354,160461],{"class":250},[91,163356,296],{"class":153},[91,163358,52307],{"class":250},[91,163360,149969],{"class":101},[91,163362,12558],{"class":250},[91,163364,151017],{"class":101},[91,163366,33327],{"class":250},[91,163368,163369],{"class":93,"line":38},[91,163370,2523],{"emptyLinePlaceholder":175},[91,163372,163373,163376,163378],{"class":93,"line":1304},[91,163374,163375],{"class":250},"names.append(",[91,163377,159812],{"class":101},[91,163379,257],{"class":250},[91,163381,163382,163385,163387,163389,163392],{"class":93,"line":1319},[91,163383,163384],{"class":250},"names.insert(",[91,163386,466],{"class":105},[91,163388,12558],{"class":250},[91,163390,163391],{"class":101},"\"小李\"",[91,163393,257],{"class":250},[91,163395,163396,163399,163401,163403,163406],{"class":93,"line":1325},[91,163397,163398],{"class":250},"names.extend([",[91,163400,8806],{"class":101},[91,163402,12558],{"class":250},[91,163404,163405],{"class":101},"\"小赵\"",[91,163407,4780],{"class":250},[91,163409,163410],{"class":93,"line":1339},[91,163411,2523],{"emptyLinePlaceholder":175},[91,163413,163414,163416],{"class":93,"line":1345},[91,163415,30496],{"class":105},[91,163417,163418],{"class":250},"(names)\n",[21,163420,163421],{},"删除元素：",[82,163423,163425],{"className":30459,"code":163424,"language":30461,"meta":26,"style":26},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[88,163426,163427,163436,163446,163460,163472],{"__ignoreMap":26},[91,163428,163429,163432,163434],{"class":93,"line":94},[91,163430,163431],{"class":250},"names.remove(",[91,163433,151017],{"class":101},[91,163435,257],{"class":250},[91,163437,163438,163441,163443],{"class":93,"line":38},[91,163439,163440],{"class":250},"last ",[91,163442,296],{"class":153},[91,163444,163445],{"class":250}," names.pop()\n",[91,163447,163448,163451,163453,163456,163458],{"class":93,"line":1304},[91,163449,163450],{"class":250},"first ",[91,163452,296],{"class":153},[91,163454,163455],{"class":250}," names.pop(",[91,163457,440],{"class":105},[91,163459,257],{"class":250},[91,163461,163462,163465,163468,163470],{"class":93,"line":1319},[91,163463,163464],{"class":153},"del",[91,163466,163467],{"class":250}," names[",[91,163469,440],{"class":105},[91,163471,33327],{"class":250},[91,163473,163474],{"class":93,"line":1325},[91,163475,163476],{"class":250},"names.clear()\n",[21,163478,163479],{},"查询和统计：",[82,163481,163483],{"className":30459,"code":163482,"language":30461,"meta":26,"style":26},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[88,163484,163485,163513,163517,163528,163539],{"__ignoreMap":26},[91,163486,163487,163489,163491,163493,163495,163497,163499,163501,163503,163505,163507,163509,163511],{"class":93,"line":94},[91,163488,163164],{"class":250},[91,163490,296],{"class":153},[91,163492,52307],{"class":250},[91,163494,466],{"class":105},[91,163496,12558],{"class":250},[91,163498,327],{"class":105},[91,163500,12558],{"class":250},[91,163502,321],{"class":105},[91,163504,12558],{"class":250},[91,163506,327],{"class":105},[91,163508,12558],{"class":250},[91,163510,542],{"class":105},[91,163512,33327],{"class":250},[91,163514,163515],{"class":93,"line":38},[91,163516,2523],{"emptyLinePlaceholder":175},[91,163518,163519,163521,163524,163526],{"class":93,"line":1304},[91,163520,30496],{"class":105},[91,163522,163523],{"class":250},"(numbers.index(",[91,163525,321],{"class":105},[91,163527,30578],{"class":250},[91,163529,163530,163532,163535,163537],{"class":93,"line":1319},[91,163531,30496],{"class":105},[91,163533,163534],{"class":250},"(numbers.count(",[91,163536,327],{"class":105},[91,163538,30578],{"class":250},[91,163540,163541,163543,163545,163547],{"class":93,"line":1325},[91,163542,30496],{"class":105},[91,163544,251],{"class":250},[91,163546,7481],{"class":105},[91,163548,163549],{"class":250},"(numbers))\n",[21,163551,163552],{},"排序：",[82,163554,163556],{"className":30459,"code":163555,"language":30461,"meta":26,"style":26},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[88,163557,163558,163582,163586,163591,163598,163602,163616,163622,163626,163631],{"__ignoreMap":26},[91,163559,163560,163562,163564,163566,163568,163570,163572,163574,163576,163578,163580],{"class":93,"line":94},[91,163561,163164],{"class":250},[91,163563,296],{"class":153},[91,163565,52307],{"class":250},[91,163567,321],{"class":105},[91,163569,12558],{"class":250},[91,163571,466],{"class":105},[91,163573,12558],{"class":250},[91,163575,568],{"class":105},[91,163577,12558],{"class":250},[91,163579,327],{"class":105},[91,163581,33327],{"class":250},[91,163583,163584],{"class":93,"line":38},[91,163585,2523],{"emptyLinePlaceholder":175},[91,163587,163588],{"class":93,"line":1304},[91,163589,163590],{"class":250},"numbers.sort()\n",[91,163592,163593,163595],{"class":93,"line":1319},[91,163594,30496],{"class":105},[91,163596,163597],{"class":250},"(numbers)\n",[91,163599,163600],{"class":93,"line":1325},[91,163601,2523],{"emptyLinePlaceholder":175},[91,163603,163604,163607,163610,163612,163614],{"class":93,"line":1339},[91,163605,163606],{"class":250},"numbers.sort(",[91,163608,163609],{"class":5339},"reverse",[91,163611,296],{"class":153},[91,163613,31557],{"class":105},[91,163615,257],{"class":250},[91,163617,163618,163620],{"class":93,"line":1345},[91,163619,30496],{"class":105},[91,163621,163597],{"class":250},[91,163623,163624],{"class":93,"line":1436},[91,163625,2523],{"emptyLinePlaceholder":175},[91,163627,163628],{"class":93,"line":1442},[91,163629,163630],{"class":250},"numbers.reverse()\n",[91,163632,163633,163635],{"class":93,"line":1454},[91,163634,30496],{"class":105},[91,163636,163597],{"class":250},[21,163638,163639,163642,163643,163646],{},[88,163640,163641],{},"sort()"," 会修改原列表，",[88,163644,163645],{},"sorted()"," 返回新列表。",[82,163648,163650],{"className":30459,"code":163649,"language":30461,"meta":26,"style":26},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[88,163651,163652,163676,163688,163692,163698],{"__ignoreMap":26},[91,163653,163654,163656,163658,163660,163662,163664,163666,163668,163670,163672,163674],{"class":93,"line":94},[91,163655,163164],{"class":250},[91,163657,296],{"class":153},[91,163659,52307],{"class":250},[91,163661,321],{"class":105},[91,163663,12558],{"class":250},[91,163665,466],{"class":105},[91,163667,12558],{"class":250},[91,163669,568],{"class":105},[91,163671,12558],{"class":250},[91,163673,327],{"class":105},[91,163675,33327],{"class":250},[91,163677,163678,163681,163683,163686],{"class":93,"line":38},[91,163679,163680],{"class":250},"new_numbers ",[91,163682,296],{"class":153},[91,163684,163685],{"class":105}," sorted",[91,163687,163597],{"class":250},[91,163689,163690],{"class":93,"line":1304},[91,163691,2523],{"emptyLinePlaceholder":175},[91,163693,163694,163696],{"class":93,"line":1319},[91,163695,30496],{"class":105},[91,163697,163597],{"class":250},[91,163699,163700,163702],{"class":93,"line":1325},[91,163701,30496],{"class":105},[91,163703,163704],{"class":250},"(new_numbers)\n",[190,163706,163708],{"id":163707},"_65-列表遍历","6.5 列表遍历",[82,163710,163712],{"className":30459,"code":163711,"language":30461,"meta":26,"style":26},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[88,163713,163714,163734,163738,163748],{"__ignoreMap":26},[91,163715,163716,163718,163720,163722,163724,163726,163728,163730,163732],{"class":93,"line":94},[91,163717,160461],{"class":250},[91,163719,296],{"class":153},[91,163721,52307],{"class":250},[91,163723,149969],{"class":101},[91,163725,12558],{"class":250},[91,163727,151017],{"class":101},[91,163729,12558],{"class":250},[91,163731,159812],{"class":101},[91,163733,33327],{"class":250},[91,163735,163736],{"class":93,"line":38},[91,163737,2523],{"emptyLinePlaceholder":175},[91,163739,163740,163742,163744,163746],{"class":93,"line":1304},[91,163741,3148],{"class":153},[91,163743,160497],{"class":250},[91,163745,26165],{"class":153},[91,163747,160502],{"class":250},[91,163749,163750,163752],{"class":93,"line":1319},[91,163751,31380],{"class":105},[91,163753,150741],{"class":250},[21,163755,163756],{},"需要索引时：",[82,163758,163760],{"className":30459,"code":163759,"language":30461,"meta":26,"style":26},"for index, name in enumerate(names):\n    print(index, name)\n",[88,163761,163762,163776],{"__ignoreMap":26},[91,163763,163764,163766,163769,163771,163773],{"class":93,"line":94},[91,163765,3148],{"class":153},[91,163767,163768],{"class":250}," index, name ",[91,163770,26165],{"class":153},[91,163772,31687],{"class":105},[91,163774,163775],{"class":250},"(names):\n",[91,163777,163778,163780],{"class":93,"line":38},[91,163779,31380],{"class":105},[91,163781,163782],{"class":250},"(index, name)\n",[21,163784,163785],{},"统计总分：",[82,163787,163789],{"className":30459,"code":163788,"language":30461,"meta":26,"style":26},"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",[88,163790,163791,163816,163824,163828,163839,163847,163851,163868],{"__ignoreMap":26},[91,163792,163793,163796,163798,163800,163802,163804,163806,163808,163810,163812,163814],{"class":93,"line":94},[91,163794,163795],{"class":250},"scores ",[91,163797,296],{"class":153},[91,163799,52307],{"class":250},[91,163801,1111],{"class":105},[91,163803,12558],{"class":250},[91,163805,985],{"class":105},[91,163807,12558],{"class":250},[91,163809,503],{"class":105},[91,163811,12558],{"class":250},[91,163813,810],{"class":105},[91,163815,33327],{"class":250},[91,163817,163818,163820,163822],{"class":93,"line":38},[91,163819,157341],{"class":250},[91,163821,296],{"class":153},[91,163823,47414],{"class":105},[91,163825,163826],{"class":93,"line":1304},[91,163827,2523],{"emptyLinePlaceholder":175},[91,163829,163830,163832,163834,163836],{"class":93,"line":1319},[91,163831,3148],{"class":153},[91,163833,157864],{"class":250},[91,163835,26165],{"class":153},[91,163837,163838],{"class":250}," scores:\n",[91,163840,163841,163843,163845],{"class":93,"line":1325},[91,163842,159388],{"class":250},[91,163844,9600],{"class":153},[91,163846,1703],{"class":250},[91,163848,163849],{"class":93,"line":1339},[91,163850,2523],{"emptyLinePlaceholder":175},[91,163852,163853,163856,163858,163861,163863,163865],{"class":93,"line":1345},[91,163854,163855],{"class":250},"avg ",[91,163857,296],{"class":153},[91,163859,163860],{"class":250}," total ",[91,163862,833],{"class":153},[91,163864,7454],{"class":105},[91,163866,163867],{"class":250},"(scores)\n",[91,163869,163870,163872,163874,163876,163879,163881,163884,163886,163888,163890],{"class":93,"line":1436},[91,163871,30496],{"class":105},[91,163873,251],{"class":250},[91,163875,302],{"class":153},[91,163877,163878],{"class":101},"\"平均分:",[91,163880,1145],{"class":105},[91,163882,163883],{"class":250},"avg",[91,163885,157240],{"class":153},[91,163887,1195],{"class":105},[91,163889,500],{"class":101},[91,163891,257],{"class":250},[190,163893,163895],{"id":163894},"_66-元组tuple","6.6 元组tuple",[21,163897,163898],{},"元组和列表类似，但不可修改。",[82,163900,163902],{"className":30459,"code":163901,"language":30461,"meta":26,"style":26},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[88,163903,163904,163921],{"__ignoreMap":26},[91,163905,163906,163909,163911,163913,163915,163917,163919],{"class":93,"line":94},[91,163907,163908],{"class":250},"point ",[91,163910,296],{"class":153},[91,163912,1782],{"class":250},[91,163914,695],{"class":105},[91,163916,12558],{"class":250},[91,163918,949],{"class":105},[91,163920,257],{"class":250},[91,163922,163923,163925,163927,163929,163931,163933,163935,163937,163939],{"class":93,"line":38},[91,163924,116395],{"class":250},[91,163926,296],{"class":153},[91,163928,1782],{"class":250},[91,163930,149969],{"class":101},[91,163932,12558],{"class":250},[91,163934,899],{"class":105},[91,163936,12558],{"class":250},[91,163938,69350],{"class":101},[91,163940,257],{"class":250},[21,163942,163943],{},"单元素元组必须加逗号：",[82,163945,163947],{"className":30459,"code":163946,"language":30461,"meta":26,"style":26},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[88,163948,163949,163963,163976,163980,163994],{"__ignoreMap":26},[91,163950,163951,163954,163956,163958,163960],{"class":93,"line":94},[91,163952,163953],{"class":250},"t1 ",[91,163955,296],{"class":153},[91,163957,1782],{"class":250},[91,163959,695],{"class":105},[91,163961,163962],{"class":250},",)\n",[91,163964,163965,163968,163970,163972,163974],{"class":93,"line":38},[91,163966,163967],{"class":250},"t2 ",[91,163969,296],{"class":153},[91,163971,1782],{"class":250},[91,163973,695],{"class":105},[91,163975,257],{"class":250},[91,163977,163978],{"class":93,"line":1304},[91,163979,2523],{"emptyLinePlaceholder":175},[91,163981,163982,163984,163986,163988,163991],{"class":93,"line":1319},[91,163983,30496],{"class":105},[91,163985,251],{"class":250},[91,163987,103188],{"class":105},[91,163989,163990],{"class":250},"(t1))  ",[91,163992,163993],{"class":308},"# tuple\n",[91,163995,163996,163998,164000,164002,164005],{"class":93,"line":1325},[91,163997,30496],{"class":105},[91,163999,251],{"class":250},[91,164001,103188],{"class":105},[91,164003,164004],{"class":250},"(t2))  ",[91,164006,164007],{"class":308},"# int\n",[21,164009,164010],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[190,164012,164014],{"id":164013},"_67-字符串str","6.7 字符串str",[21,164016,164017],{},"字符串也是序列，可以索引、切片和遍历。",[82,164019,164021],{"className":30459,"code":164020,"language":30461,"meta":26,"style":26},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[88,164022,164023,164031,164035,164046,164058,164062,164073],{"__ignoreMap":26},[91,164024,164025,164027,164029],{"class":93,"line":94},[91,164026,156525],{"class":250},[91,164028,296],{"class":153},[91,164030,159762],{"class":101},[91,164032,164033],{"class":93,"line":38},[91,164034,2523],{"emptyLinePlaceholder":175},[91,164036,164037,164039,164042,164044],{"class":93,"line":1304},[91,164038,30496],{"class":105},[91,164040,164041],{"class":250},"(text[",[91,164043,440],{"class":105},[91,164045,4780],{"class":250},[91,164047,164048,164050,164052,164054,164056],{"class":93,"line":1319},[91,164049,30496],{"class":105},[91,164051,164041],{"class":250},[91,164053,781],{"class":153},[91,164055,466],{"class":105},[91,164057,4780],{"class":250},[91,164059,164060],{"class":93,"line":1325},[91,164061,2523],{"emptyLinePlaceholder":175},[91,164063,164064,164066,164068,164070],{"class":93,"line":1339},[91,164065,3148],{"class":153},[91,164067,159773],{"class":250},[91,164069,26165],{"class":153},[91,164071,164072],{"class":250}," text:\n",[91,164074,164075,164077],{"class":93,"line":1345},[91,164076,31380],{"class":105},[91,164078,159784],{"class":250},[21,164080,164081],{},"字符串不可变：",[82,164083,164085],{"className":30459,"code":164084,"language":30461,"meta":26,"style":26},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[88,164086,164087,164095],{"__ignoreMap":26},[91,164088,164089,164091,164093],{"class":93,"line":94},[91,164090,156525],{"class":250},[91,164092,296],{"class":153},[91,164094,159762],{"class":101},[91,164096,164097,164100,164102,164104,164106,164109],{"class":93,"line":38},[91,164098,164099],{"class":250},"text[",[91,164101,440],{"class":105},[91,164103,4566],{"class":250},[91,164105,296],{"class":153},[91,164107,164108],{"class":101}," \"P\"",[91,164110,164111],{"class":308},"  # 报错\n",[21,164113,164114],{},"如果要得到新字符串：",[82,164116,164118],{"className":30459,"code":164117,"language":30461,"meta":26,"style":26},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[88,164119,164120,164128,164146],{"__ignoreMap":26},[91,164121,164122,164124,164126],{"class":93,"line":94},[91,164123,156525],{"class":250},[91,164125,296],{"class":153},[91,164127,159762],{"class":101},[91,164129,164130,164132,164134,164136,164138,164141,164143],{"class":93,"line":38},[91,164131,156525],{"class":250},[91,164133,296],{"class":153},[91,164135,164108],{"class":101},[91,164137,45647],{"class":153},[91,164139,164140],{"class":250}," text[",[91,164142,466],{"class":105},[91,164144,164145],{"class":250},":]\n",[91,164147,164148,164150],{"class":93,"line":1304},[91,164149,30496],{"class":105},[91,164151,164152],{"class":250},"(text)\n",[190,164154,164156],{"id":164155},"_68-切片","6.8 切片",[21,164158,164159],{},"切片用于从序列中取一部分。",[82,164161,164163],{"className":30459,"code":164162,"language":30461,"meta":26,"style":26},"序列[开始:结束:步长]\n",[88,164164,164165],{"__ignoreMap":26},[91,164166,164167],{"class":93,"line":94},[91,164168,164162],{"class":250},[21,164170,164171],{},"结束位置不包含。",[82,164173,164175],{"className":30459,"code":164174,"language":30461,"meta":26,"style":26},"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",[88,164176,164177,164214,164218,164237,164252,164266,164280],{"__ignoreMap":26},[91,164178,164179,164182,164184,164186,164188,164190,164192,164194,164196,164198,164200,164202,164204,164206,164208,164210,164212],{"class":93,"line":94},[91,164180,164181],{"class":250},"nums ",[91,164183,296],{"class":153},[91,164185,52307],{"class":250},[91,164187,440],{"class":105},[91,164189,12558],{"class":250},[91,164191,466],{"class":105},[91,164193,12558],{"class":250},[91,164195,327],{"class":105},[91,164197,12558],{"class":250},[91,164199,321],{"class":105},[91,164201,12558],{"class":250},[91,164203,542],{"class":105},[91,164205,12558],{"class":250},[91,164207,568],{"class":105},[91,164209,12558],{"class":250},[91,164211,593],{"class":105},[91,164213,33327],{"class":250},[91,164215,164216],{"class":93,"line":38},[91,164217,2523],{"emptyLinePlaceholder":175},[91,164219,164220,164222,164225,164227,164229,164231,164234],{"class":93,"line":1304},[91,164221,30496],{"class":105},[91,164223,164224],{"class":250},"(nums[",[91,164226,466],{"class":105},[91,164228,1108],{"class":250},[91,164230,542],{"class":105},[91,164232,164233],{"class":250},"])    ",[91,164235,164236],{"class":308},"# [1, 2, 3]\n",[91,164238,164239,164241,164244,164246,164249],{"class":93,"line":1319},[91,164240,30496],{"class":105},[91,164242,164243],{"class":250},"(nums[:",[91,164245,321],{"class":105},[91,164247,164248],{"class":250},"])     ",[91,164250,164251],{"class":308},"# [0, 1, 2]\n",[91,164253,164254,164256,164258,164260,164263],{"class":93,"line":1325},[91,164255,30496],{"class":105},[91,164257,164224],{"class":250},[91,164259,321],{"class":105},[91,164261,164262],{"class":250},":])     ",[91,164264,164265],{"class":308},"# [3, 4, 5, 6]\n",[91,164267,164268,164270,164273,164275,164277],{"class":93,"line":1339},[91,164269,30496],{"class":105},[91,164271,164272],{"class":250},"(nums[::",[91,164274,327],{"class":105},[91,164276,164233],{"class":250},[91,164278,164279],{"class":308},"# [0, 2, 4, 6]\n",[91,164281,164282,164284,164286,164288,164290,164293],{"class":93,"line":1345},[91,164283,30496],{"class":105},[91,164285,164272],{"class":250},[91,164287,781],{"class":153},[91,164289,466],{"class":105},[91,164291,164292],{"class":250},"])   ",[91,164294,164295],{"class":308},"# 反转\n",[21,164297,164298],{},"字符串切片：",[82,164300,164302],{"className":30459,"code":164301,"language":30461,"meta":26,"style":26},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[88,164303,164304,164313,164327],{"__ignoreMap":26},[91,164305,164306,164308,164310],{"class":93,"line":94},[91,164307,156525],{"class":250},[91,164309,296],{"class":153},[91,164311,164312],{"class":101}," \"abcdef\"\n",[91,164314,164315,164317,164319,164321,164323,164325],{"class":93,"line":38},[91,164316,30496],{"class":105},[91,164318,164041],{"class":250},[91,164320,466],{"class":105},[91,164322,1108],{"class":250},[91,164324,542],{"class":105},[91,164326,4780],{"class":250},[91,164328,164329,164331,164334,164336,164338],{"class":93,"line":1304},[91,164330,30496],{"class":105},[91,164332,164333],{"class":250},"(text[::",[91,164335,781],{"class":153},[91,164337,466],{"class":105},[91,164339,4780],{"class":250},[190,164341,164343],{"id":164342},"_69-集合set","6.9 集合set",[21,164345,164346],{},"集合特点：",[14,164348,164349,164352,164355],{},[17,164350,164351],{},"无序。",[17,164353,164354],{},"元素不重复。",[17,164356,164357],{},"可以做交集、并集、差集。",[82,164359,164361],{"className":30459,"code":164360,"language":30461,"meta":26,"style":26},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[88,164362,164363,164391],{"__ignoreMap":26},[91,164364,164365,164367,164369,164371,164373,164375,164377,164379,164381,164383,164385,164387,164389],{"class":93,"line":94},[91,164366,164181],{"class":250},[91,164368,296],{"class":153},[91,164370,4571],{"class":250},[91,164372,466],{"class":105},[91,164374,12558],{"class":250},[91,164376,327],{"class":105},[91,164378,12558],{"class":250},[91,164380,321],{"class":105},[91,164382,12558],{"class":250},[91,164384,321],{"class":105},[91,164386,12558],{"class":250},[91,164388,542],{"class":105},[91,164390,1689],{"class":250},[91,164392,164393,164395],{"class":93,"line":38},[91,164394,30496],{"class":105},[91,164396,164397],{"class":250},"(nums)\n",[21,164399,164400],{},"创建空集合：",[82,164402,164404],{"className":30459,"code":164403,"language":30461,"meta":26,"style":26},"s = set()\n",[88,164405,164406],{"__ignoreMap":26},[91,164407,164408,164410,164412,164414],{"class":93,"line":94},[91,164409,10702],{"class":250},[91,164411,296],{"class":153},[91,164413,119803],{"class":105},[91,164415,2099],{"class":250},[21,164417,9148,164418,164420],{},[88,164419,32540],{}," 是空字典，不是空集合。",[21,164422,164423],{},"集合常用操作：",[82,164425,164427],{"className":30459,"code":164426,"language":30461,"meta":26,"style":26},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[88,164428,164429,164449,164453,164462,164471,164480],{"__ignoreMap":26},[91,164430,164431,164433,164435,164437,164439,164441,164443,164445,164447],{"class":93,"line":94},[91,164432,10702],{"class":250},[91,164434,296],{"class":153},[91,164436,4571],{"class":250},[91,164438,466],{"class":105},[91,164440,12558],{"class":250},[91,164442,327],{"class":105},[91,164444,12558],{"class":250},[91,164446,321],{"class":105},[91,164448,1689],{"class":250},[91,164450,164451],{"class":93,"line":38},[91,164452,2523],{"emptyLinePlaceholder":175},[91,164454,164455,164458,164460],{"class":93,"line":1304},[91,164456,164457],{"class":250},"s.add(",[91,164459,542],{"class":105},[91,164461,257],{"class":250},[91,164463,164464,164467,164469],{"class":93,"line":1319},[91,164465,164466],{"class":250},"s.remove(",[91,164468,327],{"class":105},[91,164470,257],{"class":250},[91,164472,164473,164476,164478],{"class":93,"line":1325},[91,164474,164475],{"class":250},"s.discard(",[91,164477,695],{"class":105},[91,164479,257],{"class":250},[91,164481,164482,164484,164486,164488],{"class":93,"line":1339},[91,164483,30496],{"class":105},[91,164485,251],{"class":250},[91,164487,7481],{"class":105},[91,164489,164490],{"class":250},"(s))\n",[21,164492,164493],{},"交并差：",[82,164495,164497],{"className":30459,"code":164496,"language":30461,"meta":26,"style":26},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[88,164498,164499,164519,164539,164543,164558,164571],{"__ignoreMap":26},[91,164500,164501,164503,164505,164507,164509,164511,164513,164515,164517],{"class":93,"line":94},[91,164502,11042],{"class":250},[91,164504,296],{"class":153},[91,164506,4571],{"class":250},[91,164508,466],{"class":105},[91,164510,12558],{"class":250},[91,164512,327],{"class":105},[91,164514,12558],{"class":250},[91,164516,321],{"class":105},[91,164518,1689],{"class":250},[91,164520,164521,164523,164525,164527,164529,164531,164533,164535,164537],{"class":93,"line":38},[91,164522,11068],{"class":250},[91,164524,296],{"class":153},[91,164526,4571],{"class":250},[91,164528,321],{"class":105},[91,164530,12558],{"class":250},[91,164532,542],{"class":105},[91,164534,12558],{"class":250},[91,164536,568],{"class":105},[91,164538,1689],{"class":250},[91,164540,164541],{"class":93,"line":1304},[91,164542,2523],{"emptyLinePlaceholder":175},[91,164544,164545,164547,164550,164552,164555],{"class":93,"line":1319},[91,164546,30496],{"class":105},[91,164548,164549],{"class":250},"(a ",[91,164551,602],{"class":153},[91,164553,164554],{"class":250}," b)  ",[91,164556,164557],{"class":308},"# 交集\n",[91,164559,164560,164562,164564,164566,164568],{"class":93,"line":1325},[91,164561,30496],{"class":105},[91,164563,164549],{"class":250},[91,164565,1170],{"class":153},[91,164567,164554],{"class":250},[91,164569,164570],{"class":308},"# 并集\n",[91,164572,164573,164575,164577,164579,164581],{"class":93,"line":1339},[91,164574,30496],{"class":105},[91,164576,164549],{"class":250},[91,164578,781],{"class":153},[91,164580,164554],{"class":250},[91,164582,164583],{"class":308},"# 差集\n",[190,164585,164587],{"id":164586},"_610-字典dict","6.10 字典dict",[21,164589,164590],{},"字典通过 key-value 保存数据。",[82,164592,164594],{"className":30459,"code":164593,"language":30461,"meta":26,"style":26},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[88,164595,164596,164604,164614,164625,164635],{"__ignoreMap":26},[91,164597,164598,164600,164602],{"class":93,"line":94},[91,164599,149562],{"class":250},[91,164601,296],{"class":153},[91,164603,15695],{"class":250},[91,164605,164606,164608,164610,164612],{"class":93,"line":38},[91,164607,147101],{"class":101},[91,164609,51518],{"class":250},[91,164611,149969],{"class":101},[91,164613,31547],{"class":250},[91,164615,164616,164619,164621,164623],{"class":93,"line":1304},[91,164617,164618],{"class":101},"    \"age\"",[91,164620,51518],{"class":250},[91,164622,899],{"class":105},[91,164624,31547],{"class":250},[91,164626,164627,164630,164632],{"class":93,"line":1319},[91,164628,164629],{"class":101},"    \"score\"",[91,164631,51518],{"class":250},[91,164633,164634],{"class":105},"95\n",[91,164636,164637],{"class":93,"line":1325},[91,164638,1689],{"class":250},[21,164640,164641],{},"获取值：",[82,164643,164645],{"className":30459,"code":164644,"language":30461,"meta":26,"style":26},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[88,164646,164647,164658],{"__ignoreMap":26},[91,164648,164649,164651,164654,164656],{"class":93,"line":94},[91,164650,30496],{"class":105},[91,164652,164653],{"class":250},"(student[",[91,164655,62760],{"class":101},[91,164657,4780],{"class":250},[91,164659,164660,164662,164665,164667],{"class":93,"line":38},[91,164661,30496],{"class":105},[91,164663,164664],{"class":250},"(student.get(",[91,164666,62760],{"class":101},[91,164668,30578],{"class":250},[21,164670,15511],{},[82,164672,164674],{"className":30459,"code":164673,"language":30461,"meta":26,"style":26},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[88,164675,164676,164689],{"__ignoreMap":26},[91,164677,164678,164680,164683,164686],{"class":93,"line":94},[91,164679,152940],{"class":250},[91,164681,164682],{"class":101},"\"address\"",[91,164684,164685],{"class":250},"]     ",[91,164687,164688],{"class":308},"# key不存在会报错\n",[91,164690,164691,164694,164696,164698],{"class":93,"line":38},[91,164692,164693],{"class":250},"student.get(",[91,164695,164682],{"class":101},[91,164697,13837],{"class":250},[91,164699,164700],{"class":308},"# key不存在返回None\n",[21,164702,164703],{},"设置默认值：",[82,164705,164707],{"className":30459,"code":164706,"language":30461,"meta":26,"style":26},"print(student.get(\"address\", \"未知\"))\n",[88,164708,164709],{"__ignoreMap":26},[91,164710,164711,164713,164715,164717,164719,164722],{"class":93,"line":94},[91,164712,30496],{"class":105},[91,164714,164664],{"class":250},[91,164716,164682],{"class":101},[91,164718,12558],{"class":250},[91,164720,164721],{"class":101},"\"未知\"",[91,164723,30578],{"class":250},[21,164725,164726],{},"新增和修改：",[82,164728,164730],{"className":30459,"code":164729,"language":30461,"meta":26,"style":26},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[88,164731,164732,164745],{"__ignoreMap":26},[91,164733,164734,164736,164738,164740,164742],{"class":93,"line":94},[91,164735,152940],{"class":250},[91,164737,69205],{"class":101},[91,164739,4566],{"class":250},[91,164741,296],{"class":153},[91,164743,164744],{"class":105}," 19\n",[91,164746,164747,164749,164751,164753,164755],{"class":93,"line":38},[91,164748,152940],{"class":250},[91,164750,164682],{"class":101},[91,164752,4566],{"class":250},[91,164754,296],{"class":153},[91,164756,164757],{"class":101}," \"北京\"\n",[21,164759,164760],{},"删除：",[82,164762,164764],{"className":30459,"code":164763,"language":30461,"meta":26,"style":26},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[88,164765,164766,164779,164789],{"__ignoreMap":26},[91,164767,164768,164770,164772,164775,164777],{"class":93,"line":94},[91,164769,155439],{"class":250},[91,164771,296],{"class":153},[91,164773,164774],{"class":250}," student.pop(",[91,164776,151553],{"class":101},[91,164778,257],{"class":250},[91,164780,164781,164783,164785,164787],{"class":93,"line":38},[91,164782,163464],{"class":153},[91,164784,152230],{"class":250},[91,164786,69205],{"class":101},[91,164788,33327],{"class":250},[91,164790,164791],{"class":93,"line":1304},[91,164792,164793],{"class":250},"student.clear()\n",[190,164795,164797],{"id":164796},"_611-字典遍历","6.11 字典遍历",[21,164799,164800],{},"遍历 key：",[82,164802,164804],{"className":30459,"code":164803,"language":30461,"meta":26,"style":26},"for key in student:\n    print(key, student[key])\n",[88,164805,164806,164818],{"__ignoreMap":26},[91,164807,164808,164810,164813,164815],{"class":93,"line":94},[91,164809,3148],{"class":153},[91,164811,164812],{"class":250}," key ",[91,164814,26165],{"class":153},[91,164816,164817],{"class":250}," student:\n",[91,164819,164820,164822],{"class":93,"line":38},[91,164821,31380],{"class":105},[91,164823,164824],{"class":250},"(key, student[key])\n",[21,164826,164827],{},"遍历 value：",[82,164829,164831],{"className":30459,"code":164830,"language":30461,"meta":26,"style":26},"for value in student.values():\n    print(value)\n",[88,164832,164833,164845],{"__ignoreMap":26},[91,164834,164835,164837,164840,164842],{"class":93,"line":94},[91,164836,3148],{"class":153},[91,164838,164839],{"class":250}," value ",[91,164841,26165],{"class":153},[91,164843,164844],{"class":250}," student.values():\n",[91,164846,164847,164849],{"class":93,"line":38},[91,164848,31380],{"class":105},[91,164850,164851],{"class":250},"(value)\n",[21,164853,164854],{},"遍历 key 和 value：",[82,164856,164858],{"className":30459,"code":164857,"language":30461,"meta":26,"style":26},"for key, value in student.items():\n    print(key, value)\n",[88,164859,164860,164872],{"__ignoreMap":26},[91,164861,164862,164864,164867,164869],{"class":93,"line":94},[91,164863,3148],{"class":153},[91,164865,164866],{"class":250}," key, value ",[91,164868,26165],{"class":153},[91,164870,164871],{"class":250}," student.items():\n",[91,164873,164874,164876],{"class":93,"line":38},[91,164875,31380],{"class":105},[91,164877,164878],{"class":250},"(key, value)\n",[190,164880,164882],{"id":164881},"_612-嵌套容器","6.12 嵌套容器",[21,164884,164885],{},"列表中保存字典，是项目中最常见的结构之一。",[82,164887,164889],{"className":30459,"code":164888,"language":30461,"meta":26,"style":26},"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",[88,164890,164891,164899,164927,164955,164983,164987,164991,165001],{"__ignoreMap":26},[91,164892,164893,164895,164897],{"class":93,"line":94},[91,164894,159797],{"class":250},[91,164896,296],{"class":153},[91,164898,55528],{"class":250},[91,164900,164901,164903,164905,164907,164909,164911,164913,164915,164917,164919,164921,164923,164925],{"class":93,"line":38},[91,164902,148466],{"class":250},[91,164904,62760],{"class":101},[91,164906,51518],{"class":250},[91,164908,149969],{"class":101},[91,164910,12558],{"class":250},[91,164912,69205],{"class":101},[91,164914,51518],{"class":250},[91,164916,899],{"class":105},[91,164918,12558],{"class":250},[91,164920,151553],{"class":101},[91,164922,51518],{"class":250},[91,164924,1238],{"class":105},[91,164926,5053],{"class":250},[91,164928,164929,164931,164933,164935,164937,164939,164941,164943,164945,164947,164949,164951,164953],{"class":93,"line":1304},[91,164930,148466],{"class":250},[91,164932,62760],{"class":101},[91,164934,51518],{"class":250},[91,164936,151017],{"class":101},[91,164938,12558],{"class":250},[91,164940,69205],{"class":101},[91,164942,51518],{"class":250},[91,164944,874],{"class":105},[91,164946,12558],{"class":250},[91,164948,151553],{"class":101},[91,164950,51518],{"class":250},[91,164952,1060],{"class":105},[91,164954,5053],{"class":250},[91,164956,164957,164959,164961,164963,164965,164967,164969,164971,164973,164975,164977,164979,164981],{"class":93,"line":1319},[91,164958,148466],{"class":250},[91,164960,62760],{"class":101},[91,164962,51518],{"class":250},[91,164964,159812],{"class":101},[91,164966,12558],{"class":250},[91,164968,69205],{"class":101},[91,164970,51518],{"class":250},[91,164972,924],{"class":105},[91,164974,12558],{"class":250},[91,164976,151553],{"class":101},[91,164978,51518],{"class":250},[91,164980,655],{"class":105},[91,164982,5053],{"class":250},[91,164984,164985],{"class":93,"line":1325},[91,164986,33327],{"class":250},[91,164988,164989],{"class":93,"line":1339},[91,164990,2523],{"emptyLinePlaceholder":175},[91,164992,164993,164995,164997,164999],{"class":93,"line":1345},[91,164994,3148],{"class":153},[91,164996,152218],{"class":250},[91,164998,26165],{"class":153},[91,165000,152223],{"class":250},[91,165002,165003,165005,165007,165009,165012,165014],{"class":93,"line":1436},[91,165004,31380],{"class":105},[91,165006,164653],{"class":250},[91,165008,62760],{"class":101},[91,165010,165011],{"class":250},"], student[",[91,165013,151553],{"class":101},[91,165015,4780],{"class":250},[21,165017,165018],{},"统计平均分：",[82,165020,165022],{"className":30459,"code":165021,"language":30461,"meta":26,"style":26},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[88,165023,165024,165032,165036,165046,165058,165062,165077],{"__ignoreMap":26},[91,165025,165026,165028,165030],{"class":93,"line":94},[91,165027,157341],{"class":250},[91,165029,296],{"class":153},[91,165031,47414],{"class":105},[91,165033,165034],{"class":93,"line":38},[91,165035,2523],{"emptyLinePlaceholder":175},[91,165037,165038,165040,165042,165044],{"class":93,"line":1304},[91,165039,3148],{"class":153},[91,165041,152218],{"class":250},[91,165043,26165],{"class":153},[91,165045,152223],{"class":250},[91,165047,165048,165050,165052,165054,165056],{"class":93,"line":1319},[91,165049,159388],{"class":250},[91,165051,9600],{"class":153},[91,165053,152230],{"class":250},[91,165055,151553],{"class":101},[91,165057,33327],{"class":250},[91,165059,165060],{"class":93,"line":1325},[91,165061,2523],{"emptyLinePlaceholder":175},[91,165063,165064,165066,165068,165070,165072,165074],{"class":93,"line":1339},[91,165065,163855],{"class":250},[91,165067,296],{"class":153},[91,165069,163860],{"class":250},[91,165071,833],{"class":153},[91,165073,7454],{"class":105},[91,165075,165076],{"class":250},"(students)\n",[91,165078,165079,165081,165083,165085,165087,165089,165091,165093,165095,165097],{"class":93,"line":1345},[91,165080,30496],{"class":105},[91,165082,251],{"class":250},[91,165084,302],{"class":153},[91,165086,163878],{"class":101},[91,165088,1145],{"class":105},[91,165090,163883],{"class":250},[91,165092,157240],{"class":153},[91,165094,1195],{"class":105},[91,165096,500],{"class":101},[91,165098,257],{"class":250},[21,165100,165101],{},"查找学生：",[82,165103,165105],{"className":30459,"code":165104,"language":30461,"meta":26,"style":26},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[88,165106,165107,165122,165126,165136,165150,165156,165160,165166],{"__ignoreMap":26},[91,165108,165109,165111,165113,165115,165117,165120],{"class":93,"line":94},[91,165110,111659],{"class":250},[91,165112,296],{"class":153},[91,165114,60686],{"class":105},[91,165116,251],{"class":250},[91,165118,165119],{"class":101},"\"请输入学生姓名:\"",[91,165121,257],{"class":250},[91,165123,165124],{"class":93,"line":38},[91,165125,2523],{"emptyLinePlaceholder":175},[91,165127,165128,165130,165132,165134],{"class":93,"line":1304},[91,165129,3148],{"class":153},[91,165131,152218],{"class":250},[91,165133,26165],{"class":153},[91,165135,152223],{"class":250},[91,165137,165138,165140,165142,165144,165146,165148],{"class":93,"line":1319},[91,165139,3224],{"class":153},[91,165141,152230],{"class":250},[91,165143,62760],{"class":101},[91,165145,4566],{"class":250},[91,165147,3072],{"class":153},[91,165149,160513],{"class":250},[91,165151,165152,165154],{"class":93,"line":1325},[91,165153,32532],{"class":105},[91,165155,150123],{"class":250},[91,165157,165158],{"class":93,"line":1339},[91,165159,31708],{"class":153},[91,165161,165162,165164],{"class":93,"line":1345},[91,165163,1825],{"class":153},[91,165165,3862],{"class":250},[91,165167,165168,165170,165172,165175],{"class":93,"line":1436},[91,165169,31380],{"class":105},[91,165171,251],{"class":250},[91,165173,165174],{"class":101},"\"没有找到\"",[91,165176,257],{"class":250},[190,165178,165180],{"id":165179},"_613-容器通用操作","6.13 容器通用操作",[21,165182,165183],{},"长度：",[82,165185,165187],{"className":30459,"code":165186,"language":30461,"meta":26,"style":26},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[88,165188,165189,165208,165218],{"__ignoreMap":26},[91,165190,165191,165193,165196,165198,165200,165202,165204,165206],{"class":93,"line":94},[91,165192,7481],{"class":105},[91,165194,165195],{"class":250},"([",[91,165197,466],{"class":105},[91,165199,12558],{"class":250},[91,165201,327],{"class":105},[91,165203,12558],{"class":250},[91,165205,321],{"class":105},[91,165207,4780],{"class":250},[91,165209,165210,165212,165214,165216],{"class":93,"line":38},[91,165211,7481],{"class":105},[91,165213,251],{"class":250},[91,165215,155961],{"class":101},[91,165217,257],{"class":250},[91,165219,165220,165222,165225,165227,165229,165231],{"class":93,"line":1304},[91,165221,7481],{"class":105},[91,165223,165224],{"class":250},"({",[91,165226,62760],{"class":101},[91,165228,51518],{"class":250},[91,165230,149969],{"class":101},[91,165232,165233],{"class":250},"})\n",[21,165235,165236],{},"最大最小：",[82,165238,165240],{"className":30459,"code":165239,"language":30461,"meta":26,"style":26},"max([1, 2, 3])\nmin([1, 2, 3])\n",[88,165241,165242,165260],{"__ignoreMap":26},[91,165243,165244,165246,165248,165250,165252,165254,165256,165258],{"class":93,"line":94},[91,165245,6138],{"class":105},[91,165247,165195],{"class":250},[91,165249,466],{"class":105},[91,165251,12558],{"class":250},[91,165253,327],{"class":105},[91,165255,12558],{"class":250},[91,165257,321],{"class":105},[91,165259,4780],{"class":250},[91,165261,165262,165265,165267,165269,165271,165273,165275,165277],{"class":93,"line":38},[91,165263,165264],{"class":105},"min",[91,165266,165195],{"class":250},[91,165268,466],{"class":105},[91,165270,12558],{"class":250},[91,165272,327],{"class":105},[91,165274,12558],{"class":250},[91,165276,321],{"class":105},[91,165278,4780],{"class":250},[21,165280,165281],{},"求和：",[82,165283,165285],{"className":30459,"code":165284,"language":30461,"meta":26,"style":26},"sum([1, 2, 3])\n",[88,165286,165287],{"__ignoreMap":26},[91,165288,165289,165292,165294,165296,165298,165300,165302,165304],{"class":93,"line":94},[91,165290,165291],{"class":105},"sum",[91,165293,165195],{"class":250},[91,165295,466],{"class":105},[91,165297,12558],{"class":250},[91,165299,327],{"class":105},[91,165301,12558],{"class":250},[91,165303,321],{"class":105},[91,165305,4780],{"class":250},[21,165307,163552],{},[82,165309,165311],{"className":30459,"code":165310,"language":30461,"meta":26,"style":26},"sorted([3, 1, 2])\n",[88,165312,165313],{"__ignoreMap":26},[91,165314,165315,165318,165320,165322,165324,165326,165328,165330],{"class":93,"line":94},[91,165316,165317],{"class":105},"sorted",[91,165319,165195],{"class":250},[91,165321,321],{"class":105},[91,165323,12558],{"class":250},[91,165325,466],{"class":105},[91,165327,12558],{"class":250},[91,165329,327],{"class":105},[91,165331,4780],{"class":250},[21,165333,165334],{},"类型转换：",[82,165336,165338],{"className":30459,"code":165337,"language":30461,"meta":26,"style":26},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[88,165339,165340,165350,165368],{"__ignoreMap":26},[91,165341,165342,165344,165346,165348],{"class":93,"line":94},[91,165343,154151],{"class":105},[91,165345,251],{"class":250},[91,165347,155961],{"class":101},[91,165349,257],{"class":250},[91,165351,165352,165354,165356,165358,165360,165362,165364,165366],{"class":93,"line":38},[91,165353,155346],{"class":105},[91,165355,165195],{"class":250},[91,165357,466],{"class":105},[91,165359,12558],{"class":250},[91,165361,327],{"class":105},[91,165363,12558],{"class":250},[91,165365,321],{"class":105},[91,165367,4780],{"class":250},[91,165369,165370,165372,165374,165376,165378,165380,165382,165384,165386,165388],{"class":93,"line":1304},[91,165371,155371],{"class":105},[91,165373,165195],{"class":250},[91,165375,466],{"class":105},[91,165377,12558],{"class":250},[91,165379,466],{"class":105},[91,165381,12558],{"class":250},[91,165383,327],{"class":105},[91,165385,12558],{"class":250},[91,165387,321],{"class":105},[91,165389,4780],{"class":250},[21,165391,165392],{},"成员判断：",[82,165394,165396],{"className":30459,"code":165395,"language":30461,"meta":26,"style":26},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[88,165397,165398,165415,165439],{"__ignoreMap":26},[91,165399,165400,165402,165404,165407,165410,165413],{"class":93,"line":94},[91,165401,30496],{"class":105},[91,165403,251],{"class":250},[91,165405,165406],{"class":101},"\"a\"",[91,165408,165409],{"class":153}," in",[91,165411,165412],{"class":101}," \"abc\"",[91,165414,257],{"class":250},[91,165416,165417,165419,165421,165423,165425,165427,165429,165431,165433,165435,165437],{"class":93,"line":38},[91,165418,30496],{"class":105},[91,165420,251],{"class":250},[91,165422,466],{"class":105},[91,165424,165409],{"class":153},[91,165426,52307],{"class":250},[91,165428,466],{"class":105},[91,165430,12558],{"class":250},[91,165432,327],{"class":105},[91,165434,12558],{"class":250},[91,165436,321],{"class":105},[91,165438,4780],{"class":250},[91,165440,165441,165443,165445,165447,165449,165451,165453,165455,165457],{"class":93,"line":1304},[91,165442,30496],{"class":105},[91,165444,251],{"class":250},[91,165446,62760],{"class":101},[91,165448,165409],{"class":153},[91,165450,4571],{"class":250},[91,165452,62760],{"class":101},[91,165454,51518],{"class":250},[91,165456,149969],{"class":101},[91,165458,165233],{"class":250},[190,165460,165462],{"id":165461},"_614-推导式","6.14 推导式",[21,165464,165465],{},"推导式用于快速生成容器。",[21,165467,165468],{},"列表推导式：",[82,165470,165472],{"className":30459,"code":165471,"language":30461,"meta":26,"style":26},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[88,165473,165474,165501],{"__ignoreMap":26},[91,165475,165476,165478,165480,165483,165485,165487,165489,165491,165493,165495,165497,165499],{"class":93,"line":94},[91,165477,164181],{"class":250},[91,165479,296],{"class":153},[91,165481,165482],{"class":250}," [i ",[91,165484,3148],{"class":153},[91,165486,9561],{"class":250},[91,165488,26165],{"class":153},[91,165490,32524],{"class":105},[91,165492,251],{"class":250},[91,165494,466],{"class":105},[91,165496,12558],{"class":250},[91,165498,593],{"class":105},[91,165500,97381],{"class":250},[91,165502,165503,165505],{"class":93,"line":38},[91,165504,30496],{"class":105},[91,165506,164397],{"class":250},[21,165508,165509],{},"带条件：",[82,165511,165513],{"className":30459,"code":165512,"language":30461,"meta":26,"style":26},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[88,165514,165515,165556],{"__ignoreMap":26},[91,165516,165517,165520,165522,165524,165526,165528,165530,165532,165534,165536,165538,165540,165542,165544,165546,165548,165550,165552,165554],{"class":93,"line":94},[91,165518,165519],{"class":250},"even_nums ",[91,165521,296],{"class":153},[91,165523,165482],{"class":250},[91,165525,3148],{"class":153},[91,165527,9561],{"class":250},[91,165529,26165],{"class":153},[91,165531,32524],{"class":105},[91,165533,251],{"class":250},[91,165535,466],{"class":105},[91,165537,12558],{"class":250},[91,165539,586],{"class":105},[91,165541,13837],{"class":250},[91,165543,1655],{"class":153},[91,165545,9561],{"class":250},[91,165547,577],{"class":153},[91,165549,14878],{"class":105},[91,165551,101640],{"class":153},[91,165553,4216],{"class":105},[91,165555,33327],{"class":250},[91,165557,165558,165560],{"class":93,"line":38},[91,165559,30496],{"class":105},[91,165561,165562],{"class":250},"(even_nums)\n",[21,165564,165565],{},"字典推导式：",[82,165567,165569],{"className":30459,"code":165568,"language":30461,"meta":26,"style":26},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[88,165570,165571,165605],{"__ignoreMap":26},[91,165572,165573,165576,165578,165581,165583,165585,165588,165590,165592,165594,165596,165598,165600,165602],{"class":93,"line":94},[91,165574,165575],{"class":250},"squares ",[91,165577,296],{"class":153},[91,165579,165580],{"class":250}," {i: i ",[91,165582,10784],{"class":153},[91,165584,14878],{"class":105},[91,165586,165587],{"class":153}," for",[91,165589,9561],{"class":250},[91,165591,26165],{"class":153},[91,165593,32524],{"class":105},[91,165595,251],{"class":250},[91,165597,466],{"class":105},[91,165599,12558],{"class":250},[91,165601,593],{"class":105},[91,165603,165604],{"class":250},")}\n",[91,165606,165607,165609],{"class":93,"line":38},[91,165608,30496],{"class":105},[91,165610,165611],{"class":250},"(squares)\n",[21,165613,165614],{},"集合推导式：",[82,165616,165618],{"className":30459,"code":165617,"language":30461,"meta":26,"style":26},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[88,165619,165620,165641],{"__ignoreMap":26},[91,165621,165622,165625,165627,165630,165632,165634,165636,165639],{"class":93,"line":94},[91,165623,165624],{"class":250},"chars ",[91,165626,296],{"class":153},[91,165628,165629],{"class":250}," {ch ",[91,165631,3148],{"class":153},[91,165633,159773],{"class":250},[91,165635,26165],{"class":153},[91,165637,165638],{"class":101}," \"hello\"",[91,165640,1689],{"class":250},[91,165642,165643,165645],{"class":93,"line":38},[91,165644,30496],{"class":105},[91,165646,165647],{"class":250},"(chars)\n",[21,165649,165650],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[190,165652,165654],{"id":165653},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[82,165656,165658],{"className":30459,"code":165657,"language":30461,"meta":26,"style":26},"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",[88,165659,165660,165668,165688,165708,165728,165748,165752,165756,165764,165778,165787,165791,165801,165813,165817,165837,165846,165850,165866,165871,165875,165889,165893,165915,165951],{"__ignoreMap":26},[91,165661,165662,165664,165666],{"class":93,"line":94},[91,165663,159797],{"class":250},[91,165665,296],{"class":153},[91,165667,55528],{"class":250},[91,165669,165670,165672,165674,165676,165678,165680,165682,165684,165686],{"class":93,"line":38},[91,165671,148466],{"class":250},[91,165673,62760],{"class":101},[91,165675,51518],{"class":250},[91,165677,149969],{"class":101},[91,165679,12558],{"class":250},[91,165681,151553],{"class":101},[91,165683,51518],{"class":250},[91,165685,1238],{"class":105},[91,165687,5053],{"class":250},[91,165689,165690,165692,165694,165696,165698,165700,165702,165704,165706],{"class":93,"line":1304},[91,165691,148466],{"class":250},[91,165693,62760],{"class":101},[91,165695,51518],{"class":250},[91,165697,151017],{"class":101},[91,165699,12558],{"class":250},[91,165701,151553],{"class":101},[91,165703,51518],{"class":250},[91,165705,1060],{"class":105},[91,165707,5053],{"class":250},[91,165709,165710,165712,165714,165716,165718,165720,165722,165724,165726],{"class":93,"line":1319},[91,165711,148466],{"class":250},[91,165713,62760],{"class":101},[91,165715,51518],{"class":250},[91,165717,159812],{"class":101},[91,165719,12558],{"class":250},[91,165721,151553],{"class":101},[91,165723,51518],{"class":250},[91,165725,655],{"class":105},[91,165727,5053],{"class":250},[91,165729,165730,165732,165734,165736,165738,165740,165742,165744,165746],{"class":93,"line":1325},[91,165731,148466],{"class":250},[91,165733,62760],{"class":101},[91,165735,51518],{"class":250},[91,165737,163391],{"class":101},[91,165739,12558],{"class":250},[91,165741,151553],{"class":101},[91,165743,51518],{"class":250},[91,165745,1131],{"class":105},[91,165747,5053],{"class":250},[91,165749,165750],{"class":93,"line":1339},[91,165751,33327],{"class":250},[91,165753,165754],{"class":93,"line":1345},[91,165755,2523],{"emptyLinePlaceholder":175},[91,165757,165758,165760,165762],{"class":93,"line":1436},[91,165759,157341],{"class":250},[91,165761,296],{"class":153},[91,165763,47414],{"class":105},[91,165765,165766,165769,165771,165774,165776],{"class":93,"line":1442},[91,165767,165768],{"class":250},"max_student ",[91,165770,296],{"class":153},[91,165772,165773],{"class":250}," students[",[91,165775,440],{"class":105},[91,165777,33327],{"class":250},[91,165779,165780,165783,165785],{"class":93,"line":1454},[91,165781,165782],{"class":250},"passed ",[91,165784,296],{"class":153},[91,165786,51919],{"class":250},[91,165788,165789],{"class":93,"line":1736},[91,165790,2523],{"emptyLinePlaceholder":175},[91,165792,165793,165795,165797,165799],{"class":93,"line":1741},[91,165794,3148],{"class":153},[91,165796,152218],{"class":250},[91,165798,26165],{"class":153},[91,165800,152223],{"class":250},[91,165802,165803,165805,165807,165809,165811],{"class":93,"line":1747},[91,165804,159388],{"class":250},[91,165806,9600],{"class":153},[91,165808,152230],{"class":250},[91,165810,151553],{"class":101},[91,165812,33327],{"class":250},[91,165814,165815],{"class":93,"line":1752},[91,165816,2523],{"emptyLinePlaceholder":175},[91,165818,165819,165821,165823,165825,165827,165829,165832,165834],{"class":93,"line":1766},[91,165820,3224],{"class":153},[91,165822,152230],{"class":250},[91,165824,151553],{"class":101},[91,165826,4566],{"class":250},[91,165828,1209],{"class":153},[91,165830,165831],{"class":250}," max_student[",[91,165833,151553],{"class":101},[91,165835,165836],{"class":250},"]:\n",[91,165838,165839,165842,165844],{"class":93,"line":1771},[91,165840,165841],{"class":250},"        max_student ",[91,165843,296],{"class":153},[91,165845,152246],{"class":250},[91,165847,165848],{"class":93,"line":1777},[91,165849,2523],{"emptyLinePlaceholder":175},[91,165851,165852,165854,165856,165858,165860,165862,165864],{"class":93,"line":1798},[91,165853,3224],{"class":153},[91,165855,152230],{"class":250},[91,165857,151553],{"class":101},[91,165859,4566],{"class":250},[91,165861,1834],{"class":153},[91,165863,157918],{"class":105},[91,165865,3862],{"class":250},[91,165867,165868],{"class":93,"line":1803},[91,165869,165870],{"class":250},"        passed.append(student)\n",[91,165872,165873],{"class":93,"line":1817},[91,165874,2523],{"emptyLinePlaceholder":175},[91,165876,165877,165879,165881,165883,165885,165887],{"class":93,"line":1822},[91,165878,163855],{"class":250},[91,165880,296],{"class":153},[91,165882,163860],{"class":250},[91,165884,833],{"class":153},[91,165886,7454],{"class":105},[91,165888,165076],{"class":250},[91,165890,165891],{"class":93,"line":1851},[91,165892,2523],{"emptyLinePlaceholder":175},[91,165894,165895,165897,165899,165901,165903,165905,165907,165909,165911,165913],{"class":93,"line":1856},[91,165896,30496],{"class":105},[91,165898,251],{"class":250},[91,165900,302],{"class":153},[91,165902,163878],{"class":101},[91,165904,1145],{"class":105},[91,165906,163883],{"class":250},[91,165908,157240],{"class":153},[91,165910,1195],{"class":105},[91,165912,500],{"class":101},[91,165914,257],{"class":250},[91,165916,165917,165919,165921,165923,165926,165928,165931,165933,165935,165937,165939,165941,165943,165945,165947,165949],{"class":93,"line":1873},[91,165918,30496],{"class":105},[91,165920,251],{"class":250},[91,165922,302],{"class":153},[91,165924,165925],{"class":101},"\"最高分学生:",[91,165927,1145],{"class":105},[91,165929,165930],{"class":250},"max_student[",[91,165932,152963],{"class":101},[91,165934,1189],{"class":250},[91,165936,1195],{"class":105},[91,165938,4571],{"class":105},[91,165940,165930],{"class":250},[91,165942,153001],{"class":101},[91,165944,1189],{"class":250},[91,165946,1195],{"class":105},[91,165948,500],{"class":101},[91,165950,257],{"class":250},[91,165952,165953,165955,165957,165959,165962,165965,165968,165970,165972],{"class":93,"line":1878},[91,165954,30496],{"class":105},[91,165956,251],{"class":250},[91,165958,302],{"class":153},[91,165960,165961],{"class":101},"\"及格人数:",[91,165963,165964],{"class":105},"{len",[91,165966,165967],{"class":250},"(passed)",[91,165969,1195],{"class":105},[91,165971,500],{"class":101},[91,165973,257],{"class":250},[190,165975,165977],{"id":165976},"_616-易错点","6.16 易错点",[14,165979,165980,165983,165986,165989,165995,166004],{},[17,165981,165982],{},"列表可变，元组和字符串不可变。",[17,165984,165985],{},"切片结束位置不包含。",[17,165987,165988],{},"字典通过 key 取值，不是通过索引。",[17,165990,165991,165992,28504],{},"空集合要用 ",[88,165993,165994],{},"set()",[17,165996,104447,165997,166000,166001,28504],{},[88,165998,165999],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[88,166002,166003],{},"get()",[17,166005,166006],{},"嵌套容器要先看清楚每一层是什么类型。",[190,166008,166010],{"id":166009},"_617-本章练习","6.17 本章练习",[14,166012,166013,166016,166019,166022,166025],{},[17,166014,166015],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[17,166017,166018],{},"输入一句话，统计每个字符出现次数。",[17,166020,166021],{},"使用集合去除列表中的重复元素。",[17,166023,166024],{},"使用字典保存一个学生的信息，并实现修改成绩。",[17,166026,166027],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[168,166029,166030],{},"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":26,"searchDepth":38,"depth":38,"links":166032},[166033,166034,166035,166036,166037,166038,166039,166040,166041,166042,166043,166044,166045,166046,166047,166048,166049],{"id":163013,"depth":38,"text":163014},{"id":163130,"depth":38,"text":163131},{"id":163220,"depth":38,"text":163221},{"id":163344,"depth":38,"text":163345},{"id":163707,"depth":38,"text":163708},{"id":163894,"depth":38,"text":163895},{"id":164013,"depth":38,"text":164014},{"id":164155,"depth":38,"text":164156},{"id":164342,"depth":38,"text":164343},{"id":164586,"depth":38,"text":164587},{"id":164796,"depth":38,"text":164797},{"id":164881,"depth":38,"text":164882},{"id":165179,"depth":38,"text":165180},{"id":165461,"depth":38,"text":165462},{"id":165653,"depth":38,"text":165654},{"id":165976,"depth":38,"text":165977},{"id":166009,"depth":38,"text":166010},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163005,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166056,"title":166057,"body":166058,"description":23500,"extension":173,"meta":168230,"navigation":175,"path":168231,"seo":168232,"stem":168233,"__hash__":168234},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166059,"toc":168205},[166060,166063,166067,166070,166150,166153,166174,166177,166181,166184,166246,166249,166266,166270,166273,166318,166320,166328,166332,166335,166417,166420,166423,166448,166451,166474,166478,166481,166483,166545,166548,166550,166601,166605,166609,166615,166720,166724,166730,166801,166805,166808,166876,166879,166959,166963,166969,167005,167008,167011,167121,167127,167131,167134,167206,167209,167213,167217,167222,167284,167288,167293,167361,167365,167370,167486,167490,167493,167573,167576,167580,167583,167687,167689,167704,167707,167711,167849,167857,167861,167863,167874,167876,168134,168138,168170,168174,168202],[10,166061,166057],{"id":166062},"_7-函数进阶",[190,166064,166066],{"id":166065},"_71-多返回值","7.1 多返回值",[21,166068,166069],{},"Python 函数可以返回多个值，本质上返回的是元组。",[82,166071,166073],{"className":30459,"code":166072,"language":30461,"meta":26,"style":26},"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",[88,166074,166075,166084,166092,166100,166109,166116,166120,166124,166133,166139],{"__ignoreMap":26},[91,166076,166077,166079,166082],{"class":93,"line":94},[91,166078,32028],{"class":153},[91,166080,166081],{"class":97}," get_info",[91,166083,32034],{"class":250},[91,166085,166086,166088,166090],{"class":93,"line":38},[91,166087,152451],{"class":250},[91,166089,296],{"class":153},[91,166091,149434],{"class":101},[91,166093,166094,166096,166098],{"class":93,"line":1304},[91,166095,152467],{"class":250},[91,166097,296],{"class":153},[91,166099,146632],{"class":105},[91,166101,166102,166104,166106],{"class":93,"line":1319},[91,166103,152482],{"class":250},[91,166105,296],{"class":153},[91,166107,166108],{"class":105}," 95\n",[91,166110,166111,166113],{"class":93,"line":1325},[91,166112,4213],{"class":153},[91,166114,166115],{"class":250}," name, age, score\n",[91,166117,166118],{"class":93,"line":1339},[91,166119,2523],{"emptyLinePlaceholder":175},[91,166121,166122],{"class":93,"line":1345},[91,166123,2523],{"emptyLinePlaceholder":175},[91,166125,166126,166128,166130],{"class":93,"line":1436},[91,166127,161387],{"class":250},[91,166129,296],{"class":153},[91,166131,166132],{"class":250}," get_info()\n",[91,166134,166135,166137],{"class":93,"line":1442},[91,166136,30496],{"class":105},[91,166138,76666],{"class":250},[91,166140,166141,166143,166145,166147],{"class":93,"line":1454},[91,166142,30496],{"class":105},[91,166144,251],{"class":250},[91,166146,103188],{"class":105},[91,166148,166149],{"class":250},"(result))\n",[21,166151,166152],{},"可以直接解包：",[82,166154,166156],{"className":30459,"code":166155,"language":30461,"meta":26,"style":26},"name, age, score = get_info()\nprint(name, age, score)\n",[88,166157,166158,166167],{"__ignoreMap":26},[91,166159,166160,166163,166165],{"class":93,"line":94},[91,166161,166162],{"class":250},"name, age, score ",[91,166164,296],{"class":153},[91,166166,166132],{"class":250},[91,166168,166169,166171],{"class":93,"line":38},[91,166170,30496],{"class":105},[91,166172,166173],{"class":250},"(name, age, score)\n",[21,166175,166176],{},"返回多个值适合函数需要同时给出多个结果时使用。",[190,166178,166180],{"id":166179},"_72-位置参数","7.2 位置参数",[21,166182,166183],{},"位置参数按顺序传递。",[82,166185,166187],{"className":30459,"code":166186,"language":30461,"meta":26,"style":26},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[88,166188,166189,166197,166225,166229,166233],{"__ignoreMap":26},[91,166190,166191,166193,166195],{"class":93,"line":94},[91,166192,32028],{"class":153},[91,166194,149453],{"class":97},[91,166196,149456],{"class":250},[91,166198,166199,166201,166203,166205,166207,166209,166211,166213,166215,166217,166219,166221,166223],{"class":93,"line":38},[91,166200,31380],{"class":105},[91,166202,251],{"class":250},[91,166204,302],{"class":153},[91,166206,149467],{"class":101},[91,166208,1145],{"class":105},[91,166210,79891],{"class":250},[91,166212,1195],{"class":105},[91,166214,149476],{"class":101},[91,166216,1145],{"class":105},[91,166218,70302],{"class":250},[91,166220,1195],{"class":105},[91,166222,149485],{"class":101},[91,166224,257],{"class":250},[91,166226,166227],{"class":93,"line":1304},[91,166228,2523],{"emptyLinePlaceholder":175},[91,166230,166231],{"class":93,"line":1319},[91,166232,2523],{"emptyLinePlaceholder":175},[91,166234,166235,166238,166240,166242,166244],{"class":93,"line":1325},[91,166236,166237],{"class":250},"introduce(",[91,166239,149969],{"class":101},[91,166241,12558],{"class":250},[91,166243,899],{"class":105},[91,166245,257],{"class":250},[21,166247,166248],{},"顺序错了就会得到错误含义：",[82,166250,166252],{"className":30459,"code":166251,"language":30461,"meta":26,"style":26},"introduce(18, \"小明\")\n",[88,166253,166254],{"__ignoreMap":26},[91,166255,166256,166258,166260,166262,166264],{"class":93,"line":94},[91,166257,166237],{"class":250},[91,166259,899],{"class":105},[91,166261,12558],{"class":250},[91,166263,149969],{"class":101},[91,166265,257],{"class":250},[190,166267,166269],{"id":166268},"_73-关键字参数","7.3 关键字参数",[21,166271,166272],{},"关键字参数按参数名传递。",[82,166274,166276],{"className":30459,"code":166275,"language":30461,"meta":26,"style":26},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[88,166277,166278,166298],{"__ignoreMap":26},[91,166279,166280,166282,166284,166286,166288,166290,166292,166294,166296],{"class":93,"line":94},[91,166281,166237],{"class":250},[91,166283,79891],{"class":5339},[91,166285,296],{"class":153},[91,166287,149969],{"class":101},[91,166289,12558],{"class":250},[91,166291,70302],{"class":5339},[91,166293,296],{"class":153},[91,166295,899],{"class":105},[91,166297,257],{"class":250},[91,166299,166300,166302,166304,166306,166308,166310,166312,166314,166316],{"class":93,"line":38},[91,166301,166237],{"class":250},[91,166303,70302],{"class":5339},[91,166305,296],{"class":153},[91,166307,899],{"class":105},[91,166309,12558],{"class":250},[91,166311,79891],{"class":5339},[91,166313,296],{"class":153},[91,166315,149969],{"class":101},[91,166317,257],{"class":250},[21,166319,118015],{},[14,166321,166322,166325],{},[17,166323,166324],{},"顺序不容易错。",[17,166326,166327],{},"调用时可读性更强。",[190,166329,166331],{"id":166330},"_74-默认参数","7.4 默认参数",[21,166333,166334],{},"默认参数给参数设置默认值。",[82,166336,166338],{"className":30459,"code":166337,"language":30461,"meta":26,"style":26},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[88,166339,166340,166356,166386,166390,166394,166404],{"__ignoreMap":26},[91,166341,166342,166344,166346,166349,166351,166354],{"class":93,"line":94},[91,166343,32028],{"class":153},[91,166345,122174],{"class":97},[91,166347,166348],{"class":250},"(host, port",[91,166350,296],{"class":153},[91,166352,166353],{"class":105},"3306",[91,166355,30867],{"class":250},[91,166357,166358,166360,166362,166364,166367,166369,166371,166373,166375,166377,166380,166382,166384],{"class":93,"line":38},[91,166359,31380],{"class":105},[91,166361,251],{"class":250},[91,166363,302],{"class":153},[91,166365,166366],{"class":101},"\"连接",[91,166368,1145],{"class":105},[91,166370,27514],{"class":250},[91,166372,1195],{"class":105},[91,166374,1108],{"class":101},[91,166376,1145],{"class":105},[91,166378,166379],{"class":250},"port",[91,166381,1195],{"class":105},[91,166383,500],{"class":101},[91,166385,257],{"class":250},[91,166387,166388],{"class":93,"line":1304},[91,166389,2523],{"emptyLinePlaceholder":175},[91,166391,166392],{"class":93,"line":1319},[91,166393,2523],{"emptyLinePlaceholder":175},[91,166395,166396,166399,166402],{"class":93,"line":1325},[91,166397,166398],{"class":250},"connect(",[91,166400,166401],{"class":101},"\"localhost\"",[91,166403,257],{"class":250},[91,166405,166406,166408,166410,166412,166415],{"class":93,"line":1339},[91,166407,166398],{"class":250},[91,166409,166401],{"class":101},[91,166411,12558],{"class":250},[91,166413,166414],{"class":105},"6379",[91,166416,257],{"class":250},[21,166418,166419],{},"注意：默认参数必须放在非默认参数后面。",[21,166421,166422],{},"错误：",[82,166424,166426],{"className":30459,"code":166425,"language":30461,"meta":26,"style":26},"def connect(port=3306, host):\n    pass\n",[88,166427,166428,166444],{"__ignoreMap":26},[91,166429,166430,166432,166434,166437,166439,166441],{"class":93,"line":94},[91,166431,32028],{"class":153},[91,166433,122174],{"class":97},[91,166435,166436],{"class":250},"(port",[91,166438,296],{"class":153},[91,166440,166353],{"class":105},[91,166442,166443],{"class":250},", host):\n",[91,166445,166446],{"class":93,"line":38},[91,166447,149618],{"class":153},[21,166449,166450],{},"正确：",[82,166452,166454],{"className":30459,"code":166453,"language":30461,"meta":26,"style":26},"def connect(host, port=3306):\n    pass\n",[88,166455,166456,166470],{"__ignoreMap":26},[91,166457,166458,166460,166462,166464,166466,166468],{"class":93,"line":94},[91,166459,32028],{"class":153},[91,166461,122174],{"class":97},[91,166463,166348],{"class":250},[91,166465,296],{"class":153},[91,166467,166353],{"class":105},[91,166469,30867],{"class":250},[91,166471,166472],{"class":93,"line":38},[91,166473,149618],{"class":153},[190,166475,166477],{"id":166476},"_75-默认参数的坑","7.5 默认参数的坑",[21,166479,166480],{},"不要使用可变对象作为默认参数。",[21,166482,157704],{},[82,166484,166486],{"className":30459,"code":166485,"language":30461,"meta":26,"style":26},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[88,166487,166488,166503,166508,166515,166519,166523,166534],{"__ignoreMap":26},[91,166489,166490,166492,166495,166498,166500],{"class":93,"line":94},[91,166491,32028],{"class":153},[91,166493,166494],{"class":97}," add_item",[91,166496,166497],{"class":250},"(item, items",[91,166499,296],{"class":153},[91,166501,166502],{"class":250},"[]):\n",[91,166504,166505],{"class":93,"line":38},[91,166506,166507],{"class":250},"    items.append(item)\n",[91,166509,166510,166512],{"class":93,"line":1304},[91,166511,4213],{"class":153},[91,166513,166514],{"class":250}," items\n",[91,166516,166517],{"class":93,"line":1319},[91,166518,2523],{"emptyLinePlaceholder":175},[91,166520,166521],{"class":93,"line":1325},[91,166522,2523],{"emptyLinePlaceholder":175},[91,166524,166525,166527,166530,166532],{"class":93,"line":1339},[91,166526,30496],{"class":105},[91,166528,166529],{"class":250},"(add_item(",[91,166531,165406],{"class":101},[91,166533,30578],{"class":250},[91,166535,166536,166538,166540,166543],{"class":93,"line":1345},[91,166537,30496],{"class":105},[91,166539,166529],{"class":250},[91,166541,166542],{"class":101},"\"b\"",[91,166544,30578],{"class":250},[21,166546,166547],{},"第二次调用会复用第一次的列表。",[21,166549,155969],{},[82,166551,166553],{"className":30459,"code":166552,"language":30461,"meta":26,"style":26},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[88,166554,166555,166569,166582,166591,166595],{"__ignoreMap":26},[91,166556,166557,166559,166561,166563,166565,166567],{"class":93,"line":94},[91,166558,32028],{"class":153},[91,166560,166494],{"class":97},[91,166562,166497],{"class":250},[91,166564,296],{"class":153},[91,166566,95767],{"class":105},[91,166568,30867],{"class":250},[91,166570,166571,166573,166576,166578,166580],{"class":93,"line":38},[91,166572,3224],{"class":153},[91,166574,166575],{"class":250}," items ",[91,166577,39008],{"class":153},[91,166579,39014],{"class":105},[91,166581,3862],{"class":250},[91,166583,166584,166587,166589],{"class":93,"line":1304},[91,166585,166586],{"class":250},"        items ",[91,166588,296],{"class":153},[91,166590,51919],{"class":250},[91,166592,166593],{"class":93,"line":1319},[91,166594,166507],{"class":250},[91,166596,166597,166599],{"class":93,"line":1325},[91,166598,4213],{"class":153},[91,166600,166514],{"class":250},[190,166602,166604],{"id":166603},"_76-不定长参数","7.6 不定长参数",[217,166606,166608],{"id":166607},"_761-args","7.6.1 *args",[21,166610,166611,166614],{},[88,166612,166613],{},"*args"," 接收任意数量的位置参数，得到元组。",[82,166616,166618],{"className":30459,"code":166617,"language":30461,"meta":26,"style":26},"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",[88,166619,166620,166633,166641,166652,166661,166667,166671,166675,166694],{"__ignoreMap":26},[91,166621,166622,166624,166626,166628,166630],{"class":93,"line":94},[91,166623,32028],{"class":153},[91,166625,5332],{"class":97},[91,166627,251],{"class":250},[91,166629,704],{"class":153},[91,166631,166632],{"class":250},"args):\n",[91,166634,166635,166637,166639],{"class":93,"line":38},[91,166636,159388],{"class":250},[91,166638,296],{"class":153},[91,166640,47414],{"class":105},[91,166642,166643,166645,166647,166649],{"class":93,"line":1304},[91,166644,3324],{"class":153},[91,166646,156261],{"class":250},[91,166648,26165],{"class":153},[91,166650,166651],{"class":250}," args:\n",[91,166653,166654,166656,166658],{"class":93,"line":1319},[91,166655,160063],{"class":250},[91,166657,9600],{"class":153},[91,166659,166660],{"class":250}," num\n",[91,166662,166663,166665],{"class":93,"line":1325},[91,166664,4213],{"class":153},[91,166666,162368],{"class":250},[91,166668,166669],{"class":93,"line":1339},[91,166670,2523],{"emptyLinePlaceholder":175},[91,166672,166673],{"class":93,"line":1345},[91,166674,2523],{"emptyLinePlaceholder":175},[91,166676,166677,166679,166682,166684,166686,166688,166690,166692],{"class":93,"line":1436},[91,166678,30496],{"class":105},[91,166680,166681],{"class":250},"(add(",[91,166683,466],{"class":105},[91,166685,12558],{"class":250},[91,166687,327],{"class":105},[91,166689,12558],{"class":250},[91,166691,321],{"class":105},[91,166693,30578],{"class":250},[91,166695,166696,166698,166700,166702,166704,166706,166708,166710,166712,166714,166716,166718],{"class":93,"line":1442},[91,166697,30496],{"class":105},[91,166699,166681],{"class":250},[91,166701,466],{"class":105},[91,166703,12558],{"class":250},[91,166705,327],{"class":105},[91,166707,12558],{"class":250},[91,166709,321],{"class":105},[91,166711,12558],{"class":250},[91,166713,542],{"class":105},[91,166715,12558],{"class":250},[91,166717,568],{"class":105},[91,166719,30578],{"class":250},[217,166721,166723],{"id":166722},"_762-kwargs","7.6.2 **kwargs",[21,166725,166726,166729],{},[88,166727,166728],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[82,166731,166733],{"className":30459,"code":166732,"language":30461,"meta":26,"style":26},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[88,166734,166735,166748,166759,166765,166769,166773],{"__ignoreMap":26},[91,166736,166737,166739,166741,166743,166745],{"class":93,"line":94},[91,166738,32028],{"class":153},[91,166740,162026],{"class":97},[91,166742,251],{"class":250},[91,166744,10784],{"class":153},[91,166746,166747],{"class":250},"kwargs):\n",[91,166749,166750,166752,166754,166756],{"class":93,"line":38},[91,166751,3324],{"class":153},[91,166753,164866],{"class":250},[91,166755,26165],{"class":153},[91,166757,166758],{"class":250}," kwargs.items():\n",[91,166760,166761,166763],{"class":93,"line":1304},[91,166762,32532],{"class":105},[91,166764,164878],{"class":250},[91,166766,166767],{"class":93,"line":1319},[91,166768,2523],{"emptyLinePlaceholder":175},[91,166770,166771],{"class":93,"line":1325},[91,166772,2523],{"emptyLinePlaceholder":175},[91,166774,166775,166777,166779,166781,166783,166785,166787,166789,166791,166793,166795,166797,166799],{"class":93,"line":1339},[91,166776,162091],{"class":250},[91,166778,79891],{"class":5339},[91,166780,296],{"class":153},[91,166782,149969],{"class":101},[91,166784,12558],{"class":250},[91,166786,70302],{"class":5339},[91,166788,296],{"class":153},[91,166790,899],{"class":105},[91,166792,12558],{"class":250},[91,166794,70353],{"class":5339},[91,166796,296],{"class":153},[91,166798,69350],{"class":101},[91,166800,257],{"class":250},[190,166802,166804],{"id":166803},"_77-参数解包","7.7 参数解包",[21,166806,166807],{},"列表或元组解包为位置参数：",[82,166809,166811],{"className":30459,"code":166810,"language":30461,"meta":26,"style":26},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[88,166812,166813,166822,166837,166841,166845,166865],{"__ignoreMap":26},[91,166814,166815,166817,166819],{"class":93,"line":94},[91,166816,32028],{"class":153},[91,166818,5332],{"class":97},[91,166820,166821],{"class":250},"(a, b, c):\n",[91,166823,166824,166826,166828,166830,166832,166834],{"class":93,"line":38},[91,166825,4213],{"class":153},[91,166827,10992],{"class":250},[91,166829,730],{"class":153},[91,166831,11005],{"class":250},[91,166833,730],{"class":153},[91,166835,166836],{"class":250}," c\n",[91,166838,166839],{"class":93,"line":1304},[91,166840,2523],{"emptyLinePlaceholder":175},[91,166842,166843],{"class":93,"line":1319},[91,166844,2523],{"emptyLinePlaceholder":175},[91,166846,166847,166849,166851,166853,166855,166857,166859,166861,166863],{"class":93,"line":1325},[91,166848,164181],{"class":250},[91,166850,296],{"class":153},[91,166852,52307],{"class":250},[91,166854,466],{"class":105},[91,166856,12558],{"class":250},[91,166858,327],{"class":105},[91,166860,12558],{"class":250},[91,166862,321],{"class":105},[91,166864,33327],{"class":250},[91,166866,166867,166869,166871,166873],{"class":93,"line":1339},[91,166868,30496],{"class":105},[91,166870,166681],{"class":250},[91,166872,704],{"class":153},[91,166874,166875],{"class":250},"nums))\n",[21,166877,166878],{},"字典解包为关键字参数：",[82,166880,166882],{"className":30459,"code":166881,"language":30461,"meta":26,"style":26},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[88,166883,166884,166892,166918,166922,166926,166950],{"__ignoreMap":26},[91,166885,166886,166888,166890],{"class":93,"line":94},[91,166887,32028],{"class":153},[91,166889,149453],{"class":97},[91,166891,149456],{"class":250},[91,166893,166894,166896,166898,166900,166902,166904,166906,166908,166910,166912,166914,166916],{"class":93,"line":38},[91,166895,31380],{"class":105},[91,166897,251],{"class":250},[91,166899,302],{"class":153},[91,166901,500],{"class":101},[91,166903,1145],{"class":105},[91,166905,79891],{"class":250},[91,166907,1195],{"class":105},[91,166909,4571],{"class":105},[91,166911,70302],{"class":250},[91,166913,1195],{"class":105},[91,166915,500],{"class":101},[91,166917,257],{"class":250},[91,166919,166920],{"class":93,"line":1304},[91,166921,2523],{"emptyLinePlaceholder":175},[91,166923,166924],{"class":93,"line":1319},[91,166925,2523],{"emptyLinePlaceholder":175},[91,166927,166928,166930,166932,166934,166936,166938,166940,166942,166944,166946,166948],{"class":93,"line":1325},[91,166929,116395],{"class":250},[91,166931,296],{"class":153},[91,166933,4571],{"class":250},[91,166935,62760],{"class":101},[91,166937,51518],{"class":250},[91,166939,149969],{"class":101},[91,166941,12558],{"class":250},[91,166943,69205],{"class":101},[91,166945,51518],{"class":250},[91,166947,899],{"class":105},[91,166949,1689],{"class":250},[91,166951,166952,166954,166956],{"class":93,"line":1339},[91,166953,166237],{"class":250},[91,166955,10784],{"class":153},[91,166957,166958],{"class":250},"info)\n",[190,166960,166962],{"id":166961},"_78-匿名函数lambda","7.8 匿名函数lambda",[21,166964,166965,166968],{},[88,166966,166967],{},"lambda"," 用于定义简单匿名函数。",[82,166970,166972],{"className":30459,"code":166971,"language":30461,"meta":26,"style":26},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[88,166973,166974,166991],{"__ignoreMap":26},[91,166975,166976,166979,166981,166984,166987,166989],{"class":93,"line":94},[91,166977,166978],{"class":250},"add ",[91,166980,296],{"class":153},[91,166982,166983],{"class":153}," lambda",[91,166985,166986],{"class":250}," a, b: a ",[91,166988,730],{"class":153},[91,166990,151185],{"class":250},[91,166992,166993,166995,166997,166999,167001,167003],{"class":93,"line":38},[91,166994,30496],{"class":105},[91,166996,166681],{"class":250},[91,166998,466],{"class":105},[91,167000,12558],{"class":250},[91,167002,327],{"class":105},[91,167004,30578],{"class":250},[21,167006,167007],{},"常和排序、过滤等函数一起使用。",[21,167009,167010],{},"按分数排序：",[82,167012,167014],{"className":30459,"code":167013,"language":30461,"meta":26,"style":26},"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",[88,167015,167016,167024,167044,167064,167084,167088,167092,167115],{"__ignoreMap":26},[91,167017,167018,167020,167022],{"class":93,"line":94},[91,167019,159797],{"class":250},[91,167021,296],{"class":153},[91,167023,55528],{"class":250},[91,167025,167026,167028,167030,167032,167034,167036,167038,167040,167042],{"class":93,"line":38},[91,167027,148466],{"class":250},[91,167029,62760],{"class":101},[91,167031,51518],{"class":250},[91,167033,149969],{"class":101},[91,167035,12558],{"class":250},[91,167037,151553],{"class":101},[91,167039,51518],{"class":250},[91,167041,1238],{"class":105},[91,167043,5053],{"class":250},[91,167045,167046,167048,167050,167052,167054,167056,167058,167060,167062],{"class":93,"line":1304},[91,167047,148466],{"class":250},[91,167049,62760],{"class":101},[91,167051,51518],{"class":250},[91,167053,151017],{"class":101},[91,167055,12558],{"class":250},[91,167057,151553],{"class":101},[91,167059,51518],{"class":250},[91,167061,1060],{"class":105},[91,167063,5053],{"class":250},[91,167065,167066,167068,167070,167072,167074,167076,167078,167080,167082],{"class":93,"line":1319},[91,167067,148466],{"class":250},[91,167069,62760],{"class":101},[91,167071,51518],{"class":250},[91,167073,159812],{"class":101},[91,167075,12558],{"class":250},[91,167077,151553],{"class":101},[91,167079,51518],{"class":250},[91,167081,655],{"class":105},[91,167083,5053],{"class":250},[91,167085,167086],{"class":93,"line":1325},[91,167087,33327],{"class":250},[91,167089,167090],{"class":93,"line":1339},[91,167091,2523],{"emptyLinePlaceholder":175},[91,167093,167094,167097,167099,167101,167103,167105,167107,167109,167111,167113],{"class":93,"line":1345},[91,167095,167096],{"class":250},"students.sort(",[91,167098,154027],{"class":5339},[91,167100,154030],{"class":153},[91,167102,154033],{"class":250},[91,167104,151553],{"class":101},[91,167106,112283],{"class":250},[91,167108,163609],{"class":5339},[91,167110,296],{"class":153},[91,167112,31557],{"class":105},[91,167114,257],{"class":250},[91,167116,167117,167119],{"class":93,"line":1436},[91,167118,30496],{"class":105},[91,167120,165076],{"class":250},[21,167122,167123,167124,167126],{},"如果逻辑复杂，不要硬写 ",[88,167125,166967],{},"，定义普通函数更清晰。",[190,167128,167130],{"id":167129},"_79-函数作为参数","7.9 函数作为参数",[21,167132,167133],{},"函数可以作为参数传给另一个函数。",[82,167135,167137],{"className":30459,"code":167136,"language":30461,"meta":26,"style":26},"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",[88,167138,167139,167147,167157,167161,167165,167175,167182,167186,167190],{"__ignoreMap":26},[91,167140,167141,167143,167145],{"class":93,"line":94},[91,167142,32028],{"class":153},[91,167144,5332],{"class":97},[91,167146,151174],{"class":250},[91,167148,167149,167151,167153,167155],{"class":93,"line":38},[91,167150,4213],{"class":153},[91,167152,10992],{"class":250},[91,167154,730],{"class":153},[91,167156,151185],{"class":250},[91,167158,167159],{"class":93,"line":1304},[91,167160,2523],{"emptyLinePlaceholder":175},[91,167162,167163],{"class":93,"line":1319},[91,167164,2523],{"emptyLinePlaceholder":175},[91,167166,167167,167169,167172],{"class":93,"line":1325},[91,167168,32028],{"class":153},[91,167170,167171],{"class":97}," calculate",[91,167173,167174],{"class":250},"(a, b, func):\n",[91,167176,167177,167179],{"class":93,"line":1339},[91,167178,4213],{"class":153},[91,167180,167181],{"class":250}," func(a, b)\n",[91,167183,167184],{"class":93,"line":1345},[91,167185,2523],{"emptyLinePlaceholder":175},[91,167187,167188],{"class":93,"line":1436},[91,167189,2523],{"emptyLinePlaceholder":175},[91,167191,167192,167194,167197,167199,167201,167203],{"class":93,"line":1442},[91,167193,30496],{"class":105},[91,167195,167196],{"class":250},"(calculate(",[91,167198,695],{"class":105},[91,167200,12558],{"class":250},[91,167202,949],{"class":105},[91,167204,167205],{"class":250},", add))\n",[21,167207,167208],{},"这种思想在排序、回调、框架中经常出现。",[190,167210,167212],{"id":167211},"_710-mapfiltersorted","7.10 map、filter、sorted",[217,167214,167216],{"id":167215},"_7101-map","7.10.1 map",[21,167218,167219,167221],{},[88,167220,74125],{}," 对每个元素执行函数。",[82,167223,167225],{"className":30459,"code":167224,"language":30461,"meta":26,"style":26},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[88,167226,167227,167251,167274],{"__ignoreMap":26},[91,167228,167229,167231,167233,167235,167237,167239,167241,167243,167245,167247,167249],{"class":93,"line":94},[91,167230,164181],{"class":250},[91,167232,296],{"class":153},[91,167234,52307],{"class":250},[91,167236,466],{"class":105},[91,167238,12558],{"class":250},[91,167240,327],{"class":105},[91,167242,12558],{"class":250},[91,167244,321],{"class":105},[91,167246,12558],{"class":250},[91,167248,542],{"class":105},[91,167250,33327],{"class":250},[91,167252,167253,167255,167257,167260,167262,167264,167267,167269,167271],{"class":93,"line":38},[91,167254,161387],{"class":250},[91,167256,296],{"class":153},[91,167258,167259],{"class":105}," map",[91,167261,251],{"class":250},[91,167263,166967],{"class":153},[91,167265,167266],{"class":250}," x: x ",[91,167268,704],{"class":153},[91,167270,14878],{"class":105},[91,167272,167273],{"class":250},", nums)\n",[91,167275,167276,167278,167280,167282],{"class":93,"line":1304},[91,167277,30496],{"class":105},[91,167279,251],{"class":250},[91,167281,154151],{"class":105},[91,167283,166149],{"class":250},[217,167285,167287],{"id":167286},"_7102-filter","7.10.2 filter",[21,167289,167290,167292],{},[88,167291,80132],{}," 保留满足条件的元素。",[82,167294,167296],{"className":30459,"code":167295,"language":30461,"meta":26,"style":26},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[88,167297,167298,167326,167351],{"__ignoreMap":26},[91,167299,167300,167302,167304,167306,167308,167310,167312,167314,167316,167318,167320,167322,167324],{"class":93,"line":94},[91,167301,164181],{"class":250},[91,167303,296],{"class":153},[91,167305,52307],{"class":250},[91,167307,466],{"class":105},[91,167309,12558],{"class":250},[91,167311,327],{"class":105},[91,167313,12558],{"class":250},[91,167315,321],{"class":105},[91,167317,12558],{"class":250},[91,167319,542],{"class":105},[91,167321,12558],{"class":250},[91,167323,568],{"class":105},[91,167325,33327],{"class":250},[91,167327,167328,167330,167332,167335,167337,167339,167341,167343,167345,167347,167349],{"class":93,"line":38},[91,167329,161387],{"class":250},[91,167331,296],{"class":153},[91,167333,167334],{"class":105}," filter",[91,167336,251],{"class":250},[91,167338,166967],{"class":153},[91,167340,167266],{"class":250},[91,167342,577],{"class":153},[91,167344,14878],{"class":105},[91,167346,101640],{"class":153},[91,167348,4216],{"class":105},[91,167350,167273],{"class":250},[91,167352,167353,167355,167357,167359],{"class":93,"line":1304},[91,167354,30496],{"class":105},[91,167356,251],{"class":250},[91,167358,154151],{"class":105},[91,167360,166149],{"class":250},[217,167362,167364],{"id":167363},"_7103-sorted","7.10.3 sorted",[21,167366,167367,167369],{},[88,167368,165317],{}," 返回排序后的新列表。",[82,167371,167373],{"className":30459,"code":167372,"language":30461,"meta":26,"style":26},"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",[88,167374,167375,167383,167403,167423,167443,167447,167451,167480],{"__ignoreMap":26},[91,167376,167377,167379,167381],{"class":93,"line":94},[91,167378,159797],{"class":250},[91,167380,296],{"class":153},[91,167382,55528],{"class":250},[91,167384,167385,167387,167389,167391,167393,167395,167397,167399,167401],{"class":93,"line":38},[91,167386,148466],{"class":250},[91,167388,62760],{"class":101},[91,167390,51518],{"class":250},[91,167392,149969],{"class":101},[91,167394,12558],{"class":250},[91,167396,151553],{"class":101},[91,167398,51518],{"class":250},[91,167400,1238],{"class":105},[91,167402,5053],{"class":250},[91,167404,167405,167407,167409,167411,167413,167415,167417,167419,167421],{"class":93,"line":1304},[91,167406,148466],{"class":250},[91,167408,62760],{"class":101},[91,167410,51518],{"class":250},[91,167412,151017],{"class":101},[91,167414,12558],{"class":250},[91,167416,151553],{"class":101},[91,167418,51518],{"class":250},[91,167420,1060],{"class":105},[91,167422,5053],{"class":250},[91,167424,167425,167427,167429,167431,167433,167435,167437,167439,167441],{"class":93,"line":1319},[91,167426,148466],{"class":250},[91,167428,62760],{"class":101},[91,167430,51518],{"class":250},[91,167432,159812],{"class":101},[91,167434,12558],{"class":250},[91,167436,151553],{"class":101},[91,167438,51518],{"class":250},[91,167440,655],{"class":105},[91,167442,5053],{"class":250},[91,167444,167445],{"class":93,"line":1325},[91,167446,33327],{"class":250},[91,167448,167449],{"class":93,"line":1339},[91,167450,2523],{"emptyLinePlaceholder":175},[91,167452,167453,167455,167457,167459,167462,167464,167466,167468,167470,167472,167474,167476,167478],{"class":93,"line":1345},[91,167454,161387],{"class":250},[91,167456,296],{"class":153},[91,167458,163685],{"class":105},[91,167460,167461],{"class":250},"(students, ",[91,167463,154027],{"class":5339},[91,167465,154030],{"class":153},[91,167467,154033],{"class":250},[91,167469,151553],{"class":101},[91,167471,112283],{"class":250},[91,167473,163609],{"class":5339},[91,167475,296],{"class":153},[91,167477,31557],{"class":105},[91,167479,257],{"class":250},[91,167481,167482,167484],{"class":93,"line":1436},[91,167483,30496],{"class":105},[91,167485,76666],{"class":250},[190,167487,167489],{"id":167488},"_711-闭包入门","7.11 闭包入门",[21,167491,167492],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[82,167494,167496],{"className":30459,"code":167495,"language":30461,"meta":26,"style":26},"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",[88,167497,167498,167508,167518,167529,167533,167540,167544,167548,167562],{"__ignoreMap":26},[91,167499,167500,167502,167505],{"class":93,"line":94},[91,167501,32028],{"class":153},[91,167503,167504],{"class":97}," outer",[91,167506,167507],{"class":250},"(base):\n",[91,167509,167510,167512,167515],{"class":93,"line":38},[91,167511,30882],{"class":153},[91,167513,167514],{"class":97}," inner",[91,167516,167517],{"class":250},"(num):\n",[91,167519,167520,167522,167525,167527],{"class":93,"line":1304},[91,167521,14875],{"class":153},[91,167523,167524],{"class":250}," base ",[91,167526,730],{"class":153},[91,167528,166660],{"class":250},[91,167530,167531],{"class":93,"line":1319},[91,167532,2523],{"emptyLinePlaceholder":175},[91,167534,167535,167537],{"class":93,"line":1325},[91,167536,4213],{"class":153},[91,167538,167539],{"class":250}," inner\n",[91,167541,167542],{"class":93,"line":1339},[91,167543,2523],{"emptyLinePlaceholder":175},[91,167545,167546],{"class":93,"line":1345},[91,167547,2523],{"emptyLinePlaceholder":175},[91,167549,167550,167553,167555,167558,167560],{"class":93,"line":1436},[91,167551,167552],{"class":250},"add_10 ",[91,167554,296],{"class":153},[91,167556,167557],{"class":250}," outer(",[91,167559,695],{"class":105},[91,167561,257],{"class":250},[91,167563,167564,167566,167569,167571],{"class":93,"line":1442},[91,167565,30496],{"class":105},[91,167567,167568],{"class":250},"(add_10(",[91,167570,568],{"class":105},[91,167572,30578],{"class":250},[21,167574,167575],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[190,167577,167579],{"id":167578},"_712-装饰器入门","7.12 装饰器入门",[21,167581,167582],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[82,167584,167586],{"className":30459,"code":167585,"language":30461,"meta":26,"style":26},"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",[88,167587,167588,167597,167606,167617,167622,167633,167637,167644,167648,167652,167657,167665,167675,167679,167683],{"__ignoreMap":26},[91,167589,167590,167592,167594],{"class":93,"line":94},[91,167591,32028],{"class":153},[91,167593,87272],{"class":97},[91,167595,167596],{"class":250},"(func):\n",[91,167598,167599,167601,167604],{"class":93,"line":38},[91,167600,30882],{"class":153},[91,167602,167603],{"class":97}," wrapper",[91,167605,32034],{"class":250},[91,167607,167608,167610,167612,167615],{"class":93,"line":1304},[91,167609,32532],{"class":105},[91,167611,251],{"class":250},[91,167613,167614],{"class":101},"\"函数开始执行\"",[91,167616,257],{"class":250},[91,167618,167619],{"class":93,"line":1319},[91,167620,167621],{"class":250},"        func()\n",[91,167623,167624,167626,167628,167631],{"class":93,"line":1325},[91,167625,32532],{"class":105},[91,167627,251],{"class":250},[91,167629,167630],{"class":101},"\"函数执行结束\"",[91,167632,257],{"class":250},[91,167634,167635],{"class":93,"line":1339},[91,167636,2523],{"emptyLinePlaceholder":175},[91,167638,167639,167641],{"class":93,"line":1345},[91,167640,4213],{"class":153},[91,167642,167643],{"class":250}," wrapper\n",[91,167645,167646],{"class":93,"line":1436},[91,167647,2523],{"emptyLinePlaceholder":175},[91,167649,167650],{"class":93,"line":1442},[91,167651,2523],{"emptyLinePlaceholder":175},[91,167653,167654],{"class":93,"line":1454},[91,167655,167656],{"class":97},"@log\n",[91,167658,167659,167661,167663],{"class":93,"line":1736},[91,167660,32028],{"class":153},[91,167662,161077],{"class":97},[91,167664,32034],{"class":250},[91,167666,167667,167669,167671,167673],{"class":93,"line":1741},[91,167668,31380],{"class":105},[91,167670,251],{"class":250},[91,167672,5967],{"class":101},[91,167674,257],{"class":250},[91,167676,167677],{"class":93,"line":1747},[91,167678,2523],{"emptyLinePlaceholder":175},[91,167680,167681],{"class":93,"line":1752},[91,167682,2523],{"emptyLinePlaceholder":175},[91,167684,167685],{"class":93,"line":1766},[91,167686,161112],{"class":250},[21,167688,158355],{},[82,167690,167692],{"className":30459,"code":167691,"language":30461,"meta":26,"style":26},"say_hello = log(say_hello)\n",[88,167693,167694],{"__ignoreMap":26},[91,167695,167696,167699,167701],{"class":93,"line":94},[91,167697,167698],{"class":250},"say_hello ",[91,167700,296],{"class":153},[91,167702,167703],{"class":250}," log(say_hello)\n",[21,167705,167706],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[190,167708,167710],{"id":167709},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[82,167712,167714],{"className":30459,"code":167713,"language":30461,"meta":26,"style":26},"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",[88,167715,167716,167724,167741,167751,167770,167780,167787,167791,167797,167801,167805,167809,167817,167827,167831,167835],{"__ignoreMap":26},[91,167717,167718,167720,167722],{"class":93,"line":94},[91,167719,32028],{"class":153},[91,167721,87272],{"class":97},[91,167723,167596],{"class":250},[91,167725,167726,167728,167730,167732,167734,167737,167739],{"class":93,"line":38},[91,167727,30882],{"class":153},[91,167729,167603],{"class":97},[91,167731,251],{"class":250},[91,167733,704],{"class":153},[91,167735,167736],{"class":250},"args, ",[91,167738,10784],{"class":153},[91,167740,166747],{"class":250},[91,167742,167743,167745,167747,167749],{"class":93,"line":1304},[91,167744,32532],{"class":105},[91,167746,251],{"class":250},[91,167748,167614],{"class":101},[91,167750,257],{"class":250},[91,167752,167753,167756,167758,167761,167763,167765,167767],{"class":93,"line":1319},[91,167754,167755],{"class":250},"        result ",[91,167757,296],{"class":153},[91,167759,167760],{"class":250}," func(",[91,167762,704],{"class":153},[91,167764,167736],{"class":250},[91,167766,10784],{"class":153},[91,167768,167769],{"class":250},"kwargs)\n",[91,167771,167772,167774,167776,167778],{"class":93,"line":1325},[91,167773,32532],{"class":105},[91,167775,251],{"class":250},[91,167777,167630],{"class":101},[91,167779,257],{"class":250},[91,167781,167782,167784],{"class":93,"line":1339},[91,167783,14875],{"class":153},[91,167785,167786],{"class":250}," result\n",[91,167788,167789],{"class":93,"line":1345},[91,167790,2523],{"emptyLinePlaceholder":175},[91,167792,167793,167795],{"class":93,"line":1436},[91,167794,4213],{"class":153},[91,167796,167643],{"class":250},[91,167798,167799],{"class":93,"line":1442},[91,167800,2523],{"emptyLinePlaceholder":175},[91,167802,167803],{"class":93,"line":1454},[91,167804,2523],{"emptyLinePlaceholder":175},[91,167806,167807],{"class":93,"line":1736},[91,167808,167656],{"class":97},[91,167810,167811,167813,167815],{"class":93,"line":1741},[91,167812,32028],{"class":153},[91,167814,5332],{"class":97},[91,167816,151174],{"class":250},[91,167818,167819,167821,167823,167825],{"class":93,"line":1747},[91,167820,4213],{"class":153},[91,167822,10992],{"class":250},[91,167824,730],{"class":153},[91,167826,151185],{"class":250},[91,167828,167829],{"class":93,"line":1752},[91,167830,2523],{"emptyLinePlaceholder":175},[91,167832,167833],{"class":93,"line":1766},[91,167834,2523],{"emptyLinePlaceholder":175},[91,167836,167837,167839,167841,167843,167845,167847],{"class":93,"line":1771},[91,167838,30496],{"class":105},[91,167840,166681],{"class":250},[91,167842,695],{"class":105},[91,167844,12558],{"class":250},[91,167846,949],{"class":105},[91,167848,30578],{"class":250},[21,167850,167851,167852,101099,167854,167856],{},"这个写法使用 ",[88,167853,166613],{},[88,167855,166728],{}," 接收原函数的所有参数。",[190,167858,167860],{"id":167859},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[21,167862,123373],{},[14,167864,167865,167868,167871],{},[17,167866,167867],{},"给定一组学生数据。",[17,167869,167870],{},"封装函数，根据传入规则筛选学生。",[17,167872,167873],{},"筛选及格、优秀、未成年学生。",[21,167875,10158],{},[82,167877,167879],{"className":30459,"code":167878,"language":30461,"meta":26,"style":26},"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",[88,167880,167881,167889,167917,167945,167973,167977,167981,167985,167995,168003,168013,168020,168025,168031,168035,168039,168063,168086,168109,168113,168120,168127],{"__ignoreMap":26},[91,167882,167883,167885,167887],{"class":93,"line":94},[91,167884,159797],{"class":250},[91,167886,296],{"class":153},[91,167888,55528],{"class":250},[91,167890,167891,167893,167895,167897,167899,167901,167903,167905,167907,167909,167911,167913,167915],{"class":93,"line":38},[91,167892,148466],{"class":250},[91,167894,62760],{"class":101},[91,167896,51518],{"class":250},[91,167898,149969],{"class":101},[91,167900,12558],{"class":250},[91,167902,69205],{"class":101},[91,167904,51518],{"class":250},[91,167906,899],{"class":105},[91,167908,12558],{"class":250},[91,167910,151553],{"class":101},[91,167912,51518],{"class":250},[91,167914,1238],{"class":105},[91,167916,5053],{"class":250},[91,167918,167919,167921,167923,167925,167927,167929,167931,167933,167935,167937,167939,167941,167943],{"class":93,"line":1304},[91,167920,148466],{"class":250},[91,167922,62760],{"class":101},[91,167924,51518],{"class":250},[91,167926,151017],{"class":101},[91,167928,12558],{"class":250},[91,167930,69205],{"class":101},[91,167932,51518],{"class":250},[91,167934,874],{"class":105},[91,167936,12558],{"class":250},[91,167938,151553],{"class":101},[91,167940,51518],{"class":250},[91,167942,1060],{"class":105},[91,167944,5053],{"class":250},[91,167946,167947,167949,167951,167953,167955,167957,167959,167961,167963,167965,167967,167969,167971],{"class":93,"line":1319},[91,167948,148466],{"class":250},[91,167950,62760],{"class":101},[91,167952,51518],{"class":250},[91,167954,159812],{"class":101},[91,167956,12558],{"class":250},[91,167958,69205],{"class":101},[91,167960,51518],{"class":250},[91,167962,924],{"class":105},[91,167964,12558],{"class":250},[91,167966,151553],{"class":101},[91,167968,51518],{"class":250},[91,167970,1131],{"class":105},[91,167972,5053],{"class":250},[91,167974,167975],{"class":93,"line":1325},[91,167976,33327],{"class":250},[91,167978,167979],{"class":93,"line":1339},[91,167980,2523],{"emptyLinePlaceholder":175},[91,167982,167983],{"class":93,"line":1345},[91,167984,2523],{"emptyLinePlaceholder":175},[91,167986,167987,167989,167992],{"class":93,"line":1436},[91,167988,32028],{"class":153},[91,167990,167991],{"class":97}," filter_students",[91,167993,167994],{"class":250},"(students, condition):\n",[91,167996,167997,167999,168001],{"class":93,"line":1442},[91,167998,161304],{"class":250},[91,168000,296],{"class":153},[91,168002,51919],{"class":250},[91,168004,168005,168007,168009,168011],{"class":93,"line":1454},[91,168006,3324],{"class":153},[91,168008,152218],{"class":250},[91,168010,26165],{"class":153},[91,168012,152223],{"class":250},[91,168014,168015,168017],{"class":93,"line":1736},[91,168016,2620],{"class":153},[91,168018,168019],{"class":250}," condition(student):\n",[91,168021,168022],{"class":93,"line":1741},[91,168023,168024],{"class":250},"            result.append(student)\n",[91,168026,168027,168029],{"class":93,"line":1747},[91,168028,4213],{"class":153},[91,168030,167786],{"class":250},[91,168032,168033],{"class":93,"line":1752},[91,168034,2523],{"emptyLinePlaceholder":175},[91,168036,168037],{"class":93,"line":1766},[91,168038,2523],{"emptyLinePlaceholder":175},[91,168040,168041,168043,168045,168048,168050,168053,168055,168057,168059,168061],{"class":93,"line":1771},[91,168042,165782],{"class":250},[91,168044,296],{"class":153},[91,168046,168047],{"class":250}," filter_students(students, ",[91,168049,166967],{"class":153},[91,168051,168052],{"class":250}," s: s[",[91,168054,151553],{"class":101},[91,168056,4566],{"class":250},[91,168058,1834],{"class":153},[91,168060,157918],{"class":105},[91,168062,257],{"class":250},[91,168064,168065,168068,168070,168072,168074,168076,168078,168080,168082,168084],{"class":93,"line":1777},[91,168066,168067],{"class":250},"excellent ",[91,168069,296],{"class":153},[91,168071,168047],{"class":250},[91,168073,166967],{"class":153},[91,168075,168052],{"class":250},[91,168077,151553],{"class":101},[91,168079,4566],{"class":250},[91,168081,1834],{"class":153},[91,168083,157869],{"class":105},[91,168085,257],{"class":250},[91,168087,168088,168091,168093,168095,168097,168099,168101,168103,168105,168107],{"class":93,"line":1798},[91,168089,168090],{"class":250},"under_age ",[91,168092,296],{"class":153},[91,168094,168047],{"class":250},[91,168096,166967],{"class":153},[91,168098,168052],{"class":250},[91,168100,69205],{"class":101},[91,168102,4566],{"class":250},[91,168104,1159],{"class":153},[91,168106,156366],{"class":105},[91,168108,257],{"class":250},[91,168110,168111],{"class":93,"line":1803},[91,168112,2523],{"emptyLinePlaceholder":175},[91,168114,168115,168117],{"class":93,"line":1817},[91,168116,30496],{"class":105},[91,168118,168119],{"class":250},"(passed)\n",[91,168121,168122,168124],{"class":93,"line":1822},[91,168123,30496],{"class":105},[91,168125,168126],{"class":250},"(excellent)\n",[91,168128,168129,168131],{"class":93,"line":1851},[91,168130,30496],{"class":105},[91,168132,168133],{"class":250},"(under_age)\n",[190,168135,168137],{"id":168136},"_715-易错点","7.15 易错点",[14,168139,168140,168143,168151,168156,168167],{},[17,168141,168142],{},"默认参数不要写可变对象。",[17,168144,168145,168147,168148,168150],{},[88,168146,166613],{}," 是元组，",[88,168149,166728],{}," 是字典。",[17,168152,168153,168155],{},[88,168154,166967],{}," 只适合简单表达式。",[17,168157,168158,101099,168160,168162,168163,168166],{},[88,168159,74125],{},[88,168161,80132],{}," 的结果是迭代器，常用 ",[88,168164,168165],{},"list()"," 转换查看。",[17,168168,168169],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[190,168171,168173],{"id":168172},"_716-本章练习","7.16 本章练习",[14,168175,168176,168183,168189,168194,168199],{},[17,168177,168178,168179,168182],{},"写函数 ",[88,168180,168181],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[17,168184,168178,168185,168188],{},[88,168186,168187],{},"print_user(**kwargs)","，输出用户所有字段。",[17,168190,104447,168191,168193],{},[88,168192,166967],{}," 对学生列表按年龄排序。",[17,168195,104447,168196,168198],{},[88,168197,80132],{}," 找出成绩不及格的学生。",[17,168200,168201],{},"写一个装饰器，统计函数执行前后的提示信息。",[168,168203,168204],{},"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":26,"searchDepth":38,"depth":38,"links":168206},[168207,168208,168209,168210,168211,168212,168216,168217,168218,168219,168224,168225,168226,168227,168228,168229],{"id":166065,"depth":38,"text":166066},{"id":166179,"depth":38,"text":166180},{"id":166268,"depth":38,"text":166269},{"id":166330,"depth":38,"text":166331},{"id":166476,"depth":38,"text":166477},{"id":166603,"depth":38,"text":166604,"children":168213},[168214,168215],{"id":166607,"depth":1304,"text":166608},{"id":166722,"depth":1304,"text":166723},{"id":166803,"depth":38,"text":166804},{"id":166961,"depth":38,"text":166962},{"id":167129,"depth":38,"text":167130},{"id":167211,"depth":38,"text":167212,"children":168220},[168221,168222,168223],{"id":167215,"depth":1304,"text":167216},{"id":167286,"depth":1304,"text":167287},{"id":167363,"depth":1304,"text":167364},{"id":167488,"depth":38,"text":167489},{"id":167578,"depth":38,"text":167579},{"id":167709,"depth":38,"text":167710},{"id":167859,"depth":38,"text":167860},{"id":168136,"depth":38,"text":168137},{"id":168172,"depth":38,"text":168173},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166057,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168236,"title":168237,"body":168238,"description":23500,"extension":173,"meta":170757,"navigation":175,"path":170758,"seo":170759,"stem":170760,"__hash__":170761},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168239,"toc":170732},[168240,168243,168247,168250,168253,168284,168288,168292,168295,168322,168326,168329,168380,168383,168398,168401,168436,168440,168442,168466,168469,168529,168533,168537,168540,168597,168600,168620,168624,168627,168690,168694,168697,168753,168760,168784,168788,168791,168854,168858,168863,168914,168917,168921,168926,168993,168996,169078,169082,169087,169138,169141,169145,169148,169151,169159,169162,169208,169211,169257,169261,169267,169311,169314,169360,169363,169403,169406,169467,169471,169474,169564,169567,169709,169712,169779,169783,169786,169789,169930,169933,170011,170014,170190,170194,170196,170207,170209,170408,170412,170656,170660,170694,170698,170729],[10,168241,168237],{"id":168242},"_8-文件操作",[190,168244,168246],{"id":168245},"_81-文件操作的意义","8.1 文件操作的意义",[21,168248,168249],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[21,168251,168252],{},"常见文件类型：",[14,168254,168255,168261,168267,168273,168279],{},[17,168256,168257,168260],{},[88,168258,168259],{},".txt","：普通文本。",[17,168262,168263,168266],{},[88,168264,168265],{},".csv","：表格文本。",[17,168268,168269,168272],{},[88,168270,168271],{},".json","：结构化数据。",[17,168274,168275,168278],{},[88,168276,168277],{},".log","：日志文件。",[17,168280,168281,168283],{},[88,168282,146433],{},"：Python 源代码。",[190,168285,168287],{"id":168286},"_82-路径","8.2 路径",[217,168289,168291],{"id":168290},"_821-相对路径","8.2.1 相对路径",[21,168293,168294],{},"相对当前运行目录：",[82,168296,168298],{"className":30459,"code":168297,"language":30461,"meta":26,"style":26},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[88,168299,168300],{"__ignoreMap":26},[91,168301,168302,168304,168306,168308,168310,168312,168314,168316,168318,168320],{"class":93,"line":94},[91,168303,86996],{"class":105},[91,168305,251],{"class":250},[91,168307,146877],{"class":101},[91,168309,12558],{"class":250},[91,168311,146882],{"class":101},[91,168313,12558],{"class":250},[91,168315,146887],{"class":5339},[91,168317,296],{"class":153},[91,168319,146892],{"class":101},[91,168321,257],{"class":250},[217,168323,168325],{"id":168324},"_822-绝对路径","8.2.2 绝对路径",[21,168327,168328],{},"从根目录或盘符开始：",[82,168330,168332],{"className":30459,"code":168331,"language":30461,"meta":26,"style":26},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[88,168333,168334,168357],{"__ignoreMap":26},[91,168335,168336,168338,168340,168343,168345,168347,168349,168351,168353,168355],{"class":93,"line":94},[91,168337,86996],{"class":105},[91,168339,251],{"class":250},[91,168341,168342],{"class":101},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[91,168344,12558],{"class":250},[91,168346,146882],{"class":101},[91,168348,12558],{"class":250},[91,168350,146887],{"class":5339},[91,168352,296],{"class":153},[91,168354,146892],{"class":101},[91,168356,257],{"class":250},[91,168358,168359,168361,168363,168366,168368,168370,168372,168374,168376,168378],{"class":93,"line":38},[91,168360,86996],{"class":105},[91,168362,251],{"class":250},[91,168364,168365],{"class":101},"\"D:\u002Fdata\u002Fdata.txt\"",[91,168367,12558],{"class":250},[91,168369,146882],{"class":101},[91,168371,12558],{"class":250},[91,168373,146887],{"class":5339},[91,168375,296],{"class":153},[91,168377,146892],{"class":101},[91,168379,257],{"class":250},[21,168381,168382],{},"Windows 路径建议写成：",[82,168384,168386],{"className":30459,"code":168385,"language":30461,"meta":26,"style":26},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[88,168387,168388],{"__ignoreMap":26},[91,168389,168390,168393,168395],{"class":93,"line":94},[91,168391,168392],{"class":250},"path ",[91,168394,296],{"class":153},[91,168396,168397],{"class":101}," \"D:\u002Fdata\u002Fdata.txt\"\n",[21,168399,168400],{},"或原始字符串：",[82,168402,168404],{"className":30459,"code":168403,"language":30461,"meta":26,"style":26},"path = r\"D:\\data\\data.txt\"\n",[88,168405,168406],{"__ignoreMap":26},[91,168407,168408,168410,168412,168414,168416,168419,168422,168425,168427,168429,168431,168434],{"class":93,"line":94},[91,168409,168392],{"class":250},[91,168411,296],{"class":153},[91,168413,17244],{"class":153},[91,168415,500],{"class":101},[91,168417,168418],{"class":48058},"D:",[91,168420,168421],{"class":105},"\\d",[91,168423,168424],{"class":48058},"ata",[91,168426,168421],{"class":105},[91,168428,168424],{"class":48058},[91,168430,807],{"class":105},[91,168432,168433],{"class":48058},"txt",[91,168435,25255],{"class":101},[190,168437,168439],{"id":168438},"_83-open函数","8.3 open函数",[21,168441,5304],{},[82,168443,168445],{"className":30459,"code":168444,"language":30461,"meta":26,"style":26},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[88,168446,168447],{"__ignoreMap":26},[91,168448,168449,168451,168453,168455,168458,168460,168462,168464],{"class":93,"line":94},[91,168450,45435],{"class":5339},[91,168452,13687],{"class":153},[91,168454,146872],{"class":105},[91,168456,168457],{"class":250},"(文件路径, 打开模式, ",[91,168459,146887],{"class":5339},[91,168461,296],{"class":153},[91,168463,146892],{"class":101},[91,168465,257],{"class":250},[21,168467,168468],{},"常见模式：",[386,168470,168471,168480],{},[389,168472,168473],{},[392,168474,168475,168478],{},[395,168476,168477],{},"模式",[395,168479,25991],{},[433,168481,168482,168491,168500,168509,168519],{},[392,168483,168484,168488],{},[438,168485,168486],{},[88,168487,919],{},[438,168489,168490],{},"只读，文件不存在会报错",[392,168492,168493,168497],{},[438,168494,168495],{},[88,168496,1044],{},[438,168498,168499],{},"只写，文件不存在会创建，存在会清空",[392,168501,168502,168506],{},[438,168503,168504],{},[88,168505,487],{},[438,168507,168508],{},"追加，文件不存在会创建",[392,168510,168511,168516],{},[438,168512,168513],{},[88,168514,168515],{},"rb",[438,168517,168518],{},"二进制只读",[392,168520,168521,168526],{},[438,168522,168523],{},[88,168524,168525],{},"wb",[438,168527,168528],{},"二进制只写",[190,168530,168532],{"id":168531},"_84-读取文件","8.4 读取文件",[217,168534,168536],{"id":168535},"_841-read","8.4.1 read",[21,168538,168539],{},"一次读取全部内容：",[82,168541,168543],{"className":30459,"code":168542,"language":30461,"meta":26,"style":26},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[88,168544,168545,168571,168583,168590],{"__ignoreMap":26},[91,168546,168547,168549,168551,168553,168555,168557,168559,168561,168563,168565,168567,168569],{"class":93,"line":94},[91,168548,45435],{"class":5339},[91,168550,13687],{"class":153},[91,168552,146872],{"class":105},[91,168554,251],{"class":250},[91,168556,146877],{"class":101},[91,168558,12558],{"class":250},[91,168560,146882],{"class":101},[91,168562,12558],{"class":250},[91,168564,146887],{"class":5339},[91,168566,296],{"class":153},[91,168568,146892],{"class":101},[91,168570,257],{"class":250},[91,168572,168573,168576,168578,168580],{"class":93,"line":38},[91,168574,168575],{"class":250},"content ",[91,168577,296],{"class":153},[91,168579,148234],{"class":5339},[91,168581,168582],{"class":250},".read()\n",[91,168584,168585,168587],{"class":93,"line":1304},[91,168586,30496],{"class":105},[91,168588,168589],{"class":250},"(content)\n",[91,168591,168592,168594],{"class":93,"line":1319},[91,168593,45435],{"class":5339},[91,168595,168596],{"class":250},".close()\n",[21,168598,168599],{},"可以指定读取字符数：",[82,168601,168603],{"className":30459,"code":168602,"language":30461,"meta":26,"style":26},"content = file.read(10)\n",[88,168604,168605],{"__ignoreMap":26},[91,168606,168607,168609,168611,168613,168616,168618],{"class":93,"line":94},[91,168608,168575],{"class":250},[91,168610,296],{"class":153},[91,168612,148234],{"class":5339},[91,168614,168615],{"class":250},".read(",[91,168617,695],{"class":105},[91,168619,257],{"class":250},[217,168621,168623],{"id":168622},"_842-readline","8.4.2 readline",[21,168625,168626],{},"一次读取一行：",[82,168628,168630],{"className":30459,"code":168629,"language":30461,"meta":26,"style":26},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[88,168631,168632,168658,168662,168673,168680,168684],{"__ignoreMap":26},[91,168633,168634,168636,168638,168640,168642,168644,168646,168648,168650,168652,168654,168656],{"class":93,"line":94},[91,168635,45435],{"class":5339},[91,168637,13687],{"class":153},[91,168639,146872],{"class":105},[91,168641,251],{"class":250},[91,168643,146877],{"class":101},[91,168645,12558],{"class":250},[91,168647,146882],{"class":101},[91,168649,12558],{"class":250},[91,168651,146887],{"class":5339},[91,168653,296],{"class":153},[91,168655,146892],{"class":101},[91,168657,257],{"class":250},[91,168659,168660],{"class":93,"line":38},[91,168661,2523],{"emptyLinePlaceholder":175},[91,168663,168664,168666,168668,168670],{"class":93,"line":1304},[91,168665,147333],{"class":250},[91,168667,296],{"class":153},[91,168669,148234],{"class":5339},[91,168671,168672],{"class":250},".readline()\n",[91,168674,168675,168677],{"class":93,"line":1319},[91,168676,30496],{"class":105},[91,168678,168679],{"class":250},"(line)\n",[91,168681,168682],{"class":93,"line":1325},[91,168683,2523],{"emptyLinePlaceholder":175},[91,168685,168686,168688],{"class":93,"line":1339},[91,168687,45435],{"class":5339},[91,168689,168596],{"class":250},[217,168691,168693],{"id":168692},"_843-readlines","8.4.3 readlines",[21,168695,168696],{},"读取所有行，返回列表：",[82,168698,168700],{"className":30459,"code":168699,"language":30461,"meta":26,"style":26},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[88,168701,168702,168728,168740,168747],{"__ignoreMap":26},[91,168703,168704,168706,168708,168710,168712,168714,168716,168718,168720,168722,168724,168726],{"class":93,"line":94},[91,168705,45435],{"class":5339},[91,168707,13687],{"class":153},[91,168709,146872],{"class":105},[91,168711,251],{"class":250},[91,168713,146877],{"class":101},[91,168715,12558],{"class":250},[91,168717,146882],{"class":101},[91,168719,12558],{"class":250},[91,168721,146887],{"class":5339},[91,168723,296],{"class":153},[91,168725,146892],{"class":101},[91,168727,257],{"class":250},[91,168729,168730,168733,168735,168737],{"class":93,"line":38},[91,168731,168732],{"class":250},"lines ",[91,168734,296],{"class":153},[91,168736,148234],{"class":5339},[91,168738,168739],{"class":250},".readlines()\n",[91,168741,168742,168744],{"class":93,"line":1304},[91,168743,30496],{"class":105},[91,168745,168746],{"class":250},"(lines)\n",[91,168748,168749,168751],{"class":93,"line":1319},[91,168750,45435],{"class":5339},[91,168752,168596],{"class":250},[21,168754,168755,168756,168759],{},"每一行通常带有换行符，可以用 ",[88,168757,168758],{},"strip()"," 去掉：",[82,168761,168763],{"className":30459,"code":168762,"language":30461,"meta":26,"style":26},"for line in lines:\n    print(line.strip())\n",[88,168764,168765,168777],{"__ignoreMap":26},[91,168766,168767,168769,168772,168774],{"class":93,"line":94},[91,168768,3148],{"class":153},[91,168770,168771],{"class":250}," line ",[91,168773,26165],{"class":153},[91,168775,168776],{"class":250}," lines:\n",[91,168778,168779,168781],{"class":93,"line":38},[91,168780,31380],{"class":105},[91,168782,168783],{"class":250},"(line.strip())\n",[217,168785,168787],{"id":168786},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[21,168789,168790],{},"推荐读取大文件时使用：",[82,168792,168794],{"className":30459,"code":168793,"language":30461,"meta":26,"style":26},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[88,168795,168796,168822,168826,168838,168844,168848],{"__ignoreMap":26},[91,168797,168798,168800,168802,168804,168806,168808,168810,168812,168814,168816,168818,168820],{"class":93,"line":94},[91,168799,45435],{"class":5339},[91,168801,13687],{"class":153},[91,168803,146872],{"class":105},[91,168805,251],{"class":250},[91,168807,146877],{"class":101},[91,168809,12558],{"class":250},[91,168811,146882],{"class":101},[91,168813,12558],{"class":250},[91,168815,146887],{"class":5339},[91,168817,296],{"class":153},[91,168819,146892],{"class":101},[91,168821,257],{"class":250},[91,168823,168824],{"class":93,"line":38},[91,168825,2523],{"emptyLinePlaceholder":175},[91,168827,168828,168830,168832,168834,168836],{"class":93,"line":1304},[91,168829,3148],{"class":153},[91,168831,168771],{"class":250},[91,168833,26165],{"class":153},[91,168835,148234],{"class":5339},[91,168837,3862],{"class":250},[91,168839,168840,168842],{"class":93,"line":1319},[91,168841,31380],{"class":105},[91,168843,168783],{"class":250},[91,168845,168846],{"class":93,"line":1325},[91,168847,2523],{"emptyLinePlaceholder":175},[91,168849,168850,168852],{"class":93,"line":1339},[91,168851,45435],{"class":5339},[91,168853,168596],{"class":250},[190,168855,168857],{"id":168856},"_85-with语句","8.5 with语句",[21,168859,168860,168862],{},[88,168861,107914],{}," 会自动关闭文件，推荐使用。",[82,168864,168866],{"className":30459,"code":168865,"language":30461,"meta":26,"style":26},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[88,168867,168868,168898,168908],{"__ignoreMap":26},[91,168869,168870,168872,168874,168876,168878,168880,168882,168884,168886,168888,168890,168892,168894,168896],{"class":93,"line":94},[91,168871,107914],{"class":153},[91,168873,146872],{"class":105},[91,168875,251],{"class":250},[91,168877,146877],{"class":101},[91,168879,12558],{"class":250},[91,168881,146882],{"class":101},[91,168883,12558],{"class":250},[91,168885,146887],{"class":5339},[91,168887,296],{"class":153},[91,168889,146892],{"class":101},[91,168891,13837],{"class":250},[91,168893,31464],{"class":153},[91,168895,148234],{"class":5339},[91,168897,3862],{"class":250},[91,168899,168900,168902,168904,168906],{"class":93,"line":38},[91,168901,146904],{"class":250},[91,168903,296],{"class":153},[91,168905,148234],{"class":5339},[91,168907,168582],{"class":250},[91,168909,168910,168912],{"class":93,"line":1304},[91,168911,31380],{"class":105},[91,168913,168589],{"class":250},[21,168915,168916],{},"等价于打开文件、读取、最后关闭，但更安全。",[190,168918,168920],{"id":168919},"_86-写入文件","8.6 写入文件",[21,168922,168923,168925],{},[88,168924,1044],{}," 模式会清空原文件。",[82,168927,168929],{"className":30459,"code":168928,"language":30461,"meta":26,"style":26},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[88,168930,168931,168961,168978],{"__ignoreMap":26},[91,168932,168933,168935,168937,168939,168941,168943,168945,168947,168949,168951,168953,168955,168957,168959],{"class":93,"line":94},[91,168934,107914],{"class":153},[91,168936,146872],{"class":105},[91,168938,251],{"class":250},[91,168940,146877],{"class":101},[91,168942,12558],{"class":250},[91,168944,152057],{"class":101},[91,168946,12558],{"class":250},[91,168948,146887],{"class":5339},[91,168950,296],{"class":153},[91,168952,146892],{"class":101},[91,168954,13837],{"class":250},[91,168956,31464],{"class":153},[91,168958,148234],{"class":5339},[91,168960,3862],{"class":250},[91,168962,168963,168966,168969,168972,168974,168976],{"class":93,"line":38},[91,168964,168965],{"class":5339},"    file",[91,168967,168968],{"class":250},".write(",[91,168970,168971],{"class":101},"\"hello",[91,168973,156606],{"class":105},[91,168975,500],{"class":101},[91,168977,257],{"class":250},[91,168979,168980,168982,168984,168987,168989,168991],{"class":93,"line":1304},[91,168981,168965],{"class":5339},[91,168983,168968],{"class":250},[91,168985,168986],{"class":101},"\"python",[91,168988,156606],{"class":105},[91,168990,500],{"class":101},[91,168992,257],{"class":250},[21,168994,168995],{},"写入多行：",[82,168997,168999],{"className":30459,"code":168998,"language":30461,"meta":26,"style":26},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[88,169000,169001,169036,169040,169071],{"__ignoreMap":26},[91,169002,169003,169005,169007,169009,169012,169014,169016,169018,169021,169023,169025,169027,169030,169032,169034],{"class":93,"line":94},[91,169004,168732],{"class":250},[91,169006,296],{"class":153},[91,169008,52307],{"class":250},[91,169010,169011],{"class":101},"\"小明,18",[91,169013,156606],{"class":105},[91,169015,500],{"class":101},[91,169017,12558],{"class":250},[91,169019,169020],{"class":101},"\"小红,17",[91,169022,156606],{"class":105},[91,169024,500],{"class":101},[91,169026,12558],{"class":250},[91,169028,169029],{"class":101},"\"小刚,19",[91,169031,156606],{"class":105},[91,169033,500],{"class":101},[91,169035,33327],{"class":250},[91,169037,169038],{"class":93,"line":38},[91,169039,2523],{"emptyLinePlaceholder":175},[91,169041,169042,169044,169046,169048,169051,169053,169055,169057,169059,169061,169063,169065,169067,169069],{"class":93,"line":1304},[91,169043,107914],{"class":153},[91,169045,146872],{"class":105},[91,169047,251],{"class":250},[91,169049,169050],{"class":101},"\"students.txt\"",[91,169052,12558],{"class":250},[91,169054,152057],{"class":101},[91,169056,12558],{"class":250},[91,169058,146887],{"class":5339},[91,169060,296],{"class":153},[91,169062,146892],{"class":101},[91,169064,13837],{"class":250},[91,169066,31464],{"class":153},[91,169068,148234],{"class":5339},[91,169070,3862],{"class":250},[91,169072,169073,169075],{"class":93,"line":1319},[91,169074,168965],{"class":5339},[91,169076,169077],{"class":250},".writelines(lines)\n",[190,169079,169081],{"id":169080},"_87-追加文件","8.7 追加文件",[21,169083,169084,169086],{},[88,169085,487],{}," 模式不会清空原内容，而是在末尾追加。",[82,169088,169090],{"className":30459,"code":169089,"language":30461,"meta":26,"style":26},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[88,169091,169092,169123],{"__ignoreMap":26},[91,169093,169094,169096,169098,169100,169103,169105,169107,169109,169111,169113,169115,169117,169119,169121],{"class":93,"line":94},[91,169095,107914],{"class":153},[91,169097,146872],{"class":105},[91,169099,251],{"class":250},[91,169101,169102],{"class":101},"\"log.txt\"",[91,169104,12558],{"class":250},[91,169106,165406],{"class":101},[91,169108,12558],{"class":250},[91,169110,146887],{"class":5339},[91,169112,296],{"class":153},[91,169114,146892],{"class":101},[91,169116,13837],{"class":250},[91,169118,31464],{"class":153},[91,169120,148234],{"class":5339},[91,169122,3862],{"class":250},[91,169124,169125,169127,169129,169132,169134,169136],{"class":93,"line":38},[91,169126,168965],{"class":5339},[91,169128,168968],{"class":250},[91,169130,169131],{"class":101},"\"程序启动",[91,169133,156606],{"class":105},[91,169135,500],{"class":101},[91,169137,257],{"class":250},[21,169139,169140],{},"日志类文件常用追加模式。",[190,169142,169144],{"id":169143},"_88-文件编码","8.8 文件编码",[21,169146,169147],{},"编码决定文字如何保存为字节。",[21,169149,169150],{},"常见编码：",[14,169152,169153,169156],{},[17,169154,169155],{},"UTF-8：推荐。",[17,169157,169158],{},"GBK：部分 Windows 中文文件常见。",[21,169160,169161],{},"读取文件乱码时，可以尝试：",[82,169163,169165],{"className":30459,"code":169164,"language":30461,"meta":26,"style":26},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[88,169166,169167,169198],{"__ignoreMap":26},[91,169168,169169,169171,169173,169175,169177,169179,169181,169183,169185,169187,169190,169192,169194,169196],{"class":93,"line":94},[91,169170,107914],{"class":153},[91,169172,146872],{"class":105},[91,169174,251],{"class":250},[91,169176,146877],{"class":101},[91,169178,12558],{"class":250},[91,169180,146882],{"class":101},[91,169182,12558],{"class":250},[91,169184,146887],{"class":5339},[91,169186,296],{"class":153},[91,169188,169189],{"class":101},"\"gbk\"",[91,169191,13837],{"class":250},[91,169193,31464],{"class":153},[91,169195,148234],{"class":5339},[91,169197,3862],{"class":250},[91,169199,169200,169202,169204,169206],{"class":93,"line":38},[91,169201,146904],{"class":250},[91,169203,296],{"class":153},[91,169205,148234],{"class":5339},[91,169207,168582],{"class":250},[21,169209,169210],{},"写文件时建议统一 UTF-8：",[82,169212,169214],{"className":30459,"code":169213,"language":30461,"meta":26,"style":26},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[88,169215,169216,169246],{"__ignoreMap":26},[91,169217,169218,169220,169222,169224,169226,169228,169230,169232,169234,169236,169238,169240,169242,169244],{"class":93,"line":94},[91,169219,107914],{"class":153},[91,169221,146872],{"class":105},[91,169223,251],{"class":250},[91,169225,146877],{"class":101},[91,169227,12558],{"class":250},[91,169229,152057],{"class":101},[91,169231,12558],{"class":250},[91,169233,146887],{"class":5339},[91,169235,296],{"class":153},[91,169237,146892],{"class":101},[91,169239,13837],{"class":250},[91,169241,31464],{"class":153},[91,169243,148234],{"class":5339},[91,169245,3862],{"class":250},[91,169247,169248,169250,169252,169255],{"class":93,"line":38},[91,169249,168965],{"class":5339},[91,169251,168968],{"class":250},[91,169253,169254],{"class":101},"\"中文内容\"",[91,169256,257],{"class":250},[190,169258,169260],{"id":169259},"_89-pathlib","8.9 pathlib",[21,169262,169263,169266],{},[88,169264,169265],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[82,169268,169270],{"className":30459,"code":169269,"language":30461,"meta":26,"style":26},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[88,169271,169272,169282,169286,169304],{"__ignoreMap":26},[91,169273,169274,169276,169278,169280],{"class":93,"line":94},[91,169275,30818],{"class":153},[91,169277,108392],{"class":250},[91,169279,30473],{"class":153},[91,169281,108397],{"class":250},[91,169283,169284],{"class":93,"line":38},[91,169285,2523],{"emptyLinePlaceholder":175},[91,169287,169288,169290,169292,169294,169297,169299,169301],{"class":93,"line":1304},[91,169289,168392],{"class":250},[91,169291,296],{"class":153},[91,169293,108626],{"class":250},[91,169295,169296],{"class":101},"\"data\"",[91,169298,13837],{"class":250},[91,169300,833],{"class":153},[91,169302,169303],{"class":101}," \"students.txt\"\n",[91,169305,169306,169308],{"class":93,"line":1319},[91,169307,30496],{"class":105},[91,169309,169310],{"class":250},"(path)\n",[21,169312,169313],{},"创建目录：",[82,169315,169317],{"className":30459,"code":169316,"language":30461,"meta":26,"style":26},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[88,169318,169319,169329,169333,169346],{"__ignoreMap":26},[91,169320,169321,169323,169325,169327],{"class":93,"line":94},[91,169322,30818],{"class":153},[91,169324,108392],{"class":250},[91,169326,30473],{"class":153},[91,169328,108397],{"class":250},[91,169330,169331],{"class":93,"line":38},[91,169332,2523],{"emptyLinePlaceholder":175},[91,169334,169335,169338,169340,169342,169344],{"class":93,"line":1304},[91,169336,169337],{"class":250},"data_dir ",[91,169339,296],{"class":153},[91,169341,108626],{"class":250},[91,169343,169296],{"class":101},[91,169345,257],{"class":250},[91,169347,169348,169351,169354,169356,169358],{"class":93,"line":1319},[91,169349,169350],{"class":250},"data_dir.mkdir(",[91,169352,169353],{"class":5339},"exist_ok",[91,169355,296],{"class":153},[91,169357,31557],{"class":105},[91,169359,257],{"class":250},[21,169361,169362],{},"判断文件是否存在：",[82,169364,169366],{"className":30459,"code":169365,"language":30461,"meta":26,"style":26},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[88,169367,169368,169381,169385,169392],{"__ignoreMap":26},[91,169369,169370,169372,169374,169376,169379],{"class":93,"line":94},[91,169371,168392],{"class":250},[91,169373,296],{"class":153},[91,169375,108626],{"class":250},[91,169377,169378],{"class":101},"\"data\u002Fstudents.txt\"",[91,169380,257],{"class":250},[91,169382,169383],{"class":93,"line":38},[91,169384,2523],{"emptyLinePlaceholder":175},[91,169386,169387,169389],{"class":93,"line":1304},[91,169388,1655],{"class":153},[91,169390,169391],{"class":250}," path.exists():\n",[91,169393,169394,169396,169398,169401],{"class":93,"line":1319},[91,169395,31380],{"class":105},[91,169397,251],{"class":250},[91,169399,169400],{"class":101},"\"文件存在\"",[91,169402,257],{"class":250},[21,169404,169405],{},"读写文本：",[82,169407,169409],{"className":30459,"code":169408,"language":30461,"meta":26,"style":26},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[88,169410,169411,169423,169427,169444,169461],{"__ignoreMap":26},[91,169412,169413,169415,169417,169419,169421],{"class":93,"line":94},[91,169414,168392],{"class":250},[91,169416,296],{"class":153},[91,169418,108626],{"class":250},[91,169420,146877],{"class":101},[91,169422,257],{"class":250},[91,169424,169425],{"class":93,"line":38},[91,169426,2523],{"emptyLinePlaceholder":175},[91,169428,169429,169432,169434,169436,169438,169440,169442],{"class":93,"line":1304},[91,169430,169431],{"class":250},"path.write_text(",[91,169433,145957],{"class":101},[91,169435,12558],{"class":250},[91,169437,146887],{"class":5339},[91,169439,296],{"class":153},[91,169441,146892],{"class":101},[91,169443,257],{"class":250},[91,169445,169446,169448,169450,169453,169455,169457,169459],{"class":93,"line":1319},[91,169447,168575],{"class":250},[91,169449,296],{"class":153},[91,169451,169452],{"class":250}," path.read_text(",[91,169454,146887],{"class":5339},[91,169456,296],{"class":153},[91,169458,146892],{"class":101},[91,169460,257],{"class":250},[91,169462,169463,169465],{"class":93,"line":1325},[91,169464,30496],{"class":105},[91,169466,168589],{"class":250},[190,169468,169470],{"id":169469},"_810-json文件","8.10 JSON文件",[21,169472,169473],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[82,169475,169477],{"className":30459,"code":169476,"language":30461,"meta":26,"style":26},"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",[88,169478,169479,169485,169489,169497,169507,169517,169525,169529,169533,169558],{"__ignoreMap":26},[91,169480,169481,169483],{"class":93,"line":94},[91,169482,30473],{"class":153},[91,169484,147172],{"class":250},[91,169486,169487],{"class":93,"line":38},[91,169488,2523],{"emptyLinePlaceholder":175},[91,169490,169491,169493,169495],{"class":93,"line":1304},[91,169492,149562],{"class":250},[91,169494,296],{"class":153},[91,169496,15695],{"class":250},[91,169498,169499,169501,169503,169505],{"class":93,"line":1319},[91,169500,147101],{"class":101},[91,169502,51518],{"class":250},[91,169504,149969],{"class":101},[91,169506,31547],{"class":250},[91,169508,169509,169511,169513,169515],{"class":93,"line":1325},[91,169510,164618],{"class":101},[91,169512,51518],{"class":250},[91,169514,899],{"class":105},[91,169516,31547],{"class":250},[91,169518,169519,169521,169523],{"class":93,"line":1339},[91,169520,164629],{"class":101},[91,169522,51518],{"class":250},[91,169524,164634],{"class":105},[91,169526,169527],{"class":93,"line":1345},[91,169528,1689],{"class":250},[91,169530,169531],{"class":93,"line":1436},[91,169532,2523],{"emptyLinePlaceholder":175},[91,169534,169535,169537,169539,169542,169544,169546,169548,169550,169552,169554,169556],{"class":93,"line":1442},[91,169536,156525],{"class":250},[91,169538,296],{"class":153},[91,169540,169541],{"class":250}," json.dumps(student, ",[91,169543,147218],{"class":5339},[91,169545,296],{"class":153},[91,169547,34068],{"class":105},[91,169549,12558],{"class":250},[91,169551,152093],{"class":5339},[91,169553,296],{"class":153},[91,169555,327],{"class":105},[91,169557,257],{"class":250},[91,169559,169560,169562],{"class":93,"line":1454},[91,169561,30496],{"class":105},[91,169563,164152],{"class":250},[21,169565,169566],{},"写入 JSON 文件：",[82,169568,169570],{"className":30459,"code":169569,"language":30461,"meta":26,"style":26},"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",[88,169571,169572,169578,169582,169590,169618,169646,169650,169654,169684],{"__ignoreMap":26},[91,169573,169574,169576],{"class":93,"line":94},[91,169575,30473],{"class":153},[91,169577,147172],{"class":250},[91,169579,169580],{"class":93,"line":38},[91,169581,2523],{"emptyLinePlaceholder":175},[91,169583,169584,169586,169588],{"class":93,"line":1304},[91,169585,159797],{"class":250},[91,169587,296],{"class":153},[91,169589,55528],{"class":250},[91,169591,169592,169594,169596,169598,169600,169602,169604,169606,169608,169610,169612,169614,169616],{"class":93,"line":1319},[91,169593,148466],{"class":250},[91,169595,62760],{"class":101},[91,169597,51518],{"class":250},[91,169599,149969],{"class":101},[91,169601,12558],{"class":250},[91,169603,69205],{"class":101},[91,169605,51518],{"class":250},[91,169607,899],{"class":105},[91,169609,12558],{"class":250},[91,169611,151553],{"class":101},[91,169613,51518],{"class":250},[91,169615,1238],{"class":105},[91,169617,5053],{"class":250},[91,169619,169620,169622,169624,169626,169628,169630,169632,169634,169636,169638,169640,169642,169644],{"class":93,"line":1325},[91,169621,148466],{"class":250},[91,169623,62760],{"class":101},[91,169625,51518],{"class":250},[91,169627,151017],{"class":101},[91,169629,12558],{"class":250},[91,169631,69205],{"class":101},[91,169633,51518],{"class":250},[91,169635,874],{"class":105},[91,169637,12558],{"class":250},[91,169639,151553],{"class":101},[91,169641,51518],{"class":250},[91,169643,1060],{"class":105},[91,169645,5053],{"class":250},[91,169647,169648],{"class":93,"line":1339},[91,169649,33327],{"class":250},[91,169651,169652],{"class":93,"line":1345},[91,169653,2523],{"emptyLinePlaceholder":175},[91,169655,169656,169658,169660,169662,169664,169666,169668,169670,169672,169674,169676,169678,169680,169682],{"class":93,"line":1436},[91,169657,107914],{"class":153},[91,169659,146872],{"class":105},[91,169661,251],{"class":250},[91,169663,151912],{"class":101},[91,169665,12558],{"class":250},[91,169667,152057],{"class":101},[91,169669,12558],{"class":250},[91,169671,146887],{"class":5339},[91,169673,296],{"class":153},[91,169675,146892],{"class":101},[91,169677,13837],{"class":250},[91,169679,31464],{"class":153},[91,169681,148234],{"class":5339},[91,169683,3862],{"class":250},[91,169685,169686,169689,169691,169693,169695,169697,169699,169701,169703,169705,169707],{"class":93,"line":1442},[91,169687,169688],{"class":250},"    json.dump(students, ",[91,169690,45435],{"class":5339},[91,169692,12558],{"class":250},[91,169694,147218],{"class":5339},[91,169696,296],{"class":153},[91,169698,34068],{"class":105},[91,169700,12558],{"class":250},[91,169702,152093],{"class":5339},[91,169704,296],{"class":153},[91,169706,327],{"class":105},[91,169708,257],{"class":250},[21,169710,169711],{},"读取 JSON 文件：",[82,169713,169715],{"className":30459,"code":169714,"language":30461,"meta":26,"style":26},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[88,169716,169717,169723,169727,169757,169769,169773],{"__ignoreMap":26},[91,169718,169719,169721],{"class":93,"line":94},[91,169720,30473],{"class":153},[91,169722,147172],{"class":250},[91,169724,169725],{"class":93,"line":38},[91,169726,2523],{"emptyLinePlaceholder":175},[91,169728,169729,169731,169733,169735,169737,169739,169741,169743,169745,169747,169749,169751,169753,169755],{"class":93,"line":1304},[91,169730,107914],{"class":153},[91,169732,146872],{"class":105},[91,169734,251],{"class":250},[91,169736,151912],{"class":101},[91,169738,12558],{"class":250},[91,169740,146882],{"class":101},[91,169742,12558],{"class":250},[91,169744,146887],{"class":5339},[91,169746,296],{"class":153},[91,169748,146892],{"class":101},[91,169750,13837],{"class":250},[91,169752,31464],{"class":153},[91,169754,148234],{"class":5339},[91,169756,3862],{"class":250},[91,169758,169759,169761,169763,169765,169767],{"class":93,"line":1319},[91,169760,153118],{"class":250},[91,169762,296],{"class":153},[91,169764,148245],{"class":250},[91,169766,45435],{"class":5339},[91,169768,257],{"class":250},[91,169770,169771],{"class":93,"line":1325},[91,169772,2523],{"emptyLinePlaceholder":175},[91,169774,169775,169777],{"class":93,"line":1339},[91,169776,30496],{"class":105},[91,169778,165076],{"class":250},[190,169780,169782],{"id":169781},"_811-csv文件","8.11 CSV文件",[21,169784,169785],{},"CSV 是逗号分隔值，常用于表格数据。",[21,169787,169788],{},"写入 CSV：",[82,169790,169792],{"className":30459,"code":169791,"language":30461,"meta":26,"style":26},"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",[88,169793,169794,169801,169805,169813,169831,169847,169863,169867,169871,169911,169925],{"__ignoreMap":26},[91,169795,169796,169798],{"class":93,"line":94},[91,169797,30473],{"class":153},[91,169799,169800],{"class":250}," csv\n",[91,169802,169803],{"class":93,"line":38},[91,169804,2523],{"emptyLinePlaceholder":175},[91,169806,169807,169809,169811],{"class":93,"line":1304},[91,169808,159797],{"class":250},[91,169810,296],{"class":153},[91,169812,55528],{"class":250},[91,169814,169815,169818,169820,169822,169824,169826,169829],{"class":93,"line":1319},[91,169816,169817],{"class":250},"    [",[91,169819,73180],{"class":101},[91,169821,12558],{"class":250},[91,169823,73213],{"class":101},[91,169825,12558],{"class":250},[91,169827,169828],{"class":101},"\"成绩\"",[91,169830,87917],{"class":250},[91,169832,169833,169835,169837,169839,169841,169843,169845],{"class":93,"line":1325},[91,169834,169817],{"class":250},[91,169836,149969],{"class":101},[91,169838,12558],{"class":250},[91,169840,899],{"class":105},[91,169842,12558],{"class":250},[91,169844,1238],{"class":105},[91,169846,87917],{"class":250},[91,169848,169849,169851,169853,169855,169857,169859,169861],{"class":93,"line":1339},[91,169850,169817],{"class":250},[91,169852,151017],{"class":101},[91,169854,12558],{"class":250},[91,169856,874],{"class":105},[91,169858,12558],{"class":250},[91,169860,1060],{"class":105},[91,169862,87917],{"class":250},[91,169864,169865],{"class":93,"line":1345},[91,169866,33327],{"class":250},[91,169868,169869],{"class":93,"line":1436},[91,169870,2523],{"emptyLinePlaceholder":175},[91,169872,169873,169875,169877,169879,169882,169884,169886,169888,169890,169892,169894,169896,169899,169901,169903,169905,169907,169909],{"class":93,"line":1442},[91,169874,107914],{"class":153},[91,169876,146872],{"class":105},[91,169878,251],{"class":250},[91,169880,169881],{"class":101},"\"students.csv\"",[91,169883,12558],{"class":250},[91,169885,152057],{"class":101},[91,169887,12558],{"class":250},[91,169889,146887],{"class":5339},[91,169891,296],{"class":153},[91,169893,146892],{"class":101},[91,169895,12558],{"class":250},[91,169897,169898],{"class":5339},"newline",[91,169900,296],{"class":153},[91,169902,7775],{"class":101},[91,169904,13837],{"class":250},[91,169906,31464],{"class":153},[91,169908,148234],{"class":5339},[91,169910,3862],{"class":250},[91,169912,169913,169916,169918,169921,169923],{"class":93,"line":1454},[91,169914,169915],{"class":250},"    writer ",[91,169917,296],{"class":153},[91,169919,169920],{"class":250}," csv.writer(",[91,169922,45435],{"class":5339},[91,169924,257],{"class":250},[91,169926,169927],{"class":93,"line":1736},[91,169928,169929],{"class":250},"    writer.writerows(students)\n",[21,169931,169932],{},"读取 CSV：",[82,169934,169936],{"className":30459,"code":169935,"language":30461,"meta":26,"style":26},"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",[88,169937,169938,169944,169948,169978,169992,170004],{"__ignoreMap":26},[91,169939,169940,169942],{"class":93,"line":94},[91,169941,30473],{"class":153},[91,169943,169800],{"class":250},[91,169945,169946],{"class":93,"line":38},[91,169947,2523],{"emptyLinePlaceholder":175},[91,169949,169950,169952,169954,169956,169958,169960,169962,169964,169966,169968,169970,169972,169974,169976],{"class":93,"line":1304},[91,169951,107914],{"class":153},[91,169953,146872],{"class":105},[91,169955,251],{"class":250},[91,169957,169881],{"class":101},[91,169959,12558],{"class":250},[91,169961,146882],{"class":101},[91,169963,12558],{"class":250},[91,169965,146887],{"class":5339},[91,169967,296],{"class":153},[91,169969,146892],{"class":101},[91,169971,13837],{"class":250},[91,169973,31464],{"class":153},[91,169975,148234],{"class":5339},[91,169977,3862],{"class":250},[91,169979,169980,169983,169985,169988,169990],{"class":93,"line":1319},[91,169981,169982],{"class":250},"    reader ",[91,169984,296],{"class":153},[91,169986,169987],{"class":250}," csv.reader(",[91,169989,45435],{"class":5339},[91,169991,257],{"class":250},[91,169993,169994,169996,169999,170001],{"class":93,"line":1325},[91,169995,3324],{"class":153},[91,169997,169998],{"class":250}," row ",[91,170000,26165],{"class":153},[91,170002,170003],{"class":250}," reader:\n",[91,170005,170006,170008],{"class":93,"line":1339},[91,170007,32532],{"class":105},[91,170009,170010],{"class":250},"(row)\n",[21,170012,170013],{},"使用字典写入：",[82,170015,170017],{"className":30459,"code":170016,"language":30461,"meta":26,"style":26},"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",[88,170018,170019,170025,170029,170037,170065,170093,170097,170101,170139,170160,170181,170186],{"__ignoreMap":26},[91,170020,170021,170023],{"class":93,"line":94},[91,170022,30473],{"class":153},[91,170024,169800],{"class":250},[91,170026,170027],{"class":93,"line":38},[91,170028,2523],{"emptyLinePlaceholder":175},[91,170030,170031,170033,170035],{"class":93,"line":1304},[91,170032,159797],{"class":250},[91,170034,296],{"class":153},[91,170036,55528],{"class":250},[91,170038,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057,170059,170061,170063],{"class":93,"line":1319},[91,170040,148466],{"class":250},[91,170042,62760],{"class":101},[91,170044,51518],{"class":250},[91,170046,149969],{"class":101},[91,170048,12558],{"class":250},[91,170050,69205],{"class":101},[91,170052,51518],{"class":250},[91,170054,899],{"class":105},[91,170056,12558],{"class":250},[91,170058,151553],{"class":101},[91,170060,51518],{"class":250},[91,170062,1238],{"class":105},[91,170064,5053],{"class":250},[91,170066,170067,170069,170071,170073,170075,170077,170079,170081,170083,170085,170087,170089,170091],{"class":93,"line":1325},[91,170068,148466],{"class":250},[91,170070,62760],{"class":101},[91,170072,51518],{"class":250},[91,170074,151017],{"class":101},[91,170076,12558],{"class":250},[91,170078,69205],{"class":101},[91,170080,51518],{"class":250},[91,170082,874],{"class":105},[91,170084,12558],{"class":250},[91,170086,151553],{"class":101},[91,170088,51518],{"class":250},[91,170090,1060],{"class":105},[91,170092,5053],{"class":250},[91,170094,170095],{"class":93,"line":1339},[91,170096,33327],{"class":250},[91,170098,170099],{"class":93,"line":1345},[91,170100,2523],{"emptyLinePlaceholder":175},[91,170102,170103,170105,170107,170109,170111,170113,170115,170117,170119,170121,170123,170125,170127,170129,170131,170133,170135,170137],{"class":93,"line":1436},[91,170104,107914],{"class":153},[91,170106,146872],{"class":105},[91,170108,251],{"class":250},[91,170110,169881],{"class":101},[91,170112,12558],{"class":250},[91,170114,152057],{"class":101},[91,170116,12558],{"class":250},[91,170118,146887],{"class":5339},[91,170120,296],{"class":153},[91,170122,146892],{"class":101},[91,170124,12558],{"class":250},[91,170126,169898],{"class":5339},[91,170128,296],{"class":153},[91,170130,7775],{"class":101},[91,170132,13837],{"class":250},[91,170134,31464],{"class":153},[91,170136,148234],{"class":5339},[91,170138,3862],{"class":250},[91,170140,170141,170144,170146,170148,170150,170152,170154,170156,170158],{"class":93,"line":1442},[91,170142,170143],{"class":250},"    fieldnames ",[91,170145,296],{"class":153},[91,170147,52307],{"class":250},[91,170149,62760],{"class":101},[91,170151,12558],{"class":250},[91,170153,69205],{"class":101},[91,170155,12558],{"class":250},[91,170157,151553],{"class":101},[91,170159,33327],{"class":250},[91,170161,170162,170164,170166,170169,170171,170173,170176,170178],{"class":93,"line":1454},[91,170163,169915],{"class":250},[91,170165,296],{"class":153},[91,170167,170168],{"class":250}," csv.DictWriter(",[91,170170,45435],{"class":5339},[91,170172,12558],{"class":250},[91,170174,170175],{"class":5339},"fieldnames",[91,170177,296],{"class":153},[91,170179,170180],{"class":250},"fieldnames)\n",[91,170182,170183],{"class":93,"line":1736},[91,170184,170185],{"class":250},"    writer.writeheader()\n",[91,170187,170188],{"class":93,"line":1741},[91,170189,169929],{"class":250},[190,170191,170193],{"id":170192},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[21,170195,123373],{},[14,170197,170198,170201,170204],{},[17,170199,170200],{},"读取文本文件。",[17,170202,170203],{},"统计每个单词出现次数。",[17,170205,170206],{},"输出出现次数最多的前 10 个单词。",[21,170208,10158],{},[82,170210,170212],{"className":30459,"code":170211,"language":30461,"meta":26,"style":26},"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",[88,170213,170214,170224,170228,170241,170257,170261,170271,170280,170284,170296,170316,170325,170329,170347,170351,170381,170385,170401],{"__ignoreMap":26},[91,170215,170216,170218,170220,170222],{"class":93,"line":94},[91,170217,30818],{"class":153},[91,170219,108392],{"class":250},[91,170221,30473],{"class":153},[91,170223,108397],{"class":250},[91,170225,170226],{"class":93,"line":38},[91,170227,2523],{"emptyLinePlaceholder":175},[91,170229,170230,170232,170234,170236,170239],{"class":93,"line":1304},[91,170231,168392],{"class":250},[91,170233,296],{"class":153},[91,170235,108626],{"class":250},[91,170237,170238],{"class":101},"\"article.txt\"",[91,170240,257],{"class":250},[91,170242,170243,170245,170247,170249,170251,170253,170255],{"class":93,"line":1319},[91,170244,168575],{"class":250},[91,170246,296],{"class":153},[91,170248,169452],{"class":250},[91,170250,146887],{"class":5339},[91,170252,296],{"class":153},[91,170254,146892],{"class":101},[91,170256,257],{"class":250},[91,170258,170259],{"class":93,"line":1325},[91,170260,2523],{"emptyLinePlaceholder":175},[91,170262,170263,170266,170268],{"class":93,"line":1339},[91,170264,170265],{"class":250},"words ",[91,170267,296],{"class":153},[91,170269,170270],{"class":250}," content.lower().split()\n",[91,170272,170273,170276,170278],{"class":93,"line":1345},[91,170274,170275],{"class":250},"counter ",[91,170277,296],{"class":153},[91,170279,87949],{"class":250},[91,170281,170282],{"class":93,"line":1436},[91,170283,2523],{"emptyLinePlaceholder":175},[91,170285,170286,170288,170291,170293],{"class":93,"line":1442},[91,170287,3148],{"class":153},[91,170289,170290],{"class":250}," word ",[91,170292,26165],{"class":153},[91,170294,170295],{"class":250}," words:\n",[91,170297,170298,170301,170303,170306,170309,170311,170314],{"class":93,"line":1454},[91,170299,170300],{"class":250},"    word ",[91,170302,296],{"class":153},[91,170304,170305],{"class":250}," word.strip(",[91,170307,170308],{"class":101},"\".,!?;:",[91,170310,156576],{"class":105},[91,170312,170313],{"class":101},"'()[]\"",[91,170315,257],{"class":250},[91,170317,170318,170320,170322],{"class":93,"line":1736},[91,170319,3224],{"class":153},[91,170321,39011],{"class":153},[91,170323,170324],{"class":250}," word:\n",[91,170326,170327],{"class":93,"line":1741},[91,170328,148593],{"class":153},[91,170330,170331,170334,170336,170339,170341,170343,170345],{"class":93,"line":1747},[91,170332,170333],{"class":250},"    counter[word] ",[91,170335,296],{"class":153},[91,170337,170338],{"class":250}," counter.get(word, ",[91,170340,440],{"class":105},[91,170342,13837],{"class":250},[91,170344,730],{"class":153},[91,170346,55780],{"class":105},[91,170348,170349],{"class":93,"line":1752},[91,170350,2523],{"emptyLinePlaceholder":175},[91,170352,170353,170356,170358,170360,170363,170365,170367,170369,170371,170373,170375,170377,170379],{"class":93,"line":1766},[91,170354,170355],{"class":250},"items ",[91,170357,296],{"class":153},[91,170359,163685],{"class":105},[91,170361,170362],{"class":250},"(counter.items(), ",[91,170364,154027],{"class":5339},[91,170366,154030],{"class":153},[91,170368,154033],{"class":250},[91,170370,466],{"class":105},[91,170372,112283],{"class":250},[91,170374,163609],{"class":5339},[91,170376,296],{"class":153},[91,170378,31557],{"class":105},[91,170380,257],{"class":250},[91,170382,170383],{"class":93,"line":1771},[91,170384,2523],{"emptyLinePlaceholder":175},[91,170386,170387,170389,170392,170394,170397,170399],{"class":93,"line":1777},[91,170388,3148],{"class":153},[91,170390,170391],{"class":250}," word, count ",[91,170393,26165],{"class":153},[91,170395,170396],{"class":250}," items[:",[91,170398,695],{"class":105},[91,170400,165836],{"class":250},[91,170402,170403,170405],{"class":93,"line":1798},[91,170404,31380],{"class":105},[91,170406,170407],{"class":250},"(word, count)\n",[190,170409,170411],{"id":170410},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[82,170413,170415],{"className":30459,"code":170414,"language":30461,"meta":26,"style":26},"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",[88,170416,170417,170423,170433,170437,170449,170453,170457,170465,170475,170481,170485,170515,170525,170529,170533,170541,170571,170595,170599,170603,170611,170640,170645],{"__ignoreMap":26},[91,170418,170419,170421],{"class":93,"line":94},[91,170420,30473],{"class":153},[91,170422,147172],{"class":250},[91,170424,170425,170427,170429,170431],{"class":93,"line":38},[91,170426,30818],{"class":153},[91,170428,108392],{"class":250},[91,170430,30473],{"class":153},[91,170432,108397],{"class":250},[91,170434,170435],{"class":93,"line":1304},[91,170436,2523],{"emptyLinePlaceholder":175},[91,170438,170439,170441,170443,170445,170447],{"class":93,"line":1319},[91,170440,151905],{"class":105},[91,170442,13687],{"class":153},[91,170444,108626],{"class":250},[91,170446,151912],{"class":101},[91,170448,257],{"class":250},[91,170450,170451],{"class":93,"line":1325},[91,170452,2523],{"emptyLinePlaceholder":175},[91,170454,170455],{"class":93,"line":1339},[91,170456,2523],{"emptyLinePlaceholder":175},[91,170458,170459,170461,170463],{"class":93,"line":1345},[91,170460,32028],{"class":153},[91,170462,151929],{"class":97},[91,170464,32034],{"class":250},[91,170466,170467,170469,170471,170473],{"class":93,"line":1436},[91,170468,3224],{"class":153},[91,170470,39011],{"class":153},[91,170472,151940],{"class":105},[91,170474,151943],{"class":250},[91,170476,170477,170479],{"class":93,"line":1442},[91,170478,14875],{"class":153},[91,170480,51919],{"class":250},[91,170482,170483],{"class":93,"line":1454},[91,170484,2523],{"emptyLinePlaceholder":175},[91,170486,170487,170489,170491,170493,170495,170497,170499,170501,170503,170505,170507,170509,170511,170513],{"class":93,"line":1736},[91,170488,34259],{"class":153},[91,170490,146872],{"class":105},[91,170492,251],{"class":250},[91,170494,151905],{"class":105},[91,170496,12558],{"class":250},[91,170498,146882],{"class":101},[91,170500,12558],{"class":250},[91,170502,146887],{"class":5339},[91,170504,296],{"class":153},[91,170506,146892],{"class":101},[91,170508,13837],{"class":250},[91,170510,31464],{"class":153},[91,170512,148234],{"class":5339},[91,170514,3862],{"class":250},[91,170516,170517,170519,170521,170523],{"class":93,"line":1741},[91,170518,14875],{"class":153},[91,170520,148245],{"class":250},[91,170522,45435],{"class":5339},[91,170524,257],{"class":250},[91,170526,170527],{"class":93,"line":1747},[91,170528,2523],{"emptyLinePlaceholder":175},[91,170530,170531],{"class":93,"line":1752},[91,170532,2523],{"emptyLinePlaceholder":175},[91,170534,170535,170537,170539],{"class":93,"line":1766},[91,170536,32028],{"class":153},[91,170538,152039],{"class":97},[91,170540,152042],{"class":250},[91,170542,170543,170545,170547,170549,170551,170553,170555,170557,170559,170561,170563,170565,170567,170569],{"class":93,"line":1771},[91,170544,34259],{"class":153},[91,170546,146872],{"class":105},[91,170548,251],{"class":250},[91,170550,151905],{"class":105},[91,170552,12558],{"class":250},[91,170554,152057],{"class":101},[91,170556,12558],{"class":250},[91,170558,146887],{"class":5339},[91,170560,296],{"class":153},[91,170562,146892],{"class":101},[91,170564,13837],{"class":250},[91,170566,31464],{"class":153},[91,170568,148234],{"class":5339},[91,170570,3862],{"class":250},[91,170572,170573,170575,170577,170579,170581,170583,170585,170587,170589,170591,170593],{"class":93,"line":1777},[91,170574,152078],{"class":250},[91,170576,45435],{"class":5339},[91,170578,12558],{"class":250},[91,170580,147218],{"class":5339},[91,170582,296],{"class":153},[91,170584,34068],{"class":105},[91,170586,12558],{"class":250},[91,170588,152093],{"class":5339},[91,170590,296],{"class":153},[91,170592,327],{"class":105},[91,170594,257],{"class":250},[91,170596,170597],{"class":93,"line":1798},[91,170598,2523],{"emptyLinePlaceholder":175},[91,170600,170601],{"class":93,"line":1803},[91,170602,2523],{"emptyLinePlaceholder":175},[91,170604,170605,170607,170609],{"class":93,"line":1817},[91,170606,159797],{"class":250},[91,170608,296],{"class":153},[91,170610,153123],{"class":250},[91,170612,170613,170616,170618,170620,170622,170624,170626,170628,170630,170632,170634,170636,170638],{"class":93,"line":1822},[91,170614,170615],{"class":250},"students.append({",[91,170617,62760],{"class":101},[91,170619,51518],{"class":250},[91,170621,149969],{"class":101},[91,170623,12558],{"class":250},[91,170625,69205],{"class":101},[91,170627,51518],{"class":250},[91,170629,899],{"class":105},[91,170631,12558],{"class":250},[91,170633,151553],{"class":101},[91,170635,51518],{"class":250},[91,170637,1238],{"class":105},[91,170639,165233],{"class":250},[91,170641,170642],{"class":93,"line":1851},[91,170643,170644],{"class":250},"save_students(students)\n",[91,170646,170647,170649,170651,170654],{"class":93,"line":1856},[91,170648,30496],{"class":105},[91,170650,251],{"class":250},[91,170652,170653],{"class":101},"\"保存成功\"",[91,170655,257],{"class":250},[190,170657,170659],{"id":170658},"_814-易错点","8.14 易错点",[14,170661,170662,170666,170672,170677,170684,170691],{},[17,170663,170664,168925],{},[88,170665,1044],{},[17,170667,170668,170669,28504],{},"读写中文要指定 ",[88,170670,170671],{},"encoding=\"utf-8\"",[17,170673,170674,170675,28504],{},"打开文件后要关闭，推荐使用 ",[88,170676,107914],{},[17,170678,170679,170680,170683],{},"读取大文件不要直接 ",[88,170681,170682],{},"read()"," 全部内容。",[17,170685,170686,170687,170690],{},"Windows 写 CSV 时建议加 ",[88,170688,170689],{},"newline=\"\"","，避免空行。",[17,170692,170693],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[190,170695,170697],{"id":170696},"_815-本章练习","8.15 本章练习",[14,170699,170700,170707,170712,170715,170718],{},[17,170701,170702,170703,170706],{},"写入一个 ",[88,170704,170705],{},"students.txt","，每行保存一个学生姓名。",[17,170708,104436,170709,170711],{},[88,170710,170705],{}," 并输出所有学生。",[17,170713,170714],{},"把学生列表保存为 JSON 文件。",[17,170716,170717],{},"从 JSON 文件读取学生数据，计算平均分。",[17,170719,170720,170721,170724,170725,170728],{},"写一个日志函数 ",[88,170722,170723],{},"write_log(message)","，每次调用向 ",[88,170726,170727],{},"app.log"," 追加一行。",[168,170730,170731],{},"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":26,"searchDepth":38,"depth":38,"links":170733},[170734,170735,170739,170740,170746,170747,170748,170749,170750,170751,170752,170753,170754,170755,170756],{"id":168245,"depth":38,"text":168246},{"id":168286,"depth":38,"text":168287,"children":170736},[170737,170738],{"id":168290,"depth":1304,"text":168291},{"id":168324,"depth":1304,"text":168325},{"id":168438,"depth":38,"text":168439},{"id":168531,"depth":38,"text":168532,"children":170741},[170742,170743,170744,170745],{"id":168535,"depth":1304,"text":168536},{"id":168622,"depth":1304,"text":168623},{"id":168692,"depth":1304,"text":168693},{"id":168786,"depth":1304,"text":168787},{"id":168856,"depth":38,"text":168857},{"id":168919,"depth":38,"text":168920},{"id":169080,"depth":38,"text":169081},{"id":169143,"depth":38,"text":169144},{"id":169259,"depth":38,"text":169260},{"id":169469,"depth":38,"text":169470},{"id":169781,"depth":38,"text":169782},{"id":170192,"depth":38,"text":170193},{"id":170410,"depth":38,"text":170411},{"id":170658,"depth":38,"text":170659},{"id":170696,"depth":38,"text":170697},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168237,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170763,"title":170764,"body":170765,"description":23500,"extension":173,"meta":172951,"navigation":175,"path":172952,"seo":172953,"stem":172954,"__hash__":172955},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170766,"toc":172918},[170767,170770,170774,170777,170780,170872,170874,170893,170898,170902,170905,170908,170937,170944,170947,170951,170954,170983,170985,171037,171043,171096,171100,171198,171201,171268,171272,171329,171331,171337,171341,171346,171352,171443,171448,171452,171455,171533,171536,171574,171578,171696,171699,171703,171706,171751,171754,171758,171763,171769,171819,171822,171853,171857,171861,171891,171895,171930,171934,171969,172009,172013,172029,172032,172036,172040,172119,172123,172164,172168,172223,172227,172261,172265,172295,172304,172311,172317,172374,172377,172385,172388,172392,172399,172402,172408,172411,172428,172433,172437,172443,172456,172459,172496,172499,172510,172513,172527,172530,172544,172548,172555,172588,172591,172593,172599,172602,172606,172608,172614,172619,172792,172796,172859,172863,172887,172891,172915],[10,170768,170764],{"id":170769},"_9-异常模块与包",[190,170771,170773],{"id":170772},"_91-什么是异常","9.1 什么是异常",[21,170775,170776],{},"异常是程序运行过程中出现的错误。",[21,170778,170779],{},"常见异常：",[386,170781,170782,170791],{},[389,170783,170784],{},[392,170785,170786,170789],{},[395,170787,170788],{},"异常",[395,170790,25991],{},[433,170792,170793,170803,170813,170822,170832,170842,170852,170862],{},[392,170794,170795,170800],{},[438,170796,170797],{},[88,170798,170799],{},"NameError",[438,170801,170802],{},"使用了未定义变量",[392,170804,170805,170810],{},[438,170806,170807],{},[88,170808,170809],{},"TypeError",[438,170811,170812],{},"类型不匹配",[392,170814,170815,170819],{},[438,170816,170817],{},[88,170818,154915],{},[438,170820,170821],{},"值不合法",[392,170823,170824,170829],{},[438,170825,170826],{},[88,170827,170828],{},"IndexError",[438,170830,170831],{},"列表索引越界",[392,170833,170834,170839],{},[438,170835,170836],{},[88,170837,170838],{},"KeyError",[438,170840,170841],{},"字典 key 不存在",[392,170843,170844,170849],{},[438,170845,170846],{},[88,170847,170848],{},"FileNotFoundError",[438,170850,170851],{},"文件不存在",[392,170853,170854,170859],{},[438,170855,170856],{},[88,170857,170858],{},"ZeroDivisionError",[438,170860,170861],{},"除数为 0",[392,170863,170864,170869],{},[438,170865,170866],{},[88,170867,170868],{},"ImportError",[438,170870,170871],{},"导入失败",[21,170873,15258],{},[82,170875,170877],{"className":30459,"code":170876,"language":30461,"meta":26,"style":26},"num = int(\"abc\")\n",[88,170878,170879],{"__ignoreMap":26},[91,170880,170881,170883,170885,170887,170889,170891],{"class":93,"line":94},[91,170882,155868],{"class":250},[91,170884,296],{"class":153},[91,170886,2505],{"class":105},[91,170888,251],{"class":250},[91,170890,155961],{"class":101},[91,170892,257],{"class":250},[21,170894,170895,170896,28504],{},"会触发 ",[88,170897,154915],{},[190,170899,170901],{"id":170900},"_92-为什么要处理异常","9.2 为什么要处理异常",[21,170903,170904],{},"如果不处理异常，程序会直接终止。",[21,170906,170907],{},"例如用户输入年龄：",[82,170909,170911],{"className":30459,"code":170910,"language":30461,"meta":26,"style":26},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[88,170912,170913,170931],{"__ignoreMap":26},[91,170914,170915,170917,170919,170921,170923,170925,170927,170929],{"class":93,"line":94},[91,170916,146627],{"class":250},[91,170918,296],{"class":153},[91,170920,2505],{"class":105},[91,170922,251],{"class":250},[91,170924,53902],{"class":105},[91,170926,251],{"class":250},[91,170928,152475],{"class":101},[91,170930,30578],{"class":250},[91,170932,170933,170935],{"class":93,"line":38},[91,170934,30496],{"class":105},[91,170936,155842],{"class":250},[21,170938,170939,170940,170943],{},"用户输入 ",[88,170941,170942],{},"abc","，程序就会报错退出。",[21,170945,170946],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[190,170948,170950],{"id":170949},"_93-try-except","9.3 try except",[21,170952,170953],{},"基础语法：",[82,170955,170957],{"className":30459,"code":170956,"language":30461,"meta":26,"style":26},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[88,170958,170959,170966,170971,170978],{"__ignoreMap":26},[91,170960,170961,170964],{"class":93,"line":94},[91,170962,170963],{"class":153},"try",[91,170965,3862],{"class":250},[91,170967,170968],{"class":93,"line":38},[91,170969,170970],{"class":250},"    可能出错的代码\n",[91,170972,170973,170976],{"class":93,"line":1304},[91,170974,170975],{"class":153},"except",[91,170977,3862],{"class":250},[91,170979,170980],{"class":93,"line":1319},[91,170981,170982],{"class":250},"    出错后的处理代码\n",[21,170984,15258],{},[82,170986,170988],{"className":30459,"code":170987,"language":30461,"meta":26,"style":26},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[88,170989,170990,170996,171014,171020,171026],{"__ignoreMap":26},[91,170991,170992,170994],{"class":93,"line":94},[91,170993,170963],{"class":153},[91,170995,3862],{"class":250},[91,170997,170998,171000,171002,171004,171006,171008,171010,171012],{"class":93,"line":38},[91,170999,152467],{"class":250},[91,171001,296],{"class":153},[91,171003,2505],{"class":105},[91,171005,251],{"class":250},[91,171007,53902],{"class":105},[91,171009,251],{"class":250},[91,171011,152475],{"class":101},[91,171013,30578],{"class":250},[91,171015,171016,171018],{"class":93,"line":1304},[91,171017,31380],{"class":105},[91,171019,155842],{"class":250},[91,171021,171022,171024],{"class":93,"line":1319},[91,171023,170975],{"class":153},[91,171025,3862],{"class":250},[91,171027,171028,171030,171032,171035],{"class":93,"line":1325},[91,171029,31380],{"class":105},[91,171031,251],{"class":250},[91,171033,171034],{"class":101},"\"年龄必须是数字\"",[91,171036,257],{"class":250},[21,171038,171039,171040,171042],{},"不建议裸写 ",[88,171041,170975],{},"，最好指定异常类型。",[82,171044,171046],{"className":30459,"code":171045,"language":30461,"meta":26,"style":26},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[88,171047,171048,171054,171072,171078,171086],{"__ignoreMap":26},[91,171049,171050,171052],{"class":93,"line":94},[91,171051,170963],{"class":153},[91,171053,3862],{"class":250},[91,171055,171056,171058,171060,171062,171064,171066,171068,171070],{"class":93,"line":38},[91,171057,152467],{"class":250},[91,171059,296],{"class":153},[91,171061,2505],{"class":105},[91,171063,251],{"class":250},[91,171065,53902],{"class":105},[91,171067,251],{"class":250},[91,171069,152475],{"class":101},[91,171071,30578],{"class":250},[91,171073,171074,171076],{"class":93,"line":1304},[91,171075,31380],{"class":105},[91,171077,155842],{"class":250},[91,171079,171080,171082,171084],{"class":93,"line":1319},[91,171081,170975],{"class":153},[91,171083,152307],{"class":105},[91,171085,3862],{"class":250},[91,171087,171088,171090,171092,171094],{"class":93,"line":1325},[91,171089,31380],{"class":105},[91,171091,251],{"class":250},[91,171093,171034],{"class":101},[91,171095,257],{"class":250},[190,171097,171099],{"id":171098},"_94-捕获多个异常","9.4 捕获多个异常",[82,171101,171103],{"className":30459,"code":171102,"language":30461,"meta":26,"style":26},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[88,171104,171105,171111,171132,171152,171159,171167,171178,171187],{"__ignoreMap":26},[91,171106,171107,171109],{"class":93,"line":94},[91,171108,170963],{"class":153},[91,171110,3862],{"class":250},[91,171112,171113,171116,171118,171120,171122,171124,171126,171128,171130],{"class":93,"line":38},[91,171114,171115],{"class":250},"    nums ",[91,171117,296],{"class":153},[91,171119,52307],{"class":250},[91,171121,466],{"class":105},[91,171123,12558],{"class":250},[91,171125,327],{"class":105},[91,171127,12558],{"class":250},[91,171129,321],{"class":105},[91,171131,33327],{"class":250},[91,171133,171134,171137,171139,171141,171143,171145,171147,171150],{"class":93,"line":1304},[91,171135,171136],{"class":250},"    index ",[91,171138,296],{"class":153},[91,171140,2505],{"class":105},[91,171142,251],{"class":250},[91,171144,53902],{"class":105},[91,171146,251],{"class":250},[91,171148,171149],{"class":101},"\"请输入索引:\"",[91,171151,30578],{"class":250},[91,171153,171154,171156],{"class":93,"line":1319},[91,171155,31380],{"class":105},[91,171157,171158],{"class":250},"(nums[index])\n",[91,171160,171161,171163,171165],{"class":93,"line":1325},[91,171162,170975],{"class":153},[91,171164,152307],{"class":105},[91,171166,3862],{"class":250},[91,171168,171169,171171,171173,171176],{"class":93,"line":1339},[91,171170,31380],{"class":105},[91,171172,251],{"class":250},[91,171174,171175],{"class":101},"\"索引必须是整数\"",[91,171177,257],{"class":250},[91,171179,171180,171182,171185],{"class":93,"line":1345},[91,171181,170975],{"class":153},[91,171183,171184],{"class":105}," IndexError",[91,171186,3862],{"class":250},[91,171188,171189,171191,171193,171196],{"class":93,"line":1436},[91,171190,31380],{"class":105},[91,171192,251],{"class":250},[91,171194,171195],{"class":101},"\"索引越界\"",[91,171197,257],{"class":250},[21,171199,171200],{},"多个异常使用相同处理逻辑：",[82,171202,171204],{"className":30459,"code":171203,"language":30461,"meta":26,"style":26},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[88,171205,171206,171212,171230,171243,171257],{"__ignoreMap":26},[91,171207,171208,171210],{"class":93,"line":94},[91,171209,170963],{"class":153},[91,171211,3862],{"class":250},[91,171213,171214,171216,171218,171220,171222,171224,171226,171228],{"class":93,"line":38},[91,171215,45674],{"class":250},[91,171217,296],{"class":153},[91,171219,2505],{"class":105},[91,171221,251],{"class":250},[91,171223,53902],{"class":105},[91,171225,251],{"class":250},[91,171227,155877],{"class":101},[91,171229,30578],{"class":250},[91,171231,171232,171234,171236,171238,171240],{"class":93,"line":1304},[91,171233,31380],{"class":105},[91,171235,251],{"class":250},[91,171237,695],{"class":105},[91,171239,156127],{"class":153},[91,171241,171242],{"class":250}," num)\n",[91,171244,171245,171247,171249,171251,171253,171255],{"class":93,"line":1319},[91,171246,170975],{"class":153},[91,171248,1782],{"class":250},[91,171250,154915],{"class":105},[91,171252,12558],{"class":250},[91,171254,170858],{"class":105},[91,171256,30867],{"class":250},[91,171258,171259,171261,171263,171266],{"class":93,"line":1325},[91,171260,31380],{"class":105},[91,171262,251],{"class":250},[91,171264,171265],{"class":101},"\"输入不合法\"",[91,171267,257],{"class":250},[190,171269,171271],{"id":171270},"_95-获取异常信息","9.5 获取异常信息",[82,171273,171275],{"className":30459,"code":171274,"language":30461,"meta":26,"style":26},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[88,171276,171277,171283,171297,171308],{"__ignoreMap":26},[91,171278,171279,171281],{"class":93,"line":94},[91,171280,170963],{"class":153},[91,171282,3862],{"class":250},[91,171284,171285,171287,171289,171291,171293,171295],{"class":93,"line":38},[91,171286,45674],{"class":250},[91,171288,296],{"class":153},[91,171290,2505],{"class":105},[91,171292,251],{"class":250},[91,171294,155961],{"class":101},[91,171296,257],{"class":250},[91,171298,171299,171301,171303,171305],{"class":93,"line":1304},[91,171300,170975],{"class":153},[91,171302,152307],{"class":105},[91,171304,64685],{"class":153},[91,171306,171307],{"class":250}," e:\n",[91,171309,171310,171312,171314,171316,171319,171321,171323,171325,171327],{"class":93,"line":1319},[91,171311,31380],{"class":105},[91,171313,251],{"class":250},[91,171315,302],{"class":153},[91,171317,171318],{"class":101},"\"出错了:",[91,171320,1145],{"class":105},[91,171322,324],{"class":250},[91,171324,1195],{"class":105},[91,171326,500],{"class":101},[91,171328,257],{"class":250},[21,171330,146538],{},[82,171332,171335],{"className":171333,"code":171334,"language":5310,"meta":26},[5308],"出错了:invalid literal for int() with base 10: 'abc'\n",[88,171336,171334],{"__ignoreMap":26},[190,171338,171340],{"id":171339},"_96-else和finally","9.6 else和finally",[21,171342,171343,171345],{},[88,171344,1825],{},"：没有异常时执行。",[21,171347,171348,171351],{},[88,171349,171350],{},"finally","：无论是否异常都会执行。",[82,171353,171355],{"className":30459,"code":171354,"language":30461,"meta":26,"style":26},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[88,171356,171357,171363,171381,171389,171399,171405,171426,171432],{"__ignoreMap":26},[91,171358,171359,171361],{"class":93,"line":94},[91,171360,170963],{"class":153},[91,171362,3862],{"class":250},[91,171364,171365,171367,171369,171371,171373,171375,171377,171379],{"class":93,"line":38},[91,171366,45674],{"class":250},[91,171368,296],{"class":153},[91,171370,2505],{"class":105},[91,171372,251],{"class":250},[91,171374,53902],{"class":105},[91,171376,251],{"class":250},[91,171378,155877],{"class":101},[91,171380,30578],{"class":250},[91,171382,171383,171385,171387],{"class":93,"line":1304},[91,171384,170975],{"class":153},[91,171386,152307],{"class":105},[91,171388,3862],{"class":250},[91,171390,171391,171393,171395,171397],{"class":93,"line":1319},[91,171392,31380],{"class":105},[91,171394,251],{"class":250},[91,171396,153295],{"class":101},[91,171398,257],{"class":250},[91,171400,171401,171403],{"class":93,"line":1325},[91,171402,1825],{"class":153},[91,171404,3862],{"class":250},[91,171406,171407,171409,171411,171413,171416,171418,171420,171422,171424],{"class":93,"line":1339},[91,171408,31380],{"class":105},[91,171410,251],{"class":250},[91,171412,302],{"class":153},[91,171414,171415],{"class":101},"\"输入正确:",[91,171417,1145],{"class":105},[91,171419,1789],{"class":250},[91,171421,1195],{"class":105},[91,171423,500],{"class":101},[91,171425,257],{"class":250},[91,171427,171428,171430],{"class":93,"line":1345},[91,171429,171350],{"class":153},[91,171431,3862],{"class":250},[91,171433,171434,171436,171438,171441],{"class":93,"line":1436},[91,171435,31380],{"class":105},[91,171437,251],{"class":250},[91,171439,171440],{"class":101},"\"程序结束\"",[91,171442,257],{"class":250},[21,171444,171445,171447],{},[88,171446,171350],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[190,171449,171451],{"id":171450},"_97-抛出异常","9.7 抛出异常",[21,171453,171454],{},"程序可以主动抛出异常。",[82,171456,171458],{"className":30459,"code":171457,"language":30461,"meta":26,"style":26},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[88,171459,171460,171469,171481,171494,171514,171518,171522],{"__ignoreMap":26},[91,171461,171462,171464,171467],{"class":93,"line":94},[91,171463,32028],{"class":153},[91,171465,171466],{"class":97}," set_age",[91,171468,161496],{"class":250},[91,171470,171471,171473,171475,171477,171479],{"class":93,"line":38},[91,171472,3224],{"class":153},[91,171474,15830],{"class":250},[91,171476,1159],{"class":153},[91,171478,4216],{"class":105},[91,171480,3862],{"class":250},[91,171482,171483,171485,171487,171489,171492],{"class":93,"line":1304},[91,171484,103513],{"class":153},[91,171486,152307],{"class":105},[91,171488,251],{"class":250},[91,171490,171491],{"class":101},"\"年龄不能为负数\"",[91,171493,257],{"class":250},[91,171495,171496,171498,171500,171502,171504,171506,171508,171510,171512],{"class":93,"line":1319},[91,171497,31380],{"class":105},[91,171499,251],{"class":250},[91,171501,302],{"class":153},[91,171503,162064],{"class":101},[91,171505,1145],{"class":105},[91,171507,70302],{"class":250},[91,171509,1195],{"class":105},[91,171511,500],{"class":101},[91,171513,257],{"class":250},[91,171515,171516],{"class":93,"line":1325},[91,171517,2523],{"emptyLinePlaceholder":175},[91,171519,171520],{"class":93,"line":1339},[91,171521,2523],{"emptyLinePlaceholder":175},[91,171523,171524,171527,171529,171531],{"class":93,"line":1345},[91,171525,171526],{"class":250},"set_age(",[91,171528,781],{"class":153},[91,171530,466],{"class":105},[91,171532,257],{"class":250},[21,171534,171535],{},"调用者可以捕获：",[82,171537,171539],{"className":30459,"code":171538,"language":30461,"meta":26,"style":26},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[88,171540,171541,171547,171558,171568],{"__ignoreMap":26},[91,171542,171543,171545],{"class":93,"line":94},[91,171544,170963],{"class":153},[91,171546,3862],{"class":250},[91,171548,171549,171552,171554,171556],{"class":93,"line":38},[91,171550,171551],{"class":250},"    set_age(",[91,171553,781],{"class":153},[91,171555,466],{"class":105},[91,171557,257],{"class":250},[91,171559,171560,171562,171564,171566],{"class":93,"line":1304},[91,171561,170975],{"class":153},[91,171563,152307],{"class":105},[91,171565,64685],{"class":153},[91,171567,171307],{"class":250},[91,171569,171570,171572],{"class":93,"line":1319},[91,171571,31380],{"class":105},[91,171573,67080],{"class":250},[190,171575,171577],{"id":171576},"_98-自定义异常","9.8 自定义异常",[82,171579,171581],{"className":30459,"code":171580,"language":30461,"meta":26,"style":26},"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",[88,171582,171583,171597,171601,171605,171609,171617,171627,171638,171648,171652,171656,171662,171679,171690],{"__ignoreMap":26},[91,171584,171585,171587,171590,171592,171595],{"class":93,"line":94},[91,171586,14817],{"class":153},[91,171588,171589],{"class":97}," BalanceNotEnoughError",[91,171591,251],{"class":250},[91,171593,171594],{"class":105},"Exception",[91,171596,30867],{"class":250},[91,171598,171599],{"class":93,"line":38},[91,171600,149618],{"class":153},[91,171602,171603],{"class":93,"line":1304},[91,171604,2523],{"emptyLinePlaceholder":175},[91,171606,171607],{"class":93,"line":1319},[91,171608,2523],{"emptyLinePlaceholder":175},[91,171610,171611,171613,171615],{"class":93,"line":1325},[91,171612,32028],{"class":153},[91,171614,150267],{"class":97},[91,171616,162893],{"class":250},[91,171618,171619,171621,171623,171625],{"class":93,"line":1339},[91,171620,3224],{"class":153},[91,171622,150223],{"class":250},[91,171624,1209],{"class":153},[91,171626,162670],{"class":250},[91,171628,171629,171631,171634,171636],{"class":93,"line":1345},[91,171630,103513],{"class":153},[91,171632,171633],{"class":250}," BalanceNotEnoughError(",[91,171635,150318],{"class":101},[91,171637,257],{"class":250},[91,171639,171640,171642,171644,171646],{"class":93,"line":1436},[91,171641,4213],{"class":153},[91,171643,162900],{"class":250},[91,171645,781],{"class":153},[91,171647,150256],{"class":250},[91,171649,171650],{"class":93,"line":1442},[91,171651,2523],{"emptyLinePlaceholder":175},[91,171653,171654],{"class":93,"line":1454},[91,171655,2523],{"emptyLinePlaceholder":175},[91,171657,171658,171660],{"class":93,"line":1736},[91,171659,170963],{"class":153},[91,171661,3862],{"class":250},[91,171663,171664,171666,171668,171671,171673,171675,171677],{"class":93,"line":1741},[91,171665,162571],{"class":250},[91,171667,296],{"class":153},[91,171669,171670],{"class":250}," withdraw(",[91,171672,560],{"class":105},[91,171674,12558],{"class":250},[91,171676,1846],{"class":105},[91,171678,257],{"class":250},[91,171680,171681,171683,171686,171688],{"class":93,"line":1747},[91,171682,170975],{"class":153},[91,171684,171685],{"class":250}," BalanceNotEnoughError ",[91,171687,31464],{"class":153},[91,171689,171307],{"class":250},[91,171691,171692,171694],{"class":93,"line":1752},[91,171693,31380],{"class":105},[91,171695,67080],{"class":250},[21,171697,171698],{},"入门阶段大多数情况使用内置异常即可。",[190,171700,171702],{"id":171701},"_99-traceback","9.9 traceback",[21,171704,171705],{},"调试时可以输出完整异常堆栈。",[82,171707,171709],{"className":30459,"code":171708,"language":30461,"meta":26,"style":26},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[88,171710,171711,171718,171722,171728,171738,171746],{"__ignoreMap":26},[91,171712,171713,171715],{"class":93,"line":94},[91,171714,30473],{"class":153},[91,171716,171717],{"class":250}," traceback\n",[91,171719,171720],{"class":93,"line":38},[91,171721,2523],{"emptyLinePlaceholder":175},[91,171723,171724,171726],{"class":93,"line":1304},[91,171725,170963],{"class":153},[91,171727,3862],{"class":250},[91,171729,171730,171732,171734,171736],{"class":93,"line":1319},[91,171731,2108],{"class":105},[91,171733,251],{"class":250},[91,171735,155961],{"class":101},[91,171737,257],{"class":250},[91,171739,171740,171742,171744],{"class":93,"line":1325},[91,171741,170975],{"class":153},[91,171743,152307],{"class":105},[91,171745,3862],{"class":250},[91,171747,171748],{"class":93,"line":1339},[91,171749,171750],{"class":250},"    traceback.print_exc()\n",[21,171752,171753],{},"日志系统中常把异常堆栈记录到文件。",[190,171755,171757],{"id":171756},"_910-什么是模块","9.10 什么是模块",[21,171759,171760,171761,126064],{},"模块就是一个 ",[88,171762,146433],{},[21,171764,171765,171766,24741],{},"例如创建 ",[88,171767,171768],{},"my_math.py",[82,171770,171772],{"className":30459,"code":171771,"language":30461,"meta":26,"style":26},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[88,171773,171774,171782,171792,171796,171800,171809],{"__ignoreMap":26},[91,171775,171776,171778,171780],{"class":93,"line":94},[91,171777,32028],{"class":153},[91,171779,5332],{"class":97},[91,171781,151174],{"class":250},[91,171783,171784,171786,171788,171790],{"class":93,"line":38},[91,171785,4213],{"class":153},[91,171787,10992],{"class":250},[91,171789,730],{"class":153},[91,171791,151185],{"class":250},[91,171793,171794],{"class":93,"line":1304},[91,171795,2523],{"emptyLinePlaceholder":175},[91,171797,171798],{"class":93,"line":1319},[91,171799,2523],{"emptyLinePlaceholder":175},[91,171801,171802,171804,171807],{"class":93,"line":1325},[91,171803,32028],{"class":153},[91,171805,171806],{"class":97}," sub",[91,171808,151174],{"class":250},[91,171810,171811,171813,171815,171817],{"class":93,"line":1339},[91,171812,4213],{"class":153},[91,171814,10992],{"class":250},[91,171816,781],{"class":153},[91,171818,151185],{"class":250},[21,171820,171821],{},"在另一个文件中导入：",[82,171823,171825],{"className":30459,"code":171824,"language":30461,"meta":26,"style":26},"import my_math\n\nprint(my_math.add(1, 2))\n",[88,171826,171827,171834,171838],{"__ignoreMap":26},[91,171828,171829,171831],{"class":93,"line":94},[91,171830,30473],{"class":153},[91,171832,171833],{"class":250}," my_math\n",[91,171835,171836],{"class":93,"line":38},[91,171837,2523],{"emptyLinePlaceholder":175},[91,171839,171840,171842,171845,171847,171849,171851],{"class":93,"line":1304},[91,171841,30496],{"class":105},[91,171843,171844],{"class":250},"(my_math.add(",[91,171846,466],{"class":105},[91,171848,12558],{"class":250},[91,171850,327],{"class":105},[91,171852,30578],{"class":250},[190,171854,171856],{"id":171855},"_911-import导入","9.11 import导入",[217,171858,171860],{"id":171859},"_9111-导入模块","9.11.1 导入模块",[82,171862,171864],{"className":30459,"code":171863,"language":30461,"meta":26,"style":26},"import random\n\nprint(random.randint(1, 10))\n",[88,171865,171866,171872,171876],{"__ignoreMap":26},[91,171867,171868,171870],{"class":93,"line":94},[91,171869,30473],{"class":153},[91,171871,45409],{"class":250},[91,171873,171874],{"class":93,"line":38},[91,171875,2523],{"emptyLinePlaceholder":175},[91,171877,171878,171880,171883,171885,171887,171889],{"class":93,"line":1304},[91,171879,30496],{"class":105},[91,171881,171882],{"class":250},"(random.randint(",[91,171884,466],{"class":105},[91,171886,12558],{"class":250},[91,171888,695],{"class":105},[91,171890,30578],{"class":250},[217,171892,171894],{"id":171893},"_9112-导入指定内容","9.11.2 导入指定内容",[82,171896,171898],{"className":30459,"code":171897,"language":30461,"meta":26,"style":26},"from random import randint\n\nprint(randint(1, 10))\n",[88,171899,171900,171911,171915],{"__ignoreMap":26},[91,171901,171902,171904,171906,171908],{"class":93,"line":94},[91,171903,30818],{"class":153},[91,171905,57877],{"class":250},[91,171907,30473],{"class":153},[91,171909,171910],{"class":250}," randint\n",[91,171912,171913],{"class":93,"line":38},[91,171914,2523],{"emptyLinePlaceholder":175},[91,171916,171917,171919,171922,171924,171926,171928],{"class":93,"line":1304},[91,171918,30496],{"class":105},[91,171920,171921],{"class":250},"(randint(",[91,171923,466],{"class":105},[91,171925,12558],{"class":250},[91,171927,695],{"class":105},[91,171929,30578],{"class":250},[217,171931,171933],{"id":171932},"_9113-起别名","9.11.3 起别名",[82,171935,171937],{"className":30459,"code":171936,"language":30461,"meta":26,"style":26},"import random as rd\n\nprint(rd.randint(1, 10))\n",[88,171938,171939,171950,171954],{"__ignoreMap":26},[91,171940,171941,171943,171945,171947],{"class":93,"line":94},[91,171942,30473],{"class":153},[91,171944,57877],{"class":250},[91,171946,31464],{"class":153},[91,171948,171949],{"class":250}," rd\n",[91,171951,171952],{"class":93,"line":38},[91,171953,2523],{"emptyLinePlaceholder":175},[91,171955,171956,171958,171961,171963,171965,171967],{"class":93,"line":1304},[91,171957,30496],{"class":105},[91,171959,171960],{"class":250},"(rd.randint(",[91,171962,466],{"class":105},[91,171964,12558],{"class":250},[91,171966,695],{"class":105},[91,171968,30578],{"class":250},[82,171970,171972],{"className":30459,"code":171971,"language":30461,"meta":26,"style":26},"from random import randint as rint\n\nprint(rint(1, 10))\n",[88,171973,171974,171990,171994],{"__ignoreMap":26},[91,171975,171976,171978,171980,171982,171985,171987],{"class":93,"line":94},[91,171977,30818],{"class":153},[91,171979,57877],{"class":250},[91,171981,30473],{"class":153},[91,171983,171984],{"class":250}," randint ",[91,171986,31464],{"class":153},[91,171988,171989],{"class":250}," rint\n",[91,171991,171992],{"class":93,"line":38},[91,171993,2523],{"emptyLinePlaceholder":175},[91,171995,171996,171998,172001,172003,172005,172007],{"class":93,"line":1304},[91,171997,30496],{"class":105},[91,171999,172000],{"class":250},"(rint(",[91,172002,466],{"class":105},[91,172004,12558],{"class":250},[91,172006,695],{"class":105},[91,172008,30578],{"class":250},[217,172010,172012],{"id":172011},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[82,172014,172016],{"className":30459,"code":172015,"language":30461,"meta":26,"style":26},"from random import *\n",[88,172017,172018],{"__ignoreMap":26},[91,172019,172020,172022,172024,172026],{"class":93,"line":94},[91,172021,30818],{"class":153},[91,172023,57877],{"class":250},[91,172025,30473],{"class":153},[91,172027,172028],{"class":153}," *\n",[21,172030,172031],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[190,172033,172035],{"id":172034},"_912-常用内置模块","9.12 常用内置模块",[217,172037,172039],{"id":172038},"_9121-random","9.12.1 random",[82,172041,172043],{"className":30459,"code":172042,"language":30461,"meta":26,"style":26},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[88,172044,172045,172051,172055,172069,172088],{"__ignoreMap":26},[91,172046,172047,172049],{"class":93,"line":94},[91,172048,30473],{"class":153},[91,172050,45409],{"class":250},[91,172052,172053],{"class":93,"line":38},[91,172054,2523],{"emptyLinePlaceholder":175},[91,172056,172057,172059,172061,172063,172065,172067],{"class":93,"line":1304},[91,172058,30496],{"class":105},[91,172060,171882],{"class":250},[91,172062,466],{"class":105},[91,172064,12558],{"class":250},[91,172066,695],{"class":105},[91,172068,30578],{"class":250},[91,172070,172071,172073,172076,172078,172080,172082,172084,172086],{"class":93,"line":1319},[91,172072,30496],{"class":105},[91,172074,172075],{"class":250},"(random.choice([",[91,172077,149969],{"class":101},[91,172079,12558],{"class":250},[91,172081,151017],{"class":101},[91,172083,12558],{"class":250},[91,172085,159812],{"class":101},[91,172087,33224],{"class":250},[91,172089,172090,172092,172095,172097,172099,172101,172103,172105,172107,172109,172111,172113,172115,172117],{"class":93,"line":1325},[91,172091,30496],{"class":105},[91,172093,172094],{"class":250},"(random.sample([",[91,172096,466],{"class":105},[91,172098,12558],{"class":250},[91,172100,327],{"class":105},[91,172102,12558],{"class":250},[91,172104,321],{"class":105},[91,172106,12558],{"class":250},[91,172108,542],{"class":105},[91,172110,12558],{"class":250},[91,172112,568],{"class":105},[91,172114,112283],{"class":250},[91,172116,327],{"class":105},[91,172118,30578],{"class":250},[217,172120,172122],{"id":172121},"_9122-time","9.12.2 time",[82,172124,172126],{"className":30459,"code":172125,"language":30461,"meta":26,"style":26},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[88,172127,172128,172134,172138,172145,172153],{"__ignoreMap":26},[91,172129,172130,172132],{"class":93,"line":94},[91,172131,30473],{"class":153},[91,172133,31910],{"class":250},[91,172135,172136],{"class":93,"line":38},[91,172137,2523],{"emptyLinePlaceholder":175},[91,172139,172140,172142],{"class":93,"line":1304},[91,172141,30496],{"class":105},[91,172143,172144],{"class":250},"(time.time())\n",[91,172146,172147,172149,172151],{"class":93,"line":1319},[91,172148,95152],{"class":250},[91,172150,466],{"class":105},[91,172152,257],{"class":250},[91,172154,172155,172157,172159,172162],{"class":93,"line":1325},[91,172156,30496],{"class":105},[91,172158,251],{"class":250},[91,172160,172161],{"class":101},"\"1秒后执行\"",[91,172163,257],{"class":250},[217,172165,172167],{"id":172166},"_9123-datetime","9.12.3 datetime",[82,172169,172171],{"className":30459,"code":172170,"language":30461,"meta":26,"style":26},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[88,172172,172173,172185,172189,172199,172206],{"__ignoreMap":26},[91,172174,172175,172177,172180,172182],{"class":93,"line":94},[91,172176,30818],{"class":153},[91,172178,172179],{"class":250}," datetime ",[91,172181,30473],{"class":153},[91,172183,172184],{"class":250}," datetime\n",[91,172186,172187],{"class":93,"line":38},[91,172188,2523],{"emptyLinePlaceholder":175},[91,172190,172191,172194,172196],{"class":93,"line":1304},[91,172192,172193],{"class":250},"now ",[91,172195,296],{"class":153},[91,172197,172198],{"class":250}," datetime.now()\n",[91,172200,172201,172203],{"class":93,"line":1319},[91,172202,30496],{"class":105},[91,172204,172205],{"class":250},"(now)\n",[91,172207,172208,172210,172213,172216,172218,172221],{"class":93,"line":1325},[91,172209,30496],{"class":105},[91,172211,172212],{"class":250},"(now.strftime(",[91,172214,172215],{"class":101},"\"%Y-%m-",[91,172217,156772],{"class":105},[91,172219,172220],{"class":101}," %H:%M:%S\"",[91,172222,30578],{"class":250},[217,172224,172226],{"id":172225},"_9124-os","9.12.4 os",[82,172228,172230],{"className":30459,"code":172229,"language":30461,"meta":26,"style":26},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[88,172231,172232,172238,172242,172249],{"__ignoreMap":26},[91,172233,172234,172236],{"class":93,"line":94},[91,172235,30473],{"class":153},[91,172237,45386],{"class":250},[91,172239,172240],{"class":93,"line":38},[91,172241,2523],{"emptyLinePlaceholder":175},[91,172243,172244,172246],{"class":93,"line":1304},[91,172245,30496],{"class":105},[91,172247,172248],{"class":250},"(os.getcwd())\n",[91,172250,172251,172253,172256,172259],{"class":93,"line":1319},[91,172252,30496],{"class":105},[91,172254,172255],{"class":250},"(os.listdir(",[91,172257,172258],{"class":101},"\".\"",[91,172260,30578],{"class":250},[217,172262,172264],{"id":172263},"_9125-sys","9.12.5 sys",[82,172266,172268],{"className":30459,"code":172267,"language":30461,"meta":26,"style":26},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[88,172269,172270,172277,172281,172288],{"__ignoreMap":26},[91,172271,172272,172274],{"class":93,"line":94},[91,172273,30473],{"class":153},[91,172275,172276],{"class":250}," sys\n",[91,172278,172279],{"class":93,"line":38},[91,172280,2523],{"emptyLinePlaceholder":175},[91,172282,172283,172285],{"class":93,"line":1304},[91,172284,30496],{"class":105},[91,172286,172287],{"class":250},"(sys.version)\n",[91,172289,172290,172292],{"class":93,"line":1319},[91,172291,30496],{"class":105},[91,172293,172294],{"class":250},"(sys.path)\n",[190,172296,172298,172299,172301,172302,500],{"id":172297},"_913-if-name-main","9.13 if ",[398,172300,79891],{}," == \"",[398,172303,102139],{},[21,172305,172306,172307,172310],{},"模块被直接运行和被导入时，",[88,172308,172309],{},"__name__"," 的值不同。",[21,172312,172313,172314,24741],{},"创建 ",[88,172315,172316],{},"my_module.py",[82,172318,172320],{"className":30459,"code":172319,"language":30461,"meta":26,"style":26},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[88,172321,172322,172330,172340,172344,172348,172360],{"__ignoreMap":26},[91,172323,172324,172326,172328],{"class":93,"line":94},[91,172325,32028],{"class":153},[91,172327,5332],{"class":97},[91,172329,151174],{"class":250},[91,172331,172332,172334,172336,172338],{"class":93,"line":38},[91,172333,4213],{"class":153},[91,172335,10992],{"class":250},[91,172337,730],{"class":153},[91,172339,151185],{"class":250},[91,172341,172342],{"class":93,"line":1304},[91,172343,2523],{"emptyLinePlaceholder":175},[91,172345,172346],{"class":93,"line":1319},[91,172347,2523],{"emptyLinePlaceholder":175},[91,172349,172350,172352,172354,172356,172358],{"class":93,"line":1325},[91,172351,1655],{"class":153},[91,172353,31301],{"class":105},[91,172355,101640],{"class":153},[91,172357,101643],{"class":101},[91,172359,3862],{"class":250},[91,172361,172362,172364,172366,172368,172370,172372],{"class":93,"line":1339},[91,172363,31380],{"class":105},[91,172365,166681],{"class":250},[91,172367,466],{"class":105},[91,172369,12558],{"class":250},[91,172371,327],{"class":105},[91,172373,30578],{"class":250},[21,172375,172376],{},"作用：",[14,172378,172379,172382],{},[17,172380,172381],{},"直接运行该文件时，执行测试代码。",[17,172383,172384],{},"被其他文件导入时，不执行测试代码。",[21,172386,172387],{},"这是写模块时很常用的习惯。",[190,172389,172391],{"id":172390},"_914-包","9.14 包",[21,172393,172394,172395,172398],{},"包是包含 ",[88,172396,172397],{},"__init__.py"," 的目录，用于组织多个模块。",[21,172400,172401],{},"目录结构：",[82,172403,172406],{"className":172404,"code":172405,"language":5310,"meta":26},[5308],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[88,172407,172405],{"__ignoreMap":26},[21,172409,172410],{},"导入：",[82,172412,172414],{"className":30459,"code":172413,"language":30461,"meta":26,"style":26},"from utils.file_utils import read_file\n",[88,172415,172416],{"__ignoreMap":26},[91,172417,172418,172420,172423,172425],{"class":93,"line":94},[91,172419,30818],{"class":153},[91,172421,172422],{"class":250}," utils.file_utils ",[91,172424,30473],{"class":153},[91,172426,172427],{"class":250}," read_file\n",[21,172429,172430,172432],{},[88,172431,172397],{}," 可以为空，也可以写包初始化逻辑。",[190,172434,172436],{"id":172435},"_915-第三方包","9.15 第三方包",[21,172438,172439,172440,172442],{},"第三方包通过 ",[88,172441,23953],{}," 安装。",[82,172444,172446],{"className":84,"code":172445,"language":86,"meta":26,"style":26},"pip install requests\n",[88,172447,172448],{"__ignoreMap":26},[91,172449,172450,172452,172454],{"class":93,"line":94},[91,172451,23953],{"class":97},[91,172453,23956],{"class":101},[91,172455,146179],{"class":101},[21,172457,172458],{},"使用：",[82,172460,172462],{"className":30459,"code":172461,"language":30461,"meta":26,"style":26},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[88,172463,172464,172470,172474,172489],{"__ignoreMap":26},[91,172465,172466,172468],{"class":93,"line":94},[91,172467,30473],{"class":153},[91,172469,146179],{"class":250},[91,172471,172472],{"class":93,"line":38},[91,172473,2523],{"emptyLinePlaceholder":175},[91,172475,172476,172479,172481,172484,172487],{"class":93,"line":1304},[91,172477,172478],{"class":250},"response ",[91,172480,296],{"class":153},[91,172482,172483],{"class":250}," requests.get(",[91,172485,172486],{"class":101},"\"https:\u002F\u002Fwww.example.com\"",[91,172488,257],{"class":250},[91,172490,172491,172493],{"class":93,"line":1319},[91,172492,30496],{"class":105},[91,172494,172495],{"class":250},"(response.status_code)\n",[21,172497,172498],{},"查看已安装包：",[82,172500,172502],{"className":84,"code":172501,"language":86,"meta":26,"style":26},"pip list\n",[88,172503,172504],{"__ignoreMap":26},[91,172505,172506,172508],{"class":93,"line":94},[91,172507,23953],{"class":97},[91,172509,119036],{"class":101},[21,172511,172512],{},"导出项目依赖：",[82,172514,172515],{"className":84,"code":146374,"language":86,"meta":26,"style":26},[88,172516,172517],{"__ignoreMap":26},[91,172518,172519,172521,172523,172525],{"class":93,"line":94},[91,172520,23953],{"class":97},[91,172522,146383],{"class":101},[91,172524,26344],{"class":153},[91,172526,146388],{"class":101},[21,172528,172529],{},"安装项目依赖：",[82,172531,172532],{"className":84,"code":146394,"language":86,"meta":26,"style":26},[88,172533,172534],{"__ignoreMap":26},[91,172535,172536,172538,172540,172542],{"class":93,"line":94},[91,172537,23953],{"class":97},[91,172539,23956],{"class":101},[91,172541,119720],{"class":105},[91,172543,146388],{"class":101},[190,172545,172547],{"id":172546},"_916-模块搜索路径","9.16 模块搜索路径",[21,172549,172550,172551,172554],{},"Python 导入模块时会在 ",[88,172552,172553],{},"sys.path"," 中查找。",[82,172556,172558],{"className":30459,"code":172557,"language":30461,"meta":26,"style":26},"import sys\n\nfor path in sys.path:\n    print(path)\n",[88,172559,172560,172566,172570,172582],{"__ignoreMap":26},[91,172561,172562,172564],{"class":93,"line":94},[91,172563,30473],{"class":153},[91,172565,172276],{"class":250},[91,172567,172568],{"class":93,"line":38},[91,172569,2523],{"emptyLinePlaceholder":175},[91,172571,172572,172574,172577,172579],{"class":93,"line":1304},[91,172573,3148],{"class":153},[91,172575,172576],{"class":250}," path ",[91,172578,26165],{"class":153},[91,172580,172581],{"class":250}," sys.path:\n",[91,172583,172584,172586],{"class":93,"line":1319},[91,172585,31380],{"class":105},[91,172587,169310],{"class":250},[21,172589,172590],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[21,172592,157704],{},[82,172594,172597],{"className":172595,"code":172596,"language":5310,"meta":26},[5308],"random.py\njson.py\ntime.py\n",[88,172598,172596],{"__ignoreMap":26},[21,172600,172601],{},"这些文件名可能导致导入异常。",[190,172603,172605],{"id":172604},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[21,172607,172401],{},[82,172609,172612],{"className":172610,"code":172611,"language":5310,"meta":26},[5308],"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",[88,172613,172611],{"__ignoreMap":26},[21,172615,172616,24741],{},[88,172617,172618],{},"utils\u002Ffile_utils.py",[82,172620,172622],{"className":30459,"code":172621,"language":30461,"meta":26,"style":26},"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",[88,172623,172624,172630,172640,172644,172648,172658,172668,172676,172682,172686,172713,172723,172727,172731,172741,172767],{"__ignoreMap":26},[91,172625,172626,172628],{"class":93,"line":94},[91,172627,30473],{"class":153},[91,172629,147172],{"class":250},[91,172631,172632,172634,172636,172638],{"class":93,"line":38},[91,172633,30818],{"class":153},[91,172635,108392],{"class":250},[91,172637,30473],{"class":153},[91,172639,108397],{"class":250},[91,172641,172642],{"class":93,"line":1304},[91,172643,2523],{"emptyLinePlaceholder":175},[91,172645,172646],{"class":93,"line":1319},[91,172647,2523],{"emptyLinePlaceholder":175},[91,172649,172650,172652,172655],{"class":93,"line":1325},[91,172651,32028],{"class":153},[91,172653,172654],{"class":97}," read_json",[91,172656,172657],{"class":250},"(path):\n",[91,172659,172660,172663,172665],{"class":93,"line":1339},[91,172661,172662],{"class":250},"    path ",[91,172664,296],{"class":153},[91,172666,172667],{"class":250}," Path(path)\n",[91,172669,172670,172672,172674],{"class":93,"line":1345},[91,172671,3224],{"class":153},[91,172673,39011],{"class":153},[91,172675,169391],{"class":250},[91,172677,172678,172680],{"class":93,"line":1436},[91,172679,14875],{"class":153},[91,172681,51919],{"class":250},[91,172683,172684],{"class":93,"line":1442},[91,172685,2523],{"emptyLinePlaceholder":175},[91,172687,172688,172690,172692,172695,172697,172699,172701,172703,172705,172707,172709,172711],{"class":93,"line":1454},[91,172689,34259],{"class":153},[91,172691,146872],{"class":105},[91,172693,172694],{"class":250},"(path, ",[91,172696,146882],{"class":101},[91,172698,12558],{"class":250},[91,172700,146887],{"class":5339},[91,172702,296],{"class":153},[91,172704,146892],{"class":101},[91,172706,13837],{"class":250},[91,172708,31464],{"class":153},[91,172710,148234],{"class":5339},[91,172712,3862],{"class":250},[91,172714,172715,172717,172719,172721],{"class":93,"line":1736},[91,172716,14875],{"class":153},[91,172718,148245],{"class":250},[91,172720,45435],{"class":5339},[91,172722,257],{"class":250},[91,172724,172725],{"class":93,"line":1741},[91,172726,2523],{"emptyLinePlaceholder":175},[91,172728,172729],{"class":93,"line":1747},[91,172730,2523],{"emptyLinePlaceholder":175},[91,172732,172733,172735,172738],{"class":93,"line":1752},[91,172734,32028],{"class":153},[91,172736,172737],{"class":97}," write_json",[91,172739,172740],{"class":250},"(path, data):\n",[91,172742,172743,172745,172747,172749,172751,172753,172755,172757,172759,172761,172763,172765],{"class":93,"line":1766},[91,172744,34259],{"class":153},[91,172746,146872],{"class":105},[91,172748,172694],{"class":250},[91,172750,152057],{"class":101},[91,172752,12558],{"class":250},[91,172754,146887],{"class":5339},[91,172756,296],{"class":153},[91,172758,146892],{"class":101},[91,172760,13837],{"class":250},[91,172762,31464],{"class":153},[91,172764,148234],{"class":5339},[91,172766,3862],{"class":250},[91,172768,172769,172772,172774,172776,172778,172780,172782,172784,172786,172788,172790],{"class":93,"line":1771},[91,172770,172771],{"class":250},"        json.dump(data, ",[91,172773,45435],{"class":5339},[91,172775,12558],{"class":250},[91,172777,147218],{"class":5339},[91,172779,296],{"class":153},[91,172781,34068],{"class":105},[91,172783,12558],{"class":250},[91,172785,152093],{"class":5339},[91,172787,296],{"class":153},[91,172789,327],{"class":105},[91,172791,257],{"class":250},[21,172793,172794,24741],{},[88,172795,154688],{},[82,172797,172799],{"className":30459,"code":172798,"language":30461,"meta":26,"style":26},"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",[88,172800,172801,172812,172816,172829,172849],{"__ignoreMap":26},[91,172802,172803,172805,172807,172809],{"class":93,"line":94},[91,172804,30818],{"class":153},[91,172806,172422],{"class":250},[91,172808,30473],{"class":153},[91,172810,172811],{"class":250}," read_json, write_json\n",[91,172813,172814],{"class":93,"line":38},[91,172815,2523],{"emptyLinePlaceholder":175},[91,172817,172818,172820,172822,172825,172827],{"class":93,"line":1304},[91,172819,159797],{"class":250},[91,172821,296],{"class":153},[91,172823,172824],{"class":250}," read_json(",[91,172826,151912],{"class":101},[91,172828,257],{"class":250},[91,172830,172831,172833,172835,172837,172839,172841,172843,172845,172847],{"class":93,"line":1319},[91,172832,170615],{"class":250},[91,172834,62760],{"class":101},[91,172836,51518],{"class":250},[91,172838,149969],{"class":101},[91,172840,12558],{"class":250},[91,172842,151553],{"class":101},[91,172844,51518],{"class":250},[91,172846,1238],{"class":105},[91,172848,165233],{"class":250},[91,172850,172851,172854,172856],{"class":93,"line":1325},[91,172852,172853],{"class":250},"write_json(",[91,172855,151912],{"class":101},[91,172857,172858],{"class":250},", students)\n",[190,172860,172862],{"id":172861},"_918-易错点","9.18 易错点",[14,172864,172865,172868,172873,172878,172881,172884],{},[17,172866,172867],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[17,172869,172870,172871,28504],{},"能指定异常类型就不要裸写 ",[88,172872,170975],{},[17,172874,172875,172877],{},[88,172876,171350],{}," 无论是否出错都会执行。",[17,172879,172880],{},"模块文件名不要和标准库重名。",[17,172882,172883],{},"导入自己写的模块时，要注意运行目录。",[17,172885,172886],{},"第三方包要安装到当前解释器或虚拟环境中。",[190,172888,172890],{"id":172889},"_919-本章练习","9.19 本章练习",[14,172892,172893,172896,172899,172905,172912],{},[17,172894,172895],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[17,172897,172898],{},"写函数读取文件，如果文件不存在则返回空字符串。",[17,172900,172313,172901,172904],{},[88,172902,172903],{},"math_utils.py","，实现加减乘除函数并导入使用。",[17,172906,172907,172908,172911],{},"创建一个 ",[88,172909,172910],{},"utils"," 包，把 JSON 读写函数放进去。",[17,172913,172914],{},"写一个程序，捕获除零异常和输入格式异常。",[168,172916,172917],{},"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":26,"searchDepth":38,"depth":38,"links":172919},[172920,172921,172922,172923,172924,172925,172926,172927,172928,172929,172930,172936,172943,172945,172946,172947,172948,172949,172950],{"id":170772,"depth":38,"text":170773},{"id":170900,"depth":38,"text":170901},{"id":170949,"depth":38,"text":170950},{"id":171098,"depth":38,"text":171099},{"id":171270,"depth":38,"text":171271},{"id":171339,"depth":38,"text":171340},{"id":171450,"depth":38,"text":171451},{"id":171576,"depth":38,"text":171577},{"id":171701,"depth":38,"text":171702},{"id":171756,"depth":38,"text":171757},{"id":171855,"depth":38,"text":171856,"children":172931},[172932,172933,172934,172935],{"id":171859,"depth":1304,"text":171860},{"id":171893,"depth":1304,"text":171894},{"id":171932,"depth":1304,"text":171933},{"id":172011,"depth":1304,"text":172012},{"id":172034,"depth":38,"text":172035,"children":172937},[172938,172939,172940,172941,172942],{"id":172038,"depth":1304,"text":172039},{"id":172121,"depth":1304,"text":172122},{"id":172166,"depth":1304,"text":172167},{"id":172225,"depth":1304,"text":172226},{"id":172263,"depth":1304,"text":172264},{"id":172297,"depth":38,"text":172944},"9.13 if name == \"main\"",{"id":172390,"depth":38,"text":172391},{"id":172435,"depth":38,"text":172436},{"id":172546,"depth":38,"text":172547},{"id":172604,"depth":38,"text":172605},{"id":172861,"depth":38,"text":172862},{"id":172889,"depth":38,"text":172890},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170764,"description":23500},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172957,"title":172958,"body":172959,"description":173122,"extension":173,"meta":173123,"navigation":175,"path":173124,"seo":173125,"stem":173126,"__hash__":173127},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172960,"toc":173117},[172961,172964,172967,172970,172981,172983,173057,173060,173063,173066,173069,173072,173075,173078,173081,173084,173087],[10,172962,172958],{"id":172963},"python教程",[21,172965,172966],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[21,172968,172969],{},"建议学习环境：",[14,172971,172972,172975,172978],{},[17,172973,172974],{},"Python 版本：Python 3.10 及以上。",[17,172976,172977],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[17,172979,172980],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[190,172982,117159],{"id":117159},[14,172984,172985,172991,172997,173003,173009,173015,173021,173027,173033,173039,173045,173051],{},[17,172986,172987],{},[487,172988,172990],{"href":172989},".\u002Fch1-Python","Python环境与第一个程序",[17,172992,172993],{},[487,172994,172996],{"href":172995},".\u002Fch2","基础语法、变量与字符串",[17,172998,172999],{},[487,173000,173002],{"href":173001},".\u002Fch3","判断语句",[17,173004,173005],{},[487,173006,173008],{"href":173007},".\u002Fch4","循环语句",[17,173010,173011],{},[487,173012,173014],{"href":173013},".\u002Fch5","函数基础",[17,173016,173017],{},[487,173018,173020],{"href":173019},".\u002Fch6","数据容器",[17,173022,173023],{},[487,173024,173026],{"href":173025},".\u002Fch7","函数进阶",[17,173028,173029],{},[487,173030,173032],{"href":173031},".\u002Fch8","文件操作",[17,173034,173035],{},[487,173036,173038],{"href":173037},".\u002Fch9","异常、模块与包",[17,173040,173041],{},[487,173042,173044],{"href":173043},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[17,173046,173047],{},[487,173048,173050],{"href":173049},".\u002Fch11","面向对象基础",[17,173052,173053],{},[487,173054,173056],{"href":173055},".\u002Fch12","综合案例与复习路线",[190,173058,173059],{"id":173059},"学习路线",[21,173061,173062],{},"第一阶段：能运行程序。",[21,173064,173065],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[21,173067,173068],{},"第二阶段：能组织数据。",[21,173070,173071],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[21,173073,173074],{},"第三阶段：能封装逻辑。",[21,173076,173077],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[21,173079,173080],{},"第四阶段：能做小项目。",[21,173082,173083],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[190,173085,173086],{"id":173086},"参考资料",[14,173088,173089,173096,173103,173110],{},[17,173090,173091,173092],{},"黑马程序员 Python 入门教程推荐：",[487,173093,173094],{"href":173094,"rel":173095},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23987],[17,173097,173098,173099],{},"Python 官方中文教程：",[487,173100,173101],{"href":173101,"rel":173102},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23987],[17,173104,173105,173106],{},"Python 标准库文档：",[487,173107,173108],{"href":173108,"rel":173109},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23987],[17,173111,173112,173113],{},"pyecharts 文档：",[487,173114,173115],{"href":173115,"rel":173116},"https:\u002F\u002Fpyecharts.org\u002F",[23987],{"title":26,"searchDepth":38,"depth":38,"links":173118},[173119,173120,173121],{"id":117159,"depth":38,"text":117159},{"id":173059,"depth":38,"text":173059},{"id":173086,"depth":38,"text":173086},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23502},"\u002Fwiki\u002F2024-10-10-python",{"title":172958,"description":173122},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379007]